From e10764c698a476d97a7d2d2e616afbd940759bd3 Mon Sep 17 00:00:00 2001 From: PASQUET Fabien Date: Tue, 14 Mar 2023 18:50:29 +0100 Subject: [PATCH 1/2] feat: add feed RSS --- .gitignore | 1 + bin/prepare.ts | 11 +- package.json | 5 + public/imgs/logo.png | Bin 0 -> 1621 bytes src/config/website/common.ts | 3 +- src/config/website/socialNetworks.ts | 4 +- src/helpers/dataHelper.ts | 41 +++++++- yarn.lock | 146 ++++++++++++++++++++++++++- 8 files changed, 201 insertions(+), 10 deletions(-) create mode 100644 public/imgs/logo.png diff --git a/.gitignore b/.gitignore index 6700bcee6..a7d4a380b 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ dist-ssr public/data public/imgs/posts public/imgs/authors +public/feed.xml diff --git a/bin/prepare.ts b/bin/prepare.ts index f9b358d38..338a410ab 100644 --- a/bin/prepare.ts +++ b/bin/prepare.ts @@ -11,9 +11,9 @@ const copyImgs = (): void => { fs.cpSync(srcDir, outputDir, { recursive: true }); }; -const generateData = async (): Promise => { +const generateDataAndFeeds = async (): Promise => { const baseUrl = process.env.BASE_URL || '/'; - const rootDir = resolve(process.cwd(), 'public', 'data'); + const rootDir = resolve(process.cwd(), 'public'); const vite = await createViteServer({ server: { middlewareMode: true }, base: baseUrl, @@ -21,8 +21,9 @@ const generateData = async (): Promise => { }); try { - const { generateDataFiles } = await vite.ssrLoadModule('/src/helpers/dataHelper.ts'); - generateDataFiles({ rootDir }); + const { generateDataFiles, generateFeedFile } = await vite.ssrLoadModule('/src/helpers/dataHelper.ts'); + generateDataFiles({ rootDir: resolve(rootDir, 'data') }); + generateFeedFile({ rootDir }); } catch (e) { console.error(e); } finally { @@ -32,7 +33,7 @@ const generateData = async (): Promise => { const prepare = (): void => { copyImgs(); - generateData(); + generateDataAndFeeds(); }; prepare(); diff --git a/package.json b/package.json index 0ae22dba9..bff049c07 100644 --- a/package.json +++ b/package.json @@ -67,26 +67,31 @@ "@storybook/testing-library": "^0.0.14-next.1", "@types/express": "^4.17.17", "@types/i18next": "^13.0.0", + "@types/markdown-it": "^12.2.3", "@types/node": "^18.13.0", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@types/react-i18next": "^8.1.0", "@types/react-router-dom": "^5.3.3", "@types/react-syntax-highlighter": "^15.5.6", + "@types/sanitize-html": "^2.8.1", "@vitejs/plugin-react": "^3.1.0", "autoprefixer": "^10.4.13", "babel-loader": "^8.3.0", "date-fns": "^2.29.1", "dotenv": "^16.0.3", "eslint": "^8.27.0", + "feed": "^4.2.2", "gray-matter": "^4.0.3", "husky": "^8.0.3", "lint-staged": "^13.1.2", + "markdown-it": "^13.0.1", "node-sass": "^8.0.0", "postcss": "^8.4.21", "postcss-normalize": "^10.0.1", "postcss-scss": "^4.0.6", "prettier": "^2.7.1", + "sanitize-html": "^2.10.0", "sass": "^1.58.1", "storybook": "^7.0.0-beta.48", "stylelint": "^15.2.0", diff --git a/public/imgs/logo.png b/public/imgs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fee065fc64d706c0f86a82245172e3f8163b9f GIT binary patch literal 1621 zcmV-b2CDgqP)$em37a1)VCN% z?q}3z`8}r>{H!~lp>Aj&o$OWJxhiisZ5EWdM?1R6C6~Qc`nIUMam#7B{jA<{C$c~^LUM`NJ^Z>ngC}nSPmW*?-`9!Km-6#o={N8L zEBcl=HJA`xM zak|!qMi=UnPG?Gppa;$m2U?Rihc^t7g=*8_)HtT-9W;0Zj0e=xhVjfbH0#4ozGDpv}Hrxklb9gm*ISJ4Jtyn ztV`Uhz~XcqvY_2u)i0rf;5&FXLpdw7g9c{m$b4V=1$7K-)|*8x_iTOBC=-A zdQ?jTHyr99*O2Nq@J8V1NwXbd2ku@vF z4+6KVIsKgE$gunYAdA#FhUIP)zBu_r36X8iM%^23k|P-bSy&R`Mi0H;pifF4nNoh{64Q}C@+NW;az^XZw}iuDs6$fF=au%oCwMDP-DI- zCQRP4VT&V&>}^3&jymxs8UJ@i8@XwaZ&1x3Auk3YQyZEX#Jr(RIS^T^I&!*2d6}xC zPtE%7IIfO6zHTTua%6lgt8-2RznR~mT0^?lC#&vhtF$crx#uOJ4Q$?$7sD>NH!Wq~ z@m2R*?&)m0P&(F}C*$>q8^E2qrxT~+!81p{JB-7TSX7<;gv&z@HW}gy-2sn4lW+L? ze?!@?kvek!AACS&S;sG^K3rJb@K1XWXSmah-8xzFIY)Tn?#Rt;1ECqE-E0BxE}McG zz2+`ZUvp)B+$x

TWk&bB)Sh@;iv+xN*>bPy3d=Zir0&z`*HY{TP%jLgbR+*dUz- z*)-@AGHET;zqJ&q%uJ<=TP5PRs2f|(d1;VWHt2mZBrSOc)#=lp?s{<7)suHeNAP#u z4AnQ?6)HEp!SmtL`&`ktileJ?Rl~r4Oc!@7F~A$%a9w-@NlMO# T&9WTp00000NkvXXu0mjfH>nNh literal 0 HcmV?d00001 diff --git a/src/config/website/common.ts b/src/config/website/common.ts index a2ee66424..292a7d1c2 100644 --- a/src/config/website/common.ts +++ b/src/config/website/common.ts @@ -1,4 +1,5 @@ -export const websiteUrl = 'https://eleven-labs.com/'; +export const blogUrl = 'https://blog.eleven-labs.com'; +export const websiteUrl = 'https://eleven-labs.com'; export const newsletterFormUrl = 'http://eepurl.com/cOuOIf'; export const googleSiteVerificationKey = 'google-site-verification'; export const googleAnalytics = { diff --git a/src/config/website/socialNetworks.ts b/src/config/website/socialNetworks.ts index 559b34fb7..99527595e 100644 --- a/src/config/website/socialNetworks.ts +++ b/src/config/website/socialNetworks.ts @@ -4,10 +4,10 @@ export const socialNetworks: { iconName: Extract; url: string; }[] = [ - /*{ + { iconName: 'rss', url: 'https://blog.eleven-labs.com/feed.xml', - },*/ + }, { iconName: 'facebook', url: 'https://www.facebook.com/11Labs', diff --git a/src/helpers/dataHelper.ts b/src/helpers/dataHelper.ts index 9b6ad66da..d845143c6 100644 --- a/src/helpers/dataHelper.ts +++ b/src/helpers/dataHelper.ts @@ -1,8 +1,13 @@ +import { generatePath } from '@remix-run/router'; +import { Feed } from 'feed'; +import MarkdownIt from 'markdown-it'; import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs'; import path from 'node:path'; import { dirname, resolve } from 'node:path'; +import sanitizeHtml from 'sanitize-html'; -import { AUTHORIZED_LANGUAGES, CATEGORIES } from '@/constants'; +import { blogUrl } from '@/config/website'; +import { AUTHORIZED_LANGUAGES, CATEGORIES, PATHS } from '@/constants'; import { getPathFile } from '@/helpers/assetHelper'; import { AuthorType, PostType } from '@/types'; @@ -146,3 +151,37 @@ export const generateDataFiles = (options: { rootDir: string }): void => { }); } }; + +export const generateFeedFile = (options: { rootDir: string }): void => { + const { posts } = getData(); + const parser = new MarkdownIt(); + + const feed = new Feed({ + title: 'Blog Eleven Labs', + description: `L'actualité tech`, + id: blogUrl, + link: blogUrl, + image: `${blogUrl}/imgs/logo.png`, + favicon: `${blogUrl}/favicon.ico`, + copyright: `All rights reserved ${new Date().getFullYear()}, Blog Eleven Labs`, + generator: 'awesome', + author: { + name: 'Eleven Labs', + email: 'contact@eleven-labs.com', + }, + }); + + for (const { lang, slug, ...post } of posts.slice(0, 15)) { + const url = `${blogUrl}${generatePath(PATHS.POST, { lang, slug })}`; + feed.addItem({ + title: post.title, + id: url, + link: url, + date: new Date(post.date), + description: post.excerpt, + content: sanitizeHtml(parser.render(post.content)), + }); + } + + writeFileSync(resolve(options.rootDir, `feed.xml`), feed.rss2()); +}; diff --git a/yarn.lock b/yarn.lock index 6bbc1523d..1d46c7a37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2610,11 +2610,24 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/linkify-it@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" + integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + "@types/lodash@^4.14.167", "@types/lodash@^4.14.175": version "4.14.191" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + "@types/mdast@^3.0.0": version "3.0.10" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" @@ -2622,6 +2635,11 @@ dependencies: "@types/unist" "*" +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + "@types/mdx@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.3.tgz#43fd32414f17fcbeced3578109a6edd877a2d96e" @@ -2757,6 +2775,13 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/sanitize-html@^2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.8.1.tgz#0ed8022777b571e9221557ceb187482641675627" + integrity sha512-Q6kMAbBBaXA5IagoipeSr4Y/zuGyh4BZ5lewgb3cYe3OYqy0k/d67iMsC4O895eks676bVAe9G+0y1i0k2ZlnA== + dependencies: + htmlparser2 "^8.0.0" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -4123,6 +4148,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^4.2.2: + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + default-browser-id@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" @@ -4249,6 +4279,36 @@ dom-accessibility-api@^0.5.9: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.1, domhandler@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dotenv-expand@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" @@ -4336,6 +4396,16 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +entities@^4.2.0, entities@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -4957,6 +5027,13 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + fetch-retry@^5.0.2: version "5.0.4" resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.4.tgz#06e8e4533030bf6faa00ffbb9450cb9264c23c12" @@ -5670,6 +5747,16 @@ html-void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== +htmlparser2@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -6470,6 +6557,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + lint-staged@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.1.2.tgz#443636a0cfd834d5518d57d228130dc04c83d6fb" @@ -6701,6 +6795,17 @@ map-or-similar@^1.5.0: resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== +markdown-it@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== + dependencies: + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + markdown-to-jsx@^7.1.8: version "7.1.9" resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.1.9.tgz#1ffae0cda07c189163d273bd57a5b8f8f8745586" @@ -6776,6 +6881,11 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -7626,6 +7736,11 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -7795,7 +7910,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.21: +postcss@^8.3.11, postcss@^8.4.21: version "8.4.21" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -8508,6 +8623,18 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sanitize-html@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.10.0.tgz#74d28848dfcf72c39693139131895c78900ab452" + integrity sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ== + dependencies: + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^8.0.0" + is-plain-object "^5.0.0" + parse-srcset "^1.0.2" + postcss "^8.3.11" + sanitize.css@*: version "13.0.0" resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" @@ -8532,6 +8659,11 @@ sass@^1.58.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" @@ -9415,6 +9547,11 @@ typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" @@ -9920,6 +10057,13 @@ ws@^8.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From 932370584085c55a08dd498559f5ca933eb08130 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:54:31 +0000 Subject: [PATCH 2/2] Optimised images with calibre/image-actions --- public/imgs/logo.png | Bin 1621 -> 1323 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/imgs/logo.png b/public/imgs/logo.png index e9fee065fc64d706c0f86a82245172e3f8163b9f..f36601687a729bbc71273937a317e1cacc996a29 100644 GIT binary patch delta 1283 zcmV+e1^oKe466!|IDZ7)Nkl|(o(H(Fv6a}2ri#%CV#-?O`|ecfGUrm5xg1{gL?yW zYKL;9X_9t>^+>$p}nrsJhn3s#R7ni18T1!FIvWnTbR3osH8 zkOmNjfI>02#{jJ_0ap{ChQ{h0;7U2jd5`e^O%R;T@P{9QAut;Xl%!u}pP)f$hM7Um z5^&K_;6n+T-Ozr^cBz#x70l1xKAGik|&p5#4XHs}Z#tH@a zZSx5(rYRFXF{AqzQK`BKnuHPE~Q-8s=#Bt4K$*ISGD-w{8-qwH{qWe;; zw-EO)G)C#8UApI9Hv$ovrrcP3pc|(BJCzDuxm~idH2LVVrp#Xx&-^iYu9m@+41}V} zY7^FL`)9s&xUMWc+oPJpXBIKqCTLiWaaCe`g8O~o8V5M96R+hQDa%~ekt^#3w9G-r zR(~fVt(tZ_gTt@>cyL=6td<*jDtp)u^aL<%#?V^=2ff4jU zM4^dLl1>yj>Y0Js96`qhPZC_$JE1vsWH7^d=6NsR>IiUU1nf*-4i4ea^ZCZ$CS)Ch zr_dh)xAheMU32E5C@=RS4;zLBiu^s)9Dj;{9b+^Sc&axqDQQlDTZ6DM&nqXu?V)NU z^JY1xhHH&brcB(gpu9OOQ0BX~l)!5}DGrzILiBeO!0Q!XXN15_#C=T`#NdU%HKO!~ zmL})qf(W{q4#3PDMU-B}XB-c0#o?>u$AMA>rL9?sIgPcHqNe=c5a=Or+khXIbAL90 zcR1BEpfsIwpSSL#{h`w0%Ej@af48F2GuLvbQm58og+^TmhjT5Lf7kT8UT6ppZPf}o z&4|{!m7BzRs}cQ0&@3JX)Db?n5k5B;VDsLyfX~%%pKHG*q=&n1mZJMWu6qM2e}SRG z$8K}M^?e{`6-OQ}v=NqDsO!&KFnjYOlHK#l+a002ovPDHLkV1i56XifkC delta 1584 zcmV-02G9Ac3e^mdIDY^Eb5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1pojA>PbXFRCodH zTJ4eBHV}PG?tj>UkqWF-5T=5t12Yv^uHe{#FBJ%>K$i+6S0JSV$rVUx;ApJ4Yb+t~ zQ_`Kzb8lvcBt8}d-eR!;nV=ilPr&b`ySjVBLO3|tBu<`ye}CQm3eO9}?{L76i%X=u56aT&IN}hpv7Zw7hqECb1e1M6i>+CY5#1 zd(^iWNA73TXZby+7yPU{pP_DOAD!$~-MK1nIBgb`xko#?$R(G(R{FN6yK&2D_dyw> z%6tgkX^qeb#1$v!xdB6NIV4oc9{sG|awoDtG(vKT*nd6zx;%p?Zvsz_U=H8ciPD$y z^IqvU@B=IQmN+$-5MAU_-U5DBu7mQH+pzGl&Q_I4Q8z>}7Tr%w2e`~A9H}3}nd*`Y zp26ink6>}S)`mtG>XS}qN{FBb&JPD#lQ)Mq43ULu)8N!Nrsy88K5jWxSMfXo%g;uo zS?@>24amQn4t(x_EhGwW-{dR6FQJ0qJ9sxkIV-e-24?EWd|&znd{Wk}W#^v%pqoTB zBxzT~!O1@eT#~|y%TWG%RD1Is=Y8e-U-7&U;(z~gvO)E3_dywhYJ3ms8R~h3y4xmW zCT~T?d<=d%-R943;f@7Jk${PmP6Bt_<(fiR#Mj&m-jMdF2R#L+O*xIqu2G*^1$+QA zRp}XgfTY*1g7Xc=&)juGKXe~NpUgmkRb?isOc*Q7;MZ-+dpzdqZ3^1g#EkQ;CN35< z1%F1cWj8$p7R_!p<1!B_Esdn<^%lWkY$I*X(BR&19=UDqz6joT7UWyjQ8c`l=!n0! zCIbDoDT0TtSMEl>Og%RG9%n_2LF-b z5|Fj8ZP}4EE5{E4x2rk*oaD%``~e_~)H#ObZWO*a`9ukkZO%sB8*bx({*e7)hSvw$ zw=Qr4xFeF1$RN7(Jn>e%Q(4C4{SEKFWe>JOrDp?0q%)EaPuKg_o2vGQ7>^lP$A9p3 z*O5=rc#bN{y$P5eQEwOl$6%9)TjTOm3`3WTBtjR!$w^d`>(_2sZ%^(!+NAf^hw@=x z!jBC@cO2J85`2>D69GqbEJEV>ym^b^=puIxKiCEQKCfsfFNE&lU4FQ44%;*;ZGpNm zWkJ522+8wMW4NH!Wq~@m2R*?&)m0P&(F}C*$>q8^E2qrxT~+!81p{JB-7TSbtQV{e;Uy z4>lR%3f%#ZK$CCy`hP>&uaP=({~vrnW?9ECs6Jd+-0)9(4`;a3jNLj}@;OI%;_k@J zZ3CehrQK`+?=G8y8NKE%P+xOpecURYIqGgVTyu@eU-CPM5t1{=mTL zVf`4CEkfjy;n*OZ2H7;|6Mr&kE!4lY6spWjrHfl7;#cO3sJPvK;FG0000