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
package/dist/sync/taxonomies.js
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
import fs from 'node:fs';
|
|
23
23
|
import path from 'node:path';
|
|
24
24
|
import yaml from 'js-yaml';
|
|
25
|
-
import { formatYamlScalar, sanitizeTitleForFilename, } from '../utils/frontmatter.js';
|
|
25
|
+
import { formatYamlScalar, sanitizeTitleForFilename, tryDecodeTaxonomyTerm, } from '../utils/frontmatter.js';
|
|
26
|
+
import { aliasesOf, canonicalSlugOf } from '../utils/taxonomy-key.js';
|
|
26
27
|
/**
|
|
27
28
|
* Recursively flattens hierarchical taxonomy terms (parent terms with nested children)
|
|
28
29
|
* preserving parentId for each child.
|
|
@@ -53,6 +54,64 @@ import { ApiError } from '../client/error.js';
|
|
|
53
54
|
import { createAuthedFetch } from '../client/http.js';
|
|
54
55
|
import { unwrapEnvelope } from '../client/api.js';
|
|
55
56
|
import { taxonomiesTermsEndpoint } from '../client/endpoints.js';
|
|
57
|
+
/**
|
|
58
|
+
* Serializes a category or tag definition to YAML.
|
|
59
|
+
* Emits decoded slug on disk and keeps raw percent-encoded slug as canonicalSlug when they differ.
|
|
60
|
+
* Uses formatYamlScalar to prevent type coercion of reserved words or numeric strings,
|
|
61
|
+
* and ensures 1-line scalar output to prevent js-yaml folded blocks (> -).
|
|
62
|
+
*/
|
|
63
|
+
function serializeTaxonomyYaml(doc) {
|
|
64
|
+
const lines = [
|
|
65
|
+
`id: ${formatYamlScalar(doc.id)}`,
|
|
66
|
+
`name: ${formatYamlScalar(doc.name)}`,
|
|
67
|
+
`slug: ${formatYamlScalar(doc.slug)}`,
|
|
68
|
+
];
|
|
69
|
+
if (doc.canonicalSlug && doc.canonicalSlug !== doc.slug) {
|
|
70
|
+
lines.push(`canonicalSlug: ${formatYamlScalar(doc.canonicalSlug)}`);
|
|
71
|
+
}
|
|
72
|
+
lines.push(`taxonomy: ${formatYamlScalar(doc.taxonomy)}`);
|
|
73
|
+
lines.push(`parentId: ${doc.parentId ? formatYamlScalar(doc.parentId) : 'null'}`);
|
|
74
|
+
lines.push(`count: ${doc.count}`);
|
|
75
|
+
return lines.join('\n') + '\n';
|
|
76
|
+
}
|
|
77
|
+
function writeAndPruneTaxonomyDir(params) {
|
|
78
|
+
fs.mkdirSync(params.dir, { recursive: true });
|
|
79
|
+
const activeFileNames = new Set();
|
|
80
|
+
for (const item of params.items) {
|
|
81
|
+
const label = item.label || item.slug;
|
|
82
|
+
const sanitized = sanitizeTitleForFilename(label);
|
|
83
|
+
const fileName = `${item.id}-${sanitized}.yaml`;
|
|
84
|
+
activeFileNames.add(fileName);
|
|
85
|
+
const filePath = path.join(params.dir, fileName);
|
|
86
|
+
const rawSlug = item.slug;
|
|
87
|
+
const decodedSlug = tryDecodeTaxonomyTerm(rawSlug);
|
|
88
|
+
const doc = {
|
|
89
|
+
id: item.id,
|
|
90
|
+
name: label,
|
|
91
|
+
slug: decodedSlug,
|
|
92
|
+
...(decodedSlug !== rawSlug ? { canonicalSlug: rawSlug } : {}),
|
|
93
|
+
taxonomy: params.taxonomy,
|
|
94
|
+
parentId: item.parentId || null,
|
|
95
|
+
count: item.count ?? 0,
|
|
96
|
+
};
|
|
97
|
+
fs.writeFileSync(filePath, serializeTaxonomyYaml(doc), 'utf8');
|
|
98
|
+
}
|
|
99
|
+
let deletedCount = 0;
|
|
100
|
+
if (fs.existsSync(params.dir)) {
|
|
101
|
+
for (const file of fs.readdirSync(params.dir)) {
|
|
102
|
+
if (file.endsWith('.yaml') && !activeFileNames.has(file)) {
|
|
103
|
+
try {
|
|
104
|
+
fs.unlinkSync(path.join(params.dir, file));
|
|
105
|
+
deletedCount++;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Ignore unlink errors
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { count: params.items.length, deletedCount };
|
|
114
|
+
}
|
|
56
115
|
/**
|
|
57
116
|
* Pulls categories and tags from EmDash API and saves them to local YAML files:
|
|
58
117
|
* categories/<id>-<sanitizedLabel>.yaml
|
|
@@ -95,77 +154,25 @@ export async function pullTaxonomies(options) {
|
|
|
95
154
|
let deletedCategoriesCount = 0;
|
|
96
155
|
// Save categories and prune deleted ones (only if fetch succeeded; preserve on failure)
|
|
97
156
|
if (categories !== null) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
activeCategoryFileNames.add(fileName);
|
|
106
|
-
const filePath = path.join(categoriesDir, fileName);
|
|
107
|
-
const doc = {
|
|
108
|
-
id: cat.id,
|
|
109
|
-
name: label,
|
|
110
|
-
slug: cat.slug,
|
|
111
|
-
taxonomy: 'category',
|
|
112
|
-
parentId: cat.parentId || null,
|
|
113
|
-
count: cat.count ?? 0,
|
|
114
|
-
};
|
|
115
|
-
fs.writeFileSync(filePath, yaml.dump(doc, { indent: 2, quotingType: '"', forceQuotes: false }), 'utf8');
|
|
116
|
-
}
|
|
117
|
-
// Prune local category YAMLs not present on remote
|
|
118
|
-
if (fs.existsSync(categoriesDir)) {
|
|
119
|
-
for (const file of fs.readdirSync(categoriesDir)) {
|
|
120
|
-
if (file.endsWith('.yaml') && !activeCategoryFileNames.has(file)) {
|
|
121
|
-
try {
|
|
122
|
-
fs.unlinkSync(path.join(categoriesDir, file));
|
|
123
|
-
deletedCategoriesCount++;
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
// Ignore unlink errors
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
157
|
+
const res = writeAndPruneTaxonomyDir({
|
|
158
|
+
dir: categoriesDir,
|
|
159
|
+
items: categories,
|
|
160
|
+
taxonomy: 'category',
|
|
161
|
+
});
|
|
162
|
+
categoriesCount = res.count;
|
|
163
|
+
deletedCategoriesCount = res.deletedCount;
|
|
131
164
|
}
|
|
132
165
|
let tagsCount = 0;
|
|
133
166
|
let deletedTagsCount = 0;
|
|
134
167
|
// Save tags and prune deleted ones (only if fetch succeeded; preserve on failure)
|
|
135
168
|
if (tags !== null) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
activeTagFileNames.add(fileName);
|
|
144
|
-
const filePath = path.join(tagsDir, fileName);
|
|
145
|
-
const doc = {
|
|
146
|
-
id: tag.id,
|
|
147
|
-
name: label,
|
|
148
|
-
slug: tag.slug,
|
|
149
|
-
taxonomy: 'tag',
|
|
150
|
-
parentId: tag.parentId || null,
|
|
151
|
-
count: tag.count ?? 0,
|
|
152
|
-
};
|
|
153
|
-
fs.writeFileSync(filePath, yaml.dump(doc, { indent: 2, quotingType: '"', forceQuotes: false }), 'utf8');
|
|
154
|
-
}
|
|
155
|
-
// Prune local tag YAMLs not present on remote
|
|
156
|
-
if (fs.existsSync(tagsDir)) {
|
|
157
|
-
for (const file of fs.readdirSync(tagsDir)) {
|
|
158
|
-
if (file.endsWith('.yaml') && !activeTagFileNames.has(file)) {
|
|
159
|
-
try {
|
|
160
|
-
fs.unlinkSync(path.join(tagsDir, file));
|
|
161
|
-
deletedTagsCount++;
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
// Ignore unlink errors
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
+
const res = writeAndPruneTaxonomyDir({
|
|
170
|
+
dir: tagsDir,
|
|
171
|
+
items: tags,
|
|
172
|
+
taxonomy: 'tag',
|
|
173
|
+
});
|
|
174
|
+
tagsCount = res.count;
|
|
175
|
+
deletedTagsCount = res.deletedCount;
|
|
169
176
|
}
|
|
170
177
|
return {
|
|
171
178
|
categoriesCount,
|
|
@@ -193,10 +200,35 @@ export function readTaxonomyDir(dir) {
|
|
|
193
200
|
const content = fs.readFileSync(path.join(dir, file), 'utf8');
|
|
194
201
|
const data = yaml.load(content);
|
|
195
202
|
if (data && typeof data.id === 'string' && typeof data.slug === 'string') {
|
|
203
|
+
const rawSlug = String(data.slug).trim();
|
|
204
|
+
if (!rawSlug)
|
|
205
|
+
continue;
|
|
206
|
+
const rawCanonical = typeof data.canonicalSlug === 'string' && data.canonicalSlug.trim()
|
|
207
|
+
? data.canonicalSlug.trim()
|
|
208
|
+
: undefined;
|
|
209
|
+
let slug;
|
|
210
|
+
let canonicalSlug;
|
|
211
|
+
if (rawCanonical && rawSlug) {
|
|
212
|
+
// New format (v0.1.26): canonicalSlug is explicit
|
|
213
|
+
slug = rawSlug;
|
|
214
|
+
canonicalSlug = rawCanonical;
|
|
215
|
+
}
|
|
216
|
+
else if (rawSlug.includes('%')) {
|
|
217
|
+
// Legacy format (v0.1.25): slug is percent-encoded
|
|
218
|
+
const decoded = tryDecodeTaxonomyTerm(rawSlug);
|
|
219
|
+
slug = decoded;
|
|
220
|
+
canonicalSlug = rawSlug;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Standard ASCII slug
|
|
224
|
+
slug = rawSlug;
|
|
225
|
+
canonicalSlug = rawSlug;
|
|
226
|
+
}
|
|
196
227
|
items.push({
|
|
197
228
|
id: data.id,
|
|
198
|
-
slug
|
|
199
|
-
|
|
229
|
+
slug,
|
|
230
|
+
canonicalSlug,
|
|
231
|
+
name: typeof data.name === 'string' ? data.name : slug,
|
|
200
232
|
parentId: typeof data.parentId === 'string' ? data.parentId : null,
|
|
201
233
|
count: typeof data.count === 'number' ? data.count : undefined,
|
|
202
234
|
});
|
|
@@ -212,55 +244,56 @@ export function readTaxonomyDir(dir) {
|
|
|
212
244
|
return [];
|
|
213
245
|
}
|
|
214
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* Deterministic collision winner ordering: highest count first, ties broken by newest ULID (descending).
|
|
249
|
+
* Shared between Layer A (`loadLocalTaxonomyMaps`) and Layer B (`getLocalTaxonomiesSummary`)
|
|
250
|
+
* so duplicate canonical/decoded slugs always resolve to the identical winner term ID.
|
|
251
|
+
*/
|
|
252
|
+
export function compareTaxonomyTermDeterministically(a, b) {
|
|
253
|
+
const countDiff = (b.count ?? 0) - (a.count ?? 0);
|
|
254
|
+
if (countDiff !== 0)
|
|
255
|
+
return countDiff;
|
|
256
|
+
return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
|
|
257
|
+
}
|
|
215
258
|
/**
|
|
216
259
|
* Loads local taxonomy mapping between term ULID and slug from categories/ and tags/ directories.
|
|
217
260
|
*/
|
|
218
261
|
export function loadLocalTaxonomyMaps(workspaceRoot) {
|
|
219
262
|
const catItems = readTaxonomyDir(path.join(workspaceRoot, 'categories'));
|
|
220
263
|
const tagItems = readTaxonomyDir(path.join(workspaceRoot, 'tags'));
|
|
221
|
-
|
|
222
|
-
// Ensures the chosen mapping for duplicate slugs matches getLocalTaxonomiesSummary.
|
|
223
|
-
const sortDeterministically = (items) => [...items].sort((a, b) => {
|
|
224
|
-
const countDiff = (b.count ?? 0) - (a.count ?? 0);
|
|
225
|
-
if (countDiff !== 0)
|
|
226
|
-
return countDiff;
|
|
227
|
-
return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
|
|
228
|
-
});
|
|
264
|
+
const sortDeterministically = (items) => [...items].sort(compareTaxonomyTermDeterministically);
|
|
229
265
|
const toMaps = (items) => {
|
|
230
266
|
const slugToId = {};
|
|
231
267
|
const idToSlug = {};
|
|
232
268
|
const sorted = sortDeterministically(items);
|
|
233
|
-
// 1
|
|
269
|
+
// Phase 1: Register canonical slugs first (Track 1 / Layer A truth)
|
|
234
270
|
for (const item of sorted) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
271
|
+
const canonical = canonicalSlugOf(item);
|
|
272
|
+
idToSlug[item.id] = canonical;
|
|
273
|
+
if (!slugToId[canonical]) {
|
|
274
|
+
slugToId[canonical] = item.id;
|
|
238
275
|
}
|
|
239
276
|
}
|
|
240
|
-
// 2
|
|
241
|
-
// Only register an alias if it does not collide with
|
|
277
|
+
// Phase 2: Collect candidate aliases (decoded slug and human-readable name)
|
|
278
|
+
// Only register an alias if it does not collide with ANY canonical slug and maps uniquely to 1 term ID.
|
|
242
279
|
const aliasToIds = new Map();
|
|
243
280
|
const recordAliasCandidate = (alias, id) => {
|
|
244
281
|
if (!alias || !alias.trim())
|
|
245
282
|
return;
|
|
246
|
-
const
|
|
247
|
-
let set = aliasToIds.get(
|
|
283
|
+
const normalized = alias.trim().normalize('NFC');
|
|
284
|
+
let set = aliasToIds.get(normalized);
|
|
248
285
|
if (!set) {
|
|
249
286
|
set = new Set();
|
|
250
|
-
aliasToIds.set(
|
|
287
|
+
aliasToIds.set(normalized, set);
|
|
251
288
|
}
|
|
252
289
|
set.add(id);
|
|
253
290
|
};
|
|
254
291
|
for (const item of sorted) {
|
|
255
292
|
recordAliasCandidate(item.name, item.id);
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
catch {
|
|
262
|
-
// Ignore malformed percent-encoding (URIError)
|
|
263
|
-
}
|
|
293
|
+
const canonical = canonicalSlugOf(item);
|
|
294
|
+
const isCanonicalOwner = slugToId[canonical] === item.id;
|
|
295
|
+
if (isCanonicalOwner && item.slug && item.slug !== canonical) {
|
|
296
|
+
recordAliasCandidate(item.slug, item.id);
|
|
264
297
|
}
|
|
265
298
|
}
|
|
266
299
|
for (const [alias, ids] of aliasToIds.entries()) {
|
|
@@ -293,17 +326,33 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
|
|
|
293
326
|
const summary = getLocalTaxonomiesSummary(workspaceRoot);
|
|
294
327
|
const catMap = {};
|
|
295
328
|
for (const c of summary.categories) {
|
|
296
|
-
if (c.name && c.slug)
|
|
329
|
+
if (c.name && c.slug) {
|
|
297
330
|
catMap[c.slug] = c.name;
|
|
331
|
+
const decoded = tryDecodeTaxonomyTerm(c.slug);
|
|
332
|
+
if (decoded !== c.slug) {
|
|
333
|
+
catMap[decoded] = c.name;
|
|
334
|
+
}
|
|
335
|
+
if (c.canonicalSlug && c.canonicalSlug !== c.slug) {
|
|
336
|
+
catMap[c.canonicalSlug] = c.name;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
298
339
|
}
|
|
299
340
|
const tagMap = {};
|
|
300
341
|
for (const t of summary.tags) {
|
|
301
|
-
if (t.name && t.slug)
|
|
342
|
+
if (t.name && t.slug) {
|
|
302
343
|
tagMap[t.slug] = t.name;
|
|
344
|
+
const decoded = tryDecodeTaxonomyTerm(t.slug);
|
|
345
|
+
if (decoded !== t.slug) {
|
|
346
|
+
tagMap[decoded] = t.name;
|
|
347
|
+
}
|
|
348
|
+
if (t.canonicalSlug && t.canonicalSlug !== t.slug) {
|
|
349
|
+
tagMap[t.canonicalSlug] = t.name;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
303
352
|
}
|
|
304
353
|
return {
|
|
305
|
-
categories: Array.from(new Set(summary.categories.
|
|
306
|
-
tags: Array.from(new Set(summary.tags.
|
|
354
|
+
categories: Array.from(new Set(summary.categories.flatMap((c) => aliasesOf(c)))),
|
|
355
|
+
tags: Array.from(new Set(summary.tags.flatMap((t) => aliasesOf(t)))),
|
|
307
356
|
slugToName: {
|
|
308
357
|
category: catMap,
|
|
309
358
|
tag: tagMap,
|
|
@@ -318,6 +367,31 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
|
|
|
318
367
|
};
|
|
319
368
|
}
|
|
320
369
|
}
|
|
370
|
+
/**
|
|
371
|
+
* Sorts taxonomy terms deterministically and deduplicates by slug, keeping the winner term.
|
|
372
|
+
* Mode 'slug-grouped' orders by slug ASC first (used for categories display).
|
|
373
|
+
* Mode 'frequency' orders by highest count first, newest ULID break (used for tags display).
|
|
374
|
+
*/
|
|
375
|
+
export function dedupeTermsBySlug(items, mode = 'frequency') {
|
|
376
|
+
const sorted = [...items].sort((a, b) => {
|
|
377
|
+
if (mode === 'slug-grouped') {
|
|
378
|
+
if (a.slug < b.slug)
|
|
379
|
+
return -1;
|
|
380
|
+
if (a.slug > b.slug)
|
|
381
|
+
return 1;
|
|
382
|
+
}
|
|
383
|
+
return compareTaxonomyTermDeterministically(a, b);
|
|
384
|
+
});
|
|
385
|
+
const seen = new Set();
|
|
386
|
+
const result = [];
|
|
387
|
+
for (const item of sorted) {
|
|
388
|
+
if (!seen.has(item.slug)) {
|
|
389
|
+
seen.add(item.slug);
|
|
390
|
+
result.push(item);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return result;
|
|
394
|
+
}
|
|
321
395
|
/**
|
|
322
396
|
* Reads local categories/ and tags/ YAML definitions and returns structured summary.
|
|
323
397
|
* Tags are sorted by count descending (most used first), then by ULID descending (newest first).
|
|
@@ -327,34 +401,12 @@ export function loadLocalTaxonomyCandidates(workspaceRoot) {
|
|
|
327
401
|
export function getLocalTaxonomiesSummary(workspaceRoot) {
|
|
328
402
|
const categoriesDir = path.join(workspaceRoot, 'categories');
|
|
329
403
|
const tagsDir = path.join(workspaceRoot, 'tags');
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
if (!seen.has(item.slug)) {
|
|
335
|
-
seen.add(item.slug);
|
|
336
|
-
result.push(item);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
return result;
|
|
340
|
-
};
|
|
341
|
-
const categories = dedupeBySlug(readTaxonomyDir(categoriesDir).sort((a, b) => {
|
|
342
|
-
if (a.slug < b.slug)
|
|
343
|
-
return -1;
|
|
344
|
-
if (a.slug > b.slug)
|
|
345
|
-
return 1;
|
|
346
|
-
const countDiff = (b.count ?? 0) - (a.count ?? 0);
|
|
347
|
-
if (countDiff !== 0)
|
|
348
|
-
return countDiff;
|
|
349
|
-
return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
|
|
350
|
-
}));
|
|
404
|
+
// Primary sort key `slug` asc orders distinct categories for display; within identical `slug` groups
|
|
405
|
+
// (`a.slug === b.slug`), `compareTaxonomyTermDeterministically` decides the winner kept by `dedupeTermsBySlug`,
|
|
406
|
+
// guaranteeing 100% winner parity with `loadLocalTaxonomyMaps`.
|
|
407
|
+
const categories = dedupeTermsBySlug(readTaxonomyDir(categoriesDir), 'slug-grouped');
|
|
351
408
|
// Sort tags: highest count (usage frequency) first; ties broken by newest ULID (descending)
|
|
352
|
-
const tags =
|
|
353
|
-
const countDiff = (b.count ?? 0) - (a.count ?? 0);
|
|
354
|
-
if (countDiff !== 0)
|
|
355
|
-
return countDiff;
|
|
356
|
-
return b.id < a.id ? -1 : b.id > a.id ? 1 : 0;
|
|
357
|
-
}));
|
|
409
|
+
const tags = dedupeTermsBySlug(readTaxonomyDir(tagsDir), 'frequency');
|
|
358
410
|
return { categories, tags };
|
|
359
411
|
}
|
|
360
412
|
/**
|
|
@@ -365,8 +417,9 @@ export function formatTaxonomiesHint(summary, options) {
|
|
|
365
417
|
const maxCategories = options?.maxCategories ?? DEFAULT_MAX_CATEGORIES;
|
|
366
418
|
const maxTags = options?.maxTags ?? DEFAULT_MAX_TAGS;
|
|
367
419
|
const formatItem = (item) => {
|
|
368
|
-
const
|
|
369
|
-
|
|
420
|
+
const decodedSlug = tryDecodeTaxonomyTerm(item.slug);
|
|
421
|
+
const formattedSlug = formatYamlScalar(decodedSlug);
|
|
422
|
+
return decodedSlug.trim().toLowerCase() === item.name.trim().toLowerCase()
|
|
370
423
|
? formattedSlug
|
|
371
424
|
: `${formattedSlug} (${item.name})`;
|
|
372
425
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomies.js","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taxonomies.js","sourceRoot":"","sources":["../../src/sync/taxonomies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import type { CacheDatabase, SyncState } from '../../db/cache.js';
|
|
3
|
+
import type { Frontmatter } from '../../utils/frontmatter.js';
|
|
4
|
+
export interface ArticleCommitInput {
|
|
5
|
+
/** 26-character canonical ULID of the article */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Final canonical relative file path (e.g. 'posts/published/20261113_...md') */
|
|
8
|
+
relPath: string;
|
|
9
|
+
/** Actual string content to write to disk in disk spelling */
|
|
10
|
+
diskContent: string;
|
|
11
|
+
/** Explicit local hash override (e.g. when preserving unpushed local edits) */
|
|
12
|
+
localHash?: string;
|
|
13
|
+
/** Canonical string content used for baseline hash (defaults to diskContent if omitted) */
|
|
14
|
+
canonicalContent?: string;
|
|
15
|
+
/** Frontmatter object for Layer A storage (remote-derived only, no synthetic values) */
|
|
16
|
+
frontmatter: Frontmatter;
|
|
17
|
+
/** Canonical body Markdown for Layer A storage */
|
|
18
|
+
bodyMarkdown: string;
|
|
19
|
+
/** Track 1 raw server revision token for base_snapshots.rev */
|
|
20
|
+
revForTransport: string;
|
|
21
|
+
/** Track 2 composite revision key for sync_state.remote_rev */
|
|
22
|
+
revForComparison: string;
|
|
23
|
+
/** Optional sync state flags (e.g. conflict flags, taxonomy hash) */
|
|
24
|
+
flags?: Partial<SyncState>;
|
|
25
|
+
/** When true, keeps existing frontmatter/body in base_snapshots and only updates baseline hash */
|
|
26
|
+
bumpBaselineHashOnly?: boolean;
|
|
27
|
+
/** Custom timestamp in epoch seconds (defaults to Math.floor(Date.now() / 1000)) */
|
|
28
|
+
savedAt?: number;
|
|
29
|
+
/** Whether to skip writing diskContent to disk (e.g. when already written or conflict quarantine only) */
|
|
30
|
+
skipDiskWrite?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface ArticleCommitResult {
|
|
33
|
+
localHash: string;
|
|
34
|
+
baselineHash: string;
|
|
35
|
+
fullPath: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Centralized article commit function (Phase 0 Refactoring).
|
|
39
|
+
* Encapsulates the 4 core synchronization invariants:
|
|
40
|
+
* 1. localHash strictly matches SHA-256 of diskContent
|
|
41
|
+
* 2. baselineHash strictly matches SHA-256 of canonicalContent
|
|
42
|
+
* 3. frontmatter in base_snapshots stores remote-derived clean values (Layer A)
|
|
43
|
+
* 4. revForTransport and revForComparison are strictly separated between Track 1 and Track 2
|
|
44
|
+
*/
|
|
45
|
+
export declare function commitArticleSnapshot(cache: CacheDatabase, workspaceRoot: string, input: ArticleCommitInput, customFs?: typeof fs): ArticleCommitResult;
|
|
46
|
+
//# sourceMappingURL=commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../../src/sync/workspace/commit.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,WAAW,EAAE,WAAW,CAAC;IACzB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,kGAAkG;IAClG,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0GAA0G;IAC1G,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,GAAE,OAAO,EAAO,GACvB,mBAAmB,CAwDrB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2026 SPORT-SERVICE RS★R
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
* in the Software without restriction, including without limitation the rights
|
|
7
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
* furnished to do so, subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
* SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
import fs from 'node:fs';
|
|
23
|
+
import path from 'node:path';
|
|
24
|
+
import { createBaseSnapshot } from '../../db/baseline.js';
|
|
25
|
+
import { calculateHash } from './index.js';
|
|
26
|
+
/**
|
|
27
|
+
* Centralized article commit function (Phase 0 Refactoring).
|
|
28
|
+
* Encapsulates the 4 core synchronization invariants:
|
|
29
|
+
* 1. localHash strictly matches SHA-256 of diskContent
|
|
30
|
+
* 2. baselineHash strictly matches SHA-256 of canonicalContent
|
|
31
|
+
* 3. frontmatter in base_snapshots stores remote-derived clean values (Layer A)
|
|
32
|
+
* 4. revForTransport and revForComparison are strictly separated between Track 1 and Track 2
|
|
33
|
+
*/
|
|
34
|
+
export function commitArticleSnapshot(cache, workspaceRoot, input, customFs = fs) {
|
|
35
|
+
const fullPath = path.resolve(workspaceRoot, input.relPath);
|
|
36
|
+
const localHash = input.localHash ?? calculateHash(input.diskContent);
|
|
37
|
+
const baselineHash = input.canonicalContent ? calculateHash(input.canonicalContent) : localHash;
|
|
38
|
+
// 1. Disk mutation (unless caller opted out)
|
|
39
|
+
if (!input.skipDiskWrite) {
|
|
40
|
+
customFs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
41
|
+
customFs.writeFileSync(fullPath, input.diskContent, 'utf8');
|
|
42
|
+
}
|
|
43
|
+
// 2. Atomic database transaction
|
|
44
|
+
const timestamp = input.savedAt ?? Math.floor(Date.now() / 1000);
|
|
45
|
+
cache.runTransaction(() => {
|
|
46
|
+
// Base snapshot update
|
|
47
|
+
if (input.bumpBaselineHashOnly) {
|
|
48
|
+
const existingBase = cache.getBaseSnapshot(input.id);
|
|
49
|
+
if (existingBase) {
|
|
50
|
+
cache.saveBaseSnapshot({
|
|
51
|
+
...existingBase,
|
|
52
|
+
hash: baselineHash,
|
|
53
|
+
savedAt: timestamp,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
cache.saveBaseSnapshot(createBaseSnapshot({
|
|
59
|
+
id: input.id,
|
|
60
|
+
rev: input.revForTransport,
|
|
61
|
+
bodyMarkdown: input.bodyMarkdown,
|
|
62
|
+
frontmatter: input.frontmatter,
|
|
63
|
+
hash: baselineHash,
|
|
64
|
+
savedAt: timestamp,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
// Sync state update
|
|
68
|
+
cache.saveSyncState({
|
|
69
|
+
id: input.id,
|
|
70
|
+
localFilePath: input.relPath,
|
|
71
|
+
localHash,
|
|
72
|
+
remoteRev: input.revForComparison,
|
|
73
|
+
status: input.frontmatter.status,
|
|
74
|
+
slug: input.frontmatter.slug,
|
|
75
|
+
lastSyncedAt: timestamp,
|
|
76
|
+
...input.flags,
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
localHash,
|
|
81
|
+
baselineHash,
|
|
82
|
+
fullPath,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../src/sync/workspace/commit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqC3C;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAoB,EACpB,aAAqB,EACrB,KAAyB,EACzB,QAAQ,GAAc,EAAE;IAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhG,6CAA6C;IAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,iCAAiC;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAEjE,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE;QACxB,uBAAuB;QACvB,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,CAAC,gBAAgB,CAAC;oBACrB,GAAG,YAAY;oBACf,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,SAAS;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,gBAAgB,CACpB,kBAAkB,CAAC;gBACjB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,GAAG,EAAE,KAAK,CAAC,eAAe;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,SAAS;aACnB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,KAAK,CAAC,aAAa,CAAC;YAClB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,aAAa,EAAE,KAAK,CAAC,OAAO;YAC5B,SAAS;YACT,SAAS,EAAE,KAAK,CAAC,gBAAgB;YACjC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;YAChC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;YAC5B,YAAY,EAAE,SAAS;YACvB,GAAG,KAAK,CAAC,KAAK;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS;QACT,YAAY;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -38,4 +38,5 @@ export declare function quarantineLocalCopy(workspaceRoot: string, collection: s
|
|
|
38
38
|
isForce?: boolean;
|
|
39
39
|
existingCopyHash?: string | null;
|
|
40
40
|
}): string | null;
|
|
41
|
+
export { commitArticleSnapshot, type ArticleCommitInput, type ArticleCommitResult, } from './commit.js';
|
|
41
42
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/workspace/index.ts"],"names":[],"mappings":"AA4BA,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,MAAM,EAAE,CAiBV;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IACL,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,EACD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GACA,MAAM,GAAG,IAAI,CAuCf"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/workspace/index.ts"],"names":[],"mappings":"AA4BA,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,MAAM,EAAE,CAiBV;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IACL,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,EACD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GACA,MAAM,GAAG,IAAI,CAuCf;AAED,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC"}
|