@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,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the full-text index is fed and how a reader's words become a query
|
|
3
|
+
* against it (TASK-22).
|
|
4
|
+
*
|
|
5
|
+
* The index itself is an FTS5 table in the content store, written and dropped
|
|
6
|
+
* alongside the document rows, so it is derived exactly as they are
|
|
7
|
+
* (decision-9). This module is the part that needs no database: the text a
|
|
8
|
+
* document is indexed by, and the translation from what somebody typed into a
|
|
9
|
+
* search box into an FTS5 `MATCH` expression that cannot be a syntax error.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The marks the index puts either side of a matched word in a snippet.
|
|
13
|
+
*
|
|
14
|
+
* Control characters rather than markup, because the snippet is plain text
|
|
15
|
+
* that the web layer escapes before it turns these into `<mark>`: a post that
|
|
16
|
+
* talks about `<mark>` should print the words, not the element. They are
|
|
17
|
+
* stripped out of everything indexed, so a document cannot forge one.
|
|
18
|
+
*/
|
|
19
|
+
export const SNIPPET_OPEN = '\u0002';
|
|
20
|
+
export const SNIPPET_CLOSE = '\u0003';
|
|
21
|
+
/** How many terms of a query are kept. Anything longer is somebody pasting a post. */
|
|
22
|
+
export const MAXIMUM_QUERY_TERMS = 16;
|
|
23
|
+
/**
|
|
24
|
+
* What one document is indexed by.
|
|
25
|
+
*
|
|
26
|
+
* The body is the rendered HTML stripped to text rather than the Markdown, so
|
|
27
|
+
* a link's URL, a fence's language and the syntax around emphasis are not
|
|
28
|
+
* words a reader can find a post by — only what the post says.
|
|
29
|
+
*/
|
|
30
|
+
export function searchText(document) {
|
|
31
|
+
return {
|
|
32
|
+
title: clean(document.title),
|
|
33
|
+
description: clean(document.description ?? ''),
|
|
34
|
+
terms: clean([...document.tags, ...document.categories].join(' ')),
|
|
35
|
+
body: htmlToText(document.html),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Some HTML as the words a reader sees.
|
|
40
|
+
*
|
|
41
|
+
* A block tag becomes a space, so `</p><p>` between two paragraphs does not
|
|
42
|
+
* glue the last word of one to the first word of the next; an inline tag
|
|
43
|
+
* becomes nothing, so `<a>there</a>.` reads "there." rather than "there ."
|
|
44
|
+
* in a snippet. Scripts and styles go entirely, contents and all.
|
|
45
|
+
*/
|
|
46
|
+
export function htmlToText(html) {
|
|
47
|
+
return clean(decodeEntities(html
|
|
48
|
+
.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, ' ')
|
|
49
|
+
.replace(/<!--[\s\S]*?-->/g, ' ')
|
|
50
|
+
.replace(BLOCK_TAG, ' ')
|
|
51
|
+
.replace(/<[^>]*>/g, '')));
|
|
52
|
+
}
|
|
53
|
+
/** Tags that separate words: blocks, line breaks and the things between cells. */
|
|
54
|
+
const BLOCK_TAG = /<\/?(?:address|article|aside|blockquote|br|dd|details|div|dl|dt|figcaption|figure|footer|h[1-6]|header|hr|img|li|nav|ol|p|pre|section|summary|table|td|th|tr|ul)\b[^>]*>/gi;
|
|
55
|
+
/**
|
|
56
|
+
* A reader's query as an FTS5 `MATCH` expression, or `undefined` when there is
|
|
57
|
+
* nothing in it to search for.
|
|
58
|
+
*
|
|
59
|
+
* Every term is quoted, so nothing a reader types — a stray `"`, a `-`, an
|
|
60
|
+
* `AND`, a `column:` prefix, a bracket — is ever read as FTS5 syntax: the
|
|
61
|
+
* worst a query can do is find nothing. What it does understand is the two
|
|
62
|
+
* things a search box is expected to: words in `"double quotes"` are a phrase,
|
|
63
|
+
* and a bare word ending in `*` is a prefix. Terms are joined by FTS5's
|
|
64
|
+
* implicit AND, so every word has to be somewhere in the document.
|
|
65
|
+
*/
|
|
66
|
+
export function searchExpression(query) {
|
|
67
|
+
const terms = [];
|
|
68
|
+
// A quoted phrase, a quote left open at the end, or a run of anything else.
|
|
69
|
+
const pattern = /"([^"]*)"?|([^\s"]+)/g;
|
|
70
|
+
for (const match of clean(query).matchAll(pattern)) {
|
|
71
|
+
if (terms.length >= MAXIMUM_QUERY_TERMS)
|
|
72
|
+
break;
|
|
73
|
+
const phrase = match[1];
|
|
74
|
+
if (phrase !== undefined) {
|
|
75
|
+
if (isSearchable(phrase))
|
|
76
|
+
terms.push(quote(phrase.trim()));
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const word = match[2];
|
|
80
|
+
const prefix = word.length > 1 && word.endsWith('*');
|
|
81
|
+
const stem = word.replace(/\*+$/, '');
|
|
82
|
+
if (!isSearchable(stem))
|
|
83
|
+
continue;
|
|
84
|
+
terms.push(prefix ? `${quote(stem)} *` : quote(stem));
|
|
85
|
+
}
|
|
86
|
+
return terms.length === 0 ? undefined : terms.join(' ');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Whether a term holds anything the tokenizer would keep. A term of nothing
|
|
90
|
+
* but punctuation becomes an empty phrase, which matches nothing and would
|
|
91
|
+
* turn a query of three good words and a dash into a query that finds nothing.
|
|
92
|
+
*/
|
|
93
|
+
function isSearchable(term) {
|
|
94
|
+
return /[\p{L}\p{N}]/u.test(term);
|
|
95
|
+
}
|
|
96
|
+
/** A term as an FTS5 string, which escapes a quote by doubling it. */
|
|
97
|
+
function quote(term) {
|
|
98
|
+
return `"${term.replace(/"/g, '""')}"`;
|
|
99
|
+
}
|
|
100
|
+
/** Whitespace collapsed, and the snippet marks taken out so nothing can forge one. */
|
|
101
|
+
function clean(value) {
|
|
102
|
+
return value
|
|
103
|
+
.replaceAll(SNIPPET_OPEN, '')
|
|
104
|
+
.replaceAll(SNIPPET_CLOSE, '')
|
|
105
|
+
.replace(/\s+/g, ' ')
|
|
106
|
+
.trim();
|
|
107
|
+
}
|
|
108
|
+
/** The entities a rendered body holds, named or numeric, resolved to text. */
|
|
109
|
+
function decodeEntities(value) {
|
|
110
|
+
return value.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z]+);/gi, (entity, name) => {
|
|
111
|
+
if (name.startsWith('#')) {
|
|
112
|
+
const code = name[1] === 'x' || name[1] === 'X'
|
|
113
|
+
? Number.parseInt(name.slice(2), 16)
|
|
114
|
+
: Number.parseInt(name.slice(1), 10);
|
|
115
|
+
return code > 0 && code <= 0x10ffff ? String.fromCodePoint(code) : ' ';
|
|
116
|
+
}
|
|
117
|
+
return NAMED_ENTITIES[name.toLowerCase()] ?? entity;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/** The named entities Markdown output and hand-written HTML actually use. */
|
|
121
|
+
const NAMED_ENTITIES = {
|
|
122
|
+
amp: '&',
|
|
123
|
+
lt: '<',
|
|
124
|
+
gt: '>',
|
|
125
|
+
quot: '"',
|
|
126
|
+
apos: "'",
|
|
127
|
+
nbsp: ' ',
|
|
128
|
+
hellip: '…',
|
|
129
|
+
mdash: '—',
|
|
130
|
+
ndash: '–',
|
|
131
|
+
lsquo: '‘',
|
|
132
|
+
rsquo: '’',
|
|
133
|
+
ldquo: '“',
|
|
134
|
+
rdquo: '”',
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/content/search.ts"],"names":[],"mappings":"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"}
|
package/dist/content/store.d.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import type { Document, DocumentType } from './document.ts';
|
|
2
|
-
|
|
3
|
-
export declare const DATABASE_FILE = "geekity.db";
|
|
2
|
+
export { DATABASE_FILE } from '../cache.ts';
|
|
4
3
|
/** Directory name that marks a document as thrown away but not yet deleted. */
|
|
5
4
|
export declare const TRASH_DIRECTORY = "_trash";
|
|
5
|
+
/**
|
|
6
|
+
* What the index reads the time from.
|
|
7
|
+
*
|
|
8
|
+
* A post's date decides whether it is public yet, so the index has a clock;
|
|
9
|
+
* this is the seam that lets a test move it without waiting.
|
|
10
|
+
*/
|
|
11
|
+
export type Clock = () => Date;
|
|
12
|
+
/** The clock an index uses when it is not given one. */
|
|
13
|
+
export declare const systemClock: Clock;
|
|
6
14
|
/** Where {@link openContentStore} puts the database. */
|
|
7
15
|
export interface OpenContentStoreOptions {
|
|
8
16
|
/** Directory the database lives in. Created if it is missing. */
|
|
9
17
|
dataDir: string;
|
|
18
|
+
/**
|
|
19
|
+
* What "now" means to the public queries, for the scheduling clause. Defaults
|
|
20
|
+
* to {@link systemClock}; a test hands one it can move.
|
|
21
|
+
*/
|
|
22
|
+
now?: Clock | undefined;
|
|
10
23
|
}
|
|
11
24
|
/**
|
|
12
25
|
* The derived index over the Markdown files.
|
|
@@ -19,7 +32,18 @@ export interface ContentStore {
|
|
|
19
32
|
/** Absolute path of the SQLite file. */
|
|
20
33
|
readonly file: string;
|
|
21
34
|
/**
|
|
22
|
-
*
|
|
35
|
+
* What the index thinks the time is: the instant every public query holds a
|
|
36
|
+
* future-dated document against.
|
|
37
|
+
*
|
|
38
|
+
* It is here so that a caller applying the same rule outside SQL — the
|
|
39
|
+
* public site deciding whether to serve a permalink, the admin deciding
|
|
40
|
+
* whether to offer a View link — asks the same clock the listings did, and
|
|
41
|
+
* so a test that moves the index's clock moves theirs with it.
|
|
42
|
+
*/
|
|
43
|
+
now(): Date;
|
|
44
|
+
/**
|
|
45
|
+
* Insert or replace the row for `document.path`, tags and categories
|
|
46
|
+
* included.
|
|
23
47
|
*
|
|
24
48
|
* Throws {@link DuplicatePermalinkError} when another path already claims
|
|
25
49
|
* the same permalink.
|
|
@@ -33,17 +57,100 @@ export interface ContentStore {
|
|
|
33
57
|
getByPath(path: string): Document | undefined;
|
|
34
58
|
/** The document a URL resolves to, or `undefined`. Permalinks are unique. */
|
|
35
59
|
getByPermalink(permalink: string): Document | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* The post whose front matter names this ActivityStreams id, or `undefined`.
|
|
62
|
+
*
|
|
63
|
+
* Only a migrated post has one (decision-13): a post born on the CMS is
|
|
64
|
+
* named by its permalink and carries no `activitypub.id` at all. This is how
|
|
65
|
+
* the id its followers already hold keeps answering — with the `Article` for
|
|
66
|
+
* a peer and a redirect to the permalink for a browser — so the match is on
|
|
67
|
+
* the whole URL, a `?p=813` query string included.
|
|
68
|
+
*/
|
|
69
|
+
getByStoredObjectId(objectId: string): Document | undefined;
|
|
36
70
|
/**
|
|
37
71
|
* The document with this slug, or `undefined`. Slugs are not unique across
|
|
38
72
|
* years, so the newest match wins.
|
|
39
73
|
*/
|
|
40
74
|
getBySlug(slug: string): Document | undefined;
|
|
41
|
-
/** Published, untrashed posts, newest first. */
|
|
75
|
+
/** Published, untrashed, already-due posts, newest first. */
|
|
42
76
|
listPosts(options?: ListOptions): Document[];
|
|
77
|
+
/**
|
|
78
|
+
* Published, untrashed, already-due posts dated at or after an instant,
|
|
79
|
+
* newest first: everything since the start of a month, or a week, or a year.
|
|
80
|
+
*
|
|
81
|
+
* A query of its own rather than an option on {@link ContentStore.listPosts}
|
|
82
|
+
* because it is a different question — "what has been written lately", not
|
|
83
|
+
* "the front of the archive" — and because an option honoured by one listing
|
|
84
|
+
* and silently dropped by the counts beside it would be a trap. The instant
|
|
85
|
+
* is a {@link dateSortKey}, so the comparison is between two UTC ISO strings.
|
|
86
|
+
*/
|
|
87
|
+
listPostsSince(instant: string): Document[];
|
|
88
|
+
/**
|
|
89
|
+
* The published posts either side of one by date: what a theme links as
|
|
90
|
+
* previous and next under an entry.
|
|
91
|
+
*
|
|
92
|
+
* `previous` is the post before it and `next` the one after it, in the order
|
|
93
|
+
* every listing is in — newest first, ties broken by path — so a reader
|
|
94
|
+
* walking the links walks the archive. Either is absent at its end of the
|
|
95
|
+
* archive rather than wrapping round to the other end.
|
|
96
|
+
*
|
|
97
|
+
* Only published posts are neighbours: a draft, a trashed post, a page and a
|
|
98
|
+
* post whose date is still ahead are all things a reader cannot open, and a
|
|
99
|
+
* link to one would be a link to a 404. A document that is not a post has no
|
|
100
|
+
* neighbours at all, because an archive is what somebody wrote and a page is
|
|
101
|
+
* furniture.
|
|
102
|
+
*/
|
|
103
|
+
neighbours(document: Document): DocumentNeighbours;
|
|
104
|
+
/**
|
|
105
|
+
* When the next scheduled document becomes public, as the UTC instant the
|
|
106
|
+
* index sorts by, or `undefined` when nothing is waiting.
|
|
107
|
+
*
|
|
108
|
+
* What a scheduler sets its timer from: one indexed lookup rather than a
|
|
109
|
+
* walk of the archive.
|
|
110
|
+
*/
|
|
111
|
+
nextDue(): string | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Published, untrashed documents whose date falls in `(after, now]`, oldest
|
|
114
|
+
* first: everything that has come due since a scheduler last looked.
|
|
115
|
+
*
|
|
116
|
+
* Oldest first because they are announced in the order they became public,
|
|
117
|
+
* and a follower should be told about the older post first.
|
|
118
|
+
*/
|
|
119
|
+
listDueSince(after: string): Document[];
|
|
43
120
|
/** Published, untrashed documents carrying a tag, newest first. */
|
|
44
121
|
listByTag(tag: string, options?: ListByTagOptions): Document[];
|
|
122
|
+
/** Published, untrashed documents filed under a category, newest first. */
|
|
123
|
+
listByCategory(category: string, options?: ListByTagOptions): Document[];
|
|
124
|
+
/**
|
|
125
|
+
* Published, untrashed, already-due posts whose `author` is one of `names`,
|
|
126
|
+
* newest first: one user's archive (TASK-67).
|
|
127
|
+
*
|
|
128
|
+
* A list of names rather than one, because more than one string can read as
|
|
129
|
+
* the same person: doc-2's `author` holds a username, and a file written
|
|
130
|
+
* before decision-14 holds a display name that reads as the one user
|
|
131
|
+
* answering to it. `web/authors.ts` decides which names those are and hands
|
|
132
|
+
* them here, so the index matches strings and never has to know what a user
|
|
133
|
+
* is. An empty list matches nothing, which is what a user whose name nothing
|
|
134
|
+
* resolves to should get.
|
|
135
|
+
*
|
|
136
|
+
* Posts only: an author archive is what somebody wrote, and a page is part
|
|
137
|
+
* of the furniture of the site rather than of anybody's body of work.
|
|
138
|
+
*/
|
|
139
|
+
listByAuthor(names: readonly string[], options?: ListOptions): Document[];
|
|
45
140
|
/** Everything the admin may see, trash and drafts included unless filtered. */
|
|
46
141
|
listAll(options?: ListAllOptions): Document[];
|
|
142
|
+
/**
|
|
143
|
+
* Posts the site has announced to the fediverse: the ones whose front matter
|
|
144
|
+
* carries an `activitypub.published`, newest first, drafts, scheduled posts
|
|
145
|
+
* and the trash included.
|
|
146
|
+
*
|
|
147
|
+
* The federation screen's row source, and the reason the filter is a query
|
|
148
|
+
* rather than a walk of {@link ContentStore.listAll}: a draft and a trashed
|
|
149
|
+
* post belong on that screen — they are what a `Delete` is sent for — so the
|
|
150
|
+
* only thing that decides the list is whether the post was ever announced,
|
|
151
|
+
* which is the same thing as whether a follower holds a copy.
|
|
152
|
+
*/
|
|
153
|
+
listFederated(options?: ListOptions): Document[];
|
|
47
154
|
/** Every indexed path, sorted. What a sync compares the content tree against. */
|
|
48
155
|
listPaths(): string[];
|
|
49
156
|
/** How many documents there are of each kind. */
|
|
@@ -52,9 +159,66 @@ export interface ContentStore {
|
|
|
52
159
|
countByTag(tag: string, options?: ListByTagOptions): number;
|
|
53
160
|
/** Every tag in use on published, untrashed documents, with its count. */
|
|
54
161
|
listTags(): TagCount[];
|
|
162
|
+
/** How many published, untrashed documents are filed under a category. */
|
|
163
|
+
countByCategory(category: string, options?: ListByTagOptions): number;
|
|
164
|
+
/** How many published posts one user's archive holds. See {@link ContentStore.listByAuthor}. */
|
|
165
|
+
countByAuthor(names: readonly string[]): number;
|
|
166
|
+
/** Every category in use on published, untrashed documents, with its count. */
|
|
167
|
+
listCategories(): CategoryCount[];
|
|
168
|
+
/**
|
|
169
|
+
* Every term in use in one taxonomy, in alphabetical order, with the number
|
|
170
|
+
* of documents the public site lists under it and the number of files
|
|
171
|
+
* carrying it at all.
|
|
172
|
+
*
|
|
173
|
+
* The second count is the one the taxonomy screens act on: renaming a term
|
|
174
|
+
* rewrites every file that carries it, drafts, scheduled posts and the trash
|
|
175
|
+
* included, so a screen that only showed the public count would understate
|
|
176
|
+
* what a rename is about to touch. Alphabetical because it is a list to find
|
|
177
|
+
* a term in rather than a list of what a site writes about, which is what
|
|
178
|
+
* {@link ContentStore.listTags} is for.
|
|
179
|
+
*/
|
|
180
|
+
listTermUsage(taxonomy: TaxonomyName): TermUsage[];
|
|
181
|
+
/**
|
|
182
|
+
* Published, untrashed, already-due posts and pages matching a reader's
|
|
183
|
+
* query, best match first (TASK-22).
|
|
184
|
+
*
|
|
185
|
+
* `query` is what somebody typed, not FTS5 syntax: see `searchExpression`
|
|
186
|
+
* for what it understands. A query with nothing searchable in it finds
|
|
187
|
+
* nothing rather than everything. Relevance is BM25 with a title match
|
|
188
|
+
* counting for more than a match in the description or the taxonomy, and
|
|
189
|
+
* those for more than one in the body; documents that tie are in the order
|
|
190
|
+
* every listing is in, newest first.
|
|
191
|
+
*/
|
|
192
|
+
search(query: string, options?: ListOptions): SearchHit[];
|
|
193
|
+
/** How many documents {@link ContentStore.search} would find, for the pager. */
|
|
194
|
+
countSearch(query: string): number;
|
|
55
195
|
/** Close the database. Safe to call twice. */
|
|
56
196
|
close(): void;
|
|
57
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* The published posts either side of one, as {@link ContentStore.neighbours}
|
|
200
|
+
* answers.
|
|
201
|
+
*
|
|
202
|
+
* Both keys are absent for a document with no neighbours at all, so a caller
|
|
203
|
+
* reads the pair rather than asking twice.
|
|
204
|
+
*/
|
|
205
|
+
export interface DocumentNeighbours {
|
|
206
|
+
/** The post before this one by date, absent at the end of the archive. */
|
|
207
|
+
previous?: Document | undefined;
|
|
208
|
+
/** The post after this one by date, absent at the front of it. */
|
|
209
|
+
next?: Document | undefined;
|
|
210
|
+
}
|
|
211
|
+
/** One document a search found, and the passage it was found in. */
|
|
212
|
+
export interface SearchHit {
|
|
213
|
+
/** The document. */
|
|
214
|
+
document: Document;
|
|
215
|
+
/**
|
|
216
|
+
* A few words around the match, as plain text, with every matched word
|
|
217
|
+
* between `SNIPPET_OPEN` and `SNIPPET_CLOSE`. Whoever prints it escapes it
|
|
218
|
+
* first and turns the marks into markup second.
|
|
219
|
+
*/
|
|
220
|
+
snippet: string;
|
|
221
|
+
}
|
|
58
222
|
/** Paging for the public listings. */
|
|
59
223
|
export interface ListOptions {
|
|
60
224
|
/** How many documents to return. Defaults to everything. */
|
|
@@ -62,7 +226,7 @@ export interface ListOptions {
|
|
|
62
226
|
/** How many to skip first. Defaults to 0. */
|
|
63
227
|
offset?: number | undefined;
|
|
64
228
|
}
|
|
65
|
-
/** Paging plus the type filter the
|
|
229
|
+
/** Paging plus the type filter the taxonomy archives need. */
|
|
66
230
|
export interface ListByTagOptions extends ListOptions {
|
|
67
231
|
/** Restrict to posts or pages. Defaults to both. */
|
|
68
232
|
type?: DocumentType | undefined;
|
|
@@ -75,19 +239,28 @@ export interface ListAllOptions extends ListOptions {
|
|
|
75
239
|
draft?: boolean | undefined;
|
|
76
240
|
/** `true` for trashed only, `false` for live only. Defaults to live only. */
|
|
77
241
|
trashed?: boolean | undefined;
|
|
242
|
+
/**
|
|
243
|
+
* `true` for documents whose date has not arrived, `false` for those already
|
|
244
|
+
* due. Defaults to both, which is what the admin's "All" view shows.
|
|
245
|
+
*/
|
|
246
|
+
scheduled?: boolean | undefined;
|
|
78
247
|
/** Restrict to documents carrying this tag. */
|
|
79
248
|
tag?: string | undefined;
|
|
249
|
+
/** Restrict to documents filed under this category. */
|
|
250
|
+
category?: string | undefined;
|
|
80
251
|
}
|
|
81
252
|
/** What {@link ContentStore.counts} reports. */
|
|
82
253
|
export interface ContentCounts {
|
|
83
254
|
/** Every indexed document, trash included. */
|
|
84
255
|
total: number;
|
|
85
|
-
/** Published, untrashed posts: the size of the public archive. */
|
|
256
|
+
/** Published, untrashed, already-due posts: the size of the public archive. */
|
|
86
257
|
posts: number;
|
|
87
|
-
/** Published, untrashed pages. */
|
|
258
|
+
/** Published, untrashed, already-due pages. */
|
|
88
259
|
pages: number;
|
|
89
260
|
/** Untrashed drafts of either type. */
|
|
90
261
|
drafts: number;
|
|
262
|
+
/** Untrashed non-drafts of either type whose date has not arrived yet. */
|
|
263
|
+
scheduled: number;
|
|
91
264
|
/** Documents under `_trash/`. */
|
|
92
265
|
trashed: number;
|
|
93
266
|
}
|
|
@@ -96,6 +269,28 @@ export interface TagCount {
|
|
|
96
269
|
tag: string;
|
|
97
270
|
count: number;
|
|
98
271
|
}
|
|
272
|
+
/** One category and how many published documents are filed under it. */
|
|
273
|
+
export interface CategoryCount {
|
|
274
|
+
category: string;
|
|
275
|
+
count: number;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Which of the two taxonomies a query is about.
|
|
279
|
+
*
|
|
280
|
+
* Spelled here rather than imported from `web/taxonomy.ts` because the index
|
|
281
|
+
* is underneath the web layer and should not depend on it; the two types are
|
|
282
|
+
* the same union, so they are assignable to each other.
|
|
283
|
+
*/
|
|
284
|
+
export type TaxonomyName = 'tag' | 'category';
|
|
285
|
+
/** One term, and how much of the site carries it. */
|
|
286
|
+
export interface TermUsage {
|
|
287
|
+
/** The term itself, as the files spell it. */
|
|
288
|
+
term: string;
|
|
289
|
+
/** Documents the public site lists under it: published, untrashed, due. */
|
|
290
|
+
published: number;
|
|
291
|
+
/** Every file carrying it, drafts, scheduled posts and the trash included. */
|
|
292
|
+
total: number;
|
|
293
|
+
}
|
|
99
294
|
/**
|
|
100
295
|
* Thrown when two files claim the same permalink. Two documents at one URL is
|
|
101
296
|
* a content mistake the site owner has to fix, so the index refuses it rather
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/content/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/content/store.ts"],"names":[],"mappings":"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"}
|