From cc6091c7a0e9cc5714c5b8e7a46f9fcd33d7e8aa Mon Sep 17 00:00:00 2001 From: Nulo Date: Sat, 11 Nov 2023 23:37:38 -1000 Subject: [PATCH] oops --- .eleventy.js | 50 + .gitignore | 3 - .npmrc | 1 - 2022-11-18 Donweb es ridículo.md | 38 - 404.md | 1 - Atreus v1.md | 3 - CSS: color-scheme.md | 10 - Caddyfile | 156 ++ Cosas.md | 5 - Lua funcional.md | 4 - Lua.md | 4 - Nullificación.md | 3 - README.md | 8 - Tailwind CSS.md | 1 - _includes/base.hbs | 15 + _includes/bookmark.hbs | 19 + buscador.htm => _includes/buscador.hbs | 2 +- _includes/post.hbs | 36 + aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html | 46 - aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html.js | 49 - .../NEWSONG_Pro_ejemplo1.png | 0 .../NEWSONG_Pro_ejemplo2.png | 0 .../NEWSONG_Pro_ejemplo3.png | 0 .../NEWSONG_Pro_ejemplo4.png | 0 .../index.md | 13 +- bookmarks/2021-12-27-kayak-null/index.md | 6 + .../2021-12-27-kayak-null/kayak.jpg | 0 bookmarks/bookmarks.json | 3 + compilar.ts | 380 ----- drip.css | 3 + feeds.js | 28 +- helpers/date.js | 65 + Mi webring.gen.js => index.11tydata.js | 44 +- index.md | 33 +- package.json | 18 +- pnpm-lock.yaml | 1485 ++++++++++++++--- status/404.md | 1 + 502.html => status/502.html | 0 se-cayó.jpg => status/se-cayó.jpg | 0 timer.html | 36 - timer.html.js | 21 - tsconfig.json | 5 +- .../details.mp4 | 0 .../index.md | 70 +- ...2-06-08-Necesitamos seguridad colectiva.md | 0 2022-07-13.md => x/2022-07-13.md | 0 2022-07-16.md => x/2022-07-16.md | 0 ...el teléfono de Fernando André Sabag Montiel.md | 0 .../2022-10-30-Bugs de accesibilidad.md | 0 x/2022-11-18-Donweb es ridículo.md | 40 + .../captura-post.jpg | 0 .../captura-pre.jpg | 0 .../2023-02-05-Vergüenza algorítmica.md | 0 .../2023-04-30-Donweb quiere tu cripto.md | 34 +- .../screenshot-mail.png | 0 Activismo Gordo.md => x/Activismo Gordo.md | 0 Aesthetic.md => x/Aesthetic.md | 0 Alimentación.md => x/Alimentación.md | 0 Alpine Linux.md => x/Alpine Linux.md | 0 Android Auto.md => x/Android Auto.md | 0 Android seguro.md => x/Android seguro.md | 0 Android.md => x/Android.md | 0 .../Antiderechos de autorx.md | 0 Aprender.md => x/Aprender.md | 0 ...ar los archivos de la dictadura militar.md | 0 x/Atreus v1.md | 3 + .../Atreus v1/atrás.jpg | 0 .../Atreus v1/frente.jpg | 0 Atreus v2.md => x/Atreus v2.md | 0 BitTorrent v2.md => x/BitTorrent v2.md | 0 BitTorrent.md => x/BitTorrent.md | 0 Bluetooth.md => x/Bluetooth.md | 0 Bookmarklets.md => x/Bookmarklets.md | 0 Booteables.md => x/Booteables.md | 0 Boox T68.md => x/Boox T68.md | 0 Burn Book.md => x/Burn Book.md | 0 C.md => x/C.md | 0 .../CHINESE GOD OIL/index.md | 2 +- .../CHINESE GOD OIL/tiktok.h264.mp4 | 0 .../CHINESE GOD OIL/tiktok.mp4 | 0 CRDT.md => x/CRDT.md | 0 .../CSS/color-scheme-safari-nulo.ar.jpg | 0 x/CSS/index.md | 14 + Chromium.md => x/Chromium.md | 0 Cocina.md => x/Cocina.md | 0 Comics.md => x/Comics.md | 0 Cooperativas.md => x/Cooperativas.md | 0 x/Cosas.md | 5 + .../Cosas/grafico-hacer-proyecto.jpg | 0 Códigos QR.md => x/Códigos QR.md | 0 DNS.md => x/DNS.md | 0 DecSync.md => x/DecSync.md | 0 Diseño.md => x/Diseño.md | 0 Disroot.md => x/Disroot.md | 0 Donweb.md => x/Donweb.md | 0 Dropbear.md => x/Dropbear.md | 0 E-ink.md => x/E-ink.md | 0 EPUB.md => x/EPUB.md | 0 Electronica.md => x/Electronica.md | 0 Email.md => x/Email.md | 0 Este sitio.md => x/Este sitio.md | 0 ...Experiencing harmful behavior in Alpine.md | 0 .../Fabricación de circuitos impresos.md | 0 Facebook.md => x/Facebook.md | 0 Faircamp.md => x/Faircamp.md | 0 FakeSMTP.md => x/FakeSMTP.md | 0 Firecracker.md => x/Firecracker.md | 0 Forgejo.md => x/Forgejo.md | 0 .../Formatos de texto.md | 0 Fotografía.md => x/Fotografía.md | 0 Fuck WebRTC.md => x/Fuck WebRTC.md | 0 GNOME.md => x/GNOME.md | 0 Git.md => x/Git.md | 0 Gitea.md => x/Gitea.md | 0 Go.md => x/Go.md | 0 GraphHopper.md => x/GraphHopper.md | 0 HTML.md => x/HTML.md | 0 .../Hacks: limpiar servidor.md | 0 HedgeDoc.md => x/HedgeDoc.md | 0 .../Herramienta de monitoreo de medios.md | 0 ...sistema operativo propio en Chromebooks.md | 0 .../Ideas para una web distribuida.md | 0 Ideas.md => x/Ideas.md | 0 Infraestructura.md => x/Infraestructura.md | 0 ...ensurado en escuelas con Plan Sarmiento.md | 0 Inversiones.md => x/Inversiones.md | 0 ...FYING TREATMENT: Underscore's Melodrama.md | 0 Jardin digital.md => x/Jardin digital.md | 0 JavaScript.md => x/JavaScript.md | 0 Javier Milei.md => x/Javier Milei.md | 0 .../Keyboard layouts de pocas teclas.md | 0 .../Leak OSDE 2022-08.md | 0 .../Lenguajes de marcado.md | 0 .../Lenguajes de programación.md | 0 x/Lista de páginas.hbs | 5 + x/Lua.md | 10 + .../Magnets o torrents reproducibles.md | 0 Manjaro.md => x/Manjaro.md | 0 Markdown.md => x/Markdown.md | 0 Marketing.md => x/Marketing.md | 0 Measured boot.md => x/Measured boot.md | 0 .../Menú artístico.gen.js | 0 .../index.md | 4 +- .../pro-micro.jpg | 0 .../Monitoreo de censura de Internet.md | 0 Mozilla.md => x/Mozilla.md | 0 Multimetro.md => x/Multimetro.md | 0 NeoMutt.md => x/NeoMutt.md | 0 Nix.md => x/Nix.md | 0 Njalla caído.md => x/Njalla caído.md | 0 .../Not So Shoujo Love Story.md | 0 Nutrición.md => x/Nutrición.md | 0 Olla a presión.md => x/Olla a presión.md | 0 OnePlus 5T.md => x/OnePlus 5T.md | 0 Opus Encoding.md => x/Opus Encoding.md | 0 PDF.md => x/PDF.md | 0 PWA.md => x/PWA.md | 0 PXE.md => x/PXE.md | 0 Permacomputación.md => x/Permacomputación.md | 0 Piratería.md => x/Piratería.md | 0 Pleroma.md => x/Pleroma.md | 0 .../Producción de música.md | 0 Programación.md => x/Programación.md | 0 ProleText.md => x/ProleText.md | 0 ...tocolo de toma de decisiones Sutty v0.1.md | 0 Proyectos.md => x/Proyectos.md | 0 Python.md => x/Python.md | 0 QEMU.md => x/QEMU.md | 0 Quién soy.md => x/Quién soy.md | 1 - SQLite.md => x/SQLite.md | 0 Salud mental.md => x/Salud mental.md | 0 ... infraestructura de llaves pública (PKI).md | 0 Signal.md => x/Signal.md | 0 Subdivx.md => x/Subdivx.md | 0 Switches.md => x/Switches.md | 0 SyncedStore.md => x/SyncedStore.md | 0 .../Teclados mecánicos.md | 0 Teclados.md => x/Teclados.md | 0 Thinkpad X230.md => x/Thinkpad X230.md | 0 .../Tipear con una mano.md | 0 To-Do lists.md => x/To-Do lists.md | 0 Twitter.md => x/Twitter.md | 0 VPS.md => x/VPS.md | 0 Web.md => x/Web.md | 0 Wikimedia.md => x/Wikimedia.md | 0 XMPP.md => x/XMPP.md | 0 .../YouTube Restricted Mode.md | 0 YouTube.md => x/YouTube.md | 0 curl.md => x/curl.md | 0 simplegit.md => x/simplegit.md | 0 txt2txt.md => x/txt2txt.md | 0 ...ores - skin purifying treatment b sides.md | 0 .../underscores - skin purifying treatment.md | 0 x/x.11tydata.js | 91 + x/x.json | 3 + 195 files changed, 1894 insertions(+), 983 deletions(-) create mode 100644 .eleventy.js delete mode 100644 .npmrc delete mode 100644 2022-11-18 Donweb es ridículo.md delete mode 100644 404.md delete mode 100644 Atreus v1.md delete mode 100644 CSS: color-scheme.md create mode 100644 Caddyfile delete mode 100644 Cosas.md delete mode 100644 Lua funcional.md delete mode 100644 Lua.md delete mode 100644 Nullificación.md delete mode 100644 Tailwind CSS.md create mode 100644 _includes/base.hbs create mode 100644 _includes/bookmark.hbs rename buscador.htm => _includes/buscador.hbs (79%) create mode 100644 _includes/post.hbs delete mode 100644 aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html delete mode 100644 aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html.js rename SONG® Music LLC.md-NEWSONG_Pro_ejemplo1.png => bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo1.png (100%) rename SONG® Music LLC.md-NEWSONG_Pro_ejemplo2.png => bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo2.png (100%) rename SONG® Music LLC.md-NEWSONG_Pro_ejemplo3.png => bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo3.png (100%) rename SONG® Music LLC.md-NEWSONG_Pro_ejemplo4.png => bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo4.png (100%) rename SONG® Music LLC.md => bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/index.md (87%) create mode 100644 bookmarks/2021-12-27-kayak-null/index.md rename Nullificación.md-kayak.jpg => bookmarks/2021-12-27-kayak-null/kayak.jpg (100%) create mode 100644 bookmarks/bookmarks.json delete mode 100644 compilar.ts create mode 100644 helpers/date.js rename Mi webring.gen.js => index.11tydata.js (60%) create mode 100644 status/404.md rename 502.html => status/502.html (100%) rename se-cayó.jpg => status/se-cayó.jpg (100%) delete mode 100644 timer.html delete mode 100644 timer.html.js rename Arreglando bugs ajenos.md-details.mp4 => x/2021-10-11-Arreglando bugs ajenos/details.mp4 (100%) rename Arreglando bugs ajenos.md => x/2021-10-11-Arreglando bugs ajenos/index.md (85%) rename 2022-06-08 Necesitamos seguridad colectiva.md => x/2022-06-08-Necesitamos seguridad colectiva.md (100%) rename 2022-07-13.md => x/2022-07-13.md (100%) rename 2022-07-16.md => x/2022-07-16.md (100%) rename 2022-10-15 Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.md => x/2022-10-15-Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.md (100%) rename 2022-10-30 Bugs de accesibilidad.md => x/2022-10-30-Bugs de accesibilidad.md (100%) create mode 100644 x/2022-11-18-Donweb es ridículo.md rename 2022-11-18 Donweb es ridículo.md-captura-post.jpg => x/2022-11-18-Donweb es ridículo/captura-post.jpg (100%) rename 2022-11-18 Donweb es ridículo.md-captura-pre.jpg => x/2022-11-18-Donweb es ridículo/captura-pre.jpg (100%) rename 2023-02-05 Vergüenza algorítmica.md => x/2023-02-05-Vergüenza algorítmica.md (100%) rename 2023-04-30 Donweb quiere tu cripto.md => x/2023-04-30-Donweb quiere tu cripto.md (69%) rename 2023-04-30 Donweb quiere tu cripto.md-Screenshot from 2023-04-30 16-28-20.png => x/2023-04-30-Donweb quiere tu cripto/screenshot-mail.png (100%) rename Activismo Gordo.md => x/Activismo Gordo.md (100%) rename Aesthetic.md => x/Aesthetic.md (100%) rename Alimentación.md => x/Alimentación.md (100%) rename Alpine Linux.md => x/Alpine Linux.md (100%) rename Android Auto.md => x/Android Auto.md (100%) rename Android seguro.md => x/Android seguro.md (100%) rename Android.md => x/Android.md (100%) rename Antiderechos de autorx.md => x/Antiderechos de autorx.md (100%) rename Aprender.md => x/Aprender.md (100%) rename Archivar los archivos de la dictadura militar.md => x/Archivar los archivos de la dictadura militar.md (100%) create mode 100644 x/Atreus v1.md rename Atreus v1.md-atrás.jpg => x/Atreus v1/atrás.jpg (100%) rename Atreus v1.md-frente.jpg => x/Atreus v1/frente.jpg (100%) rename Atreus v2.md => x/Atreus v2.md (100%) rename BitTorrent v2.md => x/BitTorrent v2.md (100%) rename BitTorrent.md => x/BitTorrent.md (100%) rename Bluetooth.md => x/Bluetooth.md (100%) rename Bookmarklets.md => x/Bookmarklets.md (100%) rename Booteables.md => x/Booteables.md (100%) rename Boox T68.md => x/Boox T68.md (100%) rename Burn Book.md => x/Burn Book.md (100%) rename C.md => x/C.md (100%) rename CHINESE GOD OIL.md => x/CHINESE GOD OIL/index.md (89%) rename CHINESE GOD OIL.md-tiktok.h264.mp4 => x/CHINESE GOD OIL/tiktok.h264.mp4 (100%) rename CHINESE GOD OIL.md-tiktok.mp4 => x/CHINESE GOD OIL/tiktok.mp4 (100%) rename CRDT.md => x/CRDT.md (100%) rename CSS: color-scheme-nulo.ar coso.jpg => x/CSS/color-scheme-safari-nulo.ar.jpg (100%) create mode 100644 x/CSS/index.md rename Chromium.md => x/Chromium.md (100%) rename Cocina.md => x/Cocina.md (100%) rename Comics.md => x/Comics.md (100%) rename Cooperativas.md => x/Cooperativas.md (100%) create mode 100644 x/Cosas.md rename Cosas.md-grafico-hacer-proyecto.jpg => x/Cosas/grafico-hacer-proyecto.jpg (100%) rename Códigos QR.md => x/Códigos QR.md (100%) rename DNS.md => x/DNS.md (100%) rename DecSync.md => x/DecSync.md (100%) rename Diseño.md => x/Diseño.md (100%) rename Disroot.md => x/Disroot.md (100%) rename Donweb.md => x/Donweb.md (100%) rename Dropbear.md => x/Dropbear.md (100%) rename E-ink.md => x/E-ink.md (100%) rename EPUB.md => x/EPUB.md (100%) rename Electronica.md => x/Electronica.md (100%) rename Email.md => x/Email.md (100%) rename Este sitio.md => x/Este sitio.md (100%) rename Experiencing harmful behavior in Alpine.md => x/Experiencing harmful behavior in Alpine.md (100%) rename Fabricación de circuitos impresos.md => x/Fabricación de circuitos impresos.md (100%) rename Facebook.md => x/Facebook.md (100%) rename Faircamp.md => x/Faircamp.md (100%) rename FakeSMTP.md => x/FakeSMTP.md (100%) rename Firecracker.md => x/Firecracker.md (100%) rename Forgejo.md => x/Forgejo.md (100%) rename Formatos de texto.md => x/Formatos de texto.md (100%) rename Fotografía.md => x/Fotografía.md (100%) rename Fuck WebRTC.md => x/Fuck WebRTC.md (100%) rename GNOME.md => x/GNOME.md (100%) rename Git.md => x/Git.md (100%) rename Gitea.md => x/Gitea.md (100%) rename Go.md => x/Go.md (100%) rename GraphHopper.md => x/GraphHopper.md (100%) rename HTML.md => x/HTML.md (100%) rename Hacks: limpiar servidor.md => x/Hacks: limpiar servidor.md (100%) rename HedgeDoc.md => x/HedgeDoc.md (100%) rename Herramienta de monitoreo de medios.md => x/Herramienta de monitoreo de medios.md (100%) rename Ideas para un sistema operativo propio en Chromebooks.md => x/Ideas para un sistema operativo propio en Chromebooks.md (100%) rename Ideas para una web distribuida.md => x/Ideas para una web distribuida.md (100%) rename Ideas.md => x/Ideas.md (100%) rename Infraestructura.md => x/Infraestructura.md (100%) rename Internet censurado en escuelas con Plan Sarmiento.md => x/Internet censurado en escuelas con Plan Sarmiento.md (100%) rename Inversiones.md => x/Inversiones.md (100%) rename Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.md => x/Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.md (100%) rename Jardin digital.md => x/Jardin digital.md (100%) rename JavaScript.md => x/JavaScript.md (100%) rename Javier Milei.md => x/Javier Milei.md (100%) rename Keyboard layouts de pocas teclas.md => x/Keyboard layouts de pocas teclas.md (100%) rename Leak OSDE 2022-08.md => x/Leak OSDE 2022-08.md (100%) rename Lenguajes de marcado.md => x/Lenguajes de marcado.md (100%) rename Lenguajes de programación.md => x/Lenguajes de programación.md (100%) create mode 100644 x/Lista de páginas.hbs create mode 100644 x/Lua.md rename Magnets o torrents reproducibles.md => x/Magnets o torrents reproducibles.md (100%) rename Manjaro.md => x/Manjaro.md (100%) rename Markdown.md => x/Markdown.md (100%) rename Marketing.md => x/Marketing.md (100%) rename Measured boot.md => x/Measured boot.md (100%) rename Menú artístico.gen.js => x/Menú artístico.gen.js (100%) rename Microcontrolador (teclados mecánicos).md => x/Microcontrolador (teclados mecánicos)/index.md (83%) rename Microcontrolador (teclados mecánicos).md-pro-micro.jpg => x/Microcontrolador (teclados mecánicos)/pro-micro.jpg (100%) rename Monitoreo de censura de Internet.md => x/Monitoreo de censura de Internet.md (100%) rename Mozilla.md => x/Mozilla.md (100%) rename Multimetro.md => x/Multimetro.md (100%) rename NeoMutt.md => x/NeoMutt.md (100%) rename Nix.md => x/Nix.md (100%) rename Njalla caído.md => x/Njalla caído.md (100%) rename Not So Shoujo Love Story.md => x/Not So Shoujo Love Story.md (100%) rename Nutrición.md => x/Nutrición.md (100%) rename Olla a presión.md => x/Olla a presión.md (100%) rename OnePlus 5T.md => x/OnePlus 5T.md (100%) rename Opus Encoding.md => x/Opus Encoding.md (100%) rename PDF.md => x/PDF.md (100%) rename PWA.md => x/PWA.md (100%) rename PXE.md => x/PXE.md (100%) rename Permacomputación.md => x/Permacomputación.md (100%) rename Piratería.md => x/Piratería.md (100%) rename Pleroma.md => x/Pleroma.md (100%) rename Producción de música.md => x/Producción de música.md (100%) rename Programación.md => x/Programación.md (100%) rename ProleText.md => x/ProleText.md (100%) rename Protocolo de toma de decisiones Sutty v0.1.md => x/Protocolo de toma de decisiones Sutty v0.1.md (100%) rename Proyectos.md => x/Proyectos.md (100%) rename Python.md => x/Python.md (100%) rename QEMU.md => x/QEMU.md (100%) rename Quién soy.md => x/Quién soy.md (93%) rename SQLite.md => x/SQLite.md (100%) rename Salud mental.md => x/Salud mental.md (100%) rename Seguridad de la infraestructura de llaves pública (PKI).md => x/Seguridad de la infraestructura de llaves pública (PKI).md (100%) rename Signal.md => x/Signal.md (100%) rename Subdivx.md => x/Subdivx.md (100%) rename Switches.md => x/Switches.md (100%) rename SyncedStore.md => x/SyncedStore.md (100%) rename Teclados mecánicos.md => x/Teclados mecánicos.md (100%) rename Teclados.md => x/Teclados.md (100%) rename Thinkpad X230.md => x/Thinkpad X230.md (100%) rename Tipear con una mano.md => x/Tipear con una mano.md (100%) rename To-Do lists.md => x/To-Do lists.md (100%) rename Twitter.md => x/Twitter.md (100%) rename VPS.md => x/VPS.md (100%) rename Web.md => x/Web.md (100%) rename Wikimedia.md => x/Wikimedia.md (100%) rename XMPP.md => x/XMPP.md (100%) rename YouTube Restricted Mode.md => x/YouTube Restricted Mode.md (100%) rename YouTube.md => x/YouTube.md (100%) rename curl.md => x/curl.md (100%) rename simplegit.md => x/simplegit.md (100%) rename txt2txt.md => x/txt2txt.md (100%) rename underscores - skin purifying treatment b sides.md => x/underscores - skin purifying treatment b sides.md (100%) rename underscores - skin purifying treatment.md => x/underscores - skin purifying treatment.md (100%) create mode 100644 x/x.11tydata.js create mode 100644 x/x.json diff --git a/.eleventy.js b/.eleventy.js new file mode 100644 index 0000000..a47a280 --- /dev/null +++ b/.eleventy.js @@ -0,0 +1,50 @@ +const { basename } = require("path"); +const { EleventyHtmlBasePlugin } = require("@11ty/eleventy"); +const automaticNoopener = require("eleventy-plugin-automatic-noopener"); +const markdownItWikilinks = require("markdown-it-wikilinks")({ + uriSuffix: "", + postProcessPagePath: (path) => path, + postProcessLabel: (path) => basename(path).match(/^(?:(?:\d{4})-(?:\d{2})-(?:\d{2})-)?(.+)$/)[1], + relativeBaseURL: "../", +}); +const { formatDate } = require("./helpers/date"); + +/** + * @param {import("@11ty/eleventy").UserConfig} eleventyConfig + */ +module.exports = function config(eleventyConfig) { + eleventyConfig.addPassthroughCopy("drip.css"); + eleventyConfig.addPassthroughCopy("cowboy.svg"); + eleventyConfig.addPassthroughCopy("status/*"); + eleventyConfig.addPassthroughCopy("x/**/*.png"); + eleventyConfig.addPassthroughCopy("x/**/*.jpg"); + eleventyConfig.addPassthroughCopy("x/**/*.mp4"); + eleventyConfig.addPassthroughCopy("bookmarks/**/*.png"); + eleventyConfig.addPassthroughCopy("bookmarks/**/*.jpg"); + eleventyConfig.addPassthroughCopy("bookmarks/**/*.mp4"); + + eleventyConfig.addPlugin(EleventyHtmlBasePlugin); + eleventyConfig.addPlugin(automaticNoopener, { + noreferrer: false, + }); + + eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(markdownItWikilinks)); + + eleventyConfig.addCollection("x", (collectionApi) => collectionApi.getFilteredByGlob("x/**/*")); + + eleventyConfig.addShortcode( + "dateToISO", + /** @param {Date} date */ (date) => date.toISOString().slice(0, 10) + ); + eleventyConfig.addShortcode("formatDate", formatDate); + eleventyConfig.addShortcode("relativeLink", (link, baseUrl) => new URL(link, baseUrl).toString()); + + // eleventyConfig.addShortcode("formatDateish", formatDateish); + // eleventyConfig.addShortcode("dateishToElement", dateishToElement); + + return { + dir: { + output: "build", + }, + }; +}; diff --git a/.gitignore b/.gitignore index 3de66d0..e4b91cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,4 @@ build/ node_modules/ -build-js/ .env -cache/ -rootfs/ .pnpm-store/ diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 97c56e9..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -@nulo:registry=https://gitea.nulo.in/api/packages/nulo/npm/ diff --git a/2022-11-18 Donweb es ridículo.md b/2022-11-18 Donweb es ridículo.md deleted file mode 100644 index 4bb1811..0000000 --- a/2022-11-18 Donweb es ridículo.md +++ /dev/null @@ -1,38 +0,0 @@ -_[Parte 2](2023-04-30%20Donweb%20quiere%20tu%20cripto.html)_ - -Hace unos días compre el "Cloud Server" (VPS) más barato que ofrece [[Donweb]] para experimentar ya que no había visto hosting en Argentina tan barato antes. No ofrecían la posibilidad de bootear distros alternativas a las que te ofrecen (Debian, Ubuntu, CentOS y Rocky) que me pareció raro, pero todo se puede hackear. - -Me pareció raro/sospechoso que la instalación de Debian por defecto venía con las llaves SSH de muchisimxs empleadxs de Donweb en el authorized_keys de root dandoles acceso de superusuario, por lo que las borré. - -Bootié una imágen de otro de mis proyectos experimentales, [define-alpine](https://gitea.nulo.in/Nulo/define-alpine), ya que quería ver que tan complicado era hacerlo funcionar en un entorno poco flexible como este. Por las 23 horas, lo logré, mandando esta captura de pantalla de victoria a un amigo: - -![Captura de pantalla de una terminal de Linux con una sesión recién iniciada](2022-11-18%20Donweb%20es%20ridículo.md-captura-pre.jpg) - -Me fui a dormir victorioso. Al día siguiente, por las 10 de la mañana, recibo este mail: - ->Buenos días! como estas? espero que te encuentres muy bien! Tomo contacto contigo en esta ocasión para informarte que deberás re-crear el cloud correspondiente ya que has Instalado otro SO arriba de la imagen provista y no esta permitido. -> ->Saludos cordiales, -> ->Quedo a tu disposición y te agradezco califiques mi respuesta porque nos ayudará a mejorar la calidad de atención. -> ->
---------------------------------------------

