@artinstack/migrator 0.1.14 → 0.1.16
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/dist/{chunk-X4TJQWZF.js → chunk-6RP7HWTY.js} +24 -3
- package/dist/{chunk-X4TJQWZF.js.map → chunk-6RP7HWTY.js.map} +1 -1
- package/dist/{chunk-HUSXCKPI.js → chunk-BF2AZ7S2.js} +32 -2
- package/dist/chunk-BF2AZ7S2.js.map +1 -0
- package/dist/{chunk-S4GMDRGX.js → chunk-DZI5C6KR.js} +82 -12
- package/dist/chunk-DZI5C6KR.js.map +1 -0
- package/dist/{chunk-ZKIAIP3B.js → chunk-H23JQVJZ.js} +10 -6
- package/dist/chunk-H23JQVJZ.js.map +1 -0
- package/dist/{chunk-S55525RD.js → chunk-PHL6U6CP.js} +57 -17
- package/dist/chunk-PHL6U6CP.js.map +1 -0
- package/dist/{chunk-5TRCJONX.js → chunk-ZDQBXTIV.js} +3 -3
- package/dist/cli/index.js +5 -5
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -6
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +5 -1
- package/dist/{media-urls-u49RCyPn.d.ts → media-urls-ScJvYI7b.d.ts} +11 -7
- package/dist/{rewrite-inline-images-BsgSquzV.d.ts → rewrite-inline-images-escjz3gT.d.ts} +2 -2
- package/dist/sinks/index.d.ts +3 -3
- package/dist/sinks/index.js +3 -3
- package/dist/transformers/index.d.ts +2 -2
- package/dist/transformers/index.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-HUSXCKPI.js.map +0 -1
- package/dist/chunk-S4GMDRGX.js.map +0 -1
- package/dist/chunk-S55525RD.js.map +0 -1
- package/dist/chunk-ZKIAIP3B.js.map +0 -1
- /package/dist/{chunk-5TRCJONX.js.map → chunk-ZDQBXTIV.js.map} +0 -0
|
@@ -26,7 +26,9 @@ function createWpContentGatewayRewrite(gatewayBase, publicOrigin) {
|
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
var IMAGE_EXTENSIONS = "jpe?g|png|gif|webp|avif|svg";
|
|
29
|
+
var VIDEO_EXTENSIONS = "mp4|webm|ogg|mov";
|
|
29
30
|
var IMAGE_EXTENSION_PATTERN = new RegExp(String.raw`\.(?:${IMAGE_EXTENSIONS})\b`, "i");
|
|
31
|
+
var VIDEO_EXTENSION_PATTERN = new RegExp(String.raw`\.(?:${VIDEO_EXTENSIONS})\b`, "i");
|
|
30
32
|
var QUOTED_IMAGE_PATH = String.raw`[^"']+\.(?:${IMAGE_EXTENSIONS})(?:\?[^"'#]*)?(?:#.*)?`;
|
|
31
33
|
var SHORTCODE_IMAGE_PARAM_PATTERN = new RegExp(
|
|
32
34
|
String.raw`\b(?:image|bg_image|background_image|url)\s*=\s*["'](${QUOTED_IMAGE_PATH})["']`,
|
|
@@ -37,6 +39,7 @@ var BARE_SRC_PARAM_PATTERN = new RegExp(
|
|
|
37
39
|
"gi"
|
|
38
40
|
);
|
|
39
41
|
var DATA_BG_IMAGE_PATTERN = /\bdata-bg-image\s*=\s*["']([^"']+)["']/gi;
|
|
42
|
+
var DATA_VIDEO_URL_PATTERN = /\bdata-video-url\s*=\s*["']([^"']+)["']/gi;
|
|
40
43
|
var BACKGROUND_IMAGE_URL_PATTERN = /background(?:-image)?\s*:[^;]*?url\s*\(\s*(['"]?)([^'")]+)\1\s*\)/gi;
|
|
41
44
|
var HERO_URL_PARAM_PATTERN = new RegExp(
|
|
42
45
|
String.raw`\b(?:bg_image|background_image)\s*=\s*["'](${QUOTED_IMAGE_PATH})["']`,
|
|
@@ -49,12 +52,19 @@ var INLINE_IMAGE_PARAM_PATTERN = new RegExp(
|
|
|
49
52
|
var IMG_TAG_SRC_PATTERN = /<img\b[^>]*\bsrc\s*=\s*["']([^"']+)["']/gi;
|
|
50
53
|
var DATA_WP_ATTACHMENT_ID_PATTERN = /\bdata-wp-attachment-id\s*=\s*["'](\d+)["']/gi;
|
|
51
54
|
var SHORTCODE_GALLERY_IDS_PATTERN = /\[(?:gallery|oshine_gallery|vc_gallery|nggallery)\b[^\]]*\bids\s*=\s*["']([^"']+)["']/gi;
|
|
52
|
-
function
|
|
55
|
+
function ingestContentAssetUrl(urls, raw) {
|
|
53
56
|
const normalized = normalizeAssetUrl(raw ?? "");
|
|
54
|
-
if (normalized &&
|
|
57
|
+
if (normalized && isLikelyContentAssetUrl(normalized)) {
|
|
55
58
|
urls.add(normalized);
|
|
56
59
|
}
|
|
57
60
|
}
|
|
61
|
+
function ingestMigrationRefUrl(urls, raw) {
|
|
62
|
+
if (!raw || !isMigrationMediaRef(raw)) return;
|
|
63
|
+
const sourceId = parseMigrationMediaRef(raw);
|
|
64
|
+
if (sourceId?.startsWith("url:")) {
|
|
65
|
+
ingestContentAssetUrl(urls, sourceId.slice("url:".length));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
58
68
|
function extractImgTagSrcs(content) {
|
|
59
69
|
if (!content.trim()) return [];
|
|
60
70
|
const $ = cheerio.load(content, { xml: false });
|
|
@@ -65,11 +75,30 @@ function extractImgTagSrcs(content) {
|
|
|
65
75
|
});
|
|
66
76
|
return srcs;
|
|
67
77
|
}
|
|
78
|
+
function extractVideoMediaSrcs(content) {
|
|
79
|
+
if (!content.trim()) return [];
|
|
80
|
+
const $ = cheerio.load(content, { xml: false });
|
|
81
|
+
const srcs = [];
|
|
82
|
+
$("video[src]").each((_, el) => {
|
|
83
|
+
const src = $(el).attr("src")?.trim();
|
|
84
|
+
if (src) srcs.push(src);
|
|
85
|
+
});
|
|
86
|
+
$("video source[src]").each((_, el) => {
|
|
87
|
+
const src = $(el).attr("src")?.trim();
|
|
88
|
+
if (src) srcs.push(src);
|
|
89
|
+
});
|
|
90
|
+
return srcs;
|
|
91
|
+
}
|
|
68
92
|
function hasImageExtension(value) {
|
|
69
93
|
const withoutHash = value.split("#", 1)[0] ?? value;
|
|
70
94
|
const withoutQuery = withoutHash.split("?", 1)[0] ?? withoutHash;
|
|
71
95
|
return IMAGE_EXTENSION_PATTERN.test(withoutQuery);
|
|
72
96
|
}
|
|
97
|
+
function hasVideoExtension(value) {
|
|
98
|
+
const withoutHash = value.split("#", 1)[0] ?? value;
|
|
99
|
+
const withoutQuery = withoutHash.split("?", 1)[0] ?? withoutHash;
|
|
100
|
+
return VIDEO_EXTENSION_PATTERN.test(withoutQuery);
|
|
101
|
+
}
|
|
73
102
|
function extractDataBgImageUrls(content) {
|
|
74
103
|
const urls = [];
|
|
75
104
|
for (const match of content.matchAll(DATA_BG_IMAGE_PATTERN)) {
|
|
@@ -78,6 +107,14 @@ function extractDataBgImageUrls(content) {
|
|
|
78
107
|
}
|
|
79
108
|
return urls;
|
|
80
109
|
}
|
|
110
|
+
function extractDataVideoUrlValues(content) {
|
|
111
|
+
const urls = [];
|
|
112
|
+
for (const match of content.matchAll(DATA_VIDEO_URL_PATTERN)) {
|
|
113
|
+
const raw = match[1]?.trim();
|
|
114
|
+
if (raw) urls.push(raw);
|
|
115
|
+
}
|
|
116
|
+
return urls;
|
|
117
|
+
}
|
|
81
118
|
function extractCssBackgroundImageUrls(content) {
|
|
82
119
|
const urls = [];
|
|
83
120
|
for (const match of content.matchAll(BACKGROUND_IMAGE_URL_PATTERN)) {
|
|
@@ -108,6 +145,22 @@ function isLikelyImageUrl(url) {
|
|
|
108
145
|
}
|
|
109
146
|
return hasImageExtension(url);
|
|
110
147
|
}
|
|
148
|
+
function isLikelyVideoUrl(url) {
|
|
149
|
+
if (!url || url.startsWith("data:")) return false;
|
|
150
|
+
if (url.startsWith("/")) {
|
|
151
|
+
return hasVideoExtension(url);
|
|
152
|
+
}
|
|
153
|
+
if (!/^https?:\/\//i.test(url)) return false;
|
|
154
|
+
try {
|
|
155
|
+
const { pathname } = new URL(url);
|
|
156
|
+
if (hasVideoExtension(pathname)) return true;
|
|
157
|
+
} catch {
|
|
158
|
+
}
|
|
159
|
+
return hasVideoExtension(url);
|
|
160
|
+
}
|
|
161
|
+
function isLikelyContentAssetUrl(url) {
|
|
162
|
+
return isLikelyImageUrl(url) || isLikelyVideoUrl(url);
|
|
163
|
+
}
|
|
111
164
|
function pushFeaturedCandidate(candidates, raw, index, tier) {
|
|
112
165
|
const normalized = normalizeAssetUrl(raw ?? "");
|
|
113
166
|
if (!normalized || !isLikelyImageUrl(normalized)) return;
|
|
@@ -174,25 +227,40 @@ function discoverContentAssets(content) {
|
|
|
174
227
|
const urls = /* @__PURE__ */ new Set();
|
|
175
228
|
for (const raw of extractImgTagSrcs(content)) {
|
|
176
229
|
if (isMigrationMediaRef(raw)) {
|
|
177
|
-
|
|
178
|
-
if (sourceId?.startsWith("url:")) {
|
|
179
|
-
ingestLikelyImageUrl(urls, sourceId.slice("url:".length));
|
|
180
|
-
}
|
|
230
|
+
ingestMigrationRefUrl(urls, raw);
|
|
181
231
|
continue;
|
|
182
232
|
}
|
|
183
|
-
|
|
233
|
+
ingestContentAssetUrl(urls, raw);
|
|
234
|
+
}
|
|
235
|
+
for (const raw of extractVideoMediaSrcs(content)) {
|
|
236
|
+
if (isMigrationMediaRef(raw)) {
|
|
237
|
+
ingestMigrationRefUrl(urls, raw);
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
ingestContentAssetUrl(urls, raw);
|
|
184
241
|
}
|
|
185
242
|
for (const match of content.matchAll(SHORTCODE_IMAGE_PARAM_PATTERN)) {
|
|
186
|
-
|
|
243
|
+
ingestContentAssetUrl(urls, match[1]);
|
|
187
244
|
}
|
|
188
245
|
for (const match of content.matchAll(BARE_SRC_PARAM_PATTERN)) {
|
|
189
|
-
|
|
246
|
+
ingestContentAssetUrl(urls, match[1]);
|
|
190
247
|
}
|
|
191
248
|
for (const raw of extractDataBgImageUrls(content)) {
|
|
192
|
-
|
|
249
|
+
if (isMigrationMediaRef(raw)) {
|
|
250
|
+
ingestMigrationRefUrl(urls, raw);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
ingestContentAssetUrl(urls, raw);
|
|
254
|
+
}
|
|
255
|
+
for (const raw of extractDataVideoUrlValues(content)) {
|
|
256
|
+
if (isMigrationMediaRef(raw)) {
|
|
257
|
+
ingestMigrationRefUrl(urls, raw);
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
ingestContentAssetUrl(urls, raw);
|
|
193
261
|
}
|
|
194
262
|
for (const raw of extractCssBackgroundImageUrls(content)) {
|
|
195
|
-
|
|
263
|
+
ingestContentAssetUrl(urls, raw);
|
|
196
264
|
}
|
|
197
265
|
return {
|
|
198
266
|
urls: [...urls],
|
|
@@ -284,6 +352,8 @@ export {
|
|
|
284
352
|
discoverRawImgSrcs,
|
|
285
353
|
normalizeAssetUrl,
|
|
286
354
|
isLikelyImageUrl,
|
|
355
|
+
isLikelyVideoUrl,
|
|
356
|
+
isLikelyContentAssetUrl,
|
|
287
357
|
discoverFeaturedAssetCandidateUrls,
|
|
288
358
|
resolveFeaturedContentAssetUrl,
|
|
289
359
|
discoverContentAssets,
|
|
@@ -299,4 +369,4 @@ export {
|
|
|
299
369
|
resolveMigrationMediaSourceId,
|
|
300
370
|
buildContentMediaUrlIndex
|
|
301
371
|
};
|
|
302
|
-
//# sourceMappingURL=chunk-
|
|
372
|
+
//# sourceMappingURL=chunk-DZI5C6KR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/media-urls.ts"],"sourcesContent":["import * as cheerio from \"cheerio\";\n\n// --- Origin URL rewrite (gateway → public origin before parse/discovery) ---\n\nexport interface OriginUrlRewriteRule {\n /** Literal substring or regex matched against the full text block. */\n match: string | RegExp;\n replace: string;\n}\n\nexport interface OriginUrlRewriteConfig {\n rules: OriginUrlRewriteRule[];\n}\n\n/** Swap legacy gateway/staging host fragments before parse, fetch, or asset discovery. */\nexport function rewriteOriginUrlsInText(text: string, config: OriginUrlRewriteConfig): string {\n if (!text || config.rules.length === 0) return text;\n\n let result = text;\n for (const rule of config.rules) {\n if (typeof rule.match === \"string\") {\n if (!rule.match) continue;\n result = result.split(rule.match).join(rule.replace);\n continue;\n }\n result = result.replace(rule.match, rule.replace);\n }\n return result;\n}\n\n/** Build a rule that rewrites API-gateway `/prod/wp-content/` paths to a public origin. */\nexport function createWpContentGatewayRewrite(gatewayBase: string, publicOrigin: string): OriginUrlRewriteConfig {\n const normalizedGateway = gatewayBase.replace(/\\/$/, \"\");\n const normalizedPublic = publicOrigin.replace(/\\/$/, \"\");\n return {\n rules: [\n {\n match: `${normalizedGateway}/wp-content/`,\n replace: `${normalizedPublic}/wp-content/`,\n },\n ],\n };\n}\n\n// --- Content asset URL discovery & normalization ---\n\nconst IMAGE_EXTENSIONS = \"jpe?g|png|gif|webp|avif|svg\";\nconst VIDEO_EXTENSIONS = \"mp4|webm|ogg|mov\";\n/** Image file extension in a path or URL (allows trailing `?query` / `#hash`). */\nconst IMAGE_EXTENSION_PATTERN = new RegExp(String.raw`\\.(?:${IMAGE_EXTENSIONS})\\b`, \"i\");\nconst VIDEO_EXTENSION_PATTERN = new RegExp(String.raw`\\.(?:${VIDEO_EXTENSIONS})\\b`, \"i\");\n\n/** Captured value must contain an image extension — skips `url=\"…/about\"`, `<iframe src=\"…youtube…\">`, etc. */\nconst QUOTED_IMAGE_PATH = String.raw`[^\"']+\\.(?:${IMAGE_EXTENSIONS})(?:\\?[^\"'#]*)?(?:#.*)?`;\n\nconst SHORTCODE_IMAGE_PARAM_PATTERN = new RegExp(\n String.raw`\\b(?:image|bg_image|background_image|url)\\s*=\\s*[\"'](${QUOTED_IMAGE_PATH})[\"']`,\n \"gi\",\n);\n\n/** Bare `src=\"…jpg\"` outside `<img>` (shortcode fragments); `<img src>` handled by cheerio. */\nconst BARE_SRC_PARAM_PATTERN = new RegExp(\n String.raw`\\bsrc\\s*=\\s*[\"'](${QUOTED_IMAGE_PATH})[\"']`,\n \"gi\",\n);\n\nconst DATA_BG_IMAGE_PATTERN = /\\bdata-bg-image\\s*=\\s*[\"']([^\"']+)[\"']/gi;\nconst DATA_VIDEO_URL_PATTERN = /\\bdata-video-url\\s*=\\s*[\"']([^\"']+)[\"']/gi;\n\n/** Inline CSS `background` / `background-image: url(…)` (quoted or bare). */\nconst BACKGROUND_IMAGE_URL_PATTERN =\n /background(?:-image)?\\s*:[^;]*?url\\s*\\(\\s*(['\"]?)([^'\")]+)\\1\\s*\\)/gi;\n\nconst HERO_URL_PARAM_PATTERN = new RegExp(\n String.raw`\\b(?:bg_image|background_image)\\s*=\\s*[\"'](${QUOTED_IMAGE_PATH})[\"']`,\n \"gi\",\n);\n\nconst INLINE_IMAGE_PARAM_PATTERN = new RegExp(\n String.raw`\\bimage\\s*=\\s*[\"'](${QUOTED_IMAGE_PATH})[\"']`,\n \"gi\",\n);\n\nconst IMG_TAG_SRC_PATTERN = /<img\\b[^>]*\\bsrc\\s*=\\s*[\"']([^\"']+)[\"']/gi;\n\nconst DATA_WP_ATTACHMENT_ID_PATTERN = /\\bdata-wp-attachment-id\\s*=\\s*[\"'](\\d+)[\"']/gi;\n\n/** Builder / core gallery shortcodes with explicit `ids=` lists (pre- or post-flatten). */\nconst SHORTCODE_GALLERY_IDS_PATTERN =\n /\\[(?:gallery|oshine_gallery|vc_gallery|nggallery)\\b[^\\]]*\\bids\\s*=\\s*[\"']([^\"']+)[\"']/gi;\n\nexport interface ContentAssetDiscovery {\n /** Network-resolvable image and self-hosted video paths (`<img>`, `<video>`, `data-video-url`, …). */\n urls: string[];\n /**\n * WordPress attachment post ids referenced in content without an inline URL in this\n * file context (`data-wp-attachment-id`, `[gallery ids=…]`, `[oshine_gallery ids=…]`, …).\n */\n unresolvedAttachmentIds: string[];\n}\n\ninterface FeaturedAssetCandidate {\n url: string;\n index: number;\n tier: 0 | 1;\n}\n\nfunction ingestLikelyImageUrl(urls: Set<string>, raw: string | undefined): void {\n const normalized = normalizeAssetUrl(raw ?? \"\");\n if (normalized && isLikelyImageUrl(normalized)) {\n urls.add(normalized);\n }\n}\n\nfunction ingestContentAssetUrl(urls: Set<string>, raw: string | undefined): void {\n const normalized = normalizeAssetUrl(raw ?? \"\");\n if (normalized && isLikelyContentAssetUrl(normalized)) {\n urls.add(normalized);\n }\n}\n\nfunction ingestMigrationRefUrl(urls: Set<string>, raw: string | undefined): void {\n if (!raw || !isMigrationMediaRef(raw)) return;\n const sourceId = parseMigrationMediaRef(raw);\n if (sourceId?.startsWith(\"url:\")) {\n ingestContentAssetUrl(urls, sourceId.slice(\"url:\".length));\n }\n}\n\nfunction extractImgTagSrcs(content: string): string[] {\n if (!content.trim()) return [];\n const $ = cheerio.load(content, { xml: false });\n const srcs: string[] = [];\n $(\"img[src]\").each((_, el) => {\n const src = $(el).attr(\"src\")?.trim();\n if (src) srcs.push(src);\n });\n return srcs;\n}\n\nfunction extractVideoMediaSrcs(content: string): string[] {\n if (!content.trim()) return [];\n const $ = cheerio.load(content, { xml: false });\n const srcs: string[] = [];\n $(\"video[src]\").each((_, el) => {\n const src = $(el).attr(\"src\")?.trim();\n if (src) srcs.push(src);\n });\n $(\"video source[src]\").each((_, el) => {\n const src = $(el).attr(\"src\")?.trim();\n if (src) srcs.push(src);\n });\n return srcs;\n}\n\nfunction hasImageExtension(value: string): boolean {\n const withoutHash = value.split(\"#\", 1)[0] ?? value;\n const withoutQuery = withoutHash.split(\"?\", 1)[0] ?? withoutHash;\n return IMAGE_EXTENSION_PATTERN.test(withoutQuery);\n}\n\nfunction hasVideoExtension(value: string): boolean {\n const withoutHash = value.split(\"#\", 1)[0] ?? value;\n const withoutQuery = withoutHash.split(\"?\", 1)[0] ?? withoutHash;\n return VIDEO_EXTENSION_PATTERN.test(withoutQuery);\n}\n\nfunction extractDataBgImageUrls(content: string): string[] {\n const urls: string[] = [];\n for (const match of content.matchAll(DATA_BG_IMAGE_PATTERN)) {\n const raw = match[1]?.trim();\n if (raw) urls.push(raw);\n }\n return urls;\n}\n\nfunction extractDataVideoUrlValues(content: string): string[] {\n const urls: string[] = [];\n for (const match of content.matchAll(DATA_VIDEO_URL_PATTERN)) {\n const raw = match[1]?.trim();\n if (raw) urls.push(raw);\n }\n return urls;\n}\n\nfunction extractCssBackgroundImageUrls(content: string): string[] {\n const urls: string[] = [];\n for (const match of content.matchAll(BACKGROUND_IMAGE_URL_PATTERN)) {\n const raw = match[2]?.trim();\n if (raw) urls.push(raw);\n }\n return urls;\n}\n\n/** All `<img src>` values (including those not ingested as vault assets). */\nexport function discoverRawImgSrcs(content: string): string[] {\n return extractImgTagSrcs(content).filter((src) => !src.startsWith(\"data:\"));\n}\n\n/** Normalize protocol-relative and trim; skip data URIs. */\nexport function normalizeAssetUrl(raw: string): string | undefined {\n const trimmed = raw.trim();\n if (!trimmed || trimmed.startsWith(\"data:\")) return undefined;\n if (trimmed.startsWith(\"//\")) return `https:${trimmed}`;\n return trimmed;\n}\n\n/** Heuristic: URL likely points at a raster/vector image asset, not a page link. */\nexport function isLikelyImageUrl(url: string): boolean {\n if (!url || url.startsWith(\"data:\")) return false;\n\n if (url.startsWith(\"/\")) {\n return hasImageExtension(url);\n }\n\n if (!/^https?:\\/\\//i.test(url)) return false;\n\n try {\n const { pathname } = new URL(url);\n if (hasImageExtension(pathname)) return true;\n } catch {\n // fall through — malformed absolute URL\n }\n\n return hasImageExtension(url);\n}\n\n/** Heuristic: URL likely points at a self-hosted video asset (mp4/webm/ogg/mov), not a page or embed. */\nexport function isLikelyVideoUrl(url: string): boolean {\n if (!url || url.startsWith(\"data:\")) return false;\n\n if (url.startsWith(\"/\")) {\n return hasVideoExtension(url);\n }\n\n if (!/^https?:\\/\\//i.test(url)) return false;\n\n try {\n const { pathname } = new URL(url);\n if (hasVideoExtension(pathname)) return true;\n } catch {\n // fall through — malformed absolute URL\n }\n\n return hasVideoExtension(url);\n}\n\n/** Image or self-hosted video URL suitable for vault ingest (not oEmbed / page links). */\nexport function isLikelyContentAssetUrl(url: string): boolean {\n return isLikelyImageUrl(url) || isLikelyVideoUrl(url);\n}\n\nfunction pushFeaturedCandidate(\n candidates: FeaturedAssetCandidate[],\n raw: string | undefined,\n index: number,\n tier: 0 | 1,\n): void {\n const normalized = normalizeAssetUrl(raw ?? \"\");\n if (!normalized || !isLikelyImageUrl(normalized)) return;\n candidates.push({ url: normalized, index, tier });\n}\n\nfunction collectFeaturedAssetCandidates(content: string): FeaturedAssetCandidate[] {\n const candidates: FeaturedAssetCandidate[] = [];\n\n for (const match of content.matchAll(DATA_BG_IMAGE_PATTERN)) {\n pushFeaturedCandidate(candidates, match[1], match.index ?? 0, 0);\n }\n for (const match of content.matchAll(BACKGROUND_IMAGE_URL_PATTERN)) {\n pushFeaturedCandidate(candidates, match[2], match.index ?? 0, 0);\n }\n for (const match of content.matchAll(HERO_URL_PARAM_PATTERN)) {\n pushFeaturedCandidate(candidates, match[1], match.index ?? 0, 0);\n }\n for (const match of content.matchAll(IMG_TAG_SRC_PATTERN)) {\n pushFeaturedCandidate(candidates, match[1], match.index ?? 0, 1);\n }\n for (const match of content.matchAll(INLINE_IMAGE_PARAM_PATTERN)) {\n pushFeaturedCandidate(candidates, match[1], match.index ?? 0, 1);\n }\n\n return candidates;\n}\n\n/**\n * Ordered featured-image candidates when `_thumbnail_id` is missing — heroes\n * (`data-bg-image`, CSS backgrounds, `bg_image=`) before inline assets; within\n * each tier, first in document order wins. Filename tokens (`_w`, `_2048`, …)\n * are not interpreted as quality signals.\n */\nexport function discoverFeaturedAssetCandidateUrls(content: string): string[] {\n if (!content.trim()) return [];\n\n const ranked = [...collectFeaturedAssetCandidates(content)].sort((left, right) => {\n if (left.tier !== right.tier) return left.tier - right.tier;\n return left.index - right.index;\n });\n\n const urls: string[] = [];\n const seen = new Set<string>();\n for (const candidate of ranked) {\n if (seen.has(candidate.url)) continue;\n seen.add(candidate.url);\n urls.push(candidate.url);\n }\n return urls;\n}\n\n/** Best featured-image URL from post/page HTML when attachment id is unavailable. */\nexport function resolveFeaturedContentAssetUrl(content: string): string | undefined {\n return discoverFeaturedAssetCandidateUrls(content)[0];\n}\n\nfunction parseAttachmentIdList(raw: string | undefined): string[] {\n if (!raw?.trim()) return [];\n return raw\n .split(\",\")\n .map((part) => part.trim())\n .filter((part) => /^\\d+$/.test(part));\n}\n\nfunction extractAttachmentIdsFromContent(content: string): string[] {\n const ids = new Set<string>();\n\n for (const match of content.matchAll(DATA_WP_ATTACHMENT_ID_PATTERN)) {\n const id = match[1]?.trim();\n if (id) ids.add(id);\n }\n\n for (const match of content.matchAll(SHORTCODE_GALLERY_IDS_PATTERN)) {\n for (const id of parseAttachmentIdList(match[1])) {\n ids.add(id);\n }\n }\n\n return [...ids];\n}\n\n/**\n * Generic content-discovery pass: collect resolvable image/video URLs and attachment ids\n * that still need an index / REST / crawl resolution step.\n */\nexport function discoverContentAssets(content: string): ContentAssetDiscovery {\n if (!content.trim()) {\n return { urls: [], unresolvedAttachmentIds: [] };\n }\n\n const urls = new Set<string>();\n\n for (const raw of extractImgTagSrcs(content)) {\n if (isMigrationMediaRef(raw)) {\n ingestMigrationRefUrl(urls, raw);\n continue;\n }\n ingestContentAssetUrl(urls, raw);\n }\n\n for (const raw of extractVideoMediaSrcs(content)) {\n if (isMigrationMediaRef(raw)) {\n ingestMigrationRefUrl(urls, raw);\n continue;\n }\n ingestContentAssetUrl(urls, raw);\n }\n\n for (const match of content.matchAll(SHORTCODE_IMAGE_PARAM_PATTERN)) {\n ingestContentAssetUrl(urls, match[1]);\n }\n\n for (const match of content.matchAll(BARE_SRC_PARAM_PATTERN)) {\n ingestContentAssetUrl(urls, match[1]);\n }\n\n for (const raw of extractDataBgImageUrls(content)) {\n if (isMigrationMediaRef(raw)) {\n ingestMigrationRefUrl(urls, raw);\n continue;\n }\n ingestContentAssetUrl(urls, raw);\n }\n\n for (const raw of extractDataVideoUrlValues(content)) {\n if (isMigrationMediaRef(raw)) {\n ingestMigrationRefUrl(urls, raw);\n continue;\n }\n ingestContentAssetUrl(urls, raw);\n }\n\n for (const raw of extractCssBackgroundImageUrls(content)) {\n ingestContentAssetUrl(urls, raw);\n }\n\n return {\n urls: [...urls],\n unresolvedAttachmentIds: extractAttachmentIdsFromContent(content),\n };\n}\n\n/**\n * Generic content-discovery pass: collect image and self-hosted video URLs from HTML\n * `<img>` / `<video>` / `<source>`, section hero markers (`data-bg-image`, `data-video-url`),\n * inline CSS backgrounds, and common shortcode/builder attributes without parsing\n * builder-specific structure (Tatsu, Elementor, etc.).\n */\nexport function discoverContentAssetUrls(content: string): string[] {\n return discoverContentAssets(content).urls;\n}\n\n/** @deprecated Use discoverContentAssetUrls — kept for call-site clarity during transition. */\nexport function extractInlineImageSrcs(content: string): string[] {\n return discoverContentAssetUrls(content);\n}\n\n// --- Migration media refs (`artinstack-migration://asset/{sourceId}`) ---\n\n/** Pseudo-URL scheme for portable migration asset pointers (not WordPress shortcodes). */\nexport const MIGRATION_MEDIA_REF_SCHEME = \"artinstack-migration://asset/\";\n\n/** Build `artinstack-migration://asset/{sourceId}` (percent-encodes the normalizer source id). */\nexport function formatMigrationMediaRef(sourceAssetId: string): string {\n return `${MIGRATION_MEDIA_REF_SCHEME}${encodeURIComponent(sourceAssetId)}`;\n}\n\nexport function isMigrationMediaRef(value: string): boolean {\n return value.trim().startsWith(MIGRATION_MEDIA_REF_SCHEME);\n}\n\n/** Parse a migration media ref back to the normalizer `sourceId`, or `undefined` if not a ref. */\nexport function parseMigrationMediaRef(value: string): string | undefined {\n const trimmed = value.trim();\n if (!trimmed.startsWith(MIGRATION_MEDIA_REF_SCHEME)) return undefined;\n const encoded = trimmed.slice(MIGRATION_MEDIA_REF_SCHEME.length);\n if (!encoded) return undefined;\n try {\n return decodeURIComponent(encoded);\n } catch {\n return undefined;\n }\n}\n\n/** Default `replaceWith` for `rewriteInlineImages` / `stampMigrationMediaRefs` (OSS-14). */\nexport function createMigrationMediaRefReplaceWith(): (\n ref: { sourceAssetId?: string },\n) => string {\n return (ref) => {\n if (!ref.sourceAssetId) return \"\";\n return formatMigrationMediaRef(ref.sourceAssetId);\n };\n}\n\n// --- Canonical inline keys & lookup index (OSS-15) ---\n\nexport interface CanonicalInlineAssetUrl {\n /** Canonical absolute URL stored on `NormalizedAsset.sourceUrl`. */\n canonicalUrl: string;\n /** Normalizer id: `url:{canonicalUrl}`. */\n sourceId: string;\n}\n\n/**\n * OSS-15: one canonical key for inline `url:` assets — apply origin rewrite then\n * `normalizeAssetUrl` so discovery, refs, and vault entities share the same id.\n */\nexport function canonicalizeInlineAssetUrl(\n raw: string,\n originUrlRewrite?: OriginUrlRewriteConfig,\n): CanonicalInlineAssetUrl | undefined {\n let value = raw.trim();\n if (!value || value.startsWith(\"data:\")) return undefined;\n\n if (originUrlRewrite) {\n value = rewriteOriginUrlsInText(value, originUrlRewrite);\n }\n\n const canonicalUrl = normalizeAssetUrl(value);\n if (!canonicalUrl) return undefined;\n\n return {\n canonicalUrl,\n sourceId: `url:${canonicalUrl}`,\n };\n}\n\nfunction urlPathname(url: string): string | undefined {\n try {\n return new URL(url, \"http://migration.local\").pathname;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Map normalized upload URLs (and pathnames) → normalizer `sourceId`.\n * Attachment ids are WXR `post_id` strings; inline discoveries use `url:{src}`.\n */\nexport function buildMigrationMediaUrlIndex(\n entries: Iterable<{ sourceUrl: string; sourceId: string }>,\n): Map<string, string> {\n const index = new Map<string, string>();\n\n for (const entry of entries) {\n index.set(entry.sourceUrl, entry.sourceId);\n const normalized = normalizeAssetUrl(entry.sourceUrl);\n if (normalized) index.set(normalized, entry.sourceId);\n const pathname = urlPathname(entry.sourceUrl);\n if (pathname) index.set(pathname, entry.sourceId);\n }\n\n return index;\n}\n\nexport function resolveMigrationMediaSourceId(\n src: string,\n urlIndex: Map<string, string>,\n originUrlRewrite?: OriginUrlRewriteConfig,\n): string | undefined {\n const canonical = canonicalizeInlineAssetUrl(src, originUrlRewrite);\n const normalized = canonical?.canonicalUrl ?? normalizeAssetUrl(src);\n if (!normalized) return undefined;\n\n return (\n urlIndex.get(normalized) ??\n urlIndex.get(src) ??\n (urlPathname(normalized) ? urlIndex.get(urlPathname(normalized)!) : undefined)\n );\n}\n\n/** Merge attachment + inline asset rows into one stamp/lookup index (OSS-15). */\nexport function buildContentMediaUrlIndex(\n entries: Iterable<{ sourceUrl: string; sourceId: string }>,\n originUrlRewrite?: OriginUrlRewriteConfig,\n): Map<string, string> {\n const canonicalEntries: { sourceUrl: string; sourceId: string }[] = [];\n for (const entry of entries) {\n const canonical = canonicalizeInlineAssetUrl(entry.sourceUrl, originUrlRewrite);\n canonicalEntries.push({\n sourceUrl: canonical?.canonicalUrl ?? entry.sourceUrl,\n sourceId: entry.sourceId,\n });\n }\n return buildMigrationMediaUrlIndex(canonicalEntries);\n}\n"],"mappings":";AAAA,YAAY,aAAa;AAelB,SAAS,wBAAwB,MAAc,QAAwC;AAC5F,MAAI,CAAC,QAAQ,OAAO,MAAM,WAAW,EAAG,QAAO;AAE/C,MAAI,SAAS;AACb,aAAW,QAAQ,OAAO,OAAO;AAC/B,QAAI,OAAO,KAAK,UAAU,UAAU;AAClC,UAAI,CAAC,KAAK,MAAO;AACjB,eAAS,OAAO,MAAM,KAAK,KAAK,EAAE,KAAK,KAAK,OAAO;AACnD;AAAA,IACF;AACA,aAAS,OAAO,QAAQ,KAAK,OAAO,KAAK,OAAO;AAAA,EAClD;AACA,SAAO;AACT;AAGO,SAAS,8BAA8B,aAAqB,cAA8C;AAC/G,QAAM,oBAAoB,YAAY,QAAQ,OAAO,EAAE;AACvD,QAAM,mBAAmB,aAAa,QAAQ,OAAO,EAAE;AACvD,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,QACE,OAAO,GAAG,iBAAiB;AAAA,QAC3B,SAAS,GAAG,gBAAgB;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF;AAIA,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AAEzB,IAAM,0BAA0B,IAAI,OAAO,OAAO,WAAW,gBAAgB,OAAO,GAAG;AACvF,IAAM,0BAA0B,IAAI,OAAO,OAAO,WAAW,gBAAgB,OAAO,GAAG;AAGvF,IAAM,oBAAoB,OAAO,iBAAiB,gBAAgB;AAElE,IAAM,gCAAgC,IAAI;AAAA,EACxC,OAAO,2DAA2D,iBAAiB;AAAA,EACnF;AACF;AAGA,IAAM,yBAAyB,IAAI;AAAA,EACjC,OAAO,uBAAuB,iBAAiB;AAAA,EAC/C;AACF;AAEA,IAAM,wBAAwB;AAC9B,IAAM,yBAAyB;AAG/B,IAAM,+BACJ;AAEF,IAAM,yBAAyB,IAAI;AAAA,EACjC,OAAO,iDAAiD,iBAAiB;AAAA,EACzE;AACF;AAEA,IAAM,6BAA6B,IAAI;AAAA,EACrC,OAAO,yBAAyB,iBAAiB;AAAA,EACjD;AACF;AAEA,IAAM,sBAAsB;AAE5B,IAAM,gCAAgC;AAGtC,IAAM,gCACJ;AAyBF,SAAS,sBAAsB,MAAmB,KAA+B;AAC/E,QAAM,aAAa,kBAAkB,OAAO,EAAE;AAC9C,MAAI,cAAc,wBAAwB,UAAU,GAAG;AACrD,SAAK,IAAI,UAAU;AAAA,EACrB;AACF;AAEA,SAAS,sBAAsB,MAAmB,KAA+B;AAC/E,MAAI,CAAC,OAAO,CAAC,oBAAoB,GAAG,EAAG;AACvC,QAAM,WAAW,uBAAuB,GAAG;AAC3C,MAAI,UAAU,WAAW,MAAM,GAAG;AAChC,0BAAsB,MAAM,SAAS,MAAM,OAAO,MAAM,CAAC;AAAA,EAC3D;AACF;AAEA,SAAS,kBAAkB,SAA2B;AACpD,MAAI,CAAC,QAAQ,KAAK,EAAG,QAAO,CAAC;AAC7B,QAAM,IAAY,aAAK,SAAS,EAAE,KAAK,MAAM,CAAC;AAC9C,QAAM,OAAiB,CAAC;AACxB,IAAE,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO;AAC5B,UAAM,MAAM,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,KAAK;AACpC,QAAI,IAAK,MAAK,KAAK,GAAG;AAAA,EACxB,CAAC;AACD,SAAO;AACT;AAEA,SAAS,sBAAsB,SAA2B;AACxD,MAAI,CAAC,QAAQ,KAAK,EAAG,QAAO,CAAC;AAC7B,QAAM,IAAY,aAAK,SAAS,EAAE,KAAK,MAAM,CAAC;AAC9C,QAAM,OAAiB,CAAC;AACxB,IAAE,YAAY,EAAE,KAAK,CAAC,GAAG,OAAO;AAC9B,UAAM,MAAM,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,KAAK;AACpC,QAAI,IAAK,MAAK,KAAK,GAAG;AAAA,EACxB,CAAC;AACD,IAAE,mBAAmB,EAAE,KAAK,CAAC,GAAG,OAAO;AACrC,UAAM,MAAM,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,KAAK;AACpC,QAAI,IAAK,MAAK,KAAK,GAAG;AAAA,EACxB,CAAC;AACD,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAwB;AACjD,QAAM,cAAc,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AAC9C,QAAM,eAAe,YAAY,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AACrD,SAAO,wBAAwB,KAAK,YAAY;AAClD;AAEA,SAAS,kBAAkB,OAAwB;AACjD,QAAM,cAAc,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AAC9C,QAAM,eAAe,YAAY,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AACrD,SAAO,wBAAwB,KAAK,YAAY;AAClD;AAEA,SAAS,uBAAuB,SAA2B;AACzD,QAAM,OAAiB,CAAC;AACxB,aAAW,SAAS,QAAQ,SAAS,qBAAqB,GAAG;AAC3D,UAAM,MAAM,MAAM,CAAC,GAAG,KAAK;AAC3B,QAAI,IAAK,MAAK,KAAK,GAAG;AAAA,EACxB;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,SAA2B;AAC5D,QAAM,OAAiB,CAAC;AACxB,aAAW,SAAS,QAAQ,SAAS,sBAAsB,GAAG;AAC5D,UAAM,MAAM,MAAM,CAAC,GAAG,KAAK;AAC3B,QAAI,IAAK,MAAK,KAAK,GAAG;AAAA,EACxB;AACA,SAAO;AACT;AAEA,SAAS,8BAA8B,SAA2B;AAChE,QAAM,OAAiB,CAAC;AACxB,aAAW,SAAS,QAAQ,SAAS,4BAA4B,GAAG;AAClE,UAAM,MAAM,MAAM,CAAC,GAAG,KAAK;AAC3B,QAAI,IAAK,MAAK,KAAK,GAAG;AAAA,EACxB;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,SAA2B;AAC5D,SAAO,kBAAkB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,WAAW,OAAO,CAAC;AAC5E;AAGO,SAAS,kBAAkB,KAAiC;AACjE,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,CAAC,WAAW,QAAQ,WAAW,OAAO,EAAG,QAAO;AACpD,MAAI,QAAQ,WAAW,IAAI,EAAG,QAAO,SAAS,OAAO;AACrD,SAAO;AACT;AAGO,SAAS,iBAAiB,KAAsB;AACrD,MAAI,CAAC,OAAO,IAAI,WAAW,OAAO,EAAG,QAAO;AAE5C,MAAI,IAAI,WAAW,GAAG,GAAG;AACvB,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAEA,MAAI,CAAC,gBAAgB,KAAK,GAAG,EAAG,QAAO;AAEvC,MAAI;AACF,UAAM,EAAE,SAAS,IAAI,IAAI,IAAI,GAAG;AAChC,QAAI,kBAAkB,QAAQ,EAAG,QAAO;AAAA,EAC1C,QAAQ;AAAA,EAER;AAEA,SAAO,kBAAkB,GAAG;AAC9B;AAGO,SAAS,iBAAiB,KAAsB;AACrD,MAAI,CAAC,OAAO,IAAI,WAAW,OAAO,EAAG,QAAO;AAE5C,MAAI,IAAI,WAAW,GAAG,GAAG;AACvB,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAEA,MAAI,CAAC,gBAAgB,KAAK,GAAG,EAAG,QAAO;AAEvC,MAAI;AACF,UAAM,EAAE,SAAS,IAAI,IAAI,IAAI,GAAG;AAChC,QAAI,kBAAkB,QAAQ,EAAG,QAAO;AAAA,EAC1C,QAAQ;AAAA,EAER;AAEA,SAAO,kBAAkB,GAAG;AAC9B;AAGO,SAAS,wBAAwB,KAAsB;AAC5D,SAAO,iBAAiB,GAAG,KAAK,iBAAiB,GAAG;AACtD;AAEA,SAAS,sBACP,YACA,KACA,OACA,MACM;AACN,QAAM,aAAa,kBAAkB,OAAO,EAAE;AAC9C,MAAI,CAAC,cAAc,CAAC,iBAAiB,UAAU,EAAG;AAClD,aAAW,KAAK,EAAE,KAAK,YAAY,OAAO,KAAK,CAAC;AAClD;AAEA,SAAS,+BAA+B,SAA2C;AACjF,QAAM,aAAuC,CAAC;AAE9C,aAAW,SAAS,QAAQ,SAAS,qBAAqB,GAAG;AAC3D,0BAAsB,YAAY,MAAM,CAAC,GAAG,MAAM,SAAS,GAAG,CAAC;AAAA,EACjE;AACA,aAAW,SAAS,QAAQ,SAAS,4BAA4B,GAAG;AAClE,0BAAsB,YAAY,MAAM,CAAC,GAAG,MAAM,SAAS,GAAG,CAAC;AAAA,EACjE;AACA,aAAW,SAAS,QAAQ,SAAS,sBAAsB,GAAG;AAC5D,0BAAsB,YAAY,MAAM,CAAC,GAAG,MAAM,SAAS,GAAG,CAAC;AAAA,EACjE;AACA,aAAW,SAAS,QAAQ,SAAS,mBAAmB,GAAG;AACzD,0BAAsB,YAAY,MAAM,CAAC,GAAG,MAAM,SAAS,GAAG,CAAC;AAAA,EACjE;AACA,aAAW,SAAS,QAAQ,SAAS,0BAA0B,GAAG;AAChE,0BAAsB,YAAY,MAAM,CAAC,GAAG,MAAM,SAAS,GAAG,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAQO,SAAS,mCAAmC,SAA2B;AAC5E,MAAI,CAAC,QAAQ,KAAK,EAAG,QAAO,CAAC;AAE7B,QAAM,SAAS,CAAC,GAAG,+BAA+B,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU;AAChF,QAAI,KAAK,SAAS,MAAM,KAAM,QAAO,KAAK,OAAO,MAAM;AACvD,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC5B,CAAC;AAED,QAAM,OAAiB,CAAC;AACxB,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,aAAa,QAAQ;AAC9B,QAAI,KAAK,IAAI,UAAU,GAAG,EAAG;AAC7B,SAAK,IAAI,UAAU,GAAG;AACtB,SAAK,KAAK,UAAU,GAAG;AAAA,EACzB;AACA,SAAO;AACT;AAGO,SAAS,+BAA+B,SAAqC;AAClF,SAAO,mCAAmC,OAAO,EAAE,CAAC;AACtD;AAEA,SAAS,sBAAsB,KAAmC;AAChE,MAAI,CAAC,KAAK,KAAK,EAAG,QAAO,CAAC;AAC1B,SAAO,IACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,QAAQ,KAAK,IAAI,CAAC;AACxC;AAEA,SAAS,gCAAgC,SAA2B;AAClE,QAAM,MAAM,oBAAI,IAAY;AAE5B,aAAW,SAAS,QAAQ,SAAS,6BAA6B,GAAG;AACnE,UAAM,KAAK,MAAM,CAAC,GAAG,KAAK;AAC1B,QAAI,GAAI,KAAI,IAAI,EAAE;AAAA,EACpB;AAEA,aAAW,SAAS,QAAQ,SAAS,6BAA6B,GAAG;AACnE,eAAW,MAAM,sBAAsB,MAAM,CAAC,CAAC,GAAG;AAChD,UAAI,IAAI,EAAE;AAAA,IACZ;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,GAAG;AAChB;AAMO,SAAS,sBAAsB,SAAwC;AAC5E,MAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,WAAO,EAAE,MAAM,CAAC,GAAG,yBAAyB,CAAC,EAAE;AAAA,EACjD;AAEA,QAAM,OAAO,oBAAI,IAAY;AAE7B,aAAW,OAAO,kBAAkB,OAAO,GAAG;AAC5C,QAAI,oBAAoB,GAAG,GAAG;AAC5B,4BAAsB,MAAM,GAAG;AAC/B;AAAA,IACF;AACA,0BAAsB,MAAM,GAAG;AAAA,EACjC;AAEA,aAAW,OAAO,sBAAsB,OAAO,GAAG;AAChD,QAAI,oBAAoB,GAAG,GAAG;AAC5B,4BAAsB,MAAM,GAAG;AAC/B;AAAA,IACF;AACA,0BAAsB,MAAM,GAAG;AAAA,EACjC;AAEA,aAAW,SAAS,QAAQ,SAAS,6BAA6B,GAAG;AACnE,0BAAsB,MAAM,MAAM,CAAC,CAAC;AAAA,EACtC;AAEA,aAAW,SAAS,QAAQ,SAAS,sBAAsB,GAAG;AAC5D,0BAAsB,MAAM,MAAM,CAAC,CAAC;AAAA,EACtC;AAEA,aAAW,OAAO,uBAAuB,OAAO,GAAG;AACjD,QAAI,oBAAoB,GAAG,GAAG;AAC5B,4BAAsB,MAAM,GAAG;AAC/B;AAAA,IACF;AACA,0BAAsB,MAAM,GAAG;AAAA,EACjC;AAEA,aAAW,OAAO,0BAA0B,OAAO,GAAG;AACpD,QAAI,oBAAoB,GAAG,GAAG;AAC5B,4BAAsB,MAAM,GAAG;AAC/B;AAAA,IACF;AACA,0BAAsB,MAAM,GAAG;AAAA,EACjC;AAEA,aAAW,OAAO,8BAA8B,OAAO,GAAG;AACxD,0BAAsB,MAAM,GAAG;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,MAAM,CAAC,GAAG,IAAI;AAAA,IACd,yBAAyB,gCAAgC,OAAO;AAAA,EAClE;AACF;AAQO,SAAS,yBAAyB,SAA2B;AAClE,SAAO,sBAAsB,OAAO,EAAE;AACxC;AAGO,SAAS,uBAAuB,SAA2B;AAChE,SAAO,yBAAyB,OAAO;AACzC;AAKO,IAAM,6BAA6B;AAGnC,SAAS,wBAAwB,eAA+B;AACrE,SAAO,GAAG,0BAA0B,GAAG,mBAAmB,aAAa,CAAC;AAC1E;AAEO,SAAS,oBAAoB,OAAwB;AAC1D,SAAO,MAAM,KAAK,EAAE,WAAW,0BAA0B;AAC3D;AAGO,SAAS,uBAAuB,OAAmC;AACxE,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAQ,WAAW,0BAA0B,EAAG,QAAO;AAC5D,QAAM,UAAU,QAAQ,MAAM,2BAA2B,MAAM;AAC/D,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACF,WAAO,mBAAmB,OAAO;AAAA,EACnC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,qCAEJ;AACV,SAAO,CAAC,QAAQ;AACd,QAAI,CAAC,IAAI,cAAe,QAAO;AAC/B,WAAO,wBAAwB,IAAI,aAAa;AAAA,EAClD;AACF;AAeO,SAAS,2BACd,KACA,kBACqC;AACrC,MAAI,QAAQ,IAAI,KAAK;AACrB,MAAI,CAAC,SAAS,MAAM,WAAW,OAAO,EAAG,QAAO;AAEhD,MAAI,kBAAkB;AACpB,YAAQ,wBAAwB,OAAO,gBAAgB;AAAA,EACzD;AAEA,QAAM,eAAe,kBAAkB,KAAK;AAC5C,MAAI,CAAC,aAAc,QAAO;AAE1B,SAAO;AAAA,IACL;AAAA,IACA,UAAU,OAAO,YAAY;AAAA,EAC/B;AACF;AAEA,SAAS,YAAY,KAAiC;AACpD,MAAI;AACF,WAAO,IAAI,IAAI,KAAK,wBAAwB,EAAE;AAAA,EAChD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAMO,SAAS,4BACd,SACqB;AACrB,QAAM,QAAQ,oBAAI,IAAoB;AAEtC,aAAW,SAAS,SAAS;AAC3B,UAAM,IAAI,MAAM,WAAW,MAAM,QAAQ;AACzC,UAAM,aAAa,kBAAkB,MAAM,SAAS;AACpD,QAAI,WAAY,OAAM,IAAI,YAAY,MAAM,QAAQ;AACpD,UAAM,WAAW,YAAY,MAAM,SAAS;AAC5C,QAAI,SAAU,OAAM,IAAI,UAAU,MAAM,QAAQ;AAAA,EAClD;AAEA,SAAO;AACT;AAEO,SAAS,8BACd,KACA,UACA,kBACoB;AACpB,QAAM,YAAY,2BAA2B,KAAK,gBAAgB;AAClE,QAAM,aAAa,WAAW,gBAAgB,kBAAkB,GAAG;AACnE,MAAI,CAAC,WAAY,QAAO;AAExB,SACE,SAAS,IAAI,UAAU,KACvB,SAAS,IAAI,GAAG,MACf,YAAY,UAAU,IAAI,SAAS,IAAI,YAAY,UAAU,CAAE,IAAI;AAExE;AAGO,SAAS,0BACd,SACA,kBACqB;AACrB,QAAM,mBAA8D,CAAC;AACrE,aAAW,SAAS,SAAS;AAC3B,UAAM,YAAY,2BAA2B,MAAM,WAAW,gBAAgB;AAC9E,qBAAiB,KAAK;AAAA,MACpB,WAAW,WAAW,gBAAgB,MAAM;AAAA,MAC5C,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,EACH;AACA,SAAO,4BAA4B,gBAAgB;AACrD;","names":[]}
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
enumerateSquarespaceEntities,
|
|
4
4
|
summarizeSquarespaceExport,
|
|
5
5
|
validateSquarespaceExportFile
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ZDQBXTIV.js";
|
|
7
7
|
import {
|
|
8
8
|
flattenWordPressBuilders,
|
|
9
9
|
parseSliderMetaValue,
|
|
10
10
|
parseSliderShortcodeMarkup
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-PHL6U6CP.js";
|
|
12
12
|
import {
|
|
13
13
|
stampMigrationMediaRefs
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BF2AZ7S2.js";
|
|
15
15
|
import {
|
|
16
16
|
linkToPath,
|
|
17
17
|
sanitizeSlug
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
parseMigrationMediaRef,
|
|
25
25
|
resolveFeaturedContentAssetUrl,
|
|
26
26
|
rewriteOriginUrlsInText
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-DZI5C6KR.js";
|
|
28
28
|
|
|
29
29
|
// src/parsers/wordpress/parse-wxr.ts
|
|
30
30
|
import { readFile } from "fs/promises";
|
|
@@ -274,7 +274,11 @@ function guessMime(filename) {
|
|
|
274
274
|
png: "image/png",
|
|
275
275
|
gif: "image/gif",
|
|
276
276
|
webp: "image/webp",
|
|
277
|
-
pdf: "application/pdf"
|
|
277
|
+
pdf: "application/pdf",
|
|
278
|
+
mp4: "video/mp4",
|
|
279
|
+
webm: "video/webm",
|
|
280
|
+
ogg: "video/ogg",
|
|
281
|
+
mov: "video/quicktime"
|
|
278
282
|
};
|
|
279
283
|
return ext ? map[ext] : void 0;
|
|
280
284
|
}
|
|
@@ -2565,4 +2569,4 @@ export {
|
|
|
2565
2569
|
wixAdapter,
|
|
2566
2570
|
getAdapter
|
|
2567
2571
|
};
|
|
2568
|
-
//# sourceMappingURL=chunk-
|
|
2572
|
+
//# sourceMappingURL=chunk-H23JQVJZ.js.map
|