@geekity/cms 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2217 -214
- package/admin/components/fields.njk +165 -0
- package/admin/layouts/base.njk +1 -1
- package/admin/layouts/settings-page.njk +26 -0
- package/admin/layouts/shell.njk +17 -3
- package/admin/pages/account/forgot.njk +47 -0
- package/admin/pages/account/login.njk +26 -0
- package/admin/pages/account/reset.njk +38 -0
- package/admin/pages/account/setup.njk +28 -0
- package/admin/pages/appearance/themes.njk +69 -0
- package/admin/pages/comments/all.njk +133 -0
- package/admin/{layouts/dashboard.njk → pages/dashboard/home.njk} +8 -15
- package/admin/{layouts/document-conflict.njk → pages/documents/conflict.njk} +1 -0
- package/admin/{layouts/document-editor.njk → pages/documents/editor.njk} +75 -59
- package/admin/{layouts/document-list.njk → pages/documents/list.njk} +19 -2
- package/admin/pages/documents/taxonomy.njk +95 -0
- package/admin/pages/federation/followers.njk +238 -0
- package/admin/pages/federation/settings.njk +77 -0
- package/admin/pages/media/library.njk +160 -0
- package/admin/pages/messages/all.njk +110 -0
- package/admin/pages/navigation/menus.njk +129 -0
- package/admin/{layouts → pages}/placeholder.njk +5 -1
- package/admin/pages/settings/discussion.njk +99 -0
- package/admin/pages/settings/email.njk +203 -0
- package/admin/pages/settings/general.njk +29 -0
- package/admin/pages/settings/permalinks.njk +50 -0
- package/admin/pages/settings/reading.njk +64 -0
- package/admin/pages/tools/content-index.njk +89 -0
- package/admin/pages/users/edit.njk +239 -0
- package/admin/pages/users/list.njk +51 -0
- package/admin/pages/users/new.njk +41 -0
- package/admin/static/admin.css +558 -3
- package/admin/static/copy.js +52 -0
- package/admin/static/editor.js +16 -16
- package/admin/static/slug.js +61 -0
- package/dist/access-log.d.ts +44 -0
- package/dist/access-log.d.ts.map +1 -0
- package/dist/access-log.js +71 -0
- package/dist/access-log.js.map +1 -0
- package/dist/admin/accounts.d.ts +413 -0
- package/dist/admin/accounts.d.ts.map +1 -0
- package/dist/admin/accounts.js +680 -0
- package/dist/admin/accounts.js.map +1 -0
- package/dist/admin/appearance.d.ts +80 -0
- package/dist/admin/appearance.d.ts.map +1 -0
- package/dist/admin/appearance.js +136 -0
- package/dist/admin/appearance.js.map +1 -0
- package/dist/admin/comments.d.ts +90 -0
- package/dist/admin/comments.d.ts.map +1 -0
- package/dist/admin/comments.js +244 -0
- package/dist/admin/comments.js.map +1 -0
- package/dist/admin/credentials.d.ts +26 -2
- package/dist/admin/credentials.d.ts.map +1 -1
- package/dist/admin/credentials.js +35 -2
- package/dist/admin/credentials.js.map +1 -1
- package/dist/admin/documents.d.ts +117 -10
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +328 -41
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +161 -50
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +235 -93
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/formatting.d.ts +20 -0
- package/dist/admin/formatting.d.ts.map +1 -0
- package/dist/admin/formatting.js +72 -0
- package/dist/admin/formatting.js.map +1 -0
- package/dist/admin/headers.d.ts +65 -0
- package/dist/admin/headers.d.ts.map +1 -0
- package/dist/admin/headers.js +104 -0
- package/dist/admin/headers.js.map +1 -0
- package/dist/admin/index.d.ts +38 -12
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +25 -7
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/media.d.ts +168 -0
- package/dist/admin/media.d.ts.map +1 -0
- package/dist/admin/media.js +295 -0
- package/dist/admin/media.js.map +1 -0
- package/dist/admin/menu.d.ts +79 -0
- package/dist/admin/menu.d.ts.map +1 -0
- package/dist/admin/menu.js +143 -0
- package/dist/admin/menu.js.map +1 -0
- package/dist/admin/messages.d.ts +80 -0
- package/dist/admin/messages.d.ts.map +1 -0
- package/dist/admin/messages.js +152 -0
- package/dist/admin/messages.js.map +1 -0
- package/dist/admin/navigation.d.ts +155 -0
- package/dist/admin/navigation.d.ts.map +1 -0
- package/dist/admin/navigation.js +292 -0
- package/dist/admin/navigation.js.map +1 -0
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +31 -7
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/recovery.d.ts +92 -0
- package/dist/admin/recovery.d.ts.map +1 -0
- package/dist/admin/recovery.js +229 -0
- package/dist/admin/recovery.js.map +1 -0
- package/dist/admin/routes.d.ts +0 -20
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +164 -105
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/session.d.ts +17 -3
- package/dist/admin/session.d.ts.map +1 -1
- package/dist/admin/session.js +19 -5
- package/dist/admin/session.js.map +1 -1
- package/dist/admin/settings-discussion.d.ts +37 -0
- package/dist/admin/settings-discussion.d.ts.map +1 -0
- package/dist/admin/settings-discussion.js +117 -0
- package/dist/admin/settings-discussion.js.map +1 -0
- package/dist/admin/settings-email.d.ts +54 -0
- package/dist/admin/settings-email.d.ts.map +1 -0
- package/dist/admin/settings-email.js +189 -0
- package/dist/admin/settings-email.js.map +1 -0
- package/dist/admin/settings-federation.d.ts +48 -0
- package/dist/admin/settings-federation.d.ts.map +1 -0
- package/dist/admin/settings-federation.js +123 -0
- package/dist/admin/settings-federation.js.map +1 -0
- package/dist/admin/settings-general.d.ts +12 -0
- package/dist/admin/settings-general.d.ts.map +1 -0
- package/dist/admin/settings-general.js +48 -0
- package/dist/admin/settings-general.js.map +1 -0
- package/dist/admin/settings-page.d.ts +119 -0
- package/dist/admin/settings-page.d.ts.map +1 -0
- package/dist/admin/settings-page.js +132 -0
- package/dist/admin/settings-page.js.map +1 -0
- package/dist/admin/settings-pages.d.ts +30 -0
- package/dist/admin/settings-pages.d.ts.map +1 -0
- package/dist/admin/settings-pages.js +43 -0
- package/dist/admin/settings-pages.js.map +1 -0
- package/dist/admin/settings-permalinks.d.ts +16 -0
- package/dist/admin/settings-permalinks.d.ts.map +1 -0
- package/dist/admin/settings-permalinks.js +32 -0
- package/dist/admin/settings-permalinks.js.map +1 -0
- package/dist/admin/settings-reading.d.ts +34 -0
- package/dist/admin/settings-reading.d.ts.map +1 -0
- package/dist/admin/settings-reading.js +49 -0
- package/dist/admin/settings-reading.js.map +1 -0
- package/dist/admin/settings.d.ts +339 -96
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +600 -308
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/store.d.ts +606 -152
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +863 -268
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/taxonomy.d.ts +114 -0
- package/dist/admin/taxonomy.d.ts.map +1 -0
- package/dist/admin/taxonomy.js +289 -0
- package/dist/admin/taxonomy.js.map +1 -0
- package/dist/admin/templates.d.ts +46 -14
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +46 -14
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/throttle.d.ts +84 -0
- package/dist/admin/throttle.d.ts.map +1 -0
- package/dist/admin/throttle.js +143 -0
- package/dist/admin/throttle.js.map +1 -0
- package/dist/admin/tools.d.ts +111 -0
- package/dist/admin/tools.d.ts.map +1 -0
- package/dist/admin/tools.js +182 -0
- package/dist/admin/tools.js.map +1 -0
- package/dist/admin/uploads.d.ts +28 -2
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +43 -4
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/users.d.ts +100 -13
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +412 -39
- package/dist/admin/users.js.map +1 -1
- package/dist/cache.d.ts +141 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +207 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +14 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +429 -21
- package/dist/cli.js.map +1 -1
- package/dist/comments/akismet.d.ts +130 -0
- package/dist/comments/akismet.d.ts.map +1 -0
- package/dist/comments/akismet.js +274 -0
- package/dist/comments/akismet.js.map +1 -0
- package/dist/comments/conversation.d.ts +29 -0
- package/dist/comments/conversation.d.ts.map +1 -0
- package/dist/comments/conversation.js +60 -0
- package/dist/comments/conversation.js.map +1 -0
- package/dist/comments/form.d.ts +123 -0
- package/dist/comments/form.d.ts.map +1 -0
- package/dist/comments/form.js +79 -0
- package/dist/comments/form.js.map +1 -0
- package/dist/comments/index.d.ts +16 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +10 -0
- package/dist/comments/index.js.map +1 -0
- package/dist/comments/markdown.d.ts +8 -0
- package/dist/comments/markdown.d.ts.map +1 -0
- package/dist/comments/markdown.js +85 -0
- package/dist/comments/markdown.js.map +1 -0
- package/dist/comments/moderate.d.ts +71 -0
- package/dist/comments/moderate.d.ts.map +1 -0
- package/dist/comments/moderate.js +88 -0
- package/dist/comments/moderate.js.map +1 -0
- package/dist/comments/policy.d.ts +57 -0
- package/dist/comments/policy.d.ts.map +1 -0
- package/dist/comments/policy.js +80 -0
- package/dist/comments/policy.js.map +1 -0
- package/dist/comments/records.d.ts +266 -0
- package/dist/comments/records.d.ts.map +1 -0
- package/dist/comments/records.js +487 -0
- package/dist/comments/records.js.map +1 -0
- package/dist/comments/routes.d.ts +60 -0
- package/dist/comments/routes.d.ts.map +1 -0
- package/dist/comments/routes.js +212 -0
- package/dist/comments/routes.js.map +1 -0
- package/dist/comments/submission.d.ts +297 -0
- package/dist/comments/submission.d.ts.map +1 -0
- package/dist/comments/submission.js +280 -0
- package/dist/comments/submission.js.map +1 -0
- package/dist/comments/viewer.d.ts +21 -0
- package/dist/comments/viewer.d.ts.map +1 -0
- package/dist/comments/viewer.js +45 -0
- package/dist/comments/viewer.js.map +1 -0
- package/dist/config.d.ts +225 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +121 -6
- package/dist/config.js.map +1 -1
- package/dist/contact/delivery.d.ts +60 -0
- package/dist/contact/delivery.d.ts.map +1 -0
- package/dist/contact/delivery.js +87 -0
- package/dist/contact/delivery.js.map +1 -0
- package/dist/contact/form.d.ts +130 -0
- package/dist/contact/form.d.ts.map +1 -0
- package/dist/contact/form.js +163 -0
- package/dist/contact/form.js.map +1 -0
- package/dist/contact/index.d.ts +17 -0
- package/dist/contact/index.d.ts.map +1 -0
- package/dist/contact/index.js +13 -0
- package/dist/contact/index.js.map +1 -0
- package/dist/contact/records.d.ts +124 -0
- package/dist/contact/records.d.ts.map +1 -0
- package/dist/contact/records.js +218 -0
- package/dist/contact/records.js.map +1 -0
- package/dist/contact/routes.d.ts +17 -0
- package/dist/contact/routes.d.ts.map +1 -0
- package/dist/contact/routes.js +127 -0
- package/dist/contact/routes.js.map +1 -0
- package/dist/contact/submission.d.ts +103 -0
- package/dist/contact/submission.d.ts.map +1 -0
- package/dist/contact/submission.js +166 -0
- package/dist/contact/submission.js.map +1 -0
- package/dist/content/document.d.ts +7 -2
- package/dist/content/document.d.ts.map +1 -1
- package/dist/content/document.js +1 -0
- package/dist/content/document.js.map +1 -1
- package/dist/content/index.d.ts +7 -2
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +4 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +24 -2
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +11 -4
- package/dist/content/parser.js.map +1 -1
- package/dist/content/save.d.ts +5 -0
- package/dist/content/save.d.ts.map +1 -1
- package/dist/content/save.js +44 -1
- package/dist/content/save.js.map +1 -1
- package/dist/content/schedule.d.ts +125 -0
- package/dist/content/schedule.d.ts.map +1 -0
- package/dist/content/schedule.js +207 -0
- package/dist/content/schedule.js.map +1 -0
- package/dist/content/search.d.ts +64 -0
- package/dist/content/search.d.ts.map +1 -0
- package/dist/content/search.js +136 -0
- package/dist/content/search.js.map +1 -0
- package/dist/content/store.d.ts +220 -7
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +392 -67
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +7 -1
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +18 -10
- package/dist/content/sync.js.map +1 -1
- package/dist/content/time.d.ts +56 -0
- package/dist/content/time.d.ts.map +1 -0
- package/dist/content/time.js +141 -0
- package/dist/content/time.js.map +1 -0
- package/dist/content/writer.d.ts.map +1 -1
- package/dist/content/writer.js +3 -0
- package/dist/content/writer.js.map +1 -1
- package/dist/env.d.ts +70 -5
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/actor.d.ts +95 -41
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +180 -53
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +44 -17
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +98 -46
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/delivery.d.ts +63 -15
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +154 -80
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +22 -17
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +98 -77
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/followers.d.ts +3 -2
- package/dist/federation/followers.d.ts.map +1 -1
- package/dist/federation/followers.js +6 -5
- package/dist/federation/followers.js.map +1 -1
- package/dist/federation/import-wordpress.d.ts +128 -0
- package/dist/federation/import-wordpress.d.ts.map +1 -0
- package/dist/federation/import-wordpress.js +426 -0
- package/dist/federation/import-wordpress.js.map +1 -0
- package/dist/federation/inbox.d.ts +36 -13
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +120 -49
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +22 -10
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +13 -8
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/keys.d.ts +98 -20
- package/dist/federation/keys.d.ts.map +1 -1
- package/dist/federation/keys.js +269 -39
- package/dist/federation/keys.js.map +1 -1
- package/dist/federation/mount.d.ts +46 -10
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +300 -28
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +23 -35
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +26 -39
- package/dist/federation/paths.js.map +1 -1
- package/dist/federation/records.d.ts +223 -0
- package/dist/federation/records.d.ts.map +1 -0
- package/dist/federation/records.js +506 -0
- package/dist/federation/records.js.map +1 -0
- package/dist/federation/relays.d.ts +114 -0
- package/dist/federation/relays.d.ts.map +1 -0
- package/dist/federation/relays.js +290 -0
- package/dist/federation/relays.js.map +1 -0
- package/dist/federation/replies.d.ts +80 -0
- package/dist/federation/replies.d.ts.map +1 -0
- package/dist/federation/replies.js +166 -0
- package/dist/federation/replies.js.map +1 -0
- package/dist/federation/wordpress.d.ts +131 -0
- package/dist/federation/wordpress.d.ts.map +1 -0
- package/dist/federation/wordpress.js +341 -0
- package/dist/federation/wordpress.js.map +1 -0
- package/dist/files/atomic.d.ts +103 -0
- package/dist/files/atomic.d.ts.map +1 -0
- package/dist/files/atomic.js +150 -0
- package/dist/files/atomic.js.map +1 -0
- package/dist/files/index.d.ts +3 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +2 -0
- package/dist/files/index.js.map +1 -0
- package/dist/forms/protection.d.ts +85 -0
- package/dist/forms/protection.d.ts.map +1 -0
- package/dist/forms/protection.js +116 -0
- package/dist/forms/protection.js.map +1 -0
- package/dist/images/icons.d.ts +59 -0
- package/dist/images/icons.d.ts.map +1 -0
- package/dist/images/icons.js +131 -0
- package/dist/images/icons.js.map +1 -0
- package/dist/images/index.d.ts +7 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +4 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/markup.d.ts +47 -0
- package/dist/images/markup.d.ts.map +1 -0
- package/dist/images/markup.js +175 -0
- package/dist/images/markup.js.map +1 -0
- package/dist/images/paths.d.ts +34 -0
- package/dist/images/paths.d.ts.map +1 -0
- package/dist/images/paths.js +41 -0
- package/dist/images/paths.js.map +1 -0
- package/dist/images/variants.d.ts +104 -0
- package/dist/images/variants.d.ts.map +1 -0
- package/dist/images/variants.js +320 -0
- package/dist/images/variants.js.map +1 -0
- package/dist/index.d.ts +123 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +344 -25
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +34 -3
- package/dist/init.js.map +1 -1
- package/dist/mail/brevo.d.ts +35 -0
- package/dist/mail/brevo.d.ts.map +1 -0
- package/dist/mail/brevo.js +85 -0
- package/dist/mail/brevo.js.map +1 -0
- package/dist/mail/credentials.d.ts +62 -0
- package/dist/mail/credentials.d.ts.map +1 -0
- package/dist/mail/credentials.js +86 -0
- package/dist/mail/credentials.js.map +1 -0
- package/dist/mail/index.d.ts +15 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +8 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/memory.d.ts +35 -0
- package/dist/mail/memory.d.ts.map +1 -0
- package/dist/mail/memory.js +29 -0
- package/dist/mail/memory.js.map +1 -0
- package/dist/mail/provider.d.ts +80 -0
- package/dist/mail/provider.d.ts.map +1 -0
- package/dist/mail/provider.js +23 -0
- package/dist/mail/provider.js.map +1 -0
- package/dist/mail/service.d.ts +156 -0
- package/dist/mail/service.d.ts.map +1 -0
- package/dist/mail/service.js +265 -0
- package/dist/mail/service.js.map +1 -0
- package/dist/mail/smtp.d.ts +39 -0
- package/dist/mail/smtp.d.ts.map +1 -0
- package/dist/mail/smtp.js +58 -0
- package/dist/mail/smtp.js.map +1 -0
- package/dist/mail/templates.d.ts +91 -0
- package/dist/mail/templates.d.ts.map +1 -0
- package/dist/mail/templates.js +69 -0
- package/dist/mail/templates.js.map +1 -0
- package/dist/notifications/comments.d.ts +66 -0
- package/dist/notifications/comments.d.ts.map +1 -0
- package/dist/notifications/comments.js +151 -0
- package/dist/notifications/comments.js.map +1 -0
- package/dist/notifications/digest.d.ts +135 -0
- package/dist/notifications/digest.d.ts.map +1 -0
- package/dist/notifications/digest.js +287 -0
- package/dist/notifications/digest.js.map +1 -0
- package/dist/notifications/index.d.ts +13 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +8 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/links.d.ts +60 -0
- package/dist/notifications/links.d.ts.map +1 -0
- package/dist/notifications/links.js +63 -0
- package/dist/notifications/links.js.map +1 -0
- package/dist/notifications/optouts.d.ts +48 -0
- package/dist/notifications/optouts.d.ts.map +1 -0
- package/dist/notifications/optouts.js +93 -0
- package/dist/notifications/optouts.js.map +1 -0
- package/dist/notifications/preferences.d.ts +158 -0
- package/dist/notifications/preferences.d.ts.map +1 -0
- package/dist/notifications/preferences.js +195 -0
- package/dist/notifications/preferences.js.map +1 -0
- package/dist/notifications/routes.d.ts +28 -0
- package/dist/notifications/routes.d.ts.map +1 -0
- package/dist/notifications/routes.js +184 -0
- package/dist/notifications/routes.js.map +1 -0
- package/dist/notifications/tokens.d.ts +60 -0
- package/dist/notifications/tokens.d.ts.map +1 -0
- package/dist/notifications/tokens.js +125 -0
- package/dist/notifications/tokens.js.map +1 -0
- package/dist/notify.d.ts +84 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +149 -0
- package/dist/notify.js.map +1 -0
- package/dist/web/archive.d.ts +49 -0
- package/dist/web/archive.d.ts.map +1 -0
- package/dist/web/archive.js +59 -0
- package/dist/web/archive.js.map +1 -0
- package/dist/web/assets.d.ts +6 -5
- package/dist/web/assets.d.ts.map +1 -1
- package/dist/web/assets.js +5 -7
- package/dist/web/assets.js.map +1 -1
- package/dist/web/authors.d.ts +143 -0
- package/dist/web/authors.d.ts.map +1 -0
- package/dist/web/authors.js +178 -0
- package/dist/web/authors.js.map +1 -0
- package/dist/web/comments.d.ts +60 -0
- package/dist/web/comments.d.ts.map +1 -0
- package/dist/web/comments.js +207 -0
- package/dist/web/comments.js.map +1 -0
- package/dist/web/context.d.ts +162 -28
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +123 -26
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +209 -0
- package/dist/web/conversation.d.ts.map +1 -0
- package/dist/web/conversation.js +557 -0
- package/dist/web/conversation.js.map +1 -0
- package/dist/web/documents.d.ts +36 -6
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +52 -10
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-atom.d.ts +22 -0
- package/dist/web/feed-atom.d.ts.map +1 -0
- package/dist/web/feed-atom.js +83 -0
- package/dist/web/feed-atom.js.map +1 -0
- package/dist/web/feed-item.d.ts +145 -0
- package/dist/web/feed-item.d.ts.map +1 -0
- package/dist/web/feed-item.js +120 -0
- package/dist/web/feed-item.js.map +1 -0
- package/dist/web/feed-json.d.ts +79 -0
- package/dist/web/feed-json.d.ts.map +1 -0
- package/dist/web/feed-json.js +53 -0
- package/dist/web/feed-json.js.map +1 -0
- package/dist/web/feed-rss.d.ts +26 -0
- package/dist/web/feed-rss.d.ts.map +1 -0
- package/dist/web/feed-rss.js +203 -0
- package/dist/web/feed-rss.js.map +1 -0
- package/dist/web/feed-source.d.ts +244 -0
- package/dist/web/feed-source.d.ts.map +1 -0
- package/dist/web/feed-source.js +201 -0
- package/dist/web/feed-source.js.map +1 -0
- package/dist/web/feed-xml.d.ts +63 -0
- package/dist/web/feed-xml.d.ts.map +1 -0
- package/dist/web/feed-xml.js +116 -0
- package/dist/web/feed-xml.js.map +1 -0
- package/dist/web/feeds.d.ts +31 -96
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +94 -198
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/health.d.ts +31 -0
- package/dist/web/health.d.ts.map +1 -0
- package/dist/web/health.js +44 -0
- package/dist/web/health.js.map +1 -0
- package/dist/web/index.d.ts +30 -10
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +18 -7
- package/dist/web/index.js.map +1 -1
- package/dist/web/navigation.d.ts +195 -0
- package/dist/web/navigation.d.ts.map +1 -0
- package/dist/web/navigation.js +300 -0
- package/dist/web/navigation.js.map +1 -0
- package/dist/web/negotiate.d.ts +31 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +31 -11
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/recent.d.ts +43 -0
- package/dist/web/recent.d.ts.map +1 -0
- package/dist/web/recent.js +37 -0
- package/dist/web/recent.js.map +1 -0
- package/dist/web/render.d.ts +203 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +341 -17
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +25 -8
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +854 -93
- package/dist/web/routes.js.map +1 -1
- package/dist/web/sanitize.d.ts +19 -0
- package/dist/web/sanitize.d.ts.map +1 -0
- package/dist/web/sanitize.js +272 -0
- package/dist/web/sanitize.js.map +1 -0
- package/dist/web/search.d.ts +79 -0
- package/dist/web/search.d.ts.map +1 -0
- package/dist/web/search.js +94 -0
- package/dist/web/search.js.map +1 -0
- package/dist/web/sitemap.d.ts +120 -0
- package/dist/web/sitemap.d.ts.map +1 -0
- package/dist/web/sitemap.js +199 -0
- package/dist/web/sitemap.js.map +1 -0
- package/dist/web/taxonomy.d.ts +152 -0
- package/dist/web/taxonomy.d.ts.map +1 -0
- package/dist/web/taxonomy.js +237 -0
- package/dist/web/taxonomy.js.map +1 -0
- package/dist/web/templates.d.ts +54 -16
- package/dist/web/templates.d.ts.map +1 -1
- package/dist/web/templates.js +109 -28
- package/dist/web/templates.js.map +1 -1
- package/dist/web/themes.d.ts +226 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +314 -0
- package/dist/web/themes.js.map +1 -0
- package/dist/webmention/discovery.d.ts +51 -0
- package/dist/webmention/discovery.d.ts.map +1 -0
- package/dist/webmention/discovery.js +176 -0
- package/dist/webmention/discovery.js.map +1 -0
- package/dist/webmention/html.d.ts +71 -0
- package/dist/webmention/html.d.ts.map +1 -0
- package/dist/webmention/html.js +285 -0
- package/dist/webmention/html.js.map +1 -0
- package/dist/webmention/index.d.ts +12 -0
- package/dist/webmention/index.d.ts.map +1 -0
- package/dist/webmention/index.js +8 -0
- package/dist/webmention/index.js.map +1 -0
- package/dist/webmention/links.d.ts +18 -0
- package/dist/webmention/links.d.ts.map +1 -0
- package/dist/webmention/links.js +64 -0
- package/dist/webmention/links.js.map +1 -0
- package/dist/webmention/microformats.d.ts +93 -0
- package/dist/webmention/microformats.d.ts.map +1 -0
- package/dist/webmention/microformats.js +376 -0
- package/dist/webmention/microformats.js.map +1 -0
- package/dist/webmention/receive.d.ts +141 -0
- package/dist/webmention/receive.d.ts.map +1 -0
- package/dist/webmention/receive.js +264 -0
- package/dist/webmention/receive.js.map +1 -0
- package/dist/webmention/routes.d.ts +37 -0
- package/dist/webmention/routes.d.ts.map +1 -0
- package/dist/webmention/routes.js +75 -0
- package/dist/webmention/routes.js.map +1 -0
- package/dist/webmention/service.d.ts +94 -0
- package/dist/webmention/service.d.ts.map +1 -0
- package/dist/webmention/service.js +207 -0
- package/dist/webmention/service.js.map +1 -0
- package/package.json +11 -6
- package/templates/site/content/_data/site.json +8 -0
- package/templates/site/content/pages/about.md +7 -0
- package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
- package/templates/site/geekity.config.ts +11 -1
- package/templates/site/tsconfig.json +1 -1
- package/themes/default/README.md +1216 -50
- package/themes/default/layouts/404.njk +2 -3
- package/themes/default/layouts/author.njk +36 -0
- package/themes/default/layouts/base.njk +161 -31
- package/themes/default/layouts/category.njk +27 -0
- package/themes/default/layouts/front-page.njk +56 -0
- package/themes/default/layouts/home.njk +17 -1
- package/themes/default/layouts/page.njk +57 -5
- package/themes/default/layouts/post.njk +78 -19
- package/themes/default/layouts/search.njk +57 -0
- package/themes/default/layouts/tag.njk +3 -6
- package/themes/default/mail/comment-digest.html.njk +37 -0
- package/themes/default/mail/comment-digest.subject.njk +3 -0
- package/themes/default/mail/comment-digest.txt.njk +40 -0
- package/themes/default/mail/comment-pending.html.njk +27 -0
- package/themes/default/mail/comment-pending.subject.njk +2 -0
- package/themes/default/mail/comment-pending.txt.njk +24 -0
- package/themes/default/mail/comment-reply.html.njk +21 -0
- package/themes/default/mail/comment-reply.subject.njk +2 -0
- package/themes/default/mail/comment-reply.txt.njk +22 -0
- package/themes/default/mail/contact-message.html.njk +24 -0
- package/themes/default/mail/contact-message.subject.njk +5 -0
- package/themes/default/mail/contact-message.txt.njk +20 -0
- package/themes/default/mail/password-changed.html.njk +18 -0
- package/themes/default/mail/password-changed.subject.njk +2 -0
- package/themes/default/mail/password-changed.txt.njk +17 -0
- package/themes/default/mail/password-reset.html.njk +22 -0
- package/themes/default/mail/password-reset.subject.njk +2 -0
- package/themes/default/mail/password-reset.txt.njk +18 -0
- package/themes/default/mail/test.html.njk +14 -0
- package/themes/default/mail/test.subject.njk +2 -0
- package/themes/default/mail/test.txt.njk +12 -0
- package/themes/default/partials/archive.njk +27 -0
- package/themes/default/partials/bio.njk +71 -0
- package/themes/default/partials/comment-form.njk +137 -0
- package/themes/default/partials/contact-form.njk +88 -0
- package/themes/default/partials/conversation.njk +139 -0
- package/themes/default/partials/feeds.njk +26 -0
- package/themes/default/partials/jsonld.njk +120 -0
- package/themes/default/partials/menu.njk +32 -0
- package/themes/default/partials/pagination.njk +12 -6
- package/themes/default/partials/post-list.njk +51 -18
- package/themes/default/partials/search-form.njk +22 -0
- package/themes/default/partials/tags.njk +26 -5
- package/themes/default/static/highlight.js +4 -0
- package/themes/default/static/style.css +1142 -194
- package/themes/default/theme.json +9 -0
- package/admin/layouts/federation.njk +0 -145
- package/admin/layouts/login.njk +0 -23
- package/admin/layouts/settings.njk +0 -116
- package/admin/layouts/setup.njk +0 -27
- package/admin/layouts/users.njk +0 -91
- /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ImageConfig, ImageRecord } from './variants.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Responsive markup for the site's own pages.
|
|
4
|
+
*
|
|
5
|
+
* This runs over the HTML on its way into a theme template and nowhere else.
|
|
6
|
+
* The feeds, the JSON and Markdown representations and the ActivityStreams
|
|
7
|
+
* `content` keep the plain `<img>` that {@link renderMarkdown} produced, as
|
|
8
|
+
* decision-10 requires: a reader's client and a remote instance cannot resolve
|
|
9
|
+
* a `srcset` of this site's derived files sensibly, and half of them would
|
|
10
|
+
* strip the `<picture>` anyway.
|
|
11
|
+
*/
|
|
12
|
+
/** What the markup asks about an upload. See {@link describeImage}. */
|
|
13
|
+
export type DescribeImage = (source: string) => ImageRecord | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* The `sizes` every image is given.
|
|
16
|
+
*
|
|
17
|
+
* `100vw` is 11ty/image's own default and the only honest one a CMS can pick:
|
|
18
|
+
* how wide a picture is drawn is a fact about the theme's stylesheet, which
|
|
19
|
+
* this code has never seen. A theme that knows better overrides it, and being
|
|
20
|
+
* wrong here costs bandwidth rather than correctness — the browser picks a
|
|
21
|
+
* candidate that is too wide, never one that is too small.
|
|
22
|
+
*/
|
|
23
|
+
export declare const IMAGE_SIZES = "100vw";
|
|
24
|
+
/**
|
|
25
|
+
* Rewrite every uploaded image in a fragment of HTML as a `<picture>`.
|
|
26
|
+
*
|
|
27
|
+
* An image is left exactly as it was when it points somewhere else, when it
|
|
28
|
+
* points at a derived file already, or when the lookup knows nothing about it
|
|
29
|
+
* — which is the case for a GIF, for an SVG, and for any upload whose variants
|
|
30
|
+
* have not been derived yet. Leaving it alone is always safe: the original is
|
|
31
|
+
* the source of truth and the site serves it either way.
|
|
32
|
+
*
|
|
33
|
+
* It is a text rewrite rather than a parse because the input is one document's
|
|
34
|
+
* body, the only tags it has to understand are `<img>` ones, and a parser
|
|
35
|
+
* would have to reproduce the exact HTML around them to hand it back.
|
|
36
|
+
*/
|
|
37
|
+
export declare function responsiveImages(html: string, describe: DescribeImage): string;
|
|
38
|
+
/**
|
|
39
|
+
* The same rewrite, over one site's own derived images.
|
|
40
|
+
*
|
|
41
|
+
* An upload with no record yet is left plain and its variants are derived in
|
|
42
|
+
* the background, so the page that first mentions a newly hand-dropped image
|
|
43
|
+
* renders at once and the one after it is responsive. Nothing waits on an
|
|
44
|
+
* encoder while a reader waits on a page.
|
|
45
|
+
*/
|
|
46
|
+
export declare function siteImageMarkup(config: ImageConfig, html: string): string;
|
|
47
|
+
//# sourceMappingURL=markup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../../src/images/markup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAE5E;;;;;;;;;GASG;AAEH,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAExE;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC;AAQnC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAiB9E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAazE"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { UPLOAD_ASSET_PREFIX } from '../web/assets.js';
|
|
2
|
+
import { describeImage, generateImageVariants, imageMediaType, VARIANT_ASSET_PREFIX, } from './variants.js';
|
|
3
|
+
/**
|
|
4
|
+
* The `sizes` every image is given.
|
|
5
|
+
*
|
|
6
|
+
* `100vw` is 11ty/image's own default and the only honest one a CMS can pick:
|
|
7
|
+
* how wide a picture is drawn is a fact about the theme's stylesheet, which
|
|
8
|
+
* this code has never seen. A theme that knows better overrides it, and being
|
|
9
|
+
* wrong here costs bandwidth rather than correctness — the browser picks a
|
|
10
|
+
* candidate that is too wide, never one that is too small.
|
|
11
|
+
*/
|
|
12
|
+
export const IMAGE_SIZES = '100vw';
|
|
13
|
+
/** Every `<img>` tag, with its attribute text. Void elements have no closing half. */
|
|
14
|
+
const IMG_TAG = /<img\s([^>]*?)\/?>/gi;
|
|
15
|
+
/** One attribute of a tag: its name, and its value however it was quoted. */
|
|
16
|
+
const ATTRIBUTE = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
|
|
17
|
+
/**
|
|
18
|
+
* Rewrite every uploaded image in a fragment of HTML as a `<picture>`.
|
|
19
|
+
*
|
|
20
|
+
* An image is left exactly as it was when it points somewhere else, when it
|
|
21
|
+
* points at a derived file already, or when the lookup knows nothing about it
|
|
22
|
+
* — which is the case for a GIF, for an SVG, and for any upload whose variants
|
|
23
|
+
* have not been derived yet. Leaving it alone is always safe: the original is
|
|
24
|
+
* the source of truth and the site serves it either way.
|
|
25
|
+
*
|
|
26
|
+
* It is a text rewrite rather than a parse because the input is one document's
|
|
27
|
+
* body, the only tags it has to understand are `<img>` ones, and a parser
|
|
28
|
+
* would have to reproduce the exact HTML around them to hand it back.
|
|
29
|
+
*/
|
|
30
|
+
export function responsiveImages(html, describe) {
|
|
31
|
+
if (!html.includes('<img'))
|
|
32
|
+
return html;
|
|
33
|
+
return html.replace(IMG_TAG, (tag, attributes) => {
|
|
34
|
+
const parsed = parseAttributes(attributes);
|
|
35
|
+
const src = parsed.get('src');
|
|
36
|
+
if (src === undefined)
|
|
37
|
+
return tag;
|
|
38
|
+
const source = uploadPath(src);
|
|
39
|
+
if (source === undefined)
|
|
40
|
+
return tag;
|
|
41
|
+
const record = describe(source);
|
|
42
|
+
if (record === undefined || record.variants.length === 0)
|
|
43
|
+
return tag;
|
|
44
|
+
return picture({ tag, attributes: parsed, record });
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The same rewrite, over one site's own derived images.
|
|
49
|
+
*
|
|
50
|
+
* An upload with no record yet is left plain and its variants are derived in
|
|
51
|
+
* the background, so the page that first mentions a newly hand-dropped image
|
|
52
|
+
* renders at once and the one after it is responsive. Nothing waits on an
|
|
53
|
+
* encoder while a reader waits on a page.
|
|
54
|
+
*/
|
|
55
|
+
export function siteImageMarkup(config, html) {
|
|
56
|
+
if (!config.imageOptimization)
|
|
57
|
+
return html;
|
|
58
|
+
return responsiveImages(html, (source) => {
|
|
59
|
+
const record = describeImage(config, source);
|
|
60
|
+
if (record === undefined) {
|
|
61
|
+
void generateImageVariants(config, source).catch((error) => {
|
|
62
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
63
|
+
console.warn(`Could not derive image variants for ${source}: ${message}`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return record;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** One `<picture>`: a `<source>` per derived format, then the original's `<img>`. */
|
|
70
|
+
function picture(input) {
|
|
71
|
+
const { record } = input;
|
|
72
|
+
const byFormat = new Map();
|
|
73
|
+
for (const variant of record.variants) {
|
|
74
|
+
byFormat.set(variant.format, [...(byFormat.get(variant.format) ?? []), variant]);
|
|
75
|
+
}
|
|
76
|
+
const sources = [];
|
|
77
|
+
for (const [format, variants] of byFormat) {
|
|
78
|
+
// The original's own format is the `<img>`, not a `<source>`: a browser
|
|
79
|
+
// that skipped every source has to land on something.
|
|
80
|
+
if (format === record.format)
|
|
81
|
+
continue;
|
|
82
|
+
const type = imageMediaType(format);
|
|
83
|
+
if (type === undefined)
|
|
84
|
+
continue;
|
|
85
|
+
sources.push(`<source type="${type}" srcset="${srcset(record.source, variants)}" sizes="${IMAGE_SIZES}">`);
|
|
86
|
+
}
|
|
87
|
+
const fallback = byFormat.get(record.format) ?? [];
|
|
88
|
+
return `<picture>${sources.join('')}${image(input.tag, input.attributes, record, fallback)}</picture>`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The `<img>` at the bottom of the `<picture>`: the author's tag, with what
|
|
92
|
+
* the record knows added to it.
|
|
93
|
+
*
|
|
94
|
+
* The author's own attributes are kept verbatim and win over every one of
|
|
95
|
+
* these — a `width` written by hand is a decision, and a CMS that overruled it
|
|
96
|
+
* would be a CMS that could not be argued with.
|
|
97
|
+
*/
|
|
98
|
+
function image(tag, attributes, record, fallback) {
|
|
99
|
+
const additions = [];
|
|
100
|
+
if (fallback.length > 0)
|
|
101
|
+
additions.push(`srcset="${srcset(record.source, fallback)}"`);
|
|
102
|
+
additions.push(`sizes="${IMAGE_SIZES}"`);
|
|
103
|
+
additions.push(`width="${String(record.width)}"`);
|
|
104
|
+
additions.push(`height="${String(record.height)}"`);
|
|
105
|
+
additions.push('loading="lazy"');
|
|
106
|
+
const wanted = additions.filter((addition) => {
|
|
107
|
+
const name = addition.slice(0, addition.indexOf('='));
|
|
108
|
+
return !attributes.has(name);
|
|
109
|
+
});
|
|
110
|
+
if (wanted.length === 0)
|
|
111
|
+
return tag;
|
|
112
|
+
// The author's tag with the additions inserted before its close, so nothing
|
|
113
|
+
// about how it was written — the quoting, the order, a stray attribute the
|
|
114
|
+
// CMS has never heard of — is reconstructed and possibly got wrong.
|
|
115
|
+
const close = tag.endsWith('/>') ? -2 : -1;
|
|
116
|
+
return `${tag.slice(0, close).trimEnd()} ${wanted.join(' ')}>`;
|
|
117
|
+
}
|
|
118
|
+
/** A `srcset`: every variant of one format, narrowest first, with its width descriptor. */
|
|
119
|
+
function srcset(source, variants) {
|
|
120
|
+
return [...variants]
|
|
121
|
+
.sort((a, b) => a.width - b.width)
|
|
122
|
+
.map((variant) => `${variantHref(source, variant)} ${String(variant.width)}w`)
|
|
123
|
+
.join(', ');
|
|
124
|
+
}
|
|
125
|
+
/** The URL of one derived file, with every path segment encoded as a URL wants. */
|
|
126
|
+
function variantHref(source, variant) {
|
|
127
|
+
const segments = [...source.split('/'), variant.file].map((segment) => encodeURIComponent(segment));
|
|
128
|
+
return `${VARIANT_ASSET_PREFIX}${segments.join('/')}`;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The upload a `src` points at, relative to `content/uploads/`, or
|
|
132
|
+
* `undefined` when it points somewhere else.
|
|
133
|
+
*
|
|
134
|
+
* A derived file is somewhere else on purpose: the rewrite must not be able to
|
|
135
|
+
* feed on its own output, whether that is a page rendered twice or an author
|
|
136
|
+
* who pasted a variant URL by hand.
|
|
137
|
+
*/
|
|
138
|
+
function uploadPath(src) {
|
|
139
|
+
if (src.startsWith(VARIANT_ASSET_PREFIX))
|
|
140
|
+
return undefined;
|
|
141
|
+
if (!src.startsWith(UPLOAD_ASSET_PREFIX))
|
|
142
|
+
return undefined;
|
|
143
|
+
const relative = src.slice(UPLOAD_ASSET_PREFIX.length);
|
|
144
|
+
if (relative === '' || relative.includes('..'))
|
|
145
|
+
return undefined;
|
|
146
|
+
// A URL is what is in the attribute and a path is what is on disk, so the
|
|
147
|
+
// percent-encoding markdown-it applied has to come off before the lookup.
|
|
148
|
+
try {
|
|
149
|
+
return relative.split('/').map(decodeURIComponent).join('/');
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** A tag's attributes by lower-cased name, with entities left as written. */
|
|
156
|
+
function parseAttributes(attributes) {
|
|
157
|
+
const parsed = new Map();
|
|
158
|
+
for (const match of attributes.matchAll(ATTRIBUTE)) {
|
|
159
|
+
const name = (match[1] ?? '').toLowerCase();
|
|
160
|
+
if (name === '' || parsed.has(name))
|
|
161
|
+
continue;
|
|
162
|
+
parsed.set(name, decodeEntities(match[2] ?? match[3] ?? match[4] ?? ''));
|
|
163
|
+
}
|
|
164
|
+
return parsed;
|
|
165
|
+
}
|
|
166
|
+
/** The five entities markdown-it writes into an attribute, back as characters. */
|
|
167
|
+
function decodeEntities(value) {
|
|
168
|
+
return value
|
|
169
|
+
.replace(/</g, '<')
|
|
170
|
+
.replace(/>/g, '>')
|
|
171
|
+
.replace(/"/g, '"')
|
|
172
|
+
.replace(/'/g, "'")
|
|
173
|
+
.replace(/&/g, '&');
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=markup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markup.js","sourceRoot":"","sources":["../../src/images/markup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ResolvedConfig } from '../config.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Where a derived image comes from and where it goes.
|
|
4
|
+
*
|
|
5
|
+
* Its own file because both kinds of derived file need it — the widths in
|
|
6
|
+
* `variants.ts` and the site's icons in `icons.ts` — and one of those has to
|
|
7
|
+
* be able to ask the other to derive a file without the two importing each
|
|
8
|
+
* other.
|
|
9
|
+
*/
|
|
10
|
+
/** The directory under `dataDir` that holds every derived image. */
|
|
11
|
+
export declare const IMAGE_DIRECTORY = "images";
|
|
12
|
+
/**
|
|
13
|
+
* URL prefix the derived files are served under.
|
|
14
|
+
*
|
|
15
|
+
* It sits inside `/uploads/` rather than beside it so a site's asset host, its
|
|
16
|
+
* cache rules and its Eleventy passthrough only ever have to know about one
|
|
17
|
+
* path. `_` cannot collide with a real upload: the CMS files uploads under
|
|
18
|
+
* `{yyyy}/{mm}/`, and Eleventy — like the CMS's own content walk — ignores
|
|
19
|
+
* underscore-prefixed directories anyway.
|
|
20
|
+
*/
|
|
21
|
+
export declare const VARIANT_ASSET_PREFIX = "/uploads/_/";
|
|
22
|
+
/** The part of the config the derived images are derived according to. */
|
|
23
|
+
export type ImageConfig = Pick<ResolvedConfig, 'contentDir' | 'dataDir' | 'imageOptimization' | 'imageWidths' | 'imageFormats'>;
|
|
24
|
+
/** The derived directory for one upload. */
|
|
25
|
+
export declare function derivedDir(config: ImageConfig, source: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* The upload as an absolute path, or `undefined` when it is not one.
|
|
28
|
+
*
|
|
29
|
+
* A source path can arrive off a URL, so containment is checked after
|
|
30
|
+
* resolution rather than by inspecting the string — the rule `findAsset`
|
|
31
|
+
* applies to every other request for a file.
|
|
32
|
+
*/
|
|
33
|
+
export declare function sourceFile(config: ImageConfig, source: string): string | undefined;
|
|
34
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/images/paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;;;GAOG;AAEH,oEAAoE;AACpE,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,gBAA6B,CAAC;AAE/D,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,cAAc,EACd,YAAY,GAAG,SAAS,GAAG,mBAAmB,GAAG,aAAa,GAAG,cAAc,CAChF,CAAC;AAEF,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { UPLOAD_ASSET_PREFIX, UPLOAD_DIRECTORY } from '../web/assets.js';
|
|
3
|
+
/**
|
|
4
|
+
* Where a derived image comes from and where it goes.
|
|
5
|
+
*
|
|
6
|
+
* Its own file because both kinds of derived file need it — the widths in
|
|
7
|
+
* `variants.ts` and the site's icons in `icons.ts` — and one of those has to
|
|
8
|
+
* be able to ask the other to derive a file without the two importing each
|
|
9
|
+
* other.
|
|
10
|
+
*/
|
|
11
|
+
/** The directory under `dataDir` that holds every derived image. */
|
|
12
|
+
export const IMAGE_DIRECTORY = 'images';
|
|
13
|
+
/**
|
|
14
|
+
* URL prefix the derived files are served under.
|
|
15
|
+
*
|
|
16
|
+
* It sits inside `/uploads/` rather than beside it so a site's asset host, its
|
|
17
|
+
* cache rules and its Eleventy passthrough only ever have to know about one
|
|
18
|
+
* path. `_` cannot collide with a real upload: the CMS files uploads under
|
|
19
|
+
* `{yyyy}/{mm}/`, and Eleventy — like the CMS's own content walk — ignores
|
|
20
|
+
* underscore-prefixed directories anyway.
|
|
21
|
+
*/
|
|
22
|
+
export const VARIANT_ASSET_PREFIX = `${UPLOAD_ASSET_PREFIX}_/`;
|
|
23
|
+
/** The derived directory for one upload. */
|
|
24
|
+
export function derivedDir(config, source) {
|
|
25
|
+
return path.join(config.dataDir, IMAGE_DIRECTORY, ...source.split('/'));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The upload as an absolute path, or `undefined` when it is not one.
|
|
29
|
+
*
|
|
30
|
+
* A source path can arrive off a URL, so containment is checked after
|
|
31
|
+
* resolution rather than by inspecting the string — the rule `findAsset`
|
|
32
|
+
* applies to every other request for a file.
|
|
33
|
+
*/
|
|
34
|
+
export function sourceFile(config, source) {
|
|
35
|
+
if (source === '' || source.includes('\0'))
|
|
36
|
+
return undefined;
|
|
37
|
+
const root = path.resolve(config.contentDir, UPLOAD_DIRECTORY);
|
|
38
|
+
const file = path.resolve(root, source);
|
|
39
|
+
return file.startsWith(root + path.sep) ? file : undefined;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/images/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;;;;;;GAOG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,mBAAmB,IAAI,CAAC;AAQ/D,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,MAAc;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,MAAc;IAC5D,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { StaticAsset } from '../web/assets.ts';
|
|
2
|
+
import type { ImageConfig } from './paths.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Image variants: the derived copies of an upload, and the record of them.
|
|
5
|
+
*
|
|
6
|
+
* The original under `content/uploads/` is the only source of truth
|
|
7
|
+
* (decision-10). Everything this module writes lives under
|
|
8
|
+
* `<dataDir>/images/<the upload's path>/`, is rebuildable from that original,
|
|
9
|
+
* and may be deleted at any moment — which is also decision-9's rule for
|
|
10
|
+
* `data/`. Nothing here is ever read by the feeds or by a remote instance;
|
|
11
|
+
* only the site's own HTML knows these files exist.
|
|
12
|
+
*
|
|
13
|
+
* Where the files live is `paths.ts`, and the site's icons are `icons.ts`:
|
|
14
|
+
* both kinds of derived file share the directory and the URL prefix.
|
|
15
|
+
*/
|
|
16
|
+
export { IMAGE_DIRECTORY, VARIANT_ASSET_PREFIX } from './paths.ts';
|
|
17
|
+
export type { ImageConfig } from './paths.ts';
|
|
18
|
+
/** The sidecar that records what was derived, beside the files it describes. */
|
|
19
|
+
export declare const IMAGE_RECORD_NAME = "image.json";
|
|
20
|
+
/** One derived copy of an upload. */
|
|
21
|
+
export interface ImageVariant {
|
|
22
|
+
/** Its width in pixels, which is also what the `srcset` descriptor says. */
|
|
23
|
+
width: number;
|
|
24
|
+
/** Its height, so a caller never has to open the file to know the shape. */
|
|
25
|
+
height: number;
|
|
26
|
+
/** One of {@link KNOWN_IMAGE_FORMATS}. */
|
|
27
|
+
format: string;
|
|
28
|
+
/** Its filename inside the source's derived directory, e.g. `640.webp`. */
|
|
29
|
+
file: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* What was derived from one upload, and the intrinsic size of the upload
|
|
33
|
+
* itself.
|
|
34
|
+
*
|
|
35
|
+
* This is the sidecar's shape. It exists so that rendering a page never opens
|
|
36
|
+
* an image: decision-10 requires the dimensions to be recorded when the
|
|
37
|
+
* variants are generated and read back, never probed per request.
|
|
38
|
+
*/
|
|
39
|
+
export interface ImageRecord {
|
|
40
|
+
/** The upload it was derived from, relative to `content/uploads/`. */
|
|
41
|
+
source: string;
|
|
42
|
+
/** The original's width once its EXIF orientation has been applied. */
|
|
43
|
+
width: number;
|
|
44
|
+
/** The original's height, likewise. */
|
|
45
|
+
height: number;
|
|
46
|
+
/** The original's own format, which is the one the `<img>` falls back to. */
|
|
47
|
+
format: string;
|
|
48
|
+
/**
|
|
49
|
+
* The original's modification time in milliseconds.
|
|
50
|
+
*
|
|
51
|
+
* It is what makes a stale record notice it is stale. The CMS never
|
|
52
|
+
* overwrites an upload — a second `photo.png` becomes `photo-2.png` — but a
|
|
53
|
+
* file dropped in by hand can be replaced, and a record that outlived its
|
|
54
|
+
* original would give the page the wrong dimensions.
|
|
55
|
+
*/
|
|
56
|
+
sourceModified: number;
|
|
57
|
+
/** Every derived copy, by format in configured order and then by width. */
|
|
58
|
+
variants: ImageVariant[];
|
|
59
|
+
}
|
|
60
|
+
/** The media type a `<source>` for this format announces, or `undefined`. */
|
|
61
|
+
export declare function imageMediaType(format: string): string | undefined;
|
|
62
|
+
/** The public URL of one derived file. */
|
|
63
|
+
export declare function variantUrl(source: string, variant: ImageVariant): string;
|
|
64
|
+
/**
|
|
65
|
+
* Derive every variant of one upload and record what was derived.
|
|
66
|
+
*
|
|
67
|
+
* Returns `undefined` — having written nothing — when optimization is off,
|
|
68
|
+
* when the file is not a raster image the CMS varianties (a GIF, a PDF, a
|
|
69
|
+
* text file), when it is animated, or when it is not there at all. None of
|
|
70
|
+
* those is an error: an upload that has no variants is the ordinary case for
|
|
71
|
+
* most of what a site holds, and the caller's job is to fall back to the
|
|
72
|
+
* original, which is exactly what it would have served anyway.
|
|
73
|
+
*
|
|
74
|
+
* Two callers asking for the same image at once share one encode.
|
|
75
|
+
*/
|
|
76
|
+
export declare function generateImageVariants(config: ImageConfig, source: string): Promise<ImageRecord | undefined>;
|
|
77
|
+
/**
|
|
78
|
+
* What is known about one upload's variants, or `undefined` when nothing is.
|
|
79
|
+
*
|
|
80
|
+
* Synchronous and cached, because it is called once per image while a page
|
|
81
|
+
* renders. `undefined` means the caller should serve the plain original: the
|
|
82
|
+
* upload is not an image, or nothing has been derived from it yet.
|
|
83
|
+
*/
|
|
84
|
+
export declare function describeImage(config: ImageConfig, source: string): ImageRecord | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Take one upload's derived files away.
|
|
87
|
+
*
|
|
88
|
+
* Forgiving by design: an upload with nothing derived from it is the ordinary
|
|
89
|
+
* case, and this runs after the original has already gone, so refusing to
|
|
90
|
+
* finish would leave the site worse than it found it.
|
|
91
|
+
*/
|
|
92
|
+
export declare function removeImageVariants(config: ImageConfig, source: string): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Find one derived file by its request path, generating it if it is not there.
|
|
95
|
+
*
|
|
96
|
+
* `relative` is what follows {@link VARIANT_ASSET_PREFIX}, so
|
|
97
|
+
* `2026/09/photo.jpg/640.webp`. A request for a file that was swept away
|
|
98
|
+
* rebuilds the whole set for that source and then serves it, which is what
|
|
99
|
+
* makes the derived directory disposable in the way decision-9 requires. A
|
|
100
|
+
* request for a width or a format the site does not offer is a 404 and encodes
|
|
101
|
+
* nothing, so nobody can make the server work by asking for sizes.
|
|
102
|
+
*/
|
|
103
|
+
export declare function findImageVariant(config: ImageConfig, relative: string): Promise<StaticAsset | undefined>;
|
|
104
|
+
//# sourceMappingURL=variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../src/images/variants.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAE9C,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAgCD,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAExE;AAgBD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAQlC;AAgID;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAW1F;AAyDD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5F;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA+BlC"}
|