emdash-emit 0.1.17 → 0.1.25
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/CHANGELOG.md +152 -0
- package/README.md +22 -11
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +30 -0
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/pull.d.ts +2 -10
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +12 -30
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +7 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/client/api.d.ts +20 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +89 -0
- package/dist/client/api.js.map +1 -1
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +2 -1
- package/dist/client/auth.js.map +1 -1
- package/dist/client/endpoints.d.ts +19 -0
- package/dist/client/endpoints.d.ts.map +1 -0
- package/dist/client/endpoints.js +69 -0
- package/dist/client/endpoints.js.map +1 -0
- package/dist/client/http.d.ts +4 -2
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js.map +1 -1
- package/dist/client/lock.d.ts.map +1 -1
- package/dist/client/lock.js +4 -3
- package/dist/client/lock.js.map +1 -1
- package/dist/client/mapper.d.ts.map +1 -1
- package/dist/client/mapper.js +5 -3
- package/dist/client/mapper.js.map +1 -1
- package/dist/client/media-id.d.ts +2 -0
- package/dist/client/media-id.d.ts.map +1 -0
- package/dist/client/media-id.js +23 -0
- package/dist/client/media-id.js.map +1 -0
- package/dist/client/media.d.ts +8 -7
- package/dist/client/media.d.ts.map +1 -1
- package/dist/client/media.js +58 -17
- package/dist/client/media.js.map +1 -1
- package/dist/db/baseline.d.ts +38 -0
- package/dist/db/baseline.d.ts.map +1 -0
- package/dist/db/baseline.js +74 -0
- package/dist/db/baseline.js.map +1 -0
- package/dist/db/cache.d.ts +8 -2
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +24 -2
- package/dist/db/cache.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/sync-new.d.ts.map +1 -1
- package/dist/mcp/tools/sync-new.js +42 -1
- package/dist/mcp/tools/sync-new.js.map +1 -1
- package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
- package/dist/mcp/tools/sync-pull.js +15 -2
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +1 -0
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/presentation/article_report.d.ts +40 -0
- package/dist/presentation/article_report.d.ts.map +1 -0
- package/dist/presentation/article_report.js +80 -0
- package/dist/presentation/article_report.js.map +1 -0
- package/dist/sync/bylines.d.ts.map +1 -1
- package/dist/sync/bylines.js +2 -1
- package/dist/sync/bylines.js.map +1 -1
- package/dist/sync/conflicts.js +1 -1
- package/dist/sync/conflicts.js.map +1 -1
- package/dist/sync/delete.d.ts +0 -5
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +5 -11
- package/dist/sync/delete.js.map +1 -1
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +13 -9
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +11 -14
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/guards.d.ts +5 -0
- package/dist/sync/guards.d.ts.map +1 -1
- package/dist/sync/guards.js +62 -1
- package/dist/sync/guards.js.map +1 -1
- package/dist/sync/media/body_scan.d.ts.map +1 -1
- package/dist/sync/media/body_scan.js +9 -3
- package/dist/sync/media/body_scan.js.map +1 -1
- package/dist/sync/media/companions.d.ts +2 -9
- package/dist/sync/media/companions.d.ts.map +1 -1
- package/dist/sync/media/companions.js +5 -23
- package/dist/sync/media/companions.js.map +1 -1
- package/dist/sync/media/mirror_item.d.ts.map +1 -1
- package/dist/sync/media/mirror_item.js +33 -21
- package/dist/sync/media/mirror_item.js.map +1 -1
- package/dist/sync/media/pull_article.d.ts.map +1 -1
- package/dist/sync/media/pull_article.js +3 -2
- package/dist/sync/media/pull_article.js.map +1 -1
- package/dist/sync/media/pull_library.d.ts.map +1 -1
- package/dist/sync/media/pull_library.js +16 -11
- package/dist/sync/media/pull_library.js.map +1 -1
- package/dist/sync/media/remote_index.d.ts.map +1 -1
- package/dist/sync/media/remote_index.js +2 -1
- package/dist/sync/media/remote_index.js.map +1 -1
- package/dist/sync/media/types.d.ts +4 -3
- package/dist/sync/media/types.d.ts.map +1 -1
- package/dist/sync/media/types.js.map +1 -1
- package/dist/sync/merge.d.ts +1 -1
- package/dist/sync/merge.d.ts.map +1 -1
- package/dist/sync/merge.js +50 -17
- package/dist/sync/merge.js.map +1 -1
- package/dist/sync/new.d.ts +11 -0
- package/dist/sync/new.d.ts.map +1 -1
- package/dist/sync/new.js +81 -4
- package/dist/sync/new.js.map +1 -1
- package/dist/sync/preflight.d.ts +10 -2
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +119 -17
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull.d.ts +6 -44
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +154 -207
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push/commit.d.ts +61 -0
- package/dist/sync/push/commit.d.ts.map +1 -0
- package/dist/sync/push/commit.js +258 -0
- package/dist/sync/push/commit.js.map +1 -0
- package/dist/sync/push/guards.d.ts +33 -0
- package/dist/sync/push/guards.d.ts.map +1 -0
- package/dist/sync/push/guards.js +110 -0
- package/dist/sync/push/guards.js.map +1 -0
- package/dist/sync/push/index.d.ts +9 -0
- package/dist/sync/push/index.d.ts.map +1 -0
- package/dist/sync/push/index.js +372 -0
- package/dist/sync/push/index.js.map +1 -0
- package/dist/sync/push/media_stage.d.ts +56 -0
- package/dist/sync/push/media_stage.d.ts.map +1 -0
- package/dist/sync/push/media_stage.js +338 -0
- package/dist/sync/push/media_stage.js.map +1 -0
- package/dist/sync/push/merge_stage.d.ts +37 -0
- package/dist/sync/push/merge_stage.d.ts.map +1 -0
- package/dist/sync/push/merge_stage.js +257 -0
- package/dist/sync/push/merge_stage.js.map +1 -0
- package/dist/sync/push/preflight_stage.d.ts +6 -0
- package/dist/sync/push/preflight_stage.d.ts.map +1 -0
- package/dist/sync/push/preflight_stage.js +40 -0
- package/dist/sync/push/preflight_stage.js.map +1 -0
- package/dist/sync/push/tax_audit.d.ts +24 -0
- package/dist/sync/push/tax_audit.d.ts.map +1 -0
- package/dist/sync/push/tax_audit.js +70 -0
- package/dist/sync/push/tax_audit.js.map +1 -0
- package/dist/sync/push/taxonomy_plan.d.ts +36 -0
- package/dist/sync/push/taxonomy_plan.d.ts.map +1 -0
- package/dist/sync/push/taxonomy_plan.js +136 -0
- package/dist/sync/push/taxonomy_plan.js.map +1 -0
- package/dist/sync/push/transport.d.ts +14 -0
- package/dist/sync/push/transport.d.ts.map +1 -0
- package/dist/sync/push/transport.js +74 -0
- package/dist/sync/push/transport.js.map +1 -0
- package/dist/sync/push/types.d.ts +62 -0
- package/dist/sync/push/types.d.ts.map +1 -0
- package/dist/sync/push/types.js +23 -0
- package/dist/sync/push/types.js.map +1 -0
- package/dist/sync/push.d.ts +2 -57
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +2 -1184
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +3 -0
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +18 -8
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/taxonomies.d.ts.map +1 -1
- package/dist/sync/taxonomies.js +21 -9
- package/dist/sync/taxonomies.js.map +1 -1
- package/dist/sync/terms.d.ts.map +1 -1
- package/dist/sync/terms.js +2 -1
- package/dist/sync/terms.js.map +1 -1
- package/dist/sync/workspace/commit.d.ts +46 -0
- package/dist/sync/workspace/commit.d.ts.map +1 -0
- package/dist/sync/workspace/commit.js +85 -0
- package/dist/sync/workspace/commit.js.map +1 -0
- package/dist/sync/workspace/index.d.ts +42 -0
- package/dist/sync/workspace/index.d.ts.map +1 -0
- package/dist/sync/workspace/index.js +125 -0
- package/dist/sync/workspace/index.js.map +1 -0
- package/dist/utils/disk-spelling.d.ts +26 -0
- package/dist/utils/disk-spelling.d.ts.map +1 -0
- package/dist/utils/disk-spelling.js +51 -0
- package/dist/utils/disk-spelling.js.map +1 -0
- package/dist/utils/draft-revision.d.ts +15 -0
- package/dist/utils/draft-revision.d.ts.map +1 -0
- package/dist/utils/draft-revision.js +36 -0
- package/dist/utils/draft-revision.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +21 -2
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +71 -10
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/media-body-refs.d.ts +24 -0
- package/dist/utils/media-body-refs.d.ts.map +1 -1
- package/dist/utils/media-body-refs.js +51 -0
- package/dist/utils/media-body-refs.js.map +1 -1
- package/dist/utils/media-companion.d.ts +13 -0
- package/dist/utils/media-companion.d.ts.map +1 -0
- package/dist/utils/media-companion.js +42 -0
- package/dist/utils/media-companion.js.map +1 -0
- package/dist/utils/media-id.d.ts +46 -0
- package/dist/utils/media-id.d.ts.map +1 -0
- package/dist/utils/media-id.js +84 -0
- package/dist/utils/media-id.js.map +1 -0
- package/dist/utils/naming.d.ts.map +1 -1
- package/dist/utils/naming.js +3 -2
- package/dist/utils/naming.js.map +1 -1
- package/dist/utils/ulid.d.ts +31 -0
- package/dist/utils/ulid.d.ts.map +1 -0
- package/dist/utils/ulid.js +65 -0
- package/dist/utils/ulid.js.map +1 -0
- package/package.json +1 -1
package/dist/sync/merge.js
CHANGED
|
@@ -20,11 +20,20 @@
|
|
|
20
20
|
* SOFTWARE.
|
|
21
21
|
*/
|
|
22
22
|
import { merge as diff3Merge } from 'node-diff3';
|
|
23
|
+
import { tryDecodeTaxonomyTerm, } from '../utils/frontmatter.js';
|
|
23
24
|
/** Order-insensitive normalization for a taxonomy term list (undefined stays undefined). */
|
|
24
|
-
function normalizeTermList(val) {
|
|
25
|
+
function normalizeTermList(val, preferredMap) {
|
|
25
26
|
if (!Array.isArray(val))
|
|
26
27
|
return undefined;
|
|
27
|
-
return [
|
|
28
|
+
return [
|
|
29
|
+
...new Set(val.map((v) => {
|
|
30
|
+
const s = String(v);
|
|
31
|
+
if (!preferredMap)
|
|
32
|
+
return s;
|
|
33
|
+
const key = tryDecodeTaxonomyTerm(s).normalize('NFC');
|
|
34
|
+
return preferredMap.get(key) || s;
|
|
35
|
+
})),
|
|
36
|
+
].sort();
|
|
28
37
|
}
|
|
29
38
|
/**
|
|
30
39
|
* 3-way merge for taxonomies frontmatter record (category, tag, etc.).
|
|
@@ -73,14 +82,40 @@ export function mergeTaxonomies(local, base, remote, options) {
|
|
|
73
82
|
}
|
|
74
83
|
continue;
|
|
75
84
|
}
|
|
85
|
+
const lRaw = local?.[name];
|
|
86
|
+
const rRaw = remote?.[name];
|
|
87
|
+
const bRaw = base?.[name];
|
|
88
|
+
// Build preferredTermMap across all candidates: canonical slug (%-encoded) takes precedence
|
|
89
|
+
const preferredTermMap = new Map();
|
|
90
|
+
const allTerms = [
|
|
91
|
+
...(Array.isArray(bRaw) ? bRaw : []),
|
|
92
|
+
...(Array.isArray(rRaw) ? rRaw : []),
|
|
93
|
+
...(Array.isArray(lRaw) ? lRaw : []),
|
|
94
|
+
];
|
|
95
|
+
for (const t of allTerms) {
|
|
96
|
+
const s = String(t);
|
|
97
|
+
const key = tryDecodeTaxonomyTerm(s).normalize('NFC');
|
|
98
|
+
const isPercentEncoded = tryDecodeTaxonomyTerm(s) !== s;
|
|
99
|
+
const existing = preferredTermMap.get(key);
|
|
100
|
+
if (!existing) {
|
|
101
|
+
preferredTermMap.set(key, s);
|
|
102
|
+
}
|
|
103
|
+
else if (isPercentEncoded && tryDecodeTaxonomyTerm(existing) === existing) {
|
|
104
|
+
// Upgrade to canonical slug if currently mapped to plain/decoded string
|
|
105
|
+
preferredTermMap.set(key, s);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const lNormalized = normalizeTermList(lRaw, preferredTermMap);
|
|
109
|
+
const rNormalized = normalizeTermList(rRaw, preferredTermMap);
|
|
110
|
+
const bNormalized = normalizeTermList(bRaw, preferredTermMap);
|
|
76
111
|
// Case 2: Only local defined this taxonomy (remote omitted or deleted)
|
|
77
112
|
if (lDefined && !rDefined) {
|
|
78
113
|
if (!bDefined) {
|
|
79
114
|
merged[name] = local[name];
|
|
80
115
|
}
|
|
81
116
|
else {
|
|
82
|
-
const l =
|
|
83
|
-
const b =
|
|
117
|
+
const l = lNormalized;
|
|
118
|
+
const b = bNormalized;
|
|
84
119
|
if (eq(l, b)) {
|
|
85
120
|
// Local didn't change it, remote deleted it
|
|
86
121
|
}
|
|
@@ -119,21 +154,19 @@ export function mergeTaxonomies(local, base, remote, options) {
|
|
|
119
154
|
continue;
|
|
120
155
|
}
|
|
121
156
|
// Case 4: Both local and remote defined this taxonomy
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
const l = normalizeTermList(lRaw) ?? [];
|
|
125
|
-
const r = normalizeTermList(rRaw) ?? [];
|
|
157
|
+
const l = lNormalized ?? [];
|
|
158
|
+
const r = rNormalized ?? [];
|
|
126
159
|
if (eq(l, r)) {
|
|
127
|
-
merged[name] =
|
|
160
|
+
merged[name] = l;
|
|
128
161
|
continue;
|
|
129
162
|
}
|
|
130
163
|
// (iii) Base is null / missing: cannot compute 3-way -> conservative conflict
|
|
131
164
|
if (!bDefined) {
|
|
132
165
|
conflicts.push(name);
|
|
133
|
-
merged[name] =
|
|
166
|
+
merged[name] = l;
|
|
134
167
|
continue;
|
|
135
168
|
}
|
|
136
|
-
const b =
|
|
169
|
+
const b = bNormalized ?? [];
|
|
137
170
|
const baseSet = new Set(b);
|
|
138
171
|
const localSet = new Set(l);
|
|
139
172
|
const remoteSet = new Set(r);
|
|
@@ -145,17 +178,17 @@ export function mergeTaxonomies(local, base, remote, options) {
|
|
|
145
178
|
const remoteChanged = remoteAdded.length > 0 || remoteRemoved.length > 0;
|
|
146
179
|
// 1. localChanged = false -> Keep remote (local untouched)
|
|
147
180
|
if (!localChanged) {
|
|
148
|
-
merged[name] =
|
|
181
|
+
merged[name] = r;
|
|
149
182
|
continue;
|
|
150
183
|
}
|
|
151
184
|
// 2. remoteChanged = false -> Push local (clean single-side edit)
|
|
152
185
|
if (!remoteChanged) {
|
|
153
|
-
merged[name] =
|
|
186
|
+
merged[name] = l;
|
|
154
187
|
continue;
|
|
155
188
|
}
|
|
156
189
|
// (a) Explicit strategy takes precedence before union evaluation
|
|
157
190
|
if (options?.strategy === 'local') {
|
|
158
|
-
merged[name] =
|
|
191
|
+
merged[name] = l;
|
|
159
192
|
strategyAdoptions.push({
|
|
160
193
|
name,
|
|
161
194
|
side: 'local',
|
|
@@ -165,7 +198,7 @@ export function mergeTaxonomies(local, base, remote, options) {
|
|
|
165
198
|
continue;
|
|
166
199
|
}
|
|
167
200
|
if (options?.strategy === 'remote') {
|
|
168
|
-
merged[name] =
|
|
201
|
+
merged[name] = r;
|
|
169
202
|
strategyAdoptions.push({
|
|
170
203
|
name,
|
|
171
204
|
side: 'remote',
|
|
@@ -186,7 +219,7 @@ export function mergeTaxonomies(local, base, remote, options) {
|
|
|
186
219
|
const unionSet = new Set(union);
|
|
187
220
|
const isUnionEqualLocal = unionSet.size === localSet.size && [...unionSet].every((x) => localSet.has(x));
|
|
188
221
|
if (isUnionEqualLocal) {
|
|
189
|
-
merged[name] =
|
|
222
|
+
merged[name] = l;
|
|
190
223
|
continue;
|
|
191
224
|
}
|
|
192
225
|
// 3b. Destructive wipe guard: local = ∅ and remote ≠ ∅
|
|
@@ -201,7 +234,7 @@ export function mergeTaxonomies(local, base, remote, options) {
|
|
|
201
234
|
const isRemoteReplacement = remoteRemoved.length > 0 && remoteAdded.length > 0;
|
|
202
235
|
if (isRemoteReplacement && options?.strictRenameConflict) {
|
|
203
236
|
conflicts.push(name);
|
|
204
|
-
merged[name] =
|
|
237
|
+
merged[name] = l;
|
|
205
238
|
continue;
|
|
206
239
|
}
|
|
207
240
|
// Default: auto-merge union and record change log
|
package/dist/sync/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AAmBjD,4FAA4F;AAC5F,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD,CAAC;AAmCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,eAAe,CAC7B,KAA2C,EAC3C,IAAiD,EACjD,MAA4C,EAC5C,OAA8B;IAE9B,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,oBAAoB,GAAwB,EAAE,CAAC;IACrD,MAAM,iBAAiB,GAA+B,EAAE,CAAC;IACzD,MAAM,YAAY,GAA0B,EAAE,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;QACpB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3B,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,CAAC,CAAuB,EAAE,CAAuB,EAAE,EAAE,CAC9D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;QACnF,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;QACtF,MAAM,QAAQ,GACZ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;QAElF,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,QAAQ,IAAI,IAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QAED,uEAAuE;QACvE,IAAI,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,GAAG,KAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACb,4CAA4C;gBAC9C,CAAC;qBAAM,CAAC;oBACN,sCAAsC;oBACtC,IAAI,OAAO,EAAE,QAAQ,KAAK,OAAO,EAAE,CAAC;wBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAM,CAAC,IAAI,CAAC,CAAC;wBAC5B,iBAAiB,CAAC,IAAI,CAAC;4BACrB,IAAI;4BACJ,IAAI,EAAE,OAAO;4BACb,cAAc,EAAE,EAAE;4BAClB,gBAAgB,EAAE,CAAC,IAAI,EAAE;yBAC1B,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,OAAO,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBAC1C,6CAA6C;wBAC7C,iBAAiB,CAAC,IAAI,CAAC;4BACrB,IAAI;4BACJ,IAAI,EAAE,QAAQ;4BACd,cAAc,EAAE,CAAC,IAAI,EAAE;4BACvB,gBAAgB,EAAE,EAAE;yBACrB,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,gDAAgD;wBAChD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAM,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QAED,sEAAsE;QACtE,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,sDAAsD;QACtD,MAAM,IAAI,GAAG,KAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAExC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzE,2DAA2D;QAC3D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,IAAI,OAAO,EAAE,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,iBAAiB,CAAC,IAAI,CAAC;gBACrB,IAAI;gBACJ,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,WAAW;gBAC3B,gBAAgB,EAAE,aAAa;aAChC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,OAAO,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,iBAAiB,CAAC,IAAI,CAAC;gBACrB,IAAI;gBACJ,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,YAAY;aAC/B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,kDAAkD;QAClD,8EAA8E;QAC9E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,GAAG,UAAU;YACb,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACtD,CAAC;QAEF,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,iBAAiB,GACrB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI;gBACJ,WAAW,EAAE,CAAC;gBACd,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;QAED,6EAA6E;QAC7E,MAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/E,IAAI,mBAAmB,IAAI,OAAO,EAAE,oBAAoB,EAAE,CAAC;YACzD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QAED,kDAAkD;QAClD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACrB,oBAAoB,CAAC,IAAI,CAAC;YACxB,IAAI;YACJ,WAAW;YACX,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AACtF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,IAAwB,EACxB,MAAmB,EACnB,OAA8B;IAS9B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,iBAAiB,GAAa,EAAE,CAAC;IACrC,IAAI,oBAAqD,CAAC;IAC1D,IAAI,iBAAyD,CAAC;IAC9D,IAAI,YAA+C,CAAC;IACpD,MAAM,MAAM,GAAgB,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1C,2BAA2B;IAC3B,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpF,MAAM,IAAI,GAA6B;QACrC,OAAO;QACP,MAAM;QACN,QAAQ;QACR,aAAa;QACb,QAAQ;QACR,eAAe;QACf,YAAY;QACZ,KAAK;QACL,SAAS;KACV,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,eAAe,CACzB,KAAK,CAAC,UAAU,EAChB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAC7B,MAAM,CAAC,UAAU,EACjB,OAAO,CACR,CAAC;YACF,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;YAC/B,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC;YAClC,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CAAC;YAChD,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;YAC1C,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7C,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,iCAAiC;YAChC,MAAkC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QACtD,CAAC;aAAM,IAAI,CAAC,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,mCAAmC;YAClC,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACvD,CAAC;aAAM,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;gBACjC,iCAAiC;gBAChC,MAAkC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,8DAA8D;gBAC7D,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;gBACrD,QAAQ,CAAC,IAAI,CACX,kCAAkC,GAAG,mDAAmD,CACzF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kBAAkB;YACjB,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACvD,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IAE1D,OAAO;QACL,MAAM;QACN,QAAQ;QACR,iBAAiB;QACjB,oBAAoB;QACpB,iBAAiB;QACjB,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,SAAiB,EACjB,QAAgB,EAChB,UAAkB;IAElB,yDAAyD;IACzD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElE,uEAAuE;IACvE,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE;QACzD,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE;KACnC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO;QACL,UAAU;QACV,WAAW,EAAE,GAAG,CAAC,QAAQ;KAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAqB,EACrB,IAAuD,EACvD,MAAkD,EAClD,OAA8B;IAE9B,MAAM,EACJ,MAAM,EAAE,WAAW,EACnB,QAAQ,EACR,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,GACb,GAAG,gBAAgB,CAClB,KAAK,CAAC,WAAW,EACjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAC9B,MAAM,CAAC,WAAW,EAClB,OAAO,CACR,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEvF,OAAO;QACL,WAAW;QACX,WAAW;QACX,IAAI;QACJ,QAAQ;QACR,iBAAiB;QACjB,oBAAoB;QACpB,iBAAiB;QACjB,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/new.d.ts
CHANGED
|
@@ -29,12 +29,23 @@ export interface CreateArticleOptions {
|
|
|
29
29
|
byline?: string;
|
|
30
30
|
cache?: CacheDatabase;
|
|
31
31
|
candidates?: TaxonomyCandidates;
|
|
32
|
+
categories?: string[] | string;
|
|
33
|
+
tags?: string[] | string;
|
|
34
|
+
description?: string;
|
|
35
|
+
featuredImage?: string;
|
|
32
36
|
}
|
|
33
37
|
export interface CreateArticleResult {
|
|
34
38
|
id: string;
|
|
35
39
|
slug: string;
|
|
36
40
|
filePath: string;
|
|
37
41
|
fullPath: string;
|
|
42
|
+
warnings: string[];
|
|
43
|
+
assigned: {
|
|
44
|
+
categories: string[];
|
|
45
|
+
tags: string[];
|
|
46
|
+
featuredImage?: string;
|
|
47
|
+
description?: string;
|
|
48
|
+
};
|
|
38
49
|
}
|
|
39
50
|
/**
|
|
40
51
|
* Creates a brand-new article scaffold in <collection>/draft/<ulid>-<slug>.md.
|
package/dist/sync/new.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/sync/new.ts"],"names":[],"mappings":"AAyBA,OAAO,
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/sync/new.ts"],"names":[],"mappings":"AAyBA,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;CAC/B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,IAAI,6BAA6B;IACjD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,gBAAgB,EAAE,MAAM,CAAC;IACzC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,UAAU,EAAE,MAAM,CAAC;IAEnC,YAAY,OAAO,EAAE,iBAAiB,EAarC;CACF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,aAAa,GACpB,iBAAiB,GAAG,IAAI,CAwE1B;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAgBD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CAsIxF"}
|
package/dist/sync/new.js
CHANGED
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
import fs from 'node:fs';
|
|
23
23
|
import path from 'node:path';
|
|
24
24
|
import { ulid } from 'ulidx';
|
|
25
|
-
import { computeArticleRelativePath, parseMarkdown, serializeMarkdown, } from '../utils/frontmatter.js';
|
|
25
|
+
import { computeArticleRelativePath, parseMarkdown, serializeMarkdown, tryDecodeTaxonomyTerm, } from '../utils/frontmatter.js';
|
|
26
26
|
import { loadLocalTaxonomyCandidates } from './taxonomies.js';
|
|
27
|
+
import { CANONICAL_ULID_REGEX } from '../utils/ulid.js';
|
|
27
28
|
export class DuplicateSlugError extends Error {
|
|
28
29
|
code = 'DUPLICATE_SLUG_CONFLICT';
|
|
29
30
|
slug;
|
|
@@ -117,6 +118,20 @@ export function findLocalDuplicateSlug(workspaceRoot, collection, slug, cache) {
|
|
|
117
118
|
}
|
|
118
119
|
return null;
|
|
119
120
|
}
|
|
121
|
+
function normalizeStringList(input) {
|
|
122
|
+
if (!input)
|
|
123
|
+
return [];
|
|
124
|
+
if (Array.isArray(input)) {
|
|
125
|
+
return input
|
|
126
|
+
.flatMap((item) => item.split(','))
|
|
127
|
+
.map((s) => s.trim())
|
|
128
|
+
.filter(Boolean);
|
|
129
|
+
}
|
|
130
|
+
return input
|
|
131
|
+
.split(',')
|
|
132
|
+
.map((s) => s.trim())
|
|
133
|
+
.filter(Boolean);
|
|
134
|
+
}
|
|
120
135
|
/**
|
|
121
136
|
* Creates a brand-new article scaffold in <collection>/draft/<ulid>-<slug>.md.
|
|
122
137
|
* Assigns a client-side ULID immediately to guarantee ID/filename consistency (G2).
|
|
@@ -142,6 +157,60 @@ export function createArticleScaffold(options) {
|
|
|
142
157
|
initialBylines = [cached[0].slug];
|
|
143
158
|
}
|
|
144
159
|
}
|
|
160
|
+
const normalizedCategories = normalizeStringList(options.categories);
|
|
161
|
+
const normalizedTags = normalizeStringList(options.tags);
|
|
162
|
+
let initialFeaturedImage;
|
|
163
|
+
if (options.featuredImage) {
|
|
164
|
+
const trimmed = options.featuredImage.trim();
|
|
165
|
+
if (trimmed) {
|
|
166
|
+
initialFeaturedImage = CANONICAL_ULID_REGEX.test(trimmed) ? trimmed.toUpperCase() : trimmed;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
let initialSeo;
|
|
170
|
+
if (options.description) {
|
|
171
|
+
const trimmedDesc = options.description.trim();
|
|
172
|
+
if (trimmedDesc) {
|
|
173
|
+
initialSeo = {
|
|
174
|
+
description: trimmedDesc,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const candidates = options.candidates || loadLocalTaxonomyCandidates(options.workspaceRoot);
|
|
179
|
+
const warnings = [];
|
|
180
|
+
const candidateCategories = candidates.categories ?? [];
|
|
181
|
+
const candidateTags = candidates.tags ?? [];
|
|
182
|
+
const isKnownTerm = (term, canonicalList, slugToNameMap) => {
|
|
183
|
+
if (canonicalList.includes(term))
|
|
184
|
+
return true;
|
|
185
|
+
const tNorm = tryDecodeTaxonomyTerm(term).normalize('NFC').toLowerCase();
|
|
186
|
+
if (canonicalList.some((c) => tryDecodeTaxonomyTerm(c).normalize('NFC').toLowerCase() === tNorm)) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
if (slugToNameMap) {
|
|
190
|
+
for (const [k, v] of Object.entries(slugToNameMap)) {
|
|
191
|
+
if (tryDecodeTaxonomyTerm(k).normalize('NFC').toLowerCase() === tNorm)
|
|
192
|
+
return true;
|
|
193
|
+
if (v && v.normalize('NFC').toLowerCase() === tNorm)
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return false;
|
|
198
|
+
};
|
|
199
|
+
// Epistemic check: Only audit terms if local definitions exist
|
|
200
|
+
if (candidateCategories.length > 0) {
|
|
201
|
+
for (const cat of normalizedCategories) {
|
|
202
|
+
if (!isKnownTerm(cat, candidateCategories, candidates.slugToName?.category)) {
|
|
203
|
+
warnings.push(`Unknown category slug '${cat}' (not found in local categories/*.yaml definitions).`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (candidateTags.length > 0) {
|
|
208
|
+
for (const tag of normalizedTags) {
|
|
209
|
+
if (!isKnownTerm(tag, candidateTags, candidates.slugToName?.tag)) {
|
|
210
|
+
warnings.push(`Unknown tag slug '${tag}' (not found in local tags/*.yaml definitions).`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
145
214
|
const frontmatter = {
|
|
146
215
|
id,
|
|
147
216
|
slug,
|
|
@@ -151,13 +220,14 @@ export function createArticleScaffold(options) {
|
|
|
151
220
|
publishedAt: null,
|
|
152
221
|
locale,
|
|
153
222
|
taxonomies: {
|
|
154
|
-
categories:
|
|
155
|
-
tags:
|
|
223
|
+
categories: normalizedCategories,
|
|
224
|
+
tags: normalizedTags,
|
|
156
225
|
},
|
|
157
226
|
bylines: initialBylines,
|
|
227
|
+
...(initialFeaturedImage ? { featuredImage: initialFeaturedImage } : {}),
|
|
228
|
+
...(initialSeo ? { seo: initialSeo } : {}),
|
|
158
229
|
};
|
|
159
230
|
const initialBody = 'Write article body content here...\n';
|
|
160
|
-
const candidates = options.candidates || loadLocalTaxonomyCandidates(options.workspaceRoot);
|
|
161
231
|
const markdownContent = serializeMarkdown(frontmatter, initialBody, candidates);
|
|
162
232
|
const relPath = computeArticleRelativePath(collection, 'draft', id, title || slug, new Date());
|
|
163
233
|
const fullPath = path.join(options.workspaceRoot, relPath);
|
|
@@ -168,6 +238,13 @@ export function createArticleScaffold(options) {
|
|
|
168
238
|
slug,
|
|
169
239
|
filePath: relPath,
|
|
170
240
|
fullPath,
|
|
241
|
+
warnings,
|
|
242
|
+
assigned: {
|
|
243
|
+
categories: normalizedCategories,
|
|
244
|
+
tags: normalizedTags,
|
|
245
|
+
...(initialFeaturedImage ? { featuredImage: initialFeaturedImage } : {}),
|
|
246
|
+
...(initialSeo?.description ? { description: initialSeo.description } : {}),
|
|
247
|
+
},
|
|
171
248
|
};
|
|
172
249
|
}
|
|
173
250
|
//# sourceMappingURL=new.js.map
|
package/dist/sync/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/sync/new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,iBAAiB,
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/sync/new.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/preflight.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Frontmatter, type ParsedMarkdown } from '../utils/frontmatter.js';
|
|
2
|
+
import type { MediaRecordId, StorageKey } from '../utils/media-id.js';
|
|
2
3
|
import type { CacheDatabase } from '../db/cache.js';
|
|
3
4
|
export interface PreflightOptions {
|
|
4
5
|
allowPublish?: boolean;
|
|
@@ -9,8 +10,8 @@ export interface PreflightOptions {
|
|
|
9
10
|
cache?: CacheDatabase;
|
|
10
11
|
}
|
|
11
12
|
export interface PromotedMediaMatch {
|
|
12
|
-
mediaId:
|
|
13
|
-
storageKey:
|
|
13
|
+
mediaId: MediaRecordId;
|
|
14
|
+
storageKey: StorageKey;
|
|
14
15
|
url: string;
|
|
15
16
|
promotedRelPath: string;
|
|
16
17
|
}
|
|
@@ -45,6 +46,13 @@ export interface PreflightError {
|
|
|
45
46
|
message: string;
|
|
46
47
|
suggestion?: string;
|
|
47
48
|
}
|
|
49
|
+
export interface ResolvedDraftPathInfo {
|
|
50
|
+
isInsideDraftsDir: boolean;
|
|
51
|
+
isInsideMediaDir: boolean;
|
|
52
|
+
candidateAbs: string;
|
|
53
|
+
filename: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function resolveDraftImagePath(articleFilePath: string, rawImagePath: string, workspaceRoot?: string): ResolvedDraftPathInfo;
|
|
48
56
|
/**
|
|
49
57
|
* Runs Preflight Guards G2 through G11 against the article to prevent AI misbehavior.
|
|
50
58
|
* (G1 is enforced at the MCP / CLI invocation layer).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/sync/preflight.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/sync/preflight.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uFAAuF;IACvF,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,qBAAqB,CAuCvB;AA0MD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,eAAe,CAmbjB"}
|
package/dist/sync/preflight.js
CHANGED
|
@@ -28,17 +28,16 @@ import { MAX_MEDIA_UPLOAD_BYTES, resolveImageMimeType, toRootRelativeMediaUrl, }
|
|
|
28
28
|
import { stripCodeBlocks, verifyOpaqueBlocksUntampered, detectUnsupportedMarkdownSyntax, } from '../client/portable-text.js';
|
|
29
29
|
import { sanitizeTitleForFilename, } from '../utils/frontmatter.js';
|
|
30
30
|
import { MEDIA_FILE_ROUTE_PREFIX, storageKeyFromMirrorRef } from '../utils/media-body-refs.js';
|
|
31
|
-
import { storageKeyFromMediaMeta } from '
|
|
31
|
+
import { storageKeyFromMediaMeta } from '../utils/media-companion.js';
|
|
32
|
+
import { toMediaRecordId, toStorageKey } from '../utils/media-id.js';
|
|
33
|
+
import { CANONICAL_ULID_REGEX, CANONICAL_ULID_EXACT_REGEX } from '../utils/ulid.js';
|
|
32
34
|
import { findClosestTaxonomySuggestions, getLocalTaxonomiesSummary, } from './taxonomies.js';
|
|
33
35
|
const CONFLICT_MARKER_REGEX = /^<{7}\s|^={7}$|^>{7}\s/m;
|
|
34
36
|
const OPAQUE_FENCE_LINE_REGEX = /^<!--ec:block .+ -->$/;
|
|
35
37
|
const STANDALONE_IMAGE_LINE_REGEX = /^!\[([^\]]*)\]\(([^)]+)\)$/;
|
|
36
38
|
const REMOTE_OR_DATA_URL_REGEX = /^(?:https?:\/\/|data:|\/_emdash\/api\/media\/file\/)/i;
|
|
37
39
|
const ANY_LOCAL_IMAGE_REGEX = /!\[([^\]]*)\]\((?!https?:\/\/|data:|\/_emdash\/api\/media\/file\/)([^)]+)\)/g;
|
|
38
|
-
|
|
39
|
-
// case-insensitive here because parseMarkdown() normalizes local frontmatter to uppercase.
|
|
40
|
-
const CANONICAL_ULID_REGEX = /^[0-9A-HJ-NP-Z]{26}$/i;
|
|
41
|
-
function resolveDraftImagePath(articleFilePath, rawImagePath, workspaceRoot) {
|
|
40
|
+
export function resolveDraftImagePath(articleFilePath, rawImagePath, workspaceRoot) {
|
|
42
41
|
const root = workspaceRoot ? path.resolve(workspaceRoot) : '/__emit_virtual_workspace__';
|
|
43
42
|
const articleAbs = path.isAbsolute(articleFilePath)
|
|
44
43
|
? articleFilePath
|
|
@@ -159,10 +158,14 @@ function findAlreadyPromotedMedia(filename, workspaceRoot, cache) {
|
|
|
159
158
|
: '';
|
|
160
159
|
if (!canonicalUrl)
|
|
161
160
|
continue;
|
|
161
|
+
const mediaId = toMediaRecordId(meta.id);
|
|
162
|
+
const targetKey = toStorageKey(storageKey || path.basename(canonicalUrl));
|
|
163
|
+
if (!mediaId || !targetKey)
|
|
164
|
+
continue;
|
|
162
165
|
const binaryName = `${file.replace(/\.yaml$/, '')}${ext || path.extname(metaFilename) || '.jpg'}`;
|
|
163
166
|
return {
|
|
164
|
-
mediaId
|
|
165
|
-
storageKey:
|
|
167
|
+
mediaId,
|
|
168
|
+
storageKey: targetKey,
|
|
166
169
|
url: canonicalUrl,
|
|
167
170
|
promotedRelPath: path.posix.join('media', binaryName),
|
|
168
171
|
};
|
|
@@ -221,7 +224,7 @@ function findPromotedMediaByStorageKey(storageKey, options) {
|
|
|
221
224
|
if (state && state.mediaId && state.url) {
|
|
222
225
|
return {
|
|
223
226
|
mediaId: state.mediaId,
|
|
224
|
-
storageKey: state.storageKey
|
|
227
|
+
storageKey: state.storageKey,
|
|
225
228
|
url: state.url,
|
|
226
229
|
promotedRelPath: state.markdownRef || state.workspacePath || `media/${storageKey}`,
|
|
227
230
|
};
|
|
@@ -236,10 +239,16 @@ function findPromotedMediaByStorageKey(storageKey, options) {
|
|
|
236
239
|
const meta = yaml.load(fs.readFileSync(companionPath, 'utf8'));
|
|
237
240
|
if (!meta || typeof meta.id !== 'string')
|
|
238
241
|
return null;
|
|
242
|
+
const mediaId = toMediaRecordId(meta.id);
|
|
243
|
+
if (!mediaId)
|
|
244
|
+
return null;
|
|
239
245
|
const companionKey = storageKeyFromMediaMeta(meta) || storageKey;
|
|
246
|
+
const validKey = toStorageKey(companionKey);
|
|
247
|
+
if (!validKey)
|
|
248
|
+
return null;
|
|
240
249
|
return {
|
|
241
|
-
mediaId
|
|
242
|
-
storageKey:
|
|
250
|
+
mediaId,
|
|
251
|
+
storageKey: validKey,
|
|
243
252
|
url: `${MEDIA_FILE_ROUTE_PREFIX}${companionKey}`,
|
|
244
253
|
promotedRelPath: `media/${stem}`,
|
|
245
254
|
};
|
|
@@ -297,7 +306,7 @@ export function runPreflightChecks(filePath, parsed, options) {
|
|
|
297
306
|
if (!allowed.includes(term)) {
|
|
298
307
|
// Term IDs are canonical 26-char ULIDs: uppercase Crockford base32 (excludes I, L, O, U).
|
|
299
308
|
// Restricting to that alphabet prevents 26-character slugs from being mislabeled as IDs.
|
|
300
|
-
const isTermId =
|
|
309
|
+
const isTermId = CANONICAL_ULID_EXACT_REGEX.test(term);
|
|
301
310
|
const staleNote = isTermId
|
|
302
311
|
? ' (term ID was not found in local definitions and may be stale or deleted)'
|
|
303
312
|
: '';
|
|
@@ -471,7 +480,7 @@ export function runPreflightChecks(filePath, parsed, options) {
|
|
|
471
480
|
}
|
|
472
481
|
}
|
|
473
482
|
}
|
|
474
|
-
// G10: featuredImage must reference a canonical 26-character media ULID
|
|
483
|
+
// G10: featuredImage must reference a canonical 26-character media ULID, a local draft image, or null.
|
|
475
484
|
// A root-relative or absolute media URL that unambiguously contains a media ULID is
|
|
476
485
|
// accepted with a warning, because Emit resolves it to the canonical ULID on push.
|
|
477
486
|
if (frontmatter.featuredImage !== undefined && frontmatter.featuredImage !== null) {
|
|
@@ -482,11 +491,104 @@ export function runPreflightChecks(filePath, parsed, options) {
|
|
|
482
491
|
warnings.push(`featuredImage '${rawFeaturedImage}' was resolved to the canonical media ULID '${resolved}'. Prefer writing the bare 26-character ULID in frontmatter.`);
|
|
483
492
|
}
|
|
484
493
|
else {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
494
|
+
const resolvedPath = resolveDraftImagePath(filePath, rawFeaturedImage, options?.workspaceRoot);
|
|
495
|
+
if (resolvedPath.isInsideDraftsDir || resolvedPath.isInsideMediaDir) {
|
|
496
|
+
if (options?.workspaceRoot) {
|
|
497
|
+
// Check if this image was already scanned from body (R2 dedup)
|
|
498
|
+
const existingDraft = draftImages.find((d) => d.resolvedAbsPath === resolvedPath.candidateAbs);
|
|
499
|
+
if (!existingDraft) {
|
|
500
|
+
if (resolvedPath.isInsideDraftsDir) {
|
|
501
|
+
if (!fs.existsSync(resolvedPath.candidateAbs)) {
|
|
502
|
+
const promotedMatch = findAlreadyPromotedMedia(resolvedPath.filename, options.workspaceRoot, options.cache);
|
|
503
|
+
if (promotedMatch) {
|
|
504
|
+
draftImages.push({
|
|
505
|
+
line: `featuredImage: ${rawFeaturedImage}`,
|
|
506
|
+
alt: 'featured image',
|
|
507
|
+
rawPath: rawFeaturedImage,
|
|
508
|
+
filename: resolvedPath.filename,
|
|
509
|
+
resolvedAbsPath: resolvedPath.candidateAbs,
|
|
510
|
+
alreadyPromoted: promotedMatch,
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
errors.push({
|
|
515
|
+
code: 'MISSING_LOCAL_IMAGE_FILE',
|
|
516
|
+
message: `Draft image file specified in featuredImage not found on disk: '${rawFeaturedImage}' (resolved to '${resolvedPath.candidateAbs}', and no promoted asset matching '${resolvedPath.filename}' was found in media/).`,
|
|
517
|
+
suggestion: `Place "${resolvedPath.filename}" inside "media/drafts/", or if it was already promoted, look for a mirror in "media/".`,
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
const stat = fs.statSync(resolvedPath.candidateAbs);
|
|
523
|
+
if (!stat.isFile()) {
|
|
524
|
+
errors.push({
|
|
525
|
+
code: 'MISSING_LOCAL_IMAGE_FILE',
|
|
526
|
+
message: `Draft image path specified in featuredImage is not a regular file: '${rawFeaturedImage}'.`,
|
|
527
|
+
suggestion: `Ensure "${resolvedPath.filename}" is a valid image file inside "media/drafts/".`,
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
else if (!resolveImageMimeType(resolvedPath.filename)) {
|
|
531
|
+
errors.push({
|
|
532
|
+
code: 'INVALID_LOCAL_IMAGE_TYPE',
|
|
533
|
+
message: `Unsupported image file extension for featuredImage: '${resolvedPath.filename}'.`,
|
|
534
|
+
suggestion: 'Use a supported image format (.jpg, .jpeg, .png, .webp, .gif, .avif, .svg).',
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
else if (stat.size > MAX_MEDIA_UPLOAD_BYTES) {
|
|
538
|
+
errors.push({
|
|
539
|
+
code: 'LOCAL_IMAGE_SIZE_EXCEEDED',
|
|
540
|
+
message: `Draft image specified in featuredImage exceeds the 50 MiB limit: '${resolvedPath.filename}' (${stat.size} bytes).`,
|
|
541
|
+
suggestion: 'Compress or resize the image before pushing.',
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
draftImages.push({
|
|
546
|
+
line: `featuredImage: ${rawFeaturedImage}`,
|
|
547
|
+
alt: 'featured image',
|
|
548
|
+
rawPath: rawFeaturedImage,
|
|
549
|
+
filename: resolvedPath.filename,
|
|
550
|
+
resolvedAbsPath: resolvedPath.candidateAbs,
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
else if (resolvedPath.isInsideMediaDir) {
|
|
556
|
+
// Already-promoted mirror lookup (R3: two-stage lookup)
|
|
557
|
+
let promotedMatch = findAlreadyPromotedMedia(resolvedPath.filename, options.workspaceRoot, options.cache);
|
|
558
|
+
if (!promotedMatch) {
|
|
559
|
+
const directKey = storageKeyFromMirrorRef(rawFeaturedImage, confirmedStorageKeys(options));
|
|
560
|
+
if (directKey) {
|
|
561
|
+
promotedMatch = findPromotedMediaByStorageKey(directKey, options);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
if (promotedMatch) {
|
|
565
|
+
draftImages.push({
|
|
566
|
+
line: `featuredImage: ${rawFeaturedImage}`,
|
|
567
|
+
alt: 'featured image',
|
|
568
|
+
rawPath: rawFeaturedImage,
|
|
569
|
+
filename: resolvedPath.filename,
|
|
570
|
+
resolvedAbsPath: resolvedPath.candidateAbs,
|
|
571
|
+
alreadyPromoted: promotedMatch,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
errors.push({
|
|
576
|
+
code: 'MISSING_LOCAL_IMAGE_FILE',
|
|
577
|
+
message: `Mirrored media asset specified in featuredImage not found: '${rawFeaturedImage}' (no promoted asset matching '${resolvedPath.filename}' was found in media/ or recorded metadata).`,
|
|
578
|
+
suggestion: 'Ensure the image is mirrored under media/ or run "emit pull-media".',
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
errors.push({
|
|
587
|
+
code: 'INVALID_FEATURED_IMAGE',
|
|
588
|
+
message: `Invalid featuredImage in frontmatter: '${frontmatter.featuredImage}'. It must be a valid 26-character Crockford media ULID, a local draft image path inside "media/drafts/", or null.`,
|
|
589
|
+
suggestion: 'Place the image in "media/drafts/<filename>" (e.g. ../../media/drafts/eyecatch.jpg), or upload first using EmDash Admin or MCP "media_upload" and specify the returned 26-character ULID. To remove the featured image, set featuredImage: null. Local file paths outside "media/" are never allowed.',
|
|
590
|
+
});
|
|
591
|
+
}
|
|
490
592
|
}
|
|
491
593
|
}
|
|
492
594
|
}
|