Задача: SitePack Exporter
Цель
Сгенерировать распакованный пакет SitePack и, опционально, упаковать его в .sitepack (ZIP).
Входные данные
Любая модель данных сайта: контент, assets, config, таблицы. Экспортер сам определяет применимые profiles.
Требования
- Создать
sitepack.manifest.jsonиsitepack.catalog.jsonв корне. - Заполнить
manifest.specиmanifest.package.id. manifest.createdAt— UTC date-time (ISO 8601).manifest.profiles— выбранные profiles.manifest.artifacts— список artifact IDs.catalog.artifacts[]— полный список артефактов сid,mediaType,path,sizeи, желательно,digest.size— длина файла в байтах.digest—sha256:<hex>.relationsMUST выводиться как объект, который сопоставляет relation keys сLink[].- Link MUST быть строкой или объектом с
refи опциональнымmeta. - Если создается разделенная поставка, сгенерировать
sitepack.volumes.jsonсоspec.version = 0.4.0,kind = volume-setи спискомvolumes[]. maxPartSizeSHOULD быть104857600байт (100 MiB), если пользователь не указал иначе.
NDJSON
- Один JSON-объект на строку.
- Без лишних пробелов и пустых строк.
Chunked assets
- Если asset разбит на чанки, вывести
chunks[]сindex,size,sha256иpathдля каждого чанка. - Для chunked assets не указывать
pathна уровне asset и включатьchunks. - Вычислять и хранить как
sha256каждого чанка, так и общийsha256/sizeasset.
Profiles (рекомендации)
config-only: только config.content-only: сущности без assets.content+assets: сущности + asset index.full: content + assets + config + recordsets.full+code:full+ code/software manifest.
Выходные данные
- Распакованный каталог пакета.
- Опционально: ZIP-файл с расширением
.sitepack. - Сводка
reports/export.json:
{
"packageId": "...",
"profiles": ["..."],
"artifacts": 0,
"files": 0,
"bytes": 0,
"digests": "sha256"
}