@stati/core 1.27.2 → 1.29.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 (136) hide show
  1. package/README.md +6 -1
  2. package/dist/config/errors.d.ts +10 -0
  3. package/dist/config/errors.d.ts.map +1 -0
  4. package/dist/config/errors.js +10 -0
  5. package/dist/config/loader.d.ts.map +1 -1
  6. package/dist/config/loader.js +15 -2
  7. package/dist/constants.d.ts +26 -0
  8. package/dist/constants.d.ts.map +1 -1
  9. package/dist/constants.js +23 -0
  10. package/dist/core/build.d.ts.map +1 -1
  11. package/dist/core/build.js +201 -41
  12. package/dist/core/collections.d.ts +139 -0
  13. package/dist/core/collections.d.ts.map +1 -0
  14. package/dist/core/collections.js +342 -0
  15. package/dist/core/content.d.ts.map +1 -1
  16. package/dist/core/content.js +2 -1
  17. package/dist/core/dev.d.ts.map +1 -1
  18. package/dist/core/dev.js +11 -62
  19. package/dist/core/expand.d.ts +86 -0
  20. package/dist/core/expand.d.ts.map +1 -0
  21. package/dist/core/expand.js +484 -0
  22. package/dist/core/isg/builder.d.ts +27 -2
  23. package/dist/core/isg/builder.d.ts.map +1 -1
  24. package/dist/core/isg/builder.js +83 -11
  25. package/dist/core/isg/deps.d.ts +9 -0
  26. package/dist/core/isg/deps.d.ts.map +1 -1
  27. package/dist/core/isg/deps.js +30 -1
  28. package/dist/core/isg/hash.d.ts +14 -2
  29. package/dist/core/isg/hash.d.ts.map +1 -1
  30. package/dist/core/isg/hash.js +30 -2
  31. package/dist/core/isg/index.d.ts +4 -2
  32. package/dist/core/isg/index.d.ts.map +1 -1
  33. package/dist/core/isg/index.js +4 -2
  34. package/dist/core/isg/manifest.js +14 -0
  35. package/dist/core/isg/prune.d.ts +32 -0
  36. package/dist/core/isg/prune.d.ts.map +1 -0
  37. package/dist/core/isg/prune.js +113 -0
  38. package/dist/core/markdown.d.ts +10 -1
  39. package/dist/core/markdown.d.ts.map +1 -1
  40. package/dist/core/markdown.js +13 -3
  41. package/dist/core/navigation.d.ts +4 -2
  42. package/dist/core/navigation.d.ts.map +1 -1
  43. package/dist/core/navigation.js +17 -2
  44. package/dist/core/templates.d.ts +15 -1
  45. package/dist/core/templates.d.ts.map +1 -1
  46. package/dist/core/templates.js +121 -126
  47. package/dist/core/utils/fs.utils.d.ts +29 -1
  48. package/dist/core/utils/fs.utils.d.ts.map +1 -1
  49. package/dist/core/utils/fs.utils.js +74 -1
  50. package/dist/core/utils/index.d.ts +3 -3
  51. package/dist/core/utils/index.d.ts.map +1 -1
  52. package/dist/core/utils/index.js +3 -3
  53. package/dist/core/utils/paths.utils.d.ts +15 -0
  54. package/dist/core/utils/paths.utils.d.ts.map +1 -1
  55. package/dist/core/utils/paths.utils.js +20 -0
  56. package/dist/core/utils/template-discovery.utils.d.ts +25 -1
  57. package/dist/core/utils/template-discovery.utils.d.ts.map +1 -1
  58. package/dist/core/utils/template-discovery.utils.js +61 -11
  59. package/dist/images/config.d.ts +52 -0
  60. package/dist/images/config.d.ts.map +1 -0
  61. package/dist/images/config.js +200 -0
  62. package/dist/images/index.d.ts +15 -0
  63. package/dist/images/index.d.ts.map +1 -0
  64. package/dist/images/index.js +11 -0
  65. package/dist/images/manifest.d.ts +36 -0
  66. package/dist/images/manifest.d.ts.map +1 -0
  67. package/dist/images/manifest.js +69 -0
  68. package/dist/images/markdown-rule.d.ts +26 -0
  69. package/dist/images/markdown-rule.d.ts.map +1 -0
  70. package/dist/images/markdown-rule.js +60 -0
  71. package/dist/images/markup.d.ts +39 -0
  72. package/dist/images/markup.d.ts.map +1 -0
  73. package/dist/images/markup.js +72 -0
  74. package/dist/images/og.d.ts +52 -0
  75. package/dist/images/og.d.ts.map +1 -0
  76. package/dist/images/og.js +165 -0
  77. package/dist/images/plan.d.ts +101 -0
  78. package/dist/images/plan.d.ts.map +1 -0
  79. package/dist/images/plan.js +128 -0
  80. package/dist/images/provider.d.ts +35 -0
  81. package/dist/images/provider.d.ts.map +1 -0
  82. package/dist/images/provider.js +70 -0
  83. package/dist/images/resolve.d.ts +45 -0
  84. package/dist/images/resolve.d.ts.map +1 -0
  85. package/dist/images/resolve.js +51 -0
  86. package/dist/images/runtime.d.ts +258 -0
  87. package/dist/images/runtime.d.ts.map +1 -0
  88. package/dist/images/runtime.js +659 -0
  89. package/dist/images/sources.d.ts +47 -0
  90. package/dist/images/sources.d.ts.map +1 -0
  91. package/dist/images/sources.js +97 -0
  92. package/dist/images/utils/image-probe.utils.d.ts +30 -0
  93. package/dist/images/utils/image-probe.utils.d.ts.map +1 -0
  94. package/dist/images/utils/image-probe.utils.js +307 -0
  95. package/dist/images/utils/index.d.ts +7 -0
  96. package/dist/images/utils/index.d.ts.map +1 -0
  97. package/dist/images/utils/index.js +5 -0
  98. package/dist/index.d.ts +2 -1
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/metrics/noop.d.ts.map +1 -1
  101. package/dist/metrics/noop.js +3 -0
  102. package/dist/metrics/recorder.d.ts.map +1 -1
  103. package/dist/metrics/recorder.js +3 -0
  104. package/dist/metrics/types.d.ts +8 -0
  105. package/dist/metrics/types.d.ts.map +1 -1
  106. package/dist/rss/generator.d.ts.map +1 -1
  107. package/dist/rss/generator.js +5 -2
  108. package/dist/search/generator.d.ts +9 -0
  109. package/dist/search/generator.d.ts.map +1 -1
  110. package/dist/search/generator.js +20 -0
  111. package/dist/search/index.d.ts +1 -1
  112. package/dist/search/index.d.ts.map +1 -1
  113. package/dist/search/index.js +1 -1
  114. package/dist/seo/auto-inject.d.ts +3 -0
  115. package/dist/seo/auto-inject.d.ts.map +1 -1
  116. package/dist/seo/auto-inject.js +1 -0
  117. package/dist/seo/generator.d.ts +24 -0
  118. package/dist/seo/generator.d.ts.map +1 -1
  119. package/dist/seo/generator.js +65 -1
  120. package/dist/seo/index.d.ts +1 -1
  121. package/dist/seo/index.d.ts.map +1 -1
  122. package/dist/seo/index.js +1 -1
  123. package/dist/types/config.d.ts +60 -0
  124. package/dist/types/config.d.ts.map +1 -1
  125. package/dist/types/content.d.ts +150 -3
  126. package/dist/types/content.d.ts.map +1 -1
  127. package/dist/types/images.d.ts +185 -0
  128. package/dist/types/images.d.ts.map +1 -0
  129. package/dist/types/images.js +8 -0
  130. package/dist/types/index.d.ts +3 -2
  131. package/dist/types/index.d.ts.map +1 -1
  132. package/dist/types/isg.d.ts +19 -0
  133. package/dist/types/isg.d.ts.map +1 -1
  134. package/dist/types/seo.d.ts +9 -0
  135. package/dist/types/seo.d.ts.map +1 -1
  136. package/package.json +1 -1
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Image pipeline type definitions.
3
+ *
4
+ * Stati adds intrinsic dimensions, lazy loading and co-located image output to every
5
+ * site without configuration. The `responsive` and `og` features below need the
6
+ * optional `@stati/images` package, which implements {@link ImageProvider}.
7
+ */
8
+ /** Modern formats that responsive images can add as `<source>` elements. */
9
+ export type ImageVariantFormat = 'avif' | 'webp';
10
+ /** Every format an image provider can be asked to write. */
11
+ export type ImageOutputFormat = 'avif' | 'webp' | 'jpeg' | 'png';
12
+ /** Formats Stati can read intrinsic dimensions from. */
13
+ export type ImageSourceFormat = 'png' | 'jpeg' | 'gif' | 'webp' | 'avif';
14
+ /**
15
+ * Encoder quality per output format (1-100).
16
+ * PNG is lossless unless `png` is set, which switches it to palette quantization.
17
+ */
18
+ export interface ImagesQualityConfig {
19
+ avif?: number;
20
+ webp?: number;
21
+ jpeg?: number;
22
+ png?: number;
23
+ }
24
+ /**
25
+ * Responsive image options. Requires `@stati/images`.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * images: {
30
+ * responsive: { widths: [480, 960, 1440], formats: ['avif', 'webp'] },
31
+ * }
32
+ * ```
33
+ */
34
+ export interface ResponsiveImagesConfig {
35
+ /** Candidate widths in pixels. Widths above an image's own width are skipped (default: [480, 960, 1440]) */
36
+ widths?: number[];
37
+ /** Modern formats added as `<source>` elements (default: ['avif', 'webp']) */
38
+ formats?: ImageVariantFormat[];
39
+ /** Encoder quality per format (default: avif 50, webp 75, jpeg 80, png lossless) */
40
+ quality?: ImagesQualityConfig;
41
+ /** Default `sizes` attribute (default: '100vw') */
42
+ sizes?: string;
43
+ }
44
+ /**
45
+ * A font made available to Open Graph image templates.
46
+ * Satori reads TTF, OTF and WOFF files; WOFF2 is not supported.
47
+ */
48
+ export interface OgImageFontConfig {
49
+ /** Family name used in `font-family` inside the template */
50
+ name: string;
51
+ /** Path to the font file, relative to the project root */
52
+ path: string;
53
+ /** Font weight (default: 400) */
54
+ weight?: number;
55
+ /** Font style (default: 'normal') */
56
+ style?: 'normal' | 'italic';
57
+ }
58
+ /**
59
+ * Open Graph image options. Requires `@stati/images`.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * images: {
64
+ * og: { exclude: ['/404'] },
65
+ * }
66
+ * ```
67
+ */
68
+ export interface OgImagesConfig {
69
+ /** Template file name looked up from the page's directory up to `srcDir` (default: 'og.eta'). The built-in card is used when none is found. */
70
+ template?: string;
71
+ /** Image width in pixels (default: 1200) */
72
+ width?: number;
73
+ /** Image height in pixels (default: 630) */
74
+ height?: number;
75
+ /** Output format (default: 'png') */
76
+ format?: 'png' | 'jpeg';
77
+ /** Fonts added to the bundled ones (Archivo, Inter, Fira Code) */
78
+ fonts?: OgImageFontConfig[];
79
+ /** URL glob patterns of pages that get no generated image */
80
+ exclude?: string[];
81
+ }
82
+ /**
83
+ * Image configuration.
84
+ *
85
+ * Stati always adds `width`, `height`, `loading="lazy"` and `decoding="async"` to
86
+ * Markdown images and emits images that sit next to Markdown files. Set `images: false`
87
+ * to turn that off. `responsive` and `og` are independent and each needs `@stati/images`.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * images: {
92
+ * responsive: true,
93
+ * og: true,
94
+ * }
95
+ * ```
96
+ */
97
+ export interface ImagesConfig {
98
+ /** Load the first image near the top of a page eagerly with high fetch priority (default: true) */
99
+ eagerFirst?: boolean;
100
+ /** Generate AVIF/WebP variants with `srcset` and `<picture>`. Requires `@stati/images`. */
101
+ responsive?: boolean | ResponsiveImagesConfig;
102
+ /** Generate an Open Graph image for every page. Requires `@stati/images`. */
103
+ og?: boolean | OgImagesConfig;
104
+ /** `'fast'` (default) skips `responsive` and `og` in the dev server; `'full'` runs them */
105
+ dev?: 'fast' | 'full';
106
+ }
107
+ /** One file an image provider writes for a source image. */
108
+ export interface VariantOutput {
109
+ /** Absolute output path */
110
+ filePath: string;
111
+ /** Output width in pixels; the provider never enlarges the source */
112
+ width: number;
113
+ /** Output format */
114
+ format: ImageOutputFormat;
115
+ /** Encoder quality; omitted for lossless output */
116
+ quality?: number;
117
+ }
118
+ /** A request to encode one source image into a set of outputs. */
119
+ export interface VariantRequest {
120
+ /** Absolute path of the source image */
121
+ sourcePath: string;
122
+ /** One entry per output file; core has already chosen widths, formats and paths */
123
+ outputs: VariantOutput[];
124
+ }
125
+ /** Font data passed to an Open Graph image renderer. */
126
+ export interface OgFont {
127
+ name: string;
128
+ data: Buffer;
129
+ weight?: number;
130
+ style?: 'normal' | 'italic';
131
+ }
132
+ /** A request to rasterize one Open Graph image from template HTML. */
133
+ export interface OgImageRequest {
134
+ /** HTML produced by the Eta template, with local images inlined as data URIs */
135
+ html: string;
136
+ width: number;
137
+ height: number;
138
+ format: 'png' | 'jpeg';
139
+ fonts: OgFont[];
140
+ /** Absolute output path */
141
+ filePath: string;
142
+ /** Template the HTML came from, for error messages */
143
+ templatePath: string;
144
+ }
145
+ /** The built-in Open Graph card a provider ships. */
146
+ export interface OgDefaults {
147
+ /** Eta template source */
148
+ template: string;
149
+ /** Fonts the template uses, always passed to the renderer */
150
+ fonts: OgFont[];
151
+ }
152
+ /**
153
+ * Contract between `@stati/core` and an image provider such as `@stati/images`.
154
+ * Core decides URLs, widths, formats and caching; the provider only encodes.
155
+ */
156
+ export interface ImageProvider {
157
+ /** Contract version; core refuses a provider whose version it does not support */
158
+ readonly apiVersion: 1;
159
+ /** Encoder identity, part of every cache key so encoder upgrades produce new URLs */
160
+ readonly version: string;
161
+ /**
162
+ * Encode one source image into the requested outputs. Settles only once no output is still
163
+ * being written, even when one fails, because core rewrites pages and prunes files next.
164
+ */
165
+ createVariants(request: VariantRequest): Promise<void>;
166
+ /** Rasterize one Open Graph image; required when `images.og` is on */
167
+ renderOgImage?(request: OgImageRequest): Promise<void>;
168
+ /** Load the built-in Open Graph template and its fonts */
169
+ loadOgDefaults?(): Promise<OgDefaults>;
170
+ }
171
+ /**
172
+ * A generated Open Graph image, as exposed to SEO generation and to templates
173
+ * through `stati.ogImage`.
174
+ */
175
+ export interface GeneratedOgImage {
176
+ /** Absolute URL */
177
+ url: string;
178
+ /** Root-relative path */
179
+ path: string;
180
+ width: number;
181
+ height: number;
182
+ /** Alternative text, the page title */
183
+ alt?: string;
184
+ }
185
+ //# sourceMappingURL=images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/types/images.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Image pipeline type definitions.
3
+ *
4
+ * Stati adds intrinsic dimensions, lazy loading and co-located image output to every
5
+ * site without configuration. The `responsive` and `og` features below need the
6
+ * optional `@stati/images` package, which implements {@link ImageProvider}.
7
+ */
8
+ export {};
@@ -3,13 +3,14 @@
3
3
  * This file provides a single entry point for importing types
