@markwinap/confluence-sync-core 1.0.2

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.
Files changed (63) hide show
  1. package/.github/workflows/publish.yml +40 -0
  2. package/README.md +9 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +41 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +15 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +73 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/confluenceClient.d.ts +19 -0
  12. package/dist/confluenceClient.d.ts.map +1 -0
  13. package/dist/confluenceClient.js +147 -0
  14. package/dist/confluenceClient.js.map +1 -0
  15. package/dist/contracts.d.ts +112 -0
  16. package/dist/contracts.d.ts.map +1 -0
  17. package/dist/contracts.js +15 -0
  18. package/dist/contracts.js.map +1 -0
  19. package/dist/diff.d.ts +14 -0
  20. package/dist/diff.d.ts.map +1 -0
  21. package/dist/diff.js +74 -0
  22. package/dist/diff.js.map +1 -0
  23. package/dist/format.d.ts +3 -0
  24. package/dist/format.d.ts.map +1 -0
  25. package/dist/format.js +194 -0
  26. package/dist/format.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +33 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/manifest.d.ts +6 -0
  32. package/dist/manifest.d.ts.map +1 -0
  33. package/dist/manifest.js +57 -0
  34. package/dist/manifest.js.map +1 -0
  35. package/dist/paths.d.ts +6 -0
  36. package/dist/paths.d.ts.map +1 -0
  37. package/dist/paths.js +54 -0
  38. package/dist/paths.js.map +1 -0
  39. package/dist/progress.d.ts +67 -0
  40. package/dist/progress.d.ts.map +1 -0
  41. package/dist/progress.js +168 -0
  42. package/dist/progress.js.map +1 -0
  43. package/dist/project.d.ts +11 -0
  44. package/dist/project.d.ts.map +1 -0
  45. package/dist/project.js +114 -0
  46. package/dist/project.js.map +1 -0
  47. package/dist/pull.d.ts +8 -0
  48. package/dist/pull.d.ts.map +1 -0
  49. package/dist/pull.js +303 -0
  50. package/dist/pull.js.map +1 -0
  51. package/dist/push.d.ts +6 -0
  52. package/dist/push.d.ts.map +1 -0
  53. package/dist/push.js +129 -0
  54. package/dist/push.js.map +1 -0
  55. package/dist/status.d.ts +29 -0
  56. package/dist/status.d.ts.map +1 -0
  57. package/dist/status.js +153 -0
  58. package/dist/status.js.map +1 -0
  59. package/dist/types.d.ts +103 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -0
  63. package/package.json +26 -0
