@contentrain/emitter-astro 0.16.1 → 0.18.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 CHANGED
@@ -185,6 +185,39 @@ The feed lists every post, as WordPress's does — a post the source kept out of
185
185
 
186
186
  **Archive feeds.** WordPress serves a feed for every archive page — `/category/news/feed/`, `/tag/x/feed/`, `/author/ada/feed/`. Every dynamic archive route with a query in the site's default language (not its paginated continuation) gets one per page it builds, at `<archive>/feed.xml` (`src/pages/<archive>/feed.xml.ts`): the 10 newest posts that page lists, each at its own address, titled with the page's title. Each archive page links its feed in its head, and `<archive>/feed/` gets a 301 to it in `astro.config` and the host's redirect file, as the main feed does. The feed redirects pass the checks the site's own rules do — none over a page the site builds or a case twin of one, and a source rule for the same address wins — and in a host file with a rule limit they come after the site's own rules, `/feed/` first, so an overflow drops a feed redirect, which the warning counts. The template head's own archive feed link names one term's feed on every page, so it is removed with the other feed links the site does not build (comments, Atom). `options.feed: false` turns these off with the main feed.
187
187
 
188
+ ## Unpublished entries
189
+
190
+ The content store keeps every entry the source had; only the published ones are
191
+ built. `EmitPost.status` is the entry's `EntryMeta.status` (unset reads as
192
+ `published`) and `publish_at` its `EntryMeta.publish_at` — a WordPress post
193
+ scheduled for later is imported as `published` with a `publish_at` ahead. An
194
+ entry is built when its status is `published` and its `publish_at`, if set, is
195
+ not after `options.now` (default: the time of the emit). `EmitPost.visibility`
196
+ (the store's `visibility` field) other than `public` — a password-protected or
197
+ private post — is never built, whatever its status. Every other entry — a
198
+ draft, one in review, rejected or archived, one scheduled for later, one whose
199
+ `publish_at` is not a date, one that is not public — is held back before anything reads the content: no
200
+ page, sitemap line, feed item, llms.txt link, list card or hreflang alternate.
201
+ `EmitResult.withheld.entries` names each with its reason, and a warning counts
202
+ them.
203
+
204
+ An entry with no `status` is published, as before statuses existed — which
205
+ fails open if a producer forgets to pass one. `options.requireStatus: true`
206
+ turns that around: every entry (in posts, collections and list items) must
207
+ carry a status, and one without it is held back (`status_missing`) and
208
+ reported. A producer that reads statuses from the content store sets it.
209
+
210
+ The data files hold only what is live at the emit, so a scheduled entry is
211
+ built by the first emit after its time; rebuilding the same files does not
212
+ publish it.
213
+
214
+ A link on a published page (its body or `excerpt_html`, on its own page or as a
215
+ list card) to a held-back entry would 404: the anchor is replaced by its text
216
+ and listed in `EmitResult.withheld.links`. A link to an address a published
217
+ entry still builds is left alone. A redirect (`redirects` or `hostRedirects`)
218
+ whose target is a held-back entry is not written; it is returned in
219
+ `EmitResult.redirects.manual` with the reason.
220
+
188
221
  ## Binding the runtime later
189
222
 
190
223
  `src/data/runtime.json` is the only place the binding lives; the components
@@ -253,6 +286,8 @@ Each path is written percent-encoded, with and without its trailing slash.
253
286
  `*` or a `:` segment is a pattern to a host file; it is left to the meta-refresh
254
287
  fallback, with a warning. A rule that differs from a built page only in letter case is returned too: Netlify matches rules case-insensitively, and macOS and Windows file systems cannot hold `/About/` beside `/about/`, so it would be served over the page. Cloudflare Pages and Vercel files stop at 1,000 rules (2,000 entries with both slash forms, their static limit); the rest are named in `EmitResult.redirects.host_over_limit`, with a warning, and keep only the meta-refresh fallback there. Netlify's file has no limit.
255
288
 
289
+ **Host-only rules.** `input.hostRedirects` takes rules served only by the host's redirect file, never by `astro.config`, so the build writes no meta-refresh page for them. It is for bulk rules a site does not need as pages: one per WordPress attachment page runs to tens of thousands, and each would become an HTML file in `dist`. They pass the checks `redirects` do (a built page, a case twin, a query string, a pattern, a duplicate) — except the file-name one, since a host file matches `/old.php` itself; but never a file the build writes (robots, `llms.txt`, a feed, `sitemap-index.xml`/`sitemap-N.xml`, `404.html`, `/_astro/`, `/styles/`; in either slash form and any letter case), which a host file would shadow — and an address the site's own rules or the feed redirects already hold is theirs. In a Cloudflare or Vercel file they come after both, so at the rule limit they are the ones left out. With no fallback page behind them, a host-only rule the host file cannot hold is not served at all: a pattern, or one past a named host's limit (`options.redirectHost` `cloudflare` or `vercel`), comes back in `EmitResult.redirects.manual` with its reason, with one `hostRedirects:` warning. With no host named, the Netlify file holds every rule, so one past `vercel.json`'s limit stays written and is named in `host_over_limit` with its own warning — not served on Vercel; name the host to have it reported as manual. On a host with no redirect file (a plain static server) host-only rules are not served.
290
+
256
291
 
257
292
  ## Route collisions
258
293
 
@@ -280,3 +315,7 @@ collection: Astro serves one file per path, so one of the two routes does not
280
315
  exist in the built site, and which one survived is an accident of ordering. Fix
281
316
  it by giving one route a distinct pattern, or by expanding the narrower one into
282
317
  literal routes.
318
+
319
+ ## Checking the emitted types
320
+
321
+ The unit suite asserts what the emitter writes; `pnpm --filter @contentrain/emitter-astro test:astro` (after `pnpm build`) checks it the way a migrated site's build does. It emits a site with every kind of page and endpoint — posts, pages, nested category and tag archives with their feeds, an author profile, a list, a static page, the feed, llms.txt, redirects, and a draft, an entry in review, a post scheduled for later and password-protected and private posts beside published ones — once with trailing slashes and once without, installs it with npm from its own `package.json` the way a production host does (`NODE_ENV=production`, `CI` set, no terminal), and runs `astro check` and then the site's own `npm run build`. A pass is a result naming 0 errors and a completed build; Astro's "requires @astrojs/check" notice fails it even though Astro exits 0 there. The first site is then built with `astro build`, and the output is read: the published posts have pages, sitemap lines and feed items, the held-back ones have none (nor llms.txt links or list cards), no file holds the password-protected post's text, and the live page's links to held-back entries are text. CI and the release workflow run it on every change.
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { ComponentDef, EntrySourceRef, ModelDefinition, ProjectIR, RawRedirect, RawRedirect as RawRedirect$1, RawSeoEntry, RouteModel, RuntimeBinding, RuntimeBinding as RuntimeBinding$1, SeoProvider } from "@contentrain/types";
1
+ import { ComponentDef, ContentStatus, EntrySourceRef, ModelDefinition, ProjectIR, RawRedirect, RawRedirect as RawRedirect$1, RawSeoEntry, RouteModel, RuntimeBinding, RuntimeBinding as RuntimeBinding$1, SeoProvider } from "@contentrain/types";
2
2
 
3
3
  //#region src/types.d.ts
4
4
  /**
@@ -120,6 +120,49 @@ interface EmitPost {
120
120
  noindex?: boolean;
121
121
  /** The source page was `nofollow`: `<meta name="robots" content="nofollow">`. */
122
122
  nofollow?: boolean;
123
+ /**
124
+ * The entry's workflow status in the content store (`EntryMeta.status`).
125
+ * Only `published` is built; unset reads as published unless
126
+ * `EmitOptions.requireStatus` is set. Any other status
127
+ * keeps the entry out of the site — no page, sitemap line, feed item,
128
+ * llms.txt link or list card — and `EmitResult.withheld` names it.
129
+ */
130
+ status?: ContentStatus;
131
+ /**
132
+ * When a published entry goes live (`EntryMeta.publish_at`, ISO 8601) — a
133
+ * WordPress post scheduled for later. Until then it is held back like a
134
+ * draft; compared with `EmitOptions.now`. A value that is not a date holds
135
+ * the entry back too.
136
+ */
137
+ publish_at?: string;
138
+ /**
139
+ * Who may read the entry (the store's `visibility` field — WordPress
140
+ * `public`, `private`, or `password` for a password-protected post). Anything
141
+ * but `public` is never built, whatever `status` says: no page, sitemap
142
+ * line, feed item, list card, share card or link to it. Unset reads as public.
143
+ */
144
+ visibility?: 'public' | 'private' | 'password' | (string & {});
145
+ }
146
+ /** An entry the build leaves out because it is not published yet. */
147
+ interface WithheldEntry {
148
+ collection: string;
149
+ slug: string;
150
+ status?: ContentStatus;
151
+ publish_at?: string;
152
+ visibility?: string;
153
+ /**
154
+ * `visibility`: password-protected or private · `status`: not published ·
155
+ * `status_missing`: no status, with `EmitOptions.requireStatus` ·
156
+ * `scheduled`: publish_at is ahead · `publish_at_invalid`: publish_at is not a date.
157
+ */
158
+ reason: 'visibility' | 'status' | 'status_missing' | 'scheduled' | 'publish_at_invalid';
159
+ }
160
+ /** A link on a published page to a held-back entry, kept as its text. */
161
+ interface WithheldLink {
162
+ /** The page it was on (site-root path), or `<collection>/<slug>` when no route builds it. */
163
+ page: string;
164
+ /** The address it pointed at. */
165
+ href: string;
123
166
  }
