@krantho/server 0.0.0-stage → 1.0.1

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 (147) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cdn/cloudfront.d.ts +9 -0
  3. package/dist/cdn/cloudfront.d.ts.map +1 -0
  4. package/dist/cdn/cloudfront.js +35 -0
  5. package/dist/cdn/cloudfront.js.map +1 -0
  6. package/dist/cdn/gcp.d.ts +15 -0
  7. package/dist/cdn/gcp.d.ts.map +1 -0
  8. package/dist/cdn/gcp.js +60 -0
  9. package/dist/cdn/gcp.js.map +1 -0
  10. package/dist/cdn/index.d.ts +9 -0
  11. package/dist/cdn/index.d.ts.map +1 -0
  12. package/dist/cdn/index.js +30 -0
  13. package/dist/cdn/index.js.map +1 -0
  14. package/dist/cdn/listener.d.ts +14 -0
  15. package/dist/cdn/listener.d.ts.map +1 -0
  16. package/dist/cdn/listener.js +53 -0
  17. package/dist/cdn/listener.js.map +1 -0
  18. package/dist/cdn/retry.d.ts +3 -0
  19. package/dist/cdn/retry.d.ts.map +1 -0
  20. package/dist/cdn/retry.js +17 -0
  21. package/dist/cdn/retry.js.map +1 -0
  22. package/dist/cdn/types.d.ts +12 -0
  23. package/dist/cdn/types.d.ts.map +1 -0
  24. package/dist/cdn/types.js +2 -0
  25. package/dist/cdn/types.js.map +1 -0
  26. package/dist/cdn/vercel.d.ts +9 -0
  27. package/dist/cdn/vercel.d.ts.map +1 -0
  28. package/dist/cdn/vercel.js +31 -0
  29. package/dist/cdn/vercel.js.map +1 -0
  30. package/dist/content-conflicts.d.ts +18 -0
  31. package/dist/content-conflicts.d.ts.map +1 -0
  32. package/dist/content-conflicts.js +22 -0
  33. package/dist/content-conflicts.js.map +1 -0
  34. package/dist/content-dates.d.ts +35 -0
  35. package/dist/content-dates.d.ts.map +1 -0
  36. package/dist/content-dates.js +85 -0
  37. package/dist/content-dates.js.map +1 -0
  38. package/dist/content-loader.d.ts +37 -0
  39. package/dist/content-loader.d.ts.map +1 -0
  40. package/dist/content-loader.js +223 -0
  41. package/dist/content-loader.js.map +1 -0
  42. package/dist/content-migration.d.ts +101 -0
  43. package/dist/content-migration.d.ts.map +1 -0
  44. package/dist/content-migration.js +291 -0
  45. package/dist/content-migration.js.map +1 -0
  46. package/dist/convert.d.ts +18 -0
  47. package/dist/convert.d.ts.map +1 -0
  48. package/dist/convert.js +152 -0
  49. package/dist/convert.js.map +1 -0
  50. package/dist/file-store.d.ts +11 -0
  51. package/dist/file-store.d.ts.map +1 -0
  52. package/dist/file-store.js +39 -0
  53. package/dist/file-store.js.map +1 -0
  54. package/dist/file-watcher.d.ts +19 -0
  55. package/dist/file-watcher.d.ts.map +1 -0
  56. package/dist/file-watcher.js +99 -0
  57. package/dist/file-watcher.js.map +1 -0
  58. package/dist/handler.d.ts +61 -0
  59. package/dist/handler.d.ts.map +1 -0
  60. package/dist/handler.js +197 -0
  61. package/dist/handler.js.map +1 -0
  62. package/dist/import.d.ts +25 -0
  63. package/dist/import.d.ts.map +1 -0
  64. package/dist/import.js +71 -0
  65. package/dist/import.js.map +1 -0
  66. package/dist/index.d.ts +28 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +19 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/indexnow.d.ts +38 -0
  71. package/dist/indexnow.d.ts.map +1 -0
  72. package/dist/indexnow.js +89 -0
  73. package/dist/indexnow.js.map +1 -0
  74. package/dist/lazy-handler.d.ts +7 -0
  75. package/dist/lazy-handler.d.ts.map +1 -0
  76. package/dist/lazy-handler.js +16 -0
  77. package/dist/lazy-handler.js.map +1 -0
  78. package/dist/llm-seed.d.ts +25 -0
  79. package/dist/llm-seed.d.ts.map +1 -0
  80. package/dist/llm-seed.js +42 -0
  81. package/dist/llm-seed.js.map +1 -0
  82. package/dist/lock-adapters.d.ts +21 -0
  83. package/dist/lock-adapters.d.ts.map +1 -0
  84. package/dist/lock-adapters.js +69 -0
  85. package/dist/lock-adapters.js.map +1 -0
  86. package/dist/manifest.d.ts +15 -0
  87. package/dist/manifest.d.ts.map +1 -0
  88. package/dist/manifest.js +39 -0
  89. package/dist/manifest.js.map +1 -0
  90. package/dist/mime-types.d.ts +3 -0
  91. package/dist/mime-types.d.ts.map +1 -0
  92. package/dist/mime-types.js +15 -0
  93. package/dist/mime-types.js.map +1 -0
  94. package/dist/page-cache-rules.d.ts +41 -0
  95. package/dist/page-cache-rules.d.ts.map +1 -0
  96. package/dist/page-cache-rules.js +94 -0
  97. package/dist/page-cache-rules.js.map +1 -0
  98. package/dist/page-cache-store.d.ts +11 -0
  99. package/dist/page-cache-store.d.ts.map +1 -0
  100. package/dist/page-cache-store.js +46 -0
  101. package/dist/page-cache-store.js.map +1 -0
  102. package/dist/page-request.d.ts +26 -0
  103. package/dist/page-request.d.ts.map +1 -0
  104. package/dist/page-request.js +29 -0
  105. package/dist/page-request.js.map +1 -0
  106. package/dist/persistence.d.ts +36 -0
  107. package/dist/persistence.d.ts.map +1 -0
  108. package/dist/persistence.js +108 -0
  109. package/dist/persistence.js.map +1 -0
  110. package/dist/preview-token.d.ts +9 -0
  111. package/dist/preview-token.d.ts.map +1 -0
  112. package/dist/preview-token.js +14 -0
  113. package/dist/preview-token.js.map +1 -0
  114. package/dist/read-cache.d.ts +17 -0
  115. package/dist/read-cache.d.ts.map +1 -0
  116. package/dist/read-cache.js +33 -0
  117. package/dist/read-cache.js.map +1 -0
  118. package/dist/route-matcher.d.ts +21 -0
  119. package/dist/route-matcher.d.ts.map +1 -0
  120. package/dist/route-matcher.js +75 -0
  121. package/dist/route-matcher.js.map +1 -0
  122. package/dist/secret-vault.d.ts +20 -0
  123. package/dist/secret-vault.d.ts.map +1 -0
  124. package/dist/secret-vault.js +60 -0
  125. package/dist/secret-vault.js.map +1 -0
  126. package/dist/seo-config-io.d.ts +51 -0
  127. package/dist/seo-config-io.d.ts.map +1 -0
  128. package/dist/seo-config-io.js +151 -0
  129. package/dist/seo-config-io.js.map +1 -0
  130. package/dist/seo-seed.d.ts +12 -0
  131. package/dist/seo-seed.d.ts.map +1 -0
  132. package/dist/seo-seed.js +100 -0
  133. package/dist/seo-seed.js.map +1 -0
  134. package/dist/studio-gate.d.ts +25 -0
  135. package/dist/studio-gate.d.ts.map +1 -0
  136. package/dist/studio-gate.js +70 -0
  137. package/dist/studio-gate.js.map +1 -0
  138. package/dist/studio.d.ts +17 -0
  139. package/dist/studio.d.ts.map +1 -0
  140. package/dist/studio.js +110 -0
  141. package/dist/studio.js.map +1 -0
  142. package/dist/webhook-sweep.d.ts +22 -0
  143. package/dist/webhook-sweep.d.ts.map +1 -0
  144. package/dist/webhook-sweep.js +33 -0
  145. package/dist/webhook-sweep.js.map +1 -0
  146. package/package.json +89 -3
  147. package/README.md +0 -3
