@geekity/cms 0.7.0 → 0.9.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.
Files changed (216) hide show
  1. package/README.md +445 -63
  2. package/admin/layouts/shell.njk +13 -6
  3. package/admin/pages/comments/all.njk +3 -0
  4. package/admin/pages/error.njk +11 -0
  5. package/admin/pages/settings/discussion.njk +53 -0
  6. package/admin/pages/settings/email.njk +20 -0
  7. package/admin/pages/tools/personal-data.njk +67 -0
  8. package/admin/pages/users/edit.njk +1 -1
  9. package/admin/static/admin.css +69 -15
  10. package/dist/admin/comments.d.ts +5 -0
  11. package/dist/admin/comments.d.ts.map +1 -1
  12. package/dist/admin/comments.js +13 -0
  13. package/dist/admin/comments.js.map +1 -1
  14. package/dist/admin/documents.d.ts.map +1 -1
  15. package/dist/admin/documents.js +58 -31
  16. package/dist/admin/documents.js.map +1 -1
  17. package/dist/admin/headers.d.ts +14 -5
  18. package/dist/admin/headers.d.ts.map +1 -1
  19. package/dist/admin/headers.js +18 -6
  20. package/dist/admin/headers.js.map +1 -1
  21. package/dist/admin/index.d.ts +1 -1
  22. package/dist/admin/index.d.ts.map +1 -1
  23. package/dist/admin/index.js +1 -1
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/menu.d.ts.map +1 -1
  26. package/dist/admin/menu.js +5 -1
  27. package/dist/admin/menu.js.map +1 -1
  28. package/dist/admin/personal-data.d.ts +35 -0
  29. package/dist/admin/personal-data.d.ts.map +1 -0
  30. package/dist/admin/personal-data.js +90 -0
  31. package/dist/admin/personal-data.js.map +1 -0
  32. package/dist/admin/routes.d.ts.map +1 -1
  33. package/dist/admin/routes.js +23 -4
  34. package/dist/admin/routes.js.map +1 -1
  35. package/dist/admin/session.d.ts +42 -1
  36. package/dist/admin/session.d.ts.map +1 -1
  37. package/dist/admin/session.js +74 -4
  38. package/dist/admin/session.js.map +1 -1
  39. package/dist/admin/settings-discussion.d.ts.map +1 -1
  40. package/dist/admin/settings-discussion.js +9 -1
  41. package/dist/admin/settings-discussion.js.map +1 -1
  42. package/dist/admin/settings-email.d.ts.map +1 -1
  43. package/dist/admin/settings-email.js +10 -1
  44. package/dist/admin/settings-email.js.map +1 -1
  45. package/dist/admin/settings.d.ts +39 -0
  46. package/dist/admin/settings.d.ts.map +1 -1
  47. package/dist/admin/settings.js +144 -0
  48. package/dist/admin/settings.js.map +1 -1
  49. package/dist/admin/store.d.ts +30 -0
  50. package/dist/admin/store.d.ts.map +1 -1
  51. package/dist/admin/store.js +68 -5
  52. package/dist/admin/store.js.map +1 -1
  53. package/dist/admin/templates.d.ts +2 -0
  54. package/dist/admin/templates.d.ts.map +1 -1
  55. package/dist/admin/templates.js +2 -0
  56. package/dist/admin/templates.js.map +1 -1
  57. package/dist/avatars/avatars.d.ts +112 -0
  58. package/dist/avatars/avatars.d.ts.map +1 -0
  59. package/dist/avatars/avatars.js +259 -0
  60. package/dist/avatars/avatars.js.map +1 -0
  61. package/dist/avatars/index.d.ts +4 -0
  62. package/dist/avatars/index.d.ts.map +1 -0
  63. package/dist/avatars/index.js +3 -0
  64. package/dist/avatars/index.js.map +1 -0
  65. package/dist/avatars/routes.d.ts +11 -0
  66. package/dist/avatars/routes.d.ts.map +1 -0
  67. package/dist/avatars/routes.js +33 -0
  68. package/dist/avatars/routes.js.map +1 -0
  69. package/dist/cli.d.ts +1 -1
  70. package/dist/cli.d.ts.map +1 -1
  71. package/dist/cli.js +128 -3
  72. package/dist/cli.js.map +1 -1
  73. package/dist/comments/records.d.ts +15 -0
  74. package/dist/comments/records.d.ts.map +1 -1
  75. package/dist/comments/records.js +51 -1
  76. package/dist/comments/records.js.map +1 -1
  77. package/dist/comments/routes.d.ts.map +1 -1
  78. package/dist/comments/routes.js +7 -1
  79. package/dist/comments/routes.js.map +1 -1
  80. package/dist/config.d.ts +37 -0
  81. package/dist/config.d.ts.map +1 -1
  82. package/dist/config.js +58 -0
  83. package/dist/config.js.map +1 -1
  84. package/dist/contact/index.d.ts +1 -1
  85. package/dist/contact/index.d.ts.map +1 -1
  86. package/dist/contact/index.js +1 -1
  87. package/dist/contact/index.js.map +1 -1
  88. package/dist/contact/records.d.ts +8 -2
  89. package/dist/contact/records.d.ts.map +1 -1
  90. package/dist/contact/records.js +13 -6
  91. package/dist/contact/records.js.map +1 -1
  92. package/dist/content/document.d.ts +10 -2
  93. package/dist/content/document.d.ts.map +1 -1
  94. package/dist/content/document.js +1 -0
  95. package/dist/content/document.js.map +1 -1
  96. package/dist/content/parser.d.ts.map +1 -1
  97. package/dist/content/parser.js +13 -0
  98. package/dist/content/parser.js.map +1 -1
  99. package/dist/content/store.d.ts +13 -2
  100. package/dist/content/store.d.ts.map +1 -1
  101. package/dist/content/store.js +45 -1
  102. package/dist/content/store.js.map +1 -1
  103. package/dist/content/writer.d.ts.map +1 -1
  104. package/dist/content/writer.js +4 -0
  105. package/dist/content/writer.js.map +1 -1
  106. package/dist/env.d.ts +18 -0
  107. package/dist/env.d.ts.map +1 -1
  108. package/dist/federation/article.d.ts +9 -0
  109. package/dist/federation/article.d.ts.map +1 -1
  110. package/dist/federation/article.js +24 -2
  111. package/dist/federation/article.js.map +1 -1
  112. package/dist/federation/federation.d.ts.map +1 -1
  113. package/dist/federation/federation.js +24 -6
  114. package/dist/federation/federation.js.map +1 -1
  115. package/dist/federation/inbox.d.ts +17 -3
  116. package/dist/federation/inbox.d.ts.map +1 -1
  117. package/dist/federation/inbox.js +72 -6
  118. package/dist/federation/inbox.js.map +1 -1
  119. package/dist/federation/mount.d.ts.map +1 -1
  120. package/dist/federation/mount.js +8 -3
  121. package/dist/federation/mount.js.map +1 -1
  122. package/dist/federation/paths.d.ts +5 -0
  123. package/dist/federation/paths.d.ts.map +1 -1
  124. package/dist/federation/paths.js +5 -0
  125. package/dist/federation/paths.js.map +1 -1
  126. package/dist/federation/quotes.d.ts +58 -0
  127. package/dist/federation/quotes.d.ts.map +1 -0
  128. package/dist/federation/quotes.js +89 -0
  129. package/dist/federation/quotes.js.map +1 -0
  130. package/dist/federation/replies.d.ts +23 -0
  131. package/dist/federation/replies.d.ts.map +1 -1
  132. package/dist/federation/replies.js +47 -10
  133. package/dist/federation/replies.js.map +1 -1
  134. package/dist/federation/wordpress.d.ts.map +1 -1
  135. package/dist/federation/wordpress.js +5 -4
  136. package/dist/federation/wordpress.js.map +1 -1
  137. package/dist/index.d.ts +23 -2
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +64 -7
  140. package/dist/index.js.map +1 -1
  141. package/dist/maintenance.d.ts +47 -0
  142. package/dist/maintenance.d.ts.map +1 -0
  143. package/dist/maintenance.js +78 -0
  144. package/dist/maintenance.js.map +1 -0
  145. package/dist/notifications/index.d.ts +1 -1
  146. package/dist/notifications/index.d.ts.map +1 -1
  147. package/dist/notifications/index.js +1 -1
  148. package/dist/notifications/index.js.map +1 -1
  149. package/dist/notifications/optouts.d.ts +6 -0
  150. package/dist/notifications/optouts.d.ts.map +1 -1
  151. package/dist/notifications/optouts.js +17 -0
  152. package/dist/notifications/optouts.js.map +1 -1
  153. package/dist/privacy/erase.d.ts +45 -0
  154. package/dist/privacy/erase.d.ts.map +1 -0
  155. package/dist/privacy/erase.js +77 -0
  156. package/dist/privacy/erase.js.map +1 -0
  157. package/dist/privacy/policy.d.ts +32 -0
  158. package/dist/privacy/policy.d.ts.map +1 -0
  159. package/dist/privacy/policy.js +37 -0
  160. package/dist/privacy/policy.js.map +1 -0
  161. package/dist/privacy/retention.d.ts +79 -0
  162. package/dist/privacy/retention.d.ts.map +1 -0
  163. package/dist/privacy/retention.js +133 -0
  164. package/dist/privacy/retention.js.map +1 -0
  165. package/dist/web/conversation.d.ts +9 -1
  166. package/dist/web/conversation.d.ts.map +1 -1
  167. package/dist/web/conversation.js +69 -39
  168. package/dist/web/conversation.js.map +1 -1
  169. package/dist/web/documents.d.ts +9 -0
  170. package/dist/web/documents.d.ts.map +1 -1
  171. package/dist/web/documents.js +31 -0
  172. package/dist/web/documents.js.map +1 -1
  173. package/dist/web/errors.d.ts +19 -0
  174. package/dist/web/errors.d.ts.map +1 -0
  175. package/dist/web/errors.js +93 -0
  176. package/dist/web/errors.js.map +1 -0
  177. package/dist/web/health.d.ts +6 -0
  178. package/dist/web/health.d.ts.map +1 -1
  179. package/dist/web/health.js +5 -1
  180. package/dist/web/health.js.map +1 -1
  181. package/dist/web/index.d.ts +5 -0
  182. package/dist/web/index.d.ts.map +1 -1
  183. package/dist/web/index.js +4 -0
  184. package/dist/web/index.js.map +1 -1
  185. package/dist/web/maintenance.d.ts +18 -0
  186. package/dist/web/maintenance.d.ts.map +1 -0
  187. package/dist/web/maintenance.js +113 -0
  188. package/dist/web/maintenance.js.map +1 -0
  189. package/dist/web/redirects.d.ts +75 -0
  190. package/dist/web/redirects.d.ts.map +1 -0
  191. package/dist/web/redirects.js +200 -0
  192. package/dist/web/redirects.js.map +1 -0
  193. package/dist/web/render.d.ts +9 -0
  194. package/dist/web/render.d.ts.map +1 -1
  195. package/dist/web/render.js +19 -0
  196. package/dist/web/render.js.map +1 -1
  197. package/dist/web/routes.d.ts.map +1 -1
  198. package/dist/web/routes.js +57 -0
  199. package/dist/web/routes.js.map +1 -1
  200. package/dist/web/well-known.d.ts +21 -0
  201. package/dist/web/well-known.d.ts.map +1 -0
  202. package/dist/web/well-known.js +66 -0
  203. package/dist/web/well-known.js.map +1 -0
  204. package/dist/webmention/fetch-public.d.ts +34 -0
  205. package/dist/webmention/fetch-public.d.ts.map +1 -0
  206. package/dist/webmention/fetch-public.js +101 -0
  207. package/dist/webmention/fetch-public.js.map +1 -0
  208. package/dist/webmention/reply-context.d.ts.map +1 -1
  209. package/dist/webmention/reply-context.js +12 -89
  210. package/dist/webmention/reply-context.js.map +1 -1
  211. package/package.json +1 -1
  212. package/templates/site/content/_data/site.json +7 -1
  213. package/templates/site/content/pages/privacy.md +127 -0
  214. package/themes/default/README.md +58 -19
  215. package/themes/default/layouts/500.njk +8 -0
  216. package/themes/default/layouts/503.njk +8 -0
@@ -0,0 +1,113 @@
1
+ import { ADMIN_PREFIX } from '../admin/session.js';
2
+ import { signedInCommenter } from '../comments/viewer.js';
3
+ import { THEME_ASSET_PREFIX } from './assets.js';
4
+ import { representationOf } from './errors.js';
5
+ import { HEALTH_PATH } from './health.js';
6
+ import { requestPath } from './routes.js';
7
+ import { CHANGE_PASSWORD_WELL_KNOWN_PATH, SECURITY_TXT_PATH } from './well-known.js';
8
+ /**
9
+ * What a client is told to wait when the operator named no return time: long
10
+ * enough that a crawler backs off, short enough that a fediverse server's next
11
+ * retry lands after a typical upgrade.
12
+ */
13
+ const DEFAULT_RETRY_AFTER_SECONDS = 600;
14
+ /** Never stored: a cached 503 would outlive the maintenance it announced. */
15
+ const NO_STORE = 'no-store';
16
+ /**
17
+ * A signed-in admin's view of the public site during maintenance is theirs
18
+ * alone, so no shared cache may keep it and hand it to a stranger.
19
+ */
20
+ const PRIVATE_NO_STORE = 'private, no-store';
21
+ const STATIC_PAGE = `<!doctype html>
22
+ <html lang="en">
23
+ <head>
24
+ <meta charset="utf-8" />
25
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
26
+ <title>Down for maintenance</title>
27
+ </head>
28
+ <body>
29
+ <h1>Down for maintenance</h1>
30
+ <p>This site is down for maintenance and will be back shortly. Please try again later.</p>
31
+ </body>
32
+ </html>
33
+ `;
34
+ const MARKDOWN_BODY = '# Down for maintenance\n\nThis site is down for maintenance and will be back shortly. Please try again later.\n';
35
+ const JSON_BODY = `${JSON.stringify({
36
+ error: 'maintenance',
37
+ message: 'This site is down for maintenance and will be back shortly. Try again later.',
38
+ }, undefined, 2)}\n`;
39
+ /**
40
+ * Paths that answer as usual during maintenance: the health checks, so an
41
+ * orchestrator can tell a site that is down on purpose from a broken one; the
42
+ * admin, login page included, so an admin can sign in and work; the
43
+ * theme's files, so the maintenance page is drawn in the site's own style;
44
+ * security.txt, since an outage is when a researcher may most need to reach
45
+ * somebody; and change-password, which only points into the admin.
46
+ */
47
+ function isExempt(pathname) {
48
+ return (pathname === HEALTH_PATH ||
49
+ pathname === '/_geekity/health' ||
50
+ pathname === SECURITY_TXT_PATH ||
51
+ pathname === CHANGE_PASSWORD_WELL_KNOWN_PATH ||
52
+ pathname === ADMIN_PREFIX ||
53
+ pathname.startsWith(`${ADMIN_PREFIX}/`) ||
54
+ pathname.startsWith(THEME_ASSET_PREFIX));
55
+ }
56
+ /**
57
+ * Turn the site away while it is in maintenance mode (TASK-130).
58
+ *
59
+ * Everything that is not exempt answers 503 with `Retry-After`, so browsers,
60
+ * crawlers and fediverse servers all read the outage as temporary: a crawler
61
+ * keeps the page in its index, and a server whose inbox delivery was refused
62
+ * queues it for a retry rather than dropping it. Mounted in front of the
63
+ * federation middleware, so no inbox, Fedify's or the WordPress plugin's, is
64
+ * reached at all.
65
+ *
66
+ * A signed-in user browses the public site as usual, which is how an admin
67
+ * checks an upgrade before turning maintenance off. The test is the one the
68
+ * comment form applies: a live session naming a user who still exists.
69
+ */
70
+ export const maintenanceGate = async (c, next) => {
71
+ const window = c.var.maintenance();
72
+ const pathname = requestPath(c);
73
+ if (window === undefined || isExempt(pathname))
74
+ return await next();
75
+ if (signedInCommenter(c) !== undefined) {
76
+ await next();
77
+ c.res.headers.set('cache-control', PRIVATE_NO_STORE);
78
+ return;
79
+ }
80
+ return unavailable(c, pathname, window.until);
81
+ };
82
+ function unavailable(c, pathname, until) {
83
+ const upcoming = until !== undefined && until > c.var.config.now() ? until : undefined;
84
+ const headers = {
85
+ 'retry-after': upcoming?.toUTCString() ?? String(DEFAULT_RETRY_AFTER_SECONDS),
86
+ 'cache-control': NO_STORE,
87
+ };
88
+ switch (representationOf(pathname, c.req.header('accept'))) {
89
+ case 'json':
90
+ return c.body(JSON_BODY, 503, {
91
+ ...headers,
92
+ 'content-type': 'application/json; charset=utf-8',
93
+ });
94
+ case 'markdown':
95
+ return c.body(MARKDOWN_BODY, 503, {
96
+ ...headers,
97
+ 'content-type': 'text/markdown; charset=utf-8',
98
+ 'content-disposition': 'inline',
99
+ });
100
+ case 'html':
101
+ return c.html(page(c, pathname, upcoming), 503, headers);
102
+ }
103
+ }
104
+ function page(c, pathname, until) {
105
+ try {
106
+ return c.var.renderer.renderMaintenance(pathname, until);
107
+ }
108
+ catch (error) {
109
+ console.error('The maintenance page could not be rendered:', error);
110
+ return STATIC_PAGE;
111
+ }
112
+ }
113
+ //# sourceMappingURL=maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/web/maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { GeekityEnv } from '../env.ts';
3
+ /**
4
+ * The site's own redirects, relative to the content directory (TASK-128).
5
+ * Content rather than data, like `site.json`: a site's old URLs are part of the
6
+ * site, and belong in the same git history as the posts they lead to
7
+ * (decision-9).
8
+ */
9
+ export declare const REDIRECTS_FILE = "_data/redirects.json";
10
+ /** What `X-Redirect-By` says on every redirect the CMS sends. */
11
+ export declare const REDIRECT_BY = "Geekity CMS";
12
+ declare const STATUSES: readonly [301, 302, 307, 308];
13
+ /** A redirect's status: permanent (301, 308) or temporary (302, 307). */
14
+ export type RedirectStatus = (typeof STATUSES)[number];
15
+ /** One declared redirect, parsed and checked. */
16
+ export interface Redirect {
17
+ /** The source as the file spells it, for messages. */
18
+ from: string;
19
+ /** The `Location` to send, already URL-safe. */
20
+ location: string;
21
+ status: RedirectStatus;
22
+ /**
23
+ * Whether the request's query goes on to the target: true for a source
24
+ * without a query of its own whose target names none either, so
25
+ * `/old/?utm=x` lands on `/new/?utm=x`.
26
+ */
27
+ passQuery: boolean;
28
+ }
29
+ /**
30
+ * Every declared redirect, keyed the way a request is looked up: by decoded
31
+ * path for a source without a query, and by decoded path plus its sorted query
32
+ * for one with.
33
+ */
34
+ export interface RedirectTable {
35
+ readonly paths: ReadonlyMap<string, Redirect>;
36
+ readonly queries: ReadonlyMap<string, Redirect>;
37
+ }
38
+ /**
39
+ * Parse the redirect file into the redirects it can serve and a line for every
40
+ * one it cannot: an entry that is not a well-formed redirect, a source
41
+ * declared twice (the first wins), and every entry that leads into a loop.
42
+ */
43
+ export declare function parseRedirects(text: string): {
44
+ table: RedirectTable;
45
+ problems: string[];
46
+ };
47
+ /** The redirect whose source names this path with exactly this query. */
48
+ export declare function findQueryRedirect(table: RedirectTable, pathname: string, search: string): Redirect | undefined;
49
+ /** Where a redirect sends a request that came with `search`. */
50
+ export declare function redirectLocation(redirect: Redirect, search: string): string;
51
+ /** The site's declared redirects, read from the file as it is now. */
52
+ export interface RedirectSource {
53
+ current(): RedirectTable;
54
+ }
55
+ /**
56
+ * Read `content/_data/redirects.json` per call, parsing it again only when its
57
+ * text has changed, so an edit takes effect on the next request with no
58
+ * restart and with the watcher off. Each problem is logged once per change of
59
+ * the file rather than on every request; the CMS asks once at boot, so a file
60
+ * with problems says so before the first request arrives.
61
+ */
62
+ export declare function createRedirectSource(options: {
63
+ contentDir: string;
64
+ logger?: {
65
+ warn(message: string): void;
66
+ } | undefined;
67
+ }): RedirectSource;
68
+ /**
69
+ * Stamp `X-Redirect-By` on every redirect the CMS answers with, whichever part
70
+ * of it sent one, so somebody tracing a chain of redirects through a proxy can
71
+ * tell this layer's from the others'.
72
+ */
73
+ export declare const redirectBy: MiddlewareHandler<GeekityEnv>;
74
+ export {};
75
+ //# sourceMappingURL=redirects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirects.d.ts","sourceRoot":"","sources":["../../src/web/redirects.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD,iEAAiE;AACjE,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,QAAA,MAAM,QAAQ,YAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAE/C,yEAAyE;AACzE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACjD;AAOD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA+CzF;AA4ED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,QAAQ,GAAG,SAAS,CAGtB;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM3E;AAgBD,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,OAAO,IAAI,aAAa,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;CACtD,GAAG,cAAc,CAyBjB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,UAAU,CAKpD,CAAC"}
@@ -0,0 +1,200 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ /**
4
+ * The site's own redirects, relative to the content directory (TASK-128).
5
+ * Content rather than data, like `site.json`: a site's old URLs are part of the
6
+ * site, and belong in the same git history as the posts they lead to
7
+ * (decision-9).
8
+ */
9
+ export const REDIRECTS_FILE = '_data/redirects.json';
10
+ /** What `X-Redirect-By` says on every redirect the CMS sends. */
11
+ export const REDIRECT_BY = 'Geekity CMS';
12
+ const STATUSES = [301, 302, 307, 308];
13
+ const EMPTY = { paths: new Map(), queries: new Map() };
14
+ /** Anything resolved against this is a site path; nothing is ever sent to it. */
15
+ const SITE = 'http://site.invalid';
16
+ /**
17
+ * Parse the redirect file into the redirects it can serve and a line for every
18
+ * one it cannot: an entry that is not a well-formed redirect, a source
19
+ * declared twice (the first wins), and every entry that leads into a loop.
20
+ */
21
+ export function parseRedirects(text) {
22
+ let parsed;
23
+ try {
24
+ parsed = JSON.parse(text);
25
+ }
26
+ catch (error) {
27
+ const reason = error instanceof Error ? error.message : String(error);
28
+ return { table: EMPTY, problems: [`it is not valid JSON (${reason}).`] };
29
+ }
30
+ if (!Array.isArray(parsed)) {
31
+ return { table: EMPTY, problems: ['it must be a list of { "from", "to", "status" }.'] };
32
+ }
33
+ const problems = [];
34
+ const paths = new Map();
35
+ const queries = new Map();
36
+ parsed.forEach((entry, index) => {
37
+ const result = parseEntry(entry);
38
+ if (typeof result === 'string') {
39
+ problems.push(`entry ${String(index + 1)} ${result}`);
40
+ return;
41
+ }
42
+ const { key, query, redirect } = result;
43
+ const table = query === '' ? paths : queries;
44
+ if (table.has(key)) {
45
+ problems.push(`"${redirect.from}" is declared more than once; the first declaration is used.`);
46
+ return;
47
+ }
48
+ table.set(key, redirect);
49
+ });
50
+ // Every loop is found before any entry is dropped, or dropping one half of
51
+ // a loop would make the other half look like an ordinary redirect.
52
+ const table = { paths, queries };
53
+ const looping = [paths, queries].flatMap((map) => [...map]
54
+ .filter(([, redirect]) => leadsIntoLoop(table, redirect))
55
+ .map(([key, redirect]) => ({ map, key, redirect })));
56
+ for (const { map, key, redirect } of looping) {
57
+ problems.push(`"${redirect.from}" leads into a redirect loop and is not served.`);
58
+ map.delete(key);
59
+ }
60
+ return { table, problems };
61
+ }
62
+ function parseEntry(entry) {
63
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
64
+ return 'is not an object with "from" and "to".';
65
+ }
66
+ const { from, to, status = 301 } = entry;
67
+ if (typeof from !== 'string' || !isSitePath(from)) {
68
+ return `has a "from" of ${JSON.stringify(from)}: it must be a path on this site, starting with "/".`;
69
+ }
70
+ if (!STATUSES.includes(status)) {
71
+ return `("${from}") has a "status" of ${JSON.stringify(status)}: it must be one of ${STATUSES.join(', ')}.`;
72
+ }
73
+ const location = typeof to === 'string' ? locationOf(to) : undefined;
74
+ if (location === undefined) {
75
+ return `("${from}") has a "to" of ${JSON.stringify(to)}: it must be a path on this site or an http(s) URL.`;
76
+ }
77
+ const source = new URL(from, SITE);
78
+ const query = sortedQuery(source.search);
79
+ const key = query === '' ? decodedPath(source.pathname) : `${decodedPath(source.pathname)}?${query}`;
80
+ const passQuery = query === '' && !location.includes('?');
81
+ return { key, query, redirect: { from, location, status: status, passQuery } };
82
+ }
83
+ function isSitePath(value) {
84
+ return value.startsWith('/') && !value.startsWith('//') && !value.includes('#');
85
+ }
86
+ /** A target as a URL-safe `Location`, or `undefined` when it is not one. */
87
+ function locationOf(to) {
88
+ if (to.startsWith('/') && !to.startsWith('//')) {
89
+ const url = new URL(to, SITE);
90
+ return `${url.pathname}${url.search}${url.hash}`;
91
+ }
92
+ try {
93
+ const url = new URL(to);
94
+ return url.protocol === 'http:' || url.protocol === 'https:' ? url.href : undefined;
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ /**
101
+ * Whether following a redirect through the table ever comes back to a source
102
+ * already visited. A target on another host, or one the table has nothing
103
+ * for, ends the chain.
104
+ */
105
+ function leadsIntoLoop(table, start) {
106
+ const seen = new Set([start]);
107
+ let current = start;
108
+ for (;;) {
109
+ if (!current.location.startsWith('/'))
110
+ return false;
111
+ const url = new URL(current.location, SITE);
112
+ const next = findRedirect(table, decodedPath(url.pathname), url.search);
113
+ if (next === undefined)
114
+ return false;
115
+ if (seen.has(next))
116
+ return true;
117
+ seen.add(next);
118
+ current = next;
119
+ }
120
+ }
121
+ /**
122
+ * The redirect a request names: a source with exactly this query first, then
123
+ * one with no query at all. `pathname` is decoded, as `requestPath` gives it.
124
+ */
125
+ function findRedirect(table, pathname, search) {
126
+ return findQueryRedirect(table, pathname, search) ?? table.paths.get(pathname);
127
+ }
128
+ /** The redirect whose source names this path with exactly this query. */
129
+ export function findQueryRedirect(table, pathname, search) {
130
+ const query = sortedQuery(search);
131
+ return query === '' ? undefined : table.queries.get(`${pathname}?${query}`);
132
+ }
133
+ /** Where a redirect sends a request that came with `search`. */
134
+ export function redirectLocation(redirect, search) {
135
+ if (!redirect.passQuery || search === '' || search === '?')
136
+ return redirect.location;
137
+ const hash = redirect.location.indexOf('#');
138
+ return hash === -1
139
+ ? `${redirect.location}${search}`
140
+ : `${redirect.location.slice(0, hash)}${search}${redirect.location.slice(hash)}`;
141
+ }
142
+ function sortedQuery(search) {
143
+ const params = new URLSearchParams(search);
144
+ params.sort();
145
+ return params.toString();
146
+ }
147
+ function decodedPath(pathname) {
148
+ try {
149
+ return decodeURIComponent(pathname);
150
+ }
151
+ catch {
152
+ return pathname;
153
+ }
154
+ }
155
+ /**
156
+ * Read `content/_data/redirects.json` per call, parsing it again only when its
157
+ * text has changed, so an edit takes effect on the next request with no
158
+ * restart and with the watcher off. Each problem is logged once per change of
159
+ * the file rather than on every request; the CMS asks once at boot, so a file
160
+ * with problems says so before the first request arrives.
161
+ */
162
+ export function createRedirectSource(options) {
163
+ const logger = options.logger ?? console;
164
+ const file = path.join(options.contentDir, ...REDIRECTS_FILE.split('/'));
165
+ let cachedText;
166
+ let cached = EMPTY;
167
+ return {
168
+ current() {
169
+ let text;
170
+ try {
171
+ text = readFileSync(file, 'utf8');
172
+ }
173
+ catch {
174
+ cachedText = undefined;
175
+ cached = EMPTY;
176
+ return cached;
177
+ }
178
+ if (text === cachedText)
179
+ return cached;
180
+ cachedText = text;
181
+ const { table, problems } = parseRedirects(text);
182
+ cached = table;
183
+ for (const problem of problems)
184
+ logger.warn(`${file}: ${problem}`);
185
+ return cached;
186
+ },
187
+ };
188
+ }
189
+ /**
190
+ * Stamp `X-Redirect-By` on every redirect the CMS answers with, whichever part
191
+ * of it sent one, so somebody tracing a chain of redirects through a proxy can
192
+ * tell this layer's from the others'.
193
+ */
194
+ export const redirectBy = async (c, next) => {
195
+ await next();
196
+ if (c.res.status >= 300 && c.res.status < 400 && c.res.headers.has('Location')) {
197
+ c.res.headers.set('X-Redirect-By', REDIRECT_BY);
198
+ }
199
+ };
200
+ //# sourceMappingURL=redirects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirects.js","sourceRoot":"","sources":["../../src/web/redirects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAErD,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AA8B/C,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAEtE,iFAAiF;AACjF,MAAM,IAAI,GAAG,qBAAqB,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,yBAAyB,MAAM,IAAI,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,kDAAkD,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAc,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7C,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CACX,IAAI,QAAQ,CAAC,IAAI,8DAA8D,CAChF,CAAC;YACF,OAAO;QACT,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/C,CAAC,GAAG,GAAG,CAAC;SACL,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CACtD,CAAC;IACF,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,iDAAiD,CAAC,CAAC;QAClF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,wCAAwC,CAAC;IAClD,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,KAAgC,CAAC;IAEpE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sDAAsD,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAwB,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,IAAI,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9G,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,KAAK,IAAI,oBAAoB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,qDAAqD,CAAC;IAC9G,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,GAAG,GACP,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;IAC3F,MAAM,SAAS,GAAG,KAAK,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAwB,EAAE,SAAS,EAAE,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC;AAED,4EAA4E;AAC5E,SAAS,UAAU,CAAC,EAAU;IAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAoB,EAAE,KAAe;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,SAAS,CAAC;QACR,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACnB,KAAoB,EACpB,QAAgB,EAChB,MAAc;IAEd,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAC/B,KAAoB,EACpB,QAAgB,EAChB,MAAc;IAEd,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,QAAkB,EAAE,MAAc;IACjE,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;IACrF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,IAAI,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,MAAM,EAAE;QACjC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAGpC;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,IAAI,UAA8B,CAAC;IACnC,IAAI,MAAM,GAAkB,KAAK,CAAC;IAElC,OAAO;QACL,OAAO;YACL,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,SAAS,CAAC;gBACvB,MAAM,GAAG,KAAK,CAAC;gBACf,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,MAAM,CAAC;YAEvC,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,GAAG,KAAK,CAAC;YACf,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;YACnE,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,IAAI,EAAE,CAAC;IACb,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC"}
@@ -22,6 +22,8 @@ export declare const TEMPLATES: {
22
22
  readonly author: 'layouts/author.njk';
23
23
  readonly search: 'layouts/search.njk';
24
24
  readonly notFound: 'layouts/404.njk';
25
+ readonly serverError: 'layouts/500.njk';
26
+ readonly maintenance: 'layouts/503.njk';
25
27
  };
26
28
  /**
27
29
  * The two templates named for the Reading choice, which a theme may write and
@@ -146,6 +148,13 @@ export interface Renderer {
146
148
  renderSearch(search: SearchPage): string;
147
149
  /** The 404 page, for a path that resolved to nothing. */
148
150
  renderNotFound(url: string): string;
151
+ /** The 500 page, for a request whose handler threw. */
152
+ renderServerError(url: string): string;
153
+ /**
154
+ * The maintenance page (TASK-130), for a request turned away while the site
155
+ * is down on purpose. `until` is when the operator expects it back.
156
+ */
157
+ renderMaintenance(url: string, until: Date | undefined): string;
149
158
  /** Any template by name, with the site data already in the context. */
150
159
  render(template: string, context?: Record<string, unknown>): string;
151
160
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export const TEMPLATES = {
20
20
  author: 'layouts/author.njk',
21
21
  search: 'layouts/search.njk',
22
22
  notFound: 'layouts/404.njk',
23
+ serverError: 'layouts/500.njk',
24
+ maintenance: 'layouts/503.njk',
23
25
  };
24
26
  /**
25
27
  * The two templates named for the Reading choice, which a theme may write and
@@ -356,6 +358,23 @@ export function createRenderer(options) {
356
358
  page: { url },
357
359
  });
358
360
  },
361
+ renderServerError(url) {
362
+ return render(TEMPLATES.serverError, {
363
+ title: 'Something went wrong',
364
+ url,
365
+ page: { url },
366
+ });
367
+ },
368
+ renderMaintenance(url, until) {
369
+ return render(TEMPLATES.maintenance, {
370
+ title: 'Down for maintenance',
371
+ url,
372
+ page: { url },
373
+ ...(until === undefined
374
+ ? {}
375
+ : { until: until.toISOString(), untilText: until.toUTCString() }),
376
+ });
377
+ },
359
378
  render,
360
379
  };
361
380
  }
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA2C5C,OAAO,KAAK,EAAkC,UAAU,EAAc,MAAM,YAAY,CAAC;AAqCzF,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAyF3D;AAkpCD,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AA6BD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,aAAa,GACnB,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAO1D"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqB,MAAM,MAAM,CAAC;AAK7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA4C5C,OAAO,KAAK,EAAkC,UAAU,EAAc,MAAM,YAAY,CAAC;AAsCzF,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CA+F3D;AA8sCD,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AA6BD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,aAAa,GACnB,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAO1D"}