@leadcms/sdk 3.3.12 → 3.5.0
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/README.md +2 -1
- package/dist/cli/bin/content-status-args.d.ts +7 -0
- package/dist/cli/bin/content-status-args.d.ts.map +1 -0
- package/dist/cli/bin/content-status-args.js +27 -0
- package/dist/cli/bin/content-status-args.js.map +1 -0
- package/dist/cli/bin/login.js +1 -1
- package/dist/cli/bin/login.js.map +1 -1
- package/dist/cli/bin/pull-all.js +4 -2
- package/dist/cli/bin/pull-all.js.map +1 -1
- package/dist/cli/bin/pull-comments.js +3 -1
- package/dist/cli/bin/pull-comments.js.map +1 -1
- package/dist/cli/bin/pull-content.js +6 -2
- package/dist/cli/bin/pull-content.js.map +1 -1
- package/dist/cli/bin/pull-email-templates.js +3 -1
- package/dist/cli/bin/pull-email-templates.js.map +1 -1
- package/dist/cli/bin/pull-media.js +3 -1
- package/dist/cli/bin/pull-media.js.map +1 -1
- package/dist/cli/bin/pull-settings.js +2 -0
- package/dist/cli/bin/pull-settings.js.map +1 -1
- package/dist/cli/bin/push-all.js +12 -1
- package/dist/cli/bin/push-all.js.map +1 -1
- package/dist/cli/bin/push-comments.d.ts +6 -0
- package/dist/cli/bin/push-comments.d.ts.map +1 -0
- package/dist/cli/bin/push-comments.js +35 -0
- package/dist/cli/bin/push-comments.js.map +1 -0
- package/dist/cli/bin/push-content.js +7 -4
- package/dist/cli/bin/push-content.js.map +1 -1
- package/dist/cli/bin/push-email-templates.js +3 -1
- package/dist/cli/bin/push-email-templates.js.map +1 -1
- package/dist/cli/bin/push-media.js +2 -0
- package/dist/cli/bin/push-media.js.map +1 -1
- package/dist/cli/bin/push-settings.js +2 -0
- package/dist/cli/bin/push-settings.js.map +1 -1
- package/dist/cli/bin/push.js +5 -3
- package/dist/cli/bin/push.js.map +1 -1
- package/dist/cli/bin/remote-flag.d.ts +17 -0
- package/dist/cli/bin/remote-flag.d.ts.map +1 -0
- package/dist/cli/bin/remote-flag.js +50 -0
- package/dist/cli/bin/remote-flag.js.map +1 -0
- package/dist/cli/bin/remote.d.ts +14 -0
- package/dist/cli/bin/remote.d.ts.map +1 -0
- package/dist/cli/bin/remote.js +291 -0
- package/dist/cli/bin/remote.js.map +1 -0
- package/dist/cli/bin/status-all.js +67 -4
- package/dist/cli/bin/status-all.js.map +1 -1
- package/dist/cli/bin/status-comments.d.ts +6 -0
- package/dist/cli/bin/status-comments.d.ts.map +1 -0
- package/dist/cli/bin/status-comments.js +30 -0
- package/dist/cli/bin/status-comments.js.map +1 -0
- package/dist/cli/bin/status-content.js +6 -2
- package/dist/cli/bin/status-content.js.map +1 -1
- package/dist/cli/bin/status-email-templates.js +3 -1
- package/dist/cli/bin/status-email-templates.js.map +1 -1
- package/dist/cli/bin/status-media.js +2 -0
- package/dist/cli/bin/status-media.js.map +1 -1
- package/dist/cli/bin/status-settings.js +2 -0
- package/dist/cli/bin/status-settings.js.map +1 -1
- package/dist/cli/bin/status.js +5 -2
- package/dist/cli/bin/status.js.map +1 -1
- package/dist/cli/bin/watch.js +6 -3
- package/dist/cli/bin/watch.js.map +1 -1
- package/dist/cli/index.js +65 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.d.ts +1 -1
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +5 -5
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/cms.d.ts +7 -7
- package/dist/lib/cms.d.ts.map +1 -1
- package/dist/lib/cms.js +41 -7
- package/dist/lib/cms.js.map +1 -1
- package/dist/lib/comment-types.d.ts +4 -0
- package/dist/lib/comment-types.d.ts.map +1 -1
- package/dist/lib/config.d.ts +6 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +37 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/content-merge.d.ts.map +1 -1
- package/dist/lib/content-merge.js +102 -19
- package/dist/lib/content-merge.js.map +1 -1
- package/dist/lib/content-transformation.d.ts +5 -0
- package/dist/lib/content-transformation.d.ts.map +1 -1
- package/dist/lib/content-transformation.js +49 -2
- package/dist/lib/content-transformation.js.map +1 -1
- package/dist/lib/data-service.d.ts +47 -1
- package/dist/lib/data-service.d.ts.map +1 -1
- package/dist/lib/data-service.js +143 -0
- package/dist/lib/data-service.js.map +1 -1
- package/dist/lib/remote-context.d.ts +98 -0
- package/dist/lib/remote-context.d.ts.map +1 -0
- package/dist/lib/remote-context.js +297 -0
- package/dist/lib/remote-context.js.map +1 -0
- package/dist/scripts/init-leadcms.d.ts.map +1 -1
- package/dist/scripts/init-leadcms.js +127 -15
- package/dist/scripts/init-leadcms.js.map +1 -1
- package/dist/scripts/leadcms-helpers.d.ts +16 -5
- package/dist/scripts/leadcms-helpers.d.ts.map +1 -1
- package/dist/scripts/leadcms-helpers.js +31 -8
- package/dist/scripts/leadcms-helpers.js.map +1 -1
- package/dist/scripts/login-leadcms.d.ts +4 -1
- package/dist/scripts/login-leadcms.d.ts.map +1 -1
- package/dist/scripts/login-leadcms.js +45 -6
- package/dist/scripts/login-leadcms.js.map +1 -1
- package/dist/scripts/pull-all.d.ts +14 -6
- package/dist/scripts/pull-all.d.ts.map +1 -1
- package/dist/scripts/pull-all.js +86 -33
- package/dist/scripts/pull-all.js.map +1 -1
- package/dist/scripts/pull-comments.d.ts +3 -0
- package/dist/scripts/pull-comments.d.ts.map +1 -1
- package/dist/scripts/pull-comments.js +4 -4
- package/dist/scripts/pull-comments.js.map +1 -1
- package/dist/scripts/pull-content.d.ts +14 -0
- package/dist/scripts/pull-content.d.ts.map +1 -1
- package/dist/scripts/pull-content.js +85 -8
- package/dist/scripts/pull-content.js.map +1 -1
- package/dist/scripts/pull-email-templates.d.ts +3 -0
- package/dist/scripts/pull-email-templates.d.ts.map +1 -1
- package/dist/scripts/pull-email-templates.js +4 -4
- package/dist/scripts/pull-email-templates.js.map +1 -1
- package/dist/scripts/{fetch-leadcms-comments.d.ts → pull-leadcms-comments.d.ts} +10 -4
- package/dist/scripts/pull-leadcms-comments.d.ts.map +1 -0
- package/dist/scripts/{fetch-leadcms-comments.js → pull-leadcms-comments.js} +62 -32
- package/dist/scripts/pull-leadcms-comments.js.map +1 -0
- package/dist/scripts/{fetch-leadcms-content.d.ts → pull-leadcms-content.d.ts} +13 -19
- package/dist/scripts/pull-leadcms-content.d.ts.map +1 -0
- package/dist/scripts/{fetch-leadcms-content.js → pull-leadcms-content.js} +121 -250
- package/dist/scripts/pull-leadcms-content.js.map +1 -0
- package/dist/scripts/{fetch-leadcms-email-templates.d.ts → pull-leadcms-email-templates.d.ts} +5 -4
- package/dist/scripts/pull-leadcms-email-templates.d.ts.map +1 -0
- package/dist/scripts/{fetch-leadcms-email-templates.js → pull-leadcms-email-templates.js} +89 -11
- package/dist/scripts/pull-leadcms-email-templates.js.map +1 -0
- package/dist/scripts/pull-leadcms-media.d.ts +32 -0
- package/dist/scripts/pull-leadcms-media.d.ts.map +1 -0
- package/dist/scripts/pull-leadcms-media.js +229 -0
- package/dist/scripts/pull-leadcms-media.js.map +1 -0
- package/dist/scripts/pull-media.d.ts +4 -1
- package/dist/scripts/pull-media.d.ts.map +1 -1
- package/dist/scripts/pull-media.js +4 -4
- package/dist/scripts/pull-media.js.map +1 -1
- package/dist/scripts/push-comments.d.ts +48 -0
- package/dist/scripts/push-comments.d.ts.map +1 -0
- package/dist/scripts/push-comments.js +433 -0
- package/dist/scripts/push-comments.js.map +1 -0
- package/dist/scripts/push-email-templates.d.ts +6 -1
- package/dist/scripts/push-email-templates.d.ts.map +1 -1
- package/dist/scripts/push-email-templates.js +96 -21
- package/dist/scripts/push-email-templates.js.map +1 -1
- package/dist/scripts/push-leadcms-content.d.ts +24 -8
- package/dist/scripts/push-leadcms-content.d.ts.map +1 -1
- package/dist/scripts/push-leadcms-content.js +192 -56
- package/dist/scripts/push-leadcms-content.js.map +1 -1
- package/dist/scripts/sse-watcher.d.ts +9 -8
- package/dist/scripts/sse-watcher.d.ts.map +1 -1
- package/dist/scripts/sse-watcher.js +59 -52
- package/dist/scripts/sse-watcher.js.map +1 -1
- package/leadcms.config.json.sample +12 -1
- package/package.json +2 -3
- package/dist/scripts/fetch-leadcms-comments.d.ts.map +0 -1
- package/dist/scripts/fetch-leadcms-comments.js.map +0 -1
- package/dist/scripts/fetch-leadcms-content.d.ts.map +0 -1
- package/dist/scripts/fetch-leadcms-content.js.map +0 -1
- package/dist/scripts/fetch-leadcms-email-templates.d.ts.map +0 -1
- package/dist/scripts/fetch-leadcms-email-templates.js.map +0 -1
|
@@ -6,6 +6,9 @@ import { leadCMSUrl, leadCMSApiKey, defaultLanguage, EMAIL_TEMPLATES_DIR, } from
|
|
|
6
6
|
import { parseEmailTemplateFileContent, transformEmailTemplateRemoteToLocalFormat, } from "../lib/email-template-transformation.js";
|
|
7
7
|
import { threeWayMerge, isLocallyModified } from "../lib/content-merge.js";
|
|
8
8
|
import { leadCMSDataService } from "../lib/data-service.js";
|
|
9
|
+
import { syncTokenPath } from "../lib/remote-context.js";
|
|
10
|
+
import { getConfig } from "../lib/config.js";
|
|
11
|
+
import { logger } from "../lib/logger.js";
|
|
9
12
|
const SYNC_TOKEN_PATH = path.join(EMAIL_TEMPLATES_DIR, ".sync-token");
|
|
10
13
|
async function readFileOrUndefined(filePath) {
|
|
11
14
|
try {
|
|
@@ -15,16 +18,43 @@ async function readFileOrUndefined(filePath) {
|
|
|
15
18
|
return undefined;
|
|
16
19
|
}
|
|
17
20
|
}
|
|
18
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Read the email-templates sync token.
|
|
23
|
+
* When remoteCtx is provided, reads from the remote-specific state directory.
|
|
24
|
+
*/
|
|
25
|
+
async function readSyncToken(remoteCtx) {
|
|
26
|
+
if (remoteCtx) {
|
|
27
|
+
const tokenPath = syncTokenPath(remoteCtx, "email-templates");
|
|
28
|
+
const token = await readFileOrUndefined(tokenPath);
|
|
29
|
+
if (token)
|
|
30
|
+
return { token, migrated: false };
|
|
31
|
+
// Migration: check old single-remote path
|
|
32
|
+
const legacyToken = await readFileOrUndefined(SYNC_TOKEN_PATH);
|
|
33
|
+
if (legacyToken) {
|
|
34
|
+
logger.verbose(`[SYNC] Migrating email-templates sync token to remote "${remoteCtx.name}"`);
|
|
35
|
+
return { token: legacyToken, migrated: true };
|
|
36
|
+
}
|
|
37
|
+
return { token: undefined, migrated: false };
|
|
38
|
+
}
|
|
39
|
+
const token = await readFileOrUndefined(SYNC_TOKEN_PATH);
|
|
40
|
+
return { token, migrated: false };
|
|
41
|
+
}
|
|
42
|
+
async function writeSyncToken(token, remoteCtx) {
|
|
43
|
+
if (remoteCtx) {
|
|
44
|
+
const tokenPath = syncTokenPath(remoteCtx, "email-templates");
|
|
45
|
+
await fs.mkdir(path.dirname(tokenPath), { recursive: true });
|
|
46
|
+
await fs.writeFile(tokenPath, token, "utf8");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
19
49
|
await fs.mkdir(path.dirname(SYNC_TOKEN_PATH), { recursive: true });
|
|
20
50
|
await fs.writeFile(SYNC_TOKEN_PATH, token, "utf8");
|
|
21
51
|
}
|
|
22
|
-
async function
|
|
52
|
+
async function pullEmailTemplateSync(syncToken) {
|
|
23
53
|
if (!leadCMSUrl) {
|
|
24
54
|
throw new Error("LeadCMS URL is not configured.");
|
|
25
55
|
}
|
|
26
56
|
if (!leadCMSApiKey) {
|
|
27
|
-
throw new Error("LeadCMS API key is required to
|
|
57
|
+
throw new Error("LeadCMS API key is required to pull email templates.");
|
|
28
58
|
}
|
|
29
59
|
let allItems = [];
|
|
30
60
|
let allDeleted = [];
|
|
@@ -171,9 +201,25 @@ async function deleteEmailTemplateFilesById(index, id) {
|
|
|
171
201
|
}
|
|
172
202
|
index.delete(id);
|
|
173
203
|
}
|
|
174
|
-
export async function
|
|
175
|
-
const lastSyncToken = await
|
|
176
|
-
const { items, deleted, baseItems, nextSyncToken } = await
|
|
204
|
+
export async function pullLeadCMSEmailTemplates(remoteCtx) {
|
|
205
|
+
const { token: lastSyncToken } = await readSyncToken(remoteCtx);
|
|
206
|
+
const { items, deleted, baseItems, nextSyncToken } = await pullEmailTemplateSync(lastSyncToken);
|
|
207
|
+
// Load per-remote metadata for multi-remote support
|
|
208
|
+
let metadataMap;
|
|
209
|
+
const rcModule = remoteCtx ? await import('../lib/remote-context.js') : undefined;
|
|
210
|
+
if (remoteCtx && rcModule) {
|
|
211
|
+
metadataMap = await rcModule.readMetadataMap(remoteCtx);
|
|
212
|
+
}
|
|
213
|
+
// Load defaultRemote's maps so frontmatter always reflects the default
|
|
214
|
+
// remote's ids and timestamps, even when pulling from another remote.
|
|
215
|
+
let defaultMetadataMap;
|
|
216
|
+
if (remoteCtx && !remoteCtx.isDefault && rcModule) {
|
|
217
|
+
const cfg = getConfig();
|
|
218
|
+
if (cfg.defaultRemote) {
|
|
219
|
+
const defaultCtx = rcModule.resolveRemote(cfg.defaultRemote, cfg);
|
|
220
|
+
defaultMetadataMap = await rcModule.readMetadataMap(defaultCtx);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
177
223
|
// The sync API returns emailGroup: null — resolve from the groups endpoint
|
|
178
224
|
if (items.length > 0) {
|
|
179
225
|
const emailGroups = await leadCMSDataService.getAllEmailGroups();
|
|
@@ -207,6 +253,33 @@ export async function fetchLeadCMSEmailTemplates() {
|
|
|
207
253
|
for (const template of items) {
|
|
208
254
|
const idStr = template.id != null ? String(template.id) : undefined;
|
|
209
255
|
const filePath = getEmailTemplateFilePath(template);
|
|
256
|
+
// Update per-remote metadata with this template's data
|
|
257
|
+
if (remoteCtx && rcModule && metadataMap && template.name && template.language) {
|
|
258
|
+
if (template.id != null) {
|
|
259
|
+
rcModule.setEmailTemplateRemoteId(metadataMap, template.language || defaultLanguage, template.name, template.id);
|
|
260
|
+
}
|
|
261
|
+
rcModule.setMetadataForEmailTemplate(metadataMap, template.language || defaultLanguage, template.name, {
|
|
262
|
+
createdAt: template.createdAt,
|
|
263
|
+
updatedAt: template.updatedAt ?? undefined,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
// For non-default remotes, replace server-generated fields with the
|
|
267
|
+
// defaultRemote's values so frontmatter always reflects prod ids/dates.
|
|
268
|
+
// The current remote's values are already stored in its per-remote maps.
|
|
269
|
+
let templateToSave = template;
|
|
270
|
+
if (remoteCtx && !remoteCtx.isDefault) {
|
|
271
|
+
const { id, createdAt, updatedAt, ...rest } = template;
|
|
272
|
+
const lang = template.language || defaultLanguage;
|
|
273
|
+
const name = template.name || '';
|
|
274
|
+
const defaultId = defaultMetadataMap?.emailTemplates?.[lang]?.[name]?.id;
|
|
275
|
+
const defaultMeta = defaultMetadataMap?.emailTemplates?.[lang]?.[name];
|
|
276
|
+
templateToSave = {
|
|
277
|
+
...(defaultId != null ? { id: defaultId } : {}),
|
|
278
|
+
...(defaultMeta?.createdAt ? { createdAt: defaultMeta.createdAt } : {}),
|
|
279
|
+
...(defaultMeta?.updatedAt ? { updatedAt: defaultMeta.updatedAt } : {}),
|
|
280
|
+
...rest,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
210
283
|
let localContent = null;
|
|
211
284
|
try {
|
|
212
285
|
localContent = await fs.readFile(filePath, "utf8");
|
|
@@ -220,7 +293,7 @@ export async function fetchLeadCMSEmailTemplates() {
|
|
|
220
293
|
const baseTemplate = idStr ? baseItems[idStr] : undefined;
|
|
221
294
|
if (localContent && baseTemplate && hasBaseItems) {
|
|
222
295
|
const baseTransformed = transformEmailTemplateRemoteToLocalFormat(baseTemplate);
|
|
223
|
-
const remoteTransformed = transformEmailTemplateRemoteToLocalFormat(
|
|
296
|
+
const remoteTransformed = transformEmailTemplateRemoteToLocalFormat(templateToSave);
|
|
224
297
|
if (!isLocallyModified(baseTransformed, localContent)) {
|
|
225
298
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
226
299
|
await fs.writeFile(filePath, remoteTransformed, "utf8");
|
|
@@ -241,7 +314,7 @@ export async function fetchLeadCMSEmailTemplates() {
|
|
|
241
314
|
}
|
|
242
315
|
}
|
|
243
316
|
else {
|
|
244
|
-
await saveEmailTemplateFile(
|
|
317
|
+
await saveEmailTemplateFile(templateToSave);
|
|
245
318
|
if (localContent) {
|
|
246
319
|
overwrittenCount++;
|
|
247
320
|
}
|
|
@@ -264,9 +337,14 @@ export async function fetchLeadCMSEmailTemplates() {
|
|
|
264
337
|
for (const id of deleted) {
|
|
265
338
|
await deleteEmailTemplateFilesById(idIndex, String(id));
|
|
266
339
|
}
|
|
340
|
+
// Persist per-remote metadata after processing all templates
|
|
341
|
+
if (remoteCtx && rcModule && metadataMap && items.length > 0) {
|
|
342
|
+
await rcModule.writeMetadataMap(remoteCtx, metadataMap);
|
|
343
|
+
logger.verbose(`[PULL] Updated metadata-map for remote "${remoteCtx.name}"`);
|
|
344
|
+
}
|
|
267
345
|
if (nextSyncToken) {
|
|
268
|
-
await writeSyncToken(nextSyncToken);
|
|
346
|
+
await writeSyncToken(nextSyncToken, remoteCtx);
|
|
269
347
|
}
|
|
270
348
|
}
|
|
271
|
-
export { buildEmailTemplateIdIndex, deleteEmailTemplateFilesById, saveEmailTemplateFile,
|
|
272
|
-
//# sourceMappingURL=
|
|
349
|
+
export { buildEmailTemplateIdIndex, deleteEmailTemplateFilesById, saveEmailTemplateFile, pullEmailTemplateSync };
|
|
350
|
+
//# sourceMappingURL=pull-leadcms-email-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-leadcms-email-templates.js","sourceRoot":"","sources":["../../src/scripts/pull-leadcms-email-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import type { RemoteContext } from "../lib/remote-context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Options for pullLeadCMSMedia.
|
|
5
|
+
*/
|
|
6
|
+
export interface PullMediaOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Remote context for multi-remote support. When provided, sync tokens and
|
|
9
|
+
* API calls use this remote's URL and per-remote state directory.
|
|
10
|
+
* When omitted, falls back to single-remote behavior (backward compat).
|
|
11
|
+
*/
|
|
12
|
+
remoteContext?: RemoteContext;
|
|
13
|
+
}
|
|
14
|
+
export interface MediaItem {
|
|
15
|
+
location?: string;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}
|
|
18
|
+
export interface MediaDeletedItem {
|
|
19
|
+
scopeUid: string;
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
export interface MediaSyncResult {
|
|
23
|
+
items: MediaItem[];
|
|
24
|
+
deleted: MediaDeletedItem[];
|
|
25
|
+
nextSyncToken: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Pull and sync media files from LeadCMS.
|
|
29
|
+
*/
|
|
30
|
+
declare function main(options?: PullMediaOptions): Promise<void>;
|
|
31
|
+
export { main as pullLeadCMSMedia };
|
|
32
|
+
//# sourceMappingURL=pull-leadcms-media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-leadcms-media.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-leadcms-media.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAWvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAGD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAgJD;;GAEG;AACH,iBAAe,IAAI,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGjE;AAED,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import { downloadMediaFileDirect, leadCMSUrl, leadCMSApiKey, MEDIA_DIR, } from "./leadcms-helpers.js";
|
|
6
|
+
import { logger } from "../lib/logger.js";
|
|
7
|
+
import { syncTokenPath } from "../lib/remote-context.js";
|
|
8
|
+
const MEDIA_PROGRESS_LOG_INTERVAL = 5;
|
|
9
|
+
// ── Sync token paths ───────────────────────────────────────────────────
|
|
10
|
+
const MEDIA_SYNC_TOKEN_PATH = path.join(MEDIA_DIR, ".sync-token");
|
|
11
|
+
// Legacy location (SDK ≤ 3.2): tokens lived in the parent of mediaDir.
|
|
12
|
+
const LEGACY_MEDIA_SYNC_TOKEN_PATH = path.join(path.dirname(MEDIA_DIR), "media-sync-token.txt");
|
|
13
|
+
/**
|
|
14
|
+
* Read a file and return its trimmed contents, or undefined if it doesn't exist.
|
|
15
|
+
*/
|
|
16
|
+
async function readFileOrUndefined(filePath) {
|
|
17
|
+
try {
|
|
18
|
+
return (await fs.readFile(filePath, "utf8")).trim() || undefined;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Silently delete a file (no-op if missing).
|
|
26
|
+
*/
|
|
27
|
+
async function unlinkSafe(filePath) {
|
|
28
|
+
try {
|
|
29
|
+
await fs.unlink(filePath);
|
|
30
|
+
}
|
|
31
|
+
catch { /* not found — ok */ }
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read media sync token. Checks new location first, then falls back to legacy.
|
|
35
|
+
* When remoteCtx is provided, reads from the remote-specific state directory.
|
|
36
|
+
*/
|
|
37
|
+
async function readMediaSyncToken(remoteCtx) {
|
|
38
|
+
if (remoteCtx) {
|
|
39
|
+
const tokenPath = syncTokenPath(remoteCtx, "media");
|
|
40
|
+
const token = await readFileOrUndefined(tokenPath);
|
|
41
|
+
if (token)
|
|
42
|
+
return { token, migrated: false };
|
|
43
|
+
// Migration: check old single-remote path
|
|
44
|
+
const legacyToken = await readFileOrUndefined(MEDIA_SYNC_TOKEN_PATH);
|
|
45
|
+
if (legacyToken) {
|
|
46
|
+
logger.verbose(`[SYNC] Migrating media sync token to remote "${remoteCtx.name}"`);
|
|
47
|
+
return { token: legacyToken, migrated: true };
|
|
48
|
+
}
|
|
49
|
+
return { token: undefined, migrated: false };
|
|
50
|
+
}
|
|
51
|
+
const token = await readFileOrUndefined(MEDIA_SYNC_TOKEN_PATH);
|
|
52
|
+
if (token)
|
|
53
|
+
return { token, migrated: false };
|
|
54
|
+
const legacy = await readFileOrUndefined(LEGACY_MEDIA_SYNC_TOKEN_PATH);
|
|
55
|
+
if (legacy) {
|
|
56
|
+
logger.verbose(`[SYNC] Migrating media sync token from legacy location`);
|
|
57
|
+
return { token: legacy, migrated: true };
|
|
58
|
+
}
|
|
59
|
+
return { token: undefined, migrated: false };
|
|
60
|
+
}
|
|
61
|
+
async function writeMediaSyncToken(token, remoteCtx) {
|
|
62
|
+
if (remoteCtx) {
|
|
63
|
+
const tokenPath = syncTokenPath(remoteCtx, "media");
|
|
64
|
+
await fs.mkdir(path.dirname(tokenPath), { recursive: true });
|
|
65
|
+
await fs.writeFile(tokenPath, token, "utf8");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await fs.mkdir(path.dirname(MEDIA_SYNC_TOKEN_PATH), { recursive: true });
|
|
69
|
+
await fs.writeFile(MEDIA_SYNC_TOKEN_PATH, token, "utf8");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Clean up legacy media sync token after successful migration.
|
|
73
|
+
*/
|
|
74
|
+
async function cleanupLegacyMediaSyncToken() {
|
|
75
|
+
await unlinkSafe(LEGACY_MEDIA_SYNC_TOKEN_PATH);
|
|
76
|
+
}
|
|
77
|
+
async function pullMediaSync(syncToken, baseUrl) {
|
|
78
|
+
const effectiveUrl = baseUrl || leadCMSUrl;
|
|
79
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Starting with syncToken: ${syncToken || "NONE"}`);
|
|
80
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Pulling public media (no authentication)`);
|
|
81
|
+
let allItems = [];
|
|
82
|
+
let allDeleted = [];
|
|
83
|
+
let token = syncToken || "";
|
|
84
|
+
let nextSyncToken = undefined;
|
|
85
|
+
let page = 0;
|
|
86
|
+
while (true) {
|
|
87
|
+
const url = new URL("/api/media/sync", effectiveUrl);
|
|
88
|
+
url.searchParams.set("filter[limit]", "100");
|
|
89
|
+
url.searchParams.set("syncToken", token);
|
|
90
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Page ${page}, URL: ${url.toString()}`);
|
|
91
|
+
try {
|
|
92
|
+
// SECURITY: Never send API key for read operations
|
|
93
|
+
// Media sync should only return public files
|
|
94
|
+
const res = await axios.get(url.toString());
|
|
95
|
+
if (res.status === 204) {
|
|
96
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Got 204 No Content - ending sync`);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
const data = res.data;
|
|
100
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Page ${page} - Got ${data.items?.length || 0} items, ${data.deleted?.length || 0} deleted`);
|
|
101
|
+
if (data.items && Array.isArray(data.items))
|
|
102
|
+
allItems.push(...data.items);
|
|
103
|
+
if (data.deleted && Array.isArray(data.deleted)) {
|
|
104
|
+
allDeleted.push(...data.deleted);
|
|
105
|
+
}
|
|
106
|
+
const newSyncToken = res.headers["x-next-sync-token"] || token;
|
|
107
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Next sync token: ${newSyncToken}`);
|
|
108
|
+
if (!newSyncToken || newSyncToken === token) {
|
|
109
|
+
nextSyncToken = newSyncToken || token;
|
|
110
|
+
logger.verbose(`[PULL_MEDIA_SYNC] No new sync token - ending sync`);
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
nextSyncToken = newSyncToken;
|
|
114
|
+
token = newSyncToken;
|
|
115
|
+
page++;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error(`[PULL_MEDIA_SYNC] Failed on page ${page}:`, error.message);
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
logger.verbose(`[PULL_MEDIA_SYNC] Completed - Total items: ${allItems.length}, deleted: ${allDeleted.length}`);
|
|
123
|
+
return {
|
|
124
|
+
items: allItems,
|
|
125
|
+
deleted: allDeleted,
|
|
126
|
+
nextSyncToken: nextSyncToken || token,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Pull and sync media files from LeadCMS.
|
|
131
|
+
*/
|
|
132
|
+
async function main(options = {}) {
|
|
133
|
+
const { remoteContext: remoteCtx } = options;
|
|
134
|
+
const effectiveUrl = remoteCtx?.url || leadCMSUrl;
|
|
135
|
+
const effectiveApiKey = remoteCtx?.apiKey || leadCMSApiKey;
|
|
136
|
+
logger.verbose(`[PULL_MEDIA] LeadCMS URL: ${effectiveUrl}`);
|
|
137
|
+
logger.verbose(`[PULL_MEDIA] Media Dir: ${MEDIA_DIR}`);
|
|
138
|
+
if (remoteCtx) {
|
|
139
|
+
logger.verbose(`[PULL_MEDIA] Remote: ${remoteCtx.name}`);
|
|
140
|
+
}
|
|
141
|
+
await fs.mkdir(MEDIA_DIR, { recursive: true });
|
|
142
|
+
const { token: lastMediaSyncToken, migrated: mediaTokenMigrated } = await readMediaSyncToken(remoteCtx);
|
|
143
|
+
let mediaItems = [];
|
|
144
|
+
let mediaDeleted = [];
|
|
145
|
+
let nextMediaSyncToken = "";
|
|
146
|
+
try {
|
|
147
|
+
if (lastMediaSyncToken) {
|
|
148
|
+
logger.verbose(`Syncing media from LeadCMS using sync token: ${lastMediaSyncToken}`);
|
|
149
|
+
({ items: mediaItems, deleted: mediaDeleted, nextSyncToken: nextMediaSyncToken } = await pullMediaSync(lastMediaSyncToken, effectiveUrl));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
logger.verbose("No media sync token found. Doing full pull from LeadCMS...");
|
|
153
|
+
({ items: mediaItems, deleted: mediaDeleted, nextSyncToken: nextMediaSyncToken } = await pullMediaSync(undefined, effectiveUrl));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.error(`[PULL_MEDIA] Failed to pull media:`, error.message);
|
|
158
|
+
if (error.response?.status === 401) {
|
|
159
|
+
console.error(`[PULL_MEDIA] Authentication failed - check your LEADCMS_API_KEY`);
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
logger.verbose(`Pulled ${mediaItems.length} media items, ${mediaDeleted.length} deleted.\x1b[0m`);
|
|
164
|
+
// Download new/updated media files
|
|
165
|
+
console.log(`🖼️ Processing media sync (${mediaItems.length} downloads, ${mediaDeleted.length} deletions)...`);
|
|
166
|
+
if (mediaItems.length > 0) {
|
|
167
|
+
logger.verbose(`\nProcessing media changes...`);
|
|
168
|
+
let downloaded = 0;
|
|
169
|
+
let attemptedDownloads = 0;
|
|
170
|
+
for (const mediaItem of mediaItems) {
|
|
171
|
+
if (mediaItem.location) {
|
|
172
|
+
attemptedDownloads++;
|
|
173
|
+
if (attemptedDownloads === 1
|
|
174
|
+
|| attemptedDownloads % MEDIA_PROGRESS_LOG_INTERVAL === 0
|
|
175
|
+
|| attemptedDownloads === mediaItems.length) {
|
|
176
|
+
console.log(` ⬇️ Media download progress: ${attemptedDownloads}/${mediaItems.length}`);
|
|
177
|
+
}
|
|
178
|
+
const relPath = mediaItem.location.replace(/^\/api\/media\//, "");
|
|
179
|
+
const destPath = path.join(MEDIA_DIR, relPath);
|
|
180
|
+
const didDownload = await downloadMediaFileDirect(mediaItem.location, destPath, effectiveUrl || "", effectiveApiKey || "");
|
|
181
|
+
if (didDownload) {
|
|
182
|
+
logger.verbose(`Downloaded: ${mediaItem.location} -> ${destPath}`);
|
|
183
|
+
downloaded++;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
console.log(`Done. ${downloaded} media files downloaded.`);
|
|
188
|
+
}
|
|
189
|
+
else if (mediaDeleted.length === 0) {
|
|
190
|
+
console.log(`No media changes detected.`);
|
|
191
|
+
}
|
|
192
|
+
// Remove deleted media files from local filesystem
|
|
193
|
+
if (mediaDeleted.length > 0) {
|
|
194
|
+
console.log(`Removing ${mediaDeleted.length} deleted media files...`);
|
|
195
|
+
let removedCount = 0;
|
|
196
|
+
for (const deletedMedia of mediaDeleted) {
|
|
197
|
+
const relPath = deletedMedia.scopeUid
|
|
198
|
+
? path.join(deletedMedia.scopeUid, deletedMedia.name)
|
|
199
|
+
: deletedMedia.name;
|
|
200
|
+
const fullPath = path.join(MEDIA_DIR, relPath);
|
|
201
|
+
try {
|
|
202
|
+
await fs.unlink(fullPath);
|
|
203
|
+
logger.verbose(`Deleted media: ${fullPath}`);
|
|
204
|
+
removedCount++;
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
if (err.code !== 'ENOENT') {
|
|
208
|
+
console.warn(`Warning: Could not delete media file ${fullPath}:`, err.message);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
console.log(`Done. ${removedCount} media files removed.`);
|
|
213
|
+
}
|
|
214
|
+
// Save sync token
|
|
215
|
+
if (nextMediaSyncToken) {
|
|
216
|
+
await writeMediaSyncToken(nextMediaSyncToken, remoteCtx);
|
|
217
|
+
logger.verbose(`Media sync token updated: ${nextMediaSyncToken}`);
|
|
218
|
+
}
|
|
219
|
+
// Clean up legacy sync token after successful migration
|
|
220
|
+
if (mediaTokenMigrated) {
|
|
221
|
+
await cleanupLegacyMediaSyncToken();
|
|
222
|
+
logger.verbose(`[SYNC] Removed legacy media sync token`);
|
|
223
|
+
if (remoteCtx) {
|
|
224
|
+
await unlinkSafe(MEDIA_SYNC_TOKEN_PATH);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
export { main as pullLeadCMSMedia };
|
|
229
|
+
//# sourceMappingURL=pull-leadcms-media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-leadcms-media.js","sourceRoot":"","sources":["../../src/scripts/pull-leadcms-media.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
* Pull only media from LeadCMS (no content, no comments)
|
|
4
4
|
*/
|
|
5
5
|
import "dotenv/config";
|
|
6
|
+
import type { RemoteContext } from "../lib/remote-context.js";
|
|
6
7
|
interface PullMediaOptions {
|
|
7
8
|
/** When true, delete all local media files and sync tokens before pulling, effectively doing a fresh pull. */
|
|
8
9
|
reset?: boolean;
|
|
10
|
+
/** Remote context for multi-remote support. */
|
|
11
|
+
remoteContext?: RemoteContext;
|
|
9
12
|
}
|
|
10
13
|
/**
|
|
11
|
-
* Main function - currently media is
|
|
14
|
+
* Main function - currently media is pulled as part of content sync
|
|
12
15
|
* This is a placeholder for future dedicated media sync
|
|
13
16
|
*/
|
|
14
17
|
declare function main(options?: PullMediaOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-media.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-media.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAOvB,UAAU,gBAAgB;IACxB,8GAA8G;IAC9G,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"pull-media.d.ts","sourceRoot":"","sources":["../../src/scripts/pull-media.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,UAAU,gBAAgB;IACxB,8GAA8G;IAC9G,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;;GAGG;AACH,iBAAe,IAAI,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCjE;AAKD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { setCMSConfig, isMediaSupported } from "../lib/cms-config-types.js";
|
|
|
9
9
|
import { resetMediaState } from "./pull-all.js";
|
|
10
10
|
import { logger } from "../lib/logger.js";
|
|
11
11
|
/**
|
|
12
|
-
* Main function - currently media is
|
|
12
|
+
* Main function - currently media is pulled as part of content sync
|
|
13
13
|
* This is a placeholder for future dedicated media sync
|
|
14
14
|
*/
|
|
15
15
|
async function main(options = {}) {
|
|
@@ -38,9 +38,9 @@ async function main(options = {}) {
|
|
|
38
38
|
console.warn(`⚠️ Could not fetch CMS config: ${error.message}`);
|
|
39
39
|
console.warn(`⚠️ Assuming media is supported (backward compatibility)\n`);
|
|
40
40
|
}
|
|
41
|
-
//
|
|
42
|
-
const {
|
|
43
|
-
await
|
|
41
|
+
// Pull media
|
|
42
|
+
const { pullLeadCMSMedia } = await import('./pull-leadcms-media.js');
|
|
43
|
+
await pullLeadCMSMedia({ remoteContext: options.remoteContext });
|
|
44
44
|
console.log(`\n✨ Media pull completed!\n`);
|
|
45
45
|
}
|
|
46
46
|
// Note: CLI execution moved to src/cli/bin/pull-media.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-media.js","sourceRoot":"","sources":["../../src/scripts/pull-media.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull-media.js","sourceRoot":"","sources":["../../src/scripts/pull-media.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAW1C;;;GAGG;AACH,KAAK,UAAU,IAAI,CAAC,UAA4B,EAAE;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,kDAAkD;IAClD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC7E,CAAC;IAED,aAAa;IACb,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACrE,MAAM,gBAAgB,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC7C,CAAC;AAED,yDAAyD;AACzD,+DAA+D;AAE/D,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import type { Comment, StoredComment } from '../lib/comment-types.js';
|
|
3
|
+
type EditableComment = Omit<StoredComment, 'id'> & {
|
|
4
|
+
id?: number;
|
|
5
|
+
};
|
|
6
|
+
type CommentOperationType = 'create' | 'update' | 'delete' | 'conflict';
|
|
7
|
+
interface LocalCommentFile {
|
|
8
|
+
filePath: string;
|
|
9
|
+
commentableType: string;
|
|
10
|
+
commentableId: number;
|
|
11
|
+
language: string;
|
|
12
|
+
comments: EditableComment[];
|
|
13
|
+
}
|
|
14
|
+
interface LocalCommentItem {
|
|
15
|
+
file: LocalCommentFile;
|
|
16
|
+
filePath: string;
|
|
17
|
+
locale: string;
|
|
18
|
+
comment: EditableComment;
|
|
19
|
+
}
|
|
20
|
+
interface RemoteCommentItem extends Comment {
|
|
21
|
+
}
|
|
22
|
+
interface CommentOperation {
|
|
23
|
+
type: CommentOperationType;
|
|
24
|
+
local?: LocalCommentItem;
|
|
25
|
+
remote?: RemoteCommentItem;
|
|
26
|
+
reason?: string;
|
|
27
|
+
}
|
|
28
|
+
interface CommentStatusOptions {
|
|
29
|
+
showDelete?: boolean;
|
|
30
|
+
targetId?: string;
|
|
31
|
+
showDetailedPreview?: boolean;
|
|
32
|
+
}
|
|
33
|
+
interface PushCommentsOptions {
|
|
34
|
+
force?: boolean;
|
|
35
|
+
dryRun?: boolean;
|
|
36
|
+
allowDelete?: boolean;
|
|
37
|
+
targetId?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface CommentStatusResult {
|
|
40
|
+
operations: CommentOperation[];
|
|
41
|
+
totalLocal: number;
|
|
42
|
+
totalRemote: number;
|
|
43
|
+
}
|
|
44
|
+
export declare function buildCommentStatus(options?: CommentStatusOptions): Promise<CommentStatusResult>;
|
|
45
|
+
export declare function statusComments(options?: CommentStatusOptions): Promise<void>;
|
|
46
|
+
export declare function pushComments(options?: PushCommentsOptions): Promise<void>;
|
|
47
|
+
export type { CommentOperation, LocalCommentItem, RemoteCommentItem, PushCommentsOptions, CommentStatusOptions };
|
|
48
|
+
//# sourceMappingURL=push-comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-comments.d.ts","sourceRoot":"","sources":["../../src/scripts/push-comments.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAavB,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOtE,KAAK,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,KAAK,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,UAAU,iBAAkB,SAAQ,OAAO;CAAI;AAE/C,UAAU,gBAAgB;IACxB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AA4MD,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoEzG;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHtF;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FnF;AAED,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,CAAC"}
|