->[CENSURADO]
->Cloud & IaaS Technical Support - Donweb.cloud
->
---------------------------------------------
- -En ese momento estaba encerrado en una institución educativa, pero mi amigo descubrió que efectivamente sus terminos y condiciones lo prohibian entre otras cosas. - ->Se incluye en este punto también cualquier otra información que DonWeb by Dattatec considere inapropiada según su absoluto y exclusivo criterio. Cualquier uso indebido de los servicios autorizará a DonWeb by Dattatec a la suspensión o eliminación de los servicios contratados y sus contenidos sin previo aviso, no haciéndose responsable DonWeb by Dattatec por cualquier pérdida que esto implique. - ->El servidor deberá responder a SNMP (http://es.wikipedia.org/wiki/Simple_Network_Management_Protocol) desde ciertas IPs utilizadas por DonWeb by Dattatec para monitoreo del servicio las cuales son asignadas en la configuracion al momento del alta. El cliente no deberá desinstalar el servicio SNMP ni modificar su configuracion. - ->DonWeb by Dattatec se reserva el derecho de suspender el servicio en cualquier momento en caso de detectar alguna anormalidad en las configuraciones antes mencionadas y no poder acceder al servidor para realizar las correcciones necesarias. - ->IMPORTANTE: Una vez adquirido el Cloud Server, el cliente tiene la posibilidad de instalar cualquier imagen de los SO ofrecidos que se ajuste a sus necesidades. No obstante, el cliente debe abstenerse de instalar (o pisar una instalación) con una distribución y/o Sistema Operativo distinto a los ofrecidos en el catálogo de imágenes de DonWeb. DonWeb se reserva el derecho de suspender sin previo aviso el servicio en caso que se detecte lo antes mencionado o cualquier acción que comprometa la seguridad e integridad del servicio o la compañía. - -DonYuta o RatiWeb, bue. Cuando logre escapar de dicha institución educativa y llegué a mi computador portable, descubrí que Donweb se había tomado la libertad de entrar al VNC de mi servidor a clavarse unos comandos: - -![Captura de pantalla de una terminal de Linux con varios comandos consultando información sobre el sistema operativo que corría, entre otras cosas](2022-11-18%20Donweb%20es%20ridículo.md-captura-post.jpg) - -No recomiendo. diff --git a/404.md b/404.md deleted file mode 100644 index 70f2e2d..0000000 --- a/404.md +++ /dev/null @@ -1 +0,0 @@ -No encontré esta página... Quizás me podrías [avisar](Contacto.html). o/ diff --git a/Atreus v1.md b/Atreus v1.md deleted file mode 100644 index 4bdae94..0000000 --- a/Atreus v1.md +++ /dev/null @@ -1,3 +0,0 @@ -![Foto del Atreus v1 de frente](Atreus%20v1.md-frente.jpg) - -![Foto del Atreus v1 de atrás, exponiendo sus cables interiores](Atreus%20v1.md-atrás.jpg) diff --git a/CSS: color-scheme.md b/CSS: color-scheme.md deleted file mode 100644 index 335ad52..0000000 --- a/CSS: color-scheme.md +++ /dev/null @@ -1,10 +0,0 @@ -[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme) - -Es una propiedad de CSS que indica en que colores se puede renderizar tu sitio. Si especificas `color-scheme: dark`, los navegadores automáticamente cambian los colores del fondo, el texto, los inputs, etc para ajustarse a eso. - -Sin embargo, Safari elije colores pésimos: - -
- -
nulo.ar antes de que especifique colores para los links
-
diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..1d0de80 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,156 @@ +{ + http_port 8080 +} + +localhost:8443 { + log + file_server browse + root * ./build + + redir "/Microcontrolador (teclados mecánicos).html" "/x/Microcontrolador%20(teclados%20mec%C3%A1nicos)/" + redir "/Monitoreo de censura de Internet.html" "/x/Monitoreo%20de%20censura%20de%20Internet/" + redir "/Mozilla.html" "/x/Mozilla/" + redir "/2022-06-08 Necesitamos seguridad colectiva.html" "/x/2022-06-08-Necesitamos%20seguridad%20colectiva/" + redir "/2022-07-13.html" "/x/2022-07-13/" + redir "/2022-07-16.html" "/x/2022-07-16/" + redir "/2022-10-15 Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.html" "/x/2022-10-15-Analisis%20de%20la%20extracci%C3%B3n%20de%20datos%20del%20tel%C3%A9fono%20de%20Fernando%20Andr%C3%A9%20Sabag%20Montiel/" + redir "/2022-10-30 Bugs de accesibilidad.html" "/x/2022-10-30-Bugs%20de%20accesibilidad/" + redir "/2022-11-18 Donweb es ridículo.html" "/x/2022-11-18-Donweb%20es%20rid%C3%ADculo/" + redir "/2023-04-30 Donweb quiere tu cripto.html" "/x/2023-04-30-Donweb%20quiere%20tu%20cripto/" + redir "/404.html" "/x/404/" + redir "/Activismo Gordo.html" "/x/Activismo%20Gordo/" + redir "/Aesthetic.html" "/x/Aesthetic/" + redir "/Alimentación.html" "/x/Alimentaci%C3%B3n/" + redir "/Alpine Linux.html" "/x/Alpine%20Linux/" + redir "/Android.html" "/x/Android/" + redir "/Android Auto.html" "/x/Android%20Auto/" + redir "/Android seguro.html" "/x/Android%20seguro/" + redir "/Antiderechos de autorx.html" "/x/Antiderechos%20de%20autorx/" + redir "/Aprender.html" "/x/Aprender/" + redir "/Archivar los archivos de la dictadura militar.html" "/x/Archivar%20los%20archivos%20de%20la%20dictadura%20militar/" + redir "/2023-02-05 Vergüenza algorítmica.html" "/x/2023-02-05-Verg%C3%BCenza%20algor%C3%ADtmica/" + redir "/Arreglando bugs ajenos.html" "/x/2021-10-11-Arreglando%20bugs%20ajenos/" + redir "/Atreus v1.html" "/x/Atreus%20v1/" + redir "/Atreus v2.html" "/x/Atreus%20v2/" + redir "/BitTorrent.html" "/x/BitTorrent/" + redir "/BitTorrent v2.html" "/x/BitTorrent%20v2/" + redir "/Bluetooth.html" "/x/Bluetooth/" + redir "/Bookmarklets.html" "/x/Bookmarklets/" + redir "/Booteables.html" "/x/Booteables/" + redir "/Boox T68.html" "/x/Boox%20T68/" + redir "/Burn Book.html" "/x/Burn%20Book/" + redir "/C.html" "/x/C/" + redir "/CHINESE GOD OIL.html" "/x/CHINESE%20GOD%20OIL/" + redir "/Chromium.html" "/x/Chromium/" + redir "/Cocina.html" "/x/Cocina/" + redir "/Códigos QR.html" "/x/C%C3%B3digos%20QR/" + redir "/Comics.html" "/x/Comics/" + redir "/Cooperativas.html" "/x/Cooperativas/" + redir "/Cosas.html" "/x/Cosas/" + redir "/CRDT.html" "/x/CRDT/" + redir "/CSS: color-scheme.html" "/x/CSS/" + redir "/curl.html" "/x/curl/" + redir "/DecSync.html" "/x/DecSync/" + redir "/Diseño.html" "/x/Dise%C3%B1o/" + redir "/Disroot.html" "/x/Disroot/" + redir "/DNS.html" "/x/DNS/" + redir "/Donweb.html" "/x/Donweb/" + redir "/Dropbear.html" "/x/Dropbear/" + redir "/E-ink.html" "/x/E-ink/" + redir "/Electronica.html" "/x/Electronica/" + redir "/Email.html" "/x/Email/" + redir "/EPUB.html" "/x/EPUB/" + redir "/Este sitio.html" "/x/Este%20sitio/" + redir "/Experiencing harmful behavior in Alpine.html" "/x/Experiencing%20harmful%20behavior%20in%20Alpine/" + redir "/Fabricación de circuitos impresos.html" "/x/Fabricaci%C3%B3n%20de%20circuitos%20impresos/" + redir "/Facebook.html" "/x/Facebook/" + redir "/Faircamp.html" "/x/Faircamp/" + redir "/FakeSMTP.html" "/x/FakeSMTP/" + redir "/Firecracker.html" "/x/Firecracker/" + redir "/Forgejo.html" "/x/Forgejo/" + redir "/Formatos de texto.html" "/x/Formatos%20de%20texto/" + redir "/Fotografía.html" "/x/Fotograf%C3%ADa/" + redir "/Fuck WebRTC.html" "/x/Fuck%20WebRTC/" + redir "/Git.html" "/x/Git/" + redir "/Gitea.html" "/x/Gitea/" + redir "/GNOME.html" "/x/GNOME/" + redir "/Go.html" "/x/Go/" + redir "/GraphHopper.html" "/x/GraphHopper/" + redir "/Hacks: limpiar servidor.html" "/x/Hacks:%20limpiar%20servidor/" + redir "/HedgeDoc.html" "/x/HedgeDoc/" + redir "/Herramienta de monitoreo de medios.html" "/x/Herramienta%20de%20monitoreo%20de%20medios/" + redir "/HTML.html" "/x/HTML/" + redir "/Ideas.html" "/x/Ideas/" + redir "/Ideas para un sistema operativo propio en Chromebooks.html" "/x/Ideas%20para%20un%20sistema%20operativo%20propio%20en%20Chromebooks/" + redir "/Ideas para una web distribuida.html" "/x/Ideas%20para%20una%20web%20distribuida/" + redir "/Infraestructura.html" "/x/Infraestructura/" + redir "/Internet censurado en escuelas con Plan Sarmiento.html" "/x/Internet%20censurado%20en%20escuelas%20con%20Plan%20Sarmiento/" + redir "/Inversiones.html" "/x/Inversiones/" + redir "/Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.html" "/x/Jackson%20Burns%20-%20SKIN%20PURIFYING%20TREATMENT:%20Underscore's%20Melodrama/" + redir "/Jardin digital.html" "/x/Jardin%20digital/" + redir "/JavaScript.html" "/x/JavaScript/" + redir "/Javier Milei.html" "/x/Javier%20Milei/" + redir "/Keyboard layouts de pocas teclas.html" "/x/Keyboard%20layouts%20de%20pocas%20teclas/" + redir "/Leak OSDE 2022-08.html" "/x/Leak%20OSDE%202022-08/" + redir "/Lenguajes de marcado.html" "/x/Lenguajes%20de%20marcado/" + redir "/Lenguajes de programación.html" "/x/Lenguajes%20de%20programaci%C3%B3n/" + redir "/Lua.html" "/x/Lua/" + redir "/Lua funcional.html" "/x/Lua/" + redir "/Magnets o torrents reproducibles.html" "/x/Magnets%20o%20torrents%20reproducibles/" + redir "/Manjaro.html" "/x/Manjaro/" + redir "/Markdown.html" "/x/Markdown/" + redir "/Marketing.html" "/x/Marketing/" + redir "/Measured boot.html" "/x/Measured%20boot/" + redir "/Menú artístico.gen.html" "/x/Men%C3%BA%20art%C3%ADstico.gen/" + redir "/Mi webring.gen.html" "/" + redir "/Multimetro.html" "/x/Multimetro/" + redir "/NeoMutt.html" "/x/NeoMutt/" + redir "/Nix.html" "/x/Nix/" + redir "/Njalla caído.html" "/x/Njalla%20ca%C3%ADdo/" + redir "/Not So Shoujo Love Story.html" "/x/Not%20So%20Shoujo%20Love%20Story/" + redir "/Nullificación.html" "/bookmarks/2021-12-27-kayak-null/" + redir "/Nutrición.html" "/x/Nutrici%C3%B3n/" + redir "/Olla a presión.html" "/x/Olla%20a%20presi%C3%B3n/" + redir "/OnePlus 5T.html" "/x/OnePlus%205T/" + redir "/Opus Encoding.html" "/x/Opus%20Encoding/" + redir "/PDF.html" "/x/PDF/" + redir "/README.html" "/x/README/" + redir "/Salud mental.html" "/x/Salud%20mental/" + redir "/Seguridad de la infraestructura de llaves pública (PKI).html" "/x/Seguridad%20de%20la%20infraestructura%20de%20llaves%20p%C3%BAblica%20(PKI)/" + redir "/Signal.html" "/x/Signal/" + redir "/simplegit.html" "/x/simplegit/" + redir "/SONG® Music LLC.html" "/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/" + redir "/SQLite.html" "/x/SQLite/" + redir "/Subdivx.html" "/x/Subdivx/" + redir "/Switches.html" "/x/Switches/" + redir "/SyncedStore.html" "/x/SyncedStore/" + redir "/Tailwind CSS.html" "/x/CSS/" + redir "/Teclados.html" "/x/Teclados/" + redir "/Teclados mecánicos.html" "/x/Teclados%20mec%C3%A1nicos/" + redir "/Thinkpad X230.html" "/x/Thinkpad%20X230/" + redir "/Tipear con una mano.html" "/x/Tipear%20con%20una%20mano/" + redir "/To-Do lists.html" "/x/To-Do%20lists/" + redir "/Permacomputación.html" "/x/Permacomputaci%C3%B3n/" + redir "/Piratería.html" "/x/Pirater%C3%ADa/" + redir "/Pleroma.html" "/x/Pleroma/" + redir "/Producción de música.html" "/x/Producci%C3%B3n%20de%20m%C3%BAsica/" + redir "/Programación.html" "/x/Programaci%C3%B3n/" + redir "/ProleText.html" "/x/ProleText/" + redir "/Protocolo de toma de decisiones Sutty v0.1.html" "/x/Protocolo%20de%20toma%20de%20decisiones%20Sutty%20v0.1/" + redir "/Proyectos.html" "/x/Proyectos/" + redir "/PWA.html" "/x/PWA/" + redir "/PXE.html" "/x/PXE/" + redir "/Python.html" "/x/Python/" + redir "/QEMU.html" "/x/QEMU/" + redir "/Twitter.html" "/x/Twitter/" + redir "/txt2txt.html" "/x/txt2txt/" + redir "/underscores - skin purifying treatment.html" "/x/underscores%20-%20skin%20purifying%20treatment/" + redir "/underscores - skin purifying treatment b sides.html" "/x/underscores%20-%20skin%20purifying%20treatment%20b%20sides/" + redir "/VPS.html" "/x/VPS/" + redir "/Web.html" "/x/Web/" + redir "/Wikimedia.html" "/x/Wikimedia/" + redir "/XMPP.html" "/x/XMPP/" + redir "/YouTube.html" "/x/YouTube/" + redir "/Quién soy.html" "/x/Qui%C3%A9n%20soy/" + redir "/YouTube Restricted Mode.html" "/x/YouTube%20Restricted%20Mode/" +} diff --git a/Cosas.md b/Cosas.md deleted file mode 100644 index e450227..0000000 --- a/Cosas.md +++ /dev/null @@ -1,5 +0,0 @@ -- [words that cost nothing to scrub from your vocabulary, and maybe you get a tiny sliver of your soul back:
-content -> art/video/music/comics/games etc, whatever the actual media is
-consume -> watch/listen/read/play etc
-IP -> franchise, series, universe, property](https://twitter.com/vectorpoem/status/1575183167497023490) -- ![Gráfico si deberías hacer proyecto](Cosas.md-grafico-hacer-proyecto.jpg) diff --git a/Lua funcional.md b/Lua funcional.md deleted file mode 100644 index ee3de66..0000000 --- a/Lua funcional.md +++ /dev/null @@ -1,4 +0,0 @@ -- [luafun/luafun](https://github.com/luafun/luafun) (enfoque en performance dentro de LuaJIT) -- [lua-stdlib/functional](https://github.com/lua-stdlib/functional) -- [ezerfernandes/funkmoon](https://github.com/ezerfernandes/funkmoon) -- [jhoonb/functional-lua](https://github.com/jhoonb/functional-lua) diff --git a/Lua.md b/Lua.md deleted file mode 100644 index e3b9d5e..0000000 --- a/Lua.md +++ /dev/null @@ -1,4 +0,0 @@ -- [[Lua funcional]] -- [lua-stdlib/lua-stdlib](https://github.com/lua-stdlib/lua-stdlib) -- [gvvaughan/typecheck](https://github.com/gvvaughan/typecheck) -- [lua-stdlib/strict](https://github.com/lua-stdlib/strict) chequea que hayas definido las variables diff --git a/Nullificación.md b/Nullificación.md deleted file mode 100644 index 9f2c6f4..0000000 --- a/Nullificación.md +++ /dev/null @@ -1,3 +0,0 @@ -- ![Una captura de pantalla de un sitio de pasajes de avión (KAYAK) que dice "Alright! You're off to null." (¡Listo! Ya estás para ir a nulo.)](Nullificación.md-kayak.jpg) - - [twitter.com/RReverser](https://twitter.com/RReverser/status/1466813271000981508) diff --git a/README.md b/README.md index 171385d..879cb42 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,5 @@ Este es el README para [el repositorio del sitio](https://gitea.nulo.in/Nulo/sitio). -## Compilar - -Require [Zig](https://ziglang.org), shell, cmark (con cmark-dev) y Lua 5.1. - -``` -zig run compilar.zig -lc -lcmark -``` - --- [![Una captura de pantalla de unos mensajes diciendo "pero ponele css nulo, una linea tirate"](pero%20ponele%20css.png)](https://copiona.com) diff --git a/Tailwind CSS.md b/Tailwind CSS.md deleted file mode 100644 index a3fbda2..0000000 --- a/Tailwind CSS.md +++ /dev/null @@ -1 +0,0 @@ -- [Pines - An Alpine and Tailwind UI Library](https://devdojo.com/pines) diff --git a/_includes/base.hbs b/_includes/base.hbs new file mode 100644 index 0000000..a6bbc2d --- /dev/null +++ b/_includes/base.hbs @@ -0,0 +1,15 @@ + + + + + + + + + + + + {{page.title}} + + {{{content}}} + \ No newline at end of file diff --git a/_includes/bookmark.hbs b/_includes/bookmark.hbs new file mode 100644 index 0000000..c1780d8 --- /dev/null +++ b/_includes/bookmark.hbs @@ -0,0 +1,19 @@ +--- +layout: base.hbs +--- + +
+
+ +

{{link}}

+

{{page.fileSlug}}

+
+
+ {{{content}}} +
+
\ No newline at end of file diff --git a/buscador.htm b/_includes/buscador.hbs similarity index 79% rename from buscador.htm rename to _includes/buscador.hbs index 068f7d1..f01b236 100644 --- a/buscador.htm +++ b/_includes/buscador.hbs @@ -1,4 +1,4 @@ - + diff --git a/aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html.js b/aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html.js deleted file mode 100644 index f6eea68..0000000 --- a/aaaaaaaaaaaaaaaaaaaaaaaaaaarainbow.html.js +++ /dev/null @@ -1,49 +0,0 @@ -// @ts-nocheck -const canvas = document.querySelector("canvas"); -const ctx = canvas.getContext("2d", { - alpha: false, -}); - -function resizeCanvas() { - canvas.width = window.innerWidth; - canvas.height = window.innerHeight; -} -window.addEventListener("resize", resizeCanvas); -resizeCanvas(); - -function setupInput(inputId, setFunc) { - const input = document.getElementById(inputId); - input.addEventListener("input", (event) => { - setFunc(parseFloat(event.target.value)); - }); - setFunc(parseFloat(input.value)); -} - -let rect = { width: 50, height: 100 }; -let diff = { x: 1, y: 1 }; - -setupInput("rect-width", (val) => (rect.width = val)); -setupInput("rect-height", (val) => (rect.height = val)); - -setupInput("diff-x", (val) => (diff.x = val)); -setupInput("diff-y", (val) => (diff.y = val)); - -function draw(time) { - const i = time / 10; - - ctx.clearRect(0, 0, canvas.width, canvas.height); - - const actualDiff = { x: diff.x / rect.width, y: diff.y / rect.height }; - - for (let x = 0; x < canvas.width; x += rect.width) { - for (let y = 0; y < canvas.height; y += rect.height) { - ctx.fillStyle = `hsl(${ - i + (x / rect.width) * actualDiff.x + (y / rect.height) * actualDiff.y - }, 100%, 50%)`; - ctx.fillRect(x, y, rect.width, rect.height); - } - } - - window.requestAnimationFrame(draw); -} -window.requestAnimationFrame(draw); diff --git a/SONG® Music LLC.md-NEWSONG_Pro_ejemplo1.png b/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo1.png similarity index 100% rename from SONG® Music LLC.md-NEWSONG_Pro_ejemplo1.png rename to bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo1.png diff --git a/SONG® Music LLC.md-NEWSONG_Pro_ejemplo2.png b/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo2.png similarity index 100% rename from SONG® Music LLC.md-NEWSONG_Pro_ejemplo2.png rename to bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo2.png diff --git a/SONG® Music LLC.md-NEWSONG_Pro_ejemplo3.png b/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo3.png similarity index 100% rename from SONG® Music LLC.md-NEWSONG_Pro_ejemplo3.png rename to bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo3.png diff --git a/SONG® Music LLC.md-NEWSONG_Pro_ejemplo4.png b/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo4.png similarity index 100% rename from SONG® Music LLC.md-NEWSONG_Pro_ejemplo4.png rename to bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/NEWSONG_Pro_ejemplo4.png diff --git a/SONG® Music LLC.md b/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/index.md similarity index 87% rename from SONG® Music LLC.md rename to bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/index.md index 1c2b824..ea3cb4b 100644 --- a/SONG® Music LLC.md +++ b/bookmarks/2021-12-17-SONG® Music LLC: NEWSONG® Pro+/index.md @@ -1,3 +1,8 @@ +--- +link: "https://newso.ng/musiccypher" +tags: diseño +--- + SONG® Music LLC. es "un sello discográfico y una plataforma de distriverificacíon con sede en Nueva York, NY". Es una subsidiaria de Parent Company©.[songm.us][songm.us] [songm.us]: https://songm.us "El sitio de SONG® Music LLC" @@ -7,7 +12,7 @@ SONG® Music LLC. es "un sello discográfico y una plataforma de distriverificac El sitio para elegir donde escuchar canciones de la discográfica genera opciones exclusivas para desbloquear con "NEWSONG® Pro+".[newso.ng/musiccypher][newso.ng/musiccypher]
- Unlock with NEWSONG® Pro+ with three options: Paulstretch this song, Pitch to Zedd and H&M In-Store Playlister + Unlock with NEWSONG® Pro+ with three options: Paulstretch this song, Pitch to Zedd and H&M In-Store Playlister
- "Paulestirar" esta canción ([un método de estirar una canción sin cambiarle el tono](https://manual.audacityteam.org/man/paulstretch.html)) @@ -17,7 +22,7 @@ El sitio para elegir donde escuchar canciones de la discográfica genera opcione
- Unlock with NEWSONG® Pro+ with five options: Review on RateYourMusic, Rebirth in Correct Generation, Direct-to-CDJ Sync (sponsored), Create TikTok Audio (No Attribution) and thissongissick.com Premiere (sponsored) + Unlock with NEWSONG® Pro+ with five options: Review on RateYourMusic, Rebirth in Correct Generation, Direct-to-CDJ Sync (sponsored), Create TikTok Audio (No Attribution) and thissongissick.com Premiere (sponsored)
- Opinar en RateYourMusic @@ -29,7 +34,7 @@ El sitio para elegir donde escuchar canciones de la discográfica genera opcione
- Unlock with NEWSONG® Pro+ with three options: Sync to iPod Nano, AirDrop (Contacts Only) (sponsored) and Generate Type Beat of this audio + Unlock with NEWSONG® Pro+ with three options: Sync to iPod Nano, AirDrop (Contacts Only) (sponsored) and Generate Type Beat of this audio
- Sincronizar a iPod Nano @@ -39,7 +44,7 @@ El sitio para elegir donde escuchar canciones de la discográfica genera opcione
- Unlock with NEWSONG® Pro+ with four options: Request a Masterclass from this artist, Send to Kindle (sponsored), Archive this track on Discogs.com and Guitar Tabs + Unlock with NEWSONG® Pro+ with four options: Request a Masterclass from this artist, Send to Kindle (sponsored), Archive this track on Discogs.com and Guitar Tabs
- Pedir una Masterclass de este artista (Masterclass es una empresa en donde artistas reconocidxs pueden dar clases en línea por precios absurdos) diff --git a/bookmarks/2021-12-27-kayak-null/index.md b/bookmarks/2021-12-27-kayak-null/index.md new file mode 100644 index 0000000..15af1be --- /dev/null +++ b/bookmarks/2021-12-27-kayak-null/index.md @@ -0,0 +1,6 @@ +--- +link: https://twitter.com/RReverser/status/1466813271000981508 +tags: nullificación +--- + +![Una captura de pantalla de un sitio de pasajes de avión (KAYAK) que dice "Alright! You're off to null." (¡Listo! Ya estás para ir a nulo.)](kayak.jpg) diff --git a/Nullificación.md-kayak.jpg b/bookmarks/2021-12-27-kayak-null/kayak.jpg similarity index 100% rename from Nullificación.md-kayak.jpg rename to bookmarks/2021-12-27-kayak-null/kayak.jpg diff --git a/bookmarks/bookmarks.json b/bookmarks/bookmarks.json new file mode 100644 index 0000000..3fda30e --- /dev/null +++ b/bookmarks/bookmarks.json @@ -0,0 +1,3 @@ +{ + "layout": "bookmark.hbs" +} \ No newline at end of file diff --git a/compilar.ts b/compilar.ts deleted file mode 100644 index ae6dc9c..0000000 --- a/compilar.ts +++ /dev/null @@ -1,380 +0,0 @@ -import { copyFile, mkdir, opendir, readFile, readdir, writeFile } from "fs/promises"; -import { basename, extname, join } from "path"; -import * as commonmark from "commonmark"; -import { - a, - h1, - header, - section, - li, - link, - meta, - metaUtf8, - render, - Renderable, - title, - ul, - h2, - raw, - VirtualElement, - time, - article, - main, - img, - nav, -} from "@nulo/html.js"; - -const reader = new commonmark.Parser({ smart: true }); -const writer = new commonmark.HtmlRenderer({ safe: false, smart: true }); - -const dateFormatter = new Intl.DateTimeFormat("es-AR", { - weekday: "long", - day: "numeric", - month: "long", - year: "numeric", -}); - -const wikilinkExp = /\[\[(.+?)\]\]/giu; - -interface Config { - sourcePath: string; - buildPath: string; -} -const config: Config = { - sourcePath: ".", - buildPath: "build", -}; - -const buscadorHtml = await readFile("buscador.htm", "utf-8"); - -const connections = await scanForConnections(config.sourcePath); - -await mkdir(config.buildPath, { recursive: true }); - -const dir = await readdir(config.sourcePath, { withFileTypes: true }); -let pageList: { src: string }[] = []; -for (const entry of dir) { - if (!entry.isFile()) continue; - const { name } = entry; - const extension = extname(name); - - if ([".ts", ".md", ".css", ".js", ".png", ".jpg", ".mp4", ".svg", ".html"].includes(extension)) { - await copyFile(join(config.sourcePath, name), join(config.buildPath, name)); - } - - if ([".md"].includes(extension) || name.endsWith(".gen.js")) { - pageList.push({ src: name }); - } -} -await Promise.all(pageList.map(({ src }) => compilePage(config, src))); - -await compilePageList(config, pageList); - -async function compileFile( - config: Config, - sourceFileName: string, -): Promise<{ contentHtml: string; image?: Image }> { - if (extname(sourceFileName) === ".md") { - const { html: contentHtml, image } = await compileMarkdownHtml(config, sourceFileName); - return { contentHtml, image }; - } else if (sourceFileName.endsWith(".gen.js")) { - const contentHtml = await compileJavascript(config, sourceFileName); - return { contentHtml }; - } else if (sourceFileName.endsWith(".htm")) - return { contentHtml: await readFile(sourceFileName, "utf-8") }; - else throw false; -} - -async function compilePage(config: Config, sourceFileName: string) { - const name = basename(sourceFileName, extname(sourceFileName)); - const isIndex = name === "index"; - const title = isIndex ? "nulo.ar" : formatNameToPlainText(name); - const fileConnections = connections.filter(({ linked }) => linked === name); - - const { contentHtml, image } = await compileFile(config, sourceFileName); - - const html = renderHtml( - ...generateHead(title, name), - article( - { itemscope: "", itemtype: "https://schema.org/Article" }, - ...(isIndex ? [] : generateHeader(name, sourceFileName, fileConnections.length > 0, image)), - main({ itemprop: "articleBody", "data-pagefind-body": "" }, raw(contentHtml)), - ...generateConnectionsSection(fileConnections), - ), - ); - - const outputPath = join(config.buildPath, name + ".html"); - await writeFile(outputPath, html); -} - -// ============================================== -// Get HTML -// ============================================== - -type Image = { - src: string; - alt: string; -}; - -async function compileMarkdownHtml( - config: Config, - sourceFileName: string, -): Promise<{ html: string; image?: Image }> { - let markdown = await readFile(join(config.sourcePath, sourceFileName), "utf-8"); - - let image; - if (markdown.startsWith("!!")) { - const node = reader.parse(markdown.slice(1, markdown.indexOf("\n"))); - const imageNode = node.firstChild?.firstChild; - if (!imageNode || !imageNode.destination) - throw new Error("Intenté parsear un ^!! pero no era una imágen"); - if (!imageNode.firstChild?.literal) console.warn(`El ^!! de ${sourceFileName} no tiene alt`); - - image = { - src: imageNode.destination, - alt: imageNode.firstChild?.literal || "", - }; - markdown = markdown.slice(markdown.indexOf("\n")); - } - - const parsed = reader.parse(markdown); - const markdownHtml = writer.render(parsed); - - checkLinks(sourceFileName, markdownHtml); - const contentHtml = await hackilyTransformHtml(markdownHtml); - return { html: contentHtml, image }; -} - -async function compileJavascript(config: Config, sourceFileName: string): Promise { - const fn = await import("./" + join(config.sourcePath, sourceFileName)); - return await fn.default(); -} - -// ============================================== -// Generated HTML -// ============================================== - -function renderHtml(...world: Renderable[]): string { - return `` + render(...world) + ""; -} - -function generateHead(titlee: string, outputName: string): Renderable[] { - // TODO: deshardcodear og:url - return [ - metaUtf8, - meta({ - name: "viewport", - content: "width=device-width, initial-scale=1.0", - }), - meta({ name: "author", content: "Nulo" }), - meta({ property: "og:title", content: titlee }), - meta({ property: "og:type", content: "website" }), - meta({ property: "og:url", content: `https://nulo.ar/${outputName}.html` }), - meta({ property: "og:image", content: "cowboy.svg" }), - link({ rel: "stylesheet", href: "drip.css" }), - link({ rel: "icon", href: "cowboy.svg" }), - title(titlee), - ]; -} - -function formatDate(dateish: Dateish, upper: boolean = false): string { - const date = new Date(dateish.year, dateish.month - 1, dateish.day); - const formatted = dateFormatter.format(date); - if (upper) { - // no le digan a la policía del unicode! - return formatted[0].toUpperCase() + formatted.slice(1); - } else return formatted; -} - -interface Dateish { - year: number; - month: number; - day: number; -} -function dateishToString({ year, month, day }: Dateish): string { - return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`; -} - -type TitleMetadata = - | { - // title puede tener length == 0 y por lo tanto ser falseish - title: string; - date?: Dateish; - } - | { date: Dateish }; -function parseName(name: string): TitleMetadata { - const titleWithDate = /^((?\d{4})-(?\d{2})-(?\d{2}))? ?(?.*)$/; - - const found = name.match(titleWithDate); - if (!found || !found.groups) throw new Error("Algo raro pasó"); - const { title } = found.groups; - - const date = - (found.groups.year && { - year: parseInt(found.groups.year), - month: parseInt(found.groups.month), - day: parseInt(found.groups.day), - }) || - undefined; - // no definir title si es length == 0 - if (!title && date) return { date }; - return { title, date }; -} - -function dateishToElement( - dateish: Dateish, - { itemprop, upper }: { itemprop?: string; upper?: boolean } = {}, -): VirtualElement { - return time( - { datetime: dateishToString(dateish), ...(itemprop ? { itemprop } : {}) }, - formatDate(dateish, upper), - ); -} - -function formatNameToInline(name: string): Renderable[] { - const parsed = parseName(name); - if ("title" in parsed) { - const { title, date } = parsed; - return [title, ...(date ? [` (`, dateishToElement(date), `)`] : [])]; - } else { - return [dateishToElement(parsed.date, { upper: true })]; - } -} -function formatNameToPlainText(name: string): string { - const parsed = parseName(name); - if ("title" in parsed) { - const { title, date } = parsed; - return title + (date ? ` (${formatDate(date)})` : ""); - } else { - return formatDate(parsed.date, true); - } -} - -function generateHeader( - name: string, - sourceCodePath: string, - linkConexiones = false, - image?: Image, -): Renderable[] { - const parsedTitle = parseName(name); - return [ - nav(a({ href: "." }, "☚ Volver al inicio"), raw(buscadorHtml)), - header( - ...(image ? [img({ ...image, itemprop: "image" })] : []), - ...("title" in parsedTitle - ? [ - h1(parsedTitle.title), - ...(parsedTitle.date - ? [ - dateishToElement(parsedTitle.date, { - itemprop: "datePublished", - }), - " / ", - ] - : []), - ] - : [ - h1( - dateishToElement(parsedTitle.date, { - itemprop: "datePublished", - upper: true, - }), - ), - ]), - a( - { - href: `https://gitea.nulo.in/Nulo/sitio/commits/branch/ANTIFASCISTA/${sourceCodePath}`, - }, - "Historial", - ), - ...(linkConexiones ? [" / ", a({ href: "#conexiones" }, "Conexiones")] : []), - ), - ]; -} - -function generateConnectionsSection(fileConnections: Connection[]): Renderable[] { - return fileConnections.length > 0 - ? [ - section( - { id: "conexiones" }, - h2(`⥆ Conexiones (${fileConnections.length})`), - ul(...fileConnections.map(({ linker }) => li(internalLink(linker)))), - ), - ] - : []; -} - -async function compilePageList(config: Config, pageList: { src: string }[]) { - const name = "Lista de páginas"; - const outputPath = join(config.buildPath, name + ".html"); - const html = renderHtml( - ...generateHead(name, name), - ...generateHeader(name, "compilar.ts"), - ul( - ...pageList - .map(({ src: name }) => basename(name, extname(name))) - .sort((a, b) => a.localeCompare(b, "es", { sensitivity: "base" })) - .map((name) => li(internalLink(name))), - ), - ); - await writeFile(outputPath, html); -} - -// ============================================== -// Conexiones -// ============================================== - -interface Connection { - linked: string; - linker: string; -} - -async function scanForConnections(sourcePath: string): Promise<Connection[]> { - const dir = await opendir(sourcePath); - let connections: Connection[] = []; - for await (const entry of dir) { - const extension = extname(entry.name); - if (extension === ".md") { - const name = basename(entry.name, ".md"); - const file = await readFile(join(config.sourcePath, entry.name), "utf-8"); - for (const [, linked] of file.matchAll(wikilinkExp)) { - connections.push({ linked, linker: name }); - } - } - } - return connections; -} - -// ============================================== -// Markdown utils -// ============================================== - -async function hackilyTransformHtml(html: string): Promise<string> { - html = html - .replaceAll("<a h", '<a rel="noopener noreferrer" h') - .replaceAll(wikilinkExp, (_, l) => render(internalLink(l))); - for (const [match, archivo] of html.matchAll(/<nulo-sitio-reemplazar-con archivo="(.+?)" \/>/g)) { - html = html.replace(match, (await compileFile(config, archivo)).contentHtml); - } - return html; -} - -function checkLinks(srcName: string, html: string) { - const matches = html.matchAll(wikilinkExp); - const list = pageList.map(({ src }) => basename(src, extname(src))); - if (!matches) return; - for (const match of matches) { - if (!list.some((n) => n === match[1])) { - console.warn(`${srcName} linkea a ${match[1]}, pero no existe`); - } - } -} - -// ============================================== -// Linking -// ============================================== - -function internalLink(path: string): VirtualElement { - const href = encodeURI(`./${path}.html`); - return a({ href }, ...formatNameToInline(path)); -} diff --git a/drip.css b/drip.css index 65b2baf..53c5911 100644 --- a/drip.css +++ b/drip.css @@ -93,3 +93,6 @@ li { padding: 1rem; border: 1px solid; } +#search form { + margin: 0; +} diff --git a/feeds.js b/feeds.js index a075362..450983a 100644 --- a/feeds.js +++ b/feeds.js @@ -1,7 +1,7 @@ -import { readFile, writeFile } from "fs/promises"; -import { join } from "path"; +const { readFile, writeFile } = require("fs/promises"); +const { join } = require("path"); -export const feeds = { +const feeds = { fauno: "https://fauno.endefensadelsl.org/feed.xml", copiona: "https://copiona.com/feed.xml", j3s: "https://j3s.sh/feed.atom", @@ -11,14 +11,16 @@ export const feeds = { }; if (process.argv[2] === "refresh") { - await Promise.all( - Object.entries(feeds).map(async ([name, url]) => { - console.log(`Refreshing ${name}`); - const res = await fetch(url); - const txt = await res.text(); - await writeFile(join("cached-feeds/", `${name}.xml`), txt); - }), - ); + (async () => { + await Promise.all( + Object.entries(feeds).map(async ([name, url]) => { + console.log(`Refreshing ${name}`); + const res = await fetch(url); + const txt = await res.text(); + await writeFile(join("cached-feeds/", `${name}.xml`), txt); + }) + ); + })(); } /** @@ -26,6 +28,8 @@ if (process.argv[2] === "refresh") { * @param {string} name * @returns string */ -export async function readFeed(name) { +async function readFeed(name) { return await readFile(join("cached-feeds/", name + ".xml"), "utf-8"); } + +module.exports = { feeds, readFeed }; diff --git a/helpers/date.js b/helpers/date.js new file mode 100644 index 0000000..9ea57b1 --- /dev/null +++ b/helpers/date.js @@ -0,0 +1,65 @@ +const z = require("zod"); + +const dateishExp = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/; +const zDateish = z + .string() + .regex(dateishExp) + .transform((s) => { + const found = s.match(dateishExp); + return { + year: parseInt(found.groups.year), + month: parseInt(found.groups.month), + day: parseInt(found.groups.day), + }; + }); +/** @typedef {z.infer<zDateish>} Dateish */ + +const dateFormatter = new Intl.DateTimeFormat("es-AR", { + weekday: "long", + day: "numeric", + month: "long", + year: "numeric", + timeZone: "UTC", +}); +/** + * @param {Dateish} dateish + * @returns Date + */ +function dateishToDate(dateish) { + return new Date(dateish.year, dateish.month - 1, dateish.day); +} +/** + * @param {Date} date + * @param {boolean} upper + * @returns string + */ +function formatDate(date, upper = false) { + const formatted = dateFormatter.format(date); + if (upper) { + // no le digan a la policía del unicode! + return formatted[0].toUpperCase() + formatted.slice(1); + } else return formatted; +} + +/** + * @param {Dateish} dateis + * @returns string + */ +function dateishToString({ year, month, day }) { + return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`; +} + +// /** +// * @param {Dateish} dateish +// * @param {{ itemprop?: string, upper?: boolean }} params +// * @returns string +// */ +// function dateishToElement(dateish, { itemprop, upper } = {}) { +// const itempropParam = (itemprop && ` itemprop="${itemprop}"`) || ""; +// return `<time datetime="${dateishToString(dateish)}" ${itempropParam}>${formatDate( +// dateishToDate(dateish), +// upper +// )}</time>`; +// } + +module.exports = { formatDate, zDateish, dateishToDate }; diff --git a/Mi webring.gen.js b/index.11tydata.js similarity index 60% rename from Mi webring.gen.js rename to index.11tydata.js index 473988f..b531ac5 100644 --- a/Mi webring.gen.js +++ b/index.11tydata.js @@ -1,43 +1,19 @@ -import path from "node:path"; -import { readFile } from "node:fs/promises"; -import { parseFeed as _parseFeed } from "htmlparser2"; -import { a, li, raw, render, ul } from "@nulo/html.js"; -import { parseDocument } from "htmlparser2"; -import { getElementsByTagName } from "domutils"; -import { feeds, readFeed } from "./feeds.js"; +const { parseFeed: _parseFeed } = require("htmlparser2"); +const { parseDocument } = require("htmlparser2"); +const { getElementsByTagName } = require("domutils"); +const { feeds, readFeed } = require("./feeds.js"); -export default async () => { +module.exports = async () => { const articles = []; for (const [name, baseUrl] of Object.entries(feeds)) { - /** - * @param {string} link - * @returns string - */ - const relativeLink = (link) => new URL(link, baseUrl).toString(); - const rawFeed = await readFeed(name); const { title, item, link } = parseFeed(baseUrl, rawFeed); - articles.push( - li( - { class: "article" }, - a( - { - href: relativeLink(item.link), - target: "_blank", - rel: "noopener", - }, - item.title, - ), - // TODO: format date - " via ", - a({ href: relativeLink(link), rel: "noopener" }, title), - ), - ); + articles.push({ title, item, link, baseUrl }); } - return render(ul(...articles)); + return { articles }; }; /** @@ -53,19 +29,19 @@ function parseFeed(feedUrl, rawFeed) { const feedDom = getElementsByTagName( (n) => n === "rss" || n === "feed" || n === "rdf:RDF", dom.childNodes, - false, + false )[0]; const linksDom = getElementsByTagName( (t) => ["link", "atom:link"].includes(t), feedDom.childNodes, - false, + false ); const linkDom = linksDom.find( (d) => d.attribs.rel === "alternate" || // https://datatracker.ietf.org/doc/html/rfc4287#section-4.2.7.2 // >If the "rel" attribute is not present, the link element MUST be interpreted as if the link relation type is "alternate". - !("rel" in d.attribs), + !("rel" in d.attribs) ); const feedUrll = new URL(feedUrl); diff --git a/index.md b/index.md index 6f37429..2a4dd4e 100644 --- a/index.md +++ b/index.md @@ -1,19 +1,24 @@ +--- +layout: base.hbs +templateEngineOverride: hbs,md +--- + <h1 class="main-title">nulo❥ar</h1> > What's bizarre? I mean, we're all pretty bizarre.<br>Some of us are just better at hiding it, that's all. -<nulo-sitio-reemplazar-con archivo="buscador.htm" /> +{{> buscador}} -¡Buenas! Este es mi mundo, bienvenidx. ¿Que, [[Quién soy]]? Soy Nulo :) +¡Buenas! Este es mi mundo, bienvenidx. ¿Que, [[/x/Quién soy]]? Soy Nulo :) -- Perdete en la [[Lista de páginas]] +- Perdete en la [[/x/Lista de páginas]] Algunas cosas que escribí: -- [[2023-04-30 Donweb quiere tu cripto]] -- [[2023-02-05 Vergüenza algorítmica]] -- [[2022-10-15 Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel]] -- [[Arreglando bugs ajenos]] +- [[/x/2023-04-30-Donweb quiere tu cripto]] +- [[/x/2023-02-05-Vergüenza algorítmica]] +- [[/x/2022-10-15-Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel]] +- [[/x/2021-10-11-Arreglando bugs ajenos]] Algunas cosas que hice: @@ -24,7 +29,7 @@ Algunas cosas que hice: - [Schreiben](https://beta.schreiben.nulo.ar): una aplicación para escribir cosas ([código](https://gitea.nulo.in/Nulo/schreiben)) - Laburos: - [Salvá la costanera](https://salva-la-costanera.netlify.app/), [código](https://gitea.nulo.in/Nulo/salva-la-costanera) -- Y otros [[Proyectos]]. +- Y otros [[/x/Proyectos]]. Algunas cosas de las que soy parte: @@ -35,9 +40,17 @@ Algunos links mios: - <a rel="me noopener noreferrer" href="https://todon.eu/@Nulo">Mastodon</a> - Mis [repositorios de código en Gitea](https://gitea.nulo.in/Nulo) y en [GitHub](https://github.com/catdevnull) -## Feed de personas que me parecen copadas ([[Mi webring.gen]]) +## Feed de personas que me parecen copadas (un webring) -<nulo-sitio-reemplazar-con archivo="Mi webring.gen.js" /> +<ul> + {{#each articles as |article|}} + <li class="article"> + <a href="{{relativeLink article.item.link article.baseUrl}}" target="_blank" rel="noopener">{{article.item.title}}</a> + via + <a href="{{article.link}}">{{article.title}}</a> + </li> + {{/each}} +</ul> ## Contacto diff --git a/package.json b/package.json index 7722da3..4f325d4 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "sitio", - "type": "module", + "//type": "module", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { - "build": "esbuild compilar.ts *.js --target=node18 --outdir=build-js --sourcemap && node --enable-source-maps --trace-uncaught build-js/compilar.js && pagefind --source build", - "build-bun": "bun build compilar.ts --target bun > build-js/bun.js && bun build-js/bun.js && pagefind --source build", + "pagefind": "pagefind --source build", + "build": "eleventy && pnpm pagefind", + "watch": "eleventy --watch", "check": "tsc", "refresh-feeds": "node feeds.js refresh" }, @@ -14,16 +15,17 @@ "author": "", "license": "ISC", "devDependencies": { + "@11ty/eleventy": "^2.0.1", "@types/commonmark": "^0.27.5", "@types/node": "^18.11.18", - "esbuild": "^0.16.17", - "typescript": "^4.9.4" + "typescript": "^5.2.2" }, "dependencies": { - "@nulo/html.js": "^0.0.8", - "commonmark": "^0.30.0", "domutils": "^3.0.1", + "eleventy-plugin-automatic-noopener": "^2.0.2", "htmlparser2": "^8.0.2", - "pagefind": "^0.12.0" + "markdown-it-wikilinks": "^1.4.0", + "pagefind": "^0.12.0", + "zod": "^3.22.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9dfa092..0c00c45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,248 +5,200 @@ settings: excludeLinksFromLockfile: false dependencies: - '@nulo/html.js': - specifier: ^0.0.8 - version: 0.0.8 - commonmark: - specifier: ^0.30.0 - version: 0.30.0 domutils: specifier: ^3.0.1 version: 3.0.1 + eleventy-plugin-automatic-noopener: + specifier: ^2.0.2 + version: 2.0.2(@11ty/eleventy@2.0.1) htmlparser2: specifier: ^8.0.2 version: 8.0.2 + markdown-it-wikilinks: + specifier: ^1.4.0 + version: 1.4.0 pagefind: specifier: ^0.12.0 version: 0.12.0 + zod: + specifier: ^3.22.4 + version: 3.22.4 devDependencies: + '@11ty/eleventy': + specifier: ^2.0.1 + version: 2.0.1 '@types/commonmark': specifier: ^0.27.5 version: 0.27.5 '@types/node': specifier: ^18.11.18 version: 18.11.18 - esbuild: - specifier: ^0.16.17 - version: 0.16.17 typescript: - specifier: ^4.9.4 - version: 4.9.4 + specifier: ^5.2.2 + version: 5.2.2 packages: - /@esbuild/android-arm64@0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + /@11ty/dependency-tree@2.0.1: + resolution: {integrity: sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==} - /@esbuild/android-arm@0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true + /@11ty/eleventy-dev-server@1.0.4: + resolution: {integrity: sha512-qVBmV2G1KF/0o5B/3fITlrrDHy4bONUI2YuN3/WJ3BNw4NU1d/we8XhKrlgq13nNvHoBx5czYp3LZt8qRG53Fg==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@11ty/eleventy-utils': 1.0.2 + chokidar: 3.5.3 + debug: 4.3.4 + dev-ip: 1.0.1 + finalhandler: 1.2.0 + mime: 3.0.0 + minimist: 1.2.8 + morphdom: 2.7.1 + please-upgrade-node: 3.2.0 + ssri: 8.0.1 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /@esbuild/android-x64@0.16.17: - resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} + /@11ty/eleventy-utils@1.0.2: + resolution: {integrity: sha512-Zy2leMK1DQR6Q6ZPSagv7QpJaAz9uVbb+RmVetYFp3foMeQtOSZx7w2u5daRFmP+PeNq9vO9H4xtBToYFWZwHA==} engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + dependencies: + normalize-path: 3.0.0 - /@esbuild/darwin-arm64@0.16.17: - resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /@11ty/eleventy@2.0.1: + resolution: {integrity: sha512-t8XVUbCJByhVEa1RzO0zS2QzbL3wPY8ot1yUw9noqiSHxJWUwv6jiwm1/MZDPTYtkZH2ZHvdQIRQ5/SjG9XmLw==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@11ty/dependency-tree': 2.0.1 + '@11ty/eleventy-dev-server': 1.0.4 + '@11ty/eleventy-utils': 1.0.2 + '@11ty/lodash-custom': 4.17.21 + '@iarna/toml': 2.2.5 + '@sindresorhus/slugify': 1.1.2 + bcp-47-normalize: 1.1.1 + chokidar: 3.5.3 + cross-spawn: 7.0.3 + debug: 4.3.4 + dependency-graph: 0.11.0 + ejs: 3.1.9 + fast-glob: 3.3.2 + graceful-fs: 4.2.11 + gray-matter: 4.0.3 + hamljs: 0.6.2 + handlebars: 4.7.8 + is-glob: 4.0.3 + iso-639-1: 2.1.15 + kleur: 4.1.5 + liquidjs: 10.9.4 + luxon: 3.4.3 + markdown-it: 13.0.2 + micromatch: 4.0.5 + minimist: 1.2.8 + moo: 0.5.2 + multimatch: 5.0.0 + mustache: 4.2.0 + normalize-path: 3.0.0 + nunjucks: 3.2.4(chokidar@3.5.3) + path-to-regexp: 6.2.1 + please-upgrade-node: 3.2.0 + posthtml: 0.16.6 + posthtml-urls: 1.0.0 + pug: 3.0.2 + recursive-copy: 2.0.14 + semver: 7.5.4 + slugify: 1.6.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /@esbuild/darwin-x64@0.16.17: - resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /@11ty/lodash-custom@4.17.21: + resolution: {integrity: sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==} + engines: {node: '>=14'} - /@esbuild/freebsd-arm64@0.16.17: - resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} - /@esbuild/freebsd-x64@0.16.17: - resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} - /@esbuild/linux-arm64@0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 - /@esbuild/linux-arm@0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 - /@esbuild/linux-ia32@0.16.17: - resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@iarna/toml@2.2.5: + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - /@esbuild/linux-loong64@0.16.17: - resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - /@esbuild/linux-mips64el@0.16.17: - resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - /@esbuild/linux-ppc64@0.16.17: - resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 - /@esbuild/linux-riscv64@0.16.17: - resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + /@sindresorhus/slugify@1.1.2: + resolution: {integrity: sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==} + engines: {node: '>=10'} + dependencies: + '@sindresorhus/transliterate': 0.1.2 + escape-string-regexp: 4.0.0 - /@esbuild/linux-s390x@0.16.17: - resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.16.17: - resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.16.17: - resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.16.17: - resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.16.17: - resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.16.17: - resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.16.17: - resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.16.17: - resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@nulo/html.js@0.0.8: - resolution: {integrity: sha512-fi2VrrdTx2ivWPyUuZpnuBxelGoxWzbvyo/iki222AfYlPa9/xMwAXz+9q8vdtHOP5/3E/z30YDp+Sq5TkRZhg==, tarball: https://gitea.nulo.in/api/packages/Nulo/npm/%40nulo%2Fhtml.js/-/0.0.8/html.js-0.0.8.tgz} - dev: false + /@sindresorhus/transliterate@0.1.2: + resolution: {integrity: sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + lodash.deburr: 4.1.0 /@types/commonmark@0.27.5: resolution: {integrity: sha512-vIqgmHyLsc8Or3EWLz6QkhI8/v61FNeH0yxRupA7VqSbA2eFMoHHJAhZSHudplAV89wqg1CKSmShE016ziRXuw==} dev: true + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + /@types/node@18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true + /a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -256,15 +208,191 @@ packages: - supports-color dev: false - /commonmark@0.30.0: - resolution: {integrity: sha512-j1yoUo4gxPND1JWV9xj5ELih0yMv1iCWDG6eEQIPLSWLxzCXiFoyS7kvB+WwU+tZMf4snwJMMtaubV0laFpiBA==} - hasBin: true + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: - entities: 2.0.3 - mdurl: 1.0.1 - minimist: 1.2.7 - string.prototype.repeat: 0.2.0 - dev: false + color-convert: 2.0.1 + + /any-promise@0.1.0: + resolution: {integrity: sha512-lqzY9o+BbeGHRCOyxQkt/Tgvz0IZhTmQiA+LxQW8wSNpcTbj8K+0cZiSEvbpNZZP9/11Gy7dnLO3GNWUXO4d1g==} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /array-differ@1.0.0: + resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==} + engines: {node: '>=0.10.0'} + + /array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + + /array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + /array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + /arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + /assert-never@1.2.1: + resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + /babel-walk@3.0.0-canary-5: + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/types': 7.23.0 + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /bcp-47-match@1.0.3: + resolution: {integrity: sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==} + + /bcp-47-normalize@1.1.1: + resolution: {integrity: sha512-jWZ1Jdu3cs0EZdfCkS0UE9Gg01PtxnChjEBySeB+Zo6nkqtFfnvtoQQgP1qU1Oo4qgJgxhTI6Sf9y/pZIhPs0A==} + dependencies: + bcp-47: 1.0.8 + bcp-47-match: 1.0.3 + + /bcp-47@1.0.8: + resolution: {integrity: sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==} + dependencies: + is-alphabetical: 1.0.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /character-parser@2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + dependencies: + is-regex: 1.1.4 + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + /commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /constantinople@4.0.1: + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -276,7 +404,33 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: false + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + + /dev-ip@1.0.1: + resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==} + engines: {node: '>= 0.8.0'} + hasBin: true + + /doctypes@1.1.0: + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.0.3 /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -288,7 +442,12 @@ packages: /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: false + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} @@ -297,6 +456,13 @@ packages: domelementtype: 2.3.0 dev: false + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + /domutils@3.0.1: resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} dependencies: @@ -305,44 +471,222 @@ packages: domhandler: 5.0.3 dev: false + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + + /eleventy-plugin-automatic-noopener@2.0.2(@11ty/eleventy@2.0.1): + resolution: {integrity: sha512-uMHHAG7SUwiuNTd1yPTe8ijIjyTghV9JVXJ/vOUdbu+r3O0aJJ3ARsKAz83GMdSFivrY4XOnenlCOXeovGNBQw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@11ty/eleventy': '*' + peerDependenciesMeta: + '@11ty/eleventy': + optional: true + dependencies: + '@11ty/eleventy': 2.0.1 + posthtml: 0.16.6 + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + /entities@2.0.3: resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} - dev: false + + /entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: false - /esbuild@0.16.17: - resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} - engines: {node: '>=12'} + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true + dependencies: + prr: 1.0.1 + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + + /hamljs@0.6.2: + resolution: {integrity: sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==} + + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 optionalDependencies: - '@esbuild/android-arm': 0.16.17 - '@esbuild/android-arm64': 0.16.17 - '@esbuild/android-x64': 0.16.17 - '@esbuild/darwin-arm64': 0.16.17 - '@esbuild/darwin-x64': 0.16.17 - '@esbuild/freebsd-arm64': 0.16.17 - '@esbuild/freebsd-x64': 0.16.17 - '@esbuild/linux-arm': 0.16.17 - '@esbuild/linux-arm64': 0.16.17 - '@esbuild/linux-ia32': 0.16.17 - '@esbuild/linux-loong64': 0.16.17 - '@esbuild/linux-mips64el': 0.16.17 - '@esbuild/linux-ppc64': 0.16.17 - '@esbuild/linux-riscv64': 0.16.17 - '@esbuild/linux-s390x': 0.16.17 - '@esbuild/linux-x64': 0.16.17 - '@esbuild/netbsd-x64': 0.16.17 - '@esbuild/openbsd-x64': 0.16.17 - '@esbuild/sunos-x64': 0.16.17 - '@esbuild/win32-arm64': 0.16.17 - '@esbuild/win32-ia32': 0.16.17 - '@esbuild/win32-x64': 0.16.17 - dev: true + uglify-js: 3.17.4 + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /htmlparser2@7.2.0: + resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 3.0.1 /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} @@ -353,6 +697,10 @@ packages: entities: 4.5.0 dev: false + /http-equiv-refresh@1.0.0: + resolution: {integrity: sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==} + engines: {node: '>= 0.10'} + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -363,17 +711,287 @@ packages: - supports-color dev: false - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + /is-expression@4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-json@2.0.1: + resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /iso-639-1@2.1.15: + resolution: {integrity: sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==} + engines: {node: '>=6.0'} + + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + /js-stringify@1.0.2: + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + /jstransformer@1.0.0: + resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} + dependencies: + is-promise: 2.2.2 + promise: 7.3.1 + + /junk@1.0.3: + resolution: {integrity: sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==} + engines: {node: '>=0.10.0'} + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + /linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + dependencies: + uc.micro: 1.0.6 + + /liquidjs@10.9.4: + resolution: {integrity: sha512-E7SmGMwhv0Pa1Yau6odd2EgNPAmrx1OOjzvpm9AFxBGVtCX2Bx4fOCDtDCML13L7g6zjLPN7Kb/kakyAl2HTPQ==} + engines: {node: '>=14'} + hasBin: true + dependencies: + commander: 10.0.1 + + /list-to-array@1.1.0: + resolution: {integrity: sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==} + + /lodash.deburr@4.1.0: + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /luxon@3.4.3: + resolution: {integrity: sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==} + engines: {node: '>=12'} + + /markdown-it-regexp@0.4.0: + resolution: {integrity: sha512-0XQmr46K/rMKnI93Y3CLXsHj4jIioRETTAiVnJnjrZCEkGaDOmUxTbZj/aZ17G5NlRcVpWBYjqpwSlQ9lj+Kxw==} dev: false - /minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /markdown-it-wikilinks@1.4.0: + resolution: {integrity: sha512-LJhRWett3Do9doMMkpodOV5pvAMZjOOODqcifPfd+jdobhdg3UY8i824L5657UBWx7HSbOqicwNUzcVjOiswgw==} + dependencies: + extend: 3.0.2 + markdown-it-regexp: 0.4.0 + reurl: github.com/jsepia/reurl/a3210117636c115fb139517fcfb2ea929025cded + sanitize-filename: 1.6.3 dev: false + /markdown-it@13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + + /maximatch@0.1.0: + resolution: {integrity: sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==} + engines: {node: '>=0.10.0'} + dependencies: + array-differ: 1.0.0 + array-union: 1.0.2 + arrify: 1.0.1 + minimatch: 3.1.2 + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + + /moo@0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + + /morphdom@2.7.1: + resolution: {integrity: sha512-LwrrjplMolniWtOGluKF1EHZ0y78Fa4sq7f/MXCydyNkDof+POf+ruCn+k08l7H7b/JISfRo8Zd0HazuqySY9w==} + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false + + /multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.1.2 + + /mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /nunjucks@3.2.4(chokidar@3.5.3): + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + a-sync-waterfall: 1.0.1 + asap: 2.0.6 + chokidar: 3.5.3 + commander: 5.1.0 + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 /pagefind@0.12.0: resolution: {integrity: sha512-LHUmlYYweBM6/rK1G+7z2q2WjYeycrB7g5Kuw0w6yMkYztzsEdO2Qj2pJ3z8gsWV8eJsYQyAGOAdqE3SZWlCqA==} @@ -386,16 +1004,395 @@ packages: - supports-color dev: false + /parse-srcset@1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + /please-upgrade-node@3.2.0: + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} + dependencies: + semver-compare: 1.0.0 + + /posthtml-parser@0.11.0: + resolution: {integrity: sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==} + engines: {node: '>=12'} + dependencies: + htmlparser2: 7.2.0 + + /posthtml-render@3.0.0: + resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==} + engines: {node: '>=12'} + dependencies: + is-json: 2.0.1 + + /posthtml-urls@1.0.0: + resolution: {integrity: sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==} + engines: {node: '>= 4'} + dependencies: + http-equiv-refresh: 1.0.0 + list-to-array: 1.1.0 + parse-srcset: 1.0.2 + promise-each: 2.2.0 + + /posthtml@0.16.6: + resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} + engines: {node: '>=12.0.0'} + dependencies: + posthtml-parser: 0.11.0 + posthtml-render: 3.0.0 + + /promise-each@2.2.0: + resolution: {integrity: sha512-67roqt1k3QDA41DZ8xi0V+rF3GoaMiX7QilbXu0vXimut+9RcKBNZ/t60xCRgcsihmNUsEjh48xLfNqOrKblUg==} + dependencies: + any-promise: 0.1.0 + + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false - /string.prototype.repeat@0.2.0: - resolution: {integrity: sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA==} + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + /pug-attrs@3.0.0: + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} + dependencies: + constantinople: 4.0.1 + js-stringify: 1.0.2 + pug-runtime: 3.0.1 + + /pug-code-gen@3.0.2: + resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} + dependencies: + constantinople: 4.0.1 + doctypes: 1.1.0 + js-stringify: 1.0.2 + pug-attrs: 3.0.0 + pug-error: 2.0.0 + pug-runtime: 3.0.1 + void-elements: 3.1.0 + with: 7.0.2 + + /pug-error@2.0.0: + resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} + + /pug-filters@4.0.0: + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} + dependencies: + constantinople: 4.0.1 + jstransformer: 1.0.0 + pug-error: 2.0.0 + pug-walk: 2.0.0 + resolve: 1.22.8 + + /pug-lexer@5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.0.0 + + /pug-linker@4.0.0: + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} + dependencies: + pug-error: 2.0.0 + pug-walk: 2.0.0 + + /pug-load@3.0.0: + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + dependencies: + object-assign: 4.1.1 + pug-walk: 2.0.0 + + /pug-parser@6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + dependencies: + pug-error: 2.0.0 + token-stream: 1.0.0 + + /pug-runtime@3.0.1: + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} + + /pug-strip-comments@2.0.0: + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + dependencies: + pug-error: 2.0.0 + + /pug-walk@2.0.0: + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} + + /pug@3.0.2: + resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} + dependencies: + pug-code-gen: 3.0.2 + pug-filters: 4.0.0 + pug-lexer: 5.0.1 + pug-linker: 4.0.0 + pug-load: 3.0.0 + pug-parser: 6.0.0 + pug-runtime: 3.0.1 + pug-strip-comments: 2.0.0 + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} dev: false - /typescript@4.9.4: - resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} - engines: {node: '>=4.2.0'} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /recursive-copy@2.0.14: + resolution: {integrity: sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==} + dependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + junk: 1.0.3 + maximatch: 0.1.0 + mkdirp: 0.5.6 + pify: 2.3.0 + promise: 7.3.1 + rimraf: 2.7.1 + slash: 1.0.0 + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + dependencies: + truncate-utf8-bytes: 1.0.2 + dev: false + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + /semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /slash@1.0.0: + resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} + engines: {node: '>=0.10.0'} + + /slugify@1.6.6: + resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + engines: {node: '>=8.0.0'} + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /spec-url@2.0.0-dev.1: + resolution: {integrity: sha512-NKE2wT6tsvYa4xfVFcnjxSDFJwDOwU1NU2NhfnxFksutZrOShZ2p7pgQWS98Evq0cHMGBBjGQlbwrcAHLDywfw==} + dependencies: + punycode: 2.3.1 + dev: false + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + /ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /token-stream@1.0.0: + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + + /truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + dependencies: + utf8-byte-length: 1.0.4 + dev: false + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} hasBin: true dev: true + + /uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + optional: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + /utf8-byte-length@1.0.4: + resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} + dev: false + + /void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /with@7.0.2: + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + assert-never: 1.2.1 + babel-walk: 3.0.0-canary-5 + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + github.com/jsepia/reurl/a3210117636c115fb139517fcfb2ea929025cded: + resolution: {tarball: https://codeload.github.com/jsepia/reurl/tar.gz/a3210117636c115fb139517fcfb2ea929025cded} + name: reurl + version: 1.0.0-rc.2 + prepare: true + requiresBuild: true + dependencies: + spec-url: 2.0.0-dev.1 + dev: false diff --git a/status/404.md b/status/404.md new file mode 100644 index 0000000..b274588 --- /dev/null +++ b/status/404.md @@ -0,0 +1 @@ +No encontré esta página... [Volver al hogar](/) diff --git a/502.html b/status/502.html similarity index 100% rename from 502.html rename to status/502.html diff --git a/se-cayó.jpg b/status/se-cayó.jpg similarity index 100% rename from se-cayó.jpg rename to status/se-cayó.jpg diff --git a/timer.html b/timer.html deleted file mode 100644 index 8dd4b13..0000000 --- a/timer.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1.0" /> -<link rel="stylesheet" href="https://nulo.in/drip.css" /> -<style> - body { - display: flex; - min-height: 100vh; - justify-content: center; - align-items: center; - padding: 0; - } - main { - text-align: center; - padding: 0 1em; - } - input { - width: 5em; - } -</style> -<title>Timer de guita - -
-

Guita: $ 0.00

-
- - -
-
- - -
- -
- - diff --git a/timer.html.js b/timer.html.js deleted file mode 100644 index a0d2a9a..0000000 --- a/timer.html.js +++ /dev/null @@ -1,21 +0,0 @@ -// @ts-nocheck -const guitaEl = document.querySelector("#guita"); -const porHoraEl = document.querySelector("#por-hora"); -const personasEl = document.querySelector("#personas"); -const buttonEl = document.querySelector("button"); - -let interval = null; - -buttonEl.addEventListener("click", (event) => { - if (interval) { - clearInterval(interval); - buttonEl.textContent = "Empezar"; - } else { - interval = setInterval(() => { - guitaEl.dataset.guita = - parseFloat(guitaEl.dataset.guita) + (porHoraEl.value / 60 / 60) * personasEl.value; - guitaEl.textContent = `$ ${parseFloat(guitaEl.dataset.guita).toFixed(2)}`; - }, 1000); - buttonEl.textContent = "Parar"; - } -}); diff --git a/tsconfig.json b/tsconfig.json index f5fcd05..f644fb5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,9 @@ "strict": true, "allowJs": true, "checkJs": true, - "noEmit": true + "noEmit": true, + + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true } } diff --git a/Arreglando bugs ajenos.md-details.mp4 b/x/2021-10-11-Arreglando bugs ajenos/details.mp4 similarity index 100% rename from Arreglando bugs ajenos.md-details.mp4 rename to x/2021-10-11-Arreglando bugs ajenos/details.mp4 diff --git a/Arreglando bugs ajenos.md b/x/2021-10-11-Arreglando bugs ajenos/index.md similarity index 85% rename from Arreglando bugs ajenos.md rename to x/2021-10-11-Arreglando bugs ajenos/index.md index a58e4f2..cb90555 100644 --- a/Arreglando bugs ajenos.md +++ b/x/2021-10-11-Arreglando bugs ajenos/index.md @@ -42,53 +42,53 @@ Tuve varios problemas al intentar levantar un entorno de desarrollo local con el - Vite esperaba que los archivos de React tengan la extensión `.jsx` mientras que originalmente tenían la extensión `.js`. Script: - ```sh - for f in $(find -iname '*.js'); do - mv $f ${f}x - done - ``` + ```sh + for f in $(find -iname '*.js'); do + mv $f ${f}x + done + ``` - Había una parte del código que eran archivos SVG "compilados" a React. Sin embargo, estos esperaban una variable especial de webpack (o algún plugin de webpack) que por supuesto no existía. Para esto, hice otro script para inyectarles esa variable: - ```sh - for f in $(find -iname '*.svg.js'); do - echo 'const __webpack_public_path__ = "https://learngerman.dw.com/";' > ${f}.lol - cat $f >> ${f}.lol - mv ${f}.lol $f - done - ``` + ```sh + for f in $(find -iname '*.svg.js'); do + echo 'const __webpack_public_path__ = "https://learngerman.dw.com/";' > ${f}.lol + cat $f >> ${f}.lol + mv ${f}.lol $f + done + ``` - Tenía que instalar las dependencias de todo el proyecto. Esto lo hice con más script-fu: - ```sh - grep -r "from '[\w@].*';" . > imports - sort -u imports > imports.uniq - xargs pnpm add < imports.uniq - # Por alguna razón esto no fue suficiente y tuve que manualmente añadir varias dependencias - pnpm add graphql videojs-seek-buttons videojs-contrib-quality-levels videojs-hls-quality-selector videojs-seek-buttons videojs-hls-quality-selector - ``` + ```sh + grep -r "from '[\w@].*';" . > imports + sort -u imports > imports.uniq + xargs pnpm add < imports.uniq + # Por alguna razón esto no fue suficiente y tuve que manualmente añadir varias dependencias + pnpm add graphql videojs-seek-buttons videojs-contrib-quality-levels videojs-hls-quality-selector videojs-seek-buttons videojs-hls-quality-selector + ``` - Faltaba tener el CSS localmente así que lo descargé: - ```sh - for f in basestyles stylesheets customBaku; do - wget https://learngerman.dw.com/assets/css/${f}.css - done - ``` + ```sh + for f in basestyles stylesheets customBaku; do + wget https://learngerman.dw.com/assets/css/${f}.css + done + ``` - En `config.js` se tomaban variables de entorno que asumo existen en el entorno de trabajo de lxs desarrolladorxs. Yo las mentí: - ```js - const process = { - env: { - // REACT_APP_GRAPHQL_BASE_URL: "https://learngerman.dw.com/graphql", - REACT_APP_GRAPHQL_BASE_URL: "https://localhost:4002/graphql", - REACT_APP_RECAPTCHA_SITEKEY: null, - }, - }; - ``` + ```js + const process = { + env: { + // REACT_APP_GRAPHQL_BASE_URL: "https://learngerman.dw.com/graphql", + REACT_APP_GRAPHQL_BASE_URL: "https://localhost:4002/graphql", + REACT_APP_RECAPTCHA_SITEKEY: null, + }, + }; + ``` - Notese como originalmente había mentido diciendo que la URL de la API era learngerman.dw.com, pero luego lo cambié para que apunte a una URL local ya que la API no me permitía accederla desde un sitio no legítimo. Esa URL local apunta a un proxy a la API real. + Notese como originalmente había mentido diciendo que la URL de la API era learngerman.dw.com, pero luego lo cambié para que apunte a una URL local ya que la API no me permitía accederla desde un sitio no legítimo. Esa URL local apunta a un proxy a la API real. Es muy probable que haya tenido que hacer más cosas y me haya olvidado. Fue mucho prueba y error hasta que el sitio finalmente cargó. @@ -98,7 +98,7 @@ Por un tiempo, tuve una de mis muñecas inaccesibles por unas semanas. Esto me o Recientemente, en el sitio agregaron una solapa de "transcripción" mostrando todo el dialogo que había en el video del ejercicio. Sin embargo, cuando esta solapa estaba cerrada, se podían seguir seleccionando los enlaces dentro de la solapa con el teclado, haciendo la navegación por teclado tediosa. - + La solucion es simplemente usar el elemento de solapa que ya viene con el navegador: [`
`](https://developer.mozilla.org/es/docs/Web/HTML/Element/details). (La página de `
` en MDN esta desactualizada al momento de escribir este artículo.) diff --git a/2022-06-08 Necesitamos seguridad colectiva.md b/x/2022-06-08-Necesitamos seguridad colectiva.md similarity index 100% rename from 2022-06-08 Necesitamos seguridad colectiva.md rename to x/2022-06-08-Necesitamos seguridad colectiva.md diff --git a/2022-07-13.md b/x/2022-07-13.md similarity index 100% rename from 2022-07-13.md rename to x/2022-07-13.md diff --git a/2022-07-16.md b/x/2022-07-16.md similarity index 100% rename from 2022-07-16.md rename to x/2022-07-16.md diff --git a/2022-10-15 Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.md b/x/2022-10-15-Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.md similarity index 100% rename from 2022-10-15 Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.md rename to x/2022-10-15-Analisis de la extracción de datos del teléfono de Fernando André Sabag Montiel.md diff --git a/2022-10-30 Bugs de accesibilidad.md b/x/2022-10-30-Bugs de accesibilidad.md similarity index 100% rename from 2022-10-30 Bugs de accesibilidad.md rename to x/2022-10-30-Bugs de accesibilidad.md diff --git a/x/2022-11-18-Donweb es ridículo.md b/x/2022-11-18-Donweb es ridículo.md new file mode 100644 index 0000000..f72b8ec --- /dev/null +++ b/x/2022-11-18-Donweb es ridículo.md @@ -0,0 +1,40 @@ +_[Parte 2](/x/2023-04-30-Donweb%20quiere%20tu%20cripto/)_ + +Hace unos días compre el "Cloud Server" (VPS) más barato que ofrece [[Donweb]] para experimentar ya que no había visto hosting en Argentina tan barato antes. No ofrecían la posibilidad de bootear distros alternativas a las que te ofrecen (Debian, Ubuntu, CentOS y Rocky) que me pareció raro, pero todo se puede hackear. + +Me pareció raro/sospechoso que la instalación de Debian por defecto venía con las llaves SSH de muchisimxs empleadxs de Donweb en el authorized_keys de root dandoles acceso de superusuario, por lo que las borré. + +Bootié una imágen de otro de mis proyectos experimentales, [define-alpine](https://gitea.nulo.in/Nulo/define-alpine), ya que quería ver que tan complicado era hacerlo funcionar en un entorno poco flexible como este. Por las 23 horas, lo logré, mandando esta captura de pantalla de victoria a un amigo: + +![Captura de pantalla de una terminal de Linux con una sesión recién iniciada](captura-pre.jpg) + +Me fui a dormir victorioso. Al día siguiente, por las 10 de la mañana, recibo este mail: + +> Buenos días! como estas? espero que te encuentres muy bien! Tomo contacto contigo en esta ocasión para informarte que deberás re-crear el cloud correspondiente ya que has Instalado otro SO arriba de la imagen provista y no esta permitido. +> +> Saludos cordiales, +> +> Quedo a tu disposición y te agradezco califiques mi respuesta porque nos ayudará a mejorar la calidad de atención. +> +>
---------------------------------------------

+> +> [CENSURADO]
+> Cloud & IaaS Technical Support - Donweb.cloud
+> +>
---------------------------------------------
+ +En ese momento estaba encerrado en una institución educativa, pero mi amigo descubrió que efectivamente sus terminos y condiciones lo prohibian entre otras cosas. + +> Se incluye en este punto también cualquier otra información que DonWeb by Dattatec considere inapropiada según su absoluto y exclusivo criterio. Cualquier uso indebido de los servicios autorizará a DonWeb by Dattatec a la suspensión o eliminación de los servicios contratados y sus contenidos sin previo aviso, no haciéndose responsable DonWeb by Dattatec por cualquier pérdida que esto implique. + +> El servidor deberá responder a SNMP (http://es.wikipedia.org/wiki/Simple_Network_Management_Protocol) desde ciertas IPs utilizadas por DonWeb by Dattatec para monitoreo del servicio las cuales son asignadas en la configuracion al momento del alta. El cliente no deberá desinstalar el servicio SNMP ni modificar su configuracion. + +> DonWeb by Dattatec se reserva el derecho de suspender el servicio en cualquier momento en caso de detectar alguna anormalidad en las configuraciones antes mencionadas y no poder acceder al servidor para realizar las correcciones necesarias. + +> IMPORTANTE: Una vez adquirido el Cloud Server, el cliente tiene la posibilidad de instalar cualquier imagen de los SO ofrecidos que se ajuste a sus necesidades. No obstante, el cliente debe abstenerse de instalar (o pisar una instalación) con una distribución y/o Sistema Operativo distinto a los ofrecidos en el catálogo de imágenes de DonWeb. DonWeb se reserva el derecho de suspender sin previo aviso el servicio en caso que se detecte lo antes mencionado o cualquier acción que comprometa la seguridad e integridad del servicio o la compañía. + +DonYuta o RatiWeb, bue. Cuando logre escapar de dicha institución educativa y llegué a mi computador portable, descubrí que Donweb se había tomado la libertad de entrar al VNC de mi servidor a clavarse unos comandos: + +![Captura de pantalla de una terminal de Linux con varios comandos consultando información sobre el sistema operativo que corría, entre otras cosas](captura-post.jpg) + +No recomiendo. diff --git a/2022-11-18 Donweb es ridículo.md-captura-post.jpg b/x/2022-11-18-Donweb es ridículo/captura-post.jpg similarity index 100% rename from 2022-11-18 Donweb es ridículo.md-captura-post.jpg rename to x/2022-11-18-Donweb es ridículo/captura-post.jpg diff --git a/2022-11-18 Donweb es ridículo.md-captura-pre.jpg b/x/2022-11-18-Donweb es ridículo/captura-pre.jpg similarity index 100% rename from 2022-11-18 Donweb es ridículo.md-captura-pre.jpg rename to x/2022-11-18-Donweb es ridículo/captura-pre.jpg diff --git a/2023-02-05 Vergüenza algorítmica.md b/x/2023-02-05-Vergüenza algorítmica.md similarity index 100% rename from 2023-02-05 Vergüenza algorítmica.md rename to x/2023-02-05-Vergüenza algorítmica.md diff --git a/2023-04-30 Donweb quiere tu cripto.md b/x/2023-04-30-Donweb quiere tu cripto.md similarity index 69% rename from 2023-04-30 Donweb quiere tu cripto.md rename to x/2023-04-30-Donweb quiere tu cripto.md index 2e9a9f0..e7fd6b8 100644 --- a/2023-04-30 Donweb quiere tu cripto.md +++ b/x/2023-04-30-Donweb quiere tu cripto.md @@ -1,22 +1,22 @@ -_[Parte 1](2022-11-18%20Donweb%20es%20rid%C3%ADculo.html)_ +_[Parte 1](/x/2022-11-18-Donweb%20es%20rid%C3%ADculo/)_ Como si no fuera suficiente, [[Donweb]] me sigue mandando mails por más que me desuscribí varias veces. No debería sorprenderme de la empresa que hace _[Email Marketing](https://envialosimple.com/es-ar)_ (Spam as a Service), pero es hinchapelotas. Ayer recibí un mail un poco raro. -![un email que proveniente de Donweb pero con el nombre de enviador como "metamask" alertandome de que supuestamente el acceso a mi cripto habría sido suspendido](2023-04-30%20Donweb%20quiere%20tu%20cripto.md-Screenshot%20from%202023-04-30%2016-28-20.png) +![un email que proveniente de Donweb pero con el nombre de enviador como "metamask" alertandome de que supuestamente el acceso a mi cripto habría sido suspendido](screenshot-mail.png) Al principió quise asumir que quizás Doncopado decidió notificarnos de algo que afectaba a MetaMask en general, aunque realmente sospechaba que era una estafa. ->Hola nulo@redacted +> Hola nulo@redacted > ->Aquí le escribimos para informarle de un alto riesgo potencial para su crypto de criptomonedas debido a un alto volumen de transacciones en la red de Ethereum durante la actualización reciente de Shanghai. Para proteger sus activos, recomendamos encarecidamente que actualice manualmente su billetera antes del 3 de mayo. Si no actualiza antes de la fecha límite, perderá permanentemente todos sus activos. +> Aquí le escribimos para informarle de un alto riesgo potencial para su crypto de criptomonedas debido a un alto volumen de transacciones en la red de Ethereum durante la actualización reciente de Shanghai. Para proteger sus activos, recomendamos encarecidamente que actualice manualmente su billetera antes del 3 de mayo. Si no actualiza antes de la fecha límite, perderá permanentemente todos sus activos. > ->### ¿Qué sucede si no se actualiza manualmente? +> ### ¿Qué sucede si no se actualiza manualmente? > ->Tenga en cuenta que no actualizar su crypto antes de la fecha límite resultará en una pérdida permanente de todos sus activos de criptomonedas. +> Tenga en cuenta que no actualizar su crypto antes de la fecha límite resultará en una pérdida permanente de todos sus activos de criptomonedas. > -> +> Clickear el link grande que dice "Recuperar mi cuenta", te envía a `hxxps://my-ethupdatemetas.com/held/importz/`. Este link ahora está caído, pero pedía que ponga la llave secreta de recuperación de la billetera cripto (phishing). @@ -26,16 +26,16 @@ No me sorprende, pero me decepciona aún más. A veces estos mails de spam hacen parecer que vienen de un lugar cuando en realidad vienen de otro. Por eso hay tecnologías que verifican que vengan del lugar de donde dicen. Este mail fue verificado por mi servidor de mail como proveniente de `cio.donweb.com`. ->``` ->* 1.7 URIBL_BLACK Contains an URL listed in the URIBL blacklist ->* [URIs: donweb-e.com] ->[snip] ->* -0.0 SPF_PASS SPF: sender matches SPF record ->[snip] ->* -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature ->[snip] ->* 2.3 DCC_CHECK Detected as bulk mail by DCC (dcc-servers.net) ->``` +> ``` +> * 1.7 URIBL_BLACK Contains an URL listed in the URIBL blacklist +> * [URIs: donweb-e.com] +> [snip] +> * -0.0 SPF_PASS SPF: sender matches SPF record +> [snip] +> * -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature +> [snip] +> * 2.3 DCC_CHECK Detected as bulk mail by DCC (dcc-servers.net) +> ``` Fue enviado por `customer.io`. El link actualmente ya no apunta al sitio de phishing, porque `customer.io` bloqueo el link de trackeo (que supongo es hospedado por ellxs) y redirige a `https://customer.io/we-hate-spam/`. diff --git a/2023-04-30 Donweb quiere tu cripto.md-Screenshot from 2023-04-30 16-28-20.png b/x/2023-04-30-Donweb quiere tu cripto/screenshot-mail.png similarity index 100% rename from 2023-04-30 Donweb quiere tu cripto.md-Screenshot from 2023-04-30 16-28-20.png rename to x/2023-04-30-Donweb quiere tu cripto/screenshot-mail.png diff --git a/Activismo Gordo.md b/x/Activismo Gordo.md similarity index 100% rename from Activismo Gordo.md rename to x/Activismo Gordo.md diff --git a/Aesthetic.md b/x/Aesthetic.md similarity index 100% rename from Aesthetic.md rename to x/Aesthetic.md diff --git a/Alimentación.md b/x/Alimentación.md similarity index 100% rename from Alimentación.md rename to x/Alimentación.md diff --git a/Alpine Linux.md b/x/Alpine Linux.md similarity index 100% rename from Alpine Linux.md rename to x/Alpine Linux.md diff --git a/Android Auto.md b/x/Android Auto.md similarity index 100% rename from Android Auto.md rename to x/Android Auto.md diff --git a/Android seguro.md b/x/Android seguro.md similarity index 100% rename from Android seguro.md rename to x/Android seguro.md diff --git a/Android.md b/x/Android.md similarity index 100% rename from Android.md rename to x/Android.md diff --git a/Antiderechos de autorx.md b/x/Antiderechos de autorx.md similarity index 100% rename from Antiderechos de autorx.md rename to x/Antiderechos de autorx.md diff --git a/Aprender.md b/x/Aprender.md similarity index 100% rename from Aprender.md rename to x/Aprender.md diff --git a/Archivar los archivos de la dictadura militar.md b/x/Archivar los archivos de la dictadura militar.md similarity index 100% rename from Archivar los archivos de la dictadura militar.md rename to x/Archivar los archivos de la dictadura militar.md diff --git a/x/Atreus v1.md b/x/Atreus v1.md new file mode 100644 index 0000000..18bbba2 --- /dev/null +++ b/x/Atreus v1.md @@ -0,0 +1,3 @@ +![Foto del Atreus v1 de frente](frente.jpg) + +![Foto del Atreus v1 de atrás, exponiendo sus cables interiores](atrás.jpg) diff --git a/Atreus v1.md-atrás.jpg b/x/Atreus v1/atrás.jpg similarity index 100% rename from Atreus v1.md-atrás.jpg rename to x/Atreus v1/atrás.jpg diff --git a/Atreus v1.md-frente.jpg b/x/Atreus v1/frente.jpg similarity index 100% rename from Atreus v1.md-frente.jpg rename to x/Atreus v1/frente.jpg diff --git a/Atreus v2.md b/x/Atreus v2.md similarity index 100% rename from Atreus v2.md rename to x/Atreus v2.md diff --git a/BitTorrent v2.md b/x/BitTorrent v2.md similarity index 100% rename from BitTorrent v2.md rename to x/BitTorrent v2.md diff --git a/BitTorrent.md b/x/BitTorrent.md similarity index 100% rename from BitTorrent.md rename to x/BitTorrent.md diff --git a/Bluetooth.md b/x/Bluetooth.md similarity index 100% rename from Bluetooth.md rename to x/Bluetooth.md diff --git a/Bookmarklets.md b/x/Bookmarklets.md similarity index 100% rename from Bookmarklets.md rename to x/Bookmarklets.md diff --git a/Booteables.md b/x/Booteables.md similarity index 100% rename from Booteables.md rename to x/Booteables.md diff --git a/Boox T68.md b/x/Boox T68.md similarity index 100% rename from Boox T68.md rename to x/Boox T68.md diff --git a/Burn Book.md b/x/Burn Book.md similarity index 100% rename from Burn Book.md rename to x/Burn Book.md diff --git a/C.md b/x/C.md similarity index 100% rename from C.md rename to x/C.md diff --git a/CHINESE GOD OIL.md b/x/CHINESE GOD OIL/index.md similarity index 89% rename from CHINESE GOD OIL.md rename to x/CHINESE GOD OIL/index.md index 7301687..f8c2531 100644 --- a/CHINESE GOD OIL.md +++ b/x/CHINESE GOD OIL/index.md @@ -1,6 +1,6 @@ Término técnico para esta receta. [Viene de TikTok](https://www.tiktok.com/@foodiechina888/video/7071812170157198594). TRENDING **TOFU** RECIPE IN CHINA. - + 1. - Harina de almidón de maíz (maicena) (la receta pide "potato starch" pero YOLO) - Huevos revueltos (sin cocinar lol) diff --git a/CHINESE GOD OIL.md-tiktok.h264.mp4 b/x/CHINESE GOD OIL/tiktok.h264.mp4 similarity index 100% rename from CHINESE GOD OIL.md-tiktok.h264.mp4 rename to x/CHINESE GOD OIL/tiktok.h264.mp4 diff --git a/CHINESE GOD OIL.md-tiktok.mp4 b/x/CHINESE GOD OIL/tiktok.mp4 similarity index 100% rename from CHINESE GOD OIL.md-tiktok.mp4 rename to x/CHINESE GOD OIL/tiktok.mp4 diff --git a/CRDT.md b/x/CRDT.md similarity index 100% rename from CRDT.md rename to x/CRDT.md diff --git a/CSS: color-scheme-nulo.ar coso.jpg b/x/CSS/color-scheme-safari-nulo.ar.jpg similarity index 100% rename from CSS: color-scheme-nulo.ar coso.jpg rename to x/CSS/color-scheme-safari-nulo.ar.jpg diff --git a/x/CSS/index.md b/x/CSS/index.md new file mode 100644 index 0000000..8a97252 --- /dev/null +++ b/x/CSS/index.md @@ -0,0 +1,14 @@ +## Tailwind + +El mejor framework del mundo. + +- [Pines - An Alpine and Tailwind UI Library](https://devdojo.com/pines) + +## color-scheme ([MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme)) + +Es una propiedad de CSS que indica en que colores se puede renderizar tu sitio. Si especificas `color-scheme: dark`, los navegadores automáticamente cambian los colores del fondo, el texto, los inputs, etc para ajustarse a eso. Sin embargo, Safari elije colores pésimos: + +
+ +
nulo.ar antes de que especifique colores para los links
+
diff --git a/Chromium.md b/x/Chromium.md similarity index 100% rename from Chromium.md rename to x/Chromium.md diff --git a/Cocina.md b/x/Cocina.md similarity index 100% rename from Cocina.md rename to x/Cocina.md diff --git a/Comics.md b/x/Comics.md similarity index 100% rename from Comics.md rename to x/Comics.md diff --git a/Cooperativas.md b/x/Cooperativas.md similarity index 100% rename from Cooperativas.md rename to x/Cooperativas.md diff --git a/x/Cosas.md b/x/Cosas.md new file mode 100644 index 0000000..4b87d7a --- /dev/null +++ b/x/Cosas.md @@ -0,0 +1,5 @@ +- [words that cost nothing to scrub from your vocabulary, and maybe you get a tiny sliver of your soul back:
+ content -> art/video/music/comics/games etc, whatever the actual media is
+ consume -> watch/listen/read/play etc
+ IP -> franchise, series, universe, property](https://twitter.com/vectorpoem/status/1575183167497023490) +- ![Gráfico si deberías hacer proyecto](grafico-hacer-proyecto.jpg) diff --git a/Cosas.md-grafico-hacer-proyecto.jpg b/x/Cosas/grafico-hacer-proyecto.jpg similarity index 100% rename from Cosas.md-grafico-hacer-proyecto.jpg rename to x/Cosas/grafico-hacer-proyecto.jpg diff --git a/Códigos QR.md b/x/Códigos QR.md similarity index 100% rename from Códigos QR.md rename to x/Códigos QR.md diff --git a/DNS.md b/x/DNS.md similarity index 100% rename from DNS.md rename to x/DNS.md diff --git a/DecSync.md b/x/DecSync.md similarity index 100% rename from DecSync.md rename to x/DecSync.md diff --git a/Diseño.md b/x/Diseño.md similarity index 100% rename from Diseño.md rename to x/Diseño.md diff --git a/Disroot.md b/x/Disroot.md similarity index 100% rename from Disroot.md rename to x/Disroot.md diff --git a/Donweb.md b/x/Donweb.md similarity index 100% rename from Donweb.md rename to x/Donweb.md diff --git a/Dropbear.md b/x/Dropbear.md similarity index 100% rename from Dropbear.md rename to x/Dropbear.md diff --git a/E-ink.md b/x/E-ink.md similarity index 100% rename from E-ink.md rename to x/E-ink.md diff --git a/EPUB.md b/x/EPUB.md similarity index 100% rename from EPUB.md rename to x/EPUB.md diff --git a/Electronica.md b/x/Electronica.md similarity index 100% rename from Electronica.md rename to x/Electronica.md diff --git a/Email.md b/x/Email.md similarity index 100% rename from Email.md rename to x/Email.md diff --git a/Este sitio.md b/x/Este sitio.md similarity index 100% rename from Este sitio.md rename to x/Este sitio.md diff --git a/Experiencing harmful behavior in Alpine.md b/x/Experiencing harmful behavior in Alpine.md similarity index 100% rename from Experiencing harmful behavior in Alpine.md rename to x/Experiencing harmful behavior in Alpine.md diff --git a/Fabricación de circuitos impresos.md b/x/Fabricación de circuitos impresos.md similarity index 100% rename from Fabricación de circuitos impresos.md rename to x/Fabricación de circuitos impresos.md diff --git a/Facebook.md b/x/Facebook.md similarity index 100% rename from Facebook.md rename to x/Facebook.md diff --git a/Faircamp.md b/x/Faircamp.md similarity index 100% rename from Faircamp.md rename to x/Faircamp.md diff --git a/FakeSMTP.md b/x/FakeSMTP.md similarity index 100% rename from FakeSMTP.md rename to x/FakeSMTP.md diff --git a/Firecracker.md b/x/Firecracker.md similarity index 100% rename from Firecracker.md rename to x/Firecracker.md diff --git a/Forgejo.md b/x/Forgejo.md similarity index 100% rename from Forgejo.md rename to x/Forgejo.md diff --git a/Formatos de texto.md b/x/Formatos de texto.md similarity index 100% rename from Formatos de texto.md rename to x/Formatos de texto.md diff --git a/Fotografía.md b/x/Fotografía.md similarity index 100% rename from Fotografía.md rename to x/Fotografía.md diff --git a/Fuck WebRTC.md b/x/Fuck WebRTC.md similarity index 100% rename from Fuck WebRTC.md rename to x/Fuck WebRTC.md diff --git a/GNOME.md b/x/GNOME.md similarity index 100% rename from GNOME.md rename to x/GNOME.md diff --git a/Git.md b/x/Git.md similarity index 100% rename from Git.md rename to x/Git.md diff --git a/Gitea.md b/x/Gitea.md similarity index 100% rename from Gitea.md rename to x/Gitea.md diff --git a/Go.md b/x/Go.md similarity index 100% rename from Go.md rename to x/Go.md diff --git a/GraphHopper.md b/x/GraphHopper.md similarity index 100% rename from GraphHopper.md rename to x/GraphHopper.md diff --git a/HTML.md b/x/HTML.md similarity index 100% rename from HTML.md rename to x/HTML.md diff --git a/Hacks: limpiar servidor.md b/x/Hacks: limpiar servidor.md similarity index 100% rename from Hacks: limpiar servidor.md rename to x/Hacks: limpiar servidor.md diff --git a/HedgeDoc.md b/x/HedgeDoc.md similarity index 100% rename from HedgeDoc.md rename to x/HedgeDoc.md diff --git a/Herramienta de monitoreo de medios.md b/x/Herramienta de monitoreo de medios.md similarity index 100% rename from Herramienta de monitoreo de medios.md rename to x/Herramienta de monitoreo de medios.md diff --git a/Ideas para un sistema operativo propio en Chromebooks.md b/x/Ideas para un sistema operativo propio en Chromebooks.md similarity index 100% rename from Ideas para un sistema operativo propio en Chromebooks.md rename to x/Ideas para un sistema operativo propio en Chromebooks.md diff --git a/Ideas para una web distribuida.md b/x/Ideas para una web distribuida.md similarity index 100% rename from Ideas para una web distribuida.md rename to x/Ideas para una web distribuida.md diff --git a/Ideas.md b/x/Ideas.md similarity index 100% rename from Ideas.md rename to x/Ideas.md diff --git a/Infraestructura.md b/x/Infraestructura.md similarity index 100% rename from Infraestructura.md rename to x/Infraestructura.md diff --git a/Internet censurado en escuelas con Plan Sarmiento.md b/x/Internet censurado en escuelas con Plan Sarmiento.md similarity index 100% rename from Internet censurado en escuelas con Plan Sarmiento.md rename to x/Internet censurado en escuelas con Plan Sarmiento.md diff --git a/Inversiones.md b/x/Inversiones.md similarity index 100% rename from Inversiones.md rename to x/Inversiones.md diff --git a/Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.md b/x/Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.md similarity index 100% rename from Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.md rename to x/Jackson Burns - SKIN PURIFYING TREATMENT: Underscore's Melodrama.md diff --git a/Jardin digital.md b/x/Jardin digital.md similarity index 100% rename from Jardin digital.md rename to x/Jardin digital.md diff --git a/JavaScript.md b/x/JavaScript.md similarity index 100% rename from JavaScript.md rename to x/JavaScript.md diff --git a/Javier Milei.md b/x/Javier Milei.md similarity index 100% rename from Javier Milei.md rename to x/Javier Milei.md diff --git a/Keyboard layouts de pocas teclas.md b/x/Keyboard layouts de pocas teclas.md similarity index 100% rename from Keyboard layouts de pocas teclas.md rename to x/Keyboard layouts de pocas teclas.md diff --git a/Leak OSDE 2022-08.md b/x/Leak OSDE 2022-08.md similarity index 100% rename from Leak OSDE 2022-08.md rename to x/Leak OSDE 2022-08.md diff --git a/Lenguajes de marcado.md b/x/Lenguajes de marcado.md similarity index 100% rename from Lenguajes de marcado.md rename to x/Lenguajes de marcado.md diff --git a/Lenguajes de programación.md b/x/Lenguajes de programación.md similarity index 100% rename from Lenguajes de programación.md rename to x/Lenguajes de programación.md diff --git a/x/Lista de páginas.hbs b/x/Lista de páginas.hbs new file mode 100644 index 0000000..d185694 --- /dev/null +++ b/x/Lista de páginas.hbs @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/x/Lua.md b/x/Lua.md new file mode 100644 index 0000000..bc74ce3 --- /dev/null +++ b/x/Lua.md @@ -0,0 +1,10 @@ +- [lua-stdlib/lua-stdlib](https://github.com/lua-stdlib/lua-stdlib) +- [gvvaughan/typecheck](https://github.com/gvvaughan/typecheck) +- [lua-stdlib/strict](https://github.com/lua-stdlib/strict) chequea que hayas definido las variables + +## Lua funcional + +- [luafun/luafun](https://github.com/luafun/luafun) (enfoque en performance dentro de LuaJIT) +- [lua-stdlib/functional](https://github.com/lua-stdlib/functional) +- [ezerfernandes/funkmoon](https://github.com/ezerfernandes/funkmoon) +- [jhoonb/functional-lua](https://github.com/jhoonb/functional-lua) diff --git a/Magnets o torrents reproducibles.md b/x/Magnets o torrents reproducibles.md similarity index 100% rename from Magnets o torrents reproducibles.md rename to x/Magnets o torrents reproducibles.md diff --git a/Manjaro.md b/x/Manjaro.md similarity index 100% rename from Manjaro.md rename to x/Manjaro.md diff --git a/Markdown.md b/x/Markdown.md similarity index 100% rename from Markdown.md rename to x/Markdown.md diff --git a/Marketing.md b/x/Marketing.md similarity index 100% rename from Marketing.md rename to x/Marketing.md diff --git a/Measured boot.md b/x/Measured boot.md similarity index 100% rename from Measured boot.md rename to x/Measured boot.md diff --git a/Menú artístico.gen.js b/x/Menú artístico.gen.js similarity index 100% rename from Menú artístico.gen.js rename to x/Menú artístico.gen.js diff --git a/Microcontrolador (teclados mecánicos).md b/x/Microcontrolador (teclados mecánicos)/index.md similarity index 83% rename from Microcontrolador (teclados mecánicos).md rename to x/Microcontrolador (teclados mecánicos)/index.md index 338f77d..2cd3a2e 100644 --- a/Microcontrolador (teclados mecánicos).md +++ b/x/Microcontrolador (teclados mecánicos)/index.md @@ -4,7 +4,7 @@ El cerebro de los [[Teclados mecánicos]]. ### [Arduino Pro Micro](https://www.sparkfun.com/products/12640) y sus miles de clones -![Una foto de un SparkFun Pro Micro](Microcontrolador%20(teclados%20mecánicos).md-pro-micro.jpg) +![Una foto de un SparkFun Pro Micro](pro-micro.jpg) Su puerto USB suele ser muy frágil. @@ -13,5 +13,5 @@ Su puerto USB suele ser muy frágil. Compatible con el Pro Micro. Tiene un puerto USB-C diseñado para no tener los problemas del Pro Micro. ### [nice!nano](https://nicekeyboards.com/nice-nano/) - + Compatible con el Pro Micro. USB-C y Bluetooth(!). diff --git a/Microcontrolador (teclados mecánicos).md-pro-micro.jpg b/x/Microcontrolador (teclados mecánicos)/pro-micro.jpg similarity index 100% rename from Microcontrolador (teclados mecánicos).md-pro-micro.jpg rename to x/Microcontrolador (teclados mecánicos)/pro-micro.jpg diff --git a/Monitoreo de censura de Internet.md b/x/Monitoreo de censura de Internet.md similarity index 100% rename from Monitoreo de censura de Internet.md rename to x/Monitoreo de censura de Internet.md diff --git a/Mozilla.md b/x/Mozilla.md similarity index 100% rename from Mozilla.md rename to x/Mozilla.md diff --git a/Multimetro.md b/x/Multimetro.md similarity index 100% rename from Multimetro.md rename to x/Multimetro.md diff --git a/NeoMutt.md b/x/NeoMutt.md similarity index 100% rename from NeoMutt.md rename to x/NeoMutt.md diff --git a/Nix.md b/x/Nix.md similarity index 100% rename from Nix.md rename to x/Nix.md diff --git a/Njalla caído.md b/x/Njalla caído.md similarity index 100% rename from Njalla caído.md rename to x/Njalla caído.md diff --git a/Not So Shoujo Love Story.md b/x/Not So Shoujo Love Story.md similarity index 100% rename from Not So Shoujo Love Story.md rename to x/Not So Shoujo Love Story.md diff --git a/Nutrición.md b/x/Nutrición.md similarity index 100% rename from Nutrición.md rename to x/Nutrición.md diff --git a/Olla a presión.md b/x/Olla a presión.md similarity index 100% rename from Olla a presión.md rename to x/Olla a presión.md diff --git a/OnePlus 5T.md b/x/OnePlus 5T.md similarity index 100% rename from OnePlus 5T.md rename to x/OnePlus 5T.md diff --git a/Opus Encoding.md b/x/Opus Encoding.md similarity index 100% rename from Opus Encoding.md rename to x/Opus Encoding.md diff --git a/PDF.md b/x/PDF.md similarity index 100% rename from PDF.md rename to x/PDF.md diff --git a/PWA.md b/x/PWA.md similarity index 100% rename from PWA.md rename to x/PWA.md diff --git a/PXE.md b/x/PXE.md similarity index 100% rename from PXE.md rename to x/PXE.md diff --git a/Permacomputación.md b/x/Permacomputación.md similarity index 100% rename from Permacomputación.md rename to x/Permacomputación.md diff --git a/Piratería.md b/x/Piratería.md similarity index 100% rename from Piratería.md rename to x/Piratería.md diff --git a/Pleroma.md b/x/Pleroma.md similarity index 100% rename from Pleroma.md rename to x/Pleroma.md diff --git a/Producción de música.md b/x/Producción de música.md similarity index 100% rename from Producción de música.md rename to x/Producción de música.md diff --git a/Programación.md b/x/Programación.md similarity index 100% rename from Programación.md rename to x/Programación.md diff --git a/ProleText.md b/x/ProleText.md similarity index 100% rename from ProleText.md rename to x/ProleText.md diff --git a/Protocolo de toma de decisiones Sutty v0.1.md b/x/Protocolo de toma de decisiones Sutty v0.1.md similarity index 100% rename from Protocolo de toma de decisiones Sutty v0.1.md rename to x/Protocolo de toma de decisiones Sutty v0.1.md diff --git a/Proyectos.md b/x/Proyectos.md similarity index 100% rename from Proyectos.md rename to x/Proyectos.md diff --git a/Python.md b/x/Python.md similarity index 100% rename from Python.md rename to x/Python.md diff --git a/QEMU.md b/x/QEMU.md similarity index 100% rename from QEMU.md rename to x/QEMU.md diff --git a/Quién soy.md b/x/Quién soy.md similarity index 93% rename from Quién soy.md rename to x/Quién soy.md index 57905be..435820a 100644 --- a/Quién soy.md +++ b/x/Quién soy.md @@ -2,6 +2,5 @@ - Soy argentino & porteño. - Uso pronombres él, a veces ella o cualquiera. - Soy parte de [Sutty](https://sutty.coop.ar). -- Soy nerd. - Soy estudiante. - Soy mucho más que esta página :O diff --git a/SQLite.md b/x/SQLite.md similarity index 100% rename from SQLite.md rename to x/SQLite.md diff --git a/Salud mental.md b/x/Salud mental.md similarity index 100% rename from Salud mental.md rename to x/Salud mental.md diff --git a/Seguridad de la infraestructura de llaves pública (PKI).md b/x/Seguridad de la infraestructura de llaves pública (PKI).md similarity index 100% rename from Seguridad de la infraestructura de llaves pública (PKI).md rename to x/Seguridad de la infraestructura de llaves pública (PKI).md diff --git a/Signal.md b/x/Signal.md similarity index 100% rename from Signal.md rename to x/Signal.md diff --git a/Subdivx.md b/x/Subdivx.md similarity index 100% rename from Subdivx.md rename to x/Subdivx.md diff --git a/Switches.md b/x/Switches.md similarity index 100% rename from Switches.md rename to x/Switches.md diff --git a/SyncedStore.md b/x/SyncedStore.md similarity index 100% rename from SyncedStore.md rename to x/SyncedStore.md diff --git a/Teclados mecánicos.md b/x/Teclados mecánicos.md similarity index 100% rename from Teclados mecánicos.md rename to x/Teclados mecánicos.md diff --git a/Teclados.md b/x/Teclados.md similarity index 100% rename from Teclados.md rename to x/Teclados.md diff --git a/Thinkpad X230.md b/x/Thinkpad X230.md similarity index 100% rename from Thinkpad X230.md rename to x/Thinkpad X230.md diff --git a/Tipear con una mano.md b/x/Tipear con una mano.md similarity index 100% rename from Tipear con una mano.md rename to x/Tipear con una mano.md diff --git a/To-Do lists.md b/x/To-Do lists.md similarity index 100% rename from To-Do lists.md rename to x/To-Do lists.md diff --git a/Twitter.md b/x/Twitter.md similarity index 100% rename from Twitter.md rename to x/Twitter.md diff --git a/VPS.md b/x/VPS.md similarity index 100% rename from VPS.md rename to x/VPS.md diff --git a/Web.md b/x/Web.md similarity index 100% rename from Web.md rename to x/Web.md diff --git a/Wikimedia.md b/x/Wikimedia.md similarity index 100% rename from Wikimedia.md rename to x/Wikimedia.md diff --git a/XMPP.md b/x/XMPP.md similarity index 100% rename from XMPP.md rename to x/XMPP.md diff --git a/YouTube Restricted Mode.md b/x/YouTube Restricted Mode.md similarity index 100% rename from YouTube Restricted Mode.md rename to x/YouTube Restricted Mode.md diff --git a/YouTube.md b/x/YouTube.md similarity index 100% rename from YouTube.md rename to x/YouTube.md diff --git a/curl.md b/x/curl.md similarity index 100% rename from curl.md rename to x/curl.md diff --git a/simplegit.md b/x/simplegit.md similarity index 100% rename from simplegit.md rename to x/simplegit.md diff --git a/txt2txt.md b/x/txt2txt.md similarity index 100% rename from txt2txt.md rename to x/txt2txt.md diff --git a/underscores - skin purifying treatment b sides.md b/x/underscores - skin purifying treatment b sides.md similarity index 100% rename from underscores - skin purifying treatment b sides.md rename to x/underscores - skin purifying treatment b sides.md diff --git a/underscores - skin purifying treatment.md b/x/underscores - skin purifying treatment.md similarity index 100% rename from underscores - skin purifying treatment.md rename to x/underscores - skin purifying treatment.md diff --git a/x/x.11tydata.js b/x/x.11tydata.js new file mode 100644 index 0000000..2783208 --- /dev/null +++ b/x/x.11tydata.js @@ -0,0 +1,91 @@ +const { basename, extname } = require("path"); +const { zDateish, formatDate, dateishToDate } = require("../helpers/date.js"); + +// /** +// * @typedef {{ +// // title puede tener length == 0 y por lo tanto ser falseish +// title: string; +// date?: import("../.eleventy.js").Dateish; +// } | +// {date: import("../.eleventy.js").Dateish;}} TitleMetadata +// */ + +// const titleWithDateExp = /^((?\d{4})-(?\d{2})-(?\d{2}))? ?(?.*)$/; +// /** +// * @param {string} name +// * @returns TitleMetadata +// */ +// function parseName(name) { +// const found = name.match(titleWithDateExp); +// if (!found || !found.groups) throw new Error("Algo raro pasó"); +// const { title } = found.groups; + +// const date = +// (found.groups.year && { +// year: parseInt(found.groups.year), +// month: parseInt(found.groups.month), +// day: parseInt(found.groups.day), +// }) || +// undefined; +// // no definir title si es length == 0 +// if (!title && date) return { date }; +// return { title, date }; +// } + +const wikilinkRegExp = /\[\[\s?([^\[\]\|\n\r]+)(\|[^\[\]\|\n\r]+)?\s?\]\]/g; + +/** + * @param {string} a + * @param {string} b + * @returns boolean + */ +function caselessCompare(a, b) { + return a.normalize().toLowerCase() === b.normalize().toLowerCase(); +} +const titleWithDateExp = /^((?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})) ?(?<title>.*)$/; + +module.exports = { + eleventyComputed: { + title: ({ page }) => { + const parsed = zDateish.safeParse(page.fileSlug); + if (parsed.success) { + return formatDate(dateishToDate(parsed.data), true); + } else return page.fileSlug; + }, + dateInTitle: ({ page }) => zDateish.safeParse(page.fileSlug).success, + linkTitle: (data) => { + const fileName = basename(data.page.inputPath, extname(data.page.inputPath)); + if (data.dateInTitle) { + return data.title; + } else if (fileName.match(titleWithDateExp)) { + return `${data.page.fileSlug} (${formatDate(data.page.date, false)})`; + } else return data.page.fileSlug; + }, + // https://github.com/binyamin/eleventy-garden/blob/77be371da872f14adb827e707b49101920aafaec/notes/notes.11tydata.js#L15 + backlinks: (data) => { + const notes = data.collections.x; + const currentFileSlug = data.page.fileSlug; + + const backlinks = notes + .filter((otherNote) => + (otherNote.template.frontMatter.content.match(wikilinkRegExp) || []) + .map((link) => + // Extract link location + link + .slice(2, -2) + .split("|")[0] + .replace(/.(md|markdown)\s?$/i, "") + .trim() + ) + .some((link) => caselessCompare(link, currentFileSlug)) + ) + .map((otherNote) => ({ + url: otherNote.url, + title: otherNote.data.title, + preview: otherNote.template.frontMatter.content.slice(0, 240), + })); + + return backlinks; + }, + }, +}; diff --git a/x/x.json b/x/x.json new file mode 100644 index 0000000..d45d7c4 --- /dev/null +++ b/x/x.json @@ -0,0 +1,3 @@ +{ + "layout": "post.hbs" +} \ No newline at end of file