4
4
  */
5
5
  export type { AgingRule, ISGConfig, CacheEntry, CacheManifest } from './isg.js';
6
- export type { SiteConfig, StatiConfig, BuildContext, PageContext, BuildHooks, BuildStats, SEOConfig, RobotsTxtConfig, TypeScriptConfig, BundleConfig, } from './config.js';
7
- export type { FrontMatter, PageModel, CollectionData, TemplateContext, SEOMetadata, SitemapMetadata, RobotsConfig, OpenGraphConfig, OpenGraphImage, OpenGraphArticle, TwitterCardConfig, AuthorConfig, StatiAssets, TocEntry, } from './content.js';
6
+ export type { SiteConfig, StatiConfig, BuildContext, PageContext, BuildHooks, BuildStats, SEOConfig, RobotsTxtConfig, TypeScriptConfig, BundleConfig, CollectionsConfig, GeneratedPageEntry, } from './config.js';
7
+ export type { FrontMatter, PageModel, CollectionData, PaginationData, GeneratedPageData, PaginateOptions, GenerateOptions, TemplateContext, SEOMetadata, SitemapMetadata, RobotsConfig, OpenGraphConfig, OpenGraphImage, OpenGraphArticle, TwitterCardConfig, AuthorConfig, StatiAssets, TocEntry, } from './content.js';
8
8
  export type { SEOContext, SEOValidationResult } from './seo.js';
