emdash-emit 0.1.18 → 0.1.30
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 +249 -1
- package/README.md +22 -11
- package/dist/cli/commands/conflicts.d.ts.map +1 -1
- package/dist/cli/commands/conflicts.js +2 -22
- package/dist/cli/commands/conflicts.js.map +1 -1
- package/dist/cli/commands/delete.d.ts.map +1 -1
- package/dist/cli/commands/delete.js +1 -13
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +1 -13
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/media.d.ts.map +1 -1
- package/dist/cli/commands/media.js +1 -13
- package/dist/cli/commands/media.js.map +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +31 -13
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/pull.d.ts +1 -1
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +110 -79
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +32 -90
- package/dist/cli/commands/push.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/cli/context.d.ts +12 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +27 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/report-failure.d.ts +6 -0
- package/dist/cli/report-failure.d.ts.map +1 -0
- package/dist/cli/report-failure.js +71 -0
- package/dist/cli/report-failure.js.map +1 -0
- package/dist/client/api.d.ts +20 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +90 -1
- package/dist/client/api.js.map +1 -1
- package/dist/client/lock.js.map +1 -1
- package/dist/client/mapper.js.map +1 -1
- package/dist/client/media.d.ts.map +1 -1
- package/dist/client/media.js.map +1 -1
- package/dist/db/baseline.d.ts +19 -3
- package/dist/db/baseline.d.ts.map +1 -1
- package/dist/db/baseline.js +27 -2
- package/dist/db/baseline.js.map +1 -1
- package/dist/db/cache.d.ts +7 -3
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +24 -295
- package/dist/db/cache.js.map +1 -1
- package/dist/db/migrations.d.ts +7 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +320 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/mcp/heartbeat.d.ts +1 -34
- package/dist/mcp/heartbeat.d.ts.map +1 -1
- package/dist/mcp/heartbeat.js +1 -113
- package/dist/mcp/heartbeat.js.map +1 -1
- package/dist/mcp/tool-errors.d.ts +12 -1
- package/dist/mcp/tool-errors.d.ts.map +1 -1
- package/dist/mcp/tool-errors.js +29 -0
- package/dist/mcp/tool-errors.js.map +1 -1
- package/dist/mcp/tools/sync-conflicts.d.ts.map +1 -1
- package/dist/mcp/tools/sync-conflicts.js +46 -58
- package/dist/mcp/tools/sync-conflicts.js.map +1 -1
- package/dist/mcp/tools/sync-delete.d.ts.map +1 -1
- package/dist/mcp/tools/sync-delete.js +18 -30
- package/dist/mcp/tools/sync-delete.js.map +1 -1
- package/dist/mcp/tools/sync-diff.d.ts.map +1 -1
- package/dist/mcp/tools/sync-diff.js +10 -31
- package/dist/mcp/tools/sync-diff.js.map +1 -1
- package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
- package/dist/mcp/tools/sync-doctor.js +18 -30
- package/dist/mcp/tools/sync-doctor.js.map +1 -1
- package/dist/mcp/tools/sync-media-search.d.ts.map +1 -1
- package/dist/mcp/tools/sync-media-search.js +40 -52
- package/dist/mcp/tools/sync-media-search.js.map +1 -1
- package/dist/mcp/tools/sync-new.d.ts.map +1 -1
- package/dist/mcp/tools/sync-new.js +54 -34
- 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 +194 -220
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +64 -84
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +4 -13
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/sync/baseline-reconstruction.d.ts +43 -0
- package/dist/sync/baseline-reconstruction.d.ts.map +1 -0
- package/dist/sync/baseline-reconstruction.js +103 -0
- package/dist/sync/baseline-reconstruction.js.map +1 -0
- package/dist/sync/bylines.d.ts +5 -0
- package/dist/sync/bylines.d.ts.map +1 -1
- package/dist/sync/bylines.js +29 -0
- package/dist/sync/bylines.js.map +1 -1
- package/dist/sync/conflicts.d.ts.map +1 -1
- package/dist/sync/conflicts.js +21 -4
- package/dist/sync/conflicts.js.map +1 -1
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +12 -1
- package/dist/sync/delete.js.map +1 -1
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +62 -26
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +13 -3
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/guards.d.ts +1 -1
- package/dist/sync/guards.d.ts.map +1 -1
- package/dist/sync/guards.js +3 -2
- package/dist/sync/guards.js.map +1 -1
- package/dist/sync/media/companions.d.ts.map +1 -1
- package/dist/sync/media/companions.js.map +1 -1
- package/dist/sync/media/naming_mirror.d.ts.map +1 -1
- package/dist/sync/media/naming_mirror.js +11 -2
- package/dist/sync/media/naming_mirror.js.map +1 -1
- package/dist/sync/media/pull_article.d.ts +2 -0
- package/dist/sync/media/pull_article.d.ts.map +1 -1
- package/dist/sync/media/pull_article.js +74 -25
- 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 +34 -61
- package/dist/sync/media/pull_library.js.map +1 -1
- package/dist/sync/media/remote_index.d.ts +16 -1
- package/dist/sync/media/remote_index.d.ts.map +1 -1
- package/dist/sync/media/remote_index.js +2 -2
- package/dist/sync/media/remote_index.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 -3
- package/dist/sync/new.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +34 -0
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +89 -80
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/preflight/image_probe.d.ts +28 -0
- package/dist/sync/preflight/image_probe.d.ts.map +1 -0
- package/dist/sync/preflight/image_probe.js +70 -0
- package/dist/sync/preflight/image_probe.js.map +1 -0
- package/dist/sync/preflight.d.ts +7 -0
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +127 -31
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull/fast_path.d.ts +9 -0
- package/dist/sync/pull/fast_path.d.ts.map +1 -0
- package/dist/sync/pull/fast_path.js +341 -0
- package/dist/sync/pull/fast_path.js.map +1 -0
- package/dist/sync/pull/index.d.ts +15 -0
- package/dist/sync/pull/index.d.ts.map +1 -0
- package/dist/sync/pull/index.js +363 -0
- package/dist/sync/pull/index.js.map +1 -0
- package/dist/sync/pull/list.d.ts +22 -0
- package/dist/sync/pull/list.d.ts.map +1 -0
- package/dist/sync/pull/list.js +175 -0
- package/dist/sync/pull/list.js.map +1 -0
- package/dist/sync/pull/media_stage.d.ts +67 -0
- package/dist/sync/pull/media_stage.d.ts.map +1 -0
- package/dist/sync/pull/media_stage.js +599 -0
- package/dist/sync/pull/media_stage.js.map +1 -0
- package/dist/sync/pull/quarantine.d.ts +22 -0
- package/dist/sync/pull/quarantine.d.ts.map +1 -0
- package/dist/sync/pull/quarantine.js +174 -0
- package/dist/sync/pull/quarantine.js.map +1 -0
- package/dist/sync/pull/types.d.ts +125 -0
- package/dist/sync/pull/types.d.ts.map +1 -0
- package/dist/sync/pull/types.js +23 -0
- package/dist/sync/pull/types.js.map +1 -0
- package/dist/sync/pull.d.ts +1 -114
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +1 -806
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push/commit.d.ts +1 -0
- package/dist/sync/push/commit.d.ts.map +1 -1
- package/dist/sync/push/commit.js +58 -31
- package/dist/sync/push/commit.js.map +1 -1
- package/dist/sync/push/index.d.ts.map +1 -1
- package/dist/sync/push/index.js +30 -8
- package/dist/sync/push/index.js.map +1 -1
- package/dist/sync/push/media_stage.d.ts +17 -2
- package/dist/sync/push/media_stage.d.ts.map +1 -1
- package/dist/sync/push/media_stage.js +31 -2
- package/dist/sync/push/media_stage.js.map +1 -1
- package/dist/sync/push/merge_stage.d.ts.map +1 -1
- package/dist/sync/push/merge_stage.js +36 -22
- package/dist/sync/push/merge_stage.js.map +1 -1
- package/dist/sync/push/transport.d.ts +6 -2
- package/dist/sync/push/transport.d.ts.map +1 -1
- package/dist/sync/push/transport.js +5 -5
- package/dist/sync/push/transport.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 -55
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/taxonomies.d.ts +25 -0
- package/dist/sync/taxonomies.d.ts.map +1 -1
- package/dist/sync/taxonomies.js +180 -127
- package/dist/sync/taxonomies.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 +1 -0
- package/dist/sync/workspace/index.d.ts.map +1 -1
- package/dist/sync/workspace/index.js +1 -0
- package/dist/sync/workspace/index.js.map +1 -1
- 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 +70 -7
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/mcp-heartbeat.d.ts +36 -0
- package/dist/utils/mcp-heartbeat.d.ts.map +1 -0
- package/dist/utils/mcp-heartbeat.js +126 -0
- package/dist/utils/mcp-heartbeat.js.map +1 -0
- package/dist/utils/media-body-refs.d.ts.map +1 -1
- package/dist/utils/media-body-refs.js +2 -2
- package/dist/utils/media-body-refs.js.map +1 -1
- package/dist/utils/taxonomy-key.d.ts +25 -0
- package/dist/utils/taxonomy-key.d.ts.map +1 -0
- package/dist/utils/taxonomy-key.js +51 -0
- package/dist/utils/taxonomy-key.js.map +1 -0
- package/package.json +1 -1
|
@@ -21,14 +21,17 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import fs from 'node:fs';
|
|
23
23
|
import path from 'node:path';
|
|
24
|
+
import { extractComparisonRev } from '../../client/api.js';
|
|
24
25
|
import { ApiError } from '../../client/error.js';
|
|
25
26
|
import { apiResponseToLocal } from '../../client/mapper.js';
|
|
26
27
|
import { articleContentEndpoint } from '../../client/endpoints.js';
|
|
27
|
-
import { readBaseline, readBaselineFrontmatter
|
|
28
|
+
import { readBaseline, readBaselineFrontmatter } from '../../db/baseline.js';
|
|
28
29
|
import { serializeMarkdown, } from '../../utils/frontmatter.js';
|
|
29
30
|
import { hybrid3WayMerge } from '../merge.js';
|
|
30
31
|
import { fetchAssignedTaxonomies, computeTaxonomyHash } from '../terms.js';
|
|
31
|
-
import { calculateHash, quarantineLocalCopy } from '../workspace/index.js';
|
|
32
|
+
import { calculateHash, quarantineLocalCopy, commitArticleSnapshot } from '../workspace/index.js';
|
|
33
|
+
import { hasUncommittedDraftRevision } from '../../utils/draft-revision.js';
|
|
34
|
+
import { resolveDiskSpelling, renderForDisk } from '../../utils/disk-spelling.js';
|
|
32
35
|
import { throwRemoteArticleDeleted } from './transport.js';
|
|
33
36
|
import { pendingFlagsFor } from './commit.js';
|
|
34
37
|
/**
|
|
@@ -62,7 +65,7 @@ export async function resolveConflictAndMerge(params) {
|
|
|
62
65
|
});
|
|
63
66
|
if (!getRes.ok) {
|
|
64
67
|
if (getRes.status === 404 || getRes.status === 410) {
|
|
65
|
-
throwRemoteArticleDeleted(
|
|
68
|
+
throwRemoteArticleDeleted(id, targetFilePath, getUrl);
|
|
66
69
|
}
|
|
67
70
|
throw new ApiError({
|
|
68
71
|
message: `Failed to fetch latest remote version during conflict resolution: ${getRes.statusText}`,
|
|
@@ -174,13 +177,28 @@ export async function resolveConflictAndMerge(params) {
|
|
|
174
177
|
const isTaxonomyConflict = Boolean(mergeResult.taxonomyConflicts && mergeResult.taxonomyConflicts.length > 0);
|
|
175
178
|
const hasBodyConflict = Boolean(mergeResult.body.includes('<<<<<<< LOCAL') || mergeResult.body.includes('<<<<<<< local'));
|
|
176
179
|
const isTaxonomyOnlyConflict = isTaxonomyConflict && !hasBodyConflict;
|
|
177
|
-
const
|
|
180
|
+
const remoteComparisonRev = extractComparisonRev(remoteItem, remoteParsed.rev);
|
|
181
|
+
const hasDraft = hasUncommittedDraftRevision({
|
|
182
|
+
status: remoteParsed.frontmatter.status,
|
|
183
|
+
remoteRev: remoteComparisonRev,
|
|
184
|
+
});
|
|
185
|
+
const conflictedMarkdown = serializeMarkdown(mergeResult.frontmatter, mergeResult.body, options.candidates, { hasDraftRevision: hasDraft });
|
|
178
186
|
let quarantineRel = null;
|
|
187
|
+
let activeDiskContent = conflictedMarkdown;
|
|
179
188
|
// Only write conflict markers into the article body if body actually has conflicts
|
|
180
189
|
if (!isTaxonomyOnlyConflict) {
|
|
181
190
|
const currentDisk = fs.readFileSync(fullPath, 'utf8');
|
|
182
191
|
quarantineRel = quarantineLocalCopy(options.workspaceRoot, collection, targetFilePath, currentDisk, { isForce: false });
|
|
183
|
-
|
|
192
|
+
const spelling = resolveDiskSpelling(currentDisk, syncState);
|
|
193
|
+
activeDiskContent = renderForDisk(conflictedMarkdown, spelling, {
|
|
194
|
+
workspaceRoot: options.workspaceRoot,
|
|
195
|
+
articleRelPath: targetFilePath,
|
|
196
|
+
fs,
|
|
197
|
+
});
|
|
198
|
+
fs.writeFileSync(fullPath, activeDiskContent, 'utf8');
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
activeDiskContent = fs.readFileSync(fullPath, 'utf8');
|
|
184
202
|
}
|
|
185
203
|
let actualConflictCopyHash = null;
|
|
186
204
|
if (quarantineRel) {
|
|
@@ -198,25 +216,21 @@ export async function resolveConflictAndMerge(params) {
|
|
|
198
216
|
quarantineRelPath: quarantineRel,
|
|
199
217
|
remoteTaxonomyHash: remoteTaxHash,
|
|
200
218
|
});
|
|
201
|
-
// Update sync state
|
|
202
|
-
|
|
203
|
-
options.cache.saveSyncState({
|
|
204
|
-
id,
|
|
205
|
-
localFilePath: targetFilePath,
|
|
206
|
-
localHash: syncState?.localHash || '',
|
|
207
|
-
remoteRev: remoteParsed.rev,
|
|
208
|
-
status: parsed.frontmatter.status,
|
|
209
|
-
slug: parsed.frontmatter.slug,
|
|
210
|
-
lastSyncedAt: Math.floor(Date.now() / 1000),
|
|
211
|
-
...flags,
|
|
212
|
-
});
|
|
213
|
-
options.cache.saveBaseSnapshot(createBaseSnapshot({
|
|
219
|
+
// Update sync state and base snapshot via centralized commitArticleSnapshot
|
|
220
|
+
commitArticleSnapshot(options.cache, options.workspaceRoot, {
|
|
214
221
|
id,
|
|
215
|
-
|
|
216
|
-
|
|
222
|
+
relPath: targetFilePath,
|
|
223
|
+
diskContent: activeDiskContent,
|
|
224
|
+
canonicalContent: serializeMarkdown(remoteParsed.frontmatter, remoteParsed.body, candidates, {
|
|
225
|
+
hasDraftRevision: hasDraft,
|
|
226
|
+
}),
|
|
217
227
|
frontmatter: remoteParsed.frontmatter,
|
|
218
|
-
|
|
219
|
-
|
|
228
|
+
bodyMarkdown: remoteParsed.body,
|
|
229
|
+
revForTransport: remoteParsed.rev,
|
|
230
|
+
revForComparison: remoteComparisonRev,
|
|
231
|
+
flags,
|
|
232
|
+
skipDiskWrite: true,
|
|
233
|
+
});
|
|
220
234
|
return {
|
|
221
235
|
handled: true,
|
|
222
236
|
pushResult: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge_stage.js","sourceRoot":"","sources":["../../../src/sync/push/merge_stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"merge_stage.js","sourceRoot":"","sources":["../../../src/sync/push/merge_stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EACL,iBAAiB,GAGlB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAW9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAgB7C;IACC,MAAM,EACJ,UAAU,EACV,EAAE,EACF,cAAc,EACd,QAAQ,EACR,MAAM,EACN,GAAG,EACH,0BAA0B,EAC1B,MAAM,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,IAAI,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAElD,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,UAAU,CAAC;QAEpD,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,+CAA+C,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,GAAG;gBACvF,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,GAAG;gBACX,QAAQ,EAAE,MAAM;gBAChB,UAAU,EACR,kFAAkF;aACrF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yGAAyG;IACzG,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE;QACnC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;YACxC,MAAM,EAAE,kBAAkB;SAC3B;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACnD,yBAAyB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,qEAAqE,MAAM,CAAC,UAAU,EAAE;YACjG,IAAI,EAAE,8BAA8B;YACpC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,uDAAuD;SACpE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAA4B,CAAC;IACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE7D,wEAAwE;IACxE,MAAM,SAAS,GACb,cAAc;QACd,CAAC,MAAM,uBAAuB,CAAC;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU;YACV,EAAE;YACF,OAAO;SACR,CAAC,CAAC,CAAC;IAEN,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QACzC,YAAY,CAAC,WAAW,CAAC,UAAU,GAAG,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAClC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACxE,CAAC;SAAM,IAAI,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QAC1C,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;IAChF,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC5B,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACpC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACpE,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,MAAM,WAAW,GAAG,eAAe,CACjC,MAAM,EACN,QAAQ,EACR;QACE,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,IAAI,EAAE,YAAY,CAAC,IAAI;KACxB,EACD;QACE,QAAQ,EAAE,OAAO,CAAC,eAAe;KAClC,CACF,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,wGAAwG;IACxG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC,YAAY,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChG,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,WAAW,CAAC,MAAM,gBAAgB,CAAC;iBACvE,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,QAAQ,CAAC;gBACjB,QAAQ,EAAE,wBAAwB,UAAU,IAAI,EAAE,EAAE;gBACpD,IAAI,EAAE,2BAA2B;gBACjC,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,uDAAuD,OAAO,kDAAkD;gBACzH,UAAU,EAAE,6EAA6E,cAAc,2BAA2B;aACnI,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,WAAW,CAAC,oBAAoB,IAAI,WAAW,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC;YACpD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnF,QAAQ,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,WAAW,CAAC,iBAAiB,IAAI,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9E,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;YACjD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,IAAI,IAAI,YAAY,GAAG,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,oGAAoG;IACpG,IACE,CAAC,OAAO,CAAC,eAAe;QACxB,WAAW,CAAC,iBAAiB;QAC7B,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,OAAO,CAAC;YACzB,MAAM,eAAe,GAA6B,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;gBAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;gBACnD,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;aAC1D,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClE,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,WAAW,CAAC,WAAW,CAAC,UAAU,GAAG,eAAe,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,+CAA+C,QAAQ,IAAI,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;YAC/B,QAAQ,CAAC,IAAI,CACX,2BAA2B,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,6FAA6F,CACjK,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,kBAAkB,GAAG,OAAO,CAChC,WAAW,CAAC,iBAAiB,IAAI,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAC1E,CAAC;QACF,MAAM,eAAe,GAAG,OAAO,CAC7B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CACzF,CAAC;QACF,MAAM,sBAAsB,GAAG,kBAAkB,IAAI,CAAC,eAAe,CAAC;QAEtE,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,2BAA2B,CAAC;YAC3C,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,MAAM;YACvC,SAAS,EAAE,mBAAmB;SAC/B,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,iBAAiB,CAC1C,WAAW,CAAC,WAAW,EACvB,WAAW,CAAC,IAAI,EAChB,OAAO,CAAC,UAAU,EAClB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAC/B,CAAC;QACF,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,iBAAiB,GAAG,kBAAkB,CAAC;QAE3C,mFAAmF;QACnF,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtD,aAAa,GAAG,mBAAmB,CACjC,OAAO,CAAC,aAAa,EACrB,UAAU,EACV,cAAc,EACd,WAAW,EACX,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAC;YACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC7D,iBAAiB,GAAG,aAAa,CAAC,kBAAkB,EAAE,QAAQ,EAAE;gBAC9D,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,cAAc,EAAE,cAAc;gBAC9B,EAAE;aACH,CAAC,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,sBAAsB,GAAkB,IAAI,CAAC;QACjD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,sBAAsB,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,mBAAmB,CACvC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,EAC/C,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAC1C,CAAC;QAEF,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,IAAI,EAAE,UAAU;YAChB,eAAe;YACf,kBAAkB;YAClB,cAAc,EAAE,sBAAsB;YACtC,iBAAiB,EAAE,aAAa;YAChC,kBAAkB,EAAE,aAAa;SAClC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE;YAC1D,EAAE;YACF,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,iBAAiB;YAC9B,gBAAgB,EAAE,iBAAiB,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE;gBAC3F,gBAAgB,EAAE,QAAQ;aAC3B,CAAC;YACF,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,YAAY,EAAE,YAAY,CAAC,IAAI;YAC/B,eAAe,EAAE,YAAY,CAAC,GAAG;YACjC,gBAAgB,EAAE,mBAAmB;YACrC,KAAK;YACL,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE;gBACV,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE,IAAI;gBACd,gBAAgB,EAAE,sBAAsB;gBACxC,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IAC7C,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC/B,OAAO;QACL,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,MAAM;QACpB,eAAe,EAAE,YAAY,CAAC,GAAG;QACjC,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -2,9 +2,13 @@ import type { PushOptions } from './types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Transitions article publish/draft status via dedicated EmDash endpoints.
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export interface StatusTransitionResult {
|
|
6
|
+
rev: string;
|
|
7
|
+
rawJson?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export declare function transitionContentStatus(collection: string, id: string, targetStatus: 'draft' | 'published', currentRev: string, publishedAt: string | null | undefined, options: PushOptions, fetchFn: typeof fetch): Promise<StatusTransitionResult>;
|
|
6
10
|
/**
|
|
7
11
|
* Standardized error thrower when a remote article 404s or 410s on update.
|
|
8
12
|
*/
|
|
9
|
-
export declare function throwRemoteArticleDeleted(
|
|
13
|
+
export declare function throwRemoteArticleDeleted(id: string, targetFilePath: string, endpoint: string): never;
|
|
10
14
|
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/sync/push/transport.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,OAAO,GAAG,WAAW,EACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/sync/push/transport.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,OAAO,GAAG,WAAW,EACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAyCjC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,KAAK,CAYP"}
|
|
@@ -22,9 +22,6 @@
|
|
|
22
22
|
import { ApiError } from '../../client/error.js';
|
|
23
23
|
import { extractRev } from '../../client/api.js';
|
|
24
24
|
import { articleStatusTransitionEndpoint } from '../../client/endpoints.js';
|
|
25
|
-
/**
|
|
26
|
-
* Transitions article publish/draft status via dedicated EmDash endpoints.
|
|
27
|
-
*/
|
|
28
25
|
export async function transitionContentStatus(collection, id, targetStatus, currentRev, publishedAt, options, fetchFn) {
|
|
29
26
|
const isPublishing = targetStatus === 'published';
|
|
30
27
|
const endpoint = articleStatusTransitionEndpoint(options.origin, collection, id, isPublishing ? 'publish' : 'unpublish');
|
|
@@ -53,12 +50,15 @@ export async function transitionContentStatus(collection, id, targetStatus, curr
|
|
|
53
50
|
});
|
|
54
51
|
}
|
|
55
52
|
const json = (await res.json().catch(() => ({})));
|
|
56
|
-
return
|
|
53
|
+
return {
|
|
54
|
+
rev: extractRev(json, currentRev),
|
|
55
|
+
rawJson: json,
|
|
56
|
+
};
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
59
|
* Standardized error thrower when a remote article 404s or 410s on update.
|
|
60
60
|
*/
|
|
61
|
-
export function throwRemoteArticleDeleted(
|
|
61
|
+
export function throwRemoteArticleDeleted(id, targetFilePath, endpoint) {
|
|
62
62
|
throw new ApiError({
|
|
63
63
|
endpoint,
|
|
64
64
|
code: 'REMOTE_ARTICLE_DELETED',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/sync/push/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/sync/push/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAW5E,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,EAAU,EACV,YAAmC,EACnC,UAAkB,EAClB,WAAsC,EACtC,OAAoB,EACpB,OAAqB;IAErB,MAAM,YAAY,GAAG,YAAY,KAAK,WAAW,CAAC;IAClD,MAAM,QAAQ,GAAG,+BAA+B,CAC9C,OAAO,CAAC,MAAM,EACd,UAAU,EACV,EAAE,EACF,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CACvC,CAAC;IAEF,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC3D,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;QAClC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;YACxC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,aAAa,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,aAAa,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1H,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB;YAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ;YACR,UAAU,EAAE,YAAY;gBACtB,CAAC,CAAC,gDAAgD;gBAClD,CAAC,CAAC,kDAAkD;SACvD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAC;IAC7E,OAAO;QACL,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;QACjC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,EAAU,EACV,cAAsB,EACtB,QAAgB;IAEhB,MAAM,IAAI,QAAQ,CAAC;QACjB,QAAQ;QACR,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,qCAAqC;QAC9E,UAAU,EAAE;YACV,sHAAsH;YACtH,kDAAkD,EAAE,8DAA8D;YAClH,8CAA8C,cAAc,yBAAyB;SACtF,CAAC,IAAI,CAAC,MAAM,CAAC;KACf,CAAC,CAAC;AACL,CAAC"}
|
package/dist/sync/status.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export interface ArticleStatusItem {
|
|
|
15
15
|
deletePending?: boolean;
|
|
16
16
|
orphan?: boolean;
|
|
17
17
|
taxonomyApplyPending?: boolean;
|
|
18
|
+
/** True when a published article has unpublished draft changes on remote (@draft: composite rev). */
|
|
19
|
+
hasUnpublishedDraft?: boolean;
|
|
18
20
|
}
|
|
19
21
|
export interface WorkspaceStatusResult {
|
|
20
22
|
items: ArticleStatusItem[];
|
|
@@ -34,6 +36,7 @@ export interface WorkspaceStatusResult {
|
|
|
34
36
|
orphan: number;
|
|
35
37
|
deletePending: number;
|
|
36
38
|
taxonomyApplyPending: number;
|
|
39
|
+
hasUnpublishedDraft?: number;
|
|
37
40
|
};
|
|
38
41
|
};
|
|
39
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/sync/status.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAgBpD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC;IAC9B,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mHAAmH;IACnH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/sync/status.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAgBpD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC;IAC9B,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mHAAmH;IACnH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qGAAqG;IACrG,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,qFAAqF;QACrF,eAAe,EAAE,MAAM,CAAC;QACxB,sFAAsF;QACtF,SAAS,EAAE,MAAM,CAAC;QAClB,0FAA0F;QAC1F,KAAK,CAAC,EAAE;YACN,eAAe,EAAE,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC;YACf,aAAa,EAAE,MAAM,CAAC;YACtB,oBAAoB,EAAE,MAAM,CAAC;YAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC/B,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;CAC9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,EAAE,EAC1B,OAAO,EAAE,mBAAmB,GAC3B,iBAAiB,EAAE,CAmBrB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,UAAU,GAAE,MAAgB,GAC3B,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,EACpB,UAAU,GAAE,MAAgB,GAC3B,qBAAqB,CA0HvB"}
|
package/dist/sync/status.js
CHANGED
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import fs from 'node:fs';
|
|
23
23
|
import path from 'node:path';
|
|
24
|
-
import { baselineMarkdown } from '../db/baseline.js';
|
|
25
24
|
import { formatFrontmatterParseError, lenientRepairMarkdownFrontmatter, parseMarkdown, } from '../utils/frontmatter.js';
|
|
26
25
|
import { calculateHash, CONFLICTS_SUBDIR } from './workspace/index.js';
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
26
|
+
import { hasUncommittedDraftRevision } from '../utils/draft-revision.js';
|
|
27
|
+
import { isLocalFileUnmodified } from './baseline-reconstruction.js';
|
|
28
|
+
import { formatRevForDisplay } from '../client/api.js';
|
|
29
29
|
import { compareArticleFilenameDesc, extractUlidFromFilename, stripDatePrefix, } from '../utils/naming.js';
|
|
30
30
|
/**
|
|
31
31
|
* Filters a list of article status items based on search term, slug, publication status, or sync status.
|
|
@@ -68,39 +68,6 @@ export function countQuarantinedCopies(workspaceRoot, collection = 'posts') {
|
|
|
68
68
|
return 0;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Reports whether a file whose hash disagrees with `sync_state.local_hash` is still byte-identical to its
|
|
73
|
-
* baseline once the baseline is spelled the way the disk spells it.
|
|
74
|
-
*
|
|
75
|
-
* `base_snapshots` always stores the canonical `/_emdash/api/media/file/<storageKey>` form, so re-spelling it
|
|
76
|
-
* through `localizeArticleMediaRefs` reproduces either local spelling a workspace carries — the article-relative
|
|
77
|
-
* `../../media/<key>` or the older depth-free `media/<key>`. A match proves the divergence is purely reference
|
|
78
|
-
* spelling and not an edit, which is exactly the case `emit diff` already treats as clean; status must agree or
|
|
79
|
-
* the two diagnostics disagree. Anything that still differs after this pass is a real local edit.
|
|
80
|
-
*/
|
|
81
|
-
function isBaselineSpellingMatch(workspaceRoot, cache, relPath, localContent, currentHash) {
|
|
82
|
-
const id = extractUlidFromFilename(path.basename(relPath));
|
|
83
|
-
if (!id)
|
|
84
|
-
return false;
|
|
85
|
-
const snapshot = cache.getBaseSnapshot(id);
|
|
86
|
-
if (!snapshot)
|
|
87
|
-
return false;
|
|
88
|
-
try {
|
|
89
|
-
const candidates = loadLocalTaxonomyCandidates(workspaceRoot);
|
|
90
|
-
const baseMarkdown = baselineMarkdown(snapshot, candidates);
|
|
91
|
-
const localizedBase = localizeArticleMediaRefs(baseMarkdown, {
|
|
92
|
-
workspaceRoot,
|
|
93
|
-
articleRelPath: relPath,
|
|
94
|
-
fs,
|
|
95
|
-
preferLegacyRef: carriesDepthFreeMediaRef(localContent),
|
|
96
|
-
});
|
|
97
|
-
return calculateHash(localizedBase) === currentHash;
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
// An unreadable or malformed baseline cannot certify the file as untouched.
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
71
|
/**
|
|
105
72
|
* Scans the workspace directory and compares files against cache.db to compute sync status.
|
|
106
73
|
*/
|
|
@@ -140,24 +107,18 @@ export function getWorkspaceStatus(workspaceRoot, cache, collection = 'posts') {
|
|
|
140
107
|
const conflictPending = syncState?.conflictPending === 1;
|
|
141
108
|
const deletePending = syncState?.deletePending === 1;
|
|
142
109
|
const taxonomyApplyPending = syncState?.taxonomyApplyPending === 1;
|
|
110
|
+
const hasUnpublishedDraft = hasUncommittedDraftRevision(syncState);
|
|
143
111
|
if (syncState) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if (spellingMatch) {
|
|
155
|
-
// Re-track the file against its own bytes so later passes skip it outright instead of re-reading
|
|
156
|
-
// and re-localizing the baseline on every status call. Values are untouched — only the recorded
|
|
157
|
-
// hash catches up with the spelling already on disk.
|
|
158
|
-
cache.saveSyncState({ ...syncState, localHash: currentHash });
|
|
159
|
-
}
|
|
160
|
-
if ((hashMatches || spellingMatch) && !conflictPending && !taxonomyApplyPending) {
|
|
112
|
+
const unmodified = isLocalFileUnmodified({
|
|
113
|
+
workspaceRoot,
|
|
114
|
+
cache,
|
|
115
|
+
id: parsed.frontmatter.id,
|
|
116
|
+
relPath,
|
|
117
|
+
localContent: content,
|
|
118
|
+
currentHash,
|
|
119
|
+
syncState,
|
|
120
|
+
});
|
|
121
|
+
if (unmodified && !conflictPending && !taxonomyApplyPending) {
|
|
161
122
|
syncStatus = 'synced';
|
|
162
123
|
}
|
|
163
124
|
else {
|
|
@@ -171,7 +132,8 @@ export function getWorkspaceStatus(workspaceRoot, cache, collection = 'posts') {
|
|
|
171
132
|
status: parsed.frontmatter.status,
|
|
172
133
|
syncStatus,
|
|
173
134
|
filePath: relPath,
|
|
174
|
-
rev: syncState?.remoteRev,
|
|
135
|
+
rev: formatRevForDisplay(syncState?.remoteRev),
|
|
136
|
+
hasUnpublishedDraft: hasUnpublishedDraft || undefined,
|
|
175
137
|
conflictPending: conflictPending || undefined,
|
|
176
138
|
deletePending: deletePending || undefined,
|
|
177
139
|
taxonomyApplyPending: taxonomyApplyPending || undefined,
|
|
@@ -195,7 +157,7 @@ export function getWorkspaceStatus(workspaceRoot, cache, collection = 'posts') {
|
|
|
195
157
|
status: sub,
|
|
196
158
|
syncStatus: 'invalid',
|
|
197
159
|
filePath: relPath,
|
|
198
|
-
rev: syncState?.remoteRev,
|
|
160
|
+
rev: formatRevForDisplay(syncState?.remoteRev),
|
|
199
161
|
cached: Boolean(syncState),
|
|
200
162
|
healable: healable || undefined,
|
|
201
163
|
error: errorMsg,
|
|
@@ -218,6 +180,7 @@ export function getWorkspaceStatus(workspaceRoot, cache, collection = 'posts') {
|
|
|
218
180
|
orphan: items.filter((i) => i.orphan).length,
|
|
219
181
|
deletePending: items.filter((i) => i.deletePending).length,
|
|
220
182
|
taxonomyApplyPending: items.filter((i) => i.taxonomyApplyPending).length,
|
|
183
|
+
hasUnpublishedDraft: items.filter((i) => i.hasUnpublishedDraft).length,
|
|
221
184
|
},
|
|
222
185
|
};
|
|
223
186
|
return { items, summary };
|
package/dist/sync/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/sync/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/sync/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,14 @@ export interface PullTaxonomiesResult {
|
|
|
37
37
|
export declare function pullTaxonomies(options: PullTaxonomiesOptions): Promise<PullTaxonomiesResult>;
|
|
38
38
|
export interface LocalTaxonomyItem {
|
|
39
39
|
id: string;
|
|
40
|
+
/** Human-readable decoded slug for disk and prompts (e.g. 'ローカルガイド' or 'camera') */
|
|
40
41
|
slug: string;
|
|
42
|
+
/**
|
|
43
|
+
* Raw server canonical slug for Layer A transport/hashes (e.g. '%e3%83...' or 'camera').
|
|
44
|
+
* Optional in interface to preserve compatibility with hand-authored fixtures,
|
|
45
|
+
* but guaranteed to be populated by readTaxonomyDir() (defaults to slug when omitted).
|
|
46
|
+
*/
|
|
47
|
+
canonicalSlug?: string;
|
|
41
48
|
name: string;
|
|
42
49
|
parentId?: string | null;
|
|
43
50
|
count?: number;
|
|
@@ -57,6 +64,18 @@ export declare const DEFAULT_MAX_CATEGORIES = 50;
|
|
|
57
64
|
* Single source of truth for reading local category and tag YAML files.
|
|
58
65
|
*/
|
|
59
66
|
export declare function readTaxonomyDir(dir: string): LocalTaxonomyItem[];
|
|
67
|
+
/**
|
|
68
|
+
* Deterministic collision winner ordering: highest count first, ties broken by newest ULID (descending).
|
|
69
|
+
* Shared between Layer A (`loadLocalTaxonomyMaps`) and Layer B (`getLocalTaxonomiesSummary`)
|
|
70
|
+
* so duplicate canonical/decoded slugs always resolve to the identical winner term ID.
|
|
71
|
+
*/
|
|
72
|
+
export declare function compareTaxonomyTermDeterministically(a: {
|
|
73
|
+
id: string;
|
|
74
|
+
count?: number;
|
|
75
|
+
}, b: {
|
|
76
|
+
id: string;
|
|
77
|
+
count?: number;
|
|
78
|
+
}): number;
|
|
60
79
|
/**
|
|
61
80
|
* Loads local taxonomy mapping between term ULID and slug from categories/ and tags/ directories.
|
|
62
81
|
*/
|
|
@@ -75,6 +94,12 @@ export declare function loadLocalTaxonomyMaps(workspaceRoot: string): {
|
|
|
75
94
|
* Single source of truth for taxonomy candidate resolution across pull, push, and diff.
|
|
76
95
|
*/
|
|
77
96
|
export declare function loadLocalTaxonomyCandidates(workspaceRoot: string): TaxonomyCandidates;
|
|
97
|
+
/**
|
|
98
|
+
* Sorts taxonomy terms deterministically and deduplicates by slug, keeping the winner term.
|
|
99
|
+
* Mode 'slug-grouped' orders by slug ASC first (used for categories display).
|
|
100
|
+
* Mode 'frequency' orders by highest count first, newest ULID break (used for tags display).
|
|
101
|
+
*/
|
|
102
|
+
export declare function dedupeTermsBySlug(items: LocalTaxonomyItem[], mode?: 'slug-grouped' | 'frequency'): LocalTaxonomyItem[];
|
|
78
103
|
/**
|
|
79
104
|
* Reads local categories/ and tags/ YAML definitions and returns structured summary.
|
|
80
105
|
* Tags are sorted by count descending (most used first), then by ULID descending (newest first).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomies.d.ts","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"AAyBA,OAAO,
|
|
1
|
+
{"version":3,"file":"taxonomies.d.ts","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"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"}
|