124
167
  /**
125
168
  * One block of a list: a template, optional wrapper, and how many items it takes.
@@ -345,6 +388,20 @@ interface EmitOptions {
345
388
  * Cloudflare Pages site must name its host (no forced rules there).
346
389
  */
347
390
  redirectHost?: 'netlify' | 'cloudflare' | 'vercel';
391
+ /**
392
+ * The moment `EmitPost.publish_at` is compared with, ISO 8601. Default: the
393
+ * time of the emit. The data files hold only what is live then, so a
394
+ * scheduled entry is built by the first emit after its time.
395
+ */
396
+ now?: string;
397
+ /**
398
+ * Hold back every entry — in posts, collections and list items — that
399
+ * carries no `EmitPost.status`, and say so. Default false: an entry with
400
+ * no status is published, as before statuses existed. A producer that
401
+ * reads statuses from the content store sets it, so an entry it failed to
402
+ * give one fails closed instead of going out as published.
403
+ */
404
+ requireStatus?: boolean;
348
405
  }
349
406
  interface EmitInput {
350
407
  ir: ProjectIR;
@@ -364,6 +421,18 @@ interface EmitInput {
364
421
  * back in `EmitResult.redirects.manual` with the reason, to set up at the host.
365
422
  */
366
423
  redirects?: RawRedirect[];
424
+ /**
425
+ * Rules served only by the host's redirect file (`public/_redirects`,
426
+ * `vercel.json`), never by `astro.config` — so no meta-refresh page is built
427
+ * for them. For bulk rules the site does not need as pages: one per
428
+ * WordPress attachment page runs to tens of thousands, and a static build
429
+ * would write an HTML file for each. They pass the same checks as
430
+ * `redirects`, and the site's own rules and the feed redirects win an
431
+ * address they share. Without a fallback page, a rule the host file cannot
432
+ * hold — a pattern, or past Cloudflare's or Vercel's rule limit, where these
433
+ * go last — is returned in `EmitResult.redirects.manual`.
434
+ */
435
+ hostRedirects?: RawRedirect[];
367
436
  }
368
437
  /**
369
438
  * Pure result: every generated file as path → content. Writing to disk is a
@@ -373,16 +442,31 @@ interface EmitInput {
373
442
  interface EmitResult {
374
443
  files: Record<string, string>;
375
444
  warnings: string[];
376
- /** Present when `EmitInput.redirects` was given: what was written and what was not, with why. */
445
+ /** Present when `EmitInput.redirects` or `hostRedirects` was given. */
377
446
  redirects?: {
378
- written: RawRedirect[];
447
+ /** Rules written: `redirects` to astro.config and the host files, `hostRedirects` to the host files. */written: RawRedirect[]; /** Rules not written, with why — to set up by hand at the host. */
379
448
  manual: Array<{
380
449
  redirect: RawRedirect;
381
450
  reason: string;
382
451
  }>; /** The host redirect files written, e.g. `public/_redirects (netlify)`. Empty: meta-refresh only. */
383
- host_files: string[]; /** Rules (by `from`) left out of a Cloudflare / Vercel file at its rule limit: meta-refresh only there. */
452
+ host_files: string[];
453
+ /**
454
+ * Rules (by `from`) left out of a Cloudflare / Vercel file at its rule
455
+ * limit. A `redirects` rule keeps its meta-refresh page there. A
456
+ * `hostRedirects` rule is here only with no host named (the Netlify file
457
+ * holds it, `vercel.json` does not); past a named host's limit it is in `manual`.
458
+ */
384
459
  host_over_limit: string[];
385
460
  };
461
+ /**
462
+ * Present when entries were held back (`EmitPost.status`, `publish_at`):
463
+ * each one, and each link to one that a published page carried — kept as
464
+ * its text. Redirects to a held-back entry are in `redirects.manual`.
465
+ */
466
+ withheld?: {
467
+ entries: WithheldEntry[];
468
+ links: WithheldLink[];
469
+ };
386
470
  }
