feat(source): 媒体映射侧车导出与登记
Plan 3 Task 0(评审 Issue 1):旧 cms 库 media_assets 的 source_url→file_path 映射只读导出为侧车 JSON(859 条,覆盖率对照 WXR 855 attachment_url:精确命中 836 / 归一命中 0 / 未命中 19,97.8%),register 新增 --media-map 输入通道 (kind=manual_url_list 快照,形状校验 INVALID_MEDIA_MAP,metadata 含条目数, 幂等复用)。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
+11
-3
@@ -66,11 +66,12 @@ program
|
||||
|
||||
program
|
||||
.command('source:register')
|
||||
.description('登记来源输入为 content-addressed 快照(WXR / sitemap / 媒体目录,可多选)')
|
||||
.description('登记来源输入为 content-addressed 快照(WXR / sitemap / 媒体目录 / 媒体映射侧车 JSON,可多选)')
|
||||
.requiredOption('--site <key>', '站点 key(不存在则自动创建)')
|
||||
.option('--wxr <path>', 'WXR 文件路径')
|
||||
.option('--sitemap <path>', 'sitemap 文件路径')
|
||||
.option('--media <dir>', '媒体目录路径(已解包目录,递归登记)')
|
||||
.option('--media-map <path>', '媒体映射侧车 JSON 路径([{sourceUrl, filePath}] 数组,登记为 manual_url_list 快照)')
|
||||
.option('--allow <dir...>', '额外输入白名单根目录(可多个;默认含 storage/incoming 与当前目录)', [])
|
||||
.option('--name <name>', '新建站点时的显示名(缺省 = site key)')
|
||||
.option('--locale <locale>', '新建站点时的默认 locale(缺省 en)')
|
||||
@@ -80,13 +81,19 @@ program
|
||||
wxr?: string
|
||||
sitemap?: string
|
||||
media?: string
|
||||
mediaMap?: string
|
||||
allow: string[]
|
||||
name?: string
|
||||
locale?: string
|
||||
origin?: string
|
||||
}) => {
|
||||
if (opts.wxr === undefined && opts.sitemap === undefined && opts.media === undefined) {
|
||||
throw new SourceRegisterError('NO_INPUTS', '至少提供 --wxr / --sitemap / --media 之一')
|
||||
if (
|
||||
opts.wxr === undefined &&
|
||||
opts.sitemap === undefined &&
|
||||
opts.media === undefined &&
|
||||
opts.mediaMap === undefined
|
||||
) {
|
||||
throw new SourceRegisterError('NO_INPUTS', '至少提供 --wxr / --sitemap / --media / --media-map 之一')
|
||||
}
|
||||
// fail fast:建站默认列在服务端只在"站点新建"时生效——先做形状校验,避免跑完摄取才报错
|
||||
if (opts.origin !== undefined) {
|
||||
@@ -116,6 +123,7 @@ program
|
||||
if (opts.wxr !== undefined) input.wxrPath = opts.wxr
|
||||
if (opts.sitemap !== undefined) input.sitemapPath = opts.sitemap
|
||||
if (opts.media !== undefined) input.mediaDir = opts.media
|
||||
if (opts.mediaMap !== undefined) input.mediaMapPath = opts.mediaMap
|
||||
const defaultsPassed = opts.name !== undefined || opts.locale !== undefined || opts.origin !== undefined
|
||||
if (defaultsPassed) {
|
||||
const defaults: NonNullable<RegisterInput['siteDefaults']> = {}
|
||||
|
||||
Reference in New Issue
Block a user