Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/build-chain.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ rolldown 是真正的备选(Rollup 同形 API、oxc 转译)。CLI 只包一

字节码编译放 CLI 而不放 Gradle:业务 App 不会有本仓的 build-logic,`tinyui build` 必须自己出最终产物。`qjsc-kmp` 二进制查找顺序:`--qjsc` 参数 → `TINYUI_QJSC` 环境变量 → npm 包 `qjsc-kmp` 的预编译版 → PATH。

字节码绑定引擎构建(文件头记上游 commit,quickjs-kmp `docs/native-build.md`"字节码与宿主工具"),CLI 用的 `qjsc-kmp` 必须与 App 链接的 quickjs-kmp 同一上游 commit。`tinyui-cli` 依赖的 `qjsc-kmp` 版本钉成与 catalog 的 `quickjsKmp` 相等(`packages/cli/test/qjsc.test.ts` 校验),所以 JS 工程的 `tinyui-cli` 与 App 的 `tinyui` 之间,只要两个版本钉的 `quickjsKmp` 相同,引擎就对得上;JS 工程的 `tinyui-cli` 须与目标宿主的 tinyui 下限兼容:同 major 且不高于它(updates.md §1.1、§1.3)。某个 tinyui 版本升级了 `quickjsKmp` 时,宿主升到它就是换引擎,按 updates.md §4.1 加 `hostVersion`,下限随之抬到这个版本。
字节码绑定引擎构建(文件头记上游 commit,quickjs-kmp `docs/native-build.md`"字节码与宿主工具"),CLI 用的 `qjsc-kmp` 必须与 App 链接的 quickjs-kmp 同一上游 commit。`tinyui-cli` 依赖的 `qjsc-kmp` 通常与 catalog 的 `quickjsKmp` 同版本,但校验的是上游 commit 而不是版本号:内置运行时由 CLI 的 `qjsc-kmp` 编出(`pnpm runtime:check` 保证入库的与现编一致),`RuntimeBytecodeTest` 核对它的文件头与链接引擎的 `QuickJs.upstreamCommit` 相等,两边 commit 不同 CI 即失败。所以上游 commit 不变的 quickjs-kmp 版本两边可以不同步:0.10.1 起 catalog 为 0.1.4,`qjsc-kmp` 仍是 0.1.2(0.1.3、0.1.4 只把 Android `.so` 改成 16 KB 页面对齐,编译器源码未动,npm 上也没有这两版)。JS 工程的 `tinyui-cli` 与 App 的 `tinyui` 之间,只要两边的上游 commit 相同,引擎就对得上;JS 工程的 `tinyui-cli` 须与目标宿主的 tinyui 下限兼容:同 major 且不高于它(updates.md §1.1、§1.3)。某个 tinyui 版本升级了 `quickjsKmp` 且上游 commit 随之改变(即 `manifest.engine` 变了)时,宿主升到它就是换引擎,按 updates.md §4.1 加 `hostVersion`,下限随之抬到这个版本;只改构建参数或绑定层、上游 commit 不变的升级(如 0.10.1 的 quickjs-kmp 0.1.4)不算换引擎,旧字节码照常被接受,不加。
Comment thread
sourcery-ai[bot] marked this conversation as resolved.

