@iwonz/ywtc 0.0.0 → 2.0.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.
Files changed (94) hide show
  1. package/.env.example +4 -0
  2. package/CHANGELOG.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +258 -1
  5. package/dist/adapters/confluence.d.ts +46 -0
  6. package/dist/adapters/confluence.js +187 -0
  7. package/dist/adapters/confluence.js.map +1 -0
  8. package/dist/adapters/factory.d.ts +3 -0
  9. package/dist/adapters/factory.js +11 -0
  10. package/dist/adapters/factory.js.map +1 -0
  11. package/dist/adapters/yandex.d.ts +45 -0
  12. package/dist/adapters/yandex.js +233 -0
  13. package/dist/adapters/yandex.js.map +1 -0
  14. package/dist/cli-arguments.d.ts +41 -0
  15. package/dist/cli-arguments.js +149 -0
  16. package/dist/cli-arguments.js.map +1 -0
  17. package/dist/cli.d.ts +2 -0
  18. package/dist/cli.js +180 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/clients/confluence-cloud.d.ts +45 -0
  21. package/dist/clients/confluence-cloud.js +261 -0
  22. package/dist/clients/confluence-cloud.js.map +1 -0
  23. package/dist/clients/confluence-factory.d.ts +3 -0
  24. package/dist/clients/confluence-factory.js +8 -0
  25. package/dist/clients/confluence-factory.js.map +1 -0
  26. package/dist/clients/confluence.d.ts +42 -0
  27. package/dist/clients/confluence.js +286 -0
  28. package/dist/clients/confluence.js.map +1 -0
  29. package/dist/clients/yandex-wiki.d.ts +35 -0
  30. package/dist/clients/yandex-wiki.js +255 -0
  31. package/dist/clients/yandex-wiki.js.map +1 -0
  32. package/dist/config.d.ts +52 -0
  33. package/dist/config.js +177 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/content-model.d.ts +12 -0
  36. package/dist/content-model.js +416 -0
  37. package/dist/content-model.js.map +1 -0
  38. package/dist/conversion.d.ts +43 -0
  39. package/dist/conversion.js +450 -0
  40. package/dist/conversion.js.map +1 -0
  41. package/dist/doctor.d.ts +24 -0
  42. package/dist/doctor.js +45 -0
  43. package/dist/doctor.js.map +1 -0
  44. package/dist/domain.d.ts +202 -0
  45. package/dist/domain.js +18 -0
  46. package/dist/domain.js.map +1 -0
  47. package/dist/filesystem-export.d.ts +53 -0
  48. package/dist/filesystem-export.js +243 -0
  49. package/dist/filesystem-export.js.map +1 -0
  50. package/dist/graph.d.ts +13 -0
  51. package/dist/graph.js +121 -0
  52. package/dist/graph.js.map +1 -0
  53. package/dist/http.d.ts +26 -0
  54. package/dist/http.js +100 -0
  55. package/dist/http.js.map +1 -0
  56. package/dist/index.d.ts +24 -0
  57. package/dist/index.js +25 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/input.d.ts +4 -0
  60. package/dist/input.js +56 -0
  61. package/dist/input.js.map +1 -0
  62. package/dist/locators.d.ts +24 -0
  63. package/dist/locators.js +84 -0
  64. package/dist/locators.js.map +1 -0
  65. package/dist/logger.d.ts +7 -0
  66. package/dist/logger.js +28 -0
  67. package/dist/logger.js.map +1 -0
  68. package/dist/migrator.d.ts +53 -0
  69. package/dist/migrator.js +669 -0
  70. package/dist/migrator.js.map +1 -0
  71. package/dist/rate-limiter.d.ts +12 -0
  72. package/dist/rate-limiter.js +31 -0
  73. package/dist/rate-limiter.js.map +1 -0
  74. package/dist/report.d.ts +101 -0
  75. package/dist/report.js +106 -0
  76. package/dist/report.js.map +1 -0
  77. package/dist/state.d.ts +119 -0
  78. package/dist/state.js +201 -0
  79. package/dist/state.js.map +1 -0
  80. package/dist/types.d.ts +197 -0
  81. package/dist/types.js +2 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/updater.d.ts +24 -0
  84. package/dist/updater.js +92 -0
  85. package/dist/updater.js.map +1 -0
  86. package/dist/version.d.ts +1 -0
  87. package/dist/version.js +8 -0
  88. package/dist/version.js.map +1 -0
  89. package/dist/workspace.d.ts +29 -0
  90. package/dist/workspace.js +157 -0
  91. package/dist/workspace.js.map +1 -0
  92. package/docs/assets/readme-header.png +0 -0
  93. package/package.json +108 -3
  94. package/ywtc.config.example.yaml +52 -0
