Update Marked dependency
This commit is contained in:
parent
cd67f6a5c5
commit
dafb240517
4 changed files with 124 additions and 56 deletions
12
package-lock.json
generated
12
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "gallery-badmanners-xyz",
|
"name": "gallery-badmanners-xyz",
|
||||||
"version": "1.7.1",
|
"version": "1.7.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "gallery-badmanners-xyz",
|
"name": "gallery-badmanners-xyz",
|
||||||
"version": "1.7.1",
|
"version": "1.7.2",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.2",
|
"@astrojs/check": "^0.9.2",
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
"astro": "^4.13.3",
|
"astro": "^4.13.3",
|
||||||
"astro-pagefind": "^1.6.0",
|
"astro-pagefind": "^1.6.0",
|
||||||
"github-slugger": "^2.0.0",
|
"github-slugger": "^2.0.0",
|
||||||
"marked": "^12.0.2",
|
"marked": "^14.0.0",
|
||||||
"pagefind": "^1.1.0",
|
"pagefind": "^1.1.0",
|
||||||
"reading-time": "^1.5.0",
|
"reading-time": "^1.5.0",
|
||||||
"sanitize-html": "^2.13.0",
|
"sanitize-html": "^2.13.0",
|
||||||
|
@ -4263,9 +4263,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/marked": {
|
"node_modules/marked": {
|
||||||
"version": "12.0.2",
|
"version": "14.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz",
|
||||||
"integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
|
"integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"marked": "bin/marked.js"
|
"marked": "bin/marked.js"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "gallery-badmanners-xyz",
|
"name": "gallery-badmanners-xyz",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "1.7.1",
|
"version": "1.7.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "astro sync",
|
"postinstall": "astro sync",
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
"astro": "^4.13.3",
|
"astro": "^4.13.3",
|
||||||
"astro-pagefind": "^1.6.0",
|
"astro-pagefind": "^1.6.0",
|
||||||
"github-slugger": "^2.0.0",
|
"github-slugger": "^2.0.0",
|
||||||
"marked": "^12.0.2",
|
"marked": "^14.0.0",
|
||||||
"pagefind": "^1.1.0",
|
"pagefind": "^1.1.0",
|
||||||
"reading-time": "^1.5.0",
|
"reading-time": "^1.5.0",
|
||||||
"sanitize-html": "^2.13.0",
|
"sanitize-html": "^2.13.0",
|
||||||
|
|
|
@ -1,33 +1,70 @@
|
||||||
import { Marked, type RendererApi } from "marked";
|
import { Marked, type RendererObject } from "marked";
|
||||||
import { decode } from "tiny-decode";
|
import { decode } from "tiny-decode";
|
||||||
|
|
||||||
const renderer: RendererApi = {
|
const renderer: RendererObject = {
|
||||||
strong: (text) => `[b]${text}[/b]`,
|
code({ text }) {
|
||||||
em: (text) => `[i]${text}[/i]`,
|
return `\n[code]${text}[/code]\n`;
|
||||||
del: (text) => `[s]${text}[/s]`,
|
},
|
||||||
codespan: (code) => code,
|
blockquote({ tokens }) {
|
||||||
br: () => `\n\n`,
|
return `\n[quote]${this.parser.parseInline(tokens)}[/quote]\n`;
|
||||||
link: (href, _, text) => `[url=${href}]${text}[/url]`,
|
},
|
||||||
image: (href) => `[img]${href}[/img]`,
|
html() {
|
||||||
text: (text) => text,
|
|
||||||
paragraph: (text) => `\n${text}\n`,
|
|
||||||
list: (body, ordered) => (ordered ? `\n[ol]\n${body}[/ol]\n` : `\n[ul]\n${body}[/ul]\n`),
|
|
||||||
listitem: (text) => `[li]${text}[/li]\n`,
|
|
||||||
blockquote: (quote) => `\n[quote]${quote}[/quote]\n`,
|
|
||||||
code: (code) => `\n[code]${code}[/code]\n`,
|
|
||||||
heading: (heading) => `\n${heading}\n`,
|
|
||||||
table: (header, body) => `\n[table]\n${header}${body}[/table]\n`,
|
|
||||||
tablerow: (content) => `[tr]\n${content}[/tr]\n`,
|
|
||||||
tablecell: (content, { header }) => (header ? `[th]${content}[/th]\n` : `[td]${content}[/td]\n`),
|
|
||||||
hr: () => `\n===\n`,
|
|
||||||
html: () => {
|
|
||||||
throw new Error("Not supported by BBCode: html");
|
throw new Error("Not supported by BBCode: html");
|
||||||
},
|
},
|
||||||
checkbox: () => {
|
heading({ tokens }) {
|
||||||
|
return `\n${this.parser.parseInline(tokens)}\n`;
|
||||||
|
},
|
||||||
|
hr() {
|
||||||
|
return `\n===\n`;
|
||||||
|
},
|
||||||
|
list({ ordered, items }) {
|
||||||
|
const tag = ordered ? "ol" : "ul";
|
||||||
|
return `\n[${tag}]\n${items.map(this.listitem).join("\n")}[/${tag}]\n`;
|
||||||
|
},
|
||||||
|
listitem({ tokens }) {
|
||||||
|
return `[li]${this.parser.parseInline(tokens)}[/li]\n`;
|
||||||
|
},
|
||||||
|
checkbox() {
|
||||||
throw new Error("Not supported by BBCode: checkbox");
|
throw new Error("Not supported by BBCode: checkbox");
|
||||||
},
|
},
|
||||||
|
paragraph({ tokens }) {
|
||||||
|
return `\n${this.parser.parseInline(tokens)}\n`;
|
||||||
|
},
|
||||||
|
table({ header, rows }) {
|
||||||
|
return `\n[table]\n${this.tablerow({ text: header.map(this.tablecell).join("\n") })}\n${rows
|
||||||
|
.map((row) => this.tablerow({ text: row.map(this.tablecell).join("\n") }))
|
||||||
|
.join("\n")}[/table]\n`;
|
||||||
|
},
|
||||||
|
tablerow({ text }) {
|
||||||
|
return `[tr]\n${text}[/tr]\n`;
|
||||||
|
},
|
||||||
|
tablecell({ header, tokens }) {
|
||||||
|
const tag = header ? "th" : "td";
|
||||||
|
return `[${tag}]${this.parser.parseInline(tokens)}[/${tag}]\n`;
|
||||||
|
},
|
||||||
|
strong({ tokens }) {
|
||||||
|
return `[b]${this.parser.parseInline(tokens)}[/b]`;
|
||||||
|
},
|
||||||
|
em({ tokens }) {
|
||||||
|
return `[i]${this.parser.parseInline(tokens)}[/i]`;
|
||||||
|
},
|
||||||
|
codespan({ text }) {
|
||||||
|
return text;
|
||||||
|
},
|
||||||
|
br() {
|
||||||
|
return "\n\n";
|
||||||
|
},
|
||||||
|
del({ tokens }) {
|
||||||
|
return `[s]${this.parser.parseInline(tokens)}[/s]`;
|
||||||
|
},
|
||||||
|
link({ href, tokens }) {
|
||||||
|
return `[url=${href}]${this.parser.parseInline(tokens)}[/url]`;
|
||||||
|
},
|
||||||
|
image({ href }) {
|
||||||
|
return `[img]${href}[/url]`;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const bbcodeRenderer = new Marked({ renderer, async: false });
|
const bbcodeRenderer = new Marked({ renderer, async: false });
|
||||||
|
|
||||||
export const markdownToBbcode = (text: string) => decode((bbcodeRenderer.parse(text) as string).trim());
|
export const markdownToBbcode = (text: string) => decode(bbcodeRenderer.parse(text, { async: false }).trim());
|
||||||
|
|
|
@ -1,37 +1,68 @@
|
||||||
import { Marked, type RendererApi } from "marked";
|
import { Marked, type RendererObject } from "marked";
|
||||||
import { decode } from "tiny-decode";
|
import { decode } from "tiny-decode";
|
||||||
|
|
||||||
const renderer: RendererApi = {
|
const renderer: RendererObject = {
|
||||||
strong: (text) => text,
|
code({ text }) {
|
||||||
em: (text) => `_${text}_`,
|
return `\n${text}\n`;
|
||||||
codespan: (code) => code,
|
|
||||||
br: () => `\n\n`,
|
|
||||||
link: (_href, _title, text) => text,
|
|
||||||
text: (text) => text,
|
|
||||||
paragraph: (text) => `\n${text}\n`,
|
|
||||||
list: (body) => `\n${body}\n`,
|
|
||||||
listitem: (text) => `- ${text}\n`,
|
|
||||||
blockquote: (quote) => `\n> ${quote}\n`,
|
|
||||||
code: (code) => `\n${code}\n`,
|
|
||||||
heading: (heading) => `\n== ${heading} ==\n`,
|
|
||||||
table: (header, body) => `\n${header}\n---\n${body}\n`,
|
|
||||||
tablerow: (content) => `${content.slice(0, -3)}\n`,
|
|
||||||
tablecell: (content) => `${content} | `,
|
|
||||||
hr: () => `\n***\n`,
|
|
||||||
del: () => {
|
|
||||||
throw new Error("Not supported by plaintext: del");
|
|
||||||
},
|
},
|
||||||
image: () => {
|
blockquote({ tokens }) {
|
||||||
throw new Error("Not supported by plaintext: img");
|
return `\n> ${this.parser.parseInline(tokens)}\n`;
|
||||||
},
|
},
|
||||||
html: () => {
|
html() {
|
||||||
throw new Error("Not supported by plaintext: html");
|
throw new Error("Not supported by plaintext: html");
|
||||||
},
|
},
|
||||||
checkbox: () => {
|
heading({ tokens }) {
|
||||||
|
return `\n== ${this.parser.parseInline(tokens)} ==\n`;
|
||||||
|
},
|
||||||
|
hr() {
|
||||||
|
return `\n***\n`;
|
||||||
|
},
|
||||||
|
list({ items }) {
|
||||||
|
return `\n${items.map(this.listitem).join("\n")}\n`;
|
||||||
|
},
|
||||||
|
listitem({ tokens }) {
|
||||||
|
return `- ${this.parser.parseInline(tokens)}\n`;
|
||||||
|
},
|
||||||
|
checkbox() {
|
||||||
throw new Error("Not supported by plaintext: checkbox");
|
throw new Error("Not supported by plaintext: checkbox");
|
||||||
},
|
},
|
||||||
|
paragraph({ tokens }) {
|
||||||
|
return `\n${this.parser.parseInline(tokens)}\n`;
|
||||||
|
},
|
||||||
|
table({ header, rows }) {
|
||||||
|
return `\n${this.tablerow({ text: header.map(this.tablecell).join(" | ") })}\n---\n${rows
|
||||||
|
.map((row) => this.tablerow({ text: row.map(this.tablecell).join(" | ") }))
|
||||||
|
.join("\n")}\n`;
|
||||||
|
},
|
||||||
|
tablerow({ text }) {
|
||||||
|
return text;
|
||||||
|
},
|
||||||
|
tablecell({ tokens }) {
|
||||||
|
return this.parser.parseInline(tokens);
|
||||||
|
},
|
||||||
|
strong({ tokens }) {
|
||||||
|
return this.parser.parseInline(tokens);
|
||||||
|
},
|
||||||
|
em({ tokens }) {
|
||||||
|
return `_${this.parser.parseInline(tokens)}_`;
|
||||||
|
},
|
||||||
|
codespan({ text }) {
|
||||||
|
return text;
|
||||||
|
},
|
||||||
|
br() {
|
||||||
|
return "\n\n";
|
||||||
|
},
|
||||||
|
del() {
|
||||||
|
throw new Error("Not supported by plaintext: del");
|
||||||
|
},
|
||||||
|
link({ tokens }) {
|
||||||
|
return this.parser.parseInline(tokens);
|
||||||
|
},
|
||||||
|
image() {
|
||||||
|
throw new Error("Not supported by plaintext: img");
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const plaintextRenderer = new Marked({ renderer, async: false });
|
const plaintextRenderer = new Marked({ renderer, async: false });
|
||||||
|
|
||||||
export const markdownToPlaintext = (text: string) => decode((plaintextRenderer.parse(text) as string).trim());
|
export const markdownToPlaintext = (text: string) => decode(plaintextRenderer.parse(text, { async: false }).trim());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue