@plumix/core 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/auth/authenticator.d.ts +8 -1
  2. package/dist/auth/authenticator.d.ts.map +1 -1
  3. package/dist/auth/authenticator.js +15 -0
  4. package/dist/auth/authenticator.js.map +1 -1
  5. package/dist/auth/bearer.js +2 -2
  6. package/dist/auth/bearer.js.map +1 -1
  7. package/dist/auth/bootstrap.d.ts.map +1 -1
  8. package/dist/auth/bootstrap.js +39 -22
  9. package/dist/auth/bootstrap.js.map +1 -1
  10. package/dist/cache/decision.d.ts +7 -3
  11. package/dist/cache/decision.d.ts.map +1 -1
  12. package/dist/cache/decision.js +8 -6
  13. package/dist/cache/decision.js.map +1 -1
  14. package/dist/cache/read-through.d.ts +3 -0
  15. package/dist/cache/read-through.d.ts.map +1 -1
  16. package/dist/cache/read-through.js +14 -7
  17. package/dist/cache/read-through.js.map +1 -1
  18. package/dist/cache/tags.d.ts.map +1 -1
  19. package/dist/cache/tags.js +9 -0
  20. package/dist/cache/tags.js.map +1 -1
  21. package/dist/config.d.ts +9 -0
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +1 -0
  24. package/dist/config.js.map +1 -1
  25. package/dist/context/app.d.ts +38 -6
  26. package/dist/context/app.d.ts.map +1 -1
  27. package/dist/context/app.js +41 -8
  28. package/dist/context/app.js.map +1 -1
  29. package/dist/context/collector.d.ts +9 -0
  30. package/dist/context/collector.d.ts.map +1 -0
  31. package/dist/context/collector.js +130 -0
  32. package/dist/context/collector.js.map +1 -0
  33. package/dist/context/index.d.ts +1 -0
  34. package/dist/context/index.d.ts.map +1 -1
  35. package/dist/context/index.js +1 -0
  36. package/dist/context/index.js.map +1 -1
  37. package/dist/context/stores.d.ts +2 -9
  38. package/dist/context/stores.d.ts.map +1 -1
  39. package/dist/context/stores.js.map +1 -1
  40. package/dist/context/telemetry.d.ts +148 -0
  41. package/dist/context/telemetry.d.ts.map +1 -0
  42. package/dist/context/telemetry.js +20 -0
  43. package/dist/context/telemetry.js.map +1 -0
  44. package/dist/context/traced-fetch.d.ts +14 -0
  45. package/dist/context/traced-fetch.d.ts.map +1 -0
  46. package/dist/context/traced-fetch.js +33 -0
  47. package/dist/context/traced-fetch.js.map +1 -0
  48. package/dist/db/errors.d.ts +8 -0
  49. package/dist/db/errors.d.ts.map +1 -1
  50. package/dist/db/errors.js +22 -0
  51. package/dist/db/errors.js.map +1 -1
  52. package/dist/db/index.d.ts +1 -1
  53. package/dist/db/index.d.ts.map +1 -1
  54. package/dist/db/index.js +1 -1
  55. package/dist/db/index.js.map +1 -1
  56. package/dist/db/libsql.d.ts.map +1 -1
  57. package/dist/db/libsql.js +6 -12
  58. package/dist/db/libsql.js.map +1 -1
  59. package/dist/db/query-kind.d.ts +8 -0
  60. package/dist/db/query-kind.d.ts.map +1 -0
  61. package/dist/db/query-kind.js +11 -0
  62. package/dist/db/query-kind.js.map +1 -0
  63. package/dist/db/schema/users.d.ts +57 -0
  64. package/dist/db/schema/users.d.ts.map +1 -1
  65. package/dist/db/schema/users.js +10 -2
  66. package/dist/db/schema/users.js.map +1 -1
  67. package/dist/db/trace-libsql.d.ts +15 -0
  68. package/dist/db/trace-libsql.d.ts.map +1 -0
  69. package/dist/db/trace-libsql.js +37 -0
  70. package/dist/db/trace-libsql.js.map +1 -0
  71. package/dist/db/trace.d.ts +21 -0
  72. package/dist/db/trace.d.ts.map +1 -0
  73. package/dist/db/trace.js +64 -0
  74. package/dist/db/trace.js.map +1 -0
  75. package/dist/debug-bar/consumer.d.ts +12 -0
  76. package/dist/debug-bar/consumer.d.ts.map +1 -0
  77. package/dist/debug-bar/consumer.js +13 -0
  78. package/dist/debug-bar/consumer.js.map +1 -0
  79. package/dist/debug-bar/format-param.d.ts +6 -4
  80. package/dist/debug-bar/format-param.d.ts.map +1 -1
  81. package/dist/debug-bar/format-param.js +6 -9
  82. package/dist/debug-bar/format-param.js.map +1 -1
  83. package/dist/debug-bar/highlight-sql.d.ts +0 -3
  84. package/dist/debug-bar/highlight-sql.d.ts.map +1 -1
  85. package/dist/debug-bar/highlight-sql.js +0 -6
  86. package/dist/debug-bar/highlight-sql.js.map +1 -1
  87. package/dist/debug-bar/panels/database.d.ts +6 -4
  88. package/dist/debug-bar/panels/database.d.ts.map +1 -1
  89. package/dist/debug-bar/panels/database.js +44 -8
  90. package/dist/debug-bar/panels/database.js.map +1 -1
  91. package/dist/debug-bar/panels/template.d.ts +1 -1
  92. package/dist/debug-bar/panels/template.d.ts.map +1 -1
  93. package/dist/debug-bar/panels/template.js +16 -2
  94. package/dist/debug-bar/panels/template.js.map +1 -1
  95. package/dist/debug-bar/panels/timeline.js +1 -1
  96. package/dist/debug-bar/panels/timeline.js.map +1 -1
  97. package/dist/debug-bar/styles.d.ts.map +1 -1
  98. package/dist/debug-bar/styles.js +5 -0
  99. package/dist/debug-bar/styles.js.map +1 -1
  100. package/dist/debug-bar/template-node-label.d.ts.map +1 -1
  101. package/dist/debug-bar/template-node-label.js +8 -0
  102. package/dist/debug-bar/template-node-label.js.map +1 -1
  103. package/dist/debug-bar/timeline-model.d.ts +3 -3
  104. package/dist/debug-bar/timeline-model.d.ts.map +1 -1
  105. package/dist/debug-bar/timeline-model.js +1 -1
  106. package/dist/debug-bar/timeline-model.js.map +1 -1
  107. package/dist/debug-bar/types.d.ts +1 -1
  108. package/dist/hooks/registry.d.ts.map +1 -1
  109. package/dist/hooks/registry.js +21 -3
  110. package/dist/hooks/registry.js.map +1 -1
  111. package/dist/index.d.ts +7 -5
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +5 -5
  114. package/dist/index.js.map +1 -1
  115. package/dist/mcp/server.d.ts.map +1 -1
  116. package/dist/mcp/server.js +9 -3
  117. package/dist/mcp/server.js.map +1 -1
  118. package/dist/plugin/manifest.d.ts +51 -0
  119. package/dist/plugin/manifest.d.ts.map +1 -1
  120. package/dist/plugin/manifest.js +8 -2
  121. package/dist/plugin/manifest.js.map +1 -1
  122. package/dist/plugin/provides-context.d.ts.map +1 -1
  123. package/dist/plugin/provides-context.js +5 -0
  124. package/dist/plugin/provides-context.js.map +1 -1
  125. package/dist/plugin/setup-context.d.ts +10 -1
  126. package/dist/plugin/setup-context.d.ts.map +1 -1
  127. package/dist/plugin/setup-context.js +12 -0
  128. package/dist/plugin/setup-context.js.map +1 -1
  129. package/dist/rest/build-handler.d.ts.map +1 -1
  130. package/dist/rest/build-handler.js +14 -1
  131. package/dist/rest/build-handler.js.map +1 -1
  132. package/dist/revisions/snapshot-envelope.d.ts +4 -2
  133. package/dist/revisions/snapshot-envelope.d.ts.map +1 -1
  134. package/dist/revisions/snapshot-envelope.js +6 -3
  135. package/dist/revisions/snapshot-envelope.js.map +1 -1
  136. package/dist/route/compile.d.ts +21 -0
  137. package/dist/route/compile.d.ts.map +1 -1
  138. package/dist/route/compile.js +63 -1
  139. package/dist/route/compile.js.map +1 -1
  140. package/dist/route/current.d.ts +5 -3
  141. package/dist/route/current.d.ts.map +1 -1
  142. package/dist/route/date-range.d.ts +12 -0
  143. package/dist/route/date-range.d.ts.map +1 -0
  144. package/dist/route/date-range.js +39 -0
  145. package/dist/route/date-range.js.map +1 -0
  146. package/dist/route/intent.d.ts +7 -3
  147. package/dist/route/intent.d.ts.map +1 -1
  148. package/dist/route/match.d.ts +1 -0
  149. package/dist/route/match.d.ts.map +1 -1
  150. package/dist/route/match.js +1 -1
  151. package/dist/route/match.js.map +1 -1
  152. package/dist/route/render/build-resolved-entries.d.ts.map +1 -1
  153. package/dist/route/render/build-resolved-entries.js +6 -1
  154. package/dist/route/render/build-resolved-entries.js.map +1 -1
  155. package/dist/route/render/render-template.d.ts.map +1 -1
  156. package/dist/route/render/render-template.js +23 -14
  157. package/dist/route/render/render-template.js.map +1 -1
  158. package/dist/route/render/resolved-entry.d.ts +36 -0
  159. package/dist/route/render/resolved-entry.d.ts.map +1 -1
  160. package/dist/route/render/template-builders.d.ts +66 -2
  161. package/dist/route/render/template-builders.d.ts.map +1 -1
  162. package/dist/route/render/template-builders.js +83 -4
  163. package/dist/route/render/template-builders.js.map +1 -1
  164. package/dist/route/render/template-hierarchy.d.ts +17 -1
  165. package/dist/route/render/template-hierarchy.d.ts.map +1 -1
  166. package/dist/route/render/template-hierarchy.js +23 -0
  167. package/dist/route/render/template-hierarchy.js.map +1 -1
  168. package/dist/route/resolve.d.ts +3 -1
  169. package/dist/route/resolve.d.ts.map +1 -1
  170. package/dist/route/resolve.js +152 -5
  171. package/dist/route/resolve.js.map +1 -1
  172. package/dist/rpc/authenticated.d.ts.map +1 -1
  173. package/dist/rpc/authenticated.js +2 -1
  174. package/dist/rpc/authenticated.js.map +1 -1
  175. package/dist/rpc/build-handler.d.ts.map +1 -1
  176. package/dist/rpc/build-handler.js +12 -0
  177. package/dist/rpc/build-handler.js.map +1 -1
  178. package/dist/rpc/procedures/auth/session.d.ts.map +1 -1
  179. package/dist/rpc/procedures/auth/session.js +2 -1
  180. package/dist/rpc/procedures/auth/session.js.map +1 -1
  181. package/dist/rpc/procedures/entry/create.d.ts +2 -2
  182. package/dist/rpc/procedures/entry/delete-permanent.d.ts +2 -2
  183. package/dist/rpc/procedures/entry/duplicate.d.ts +2 -2
  184. package/dist/rpc/procedures/entry/get.d.ts +2 -2
  185. package/dist/rpc/procedures/entry/helpers.d.ts +21 -0
  186. package/dist/rpc/procedures/entry/helpers.d.ts.map +1 -1
  187. package/dist/rpc/procedures/entry/helpers.js +44 -0
  188. package/dist/rpc/procedures/entry/helpers.js.map +1 -1
  189. package/dist/rpc/procedures/entry/index.d.ts +23 -22
  190. package/dist/rpc/procedures/entry/index.d.ts.map +1 -1
  191. package/dist/rpc/procedures/entry/list.d.ts +2 -2
  192. package/dist/rpc/procedures/entry/publish.d.ts +2 -2
  193. package/dist/rpc/procedures/entry/restore.d.ts +2 -2
  194. package/dist/rpc/procedures/entry/revisions.d.ts +8 -8
  195. package/dist/rpc/procedures/entry/schemas.d.ts +2 -0
  196. package/dist/rpc/procedures/entry/schemas.d.ts.map +1 -1
  197. package/dist/rpc/procedures/entry/schemas.js +7 -0
  198. package/dist/rpc/procedures/entry/schemas.js.map +1 -1
  199. package/dist/rpc/procedures/entry/trash.d.ts +2 -2
  200. package/dist/rpc/procedures/entry/update.d.ts +3 -2
  201. package/dist/rpc/procedures/entry/update.d.ts.map +1 -1
  202. package/dist/rpc/procedures/entry/update.js +10 -5
  203. package/dist/rpc/procedures/entry/update.js.map +1 -1
  204. package/dist/rpc/procedures/term/create.d.ts +2 -2
  205. package/dist/rpc/procedures/term/delete.d.ts +2 -2
  206. package/dist/rpc/procedures/term/get.d.ts +2 -2
  207. package/dist/rpc/procedures/term/index.d.ts +10 -10
  208. package/dist/rpc/procedures/term/list.d.ts +2 -2
  209. package/dist/rpc/procedures/term/update.d.ts +2 -2
  210. package/dist/rpc/procedures/user/delete.d.ts +2 -0
  211. package/dist/rpc/procedures/user/delete.d.ts.map +1 -1
  212. package/dist/rpc/procedures/user/disable.d.ts +2 -0
  213. package/dist/rpc/procedures/user/disable.d.ts.map +1 -1
  214. package/dist/rpc/procedures/user/enable.d.ts +2 -0
  215. package/dist/rpc/procedures/user/enable.d.ts.map +1 -1
  216. package/dist/rpc/procedures/user/get.d.ts +2 -0
  217. package/dist/rpc/procedures/user/get.d.ts.map +1 -1
  218. package/dist/rpc/procedures/user/index.d.ts +13 -0
  219. package/dist/rpc/procedures/user/index.d.ts.map +1 -1
  220. package/dist/rpc/procedures/user/invite.d.ts.map +1 -1
  221. package/dist/rpc/procedures/user/invite.js +28 -15
  222. package/dist/rpc/procedures/user/invite.js.map +1 -1
  223. package/dist/rpc/procedures/user/list.d.ts +2 -0
  224. package/dist/rpc/procedures/user/list.d.ts.map +1 -1
  225. package/dist/rpc/procedures/user/list.js +1 -0
  226. package/dist/rpc/procedures/user/list.js.map +1 -1
  227. package/dist/rpc/procedures/user/schemas.d.ts +1 -0
  228. package/dist/rpc/procedures/user/schemas.d.ts.map +1 -1
  229. package/dist/rpc/procedures/user/schemas.js +5 -0
  230. package/dist/rpc/procedures/user/schemas.js.map +1 -1
  231. package/dist/rpc/procedures/user/update.d.ts +3 -0
  232. package/dist/rpc/procedures/user/update.d.ts.map +1 -1
  233. package/dist/rpc/procedures/user/update.js +10 -1
  234. package/dist/rpc/procedures/user/update.js.map +1 -1
  235. package/dist/rpc/router.d.ts +46 -32
  236. package/dist/rpc/router.d.ts.map +1 -1
  237. package/dist/rpc/schemas.js +6 -6
  238. package/dist/rpc/schemas.js.map +1 -1
  239. package/dist/rpc/validation.d.ts +10 -0
  240. package/dist/rpc/validation.d.ts.map +1 -1
  241. package/dist/rpc/validation.js +10 -0
  242. package/dist/rpc/validation.js.map +1 -1
  243. package/dist/runtime/dispatcher.d.ts.map +1 -1
  244. package/dist/runtime/dispatcher.js +105 -14
  245. package/dist/runtime/dispatcher.js.map +1 -1
  246. package/dist/runtime/load-user-for-public-request.d.ts.map +1 -1
  247. package/dist/runtime/load-user-for-public-request.js +2 -2
  248. package/dist/runtime/load-user-for-public-request.js.map +1 -1
  249. package/dist/runtime/scheduled.d.ts +3 -1
  250. package/dist/runtime/scheduled.d.ts.map +1 -1
  251. package/dist/runtime/scheduled.js +16 -2
  252. package/dist/runtime/scheduled.js.map +1 -1
  253. package/dist/runtime/telemetry-delivery.d.ts +14 -0
  254. package/dist/runtime/telemetry-delivery.d.ts.map +1 -0
  255. package/dist/runtime/telemetry-delivery.js +39 -0
  256. package/dist/runtime/telemetry-delivery.js.map +1 -0
  257. package/dist/seo/feed.d.ts +19 -4
  258. package/dist/seo/feed.d.ts.map +1 -1
  259. package/dist/seo/feed.js +49 -12
  260. package/dist/seo/feed.js.map +1 -1
  261. package/dist/seo/head-defaults.d.ts.map +1 -1
  262. package/dist/seo/head-defaults.js +6 -3
  263. package/dist/seo/head-defaults.js.map +1 -1
  264. package/dist/template-registry.d.ts +31 -1
  265. package/dist/template-registry.d.ts.map +1 -1
  266. package/dist/test/default-theme.d.ts.map +1 -1
  267. package/dist/test/default-theme.js +3 -0
  268. package/dist/test/default-theme.js.map +1 -1
  269. package/dist/test/dispatcher.d.ts +13 -0
  270. package/dist/test/dispatcher.d.ts.map +1 -1
  271. package/dist/test/dispatcher.js +9 -3
  272. package/dist/test/dispatcher.js.map +1 -1
  273. package/dist/test/factories.d.ts +39 -21
  274. package/dist/test/factories.d.ts.map +1 -1
  275. package/dist/test/factories.js +1 -0
  276. package/dist/test/factories.js.map +1 -1
  277. package/dist/test/harness.d.ts.map +1 -1
  278. package/dist/test/harness.js +4 -12
  279. package/dist/test/harness.js.map +1 -1
  280. package/dist/theme.d.ts +15 -7
  281. package/dist/theme.d.ts.map +1 -1
  282. package/dist/theme.js +9 -0
  283. package/dist/theme.js.map +1 -1
  284. package/dist/users/slug.d.ts +12 -0
  285. package/dist/users/slug.d.ts.map +1 -0
  286. package/dist/users/slug.js +32 -0
  287. package/dist/users/slug.js.map +1 -0
  288. package/package.json +2 -2
  289. package/dist/context/debug.d.ts +0 -25
  290. package/dist/context/debug.d.ts.map +0 -1
  291. package/dist/context/debug.js +0 -13
  292. package/dist/context/debug.js.map +0 -1
  293. package/dist/debug-bar/collector.d.ts +0 -9
  294. package/dist/debug-bar/collector.d.ts.map +0 -1
  295. package/dist/debug-bar/collector.js +0 -80
  296. package/dist/debug-bar/collector.js.map +0 -1
  297. package/dist/debug-bar/db-query.d.ts +0 -21
  298. package/dist/debug-bar/db-query.d.ts.map +0 -1
  299. package/dist/debug-bar/db-query.js +0 -23
  300. package/dist/debug-bar/db-query.js.map +0 -1
  301. package/dist/debug-bar/trace-libsql.d.ts +0 -18
  302. package/dist/debug-bar/trace-libsql.d.ts.map +0 -1
  303. package/dist/debug-bar/trace-libsql.js +0 -42
  304. package/dist/debug-bar/trace-libsql.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import type { EntryProjection, EntryTypeName, MetaOf, TermProjection, TermTaxonomyName } from "../../template-registry.js";
1
+ import type { ArchiveDataOf, ArchiveTypeName, EntryProjection, EntryTypeName, MetaOf, TermMetaOf, TermProjection, TermTaxonomyName } from "../../template-registry.js";
2
2
  import type { TemplateData, TemplateEntry, TemplateRule, ThemeDescriptor } from "../../theme.js";
3
- import type { ArchiveData, EntryData, ErrorData, FrontPageData, SearchData, TaxonomyData } from "./resolved-entry.js";
3
+ import type { ArchiveData, AuthorArchiveData, DateArchiveData, EntryData, ErrorData, FrontPageData, SearchData, TaxonomyData } from "./resolved-entry.js";
4
4
  /** Universal catch-all — matches any resolved node. */
5
5
  export declare function fallback(template: TemplateEntry<TemplateData>): TemplateRule;
6
6
  /** A single entry (any type). */
@@ -9,6 +9,10 @@ export declare function entry(template: TemplateEntry<EntryData>): TemplateRule;
9
9
  export declare function archive(template: TemplateEntry<ArchiveData>): TemplateRule;
10
10
  /** A term archive (any taxonomy). */
11
11
  export declare function taxonomy(template: TemplateEntry<TaxonomyData>): TemplateRule;
12
+ /** An author archive (any author). */
13
+ export declare function author(template: TemplateEntry<AuthorArchiveData>): TemplateRule;
14
+ /** A date archive (any year/month/day). */
15
+ export declare function date(template: TemplateEntry<DateArchiveData>): TemplateRule;
12
16
  /** The static front page. */