@@ -0,0 +1,37 @@
1
+ import type { IPublishedContentLoader, IPublishedSeoLoader } from '@krantho/core';
2
+ import type { KranthoHandlerOptions } from './handler.js';
3
+ /** What server-rendered pages read: published content, the pages' SEO, and a preview view */
4
+ export interface ContentLoader extends IPublishedContentLoader, IPublishedSeoLoader {
5
+ /**
6
+ * The same reads for an editor's preview: a document and its JSON-LD come
7
+ * from its current version, draft included, and nothing is cached
8
+ */
9
+ readonly preview: IPublishedContentLoader & IPublishedSeoLoader;
10
+ }
11
+ /**
12
+ * Create the content loader server-rendered pages read through.
13
+ *
14
+ * Pages read only the live (published) version of a document — never a newer
15
+ * draft — by collection, slug and locale; an omitted locale is the site's
16
+ * default. The loader takes the configuration and collections the API handler
17
+ * takes, opens persistence through the same factory, and runs the same startup
18
+ * content import and SEO seed before its first read returns — so pages and the
19
+ * API read one database, and a fresh one is filled and configured whichever of
20
+ * them a deployment serves first. The adapter opens on the first read, not at
21
+ * import time, and a failed open is retried on the next read. Reads are cached
22
+ * per `content.cache`, except with `cache.pages: 'next-isr'`, where Next.js
23
+ * caches them, and with `cache.pages: 'cdn'`, where
24
+ * the CDN caches the pages: a publish purges the CDN, and the next render must
25
+ * read the new version, not a cached one the CDN would then keep.
26
+ *
27
+ * It also serves the pages' SEO: configuration properties, and each page's
28
+ * JSON-LD composed from its published fields — in-process, the way the API's
29
+ * preview composes it, so no page calls the site's own API. Its `preview` view
30
+ * reads the current version instead, for an editor previewing a draft.
31
+ *
32
+ * Inside `runPageRequest()` every read records its cache tags into the
33
+ * request, and a preview request reads through the `preview` view;
34
+ * `isPreview()` says which a render reads.
35
+ */
36
+ export declare function createContentLoader(options: Pick<KranthoHandlerOptions, 'config' | 'collections'>): ContentLoader;
37
+ //# sourceMappingURL=content-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-loader.d.ts","sourceRoot":"","sources":["../src/content-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,uBAAuB,EACvB,mBAAmB,EAGpB,MAAM,eAAe,CAAA;AAoBtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAWzD,6FAA6F;AAC7F,MAAM,WAAW,aAAc,SAAQ,uBAAuB,EAAE,mBAAmB;IACjF;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,CAAA;CAChE;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,aAAa,CAAC,GAC7D,aAAa,CA4Cf"}
@@ -0,0 +1,223 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { composePageJsonLd } from '@krantho/api';
4
+ import { loadConfig } from '@krantho/config/node';
5
+ import { documentPath, documentReadTags, jsonLdTags, listReadTags, pageCollection, seoReadTags, } from '@krantho/core';
6
+ import { canGetContent, canReadPublished } from '@krantho/persistence';
7
+ import { defineConfig } from '@krantho/schema';
8
+ import { documentSeoProperties } from '@krantho/seo-shared';
9
+ import { importRepositoryContent } from './content-migration.js';
10
+ import { createLockAdapters } from './lock-adapters.js';
11
+ import { inPreviewRequest, recordReadTags } from './page-request.js';
12
+ import { createAdapter } from './persistence.js';
13
+ import { createReadCache } from './read-cache.js';
14
+ import { seedSeoOnce } from './seo-seed.js';
15
+ const liveVersion = (reader, ref, locale) => reader.getPublished(ref.collection, ref.slug, locale);
16
+ const currentVersion = async (reader, ref, locale) => {
17
+ // Every database adapter reads single documents; one that cannot previews nothing
18
+ if (!canGetContent(reader))
19
+ return null;
20
+ const doc = await reader.getContent(ref.collection, ref.slug, locale);
21
+ return doc && doc.meta.status !== 'deleted' ? doc : null;
22
+ };
23
+ /**
24
+ * Create the content loader server-rendered pages read through.
25
+ *
26
+ * Pages read only the live (published) version of a document — never a newer
27
+ * draft — by collection, slug and locale; an omitted locale is the site's
28
+ * default. The loader takes the configuration and collections the API handler
29
+ * takes, opens persistence through the same factory, and runs the same startup
30
+ * content import and SEO seed before its first read returns — so pages and the
31
+ * API read one database, and a fresh one is filled and configured whichever of
32
+ * them a deployment serves first. The adapter opens on the first read, not at
33
+ * import time, and a failed open is retried on the next read. Reads are cached
34
+ * per `content.cache`, except with `cache.pages: 'next-isr'`, where Next.js
35
+ * caches them, and with `cache.pages: 'cdn'`, where
36
+ * the CDN caches the pages: a publish purges the CDN, and the next render must
37
+ * read the new version, not a cached one the CDN would then keep.
38
+ *
39
+ * It also serves the pages' SEO: configuration properties, and each page's
40
+ * JSON-LD composed from its published fields — in-process, the way the API's
41
+ * preview composes it, so no page calls the site's own API. Its `preview` view
42
+ * reads the current version instead, for an editor previewing a draft.
43
+ *
44
+ * Inside `runPageRequest()` every read records its cache tags into the
45
+ * request, and a preview request reads through the `preview` view;
46
+ * `isPreview()` says which a render reads.
47
+ */
48
+ export function createContentLoader(options) {
49
+ let resolved;
50
+ let opening = null;
51
+ let cache;
52
+ function settings() {
53
+ resolved ??= loadConfig({ code: options.config, env: process.env });
54
+ return resolved;
55
+ }
56
+ function store() {
57
+ opening ??= openStore(settings(), defineConfig({ collections: options.collections })).catch((err) => {
58
+ opening = null;
59
+ throw err;
60
+ });
61
+ return opening;
62
+ }
63
+ function reads() {
64
+ // With Next.js ISR, Next's data cache is the only page-side cache; behind a CDN, the CDN is
65
+ const { content, cache: pageCache } = settings();
66
+ const cachedElsewhere = pageCache.pages === 'next-isr' || pageCache.pages === 'cdn';
67
+ cache ??= createReadCache(cachedElsewhere ? { ...content.cache, enabled: false } : content.cache);
68
+ return cache;
69
+ }
70
+ const uncached = createReadCache({ enabled: false, ttlMs: 0, maxEntries: 1 });
71
+ const view = (version, isPreview, cached) => readView({
72
+ settings,
73
+ store,
74
+ version,
75
+ preview: isPreview,
76
+ cache: cached,
77
+ collections: options.collections,
78
+ });
79
+ const live = view(liveVersion, false, reads);
80
+ const preview = view(currentVersion, true, () => uncached);
81
+ return { ...previewInScope(live, preview), preview };
82
+ }
83
+ /** The live view, served from the preview view while a preview page request runs */
84
+ function previewInScope(live, preview) {
85
+ const active = () => (inPreviewRequest() ? preview : live);
86
+ return {
87
+ isPreview: () => active().isPreview(),
88
+ getPublished: (ref) => active().getPublished(ref),
89
+ listPublished: (collection, locale) => active().listPublished(collection, locale),
90
+ listPublishedSummaries: (collection, locale) => active().listPublishedSummaries(collection, locale),
91
+ seoProperties: (configId, locale) => active().seoProperties(configId, locale),
92
+ jsonLd: (ref, structure) => active().jsonLd(ref, structure),
93
+ };
94
+ }
95
+ /**
96
+ * The site's identity from configuration, which the primary site entity
97
+ * carries unless its SEO settings set a value of their own
98
+ */
99
+ function siteIdentity(site) {
100
+ const identity = { name: site.name, url: site.baseUrl };
101
+ if (site.logo)
102
+ identity['logo'] = site.logo;
103
+ if (site.description)
104
+ identity['description'] = site.description;
105
+ if (site.alternateName)
106
+ identity['alternateName'] = site.alternateName;
107
+ if (site.sameAs.length > 0)
108
+ identity['sameAs'] = site.sameAs;
109
+ return identity;
110
+ }
111
+ /** The page reads over one version of each document; each records its tags into the page request */
112
+ function readView({ settings, store, version, preview, cache, collections, }) {
113
+ const localeOf = (ref) => ref.locale ?? settings().site.defaultLocale;
114
+ return {
115
+ isPreview: async () => preview,
116
+ getPublished: (ref) => {
117
+ recordReadTags(documentReadTags(ref.collection, ref.slug));
118
+ const locale = localeOf(ref);
119
+ return cache().read(`doc:${ref.collection}:${ref.slug}:${locale}`, async () => {
120
+ const doc = await version((await store()).adapter, ref, locale);
121
+ return doc ? toPublished(doc) : null;
122
+ });
123
+ },
124
+ listPublished: (collection, locale) => {
125
+ recordReadTags(listReadTags(collection));
126
+ const loc = locale ?? settings().site.defaultLocale;
127
+ return cache().read(`list:${collection}:${loc}`, async () => {
128
+ const { items } = await (await store()).adapter.query({
129
+ state: 'published',
130
+ projection: 'full',
131
+ collections: [collection],
132
+ locale: loc,
133
+ });
134
+ return items.map(toPublished);
135
+ });
136
+ },
137
+ listPublishedSummaries: (collection, locale) => {
138
+ recordReadTags(listReadTags(collection));
139
+ const loc = locale ?? settings().site.defaultLocale;
140
+ return cache().read(`summaries:${collection}:${loc}`, async () => {
141
+ const { items } = await (await store()).adapter.query({
142
+ state: 'published',
143
+ projection: 'summary',
144
+ collections: [collection],
145
+ locale: loc,
146
+ });
147
+ return items.map(toPublishedSummary);
148
+ });
149
+ },
150
+ seoProperties: (configId, locale) => {
151
+ recordReadTags(seoReadTags(configId));
152
+ return cache().read(`seo:${configId}:${locale ?? settings().site.defaultLocale}`, async () => {
153
+ if (configId.startsWith('doc:')) {
154
+ const key = configId.slice(4);
155
+ const slash = key.indexOf('/');
156
+ if (slash < 1)
157
+ return {};
158
+ const ref = { collection: key.slice(0, slash), slug: key.slice(slash + 1), locale };
159
+ recordReadTags(documentReadTags(ref.collection, ref.slug));
160
+ const doc = await version((await store()).adapter, ref, localeOf(ref));
161
+ return doc ? documentSeoProperties(doc.metadata) : {};
162
+ }
163
+ const entry = await (await store()).seoConfigs?.getConfig(configId);
164
+ const properties = entry?.config.entities[0]?.properties ?? {};
165
+ return configId === 'site'
166
+ ? { ...siteIdentity(settings().site), ...properties }
167
+ : properties;
168
+ });
169
+ },
170
+ // Document SEO configuration is per document, shared by its locales; the
171
+ // graph is composed from the requested locale's fields.
172
+ jsonLd: (ref, structure) => {
173
+ recordReadTags(jsonLdTags(ref.collection, ref.slug));
174
+ const locale = localeOf(ref);
175
+ const shape = structure ? `:${JSON.stringify(structure)}` : '';
176
+ return cache().read(`jsonld:${ref.collection}:${ref.slug}:${locale}${shape}`, async () => {
177
+ const { adapter, seoConfigs } = await store();
178
+ const doc = await version(adapter, ref, locale);
179
+ if (!doc)
180
+ return null;
181
+ return composePageJsonLd({
182
+ collection: ref.collection,
183
+ slug: ref.slug,
184
+ path: documentPath(pageCollection(collections, ref.collection), ref.slug),
185
+ fields: doc.fields,
186
+ metadata: doc.metadata,
187
+ documentMeta: doc.meta,
188
+ config: settings(),
189
+ seoConfigs,
190
+ structure,
191
+ });
192
+ });
193
+ },
194
+ };
195
+ }
196
+ async function openStore(config, contentConfig) {
197
+ if (config.persistence.provider === 'sqlite') {
198
+ await mkdir(dirname(config.persistence.sqlite.path), { recursive: true });
199
+ }
200
+ const { adapter, lockDb, contentMigrationAdapter, checkpointAdapter } = await createAdapter(config.persistence, config.site, config.content, contentConfig.collections);
201
+ await importRepositoryContent(adapter, contentConfig, contentMigrationAdapter, checkpointAdapter, config.paths.contentDir, config.content.defaultStatus.filesystem);
202
+ if (!canReadPublished(adapter)) {
203
+ throw new Error(`The ${config.persistence.provider} persistence adapter cannot read published content`);
204
+ }
205
+ const { seoConfigAdapter } = await createLockAdapters(lockDb, config.persistence.provider);
206
+ if (seoConfigAdapter)
207
+ await seedSeoOnce(config, seoConfigAdapter);
208
+ return { adapter, seoConfigs: seoConfigAdapter };
209
+ }
210
+ function toPublishedSummary(doc) {
211
+ return {
212
+ collection: doc.meta.collection,
213
+ slug: doc.meta.slug,
214
+ locale: doc.meta.locale,
215
+ metadata: doc.metadata,
216
+ fields: doc.fields,
217
+ publishedAt: new Date(doc.meta.createdAt),
218
+ };
219
+ }
220
+ function toPublished(doc) {
221
+ return { ...toPublishedSummary(doc), body: doc.body };
222
+ }
223
+ //# sourceMappingURL=content-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-loader.js","sourceRoot":"","sources":["../src/content-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { type ContentDocument, type ContentManifest, type ICheckpointAdapter, type IContentMigrationAdapter, type IPersistenceAdapter, type ISiteSettingsAdapter } from '@krantho/persistence';
2
+ import { type ContentConfig, type ParsedRepositoryContent } from '@krantho/schema';
3
+ import type { ImportableAdapter } from './import.js';
4
+ /** An adapter the migration can import into and read each document's current version from */
5
+ export interface MigratableAdapter extends ImportableAdapter {
6
+ getContent(collection: string, slug: string, locale?: string | undefined): Promise<ContentDocument | null>;
7
+ }
8
+ /** What the migration did with one content file */
9
+ export type FileOutcome =
10
+ /** New or changed in the repository, and not edited in Studio: imported */
11
+ 'imported'
12
+ /** The database already holds the file's content */
13
+ | 'unchanged'
14
+ /** Edited in Studio while the file stayed the same: the editor's version stands */
15
+ | 'kept'
16
+ /** Changed in the repository and edited in Studio: recorded as a conflict */
17
+ | 'conflict'
18
+ /** Imported before and deleted in Studio since: stays deleted */
19
+ | 'deleted'
20
+ /** The file fails its collection's schema */
21
+ | 'rejected';
22
+ /** Per-file migration detail */
23
+ export interface ImportDetail {
24
+ collection: string;
25
+ slug: string;
26
+ outcome: FileOutcome;
27
+ }
28
+ /** Result of running content migration on startup */
29
+ export interface ContentMigrationResult {
30
+ action: 'skip' | 'full-import' | 'migrate';
31
+ imported: number;
32
+ conflicts: number;
33
+ rejected: number;
34
+ checkpointVersion: number | null;
35
+ reason?: string | undefined;
36
+ details: ImportDetail[];
37
+ }
38
+ /** A content file read from the repository, ready to compare and import */
39
+ interface RepositoryFile {
40
+ key: string;
41
+ collection: string;
42
+ slug: string;
43
+ filePath: string;
44
+ /** SHA-256 of the file as it is on disk — what the manifest records */
45
+ fileChecksum: string;
46
+ /** Schema-validated fields, or null when the file fails its schema */
47
+ fields: Record<string, unknown> | null;
48
+ /** Why the file fails its schema */
49
+ issues: readonly string[];
50
+ body: string;
51
+ document?: ParsedRepositoryContent | undefined;
52
+ status?: string | undefined;
53
+ }
54
+ /**
55
+ * Bring the database up to date with the repository's content on startup.
56
+ *
57
+ * Without `<contentDir>/manifest.json` (or a migration adapter) the content is
58
+ * imported into an empty database only. With one, every deployment whose
59
+ * manifest is newer than the database's compares each file with its document:
60
+ * a new or changed file is imported, unless an editor changed the document in
61
+ * Studio since — then the editor's version stands and a changed file is
62
+ * recorded as a conflict. A document deleted in Studio stays deleted.
63
+ */
64
+ export declare function runContentMigration(adapter: MigratableAdapter, contentConfig: ContentConfig, migrationAdapter: IContentMigrationAdapter | undefined, checkpointAdapter: ICheckpointAdapter | undefined, contentDir: string, defaultStatus?: string): Promise<ContentMigrationResult>;
65
+ /**
66
+ * What to do with one repository file, given its document's current version
67
+ * and the file's checksum when the database last took the repository's
68
+ * content (undefined: the database never saw this file).
69
+ *
70
+ * Content equal to a state the repository held (the document's basis, or what
71
+ * the last deployment took) is not an edit: a document that carries the
72
+ * repository's previous file, as one does after a pull of production's edits was
73
+ * merged, is not reported as edited, and a file at that state is not reported as changed.
74
+ *
75
+ * A version an import wrote is not an edit either, whatever its checksum: nobody changed it since,
76
+ * even when it predates the document's basis and contract. A restore copies the restored version's
77
+ * source but always names who restored it, so only a version with no `changedBy` is an import's.
78
+ */
79
+ export declare function decideFile(file: Pick<RepositoryFile, 'fileChecksum' | 'fields' | 'body' | 'document'>, current: ContentDocument | null, previousChecksum: string | undefined): FileOutcome;
80
+ /** Read `<contentDir>/manifest.json`, or null when the build wrote none */
81
+ export declare function loadManifest(contentDir: string): Promise<ContentManifest | null>;
82
+ /** Canonical authored content checksum, independent of YAML spelling and key order. */
83
+ export declare function contentChecksum(fields: Record<string, unknown>, body: string): string;
84
+ /**
85
+ * Import the repository's content into the database when it needs it (an
86
+ * empty database, or a newer content manifest), logging what happened. Both
87
+ * the API handler and the page loader run it on first use, so whichever a
88
+ * fresh deployment serves first finds the content in place.
89
+ *
90
+ * @returns how many documents were imported
91
+ */
92
+ export declare function importRepositoryContent(adapter: IPersistenceAdapter, contentConfig: ContentConfig, migrationAdapter: IContentMigrationAdapter | undefined, checkpointAdapter: ICheckpointAdapter | undefined, contentDir: string, defaultStatus?: string): Promise<number>;
93
+ /**
94
+ * Whether the database holds a content version the site has not announced
95
+ * yet, recording it as announced. The page loader can import a deployment's
96
+ * content before the API handler starts, and only the handler can announce a
97
+ * change, so it announces each new content version once, whoever imported it.
98
+ */
99
+ export declare function claimContentAnnouncement(migrationAdapter: IContentMigrationAdapter | undefined, settings: ISiteSettingsAdapter | undefined): Promise<boolean>;
100
+ export {};
101
+ //# sourceMappingURL=content-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-migration.d.ts","sourceRoot":"","sources":["../src/content-migration.ts"],"names":[],"mappings":"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"}