package/dist/format.js ADDED
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.storageToMarkdown = storageToMarkdown;
7
+ exports.markdownToStorage = markdownToStorage;
8
+ const turndown_1 = __importDefault(require("turndown"));
9
+ const turndown_plugin_gfm_1 = require("turndown-plugin-gfm");
10
+ const turndown = new turndown_1.default({ headingStyle: "atx", codeBlockStyle: "fenced" });
11
+ turndown.use(turndown_plugin_gfm_1.gfm);
12
+ function storageToMarkdown(storage) {
13
+ return turndown.turndown(normalizeTableCells(storage || ""));
14
+ }
15
+ function normalizeTableCells(storage) {
16
+ return storage.replace(/<table\b[\s\S]*?<\/table>/gi, table => {
17
+ let normalized = table
18
+ .replace(/<\/p>\s*<p\b[^>]*>/gi, "<br>")
19
+ .replace(/<p\b[^>]*>/gi, "")
20
+ .replace(/<\/p>/gi, "");
21
+ if (!/<th\b/i.test(normalized)) {
22
+ normalized = normalized.replace(/<tr\b([^>]*)>([\s\S]*?)<\/tr>/i, (_, attributes, cells) => `<tr${attributes}>${cells.replace(/<td\b/gi, "<th").replace(/<\/td>/gi, "</th>")}</tr>`);
23
+ }
24
+ return normalized;
25
+ });
26
+ }
27
+ function markdownToStorage(markdown) {
28
+ const escaped = markdown.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
29
+ const lines = escaped.split(/\r?\n/);
30
+ const output = [];
31
+ let paragraph = [];
32
+ let table = null;
33
+ let tableHasHeader = false;
34
+ let list = null;
35
+ let listOrdered = false;
36
+ let blockquote = null;
37
+ let codeBlock = null;
38
+ const flushParagraph = () => {
39
+ if (paragraph.length)
40
+ output.push(`<p>${inline(paragraph.join(" "))}</p>`);
41
+ paragraph = [];
42
+ };
43
+ const flushTable = () => {
44
+ if (!table)
45
+ return;
46
+ const rows = [];
47
+ table.forEach((cells, index) => {
48
+ const tag = tableHasHeader && index === 0 ? "th" : "td";
49
+ rows.push(`<tr>${cells.map(cell => `<${tag}>${inline(cell)}</${tag}>`).join("")}</tr>`);
50
+ });
51
+ output.push(`<table><tbody>${rows.join("")}</tbody></table>`);
52
+ table = null;
53
+ tableHasHeader = false;
54
+ };
55
+ const flushList = () => {
56
+ if (!list)
57
+ return;
58
+ const items = list.map(item => `<li>${inline(item)}</li>`).join("");
59
+ output.push(listOrdered ? `<ol>${items}</ol>` : `<ul>${items}</ul>`);
60
+ list = null;
61
+ listOrdered = false;
62
+ };
63
+ const flushBlockquote = () => {
64
+ if (!blockquote)
65
+ return;
66
+ output.push(`<blockquote><p>${inline(blockquote.join("<br>"))}</p></blockquote>`);
67
+ blockquote = null;
68
+ };
69
+ const flushCode = () => {
70
+ if (!codeBlock)
71
+ return;
72
+ const code = codeBlock.lines.join("\n");
73
+ const langAttr = codeBlock.lang ? ` class="${codeBlock.lang}"` : "";
74
+ output.push(`<pre><code${langAttr}>${code}</code></pre>`);
75
+ codeBlock = null;
76
+ };
77
+ const flushAllBlocks = () => {
78
+ flushParagraph();
79
+ flushTable();
80
+ flushList();
81
+ flushBlockquote();
82
+ flushCode();
83
+ };
84
+ for (let i = 0; i < lines.length; i++) {
85
+ const line = lines[i];
86
+ if (codeBlock) {
87
+ if (/^```\s*$/.test(line)) {
88
+ flushCode();
89
+ continue;
90
+ }
91
+ codeBlock.lines.push(line);
92
+ continue;
93
+ }
94
+ const codeFence = /^```(\w*)\s*$/.exec(line);
95
+ if (codeFence) {
96
+ flushAllBlocks();
97
+ codeBlock = { lang: codeFence[1] || undefined, lines: [] };
98
+ continue;
99
+ }
100
+ const heading = /^(#{1,6})\s+(.*)$/.exec(line);
101
+ if (heading) {
102
+ flushAllBlocks();
103
+ output.push(`<h${heading[1].length}>${inline(heading[2])}</h${heading[1].length}>`);
104
+ continue;
105
+ }
106
+ if (/^\|(.+)\|$/.test(line)) {
107
+ flushParagraph();
108
+ flushList();
109
+ flushBlockquote();
110
+ flushCode();
111
+ const cells = parseTableRow(line);
112
+ if (!table) {
113
+ const next = lines[i + 1];
114
+ if (next && isTableSeparator(next)) {
115
+ tableHasHeader = true;
116
+ i++;
117
+ }
118
+ table = [cells];
119
+ }
120
+ else {
121
+ table.push(cells);
122
+ }
123
+ continue;
124
+ }
125
+ if (table)
126
+ flushTable();
127
+ const bullet = /^[*-]\s+(.*)$/.exec(line);
128
+ if (bullet) {
129
+ flushParagraph();
130
+ flushTable();
131
+ flushBlockquote();
132
+ flushCode();
133
+ if (!list) {
134
+ list = [];
135
+ listOrdered = false;
136
+ }
137
+ list.push(bullet[1]);
138
+ continue;
139
+ }
140
+ const ordered = /^\d+\.\s+(.*)$/.exec(line);
141
+ if (ordered) {
142
+ flushParagraph();
143
+ flushTable();
144
+ flushBlockquote();
145
+ flushCode();
146
+ if (!list) {
147
+ list = [];
148
+ listOrdered = true;
149
+ }
150
+ list.push(ordered[1]);
151
+ continue;
152
+ }
153
+ if (list)
154
+ flushList();
155
+ const bq = /^&gt;\s*(.*)$/.exec(line);
156
+ if (bq) {
157
+ flushParagraph();
158
+ flushTable();
159
+ flushList();
160
+ flushCode();
161
+ if (!blockquote)
162
+ blockquote = [];
163
+ blockquote.push(bq[1]);
164
+ continue;
165
+ }
166
+ if (blockquote)
167
+ flushBlockquote();
168
+ if (!line.trim())
169
+ flushParagraph();
170
+ else
171
+ paragraph.push(line.trim());
172
+ }
173
+ flushAllBlocks();
174
+ return output.join("\n");
175
+ }
176
+ function parseTableRow(line) {
177
+ const trimmed = line.trim();
178
+ const inner = trimmed.slice(1, -1);
179
+ return inner.split("|").map(cell => cell.trim());
180
+ }
181
+ function isTableSeparator(line) {
182
+ const trimmed = line.trim();
183
+ if (!/^\|(.+)\|$/.test(trimmed))
184
+ return false;
185
+ const inner = trimmed.slice(1, -1);
186
+ return inner.split("|").every(cell => /^\s*:?-+:?\s*$/.test(cell.trim()));
187
+ }
188
+ function inline(value) {
189
+ return value.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '<ac:image ac:alt="$1"><ri:attachment ri:filename="$2" /></ac:image>')
190
+ .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>')
191
+ .replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>")
192
+ .replace(/`([^`]+)`/g, "<code>$1</code>");
193
+ }
194
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export * from "./types";
2
+ export { loadConfig, type Config } from "./config";
3
+ export * from "./manifest";
4
+ export * from "./paths";
5
+ export * from "./format";
6
+ export * from "./confluenceClient";
7
+ export * from "./status";
8
+ export * from "./pull";
9
+ export * from "./push";
10
+ export type { ProjectRef, SyncProjectConfig, Credentials, SyncErrorCode, SyncError, OperationContext, PullPlan, PullResult, StatusResult, PushResult, Change as ContractChange, ChangeKind as ContractChangeKind, SyncProgress, OperationSummary, OperationPhase } from "./contracts";
11
+ export { SyncError as SyncContractError } from "./contracts";
12
+ export * from "./progress";
13
+ export * from "./project";
14
+ export * from "./diff";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AACnD,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,cAAc,EAAE,UAAU,IAAI,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtR,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7D,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SyncContractError = exports.loadConfig = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ var config_1 = require("./config");
20
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
21
+ __exportStar(require("./manifest"), exports);
22
+ __exportStar(require("./paths"), exports);
23
+ __exportStar(require("./format"), exports);
24
+ __exportStar(require("./confluenceClient"), exports);
25
+ __exportStar(require("./status"), exports);
26
+ __exportStar(require("./pull"), exports);
27
+ __exportStar(require("./push"), exports);
28
+ var contracts_1 = require("./contracts");
29
+ Object.defineProperty(exports, "SyncContractError", { enumerable: true, get: function () { return contracts_1.SyncError; } });
30
+ __exportStar(require("./progress"), exports);
31
+ __exportStar(require("./project"), exports);
32
+ __exportStar(require("./diff"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mCAAmD;AAA1C,oGAAA,UAAU,OAAA;AACnB,6CAA2B;AAC3B,0CAAwB;AACxB,2CAAyB;AACzB,qDAAmC;AACnC,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AAEvB,yCAA6D;AAApD,8GAAA,SAAS,OAAqB;AACvC,6CAA2B;AAC3B,4CAA0B;AAC1B,yCAAuB"}
@@ -0,0 +1,6 @@
1
+ import { Manifest } from "./types";
2
+ export declare function hash(data: string | Buffer): string;
3
+ export declare function manifestPath(contentDir: string): string;
4
+ export declare function readManifest(contentDir: string): Manifest;
5
+ export declare function writeManifest(contentDir: string, manifest: Manifest): void;
6
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAA4D;AAC/G,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAoD;AAE5G,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAIzD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAK1E"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.hash = hash;
37
+ exports.manifestPath = manifestPath;
38
+ exports.readManifest = readManifest;
39
+ exports.writeManifest = writeManifest;
40
+ const crypto_1 = require("crypto");
41
+ const fs_1 = require("fs");
42
+ const path = __importStar(require("path"));
43
+ function hash(data) { return (0, crypto_1.createHash)("sha256").update(data).digest("hex"); }
44
+ function manifestPath(contentDir) { return path.join(contentDir, "_manifest.json"); }
45
+ function readManifest(contentDir) {
46
+ const file = manifestPath(contentDir);
47
+ if (!(0, fs_1.existsSync)(file))
48
+ throw new Error(`No manifest found at ${file}. Run pull first.`);
49
+ return JSON.parse((0, fs_1.readFileSync)(file, "utf8"));
50
+ }
51
+ function writeManifest(contentDir, manifest) {
52
+ const target = manifestPath(contentDir);
53
+ const temp = `${target}.tmp`;
54
+ (0, fs_1.writeFileSync)(temp, JSON.stringify(manifest, null, 2) + "\n", "utf8");
55
+ (0, fs_1.renameSync)(temp, target);
56
+ }
57
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,oBAA+G;AAC/G,oCAA4G;AAE5G,oCAIC;AAED,sCAKC;AAnBD,mCAAoC;AACpC,2BAAyE;AACzE,2CAA6B;AAG7B,SAAgB,IAAI,CAAC,IAAqB,IAAY,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/G,SAAgB,YAAY,CAAC,UAAkB,IAAY,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE5G,SAAgB,YAAY,CAAC,UAAkB;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,mBAAmB,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAa,CAAC;AAC5D,CAAC;AAED,SAAgB,aAAa,CAAC,UAAkB,EAAE,QAAkB;IAClE,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC;IAC7B,IAAA,kBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACtE,IAAA,eAAU,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ContentType } from "./types";
2
+ export declare function sanitizeName(value: string): string;
3
+ export declare function contentDirName(id: string | undefined, type: ContentType, title: string, localKey?: string): string;
4
+ export declare function relativeChildDir(parentDir: string | undefined, name: string): string;
5
+ export declare function toPortable(value: string): string;
6
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAElH;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
package/dist/paths.js ADDED
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sanitizeName = sanitizeName;
37
+ exports.contentDirName = contentDirName;
38
+ exports.relativeChildDir = relativeChildDir;
39
+ exports.toPortable = toPortable;
40
+ const path = __importStar(require("path"));
41
+ function sanitizeName(value) {
42
+ const clean = value.normalize("NFKC").replace(/[<>:"/\\|?*\x00-\x1f]/g, "").replace(/\s+/g, " ").trim().replace(/[. ]+$/g, "");
43
+ return (clean || "untitled").slice(0, 100);
44
+ }
45
+ function contentDirName(id, type, title, localKey) {
46
+ return `${id || localKey || "new"}_${type}_${sanitizeName(title)}`;
47
+ }
48
+ function relativeChildDir(parentDir, name) {
49
+ return parentDir ? path.join(parentDir, name) : name;
50
+ }
51
+ function toPortable(value) {
52
+ return value.split(path.sep).join("/");
53
+ }
54
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,oCAGC;AAED,wCAEC;AAED,4CAEC;AAED,gCAEC;AAlBD,2CAA6B;AAG7B,SAAgB,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/H,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,cAAc,CAAC,EAAsB,EAAE,IAAiB,EAAE,KAAa,EAAE,QAAiB;IACxG,OAAO,GAAG,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAgB,gBAAgB,CAAC,SAA6B,EAAE,IAAY;IAC1E,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { SyncProgress, OperationPhase, OperationSummary } from "./contracts";
2
+ import type { ContentType } from "./types";
3
+ export declare class ProgressTracker {
4
+ private readonly operation;
5
+ private phase;
6
+ private kind;
7
+ private totalItems?;
8
+ private processed;
9
+ private succeeded;
10
+ private synced;
11
+ private skipped;
12
+ private conflicts;
13
+ private failed;
14
+ private attachmentsTotal;
15
+ private attachmentsProcessed;
16
+ private attachmentsBytesTotal?;
17
+ private attachmentsBytesLoaded?;
18
+ private currentItem?;
19
+ private currentFile?;
20
+ private message?;
21
+ private readonly startTime;
22
+ private readonly sink;
23
+ private dirty;
24
+ private throttleMs;
25
+ private lastEmit;
26
+ constructor(operation: SyncProgress["operation"], sink: (p: SyncProgress) => void | Promise<void>, options?: {
27
+ throttleMs?: number;
28
+ });
29
+ discoverCount(total: number): void;
30
+ setPhase(phase: OperationPhase, message?: string): void;
31
+ itemStart(item: {
32
+ id?: string;
33
+ title: string;
34
+ type: ContentType;
35
+ }): void;
36
+ itemSuccess(item: {
37
+ id?: string;
38
+ title: string;
39
+ type: ContentType;
40
+ }, synced: boolean, attachmentCount?: number): void;
41
+ itemSkipped(item: {
42
+ id?: string;
43
+ title: string;
44
+ type: ContentType;
45
+ }): void;
46
+ itemConflict(item: {
47
+ id?: string;
48
+ title: string;
49
+ type: ContentType;
50
+ }): void;
51
+ itemFailed(item: {
52
+ id?: string;
53
+ title: string;
54
+ type: ContentType;
55
+ }): void;
56
+ attachmentStart(name: string, bytesTotal?: number): void;
57
+ attachmentProgress(loaded: number, total?: number): void;
58
+ attachmentDone(): void;
59
+ summary(dryRun: boolean, extra?: {
60
+ unchanged?: number;
61
+ discovered?: number;
62
+ }): OperationSummary;
63
+ flush(): Promise<void>;
64
+ private snapshot;
65
+ private emit;
66
+ }
67
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProgressTracker = void 0;
4
+ class ProgressTracker {
5
+ operation;
6
+ phase = "discovery";
7
+ kind = "indeterminate";
8
+ totalItems;
9
+ processed = 0;
10
+ succeeded = 0;
11
+ synced = 0;
12
+ skipped = 0;
13
+ conflicts = 0;
14
+ failed = 0;
15
+ attachmentsTotal = 0;
16
+ attachmentsProcessed = 0;
17
+ attachmentsBytesTotal;
18
+ attachmentsBytesLoaded;
19
+ currentItem;
20
+ currentFile;
21
+ message;
22
+ startTime;
23
+ sink;
24
+ dirty = false;
25
+ throttleMs;
26
+ lastEmit = 0;
27
+ constructor(operation, sink, options) {
28
+ this.operation = operation;
29
+ this.sink = sink;
30
+ this.throttleMs = options?.throttleMs ?? 100;
31
+ this.startTime = Date.now();
32
+ }
33
+ discoverCount(total) {
34
+ this.totalItems = total;
35
+ this.kind = "determinate";
36
+ this.phase = "processing";
37
+ this.dirty = true;
38
+ this.emit();
39
+ }
40
+ setPhase(phase, message) {
41
+ this.phase = phase;
42
+ this.message = message;
43
+ this.dirty = true;
44
+ this.emit(true);
45
+ }
46
+ itemStart(item) {
47
+ this.currentItem = item;
48
+ this.dirty = true;
49
+ this.emit();
50
+ }
51
+ itemSuccess(item, synced, attachmentCount = 0) {
52
+ this.processed++;
53
+ this.succeeded++;
54
+ this.currentItem = item;
55
+ if (synced)
56
+ this.synced++;
57
+ if (attachmentCount > 0) {
58
+ this.attachmentsTotal += attachmentCount;
59
+ this.attachmentsProcessed += attachmentCount;
60
+ }
61
+ this.dirty = true;
62
+ this.emit();
63
+ }
64
+ itemSkipped(item) {
65
+ this.processed++;
66
+ this.skipped++;
67
+ this.currentItem = item;
68
+ this.dirty = true;
69
+ this.emit();
70
+ }
71
+ itemConflict(item) {
72
+ this.processed++;
73
+ this.conflicts++;
74
+ this.currentItem = item;
75
+ this.dirty = true;
76
+ this.emit();
77
+ }
78
+ itemFailed(item) {
79
+ this.processed++;
80
+ this.failed++;
81
+ this.currentItem = item;
82
+ this.dirty = true;
83
+ this.emit();
84
+ }
85
+ attachmentStart(name, bytesTotal) {
86
+ this.currentFile = { name, bytesTotal };
87
+ this.dirty = true;
88
+ this.emit();
89
+ }
90
+ attachmentProgress(loaded, total) {
91
+ if (total !== undefined) {
92
+ this.attachmentsBytesTotal = (this.attachmentsBytesTotal ?? 0) + total;
93
+ this.attachmentsBytesLoaded = (this.attachmentsBytesLoaded ?? 0) + loaded;
94
+ }
95
+ this.dirty = true;
96
+ this.emit();
97
+ }
98
+ attachmentDone() {
99
+ this.attachmentsProcessed++;
100
+ this.currentFile = undefined;
101
+ this.dirty = true;
102
+ this.emit();
103
+ }
104
+ summary(dryRun, extra) {
105
+ return {
106
+ operation: this.operation,
107
+ elapsedMs: Date.now() - this.startTime,
108
+ discovered: extra?.discovered ?? (this.totalItems ?? this.processed),
109
+ processed: this.processed,
110
+ synced: this.synced,
111
+ unchanged: extra?.unchanged ?? 0,
112
+ skipped: this.skipped,
113
+ conflicts: this.conflicts,
114
+ failed: this.failed,
115
+ attachments: { processed: this.attachmentsProcessed, bytes: this.attachmentsBytesLoaded },
116
+ dryRun,
117
+ };
118
+ }
119
+ async flush() {
120
+ this.dirty = true;
121
+ await this.emit(true);
122
+ }
123
+ snapshot() {
124
+ const denominator = this.kind === "determinate" ? this.totalItems : undefined;
125
+ let percentage = 0;
126
+ if (this.phase === "completed" || this.phase === "cancelled" || this.phase === "failed") {
127
+ percentage = 100;
128
+ }
129
+ else if (denominator && denominator > 0) {
130
+ percentage = Math.min(100, Math.max(0, Math.floor((this.processed / denominator) * 100)));
131
+ }
132
+ return {
133
+ operation: this.operation,
134
+ phase: this.phase,
135
+ kind: this.kind,
136
+ currentItem: this.currentItem,
137
+ currentFile: this.currentFile,
138
+ totalItems: this.totalItems,
139
+ processed: this.processed,
140
+ succeeded: this.succeeded,
141
+ synced: this.synced,
142
+ skipped: this.skipped,
143
+ conflicts: this.conflicts,
144
+ failed: this.failed,
145
+ attachments: {
146
+ total: this.attachmentsTotal,
147
+ processed: this.attachmentsProcessed,
148
+ bytesTotal: this.attachmentsBytesTotal,
149
+ bytesLoaded: this.attachmentsBytesLoaded,
150
+ },
151
+ percentage,
152
+ message: this.message,
153
+ };
154
+ }
155
+ emit(force = false) {
156
+ if (!this.dirty && !force)
157
+ return;
158
+ const now = Date.now();
159
+ if (!force && now - this.lastEmit < this.throttleMs)
160
+ return;
161
+ const p = this.snapshot();
162
+ this.dirty = false;
163
+ this.lastEmit = now;
164
+ void Promise.resolve(this.sink(p));
165
+ }
166
+ }
167
+ exports.ProgressTracker = ProgressTracker;
168
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}