13
17
  export declare function frontPage(template: TemplateEntry<FrontPageData>): TemplateRule;
14
18
  /** Search results. */
@@ -27,6 +31,18 @@ export declare function templateRules(templates: ThemeDescriptor["templates"]):
27
31
  * editor writes it, the resolver reads it. Part of the `__plumix_*` namespace.
28
32
  */
29
33
  export declare const NAMED_TEMPLATE_META_KEY = "__plumix_template";
34
+ /** An author-selectable `named` template, surfaced to the editor picker. */
35
+ export interface NamedTemplateChoice {
36
+ readonly id: string;
37
+ readonly label: string;
38
+ }
39
+ /**
40
+ * Extract the theme's `named` entry templates grouped by entry-type name, for
41
+ * the editor's template picker. Only content (entry) rules are collected —
42
+ * term/author/archive named templates aren't author-selectable per entry.
43
+ * Duplicate ids within a type keep the first declaration (resolution order).
44
+ */
45
+ export declare function collectNamedTemplates(templates: ThemeDescriptor["templates"]): Record<string, readonly NamedTemplateChoice[]>;
30
46
  interface EntrySelector<K extends EntryTypeName> {
31
47
  /** Bind the template for the selected entry. */
32
48
  template(t: TemplateEntry<EntryData<EntryProjection<K>>>): TemplateRule;
@@ -62,11 +78,59 @@ interface TermTaxonomyBuilder<K extends TermTaxonomyName> extends TaxonomySelect
62
78
  slug(slug: string): TaxonomySelector<K>;
63
79
  /** Narrow to one term by numeric id. */
64
80
  id(id: number): TaxonomySelector<K>;
81
+ /** Narrow by a term-meta value, typed against the taxonomy's meta projection. */
82
+ whereMeta<M extends keyof TermMetaOf<K>>(key: M, value: TermMetaOf<K>[M]): TaxonomySelector<K>;
83
+ /** Narrow by an arbitrary predicate over the resolved taxonomy data. */
84
+ where(predicate: (data: TaxonomyData<TermProjection<K>>) => boolean): TaxonomySelector<K>;
85
+ /** Register an author-selectable template, matched from stored term meta. */
86
+ named(id: string, label: string): TaxonomySelector<K>;
65
87
  }