@@ -0,0 +1,416 @@
1
+ import transform from '@diplodoc/transform';
2
+ import path from 'node:path';
3
+ import { load } from 'cheerio';
4
+ import { LinkifyIt } from 'linkify-it';
5
+ import rehypeParse from 'rehype-parse';
6
+ import rehypeRemark from 'rehype-remark';
7
+ import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
8
+ import rehypeStringify from 'rehype-stringify';
9
+ import remarkGfm from 'remark-gfm';
10
+ import remarkStringify from 'remark-stringify';
11
+ import { unified } from 'unified';
12
+ import { convertYfmToStorage } from './conversion.js';
13
+ import { normalizeWikiSlug, resolveRelativeWikiSlug } from './input.js';
14
+ const linkifier = new LinkifyIt();
15
+ function escapeHtml(value) {
16
+ return String(value ?? '').replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;');
17
+ }
18
+ function uniqueReferences(references) {
19
+ const seen = new Set();
20
+ return references.filter((reference) => {
21
+ const key = `${reference.kind}:${reference.href ?? reference.pageTitle ?? reference.raw}`;
22
+ if (seen.has(key))
23
+ return false;
24
+ seen.add(key);
25
+ return true;
26
+ });
27
+ }
28
+ function classifyHref(raw) {
29
+ const href = raw.trim();
30
+ if (href.startsWith('#'))
31
+ return { raw, href, anchor: href.slice(1), kind: 'anchor' };
32
+ if (/^(?:mailto|tel):/i.test(href))
33
+ return { raw, href, kind: 'external' };
34
+ if (/^https?:\/\//i.test(href))
35
+ return { raw, href, kind: 'page' };
36
+ if (/^(?:javascript|data):/i.test(href))
37
+ return { raw, href, kind: 'unsupported' };
38
+ if (/\.(?:png|jpe?g|gif|webp|svg|pdf|zip|docx?|xlsx?|pptx?)(?:[?#]|$)/i.test(href) || /(?:\.files|_files|attachments)\//i.test(href)) {
39
+ return { raw, href, kind: 'attachment' };
40
+ }
41
+ return { raw, href, kind: 'page' };
42
+ }
43
+ export function extractPageReferences(content, format) {
44
+ const references = [];
45
+ if (format === 'confluence-storage') {
46
+ const $ = load(`<root>${content}</root>`, { xmlMode: true }, false);
47
+ $('ri\\:page').each((_index, element) => {
48
+ const pageTitle = $(element).attr('ri:content-title');
49
+ const contentId = $(element).attr('ri:content-id');
50
+ const space = $(element).attr('ri:space-key');
51
+ if (pageTitle || contentId) {
52
+ references.push({
53
+ raw: $.html(element),
54
+ ...(pageTitle ? { pageTitle } : {}),
55
+ href: contentId ? `confluence-page:${contentId}` : `${space ? `${space}:` : ''}${pageTitle}`,
56
+ kind: 'page',
57
+ });
58
+ }
59
+ });
60
+ $('ri\\:attachment').each((_index, element) => {
61
+ const filename = $(element).attr('ri:filename') ?? 'attachment';
62
+ references.push({ raw: $.html(element), href: filename, kind: 'attachment' });
63
+ });
64
+ $('a').each((_index, element) => {
65
+ const href = $(element).attr('href');
66
+ if (href)
67
+ references.push(classifyHref(href));
68
+ });
69
+ }
70
+ else {
71
+ const markdownLink = /!?\[[^\]]*\]\(([^)\s]+)(?:\s+["'][^"']*["'])?\)/g;
72
+ for (const match of content.matchAll(markdownLink))
73
+ if (match[1])
74
+ references.push(classifyHref(match[1]));
75
+ const wikiLink = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
76
+ for (const match of content.matchAll(wikiLink))
77
+ if (match[1])
78
+ references.push(classifyHref(match[1]));
79
+ for (const match of linkifier.match(content) ?? [])
80
+ references.push(classifyHref(match.url));
81
+ }
82
+ return uniqueReferences(references);
83
+ }
84
+ function storageToSemanticHtml(storage, warnings) {
85
+ const $ = load(`<main data-ywtc-root>${storage}</main>`, { xmlMode: false }, false);
86
+ $('script, iframe, object, embed, form').each((_index, element) => {
87
+ warnings.push(`Active or embedded element <${element.tagName}> was replaced by a safe fallback`);
88
+ $(element).replaceWith(`<pre data-ywtc-fallback>${escapeHtml($.html(element))}</pre>`);
89
+ });
90
+ $('ac\\:structured-macro').toArray().reverse().forEach((element) => {
91
+ const macro = $(element);
92
+ const name = macro.attr('ac:name') ?? 'unknown';
93
+ const richBody = macro.children('ac\\:rich-text-body').html() ?? '';
94
+ const plainBody = macro.children('ac\\:plain-text-body').text();
95
+ const title = macro.children('ac\\:parameter').filter((_index, item) => $(item).attr('ac:name') === 'title').text().trim();
96
+ if (name === 'code')
97
+ macro.replaceWith(`<pre><code>${escapeHtml(plainBody)}</code></pre>`);
98
+ else if (name === 'expand')
99
+ macro.replaceWith(`<details open><summary>${escapeHtml(title || 'Details')}</summary>${richBody}</details>`);
100
+ else if (['info', 'tip', 'warning', 'note'].includes(name))
101
+ macro.replaceWith(`<aside class="ywtc-${name}"><strong>${escapeHtml(title || name)}</strong>${richBody}</aside>`);
102
+ else if (name === 'anchor')
103
+ macro.replaceWith(`<span id="${escapeHtml(macro.children('ac\\:parameter').first().text())}"></span>`);
104
+ else {
105
+ warnings.push(`Confluence macro "${name}" was converted to a static fallback`);
106
+ macro.replaceWith(`<aside class="ywtc-fallback"><strong>${escapeHtml(name)}</strong>${richBody || `<pre>${escapeHtml(plainBody)}</pre>`}</aside>`);
107
+ }
108
+ });
109
+ $('ac\\:image').each((_index, element) => {
110
+ const image = $(element);
111
+ const attachment = image.children('ri\\:attachment').attr('ri:filename');
112
+ const external = image.children('ri\\:url').attr('ri:value');
113
+ const source = attachment ? `attachment:${attachment}` : external;
114
+ image.replaceWith(source ? `<img src="${escapeHtml(source)}" alt="${escapeHtml(image.attr('ac:alt') ?? attachment ?? '')}">` : '<span>[image]</span>');
115
+ });
116
+ $('ac\\:link').each((_index, element) => {
117
+ const link = $(element);
118
+ const page = link.children('ri\\:page');
119
+ const attachment = link.children('ri\\:attachment').attr('ri:filename');
120
+ const label = link.children('ac\\:link-body, ac\\:plain-text-link-body').text().trim()
121
+ || page.attr('ri:content-title') || attachment || 'Link';
122
+ const href = page.length
123
+ ? `page:${page.attr('ri:content-id') ?? page.attr('ri:content-title') ?? ''}`
124
+ : attachment ? `attachment:${attachment}` : `#${link.attr('ac:anchor') ?? ''}`;
125
+ link.replaceWith(`<a href="${escapeHtml(href)}">${escapeHtml(label)}</a>`);
126
+ });
127
+ $('ri\\:attachment').each((_index, element) => {
128
+ const filename = $(element).attr('ri:filename') ?? 'attachment';
129
+ $(element).replaceWith(`<a href="attachment:${escapeHtml(filename)}">${escapeHtml(filename)}</a>`);
130
+ });
131
+ $('ri\\:page').each((_index, element) => {
132
+ const title = $(element).attr('ri:content-title') ?? 'page';
133
+ $(element).replaceWith(`<a href="page:${escapeHtml(title)}">${escapeHtml(title)}</a>`);
134
+ });
135
+ $('ac\\:parameter, ac\\:rich-text-body, ac\\:plain-text-body, ac\\:link-body, ac\\:plain-text-link-body').each((_index, element) => {
136
+ $(element).replaceWith($(element).contents());
137
+ });
138
+ return $('main[data-ywtc-root]').html() ?? '';
139
+ }
140
+ function yfmToHtml(content, warnings) {
141
+ try {
142
+ const result = transform(content || '', {
143
+ allowHTML: true,
144
+ needToSanitizeHtml: true,
145
+ supportGithubAnchors: true,
146
+ lang: 'ru',
147
+ linkify: true,
148
+ });
149
+ warnings.push(...(result.logs.warn ?? []), ...(result.logs.error ?? []));
150
+ return result.result.html || '<p></p>';
151
+ }
152
+ catch (error) {
153
+ warnings.push(`YFM transformation failed: ${error instanceof Error ? error.message : String(error)}`);
154
+ return `<pre data-ywtc-fallback><code>${escapeHtml(content)}</code></pre>`;
155
+ }
156
+ }
157
+ function metrics(html) {
158
+ const $ = load(html, null, false);
159
+ return { links: $('a').length, images: $('img').length, tables: $('table').length, codeBlocks: $('pre').length };
160
+ }
161
+ export function normalizePageContent(page) {
162
+ const warnings = [];
163
+ const html = page.rawFormat === 'yfm' ? yfmToHtml(page.rawContent, warnings) : storageToSemanticHtml(page.rawContent, warnings);
164
+ const references = extractPageReferences(page.rawContent, page.rawFormat).map((reference, index) => ({
165
+ token: `ref-${index}`,
166
+ kind: reference.kind,
167
+ raw: reference.raw,
168
+ ...(reference.href ? { href: reference.href } : {}),
169
+ label: reference.pageTitle ?? reference.href ?? reference.raw,
170
+ ...(reference.anchor ? { anchor: reference.anchor } : {}),
171
+ }));
172
+ const children = [{ type: 'html', value: html }];
173
+ if (warnings.length > 0)
174
+ children.push({ type: 'vendor-extension', vendor: page.provider, value: page.rawContent });
175
+ return {
176
+ root: { type: 'document', children },
177
+ raw: page.rawContent,
178
+ rawFormat: page.rawFormat,
179
+ references,
180
+ warnings,
181
+ degraded: warnings.length > 0,
182
+ metrics: metrics(html),
183
+ };
184
+ }
185
+ function gridCell(value) {
186
+ if (value === null || value === undefined)
187
+ return '';
188
+ if (typeof value === 'string' || typeof value === 'number')
189
+ return String(value);
190
+ if (typeof value === 'boolean')
191
+ return value ? '✓' : '';
192
+ if (Array.isArray(value))
193
+ return value.map(gridCell).join(', ');
194
+ if (typeof value === 'object') {
195
+ const record = value;
196
+ return gridCell(record.display_name ?? record.display ?? record.name ?? record.username ?? JSON.stringify(value));
197
+ }
198
+ return String(value);
199
+ }
200
+ export function appendGridSnapshots(document, resources) {
201
+ const grids = resources.filter((resource) => resource.kind === 'grid');
202
+ if (grids.length === 0)
203
+ return document;
204
+ const html = grids.map((resource) => {
205
+ const grid = resource.metadata?.grid;
206
+ const columns = grid?.structure?.columns ?? [];
207
+ const rows = grid?.rows ?? [];
208
+ return `<section class="ywtc-grid"><h2>${escapeHtml(grid?.title ?? resource.name)}</h2><table><thead><tr>${columns.map((column) => `<th>${escapeHtml(column.title ?? '')}</th>`).join('')}</tr></thead><tbody>${rows.map((row) => `<tr>${columns.map((_column, index) => `<td>${escapeHtml(gridCell(row.row?.[index]))}</td>`).join('')}</tr>`).join('')}</tbody></table></section>`;
209
+ }).join('');
210
+ const htmlNode = document.root.children?.find((node) => node.type === 'html');
211
+ if (htmlNode)
212
+ htmlNode.value = `${htmlNode.value ?? ''}${html}`;
213
+ return {
214
+ ...document,
215
+ warnings: [...document.warnings, ...grids.map((resource) => `Dynamic table "${resource.name}" was converted to a static table`)],
216
+ degraded: true,
217
+ metrics: { ...document.metrics, tables: document.metrics.tables + grids.length },
218
+ };
219
+ }
220
+ async function htmlToMarkdown(html) {
221
+ const result = await unified()
222
+ .use(rehypeParse, { fragment: true })
223
+ .use(rehypeRemark)
224
+ .use(remarkGfm)
225
+ .use(remarkStringify, { bullet: '-', fences: true })
226
+ .process(html);
227
+ return `${String(result).trimEnd()}\n`;
228
+ }
229
+ async function sanitizeHtml(html) {
230
+ const schema = {
231
+ ...defaultSchema,
232
+ tagNames: [...(defaultSchema.tagNames ?? []), 'aside', 'details', 'summary'],
233
+ attributes: {
234
+ ...defaultSchema.attributes,
235
+ '*': [...(defaultSchema.attributes?.['*'] ?? []), ['className', /^ywtc-[\w-]+$/]],
236
+ },
237
+ };
238
+ const result = await unified().use(rehypeParse, { fragment: true }).use(rehypeSanitize, schema).use(rehypeStringify).process(html);
239
+ return String(result);
240
+ }
241
+ function htmlFromDocument(document) {
242
+ return document.root.children?.find((node) => node.type === 'html')?.value ?? '<p></p>';
243
+ }
244
+ export function normalizedPreviewHtml(document) {
245
+ return htmlFromDocument(document);
246
+ }
247
+ export function renderedPreviewHtml(body, provider) {
248
+ const warnings = [];
249
+ return provider === 'confluence' ? storageToSemanticHtml(body, warnings) : yfmToHtml(body, warnings);
250
+ }
251
+ function relativeTarget(currentPath, targetPath) {
252
+ if (!currentPath)
253
+ return targetPath;
254
+ const from = currentPath.includes('/') ? currentPath.slice(0, currentPath.lastIndexOf('/')) : '.';
255
+ const relative = path.posix.relative(from, targetPath);
256
+ return relative || path.posix.basename(targetPath);
257
+ }
258
+ function rewritePortableHtml(html, context) {
259
+ const $ = load(html, null, false);
260
+ $('a').each((_index, element) => {
261
+ const href = $(element).attr('href');
262
+ if (!href)
263
+ return;
264
+ const current = context.sourcePages.get(context.currentPageId);
265
+ const pageToken = href.startsWith('page:') ? href.slice('page:'.length) : undefined;
266
+ const yandexSlug = current?.provider === 'yandex-wiki' ? resolveYandexReferenceSlug(current, href) : undefined;
267
+ const pageCandidate = [...context.sourcePages.values()].find((page) => (page.url === href
268
+ || page.locator === href
269
+ || href.endsWith(`/${page.locator}`)
270
+ || (pageToken !== undefined && (page.id === pageToken || page.title === pageToken))
271
+ || (yandexSlug !== undefined && normalizeWikiSlug(page.locator) === yandexSlug)));
272
+ if (pageCandidate) {
273
+ const destination = context.pages.get(pageCandidate.canonicalId);
274
+ if (destination) {
275
+ $(element).attr('href', 'path' in destination
276
+ ? relativeTarget(context.currentPath, destination.path)
277
+ : destination.url);
278
+ }
279
+ return;
280
+ }
281
+ const attachmentName = href.replace(/^attachment:/, '').split('/').at(-1)?.toLocaleLowerCase();
282
+ const resource = attachmentName ? context.resources.get(attachmentName) : undefined;
283
+ if (resource)
284
+ $(element).attr('href', 'path' in resource ? relativeTarget(context.currentPath, resource.path) : resource.url ?? resource.name);
285
+ });
286
+ $('img').each((_index, element) => {
287
+ const src = $(element).attr('src') ?? '';
288
+ const name = src.replace(/^attachment:/, '').split('/').at(-1);
289
+ if (!name)
290
+ return;
291
+ const resource = context.resources.get(name.toLocaleLowerCase());
292
+ if (resource && 'path' in resource)
293
+ $(element).attr('src', relativeTarget(context.currentPath, resource.path));
294
+ });
295
+ return $.html();
296
+ }
297
+ export async function renderMarkdown(document, context) {
298
+ const html = rewritePortableHtml(htmlFromDocument(document), context);
299
+ const body = await htmlToMarkdown(html);
300
+ return { body, warnings: [...document.warnings], degraded: document.degraded, representedReferences: document.references.length };
301
+ }
302
+ export async function renderStaticHtml(document, context) {
303
+ const rewritten = rewritePortableHtml(htmlFromDocument(document), context);
304
+ const body = await sanitizeHtml(rewritten);
305
+ return { body, warnings: [...document.warnings], degraded: document.degraded, representedReferences: document.references.length };
306
+ }
307
+ export async function renderYfm(document, context) {
308
+ if (document.rawFormat === 'yfm') {
309
+ let body = document.raw;
310
+ const replacement = (href) => {
311
+ const current = context.sourcePages.get(context.currentPageId);
312
+ if (!current)
313
+ return undefined;
314
+ const slug = current.provider === 'yandex-wiki' ? resolveYandexReferenceSlug(current, href) : undefined;
315
+ const source = [...context.sourcePages.values()].find((candidate) => (candidate.url === href
316
+ || (slug !== undefined && normalizeWikiSlug(candidate.locator) === slug)));
317
+ const destination = source ? context.pages.get(source.canonicalId) : undefined;
318
+ return destination && 'locator' in destination && destination.locator ? destination.locator : undefined;
319
+ };
320
+ body = body.replace(/(!?\[[^\]]*\]\()([^\s)]+)([^)]*\))/g, (match, prefix, href, suffix) => {
321
+ const next = replacement(href);
322
+ return next ? `${prefix}${next}${suffix}` : match;
323
+ });
324
+ body = body.replace(/\[\[([^\]|]+)(\|[^\]]+)?\]\]/g, (match, href, label = '') => {
325
+ const next = replacement(href);
326
+ return next ? `[[${next}${label}]]` : match;
327
+ });
328
+ for (const source of context.sourcePages.values()) {
329
+ const destination = context.pages.get(source.canonicalId);
330
+ if (destination && 'locator' in destination && destination.locator)
331
+ body = body.replaceAll(source.url, destination.locator);
332
+ }
333
+ const $ = load(htmlFromDocument(document), null, false);
334
+ const gridHtml = $('.ywtc-grid').toArray().map((element) => $.html(element)).join('');
335
+ if (gridHtml)
336
+ body = `${body.trimEnd()}\n\n${(await htmlToMarkdown(gridHtml)).trimStart()}`;
337
+ return { body, warnings: [...document.warnings], degraded: document.degraded, representedReferences: document.references.length };
338
+ }
339
+ const body = await htmlToMarkdown(rewritePortableHtml(htmlFromDocument(document), context));
340
+ return { body, warnings: [...document.warnings, 'Confluence Storage Format was converted to YFM-compatible Markdown'], degraded: document.degraded, representedReferences: document.references.length };
341
+ }
342
+ export async function renderConfluenceStorage(document, page, context, spaceKey) {
343
+ if (document.rawFormat === 'confluence-storage') {
344
+ const $ = load(`<main data-root>${document.raw}</main>`, { xmlMode: true }, false);
345
+ $('ri\\:page').each((_index, element) => {
346
+ const title = $(element).attr('ri:content-title');
347
+ const id = $(element).attr('ri:content-id');
348
+ const sourceSpace = $(element).attr('ri:space-key');
349
+ const source = [...context.sourcePages.values()].find((candidate) => (candidate.id === id || (candidate.title === title && (!sourceSpace || candidate.space === sourceSpace))));
350
+ const destination = source ? context.pages.get(source.canonicalId) : undefined;
351
+ if (destination && 'title' in destination) {
352
+ const destinationSpace = 'provider' in destination ? destination.space : undefined;
353
+ $(element)
354
+ .attr('ri:content-title', destination.title)
355
+ .attr('ri:space-key', destinationSpace ?? spaceKey)
356
+ .removeAttr('ri:content-id');
357
+ }
358
+ });
359
+ return {
360
+ body: $('main[data-root]').html() ?? '<p></p>',
361
+ warnings: [...document.warnings],
362
+ degraded: document.degraded,
363
+ representedReferences: document.references.length,
364
+ };
365
+ }
366
+ const pagesBySlug = new Map();
367
+ for (const source of context.sourcePages.values()) {
368
+ const destination = context.pages.get(source.canonicalId);
369
+ if (!destination || !('title' in destination))
370
+ continue;
371
+ const numericId = Number(source.id);
372
+ pagesBySlug.set(normalizeWikiSlug(source.locator).toLocaleLowerCase(), {
373
+ sourceId: Number.isFinite(numericId) ? numericId : 0,
374
+ slug: source.locator,
375
+ destinationTitle: destination.title,
376
+ });
377
+ }
378
+ const attachments = new Map();
379
+ for (const [name, resource] of context.resources)
380
+ attachments.set(name, resource.name);
381
+ const converted = convertYfmToStorage(document.raw, {
382
+ currentSlug: page.locator,
383
+ spaceKey,
384
+ wikiWebUrl: new URL(page.url).origin,
385
+ pagesBySlug,
386
+ attachmentsByReference: attachments,
387
+ });
388
+ const $ = load(htmlFromDocument(document), null, false);
389
+ const gridStorage = $('.ywtc-grid').toArray().map((element) => $(element).html() ?? '').join('');
390
+ return {
391
+ body: `${converted.storage}${gridStorage}`,
392
+ warnings: [...document.warnings, ...converted.warnings],
393
+ degraded: document.degraded || converted.warnings.length > 0,
394
+ representedReferences: document.references.length,
395
+ };
396
+ }
397
+ export function resolveYandexReferenceSlug(page, href) {
398
+ if (href.startsWith('#') || /^(?:mailto|tel):/i.test(href))
399
+ return undefined;
400
+ try {
401
+ const target = new URL(href);
402
+ if (target.origin !== new URL(page.url).origin)
403
+ return undefined;
404
+ return normalizeWikiSlug(target.pathname);
405
+ }
406
+ catch {
407
+ const clean = href.split(/[?#]/, 1)[0];
408
+ if (!clean)
409
+ return undefined;
410
+ return clean.startsWith('/') ? normalizeWikiSlug(clean) : resolveRelativeWikiSlug(page.locator, clean);
411
+ }
412
+ }
413
+ export function destinationPageFromPath(path, title) {
414
+ return { provider: 'confluence', profile: 'filesystem', id: path, canonicalId: path, title, url: path, locator: path };
415
+ }
416
+ //# sourceMappingURL=content-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-model.js","sourceRoot":"","sources":["../src/content-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { YandexGrid } from './types.js';
2
+ export interface DestinationPageReference {
3
+ sourceId: number;
4
+ slug: string;
5
+ destinationTitle: string;
6
+ }
7
+ export interface ConversionContext {
8
+ currentSlug: string;
9
+ spaceKey: string;
10
+ wikiWebUrl: string;
11
+ pagesBySlug: Map<string, DestinationPageReference>;
12
+ attachmentsByReference: Map<string, string>;
13
+ }
14
+ export interface ConversionResult {
15
+ storage: string;
16
+ warnings: string[];
17
+ stats: ConversionStats;
18
+ }
19
+ export interface ConversionStats {
20
+ internalPageLinks: number;
21
+ externalLinks: number;
22
+ attachmentLinks: number;
23
+ anchorLinks: number;
24
+ attachedImages: number;
25
+ externalImages: number;
26
+ tables: number;
27
+ codeBlocks: number;
28
+ }
29
+ export declare function emptyConversionStats(): ConversionStats;
30
+ export declare function mergeConversionStats(target: ConversionStats, ...sources: ConversionStats[]): ConversionStats;
31
+ export declare function convertYfmToStorage(content: string, context: ConversionContext): ConversionResult;
32
+ /**
33
+ * Render source YFM for the local report comparator. The Diplodoc sanitizer is
34
+ * deliberately enabled; the report adds a second sanitization layer and loads
35
+ * this markup inside an iframe without script privileges.
36
+ */
37
+ export declare function renderYfmPreview(content: string): string;
38
+ export declare function convertGridToStorage(grid: YandexGrid, context: ConversionContext): ConversionResult;
39
+ export declare function createAttachmentReferenceMap(entries: Array<{
40
+ sourceName: string;
41
+ destinationName: string;
42
+ downloadUrl?: string;
43
+ }>): Map<string, string>;