387
471
  //#endregion
388
472
  //#region src/css.d.ts
@@ -637,6 +721,28 @@ declare function balanceWarning(html: string): string | null;
637
721
  /** Site-root paths (directory format, `/a/b/`) of every noindex page, sorted. */
638
722
  declare function noindexPaths(routes: RouteModel[], content: EmitContent): string[];
639
723
  //#endregion
724
+ //#region src/published.d.ts
725
+ /**
726
+ * Why an entry is not built, or null when it is. `now` is epoch ms. With
727
+ * `requireStatus` an entry that carries no status is held back: the producer
728
+ * said it passes every entry's status, so a missing one is a gap, not a
729
+ * published entry.
730
+ */
731
+ declare function holdReason(post: Pick<EmitPost, 'status' | 'publish_at' | 'visibility'>, now: number, requireStatus?: boolean): WithheldEntry['reason'] | null;
732
+ interface PublishedContent {
733
+ content: EmitContent;
734
+ withheld: WithheldEntry[];
735
+ links: WithheldLink[];
736
+ /** The addresses held-back entries would have had and no published entry builds (`/a/b/`). */
737
+ gone: Set<string>;
738
+ }
739
+ /**
740
+ * The content with every unpublished entry removed — from its collection and
741
+ * from the list pages that carry it as an item — and links to them unwrapped.
742
+ * Content with nothing held back is returned as given.
743
+ */
744
+ declare function publishedContent(routes: RouteModel[], content: EmitContent, now: number, siteUrl?: string, requireStatus?: boolean): PublishedContent;
745
+ //#endregion
640
746
  //#region src/redirects.d.ts