9
9
  export { SEOTagType } from './seo.js';
10
10
  export type { ChangeFrequency, SitemapEntry, SitemapConfig, SitemapGenerationResult, } from './sitemap.js';
11
11
  export type { RSSConfig, RSSFeedConfig, RSSGenerationResult } from './rss.js';
12
12
  export type { SearchConfig, SearchDocument, SearchIndex, SearchIndexMetadata } from './search.js';
13
13
  export type { NavNode } from './navigation.js';
14
+ export type { ImagesConfig, ResponsiveImagesConfig, OgImagesConfig, OgImageFontConfig, ImagesQualityConfig, ImageVariantFormat, ImageOutputFormat, ImageSourceFormat, ImageProvider, VariantRequest, VariantOutput, OgImageRequest, OgFont, OgDefaults, GeneratedOgImage, } from './images.js';
14
15
  export type { Logger } from './logging.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGhF,YAAY,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG9E,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlG,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGhF,YAAY,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG9E,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlG,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,MAAM,EACN,UAAU,EACV,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC"}
@@ -81,6 +81,25 @@ export interface CacheEntry {
81
81
  readonly ttlSeconds: number;
82
82
  /** Maximum age cap for this page in days */
83
83
  maxAgeCapDays?: number;
84
+ /**
85
+ * Files found while rendering, such as the images a page displays. Their hashes are part
86
+ * of `inputsHash`, so replacing an image rebuilds only the pages that show it.
87
+ */
88
+ assetDeps?: readonly string[];
89
+ /** Generated image files this page references, relative to the output directory */
90
+ images?: readonly string[];
91
+ /**
92
+ * Whether the last render read `stati.collection`. When it did, the collection's summary
93
+ * (each member's URL, publish date and summary fields) is part of `inputsHash`, so the page
94
+ * rebuilds when a page it lists changes. Missing in entries written before Stati recorded
95
+ * it; such a page rebuilds once to record it.
96
+ */
97
+ readsCollection?: boolean;
98
+ /**
99
+ * Whether the last render read the navigation tree (`stati.nav` or `stati.page.navNode`).
100
+ * When it did, the navigation hash is part of `inputsHash`.
101
+ */
102
+ readsNav?: boolean;
84
103
  }