66
88
  /**
67
89
  * Target a registered taxonomy. `name` autocompletes and rejects typos; the
68
90
  * template's `data.term` is typed from the taxonomy's term projection.
69
91
  */
70
92
  export declare function forTermTaxonomy<K extends TermTaxonomyName>(name: K): TermTaxonomyBuilder<K>;
93
+ interface AuthorSelector {
94
+ /** Bind the template for the selected author. */
95
+ template(t: TemplateEntry<AuthorArchiveData>): TemplateRule;
96
+ }
97
+ interface AuthorBuilder extends AuthorSelector {
98
+ /** Narrow to one author by slug. */
99
+ slug(slug: string): AuthorSelector;
100
+ /** Narrow to one author by numeric id. */
101
+ id(id: number): AuthorSelector;
102
+ }
103
+ /**
104
+ * Target author archives. There is a single author "kind" (no registry to
105
+ * autocomplete), so `forAuthor()` takes no name — chain `.slug(...)` / `.id(...)`
106
+ * to narrow to one author, mirroring `forEntryType` / `forTermTaxonomy`. The
107
+ * bare `.template()` matches every author archive (like the `author()` tier).
108
+ */
109
+ export declare function forAuthor(): AuthorBuilder;
110
+ interface DateSelector {
111
+ /** Bind the template for the selected period. */
112
+ template(t: TemplateEntry<DateArchiveData>): TemplateRule;
113
+ }
114
+ /**
115
+ * Target one date archive. Date components are hierarchical (a month has no
116
+ * meaning without a year), so `forDate` takes them positionally and matches the
117
+ * archive of that exact granularity: `forDate(2026)` → the year archive,
118
+ * `forDate(2026, 7)` → that month, `forDate(2026, 7, 21)` → that day. The
119
+ * generic `date()` tier styles every date archive.
120
+ */
121
+ export declare function forDate(year: number): DateSelector;
122
+ export declare function forDate(year: number, month: number): DateSelector;
123
+ export declare function forDate(year: number, month: number, day: number): DateSelector;
124
+ interface ArchiveTypeSelector<K extends ArchiveTypeName> {
125
+ /** Bind the template for the selected archive type. */
126
+ template(t: TemplateEntry<ArchiveDataOf<K>>): TemplateRule;
127
+ }
128
+ /**
129
+ * Target a plugin-registered archive type (`registerArchiveType`). `name`
130
+ * autocompletes against `ArchiveTypeRegistry` and types the template's `data`
131
+ * from the registered projection — the same shape as `forEntryType` /
132
+ * `forTermTaxonomy`, for archives that live in a plugin rather than core.
133
+ */
134
+ export declare function forArchiveType<K extends ArchiveTypeName>(name: K): ArchiveTypeSelector<K>;
71
135
  export {};
