# Supabase 客户端 (aksupa.uts) 语法错误修复报告 ## 📍 报告信息 **修复日期**: 2026年2月25日 **问题来源**: 用户在运行 H5 版本时报告 `mai.uts:16 SyntaxError: Unexpected token ';' (at aksupa.uts?import:466:39)` **受影响文件**: `components/supadb/aksupa.uts` --- ## 🔍 问题分析 ### 1. 语法冲突 (Redeclaration in Preprocessor) 在 `executeAs()` 方法中,存在多处使用条件编译(`#ifdef`)包裹的同名常量 `const parsed`。 **代码片段 (修复前)**: ```typescript // #ifdef APP-ANDROID const parsed = item.parse() // #endif // #ifndef APP-ANDROID const parsed = item as T; // #endif ``` 虽然在不同平台下这些代码是互斥的,但在某些编译器预处理器(尤其是 H5 构建环境下的 Vite/UTS 转换器)中,如果预处理器处理逻辑不够严格,可能会在同一作用域内看到两个同名常量声明,或者在替换/忽略某些行时产生多余的分号或空的表达式,导致 `Unexpected token ';'` 错误。 ### 2. 缺少分号 在 Android 平台的 `.parse()` 调用处缺少分号,可能在 H5 编译为 JS 时造成语句合并冲突。 ### 3. 类型推断不一致 原代码中对 `result.data` 的处理在 scalar(非数组)情况下直接放进了数组中返回,这可能导致 `executeAs` 在期望得到单个对象时返回了一个数组。 --- ## ✅ 修复措施 ### 1. 重构变量声明 将 `const` 重复声明改为在 `if/else` 块外部统一使用 `let parsed: T | null = null;` 声明,然后在条件编译块中仅进行赋值操作。 ### 2. 标准化 Semicolon 为所有语句(包括 `.parse()` 调用)添加明确的分号。 ### 3. 类型转换逻辑优化 优化了 `executeAs` 的分支处理: - 如果 `result.data` 是数组,返回转换后的数组。 - 如果 `result.data` 是单个对象,返回转换后的单个对象。 - 保证了返回值的 scalar/array 性质与原始数据一致。 --- ## 🧪 验证建议 1. **重新编译 H5 端**: 刷新浏览器或重新启动 Vite 开发服务器,确认 `main.uts` 处的 SyntaxError 消失。 2. **测试数据查询**: 在 Admin 后台(如内容分类列表)尝试加载数据,确认 `executeAs()` 能够正确将 `UTSJSONObject` 转换为预期的类型并在列表显示。 --- ## 📖 相关文档维护 - 核心封装文件: `components/supadb/aksupa.uts` 已同步更新。 - 副本文件 `aksupa - 副本.uts` 建议删除或保持其作为历史参考,不建议引用。 --- *GitHub Copilot*