Filed unassigned,来自 #3314 实现期间的收尾观察。只记录发现。
现状
#3314 把 canonical 的谓词归一化落在 packages/core/src/evaluator/predicateInput.ts
(@object-ui/core 是引擎侧与渲染器侧的共同依赖;packages/core 声明 "Zero React
dependencies",不能反向依赖 packages/react),ActionEngine.getActionsForLocation
已改为复用它。
packages/react/src/hooks/useExpression.ts 里同名的 toPredicateInput 仍是一份
独立实现,语义逐项相同。#3314 的 PR 用
packages/react/src/hooks/__tests__/actionPredicate.parity.test.tsx 的归一化 parity 表
(14 种输入形态)把两者钉在一起。
为什么是 observation-class
今天没有用户可见的差异 —— parity 表覆盖了全部输入形态,任何一侧单独改动都会立刻红。
但这仍然是「两处归一化」,而 #3314 的教训恰恰是两处归一化会漂移:parity 表是护栏,
不是单一事实源。
建议(未验证,留给认领者判断)
把 useExpression.ts 里的实现体换成 re-export:
export { toPredicateInput } from '@object-ui/core';
依赖方向允许(@object-ui/react 的 dependencies 已含 @object-ui/core)。
之后归一化 parity 表可以退化成一条「react 导出的就是 core 那一个」的断言,
判决 parity(引擎路径 vs 渲染器路径)保留。
核对过一处容易踩的坑:packages/react/src/index.ts 目前不做
export * from '@object-ui/core',仓内也没有同时 star-re-export core 与 react 的
上层包,所以两个同名导出当下不会产生 ambiguous star-export(那会让名字在 ESM 里
被静默剔除)。真要改前建议再核一遍这一点。
备注
#3314 的派发面把 useExpression.ts 定为只读(渲染器路径本身是对的,#2661 已修好),
所以没有在那个 PR 里顺手做,单独记在这里。
Filed unassigned,来自 #3314 实现期间的收尾观察。只记录发现。
现状
#3314 把 canonical 的谓词归一化落在
packages/core/src/evaluator/predicateInput.ts(
@object-ui/core是引擎侧与渲染器侧的共同依赖;packages/core声明 "Zero Reactdependencies",不能反向依赖
packages/react),ActionEngine.getActionsForLocation已改为复用它。
packages/react/src/hooks/useExpression.ts里同名的toPredicateInput仍是一份独立实现,语义逐项相同。#3314 的 PR 用
packages/react/src/hooks/__tests__/actionPredicate.parity.test.tsx的归一化 parity 表(14 种输入形态)把两者钉在一起。
为什么是 observation-class
今天没有用户可见的差异 —— parity 表覆盖了全部输入形态,任何一侧单独改动都会立刻红。
但这仍然是「两处归一化」,而 #3314 的教训恰恰是两处归一化会漂移:parity 表是护栏,
不是单一事实源。
建议(未验证,留给认领者判断)
把
useExpression.ts里的实现体换成 re-export:依赖方向允许(
@object-ui/react的dependencies已含@object-ui/core)。之后归一化 parity 表可以退化成一条「react 导出的就是 core 那一个」的断言,
判决 parity(引擎路径 vs 渲染器路径)保留。
核对过一处容易踩的坑:
packages/react/src/index.ts目前不做export * from '@object-ui/core',仓内也没有同时 star-re-export core 与 react 的上层包,所以两个同名导出当下不会产生 ambiguous star-export(那会让名字在 ESM 里
被静默剔除)。真要改前建议再核一遍这一点。
备注
#3314 的派发面把
useExpression.ts定为只读(渲染器路径本身是对的,#2661 已修好),所以没有在那个 PR 里顺手做,单独记在这里。