SuperAPI AI 工具集

data-export-and-restore

数据与分析

查看项目

更新于 10-18 18:01

技能介绍

用途

该技能用于在 React Native / Expo 应用中构建数据导出与恢复功能,典型场景是“备份、恢复、导入、导出或 CSV”。它把备份与导出视为两个不同的功能:备份是可被本应用恢复的带版本和校验和的文件,导出(如 CSV、报表)是有损的、不可恢复的格式。

主要能力

  • 备份信封:备份文件包含 format、formatVersion、schemaVersion、appVersion、exportedAt(UTC)、payloadSha256,按此顺序排列,最后是规范化 payload;BACKUP_SCHEMA_VERSION 等于 LATEST_DB_VERSION。
  • 多级校验:选定文件后依次检查大小(MAX_BACKUP_BYTES)、可读性、格式归属、严格头部、校验和(在读任何数据行前)、版本不高于当前构建、每一行通过 schema、ID 唯一且父记录存在;不信任文件名和 MIME 类型。
  • 事务式恢复:先向用户展示命名了“替换”策略和数量的预览,写私有安全副本,然后在单个事务中删除并插入所有备份表,保留 ID;预览只恢复一次;拒绝恢复到内存中的会话;通过 previewSafetyCopy 提供安全副本回滚。
  • 覆盖范围:备份覆盖每个用户表,受保护表(权益、诊断、密钥等)不备份也不恢复。
  • 版本升级:旧备份通过冻结的纯 JSON 升级步骤逐版本升级,并有与迁移的等价性测试和每个 schema 版本的冻结测试夹具。
  • 往返测试:对敌意数据执行导出,再恢复到空数据库后重新导出,字节完全一致;重复恢复得到相同行;每次拒绝都不改变数据。
  • 规范化取值:机器格式只保存整数、点号小数、ISO-8601 UTC 或 epoch 毫秒、日期键、代码、未翻译列名,本地化在界面上完成。
  • 安全 CSV:所有 CSV 经统一编码器处理,以 = + - @、制表符或 CR 开头的文本单元格前加撇号,然后按 RFC 4180 加引号、CRLF、UTF-8 带 BOM。
  • 原子写入:同目录临时文件写入后移动到正式名,失败删除并先检查剩余空间。
  • 端口隔离:分享面板、文件选择器、文件系统置于端口后,只在用户点击时运行,端口不上传文件。
  • 类型化失败:导出、选取、恢复返回带具体失败类型的结果,备份代码不抛异常。

使用方式

该技能提供了工作流、模板、示例与脚本。先阅读 references/envelope-and-ladder.md 与 references/restore-policy.md;前置条件是应用数据库(来自 persistence-and-migrations)和 Result 模块(来自 error-handling-typed-results),然后运行 npx expo install expo-file-system expo-sharing expo-document-picker。复制 templates 下的 portable、backup、services 模板与测试,替换 APP_SLUG,将示例 Tasks 表替换为应用自身表,设置 FIRST_BACKUP_SCHEMA_VERSION,为当前 schema 生成并冻结测试夹具。随后构建备份界面,运行指定 Jest 测试与类型检查,并在适配器变更后于 iOS 模拟器和 Android 模拟器上执行导出-分享-恢复演练。最后运行 node ${CLAUDE_SKILL_DIR}/scripts/check-backup.mjs . 直到输出 RESULT: PASS;检查单个用户文件可用 inspect-backup.mjs。

适用场景

适用于需要可靠本地备份与全量恢复的移动应用,尤其是使用 SQLite 的表结构应用。该技能列出大量反模式,例如用 CSV 当备份、逐行恢复、恢复权益、直接写正式文件名、信任 MIME 类型、在 useEffect 中自动导出、在分享面板关闭后声称“备份已保存”等,帮助避免常见的数据丢失风险。

限制

该技能面向 React Native / Expo 与 SQLite 环境,并依赖已有的数据库层和 Result 模块;未提供其模板之外的语言或框架支持。备份文件格式、大小上限和校验规则由该技能自身定义,具体配置(如 MAX_BACKUP_BYTES)需按资料中的 reference 文件确认,资料未在此展开全部数值。