| 场景 | 来源 |
|---|---|
Expand Down
2 changes: 1 addition & 1 deletion docs/updates.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ class Updates(

验签公钥不由宿主传:每个包的信任锚是它内置 manifest 里的 `publicKey`(§1.1、§7)。单包宿主写 `Updates(listOf(embedded), …)`。

**`hostVersion` 的口径**(作用同 Expo 的 `runtimeVersion`,但只取正整数、数的是宿主的变化;不沿用那个名字,是因为 tinyui 里 runtime 已指运行时模块与引擎):宿主仓持有的递增正整数字符串(`"1"`、`"2"`……;`1.2.0` 这类 App 版本号在 CLI、`Updates`、服务端三处都被拒),语义是"这个值下发布的任何包都能在本宿主上跑";一个宿主一个值,挂在它上面的所有包共用。**它是宿主对页面承诺的版本,不是 tinyui 版本**(ADR-006 §2.11)。宿主给页面的承诺变了就加 1:宿主组件增删或改 schema;宿主能力增删,或改已有能力的参数与行为;网络通道增删,或改已有通道带的身份;提供或撤掉会话(快照里记作能力 `session.signIn`)。语言、埋点出口、链接打开器等框架标准接口缺省时有可用的默认行为,形状随 tinyui 走,宿主接没接、怎么实现都不加(ADR-007 §3.9);抬高 tinyui 下限(页面要用新版运行时的东西,或升到新 major);换引擎(含随 tinyui 升级带来的 quickjs-kmp 变化,build-chain.md §5)。单纯升级 tinyui、只改宿主内部实现、其他原生页面、修崩溃,不加。包的 JS 工程发布时由 `tinyui bundle --host-version` 取这个值,不自行推导。JS 侧取错分两个方向:取成不存在或更新的值,包只是送不到(`releases list` 与客户端事件可见);取成一个仍有设备在用的旧值,旧宿主会照常装上,而页面可能用到它没有的东西——宿主构建的检查拦不住这个方向,由 `publish` 发布前核对(§1.3)。
**`hostVersion` 的口径**(作用同 Expo 的 `runtimeVersion`,但只取正整数、数的是宿主的变化;不沿用那个名字,是因为 tinyui 里 runtime 已指运行时模块与引擎):宿主仓持有的递增正整数字符串(`"1"`、`"2"`……;`1.2.0` 这类 App 版本号在 CLI、`Updates`、服务端三处都被拒),语义是"这个值下发布的任何包都能在本宿主上跑";一个宿主一个值,挂在它上面的所有包共用。**它是宿主对页面承诺的版本,不是 tinyui 版本**(ADR-006 §2.11)。宿主给页面的承诺变了就加 1:宿主组件增删或改 schema;宿主能力增删,或改已有能力的参数与行为;网络通道增删,或改已有通道带的身份;提供或撤掉会话(快照里记作能力 `session.signIn`)。语言、埋点出口、链接打开器等框架标准接口缺省时有可用的默认行为,形状随 tinyui 走,宿主接没接、怎么实现都不加(ADR-007 §3.9);抬高 tinyui 下限(页面要用新版运行时的东西,或升到新 major);换引擎(含随 tinyui 升级带来的 quickjs-kmp 上游 commit 变化,build-chain.md §5;上游 commit 不变的 quickjs-kmp 升级不算)。单纯升级 tinyui、只改宿主内部实现、其他原生页面、修崩溃,不加。包的 JS 工程发布时由 `tinyui bundle --host-version` 取这个值,不自行推导。JS 侧取错分两个方向:取成不存在或更新的值,包只是送不到(`releases list` 与客户端事件可见);取成一个仍有设备在用的旧值,旧宿主会照常装上,而页面可能用到它没有的东西——宿主构建的检查拦不住这个方向,由 `publish` 发布前核对(§1.3)。

漏加的后果是旧宿主收到跑不了的页面(不崩溃的错误不会触发 §4.5 回退),多加的后果是更早的宿主从此收不到更新。漏加只可能发生在宿主仓,由宿主构建拦:宿主快照 `tinyui-host/<hostVersion>.txt`(宿主组件 schema、能力名、通道名、tinyui 下限)每个版本一份入库,当前宿主与当前版本的快照不符即构建失败;已合入 main 的版本,其快照冻结不可改。快照覆盖不到已有能力的参数与行为变化,这部分按上面的规则由人判断。为什么是精确匹配而不是 `>=` 范围,见 ADR-006 §2.2。

Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ android-targetSdk = "37"
androidxActivityCompose = "1.13.0"
kotlinxCoroutines = "1.11.0"
kotlinxSerialization = "1.11.0"
quickjsKmp = "0.1.2"
quickjsKmp = "0.1.4"
vanniktechMavenPublish = "0.37.0"
binaryCompatibilityValidator = "0.18.2"
okio = "3.18.2"
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@

`tinyui publish` 先对照目标宿主版本的快照核对包用到的宿主能力与组件,再把 `bundle` 的产物传到热下发服务并切换 channel 指针;`tinyui apps` / `packages` / `tokens` / `releases` / `hosts` 是这套服务的管理面(建 app 与签发 app token、登记包的验签公钥、签发与吊销发布 token、列 release 与回滚 / 晋级 / 改灰度、宿主 CI 上传快照)。实例地址取 `--url`、`$TINYUI_UPDATES_URL`、`https://updates.tinyui.app` 三者之一;凭据只从环境变量读,不接受命令行参数:`$TINYUI_TOKEN` 是发布 token,`$TINYUI_ADMIN_TOKEN` 放实例的管理 token 或某个 app 的 app token。`--app` 可用 `$TINYUI_APP` 代替,`--pkg` 缺省取当前目录 `tinyui.config.json` 的 `name`,`--channel` 必须每次显式写。联网命令遵循 `HTTPS_PROXY` / `HTTP_PROXY` / `NO_PROXY`(大小写均可),与 curl、npm 一致;本机回环地址(`localhost`、`127.0.0.1`、`::1`)始终直连,代理变量无法解析时提示后直连、不影响离线命令;没设代理变量时不加载代理实现。

字节码编译用 quickjs-kmp 的宿主工具 `qjsc-kmp`:依赖里的 npm 包 `qjsc-kmp` 带 macOS 与 Linux 的预编译版,装完即用;其他平台用 `--qjsc` 或 `TINYUI_QJSC` 指向自己编的那份。`qjsc-kmp` 的版本钉在与 tinyui 所用 quickjs-kmp 相同的版本上,编出的字节码才认 App 里的引擎。用法见仓库 `docs/build-chain.md` 与 `docs/updates.md`;与 `tinyui-core` 同版本号。
字节码编译用 quickjs-kmp 的宿主工具 `qjsc-kmp`:依赖里的 npm 包 `qjsc-kmp` 带 macOS 与 Linux 的预编译版,装完即用;其他平台用 `--qjsc` 或 `TINYUI_QJSC` 指向自己编的那份。`qjsc-kmp` 必须与 App 链接的 quickjs-kmp 同一上游 commit,编出的字节码才认 App 里的引擎;版本号可以不同(如 `qjsc-kmp` 0.1.2 与 quickjs-kmp 0.1.4,后者只改了 Android `.so` 的页面对齐)。用法见仓库 `docs/build-chain.md` 与 `docs/updates.md`;与 `tinyui-core` 同版本号。
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tinyui-cli",
"version": "0.10.0",
"version": "0.10.1",
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
"description": "TinyUI build tool: TSX -> h() (ES2025) -> ESM module bytecode.",
"license": "MIT",
"type": "module",
Expand Down
18 changes: 0 additions & 18 deletions packages/cli/test/qjsc.test.ts

This file was deleted.

2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tinyui-core",
"version": "0.10.0",
"version": "0.10.1",
"description": "TinyUI runtime: signals, ownership, h/For/Show, patch emission.",
"license": "MIT",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/version.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
/** The tinyui-core version; a package records it as the runtime it needs (docs/updates.md §1.1). */
export const VERSION = "0.10.0";
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
export const VERSION = "0.10.1";
2 changes: 1 addition & 1 deletion packages/native/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tinyui-native",
"version": "0.10.0",
"version": "0.10.1",
"description": "TinyUI host capability API for business code: http, storage, toast, navigation, i18n.",
"license": "MIT",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion packages/native/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const VERSION = "0.10.0";
export const VERSION = "0.10.1";
export * as navigation from "./navigation.ts";
export * as store from "./store.ts";
export * as events from "./events.ts";
Expand Down
Loading