85
104
  /**
86
105
  * ISG cache manifest containing all cached page entries.
@@ -1 +1 @@
1
- {"version":3,"file":"isg.d.ts","sourceRoot":"","sources":["../../src/types/isg.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
1
+ {"version":3,"file":"isg.d.ts","sourceRoot":"","sources":["../../src/types/isg.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,mFAAmF;IACnF,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -4,6 +4,7 @@
4
4
  import type { PageModel } from './content.js';
5
5
  import type { StatiConfig } from './config.js';
6
6
  import type { Logger } from './logging.js';
7
+ import type { GeneratedOgImage } from './images.js';
7
8
  /**
8
9
  * Enum for SEO tag types used in selective generation and detection.
9
10
  *
@@ -53,6 +54,14 @@ export interface SEOContext {
53
54
  exclude?: Set<SEOTagType>;
54
55
  /** Set of tag types to include in generation (whitelist mode) */
55
56
  include?: Set<SEOTagType>;
57
+ /** Open Graph image generated for the page, used when front matter sets none */
58
+ generatedImage?: GeneratedOgImage | undefined;
59
+ /**
60
+ * The page's image is generated but not known yet, as when a partial calls
61
+ * `stati.generateSEO()` before the image exists: emit placeholders that rendering
62
+ * replaces once it is known.
63
+ */
64
+ deferGeneratedImage?: boolean | undefined;
56
65
  }