72
136
  //# sourceMappingURL=template-builders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-builders.d.ts","sourceRoot":"","sources":["../../../src/route/render/template-builders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-builders.d.ts","sourceRoot":"","sources":["../../../src/route/render/template-builders.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,14 @@ export function archive(template) {
22
22
  export function taxonomy(template) {
23
23
  return rule("taxonomy", template);
24
24
  }
25
+ /** An author archive (any author). */
26
+ export function author(template) {
27
+ return rule("author", template);
28
+ }
29
+ /** A date archive (any year/month/day). */
30
+ export function date(template) {
31
+ return rule("date", template);
32
+ }
25
33
  /** The static front page. */
26
34
  export function frontPage(template) {
27
35
  return rule("frontPage", template);
@@ -64,10 +72,34 @@ function matchRule(match, template) {
64
72
  * editor writes it, the resolver reads it. Part of the `__plumix_*` namespace.
65
73
  */
66
74
  export const NAMED_TEMPLATE_META_KEY = "__plumix_template";
75
+ /**
76
+ * Extract the theme's `named` entry templates grouped by entry-type name, for
77
+ * the editor's template picker. Only content (entry) rules are collected —
78
+ * term/author/archive named templates aren't author-selectable per entry.
79
+ * Duplicate ids within a type keep the first declaration (resolution order).
80
+ */
81
+ export function collectNamedTemplates(templates) {
82
+ const out = {};
83
+ for (const rule of templateRules(templates)) {
84
+ const match = rule.match;
85
+ if (!match?.named || match.nodeKind !== "content" || !match.type)
86
+ continue;
87
+ const named = match.named;
88
+ const list = (out[match.type] ??= []);
89
+ if (list.some((c) => c.id === named.id))
90
+ continue;
91
+ list.push({ id: named.id, label: named.label });
92
+ }
93
+ return out;
94
+ }
67
95
  /** A predicate matching when a content entry's meta value equals `value`. */
68
96
  function metaEquals(key, value) {
69
97
  return (data) => "entry" in data && data.entry.meta[key] === value;
70
98
  }
99
+ /** A predicate matching when a resolved term's meta value equals `value`. */
100
+ function termMetaEquals(key, value) {
101
+ return (data) => "term" in data && data.term.meta[key] === value;
102
+ }
71
103
  /**
72
104
  * Target a registered entry type. `name` autocompletes and rejects typos
73
105
  * (`keyof EntryTypeRegistry`); the template's `data.entry` is typed from the
@@ -100,14 +132,61 @@ export function forEntryType(name) {
100
132
  * template's `data.term` is typed from the taxonomy's term projection.
101
133
  */
102
134
  export function forTermTaxonomy(name) {
135
+ // Each selector adds its narrowing to the shared term-node prefix.
136
+ const term = (extra) => ({
137
+ template: (t) => matchRule({ nodeKind: "term", type: name, ...extra }, t),
138
+ });
103
139
  return {
104
140
  template: (t) => matchRule({ nodeKind: "term", type: name }, t),
105
- slug: (slug) => ({
106
- template: (t) => matchRule({ nodeKind: "term", type: name, slug }, t),
141
+ slug: (slug) => term({ slug }),
142
+ id: (id) => term({ id }),
143
+ whereMeta: (key, value) => term({ predicate: termMetaEquals(String(key), value) }),
144
+ where: (predicate) => term({
145
+ predicate: predicate,
107
146
  }),
108
- id: (id) => ({
109
- template: (t) => matchRule({ nodeKind: "term", type: name, id }, t),
147
+ named: (id, label) => term({
148
+ named: { id, label },
149
+ predicate: termMetaEquals(NAMED_TEMPLATE_META_KEY, id),
110
150
  }),
111
151
  };
112
152
  }
153
+ /**
154
+ * Target author archives. There is a single author "kind" (no registry to
155
+ * autocomplete), so `forAuthor()` takes no name — chain `.slug(...)` / `.id(...)`
156
+ * to narrow to one author, mirroring `forEntryType` / `forTermTaxonomy`. The
157
+ * bare `.template()` matches every author archive (like the `author()` tier).
158
+ */
159
+ export function forAuthor() {
160
+ // Each selector adds its narrowing to the shared author-node prefix.
161
+ const authorNode = (extra) => ({
162
+ template: (t) => matchRule({ nodeKind: "author", type: "author", ...extra }, t),
163
+ });
164
+ return {
165
+ template: (t) => matchRule({ nodeKind: "author", type: "author" }, t),
166
+ slug: (slug) => authorNode({ slug }),
167
+ id: (id) => authorNode({ id }),
168
+ };
169
+ }
170
+ export function forDate(year, month, day) {
171
+ return {
172
+ template: (t) => matchRule({
173
+ nodeKind: "date",
174
+ type: "date",
175
+ year,
176
+ ...(month !== undefined ? { month } : {}),
177
+ ...(day !== undefined ? { day } : {}),
178
+ }, t),
179
+ };
180
+ }
181
+ /**
182
+ * Target a plugin-registered archive type (`registerArchiveType`). `name`
183
+ * autocompletes against `ArchiveTypeRegistry` and types the template's `data`
184
+ * from the registered projection — the same shape as `forEntryType` /
185
+ * `forTermTaxonomy`, for archives that live in a plugin rather than core.
186
+ */
187
+ export function forArchiveType(name) {
188
+ return {
189
+ template: (t) => matchRule({ nodeKind: "custom", type: name }, t),
190
+ };
191
+ }
113
192
  //# sourceMappingURL=template-builders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-builders.js","sourceRoot":"","sources":["../../../src/route/render/template-builders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-builders.js","sourceRoot":"","sources":["../../../src/route/render/template-builders.ts"],"names":[],"mappings":"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"}
@@ -8,13 +8,29 @@
8
8
  * type + slug/id).
9
9
  */
10
10
  import type { TemplateData, TemplateRule } from "../../theme.js";
11
- export type ResolvedNode = ResolvedTermNode | ResolvedContentNode | ResolvedContentTypeArchive | ResolvedFrontPage | ResolvedSearch;
11
+ export type ResolvedNode = ResolvedTermNode | ResolvedContentNode | ResolvedContentTypeArchive | ResolvedAuthorNode | ResolvedDateNode | ResolvedCustomNode | ResolvedFrontPage | ResolvedSearch;
12
12
  interface ResolvedTermNode {
13
13
  readonly kind: "term";
14
14
  readonly taxonomy: string;
15
15
  readonly slug: string;
16
16
  readonly databaseId: number;
17
17
  }
18
+ interface ResolvedAuthorNode {
19
+ readonly kind: "author";
20
+ readonly slug: string;
21
+ readonly databaseId: number;
22
+ }
23
+ interface ResolvedDateNode {
24
+ readonly kind: "date";
25
+ readonly year: number;
26
+ readonly month: number | null;
27
+ readonly day: number | null;
28
+ }
29
+ interface ResolvedCustomNode {
30
+ readonly kind: "custom";
31
+ /** The registered archive-type name (`registerArchiveType`). */
32
+ readonly name: string;
33
+ }
18
34
  interface ResolvedContentNode {
19
35
  readonly kind: "content";
20
36
  readonly entryType: string;
@@ -1 +1 @@
1
- {"version":3,"file":"template-hierarchy.d.ts","sourceRoot":"","sources":["../../../src/route/render/template-hierarchy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAGV,YAAY,EACZ,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,mBAAmB,GACnB,0BAA0B,GAC1B,iBAAiB,GACjB,cAAc,CAAC;AAEnB,UAAU,gBAAgB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,0BAA0B;IAClC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAsDD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,IAAI,EAAE,YAAY,EAClB,IAAI,CAAC,EAAE,YAAY,GAClB,YAAY,GAAG,SAAS,CAW1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,IAAI,EAAE,UAAU,GAAG,aAAa,GAC/B,YAAY,GAAG,SAAS,CAE1B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CASpD;AAED,iDAAiD;AACjD,KAAK,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,IAAI,EAAE,YAAY,EAClB,IAAI,CAAC,EAAE,YAAY,GAClB,eAAe,CAoCjB"}
1
+ {"version":3,"file":"template-hierarchy.d.ts","sourceRoot":"","sources":["../../../src/route/render/template-hierarchy.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,11 @@ const GENERIC_TIER_FOR_NODE = {
14
14
  content: "entry",
15
15
  "content-type-archive": "archive",
16
16
  term: "taxonomy",
17
+ author: "author",
18
+ date: "date",
19
+ // Plugin archives have no dedicated generic tier — they template via a
20
+ // `forArchiveType(name)` targeted rule, else the universal `fallback`.
21
+ custom: "fallback",
17
22
  "front-page": "frontPage",
18
23
  search: "search",
19
24
  };
@@ -35,6 +40,24 @@ function matchesIdentity(match, node) {
35
40
  return (match.type === node.taxonomy &&
36
41
  (match.slug === undefined || match.slug === node.slug) &&
37
42
  (match.id === undefined || match.id === node.databaseId));
43
+ case "author":
44
+ // Author matchers carry a fixed `type` of "author"; identity narrows by
45
+ // slug/id like a term.
46
+ return (match.type === "author" &&
47
+ (match.slug === undefined || match.slug === node.slug) &&
48
+ (match.id === undefined || match.id === node.databaseId));
49
+ case "date":
50
+ // Date matchers carry a fixed `type` of "date" and match one exact
51
+ // granularity: an unset component (`forDate(2026)` has no month/day)
52
+ // requires the node's component to be null, so a year matcher matches the
53
+ // year archive only, not that year's month/day archives.
54
+ return (match.type === "date" &&
55
+ match.year === node.year &&
56
+ (match.month ?? null) === node.month &&
57
+ (match.day ?? null) === node.day);
58
+ case "custom":
59
+ // A `forArchiveType(name)` matcher carries the archive-type name as `type`.
60
+ return match.type === node.name;
38
61
  default:
39
62
  return false;
40
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"template-hierarchy.js","sourceRoot":"","sources":["../../../src/route/render/template-hierarchy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-hierarchy.js","sourceRoot":"","sources":["../../../src/route/render/template-hierarchy.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,14 @@ import type { RegisteredTemplateDep } from "../template-deps.js";
3
3
  import type { DocumentManifest, ThemeDescriptor } from "../theme.js";
4
4
  import type { RouteMatch } from "./match.js";
5
5
  import type { AssetManifest } from "./render/asset-manifest.js";
6
- import type { ArchiveData, EntryData, FrontPageData, SearchData, TaxonomyData } from "./render/resolved-entry.js";
6
+ import type { ArchiveData, AuthorArchiveData, DateArchiveData, EntryData, FrontPageData, SearchData, TaxonomyData } from "./render/resolved-entry.js";
7
7
  declare module "../hooks/types.js" {
8
8
  interface FilterRegistry {
9
9
  "resolve:single:data": (data: EntryData) => EntryData | Promise<EntryData>;
10
10
  "resolve:archive:data": (data: ArchiveData) => ArchiveData | Promise<ArchiveData>;
11
11
  "resolve:term:data": (data: TaxonomyData) => TaxonomyData | Promise<TaxonomyData>;
12
+ "resolve:author:data": (data: AuthorArchiveData) => AuthorArchiveData | Promise<AuthorArchiveData>;
13
+ "resolve:date:data": (data: DateArchiveData) => DateArchiveData | Promise<DateArchiveData>;
12
14
  "resolve:front-page:data": (data: FrontPageData) => FrontPageData | Promise<FrontPageData>;
13
15
  "resolve:search:data": (data: SearchData) => SearchData | Promise<SearchData>;
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/route/resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,4BAA4B,CAAC;AAoBpC,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAU,cAAc;QACtB,qBAAqB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,sBAAsB,EAAE,CACtB,IAAI,EAAE,WAAW,KACd,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,mBAAmB,EAAE,CACnB,IAAI,EAAE,YAAY,KACf,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,yBAAyB,EAAE,CACzB,IAAI,EAAE,aAAa,KAChB,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC5C,qBAAqB,EAAE,CACrB,IAAI,EAAE,UAAU,KACb,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;KACvC;CACF;AAaD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACxD,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAmDnB"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/route/resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,4BAA4B,CAAC;AAgCpC,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAU,cAAc;QACtB,qBAAqB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,sBAAsB,EAAE,CACtB,IAAI,EAAE,WAAW,KACd,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,mBAAmB,EAAE,CACnB,IAAI,EAAE,YAAY,KACf,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,qBAAqB,EAAE,CACrB,IAAI,EAAE,iBAAiB,KACpB,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,mBAAmB,EAAE,CACnB,IAAI,EAAE,eAAe,KAClB,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QAChD,yBAAyB,EAAE,CACzB,IAAI,EAAE,aAAa,KAChB,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC5C,qBAAqB,EAAE,CACrB,IAAI,EAAE,UAAU,KACb,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;KACvC;CACF;AAyBD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACxD,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,QAAQ,CAAC,CA+EnB"}
@@ -2,15 +2,17 @@ import { count } from "drizzle-orm";
2
2
  import { expandShortcodes } from "@plumix/blocks";
3
3
  import { verifyPreviewGrant } from "../auth/preview-token.js";
4
4
  import { withBasePath } from "../base-path.js";
5
- import { and, desc, eq, inArray, isNotNull, sql } from "../db/index.js";
5
+ import { and, desc, eq, gte, inArray, isNotNull, lt, sql, } from "../db/index.js";
6
6
  import { entries } from "../db/schema/entries.js";
7
7
  import { entryTerm } from "../db/schema/entry_term.js";
8
8
  import { terms } from "../db/schema/terms.js";
9
+ import { users } from "../db/schema/users.js";
9
10
  import { labelSourceText } from "../i18n/label.js";
10
11
  import { getAutosave } from "../revisions/repository.js";
11
12
  import { stripReservedMeta } from "../revisions/snapshot-envelope.js";
12
13
  import { entryCapability } from "../rpc/procedures/entry/lifecycle.js";
13
14
  import { notFound, permanentRedirect } from "../runtime/http.js";
15
+ import { dateRange } from "./date-range.js";
14
16
  import { resolveEditMode } from "./edit-mode.js";
15
17
  import { paginate } from "./paginate.js";
16
18
  import { findEntryByPath, findTermByPath } from "./path-chain.js";
@@ -18,7 +20,17 @@ import { buildTermArchiveUrl } from "./permalink.js";
18
20
  import { previewTokenGrantsEntry, readPreviewToken } from "./preview.js";
19
21
  import { buildResolvedEntries } from "./render/build-resolved-entries.js";
20
22
  import { renderThroughTheme } from "./render/render-template.js";
23
+ import { NAMED_TEMPLATE_META_KEY } from "./render/template-builders.js";
21
24
  const DEFAULT_ARCHIVE_PER_PAGE = 20;
25
+ /**
26
+ * The public, non-hierarchical entry types — a site's posts, not its standalone
27
+ * pages. The front page, author archives, and date archives all list this set.
28
+ */
29
+ function publicListingTypes(ctx) {
30
+ return Array.from(ctx.plugins.entryTypes.entries())
31
+ .filter(([, spec]) => spec.isPublic !== false && spec.isHierarchical !== true)
32
+ .map(([key]) => key);
33
+ }
22
34
  // `renderThroughTheme` returns `null` when the theme has no rule for the node
23
35
  // and no `fallback` — a 404, per the router-style resolution model.
24
36
  function htmlResponseOrNotFound(html, reason) {
@@ -38,6 +50,12 @@ export async function resolvePublicRoute(ctx, match, theme, document, templateDe
38
50
  return resolveTaxonomy(ctx, match.intent, match.params, theme, document, templateDeps, assetManifest);
39
51
  case "front-page":
40
52
  return resolveFrontPage(ctx, match.params, theme, document, templateDeps, assetManifest);
53
+ case "author":
54
+ return resolveAuthor(ctx, match.params, theme, document, templateDeps, assetManifest);
55
+ case "date":
56
+ return resolveDate(ctx, match.params, theme, document, templateDeps, assetManifest);
57
+ case "custom":
58
+ return resolveCustom(ctx, match.intent, match.params, theme, document, templateDeps, assetManifest);
41
59
  case "search":
42
60
  return resolveSearch(ctx, match.params, theme, document, templateDeps, assetManifest);
43
61
  }
@@ -47,9 +65,7 @@ async function resolveFrontPage(ctx, params, theme, document, templateDeps, asse
47
65
  // The latest-posts front feed excludes hierarchical types (pages) — they
48
66
  // are standalone content, not blog entries. (A configurable front-page /
49
67
  // posts-page model is the larger follow-up.)
50
- const publicTypes = Array.from(ctx.plugins.entryTypes.entries())
51
- .filter(([, spec]) => spec.isPublic !== false && spec.isHierarchical !== true)
52
- .map(([key]) => key);
68
+ const publicTypes = publicListingTypes(ctx);
53
69
  const where = publicTypes.length === 0
54
70
  ? null
55
71
  : and(eq(entries.status, "published"), isNotNull(entries.publishedAt), inArray(entries.type, publicTypes));
@@ -194,6 +210,135 @@ async function resolveTaxonomy(ctx, intent, params, theme, document, templateDep
194
210
  });
195
211
  return htmlResponseOrNotFound(html, "public-taxonomy-no-template");
196
212
  }
213
+ async function resolveAuthor(ctx, params, theme, document, templateDeps, assetManifest) {
214
+ const slug = params.slug;
215
+ if (typeof slug !== "string" || slug === "") {
216
+ return notFound("public-author-not-found");
217
+ }
218
+ const author = await ctx.db.query.users.findFirst({
219
+ where: eq(users.slug, slug),
220
+ });
221
+ if (!author)
222
+ return notFound("public-author-not-found");
223
+ ctx.resolvedEntity = { kind: "author", id: author.id };
224
+ const page = parsePageParam(params.page);
225
+ // Author archives list the same public, non-hierarchical type set as the
226
+ // front page — a person's posts, not their standalone pages.
227
+ const publicTypes = publicListingTypes(ctx);
228
+ const where = publicTypes.length === 0
229
+ ? null
230
+ : and(eq(entries.authorId, author.id), eq(entries.status, "published"), isNotNull(entries.publishedAt), inArray(entries.type, publicTypes));
231
+ const result = await paginatedEntries(ctx, where, page, DEFAULT_ARCHIVE_PER_PAGE);
232
+ if (result.outOfRange)
233
+ return notFound("public-author-page-out-of-range");
234
+ const initial = {
235
+ kind: "author",
236
+ // Explicit projection — never spread the full user row (it carries email
237
+ // and auth columns) into the public template payload.
238
+ author: {
239
+ id: author.id,
240
+ slug: author.slug,
241
+ name: author.name,
242
+ avatarUrl: author.avatarUrl,
243
+ },
244
+ entries: await buildResolvedEntries(ctx, result.rows),
245
+ pagination: {
246
+ page,
247
+ perPage: DEFAULT_ARCHIVE_PER_PAGE,
248
+ total: result.total,
249
+ pageCount: result.pageCount,
250
+ },
251
+ };
252
+ const data = await ctx.hooks.applyFilter("resolve:author:data", initial);
253
+ const html = await renderThroughTheme({
254
+ ctx,
255
+ theme,
256
+ document,
257
+ templateDeps,
258
+ assetManifest,
259
+ node: { kind: "author", slug: author.slug, databaseId: author.id },
260
+ data,
261
+ title: data.author.name ?? data.author.slug,
262
+ });
263
+ return htmlResponseOrNotFound(html, "public-author-no-template");
264
+ }
265
+ function pad2(value) {
266
+ return String(value).padStart(2, "0");
267
+ }
268
+ function dateTitle(year, month, day) {
269
+ if (month === null)
270
+ return String(year);
271
+ if (day === null)
272
+ return `${String(year)}-${pad2(month)}`;
273
+ return `${String(year)}-${pad2(month)}-${pad2(day)}`;
274
+ }
275
+ async function resolveDate(ctx, params, theme, document, templateDeps, assetManifest) {
276
+ const year = Number(params.year);
277
+ const month = params.month === undefined ? null : Number(params.month);
278
+ const day = params.day === undefined ? null : Number(params.day);
279
+ const range = dateRange(year, month, day);
280
+ if (range === null)
281
+ return notFound("public-date-invalid");
282
+ const page = parsePageParam(params.page);
283
+ // Date archives list the same public, non-hierarchical type set as the front
284
+ // page, filtered to a published-at window.
285
+ const publicTypes = publicListingTypes(ctx);
286
+ const where = publicTypes.length === 0
287
+ ? null
288
+ : and(eq(entries.status, "published"), isNotNull(entries.publishedAt), gte(entries.publishedAt, range.start), lt(entries.publishedAt, range.end), inArray(entries.type, publicTypes));
289
+ const result = await paginatedEntries(ctx, where, page, DEFAULT_ARCHIVE_PER_PAGE);
290
+ if (result.outOfRange)
291
+ return notFound("public-date-page-out-of-range");
292
+ const initial = {
293
+ kind: "date",
294
+ year,
295
+ month,
296
+ day,
297
+ entries: await buildResolvedEntries(ctx, result.rows),
298
+ pagination: {
299
+ page,
300
+ perPage: DEFAULT_ARCHIVE_PER_PAGE,
301
+ total: result.total,
302
+ pageCount: result.pageCount,
303
+ },
304
+ };
305
+ const data = await ctx.hooks.applyFilter("resolve:date:data", initial);
306
+ const html = await renderThroughTheme({
307
+ ctx,
308
+ theme,
309
+ document,
310
+ templateDeps,
311
+ assetManifest,
312
+ node: { kind: "date", year, month, day },
313
+ data,
314
+ title: dateTitle(year, month, day),
315
+ });
316
+ return htmlResponseOrNotFound(html, "public-date-no-template");
317
+ }
318
+ // The open seam: a plugin-registered archive type (`registerArchiveType`). The
319
+ // resolver comes from the registry, produces the `{ data, title }` payload (or
320
+ // `null` → 404), and templates via a `forArchiveType(name)` rule or `fallback`.
321
+ async function resolveCustom(ctx, intent, params, theme, document, templateDeps, assetManifest) {
322
+ const archive = ctx.plugins.archiveTypes.get(intent.name);
323
+ // A compiled route always names a registered archive; the guard is a
324
+ // defensive 404 rather than a throw if the two ever drift.
325
+ if (!archive)
326
+ return notFound("public-custom-archive-not-registered");
327
+ const result = await archive.resolve(ctx, params);
328
+ if (result === null)
329
+ return notFound("public-custom-archive-not-found");
330
+ const html = await renderThroughTheme({
331
+ ctx,
332
+ theme,
333
+ document,
334
+ templateDeps,
335
+ assetManifest,
336
+ node: { kind: "custom", name: intent.name },
337
+ data: result.data,
338
+ title: result.title,
339
+ });
340
+ return htmlResponseOrNotFound(html, "public-custom-archive-no-template");
341
+ }
197
342
  async function resolveSingle(ctx, intent, params, theme, document, templateDeps, assetManifest) {
198
343
  const baseRow = await findEntryForSingle(ctx, intent.entryType, params);
199
344
  if (!baseRow)
@@ -324,7 +469,9 @@ async function overlayPreviewAutosave(ctx, entry) {
324
469
  title: autosave.title,
325
470
  content: autosave.content,
326
471
  excerpt: autosave.excerpt,
327
- meta: stripReservedMeta(autosave.meta),
472
+ // Keep the reserved template key so an unsaved `named`-template pick still
473
+ // drives resolution — otherwise preview would fall back to the default.
474
+ meta: stripReservedMeta(autosave.meta, [NAMED_TEMPLATE_META_KEY]),
328
475
  };
329
476
  }
330
477
  async function findEntryForSingle(ctx, entryType, params) {