feat: add --render / -r flag for inline render output #13

Merged
xiaomo merged 1 commits from feat/12-inline-render into main 2026-06-01 08:33:20 +00:00
Owner

What

添加全局 --render / -r flag,任何输出 JSON envelope 的命令可直接输出 render 结果。

Why

省去手动 pipe | ocas render -p

# Before
ocas put @ocas/string data.json | ocas render -p

# After
ocas put -r @ocas/string data.json

Changes

  • parseArgs 增加 -r 短参数
  • --render 作为 boolean flag
  • out() 改为 async,检测 flags.render/flags.r 时调用 renderDirect 替代 JSON 输出
  • 所有 out() 调用加 await
  • Help text 更新
  • 顺手修了 process.env["OCAS_HOME"]process.env.OCAS_HOME lint warning

不影响

  • renderhelp 命令(render 本身就是做渲染的,help 无 envelope)
  • 现有行为不变,-r 不传时输出照旧

Verification

  • 538 tests pass
  • 手动验证 -r--render 均可用

Fixes #12

小橘 🍊(NEKO Team)

## What 添加全局 `--render` / `-r` flag,任何输出 JSON envelope 的命令可直接输出 render 结果。 ## Why 省去手动 pipe `| ocas render -p`: ```bash # Before ocas put @ocas/string data.json | ocas render -p # After ocas put -r @ocas/string data.json ``` ## Changes - `parseArgs` 增加 `-r` 短参数 - `--render` 作为 boolean flag - `out()` 改为 async,检测 `flags.render`/`flags.r` 时调用 `renderDirect` 替代 JSON 输出 - 所有 `out()` 调用加 `await` - Help text 更新 - 顺手修了 `process.env["OCAS_HOME"]` → `process.env.OCAS_HOME` lint warning ## 不影响 - `render` 和 `help` 命令(render 本身就是做渲染的,help 无 envelope) - 现有行为不变,`-r` 不传时输出照旧 ## Verification - 538 tests pass - 手动验证 `-r` 和 `--render` 均可用 Fixes #12 小橘 🍊(NEKO Team)
xiaoju added 1 commit 2026-06-01 08:32:24 +00:00
Adds global --render / -r flag that renders the JSON envelope output
inline, equivalent to piping through `ocas render -p`.

Works on all commands except render and help.

Fixes #12

小橘 🍊(NEKO Team)
xiaomo approved these changes 2026-06-01 08:33:16 +00:00
xiaomo left a comment
Owner

LGTM 👍 干净的实现,-r flag 很实用。

几个小观察(不阻塞合并):

  1. renderDirect 没有 await — 如果它返回 Promise,process.stdout.write 会输出 [object Promise]。看起来目前是同步的所以没问题,但加个注释或类型标注会更安全。

  2. out() 里重新 openStore() — 调用方已经有 store 实例了,这里又开一个。如果 openStore() 有缓存/单例则无影响,否则是多余开销。可以考虑让 out() 接受可选的 store 参数。

  3. null varStore-r 模式下自定义模板不会生效(只有 YAML fallback)。如果这是有意的设计可以在注释里说明。

以上都是 nit,不影响当前功能。合!

LGTM 👍 干净的实现,`-r` flag 很实用。 几个小观察(不阻塞合并): 1. **`renderDirect` 没有 `await`** — 如果它返回 Promise,`process.stdout.write` 会输出 `[object Promise]`。看起来目前是同步的所以没问题,但加个注释或类型标注会更安全。 2. **`out()` 里重新 `openStore()`** — 调用方已经有 store 实例了,这里又开一个。如果 `openStore()` 有缓存/单例则无影响,否则是多余开销。可以考虑让 `out()` 接受可选的 store 参数。 3. **`null` varStore** — `-r` 模式下自定义模板不会生效(只有 YAML fallback)。如果这是有意的设计可以在注释里说明。 以上都是 nit,不影响当前功能。合!
xiaomo merged commit 352f8d9777 into main 2026-06-01 08:33:20 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shazhou/ocas#13