57
66
  /**
58
67
  * Result of SEO metadata validation.
@@ -1 +1 @@
1
- {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/types/seo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,oBAAY,UAAU;IACpB,uBAAuB;IACvB,KAAK,UAAU;IACf,2BAA2B;IAC3B,WAAW,gBAAgB;IAC3B,wBAAwB;IACxB,QAAQ,aAAa;IACrB,sBAAsB;IACtB,MAAM,WAAW;IACjB,sBAAsB;IACtB,MAAM,WAAW;IACjB,yBAAyB;IACzB,SAAS,cAAc;IACvB,kCAAkC;IAClC,SAAS,cAAc;IACvB,yCAAyC;IACzC,OAAO,YAAY;IACnB,8BAA8B;IAC9B,cAAc,mBAAmB;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,yBAAyB;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,OAAO,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/types/seo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,oBAAY,UAAU;IACpB,uBAAuB;IACvB,KAAK,UAAU;IACf,2BAA2B;IAC3B,WAAW,gBAAgB;IAC3B,wBAAwB;IACxB,QAAQ,aAAa;IACrB,sBAAsB;IACtB,MAAM,WAAW;IACjB,sBAAsB;IACtB,MAAM,WAAW;IACjB,yBAAyB;IACzB,SAAS,cAAc;IACvB,kCAAkC;IAClC,SAAS,cAAc;IACvB,yCAAyC;IACzC,OAAO,YAAY;IACnB,8BAA8B;IAC9B,cAAc,mBAAmB;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,yBAAyB;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,OAAO,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,gFAAgF;IAChF,cAAc,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC9C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stati/core",
3
- "version": "1.27.2",
3
+ "version": "1.29.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",