canopycms 0.0.61 → 0.0.63
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/dist/ai/index.d.ts +9 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +9 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/json-to-markdown.js +1 -2
- package/dist/ai/json-to-markdown.js.map +1 -1
- package/dist/ai/to-plain-text.d.ts +57 -0
- package/dist/ai/to-plain-text.d.ts.map +1 -0
- package/dist/ai/to-plain-text.js +255 -0
- package/dist/ai/to-plain-text.js.map +1 -0
- package/dist/ai/transform-components.d.ts.map +1 -1
- package/dist/ai/transform-components.js +70 -5
- package/dist/ai/transform-components.js.map +1 -1
- package/dist/api/__test__/mock-client.d.ts +5 -1
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +9 -2
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/admin-branch-health.d.ts +36 -1
- package/dist/api/admin-branch-health.d.ts.map +1 -1
- package/dist/api/admin-branch-health.js +176 -2
- package/dist/api/admin-branch-health.js.map +1 -1
- package/dist/api/admin.d.ts +8 -1
- package/dist/api/admin.d.ts.map +1 -1
- package/dist/api/admin.js.map +1 -1
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +16 -2
- package/dist/api/branch.js.map +1 -1
- package/dist/api/client.d.ts +5 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +6 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/content.d.ts +11 -5
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +79 -6
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.d.ts +10 -0
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +40 -15
- package/dist/api/entries.js.map +1 -1
- package/dist/api/schema.d.ts +4 -4
- package/dist/api/schema.d.ts.map +1 -1
- package/dist/api/schema.js +13 -13
- package/dist/api/schema.js.map +1 -1
- package/dist/assets/transform.d.ts.map +1 -1
- package/dist/assets/transform.js +19 -6
- package/dist/assets/transform.js.map +1 -1
- package/dist/authorization/branch.d.ts +55 -3
- package/dist/authorization/branch.d.ts.map +1 -1
- package/dist/authorization/branch.js +55 -9
- package/dist/authorization/branch.js.map +1 -1
- package/dist/authorization/types.d.ts +1 -1
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/branch-health.d.ts +13 -0
- package/dist/branch-health.d.ts.map +1 -1
- package/dist/branch-health.js +23 -0
- package/dist/branch-health.js.map +1 -1
- package/dist/build-canopy.d.ts +49 -0
- package/dist/build-canopy.d.ts.map +1 -0
- package/dist/build-canopy.js +51 -0
- package/dist/build-canopy.js.map +1 -0
- package/dist/cli/cli.js +935 -562
- package/dist/cli/generate-ai-content.js +837 -480
- package/dist/cli/init.js +25 -7
- package/dist/cli/template-files/Dockerfile.cms.template +19 -1
- package/dist/cli/template-files/canopycms.config.ts.template +25 -1
- package/dist/cli/template-files/cms-stack.ts.template +7 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config/schemas/field.d.ts +15 -15
- package/dist/config/types.d.ts +2 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validation.d.ts +9 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +14 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/content-id-index.d.ts +97 -5
- package/dist/content-id-index.d.ts.map +1 -1
- package/dist/content-id-index.js +170 -18
- package/dist/content-id-index.js.map +1 -1
- package/dist/content-listing.d.ts +110 -5
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +164 -23
- package/dist/content-listing.js.map +1 -1
- package/dist/content-reader.d.ts +41 -4
- package/dist/content-reader.d.ts.map +1 -1
- package/dist/content-reader.js +17 -4
- package/dist/content-reader.js.map +1 -1
- package/dist/content-store.d.ts +91 -8
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +443 -258
- package/dist/content-store.js.map +1 -1
- package/dist/content-tree.d.ts +31 -2
- package/dist/content-tree.d.ts.map +1 -1
- package/dist/content-tree.js +22 -5
- package/dist/content-tree.js.map +1 -1
- package/dist/context.d.ts +30 -10
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +55 -4
- package/dist/context.js.map +1 -1
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +18 -6
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/editor/CanopyEditor.d.ts.map +1 -1
- package/dist/editor/CanopyEditor.js +2 -2
- package/dist/editor/CanopyEditor.js.map +1 -1
- package/dist/editor/CanopyEditorPage.d.ts +9 -1
- package/dist/editor/CanopyEditorPage.d.ts.map +1 -1
- package/dist/editor/CanopyEditorPage.js +9 -2
- package/dist/editor/CanopyEditorPage.js.map +1 -1
- package/dist/editor/Editor.d.ts +9 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +58 -24
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +12 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.js +6 -2
- package/dist/editor/admin/SystemHealthPanel.js.map +1 -1
- package/dist/editor/components/EntryCreateModal.d.ts +9 -1
- package/dist/editor/components/EntryCreateModal.d.ts.map +1 -1
- package/dist/editor/components/EntryCreateModal.js +4 -1
- package/dist/editor/components/EntryCreateModal.js.map +1 -1
- package/dist/editor/fields/DateTimeField.d.ts +46 -0
- package/dist/editor/fields/DateTimeField.d.ts.map +1 -0
- package/dist/editor/fields/DateTimeField.js +66 -0
- package/dist/editor/fields/DateTimeField.js.map +1 -0
- package/dist/editor/fields/NumberField.d.ts +34 -0
- package/dist/editor/fields/NumberField.d.ts.map +1 -0
- package/dist/editor/fields/NumberField.js +53 -0
- package/dist/editor/fields/NumberField.js.map +1 -0
- package/dist/editor/fields/NumberListField.d.ts +25 -0
- package/dist/editor/fields/NumberListField.d.ts.map +1 -0
- package/dist/editor/fields/NumberListField.js +53 -0
- package/dist/editor/fields/NumberListField.js.map +1 -0
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +115 -26
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/editor/hooks/useDraftManager.d.ts +8 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +261 -21
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useEntryManager.d.ts +21 -0
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
- package/dist/editor/hooks/useEntryManager.js +25 -2
- package/dist/editor/hooks/useEntryManager.js.map +1 -1
- package/dist/editor/theme.d.ts +8 -8
- package/dist/entry-schema.d.ts +228 -8
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js +124 -0
- package/dist/entry-schema.js.map +1 -1
- package/dist/git-manager.d.ts +51 -7
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +105 -14
- package/dist/git-manager.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +70 -27
- package/dist/http/handler.js.map +1 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +40 -3
- package/dist/http/router.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/operating-mode/deployment-name-fixtures.d.ts +29 -0
- package/dist/operating-mode/deployment-name-fixtures.d.ts.map +1 -0
- package/dist/operating-mode/deployment-name-fixtures.js +55 -0
- package/dist/operating-mode/deployment-name-fixtures.js.map +1 -0
- package/dist/operating-mode/deployment-name.d.ts +9 -0
- package/dist/operating-mode/deployment-name.d.ts.map +1 -1
- package/dist/operating-mode/deployment-name.js +9 -1
- package/dist/operating-mode/deployment-name.js.map +1 -1
- package/dist/operating-mode/index.d.ts +2 -1
- package/dist/operating-mode/index.d.ts.map +1 -1
- package/dist/operating-mode/index.js +4 -1
- package/dist/operating-mode/index.js.map +1 -1
- package/dist/operating-mode/mode-env.d.ts +58 -0
- package/dist/operating-mode/mode-env.d.ts.map +1 -0
- package/dist/operating-mode/mode-env.js +97 -0
- package/dist/operating-mode/mode-env.js.map +1 -0
- package/dist/resolve-canopy-user.d.ts +34 -0
- package/dist/resolve-canopy-user.d.ts.map +1 -0
- package/dist/resolve-canopy-user.js +55 -0
- package/dist/resolve-canopy-user.js.map +1 -0
- package/dist/schema/schema-store.d.ts +53 -2
- package/dist/schema/schema-store.d.ts.map +1 -1
- package/dist/schema/schema-store.js +92 -21
- package/dist/schema/schema-store.js.map +1 -1
- package/dist/server.d.ts +60 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +58 -0
- package/dist/server.js.map +1 -1
- package/dist/services.d.ts +1 -2
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +42 -12
- package/dist/services.js.map +1 -1
- package/dist/settings-workspace.d.ts +40 -0
- package/dist/settings-workspace.d.ts.map +1 -1
- package/dist/settings-workspace.js +139 -151
- package/dist/settings-workspace.js.map +1 -1
- package/dist/static/index.d.ts +65 -5
- package/dist/static/index.d.ts.map +1 -1
- package/dist/static/index.js +65 -12
- package/dist/static/index.js.map +1 -1
- package/dist/static/seo.d.ts +150 -0
- package/dist/static/seo.d.ts.map +1 -0
- package/dist/static/seo.js +189 -0
- package/dist/static/seo.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/content-write-lock.d.ts +127 -0
- package/dist/utils/content-write-lock.d.ts.map +1 -0
- package/dist/utils/content-write-lock.js +170 -0
- package/dist/utils/content-write-lock.js.map +1 -0
- package/dist/utils/error.d.ts +1 -1
- package/dist/utils/error.js +1 -1
- package/dist/utils/git.d.ts +16 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +22 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/sanitize-href.d.ts +74 -3
- package/dist/utils/sanitize-href.d.ts.map +1 -1
- package/dist/utils/sanitize-href.js +125 -6
- package/dist/utils/sanitize-href.js.map +1 -1
- package/dist/validation/entry-link-validator.d.ts +1 -1
- package/dist/validation/entry-link-validator.js +3 -3
- package/dist/validation/entry-link-validator.js.map +1 -1
- package/dist/validation/entry-validator.js +1 -1
- package/dist/validation/entry-validator.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +13 -0
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +326 -264
- package/dist/worker/cms-worker.js.map +1 -1
- package/package.json +2 -2
package/dist/content-id-index.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { isValidId } from './id.js';
|
|
4
4
|
import { isNotFoundError } from './utils/error.js';
|
|
5
|
+
import { canopyLogWarn } from './utils/logger.js';
|
|
5
6
|
/** Logical path representing entries stored at the branch root (no parent collection). Rare in practice. */
|
|
6
7
|
const EMPTY_LOGICAL_PATH = '';
|
|
7
8
|
/**
|
|
@@ -51,26 +52,116 @@ function toLogicalCollectionPath(physicalPath) {
|
|
|
51
52
|
* (ID miss or index hit whose file is gone).
|
|
52
53
|
*
|
|
53
54
|
* **Race condition handling:**
|
|
54
|
-
* - Multiple processes creating entries simultaneously:
|
|
55
|
-
*
|
|
55
|
+
* - Multiple processes creating entries simultaneously: each generates a unique ID,
|
|
56
|
+
* so this cannot itself manufacture a duplicate-ID pair.
|
|
56
57
|
* - ContentStore.write() refuses to recreate an entry file whose ID the
|
|
57
58
|
* directory listing places at a different slug (existence guard), so stale
|
|
58
|
-
* indexes cannot manufacture duplicate-ID files.
|
|
59
|
+
* indexes cannot manufacture duplicate-ID files either. Together these two
|
|
60
|
+
* guarantees mean buildFromFilenames() can only ever encounter a duplicate
|
|
61
|
+
* ID that ALREADY existed on disk before the scan started (see below).
|
|
62
|
+
*
|
|
63
|
+
* ## Duplicate-ID quarantine (not fail-fast)
|
|
64
|
+
*
|
|
65
|
+
* A duplicate embedded ID can still land on disk from an external crash --
|
|
66
|
+
* e.g. ContentStore.renameEntry()'s `fs.link()` then `fs.unlink()` is not
|
|
67
|
+
* atomic, and a crash between the two steps leaves two filenames sharing one
|
|
68
|
+
* ID. Earlier versions of this class threw on the first such collision,
|
|
69
|
+
* which propagated out of every caller and (since ContentStore's rebuild has
|
|
70
|
+
* no catch around it) permanently bricked read-by-id, reference resolution,
|
|
71
|
+
* collection listing, and every write on the branch -- one bad pair took the
|
|
72
|
+
* whole branch down.
|
|
73
|
+
*
|
|
74
|
+
* `buildFromFilenames()` now quarantines a collision instead of throwing:
|
|
75
|
+
* the two (or more) candidates sharing an ID are resolved to a single
|
|
76
|
+
* deterministic winner -- the lexicographically-**smallest** relativePath,
|
|
77
|
+
* chosen purely by comparing the candidate strings, never by which one the
|
|
78
|
+
* scan happened to visit first. This is what makes the choice agree across
|
|
79
|
+
* hosts: two Lambdas (or a Lambda and the EC2 worker) scanning the same
|
|
80
|
+
* directory can observe entries in different `readdir()` orders, but the
|
|
81
|
+
* MIN of a fixed set of strings does not depend on visitation order, so
|
|
82
|
+
* every host converges on the same winner. The loser(s) are excluded from
|
|
83
|
+
* `idToLocation`/`pathToId`/`byCollection` entirely (as if not indexed) and
|
|
84
|
+
* recorded in {@link getDuplicateIds} for admin-facing health reporting
|
|
85
|
+
* (branch-health.ts) and repair (api/admin-branch-health.ts). A branch with a
|
|
86
|
+
* quarantined duplicate is degraded (that one ID pair is invisible to
|
|
87
|
+
* ID-based lookups) but not dead.
|
|
88
|
+
*
|
|
89
|
+
* ### What quarantine does NOT promise
|
|
90
|
+
*
|
|
91
|
+
* Quarantining is an INDEX decision: this scan never touches the filesystem,
|
|
92
|
+
* so nothing here moves or deletes the dropped file. It does not follow that
|
|
93
|
+
* the dropped file is inert until an admin repairs it, and an earlier version
|
|
94
|
+
* of this comment wrongly claimed exactly that ("left untouched on disk until
|
|
95
|
+
* a human or the repair action moves them"). Slugs are resolved by directory
|
|
96
|
+
* scan (`ContentStore.buildPaths()`), which knows nothing about this
|
|
97
|
+
* quarantine, so the dropped file stays fully addressable by
|
|
98
|
+
* collection+slug: a stale editor tab can still save, delete or rename it.
|
|
99
|
+
*
|
|
100
|
+
* The dangerous case was the save. `ContentStore.write()`'s index-repair step
|
|
101
|
+
* reads "the index says this ID lives somewhere else" as "the slug changed"
|
|
102
|
+
* and unlinks that other file -- which, with a duplicate, is a DIFFERENT
|
|
103
|
+
* document (the kept one). It silently deleted the winner while reporting
|
|
104
|
+
* success. `write()` now refuses such a save with `DuplicateContentIdError`
|
|
105
|
+
* instead (see its "[F1] duplicate-ID guard"). `delete()`/`renameEntry()`
|
|
106
|
+
* were never affected: they only ever touch the file the caller addressed,
|
|
107
|
+
* and are deliberately still allowed, so removing or moving the dropped file
|
|
108
|
+
* by hand remains possible without an admin.
|
|
59
109
|
*/
|
|
60
110
|
export class ContentIdIndex {
|
|
61
111
|
constructor(root) {
|
|
62
112
|
this.idToLocation = new Map();
|
|
63
113
|
this.pathToId = new Map();
|
|
64
114
|
this.byCollection = new Map();
|
|
115
|
+
/**
|
|
116
|
+
* IDs discovered on more than one file during buildFromFilenames, keyed by
|
|
117
|
+
* id, mapping to every quarantined (losing) path seen for that id. Never
|
|
118
|
+
* populated by add()/remove()/updatePath(), which still throw on collision
|
|
119
|
+
* -- see those methods' doc comments.
|
|
120
|
+
*/
|
|
121
|
+
this.duplicateIds = new Map();
|
|
65
122
|
this.root = path.resolve(root);
|
|
66
123
|
}
|
|
67
124
|
/**
|
|
68
|
-
* Build index by scanning filenames recursively.
|
|
69
|
-
*
|
|
125
|
+
* Build index by scanning filenames recursively. Duplicate embedded IDs
|
|
126
|
+
* are quarantined, not thrown on -- see the class doc comment's
|
|
127
|
+
* "Duplicate-ID quarantine" section and {@link getDuplicateIds}.
|
|
70
128
|
*/
|
|
71
129
|
async buildFromFilenames(startPath = '') {
|
|
72
130
|
await this.scanDirectory(startPath);
|
|
73
131
|
}
|
|
132
|
+
/** Insert a location into all three indexes. Caller must ensure no existing entry for this id. */
|
|
133
|
+
insertLocation(id, location) {
|
|
134
|
+
this.idToLocation.set(id, location);
|
|
135
|
+
this.pathToId.set(location.relativePath, id);
|
|
136
|
+
if (location.type === 'entry' && location.collection) {
|
|
137
|
+
if (!this.byCollection.has(location.collection)) {
|
|
138
|
+
this.byCollection.set(location.collection, new Set());
|
|
139
|
+
}
|
|
140
|
+
this.byCollection.get(location.collection).add(id);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** Remove a location from all three indexes -- used when a lexicographically-earlier duplicate displaces it. */
|
|
144
|
+
evictLocation(location) {
|
|
145
|
+
this.idToLocation.delete(location.id);
|
|
146
|
+
this.pathToId.delete(location.relativePath);
|
|
147
|
+
if (location.type === 'entry' && location.collection) {
|
|
148
|
+
const idSet = this.byCollection.get(location.collection);
|
|
149
|
+
if (idSet) {
|
|
150
|
+
idSet.delete(location.id);
|
|
151
|
+
if (idSet.size === 0)
|
|
152
|
+
this.byCollection.delete(location.collection);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** Record a quarantined duplicate path for admin-facing health reporting (see getDuplicateIds). */
|
|
157
|
+
recordDuplicate(id, droppedPath) {
|
|
158
|
+
let dropped = this.duplicateIds.get(id);
|
|
159
|
+
if (!dropped) {
|
|
160
|
+
dropped = new Set();
|
|
161
|
+
this.duplicateIds.set(id, dropped);
|
|
162
|
+
}
|
|
163
|
+
dropped.add(droppedPath);
|
|
164
|
+
}
|
|
74
165
|
async scanDirectory(relativePath) {
|
|
75
166
|
const absoluteDir = path.join(this.root, relativePath);
|
|
76
167
|
try {
|
|
@@ -83,13 +174,6 @@ export class ContentIdIndex {
|
|
|
83
174
|
const fullRelativePath = path.join(relativePath, entry.name);
|
|
84
175
|
const id = extractIdFromFilename(entry.name);
|
|
85
176
|
if (id) {
|
|
86
|
-
// Collision detection
|
|
87
|
-
if (this.idToLocation.has(id)) {
|
|
88
|
-
const existing = this.idToLocation.get(id);
|
|
89
|
-
throw new Error(`ID collision detected: ${id}\n` +
|
|
90
|
-
` File 1: ${existing.relativePath}\n` +
|
|
91
|
-
` File 2: ${fullRelativePath}`);
|
|
92
|
-
}
|
|
93
177
|
const location = {
|
|
94
178
|
id, // already ContentId from extractIdFromFilename
|
|
95
179
|
type: entry.isDirectory() ? 'collection' : 'entry',
|
|
@@ -104,14 +188,41 @@ export class ContentIdIndex {
|
|
|
104
188
|
const collectionPath = toLogicalCollectionPath(physicalCollection);
|
|
105
189
|
location.slug = slug;
|
|
106
190
|
location.collection = collectionPath;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
191
|
+
}
|
|
192
|
+
const existing = this.idToLocation.get(id);
|
|
193
|
+
if (existing) {
|
|
194
|
+
// Duplicate embedded ID -- quarantine instead of throwing (see
|
|
195
|
+
// class doc comment). Deterministic winner: the
|
|
196
|
+
// lexicographically-smaller relativePath, decided purely by
|
|
197
|
+
// comparing the two strings so every host scanning the same
|
|
198
|
+
// directory picks the same winner regardless of readdir order.
|
|
199
|
+
const newWins = fullRelativePath < existing.relativePath;
|
|
200
|
+
const kept = newWins ? fullRelativePath : existing.relativePath;
|
|
201
|
+
const dropped = newWins ? existing.relativePath : fullRelativePath;
|
|
202
|
+
if (newWins) {
|
|
203
|
+
this.evictLocation(existing);
|
|
204
|
+
this.recordDuplicate(id, existing.relativePath);
|
|
205
|
+
this.insertLocation(id, location);
|
|
110
206
|
}
|
|
111
|
-
|
|
207
|
+
else {
|
|
208
|
+
this.recordDuplicate(id, fullRelativePath);
|
|
209
|
+
}
|
|
210
|
+
// Written for an operator who has never seen this code: name
|
|
211
|
+
// both files, say explicitly that the dropped one still exists
|
|
212
|
+
// (quarantine, not deletion), and point at the concrete recovery
|
|
213
|
+
// action rather than an internal method name.
|
|
214
|
+
canopyLogWarn(`[ContentIdIndex] Duplicate content ID ${id}: "${kept}" and "${dropped}" both ` +
|
|
215
|
+
`embed this ID. Keeping "${kept}" for ID-based lookups (reads, references, ` +
|
|
216
|
+
`listings); "${dropped}" is excluded from those lookups for now but has NOT ` +
|
|
217
|
+
`been deleted -- it is still on disk at that path, and saves addressed to it are ` +
|
|
218
|
+
`refused until this is resolved. An admin can resolve this via ` +
|
|
219
|
+
`the repair-content-duplicates admin action for this branch, which archives ` +
|
|
220
|
+
`"${dropped}" with a dot-prefixed name so future scans stop flagging it. ` +
|
|
221
|
+
`Root: ${this.root}`);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.insertLocation(id, location);
|
|
112
225
|
}
|
|
113
|
-
this.idToLocation.set(id, location);
|
|
114
|
-
this.pathToId.set(fullRelativePath, id);
|
|
115
226
|
}
|
|
116
227
|
// Recurse into directories
|
|
117
228
|
if (entry.isDirectory()) {
|
|
@@ -126,6 +237,47 @@ export class ContentIdIndex {
|
|
|
126
237
|
}
|
|
127
238
|
}
|
|
128
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* IDs discovered on more than one file during the last buildFromFilenames
|
|
242
|
+
* scan. Empty unless the content tree currently has a duplicate-ID pair
|
|
243
|
+
* (see the class doc comment). Consumed by branch-health.ts's admin scan
|
|
244
|
+
* and by the repair-content-duplicates admin action
|
|
245
|
+
* (api/admin-branch-health.ts).
|
|
246
|
+
*/
|
|
247
|
+
getDuplicateIds() {
|
|
248
|
+
const result = [];
|
|
249
|
+
for (const id of this.duplicateIds.keys()) {
|
|
250
|
+
const duplicate = this.getDuplicateFor(id);
|
|
251
|
+
if (duplicate)
|
|
252
|
+
result.push(duplicate);
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* The quarantine record for ONE id, or null when that id is not
|
|
258
|
+
* duplicated. The O(1) counterpart to {@link getDuplicateIds} for the
|
|
259
|
+
* write path, which has to ask this question on every save whose resolved
|
|
260
|
+
* path disagrees with the index (ContentStore.write()'s duplicate-ID
|
|
261
|
+
* guard) and must not pay for materializing the whole list.
|
|
262
|
+
*/
|
|
263
|
+
getDuplicateFor(id) {
|
|
264
|
+
const dropped = this.duplicateIds.get(id);
|
|
265
|
+
if (!dropped)
|
|
266
|
+
return null;
|
|
267
|
+
const kept = this.idToLocation.get(id);
|
|
268
|
+
// Defensive: unreachable in practice -- recordDuplicate() only ever
|
|
269
|
+
// runs alongside an insertLocation() for the same id (either just
|
|
270
|
+
// before, on the winner-displaced branch, or already present, on the
|
|
271
|
+
// loser branch), so a winner always exists once a duplicate is
|
|
272
|
+
// recorded.
|
|
273
|
+
if (!kept)
|
|
274
|
+
return null;
|
|
275
|
+
return {
|
|
276
|
+
id: id,
|
|
277
|
+
keptPath: kept.relativePath,
|
|
278
|
+
droppedPaths: Array.from(dropped).sort(),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
129
281
|
/**
|
|
130
282
|
* Forward lookup: ID → location (O(1))
|
|
131
283
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-id-index.js","sourceRoot":"","sources":["../src/content-id-index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-id-index.js","sourceRoot":"","sources":["../src/content-id-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,10 +31,55 @@ export interface CollectionListItem {
|
|
|
31
31
|
*/
|
|
32
32
|
export declare const readEntryData: (filePath: string, format: ContentFormat, bodyFieldName?: string) => Promise<Record<string, unknown>>;
|
|
33
33
|
/**
|
|
34
|
-
* Parse a filename
|
|
35
|
-
*
|
|
34
|
+
* Parse a Canopy content filename into its `{type}.{slug}.{id}.{ext}` parts.
|
|
35
|
+
*
|
|
36
|
+
* ## Filename grammar
|
|
37
|
+
*
|
|
38
|
+
* Every entry file on disk is named `{type}.{slug}.{id}.{ext}`:
|
|
39
|
+
* - `type` — the entry type name (a key in the collection's `entries` config).
|
|
40
|
+
* - `slug` — the entry's URL slug. May itself contain dots (e.g. a slug of
|
|
41
|
+
* `getting.started.guide`), so the type and ID anchor the split: the ID is
|
|
42
|
+
* always the second-to-last dot-separated segment, and the slug is
|
|
43
|
+
* everything between the type and the ID. The returned `slug` is
|
|
44
|
+
* lowercased.
|
|
45
|
+
* - `id` — a 12-character Base58 content ID (`generateId()`/`isValidId()`).
|
|
46
|
+
* Base58 excludes the ambiguous characters `0`, `O`, `I`, `l` so IDs are
|
|
47
|
+
* unambiguous when read aloud or hand-transcribed. A filename whose
|
|
48
|
+
* would-be ID segment doesn't pass `isValidId` is rejected — the whole
|
|
49
|
+
* parse returns `null`, even if the rest of the shape looks right.
|
|
50
|
+
* - `ext` — the format extension (`.md`, `.mdx`, `.json`, `.yaml`), stripped
|
|
51
|
+
* before parsing and not part of the returned result.
|
|
52
|
+
*
|
|
53
|
+
* @param filename - The bare filename (no directory component). **This precondition is
|
|
54
|
+
* not enforced.** The parser splits purely on `.`, so a `/` or `\` you pass in is not
|
|
55
|
+
* rejected and is not treated as special — it becomes part of whichever segment it
|
|
56
|
+
* falls in, most often the `type` segment (e.g. `'foo/bar.slug.<validId>.md'` parses
|
|
57
|
+
* to `type: 'foo/bar'`). Strip any directory component yourself (e.g.
|
|
58
|
+
* `path.basename(filePath)`) before calling this — every internal caller already does.
|
|
59
|
+
* @param entryTypes - When provided, the parsed `type` segment must match one
|
|
60
|
+
* of these entry types by name, or the parse is rejected (this is how
|
|
61
|
+
* `listCollectionEntries` filters out files that don't belong to the
|
|
62
|
+
* collection's configured entry types). Omit this argument to parse
|
|
63
|
+
* structurally without validating the type against a known list — useful
|
|
64
|
+
* for adopter code that needs to recover `{type, slug, id}` from a
|
|
65
|
+
* filename without having a schema/entry-types list on hand (e.g. a
|
|
66
|
+
* filesystem walk over content for tooling or diagnostics). Even without
|
|
67
|
+
* `entryTypes`, a leading-dot filename (dotfile, editor swap/backup file)
|
|
68
|
+
* is always rejected — an empty string is never a legal type, matching the
|
|
69
|
+
* `filename.startsWith('.')` guard `extractEntryTypeFromFilename` in
|
|
70
|
+
* `content-id-index.ts` already applies.
|
|
71
|
+
* @returns `{ type, slug, id }`, or `null` if `filename` doesn't match the
|
|
72
|
+
* `{type}.{slug}.{id}.{ext}` shape (too few segments, no extension, a
|
|
73
|
+
* leading dot, an invalid ID, or — when `entryTypes` is given — an
|
|
74
|
+
* unrecognized type). `id` is validated (`isValidId`) and safe to trust. **`slug` is
|
|
75
|
+
* not** — it is the raw dot-joined middle segment(s), lowercased, cast to the branded
|
|
76
|
+
* `Slug` type without running `parseSlug`'s validation. A filename with an
|
|
77
|
+
* unconventional slug segment (e.g. containing a space) still parses and still
|
|
78
|
+
* receives the `Slug` brand. Callers that need a validated slug must run the result
|
|
79
|
+
* through `parseSlug` themselves; this function's contract is "split the filename
|
|
80
|
+
* grammar apart," not "validate every part."
|
|
36
81
|
*/
|
|
37
|
-
export declare const parseTypedFilename: (filename: string, entryTypes
|
|
82
|
+
export declare const parseTypedFilename: (filename: string, entryTypes?: readonly EntryTypeConfig[]) => {
|
|
38
83
|
type: string;
|
|
39
84
|
slug: Slug;
|
|
40
85
|
id: ContentId;
|
|
@@ -76,6 +121,15 @@ export interface ListEntriesItem<T = Record<string, unknown>> {
|
|
|
76
121
|
data: T;
|
|
77
122
|
/** Field definitions for this entry's type, when resolvable. */
|
|
78
123
|
schema?: EntrySchema;
|
|
124
|
+
/**
|
|
125
|
+
* Filesystem mtime (ISO 8601) of the entry file, from an unconditional `fs.stat`
|
|
126
|
+
* done while listing. Caveat: this is a checkout-time timestamp, not an editorial
|
|
127
|
+
* one — a fresh CI clone resets every file's mtime to checkout time, so treat this
|
|
128
|
+
* as "changed since last build" at best, not an authoritative last-edited date for
|
|
129
|
+
* a public-facing `<lastmod>`. Sourcing mtime from git commit history is a
|
|
130
|
+
* separate, not-yet-built improvement.
|
|
131
|
+
*/
|
|
132
|
+
updatedAt?: string;
|
|
79
133
|
}
|
|
80
134
|
export interface ListEntriesOptions<T = Record<string, unknown>> {
|
|
81
135
|
/**
|
|
@@ -99,18 +153,53 @@ export interface ListEntriesOptions<T = Record<string, unknown>> {
|
|
|
99
153
|
/** Custom sort. */
|
|
100
154
|
sort?: (a: ListEntriesItem<T>, b: ListEntriesItem<T>) => number;
|
|
101
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Server-only path-ACL predicate, applied to raw entries before any of their data
|
|
158
|
+
* reaches a caller.
|
|
159
|
+
*
|
|
160
|
+
* Deliberately NOT part of `ListEntriesOptions`/`BuildContentTreeOptions`: those are
|
|
161
|
+
* adopter-facing, and adopter code must not be able to supply, widen, or override the
|
|
162
|
+
* access check. `context.ts` is the only intended producer — it builds the predicate
|
|
163
|
+
* from `services.createContentAccessChecker` for the request-scoped user, and omits it
|
|
164
|
+
* entirely at build time / on static deployments (synthetic admin, no ACLs).
|
|
165
|
+
*
|
|
166
|
+
* Omitting it preserves the pre-existing unfiltered behavior exactly, which is what
|
|
167
|
+
* build-time callers want.
|
|
168
|
+
*/
|
|
169
|
+
export interface ContentVisibilityOptions {
|
|
170
|
+
/** Return false to drop an entry. Receives the entry's branch-root-relative physical path. */
|
|
171
|
+
shouldInclude?: (physicalPath: PhysicalPath) => boolean;
|
|
172
|
+
}
|
|
102
173
|
/**
|
|
103
174
|
* List all content entries as a flat array.
|
|
104
175
|
*
|
|
105
176
|
* Walks the schema to discover collections, reads entries from each,
|
|
106
177
|
* and returns a flat list suitable for generateStaticParams, search indexing, sitemaps, etc.
|
|
107
178
|
*
|
|
179
|
+
* Build-time-only failure: a file with a recognized content extension (`.md`/`.mdx`/`.json`/
|
|
180
|
+
* `.yaml`) sitting in a collection directory that *looks like an attempted entry* (see
|
|
181
|
+
* `looksLikeMalformedEntry` below) but doesn't match `{type}.{slug}.{id}.{ext}` is, by default,
|
|
182
|
+
* silently dropped (see `listCollectionEntries`'s debug-gated warning). That is exactly the
|
|
183
|
+
* silent-page-loss failure mode static generation must not have — a schema rename without a
|
|
184
|
+
* matching file rename, or an entry type declared in one collection but not another, would
|
|
185
|
+
* otherwise vanish a page with zero build output. So when `isBuildMode()` is true, any such file
|
|
186
|
+
* turns the listing into a thrown error instead (see `findInvalidEntries`/`assertBuildEntriesValid`
|
|
187
|
+
* in `static/index.ts` for the sibling schema-validity guard this mirrors). Outside build mode
|
|
188
|
+
* (admin UI, content tree, `next dev`) the file is still just skipped, since a fresh scaffold or
|
|
189
|
+
* mid-rename file legitimately exists there.
|
|
190
|
+
*
|
|
191
|
+
* A file that was never entry-shaped to begin with — a `README.md`, or a colocated sibling
|
|
192
|
+
* artifact named `{contentId}.suffix.ext` per the `entryTransforms`/`readSibling` convention
|
|
193
|
+
* documented in the README — is not this guard's failure mode and never throws, in or out of
|
|
194
|
+
* build mode. See `looksLikeMalformedEntry` for the exact shape test.
|
|
195
|
+
*
|
|
108
196
|
* @param branchRoot - Absolute path to the branch workspace root
|
|
109
197
|
* @param flatSchema - Flattened schema items (from flattenSchema)
|
|
110
198
|
* @param contentRootName - The content root name (e.g. "content")
|
|
111
199
|
* @param options - Listing options (extract, filter, rootPath, sort)
|
|
200
|
+
* @param visibility - Internal path-ACL predicate; see `ContentVisibilityOptions`
|
|
112
201
|
*/
|
|
113
|
-
export declare function listEntries<T = Record<string, unknown>>(branchRoot: string, flatSchema: FlatSchemaItem[], contentRootName: string, options?: ListEntriesOptions<T
|
|
202
|
+
export declare function listEntries<T = Record<string, unknown>>(branchRoot: string, flatSchema: FlatSchemaItem[], contentRootName: string, options?: ListEntriesOptions<T>, visibility?: ContentVisibilityOptions): Promise<ListEntriesItem<T>[]>;
|
|
114
203
|
/**
|
|
115
204
|
* Sort items by a content ID order array.
|
|
116
205
|
* Items in the order array come first (in order), items not in the array come at the end
|
|
@@ -121,9 +210,25 @@ export declare function listEntries<T = Record<string, unknown>>(branchRoot: str
|
|
|
121
210
|
export declare const sortByOrder: <T extends {
|
|
122
211
|
contentId?: ContentId;
|
|
123
212
|
}>(items: T[], order: readonly string[] | undefined, fallbackKey: (item: T) => string) => T[];
|
|
213
|
+
/** A content-extension file inside a collection directory whose filename didn't parse. */
|
|
214
|
+
export interface SkippedListingFile {
|
|
215
|
+
/** The bare filename, e.g. `article.lost-page.4fBqT78gcaLd.md`. */
|
|
216
|
+
filename: string;
|
|
217
|
+
/** The collection's logical path. */
|
|
218
|
+
collectionPath: LogicalPath;
|
|
219
|
+
}
|
|
124
220
|
/**
|
|
125
221
|
* List all entries in a collection directory.
|
|
126
222
|
* Reads each entry's data (frontmatter or JSON).
|
|
223
|
+
*
|
|
224
|
+
* @param onSkip - Called for every file that has a recognized content extension, doesn't match
|
|
225
|
+
* the `{type}.{slug}.{id}.{ext}` grammar (see `parseTypedFilename`), AND structurally looks
|
|
226
|
+
* like an attempted entry (see `looksLikeMalformedEntry`). A file that was never entry-shaped
|
|
227
|
+
* (too few dot-separated segments to ever be a valid entry — a `README.md`, a colocated
|
|
228
|
+
* sibling artifact) is always silently dropped with a debug-gated `log.warn`, never passed to
|
|
229
|
+
* `onSkip`. Optional and purely a diagnostic hook — existing callers that omit it keep the
|
|
230
|
+
* exact prior behavior. `listEntries` below uses this to turn the skip into a hard build-time
|
|
231
|
+
* failure instead of a silent one.
|
|
127
232
|
*/
|
|
128
|
-
export declare const listCollectionEntries: (root: string, collection: FlatSchemaItem) => Promise<CollectionListItem[]>;
|
|
233
|
+
export declare const listCollectionEntries: (root: string, collection: FlatSchemaItem, onSkip?: (file: SkippedListingFile) => void) => Promise<CollectionListItem[]>;
|
|
129
234
|
//# sourceMappingURL=content-listing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-listing.d.ts","sourceRoot":"","sources":["../src/content-listing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAQ3F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"content-listing.d.ts","sourceRoot":"","sources":["../src/content-listing.ts"],"names":[],"mappings":"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"}
|