641
747
  /** The statuses written to `astro.config`; any other is a manual rule. */
642
748
  declare const REDIRECT_STATUSES: readonly [301, 302, 307, 308];
@@ -665,9 +771,13 @@ interface RedirectPlan {
665
771
  declare function builtAddresses(routes: RouteModel[], content: EmitContent): Map<string, string>;
666
772
  /**
667
773
  * Split the rules into what `astro.config` serves and what the host has to.
668
- * `built` is `builtAddresses` of the emitted routes.
774
+ * `built` is `builtAddresses` of the emitted routes. `hostOnly`: the rules go
775
+ * to host files alone (`EmitInput.hostRedirects`), so the checks that hold
776
+ * only for a static redirect page (a `from` naming a file) are left out.
669
777
  */
670
- declare function planRedirects(redirects: RawRedirect$1[], built: Map<string, string>): RedirectPlan;
778
+ declare function planRedirects(redirects: RawRedirect$1[], built: Map<string, string>, options?: {
779
+ hostOnly?: boolean;
780
+ }): RedirectPlan;
671
781
  /** The `redirects` line for astro.config.mjs, or null when there is nothing to write. */
672
782
  declare function astroRedirectsConfig(config: RedirectPlan['config']): string | null;
673
783
  /** Hosts whose own redirect file the emitter can write. */
@@ -709,5 +819,5 @@ declare function emitAstroProject(input: EmitInput): EmitResult;
709
819
  /** Write an EmitResult to disk. Separate from emit so the core stays pure. */
710
820
  declare function writeEmit(result: EmitResult, dir: string): Promise<void>;
711
821
  //#endregion
712
- export { type Alternate, type AlternatesResult, type AuthorProfile, type BalanceReport, type Breadcrumb, EMBED_TS, type EmitContent, type EmitCssFile, type EmitInput, type EmitOptions, type EmitPost, type EmitResult, type EmitTermRef, type EntrySourceRef, FEED_ITEMS, FEED_PATH, type FeedLinkResult, type HostRedirectFiles, type ImageMeta, LLMS_LINKS, type LinkSource, type ManualRedirect, type MountRef, type QueryPage, REDIRECT_STATUSES, RUNTIME_IMPLEMENTED, type RawRedirect, type RedirectHost, type RedirectPlan, type RedirectStatus, type RuntimeBinding, SEO_COMPONENT, type SeoFields, type SeoFromRawOptions, type SocialOverride, type StripResult, type TwitterOverride, UI_STRINGS_DIR, UI_STRINGS_MODEL, UI_STRING_DEFAULTS, type UiStringKey, astroRedirectsConfig, balanceWarning, bodySeoLeaks, builtAddresses, checkBalance, componentMarkers, emitAstroProject, entryPath, hostRedirectFiles, isRuntimeImplemented, linkSources, noindexPaths, pascalCase, patternToPagePath, planRedirects, publisherIdOf, rewriteFeedLinks, seoFromRawEntry, stableJson, stripSeoTags, websiteIdOf, withAlternates, wrapLegacyCss, writeEmit };
822
+ export { type Alternate, type AlternatesResult, type AuthorProfile, type BalanceReport, type Breadcrumb, EMBED_TS, type EmitContent, type EmitCssFile, type EmitInput, type EmitOptions, type EmitPost, type EmitResult, type EmitTermRef, type EntrySourceRef, FEED_ITEMS, FEED_PATH, type FeedLinkResult, type HostRedirectFiles, type ImageMeta, LLMS_LINKS, type LinkSource, type ManualRedirect, type MountRef, type PublishedContent, type QueryPage, REDIRECT_STATUSES, RUNTIME_IMPLEMENTED, type RawRedirect, type RedirectHost, type RedirectPlan, type RedirectStatus, type RuntimeBinding, SEO_COMPONENT, type SeoFields, type SeoFromRawOptions, type SocialOverride, type StripResult, type TwitterOverride, UI_STRINGS_DIR, UI_STRINGS_MODEL, UI_STRING_DEFAULTS, type UiStringKey, type WithheldEntry, type WithheldLink, astroRedirectsConfig, balanceWarning, bodySeoLeaks, builtAddresses, checkBalance, componentMarkers, emitAstroProject, entryPath, holdReason, hostRedirectFiles, isRuntimeImplemented, linkSources, noindexPaths, pascalCase, patternToPagePath, planRedirects, publishedContent, publisherIdOf, rewriteFeedLinks, seoFromRawEntry, stableJson, stripSeoTags, websiteIdOf, withAlternates, wrapLegacyCss, writeEmit };
713
823
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/css.ts","../src/feed.ts","../src/util.ts","../src/layouts.ts","../src/components.ts","../src/seo.ts","../src/seo-entry.ts","../src/alternates.ts","../src/embed.ts","../src/ui-strings.ts","../src/balance.ts","../src/noindex.ts","../src/redirects.ts","../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/css.ts","../src/feed.ts","../src/util.ts","../src/layouts.ts","../src/components.ts","../src/seo.ts","../src/seo-entry.ts","../src/alternates.ts","../src/embed.ts","../src/ui-strings.ts","../src/balance.ts","../src/noindex.ts","../src/published.ts","../src/redirects.ts","../src/index.ts"],"mappings":"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"}