@geekity/cms 0.3.0 → 0.4.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 +2091 -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/pages/documents/editor.njk +196 -0
- 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/media/library.njk +160 -0
- package/admin/pages/messages/all.njk +110 -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/federation.njk +75 -0
- package/admin/pages/settings/general.njk +29 -0
- package/admin/pages/settings/permalinks.njk +50 -0
- package/admin/pages/settings/reading.njk +72 -0
- package/admin/pages/users/edit.njk +239 -0
- package/admin/pages/users/list.njk +48 -0
- package/admin/pages/users/new.njk +41 -0
- package/admin/static/admin.css +498 -3
- package/admin/static/copy.js +52 -0
- package/admin/static/editor.js +16 -16
- package/admin/static/slug.js +61 -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 +127 -10
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +360 -41
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +151 -50
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +225 -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 +126 -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/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 +155 -105
- package/dist/admin/routes.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 +39 -0
- package/dist/admin/settings-federation.d.ts.map +1 -0
- package/dist/admin/settings-federation.js +103 -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 +102 -0
- package/dist/admin/settings-page.d.ts.map +1 -0
- package/dist/admin/settings-page.js +126 -0
- package/dist/admin/settings-page.js.map +1 -0
- package/dist/admin/settings-pages.d.ts +19 -0
- package/dist/admin/settings-pages.d.ts.map +1 -0
- package/dist/admin/settings-pages.js +33 -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 +33 -0
- package/dist/admin/settings-reading.d.ts.map +1 -0
- package/dist/admin/settings-reading.js +48 -0
- package/dist/admin/settings-reading.js.map +1 -0
- package/dist/admin/settings.d.ts +325 -96
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +650 -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 +44 -14
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +44 -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/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 +424 -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 +75 -0
- package/dist/comments/form.d.ts.map +1 -0
- package/dist/comments/form.js +64 -0
- package/dist/comments/form.js.map +1 -0
- package/dist/comments/index.d.ts +15 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +9 -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 +58 -0
- package/dist/comments/routes.d.ts.map +1 -0
- package/dist/comments/routes.js +177 -0
- package/dist/comments/routes.js.map +1 -0
- package/dist/comments/submission.d.ts +263 -0
- package/dist/comments/submission.d.ts.map +1 -0
- package/dist/comments/submission.js +241 -0
- package/dist/comments/submission.js.map +1 -0
- package/dist/config.d.ts +190 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +118 -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 +202 -7
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +374 -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 +58 -4
- 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 +42 -10
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +266 -26
- 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 +327 -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 +73 -0
- package/dist/web/navigation.d.ts.map +1 -0
- package/dist/web/navigation.js +110 -0
- package/dist/web/navigation.js.map +1 -0
- package/dist/web/negotiate.d.ts +9 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +6 -1
- 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 +197 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +334 -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 +845 -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 +205 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +277 -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 +1 -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 +1096 -50
- package/themes/default/layouts/404.njk +2 -3
- package/themes/default/layouts/author.njk +37 -0
- package/themes/default/layouts/base.njk +172 -31
- package/themes/default/layouts/category.njk +27 -0
- package/themes/default/layouts/front-page.njk +57 -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 +77 -0
- package/themes/default/partials/comment-form.njk +109 -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/pagination.njk +12 -6
- package/themes/default/partials/post-list.njk +51 -18
- package/themes/default/partials/search-form.njk +17 -0
- package/themes/default/partials/tags.njk +26 -5
- package/themes/default/static/highlight.js +4 -0
- package/themes/default/static/style.css +1119 -194
- package/themes/default/theme.json +5 -0
- package/admin/layouts/document-editor.njk +0 -167
- 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,176 @@
|
|
|
1
|
+
import { elementsIn, hasRel, parseHtml } from './html.js';
|
|
2
|
+
/**
|
|
3
|
+
* Finding out where to send a webmention.
|
|
4
|
+
*
|
|
5
|
+
* The W3C spec fixes the order and it matters, because a page may advertise
|
|
6
|
+
* two: the HTTP `Link` header first, then the first `<link>` **or** `<a>`
|
|
7
|
+
* carrying `rel="webmention"` in document order — one search over both, not
|
|
8
|
+
* one search each. Whatever is found is resolved against the URL the request
|
|
9
|
+
* actually ended at, so a target that redirects to its canonical home
|
|
10
|
+
* advertises that home's endpoint rather than a path under the old one.
|
|
11
|
+
*/
|
|
12
|
+
/** How long one discovery request is given before it is abandoned. */
|
|
13
|
+
export const DISCOVERY_TIMEOUT_MS = 10_000;
|
|
14
|
+
/** How much of a target page is read while looking for its endpoint. */
|
|
15
|
+
export const DISCOVERY_MAX_BYTES = 1_000_000;
|
|
16
|
+
/** What a sender says it is. */
|
|
17
|
+
export const WEBMENTION_USER_AGENT = 'Geekity/1.0 (+https://github.com/andrewshell/geekity)';
|
|
18
|
+
/**
|
|
19
|
+
* The Webmention endpoint a page advertises, or `undefined` when it advertises
|
|
20
|
+
* none — which is most pages, and is not an error.
|
|
21
|
+
*
|
|
22
|
+
* Nothing throws: a target that times out, refuses the connection or answers
|
|
23
|
+
* an error is a target with no endpoint as far as the sender is concerned, and
|
|
24
|
+
* the caller records that rather than stopping.
|
|
25
|
+
*/
|
|
26
|
+
export async function discoverEndpoint(target) {
|
|
27
|
+
let response;
|
|
28
|
+
try {
|
|
29
|
+
response = await fetch(target, {
|
|
30
|
+
headers: { accept: 'text/html, */*;q=0.8', 'user-agent': WEBMENTION_USER_AGENT },
|
|
31
|
+
redirect: 'follow',
|
|
32
|
+
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
if (!response.ok)
|
|
39
|
+
return undefined;
|
|
40
|
+
// Where the request ended up, which is what a relative endpoint is relative
|
|
41
|
+
// to. `Response.url` is empty for a response nothing redirected, in which
|
|
42
|
+
// case the URL asked for is the URL arrived at.
|
|
43
|
+
const arrivedAt = response.url === '' ? target : response.url;
|
|
44
|
+
const header = endpointInHeader(response.headers.get('link'), arrivedAt);
|
|
45
|
+
if (header !== undefined) {
|
|
46
|
+
// The body is not read, but it has to be released or the socket is held
|
|
47
|
+
// until the process notices.
|
|
48
|
+
await response.body?.cancel();
|
|
49
|
+
return header;
|
|
50
|
+
}
|
|
51
|
+
const type = response.headers.get('content-type') ?? '';
|
|
52
|
+
if (!/^\s*(text\/html|application\/xhtml\+xml)/i.test(type)) {
|
|
53
|
+
await response.body?.cancel();
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
return endpointInHtml(await readCapped(response), arrivedAt);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The endpoint one or more `Link` headers name, or `undefined`.
|
|
60
|
+
*
|
|
61
|
+
* A header may carry several links separated by commas and each may name
|
|
62
|
+
* several relations, so both are split. Splitting on commas that are not
|
|
63
|
+
* inside angle brackets or quotes is what keeps a URL holding a comma — which
|
|
64
|
+
* is legal — from being torn in half.
|
|
65
|
+
*/
|
|
66
|
+
export function endpointInHeader(header, base) {
|
|
67
|
+
if (header === null)
|
|
68
|
+
return undefined;
|
|
69
|
+
for (const value of splitLinkHeader(header)) {
|
|
70
|
+
const match = /^\s*<([^>]*)>\s*(.*)$/.exec(value);
|
|
71
|
+
if (match === null)
|
|
72
|
+
continue;
|
|
73
|
+
const relations = /(?:^|;)\s*rel\s*=\s*("([^"]*)"|'([^']*)'|([^;\s]*))/i.exec(match[2] ?? '');
|
|
74
|
+
const rel = relations?.[2] ?? relations?.[3] ?? relations?.[4] ?? '';
|
|
75
|
+
if (!rel.split(/\s+/).some((token) => token.toLowerCase() === 'webmention'))
|
|
76
|
+
continue;
|
|
77
|
+
return resolve(match[1] ?? '', base);
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The endpoint a page's markup names, or `undefined`.
|
|
83
|
+
*
|
|
84
|
+
* One walk over every element rather than one for `<link>` and another for
|
|
85
|
+
* `<a>`: the spec asks for the first of either in document order, and two
|
|
86
|
+
* walks would answer with whichever kind was searched for first.
|
|
87
|
+
*/
|
|
88
|
+
export function endpointInHtml(html, base) {
|
|
89
|
+
for (const element of elementsIn(parseHtml(html))) {
|
|
90
|
+
if (element.name !== 'link' && element.name !== 'a')
|
|
91
|
+
continue;
|
|
92
|
+
if (!hasRel(element, 'webmention'))
|
|
93
|
+
continue;
|
|
94
|
+
// An `href` that is there but empty means the page itself, which is what
|
|
95
|
+
// an endpoint on the same URL as the target looks like.
|
|
96
|
+
return resolve(element.attributes['href'] ?? '', base);
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
/** One `Link` header value split into its links, commas inside a URL kept. */
|
|
101
|
+
function splitLinkHeader(header) {
|
|
102
|
+
const values = [];
|
|
103
|
+
let start = 0;
|
|
104
|
+
let inBrackets = false;
|
|
105
|
+
let quote;
|
|
106
|
+
for (let at = 0; at < header.length; at += 1) {
|
|
107
|
+
const character = header[at];
|
|
108
|
+
if (quote !== undefined) {
|
|
109
|
+
if (character === quote)
|
|
110
|
+
quote = undefined;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (character === '"' || character === "'")
|
|
114
|
+
quote = character;
|
|
115
|
+
else if (character === '<')
|
|
116
|
+
inBrackets = true;
|
|
117
|
+
else if (character === '>')
|
|
118
|
+
inBrackets = false;
|
|
119
|
+
else if (character === ',' && !inBrackets) {
|
|
120
|
+
values.push(header.slice(start, at));
|
|
121
|
+
start = at + 1;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
values.push(header.slice(start));
|
|
125
|
+
return values;
|
|
126
|
+
}
|
|
127
|
+
/** An advertised endpoint as an absolute URL, or `undefined` when it is not one. */
|
|
128
|
+
function resolve(href, base) {
|
|
129
|
+
try {
|
|
130
|
+
const url = new URL(href.trim(), base);
|
|
131
|
+
return url.protocol === 'http:' || url.protocol === 'https:' ? url.href : undefined;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A response body, up to {@link DISCOVERY_MAX_BYTES}.
|
|
139
|
+
*
|
|
140
|
+
* A cap rather than `response.text()`, because the page at the other end is a
|
|
141
|
+
* stranger's and nothing stops it being a gigabyte. What is read is more than
|
|
142
|
+
* enough markup for a `<link>` in the head.
|
|
143
|
+
*/
|
|
144
|
+
export async function readCapped(response) {
|
|
145
|
+
const body = response.body;
|
|
146
|
+
if (body === null)
|
|
147
|
+
return '';
|
|
148
|
+
const reader = body.getReader();
|
|
149
|
+
const decoder = new TextDecoder();
|
|
150
|
+
const chunks = [];
|
|
151
|
+
let read = 0;
|
|
152
|
+
try {
|
|
153
|
+
for (;;) {
|
|
154
|
+
const chunk = await reader.read();
|
|
155
|
+
if (chunk.done)
|
|
156
|
+
break;
|
|
157
|
+
const value = chunk.value;
|
|
158
|
+
read += value.length;
|
|
159
|
+
chunks.push(decoder.decode(value, { stream: true }));
|
|
160
|
+
if (read >= DISCOVERY_MAX_BYTES)
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// A body that stops mid-stream is whatever arrived before it stopped.
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
await reader.cancel().catch(ignore);
|
|
169
|
+
}
|
|
170
|
+
chunks.push(decoder.decode());
|
|
171
|
+
return chunks.join('');
|
|
172
|
+
}
|
|
173
|
+
function ignore() {
|
|
174
|
+
// Deliberately empty: a body that will not close is not worth an error.
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/webmention/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Somebody else's page, as a tree small enough to ask questions of.
|
|
3
|
+
*
|
|
4
|
+
* A webmention is a claim about a page this site does not control, and both
|
|
5
|
+
* halves of checking it are questions about that page's markup: does it link
|
|
6
|
+
* to the target, and what do its microformats say. Neither can be answered by
|
|
7
|
+
* a regular expression over the source — a `class` list, an `href` and the
|
|
8
|
+
* text of an element are all nested facts — so the source is read once into a
|
|
9
|
+
* tree and asked afterwards.
|
|
10
|
+
*
|
|
11
|
+
* It is deliberately not a conforming HTML parser and never will be. It has no
|
|
12
|
+
* table foster-parenting, no adoption agency, no character encoding detection:
|
|
13
|
+
* what it has is elements, attributes and text, nested the way a page that is
|
|
14
|
+
* not broken nests them, which is what {@link elementsIn} and
|
|
15
|
+
* {@link textOf} need. `web/sanitize.ts` scans markup with the same shape of
|
|
16
|
+
* scanner for a different job — it rebuilds output rather than building a
|
|
17
|
+
* tree — and the two are kept apart rather than shared because one of them is
|
|
18
|
+
* a security boundary and should not grow features for the other's sake.
|
|
19
|
+
*/
|
|
20
|
+
/** One element of a parsed page. */
|
|
21
|
+
export interface HtmlElement {
|
|
22
|
+
/** Its tag name, lower-cased. */
|
|
23
|
+
readonly name: string;
|
|
24
|
+
/** Its attributes, names lower-cased and values with entities resolved. */
|
|
25
|
+
readonly attributes: Readonly<Record<string, string>>;
|
|
26
|
+
/** What is inside it, in document order. */
|
|
27
|
+
readonly children: HtmlNode[];
|
|
28
|
+
}
|
|
29
|
+
/** A run of text between tags, with its character references resolved. */
|
|
30
|
+
export interface HtmlText {
|
|
31
|
+
/** The text itself. */
|
|
32
|
+
readonly text: string;
|
|
33
|
+
}
|
|
34
|
+
/** Either of the two things a tree is made of. */
|
|
35
|
+
export type HtmlNode = HtmlElement | HtmlText;
|
|
36
|
+
/** Whether a node is an element rather than a run of text. */
|
|
37
|
+
export declare function isElement(node: HtmlNode): node is HtmlElement;
|
|
38
|
+
/**
|
|
39
|
+
* A page as a tree, under one synthetic root standing for the document.
|
|
40
|
+
*
|
|
41
|
+
* Nothing throws. Markup this scanner cannot make sense of contributes
|
|
42
|
+
* whatever it can and no more, because the alternative — refusing a page — is
|
|
43
|
+
* refusing a webmention over somebody else's typo.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseHtml(source: string): HtmlElement;
|
|
46
|
+
/** Every element under `root`, itself excluded, in document order. */
|
|
47
|
+
export declare function elementsIn(root: HtmlElement): Generator<HtmlElement>;
|
|
48
|
+
/**
|
|
49
|
+
* The text an element holds, everything nested in it included, with runs of
|
|
50
|
+
* whitespace collapsed.
|
|
51
|
+
*
|
|
52
|
+
* Collapsed because it is read as a name or a title, and a page that wrote one
|
|
53
|
+
* across three indented lines meant one line.
|
|
54
|
+
*/
|
|
55
|
+
export declare function textOf(node: HtmlNode): string;
|
|
56
|
+
/** The text an element holds, exactly as the page spelled it. */
|
|
57
|
+
export declare function rawTextOf(node: HtmlNode): string;
|
|
58
|
+
/**
|
|
59
|
+
* An element's inner markup, rebuilt from the tree.
|
|
60
|
+
*
|
|
61
|
+
* Rebuilt rather than sliced out of the source because the tree is what this
|
|
62
|
+
* module trusts: an unclosed element in the page cannot leave a stray closing
|
|
63
|
+
* tag in the result. It goes through `sanitizeCommentHtml` before it is stored
|
|
64
|
+
* either way, so this only has to be close enough for that to read.
|
|
65
|
+
*/
|
|
66
|
+
export declare function innerHtmlOf(element: HtmlElement): string;
|
|
67
|
+
/** The classes an element carries, in the order it wrote them. */
|
|
68
|
+
export declare function classesOf(element: HtmlElement): string[];
|
|
69
|
+
/** Whether an element's `rel` names this link relation. */
|
|
70
|
+
export declare function hasRel(element: HtmlElement, relation: string): boolean;
|
|
71
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/webmention/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CAC/B;AAED,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9C,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,IAAI,WAAW,CAE7D;AA4DD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA8DrD;AAED,sEAAsE;AACtE,wBAAiB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAMrE;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAE7C;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAGhD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAExD;AAaD,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CAGxD;AAED,2DAA2D;AAC3D,wBAAgB,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAItE"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Somebody else's page, as a tree small enough to ask questions of.
|
|
3
|
+
*
|
|
4
|
+
* A webmention is a claim about a page this site does not control, and both
|
|
5
|
+
* halves of checking it are questions about that page's markup: does it link
|
|
6
|
+
* to the target, and what do its microformats say. Neither can be answered by
|
|
7
|
+
* a regular expression over the source — a `class` list, an `href` and the
|
|
8
|
+
* text of an element are all nested facts — so the source is read once into a
|
|
9
|
+
* tree and asked afterwards.
|
|
10
|
+
*
|
|
11
|
+
* It is deliberately not a conforming HTML parser and never will be. It has no
|
|
12
|
+
* table foster-parenting, no adoption agency, no character encoding detection:
|
|
13
|
+
* what it has is elements, attributes and text, nested the way a page that is
|
|
14
|
+
* not broken nests them, which is what {@link elementsIn} and
|
|
15
|
+
* {@link textOf} need. `web/sanitize.ts` scans markup with the same shape of
|
|
16
|
+
* scanner for a different job — it rebuilds output rather than building a
|
|
17
|
+
* tree — and the two are kept apart rather than shared because one of them is
|
|
18
|
+
* a security boundary and should not grow features for the other's sake.
|
|
19
|
+
*/
|
|
20
|
+
/** Whether a node is an element rather than a run of text. */
|
|
21
|
+
export function isElement(node) {
|
|
22
|
+
return 'name' in node;
|
|
23
|
+
}
|
|
24
|
+
/** Elements with no content of their own, so nothing ever closes them. */
|
|
25
|
+
const VOID_ELEMENTS = new Set([
|
|
26
|
+
'area',
|
|
27
|
+
'base',
|
|
28
|
+
'br',
|
|
29
|
+
'col',
|
|
30
|
+
'embed',
|
|
31
|
+
'hr',
|
|
32
|
+
'img',
|
|
33
|
+
'input',
|
|
34
|
+
'link',
|
|
35
|
+
'meta',
|
|
36
|
+
'param',
|
|
37
|
+
'source',
|
|
38
|
+
'track',
|
|
39
|
+
'wbr',
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Elements whose content is not markup.
|
|
43
|
+
*
|
|
44
|
+
* A `<` inside one of them is a character in a program or a stylesheet, so
|
|
45
|
+
* everything up to the closing tag is skipped rather than parsed. Their text
|
|
46
|
+
* is dropped as well: an author name taken out of a script is not an author
|
|
47
|
+
* name.
|
|
48
|
+
*/
|
|
49
|
+
const RAW_TEXT = new Set(['script', 'style']);
|
|
50
|
+
/**
|
|
51
|
+
* Elements an opening tag of the same name implicitly closes.
|
|
52
|
+
*
|
|
53
|
+
* Without this, a page written as `<p>one<p>two` would nest, and an `h-entry`
|
|
54
|
+
* looking for the properties directly inside it would find the second
|
|
55
|
+
* paragraph inside the first.
|
|
56
|
+
*/
|
|
57
|
+
const CLOSED_BY_ITSELF = new Set([
|
|
58
|
+
'p',
|
|
59
|
+
'li',
|
|
60
|
+
'dt',
|
|
61
|
+
'dd',
|
|
62
|
+
'option',
|
|
63
|
+
'tr',
|
|
64
|
+
'td',
|
|
65
|
+
'th',
|
|
66
|
+
]);
|
|
67
|
+
/**
|
|
68
|
+
* A page as a tree, under one synthetic root standing for the document.
|
|
69
|
+
*
|
|
70
|
+
* Nothing throws. Markup this scanner cannot make sense of contributes
|
|
71
|
+
* whatever it can and no more, because the alternative — refusing a page — is
|
|
72
|
+
* refusing a webmention over somebody else's typo.
|
|
73
|
+
*/
|
|
74
|
+
export function parseHtml(source) {
|
|
75
|
+
const root = { name: '#document', attributes: {}, children: [] };
|
|
76
|
+
const open = [root];
|
|
77
|
+
let at = 0;
|
|
78
|
+
/** Where a node goes: inside the innermost element still open. */
|
|
79
|
+
function current() {
|
|
80
|
+
return open[open.length - 1] ?? root;
|
|
81
|
+
}
|
|
82
|
+
/** Close open elements down to and including `name`, if it is open at all. */
|
|
83
|
+
function closeThrough(name) {
|
|
84
|
+
const index = open.findLastIndex((element) => element.name === name);
|
|
85
|
+
// Never the root, which nothing closes.
|
|
86
|
+
if (index > 0)
|
|
87
|
+
open.length = index;
|
|
88
|
+
}
|
|
89
|
+
while (at < source.length) {
|
|
90
|
+
const next = source.indexOf('<', at);
|
|
91
|
+
if (next < 0) {
|
|
92
|
+
pushText(current(), source.slice(at));
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
if (next > at)
|
|
96
|
+
pushText(current(), source.slice(at, next));
|
|
97
|
+
at = next;
|
|
98
|
+
if (source.startsWith('<!--', at)) {
|
|
99
|
+
at = after(source, '-->', at);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (source.startsWith('<!', at) || source.startsWith('<?', at)) {
|
|
103
|
+
at = after(source, '>', at);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const tag = readTag(source, at);
|
|
107
|
+
if (tag === undefined) {
|
|
108
|
+
// A `<` that begins no tag is a character somebody typed.
|
|
109
|
+
pushText(current(), '<');
|
|
110
|
+
at += 1;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
at = tag.end;
|
|
114
|
+
if (tag.closing) {
|
|
115
|
+
closeThrough(tag.name);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (RAW_TEXT.has(tag.name)) {
|
|
119
|
+
at = afterElement(source, tag.name, at);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (CLOSED_BY_ITSELF.has(tag.name) && current().name === tag.name)
|
|
123
|
+
closeThrough(tag.name);
|
|
124
|
+
const element = { name: tag.name, attributes: tag.attributes, children: [] };
|
|
125
|
+
current().children.push(element);
|
|
126
|
+
if (!VOID_ELEMENTS.has(tag.name))
|
|
127
|
+
open.push(element);
|
|
128
|
+
}
|
|
129
|
+
return root;
|
|
130
|
+
}
|
|
131
|
+
/** Every element under `root`, itself excluded, in document order. */
|
|
132
|
+
export function* elementsIn(root) {
|
|
133
|
+
for (const child of root.children) {
|
|
134
|
+
if (!isElement(child))
|
|
135
|
+
continue;
|
|
136
|
+
yield child;
|
|
137
|
+
yield* elementsIn(child);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The text an element holds, everything nested in it included, with runs of
|
|
142
|
+
* whitespace collapsed.
|
|
143
|
+
*
|
|
144
|
+
* Collapsed because it is read as a name or a title, and a page that wrote one
|
|
145
|
+
* across three indented lines meant one line.
|
|
146
|
+
*/
|
|
147
|
+
export function textOf(node) {
|
|
148
|
+
return rawTextOf(node).replace(/\s+/g, ' ').trim();
|
|
149
|
+
}
|
|
150
|
+
/** The text an element holds, exactly as the page spelled it. */
|
|
151
|
+
export function rawTextOf(node) {
|
|
152
|
+
if (!isElement(node))
|
|
153
|
+
return node.text;
|
|
154
|
+
return node.children.map(rawTextOf).join('');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* An element's inner markup, rebuilt from the tree.
|
|
158
|
+
*
|
|
159
|
+
* Rebuilt rather than sliced out of the source because the tree is what this
|
|
160
|
+
* module trusts: an unclosed element in the page cannot leave a stray closing
|
|
161
|
+
* tag in the result. It goes through `sanitizeCommentHtml` before it is stored
|
|
162
|
+
* either way, so this only has to be close enough for that to read.
|
|
163
|
+
*/
|
|
164
|
+
export function innerHtmlOf(element) {
|
|
165
|
+
return element.children.map(markupOf).join('');
|
|
166
|
+
}
|
|
167
|
+
/** One node as markup. */
|
|
168
|
+
function markupOf(node) {
|
|
169
|
+
if (!isElement(node))
|
|
170
|
+
return escapeText(node.text);
|
|
171
|
+
const attributes = Object.entries(node.attributes)
|
|
172
|
+
.map(([name, value]) => ` ${name}="${escapeText(value)}"`)
|
|
173
|
+
.join('');
|
|
174
|
+
if (VOID_ELEMENTS.has(node.name))
|
|
175
|
+
return `<${node.name}${attributes}>`;
|
|
176
|
+
return `<${node.name}${attributes}>${innerHtmlOf(node)}</${node.name}>`;
|
|
177
|
+
}
|
|
178
|
+
/** The classes an element carries, in the order it wrote them. */
|
|
179
|
+
export function classesOf(element) {
|
|
180
|
+
const value = element.attributes['class'];
|
|
181
|
+
return value === undefined ? [] : value.split(/\s+/).filter((name) => name !== '');
|
|
182
|
+
}
|
|
183
|
+
/** Whether an element's `rel` names this link relation. */
|
|
184
|
+
export function hasRel(element, relation) {
|
|
185
|
+
const value = element.attributes['rel'];
|
|
186
|
+
if (value === undefined)
|
|
187
|
+
return false;
|
|
188
|
+
return value.split(/\s+/).some((token) => token.toLowerCase() === relation);
|
|
189
|
+
}
|
|
190
|
+
/** Add a run of text, unless it is nothing at all. */
|
|
191
|
+
function pushText(parent, text) {
|
|
192
|
+
if (text === '')
|
|
193
|
+
return;
|
|
194
|
+
parent.children.push({ text: decodeEntities(text) });
|
|
195
|
+
}
|
|
196
|
+
/** Where the source continues after the next `marker`, or its end. */
|
|
197
|
+
function after(source, marker, at) {
|
|
198
|
+
const end = source.indexOf(marker, at);
|
|
199
|
+
return end < 0 ? source.length : end + marker.length;
|
|
200
|
+
}
|
|
201
|
+
/** Where the source continues after this element's closing tag, or its end. */
|
|
202
|
+
function afterElement(source, name, at) {
|
|
203
|
+
const closing = new RegExp(`</${name}\\s*>`, 'i');
|
|
204
|
+
const match = closing.exec(source.slice(at));
|
|
205
|
+
return match === null ? source.length : at + match.index + match[0].length;
|
|
206
|
+
}
|
|
207
|
+
/** The tag beginning at `at`, or `undefined` when nothing there is a tag. */
|
|
208
|
+
function readTag(source, at) {
|
|
209
|
+
const match = /^<(\/?)([A-Za-z][A-Za-z0-9-]*)/.exec(source.slice(at));
|
|
210
|
+
if (match === null)
|
|
211
|
+
return undefined;
|
|
212
|
+
const name = (match[2] ?? '').toLowerCase();
|
|
213
|
+
const closing = match[1] === '/';
|
|
214
|
+
const attributes = {};
|
|
215
|
+
let cursor = at + match[0].length;
|
|
216
|
+
for (;;) {
|
|
217
|
+
while (cursor < source.length && /\s/.test(source[cursor] ?? ''))
|
|
218
|
+
cursor += 1;
|
|
219
|
+
if (cursor >= source.length)
|
|
220
|
+
return { name, closing, attributes, end: source.length };
|
|
221
|
+
if (source.startsWith('/>', cursor))
|
|
222
|
+
return { name, closing, attributes, end: cursor + 2 };
|
|
223
|
+
if (source[cursor] === '>')
|
|
224
|
+
return { name, closing, attributes, end: cursor + 1 };
|
|
225
|
+
const attribute = /^([^\s/>=]+)(\s*=\s*("[^"]*"|'[^']*'|[^\s>]*))?/.exec(source.slice(cursor));
|
|
226
|
+
if (attribute === null) {
|
|
227
|
+
// Nothing that could be an attribute and no `>`: the tag is malformed,
|
|
228
|
+
// so it ends where the source does.
|
|
229
|
+
return { name, closing, attributes, end: source.length };
|
|
230
|
+
}
|
|
231
|
+
const raw = attribute[3];
|
|
232
|
+
attributes[(attribute[1] ?? '').toLowerCase()] =
|
|
233
|
+
raw === undefined ? '' : decodeEntities(unquote(raw));
|
|
234
|
+
cursor += attribute[0].length;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/** An attribute value with its quotes, if any, taken off. */
|
|
238
|
+
function unquote(value) {
|
|
239
|
+
const first = value[0];
|
|
240
|
+
return (first === '"' || first === "'") && value.endsWith(first) ? value.slice(1, -1) : value;
|
|
241
|
+
}
|
|
242
|
+
/** The character references this module resolves. */
|
|
243
|
+
const ENTITIES = {
|
|
244
|
+
amp: '&',
|
|
245
|
+
lt: '<',
|
|
246
|
+
gt: '>',
|
|
247
|
+
quot: '"',
|
|
248
|
+
apos: "'",
|
|
249
|
+
nbsp: ' ',
|
|
250
|
+
};
|
|
251
|
+
/** Character references resolved; one this module does not know is left alone. */
|
|
252
|
+
function decodeEntities(value) {
|
|
253
|
+
if (!value.includes('&'))
|
|
254
|
+
return value;
|
|
255
|
+
return value.replace(/&(#[0-9]+|#[xX][0-9a-fA-F]+|[A-Za-z][A-Za-z0-9]*);/g, (whole, body) => {
|
|
256
|
+
if (body.startsWith('#x') || body.startsWith('#X')) {
|
|
257
|
+
return codePoint(Number.parseInt(body.slice(2), 16)) ?? whole;
|
|
258
|
+
}
|
|
259
|
+
if (body.startsWith('#'))
|
|
260
|
+
return codePoint(Number.parseInt(body.slice(1), 10)) ?? whole;
|
|
261
|
+
return ENTITIES[body] ?? whole;
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/** One code point as a string, or `undefined` when it names no character. */
|
|
265
|
+
function codePoint(value) {
|
|
266
|
+
if (!Number.isInteger(value) || value < 0 || value > 0x10ffff)
|
|
267
|
+
return undefined;
|
|
268
|
+
if (value >= 0xd800 && value <= 0xdfff)
|
|
269
|
+
return undefined;
|
|
270
|
+
try {
|
|
271
|
+
return String.fromCodePoint(value);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/** Text as markup again, so a rebuilt fragment says what the page said. */
|
|
278
|
+
function escapeText(value) {
|
|
279
|
+
return value
|
|
280
|
+
.replaceAll('&', '&')
|
|
281
|
+
.replaceAll('<', '<')
|
|
282
|
+
.replaceAll('>', '>')
|
|
283
|
+
.replaceAll('"', '"');
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/webmention/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqBH,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,OAAO,MAAM,IAAI,IAAI,CAAC;AACxB,CAAC;AAED,0EAA0E;AAC1E,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC;IACjD,MAAM;IACN,MAAM;IACN,IAAI;IACJ,KAAK;IACL,OAAO;IACP,IAAI;IACJ,KAAK;IACL,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,KAAK;CACN,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IACpD,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AAcH;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAkB,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEX,kEAAkE;IAClE,SAAS,OAAO;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,8EAA8E;IAC9E,SAAS,YAAY,CAAC,IAAY;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACrE,wCAAwC;QACxC,IAAI,KAAK,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM;QACR,CAAC;QACD,IAAI,IAAI,GAAG,EAAE;YAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,EAAE,GAAG,IAAI,CAAC;QAEV,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAClC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/D,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,0DAA0D;YAC1D,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YACzB,EAAE,IAAI,CAAC,CAAC;YACR,SAAS;QACX,CAAC;QACD,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QAEb,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;YAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1F,MAAM,OAAO,GAAgB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC1F,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sEAAsE;AACtE,MAAM,SAAS,CAAC,CAAC,UAAU,CAAC,IAAiB;IAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,SAAS;QAChC,MAAM,KAAK,CAAC;QACZ,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,IAAc;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,0BAA0B;AAC1B,SAAS,QAAQ,CAAC,IAAc;IAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,CAAC;IACvE,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;AAC1E,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,SAAS,CAAC,OAAoB;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,MAAM,CAAC,OAAoB,EAAE,QAAgB;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC;AAC9E,CAAC;AAED,sDAAsD;AACtD,SAAS,QAAQ,CAAC,MAAmB,EAAE,IAAY;IACjD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO;IACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,sEAAsE;AACtE,SAAS,KAAK,CAAC,MAAc,EAAE,MAAc,EAAE,EAAU;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;AACvD,CAAC;AAED,+EAA+E;AAC/E,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU;IAC5D,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7E,CAAC;AAED,6EAA6E;AAC7E,SAAS,OAAO,CAAC,MAAc,EAAE,EAAU;IACzC,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAErC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IACjC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAElC,SAAS,CAAC;QACR,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,CAAC,CAAC;QAC9E,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QACtF,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3F,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;QAElF,MAAM,SAAS,GAAG,iDAAiD,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/F,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,uEAAuE;YACvE,oCAAoC;YACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5C,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAChC,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAChG,CAAC;AAED,qDAAqD;AACrD,MAAM,QAAQ,GAAqC;IACjD,GAAG,EAAE,GAAG;IACR,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,kFAAkF;AAClF,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,OAAO,KAAK,CAAC,OAAO,CAClB,qDAAqD,EACrD,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;QAChE,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;QACxF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACjC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChF,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { DISCOVERY_MAX_BYTES, DISCOVERY_TIMEOUT_MS, discoverEndpoint, endpointInHeader, endpointInHtml, readCapped, WEBMENTION_USER_AGENT, } from './discovery.ts';
|
|
2
|
+
export { classesOf, elementsIn, innerHtmlOf, isElement, parseHtml, rawTextOf, textOf, } from './html.ts';
|
|
3
|
+
export type { HtmlElement, HtmlNode, HtmlText } from './html.ts';
|
|
4
|
+
export { externalLinks } from './links.ts';
|
|
5
|
+
export { itemsIn, linksTo, sourceEntry } from './microformats.ts';
|
|
6
|
+
export type { MicroformatItem, MicroformatValue, SourceEntry, WebmentionKind, } from './microformats.ts';
|
|
7
|
+
export { checkWebmentionRequest, VERIFY_TIMEOUT_MS, verifyWebmention } from './receive.ts';
|
|
8
|
+
export type { CheckWebmentionOptions, IncomingWebmention, VerifyWebmentionOptions, WebmentionOutcome, WebmentionRequest, } from './receive.ts';
|
|
9
|
+
export { mountWebmentions, WEBMENTION_FIELDS, WEBMENTION_PATH, webmentionEndpointFor, } from './routes.ts';
|
|
10
|
+
export { createWebmentionService, SEND_TIMEOUT_MS } from './service.ts';
|
|
11
|
+
export type { CreateWebmentionServiceOptions, WebmentionLogger, WebmentionReport, WebmentionService, } from './service.ts';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webmention/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3F,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxE,YAAY,EACV,8BAA8B,EAC9B,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DISCOVERY_MAX_BYTES, DISCOVERY_TIMEOUT_MS, discoverEndpoint, endpointInHeader, endpointInHtml, readCapped, WEBMENTION_USER_AGENT, } from './discovery.js';
|
|
2
|
+
export { classesOf, elementsIn, innerHtmlOf, isElement, parseHtml, rawTextOf, textOf, } from './html.js';
|
|
3
|
+
export { externalLinks } from './links.js';
|
|
4
|
+
export { itemsIn, linksTo, sourceEntry } from './microformats.js';
|
|
5
|
+
export { checkWebmentionRequest, VERIFY_TIMEOUT_MS, verifyWebmention } from './receive.js';
|
|
6
|
+
export { mountWebmentions, WEBMENTION_FIELDS, WEBMENTION_PATH, webmentionEndpointFor, } from './routes.js';
|
|
7
|
+
export { createWebmentionService, SEND_TIMEOUT_MS } from './service.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webmention/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,GACP,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOlE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQ3F,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which pages a post talks about.
|
|
3
|
+
*
|
|
4
|
+
* A webmention is "I wrote about you", so what goes out is decided by what the
|
|
5
|
+
* post links to. Only the links pointing somewhere else count: telling this
|
|
6
|
+
* site about its own pages would be a loop, and the conversation under a post
|
|
7
|
+
* is not the place for it.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Every external page a rendered body links to, in the order it links to them
|
|
11
|
+
* and each named once.
|
|
12
|
+
*
|
|
13
|
+
* A fragment is dropped. `#section` says where on a page to look and the page
|
|
14
|
+
* is what the webmention is about, so two links into one article are one
|
|
15
|
+
* target rather than two — and the `target` a receiver verifies is a page.
|
|
16
|
+
*/
|
|
17
|
+
export declare function externalLinks(html: string, baseUrl: string): string[];
|
|
18
|
+
//# sourceMappingURL=links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/webmention/links.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAcrE"}
|