◆ select の value は option が動的の場合の初期値に対応できない
  ◆ value 設定時にはまだ option が空なので無効な値になる
  ◆ option が静的なもので文字列として書かれてる場合は設定時に存在するので問題なし
◆ option 側の selected に true/false を設定することで対応できる

select の初期値が設定できない

hyperHTML で select の値を設定するときに他の input と同じように普通に select タグの value を設定していたのですがうまく動かず困りました

hyperHTML.bind(document.body)`
<select value=${"v2"}>
${
[
{value: "v1", label: "100"},
{value: "v2", label: "200"},
{value: "v3", label: "300"},
].map(e => hyperHTML.wire(e)`<option value=${e.value}>${e.label}</option>`)
}
</select>
`

200 が表示されてることを期待してるのに 100 が表示されます

hyperHTML が対応していないということではなく option を直接書いてる場合には動きます

hyperHTML.bind(document.body)`
<select value=${"v2"}>
<option value="v1">100</option>
<option value="v2">200</option>
<option value="v3">300</option>
</select>
`

これだと 200 が表示されています

原因

hyperHTML では上から順に ${} の部分に値を代入していきます
下のうまく動くケースでは option に v2 という値があるので select の value に v2 を代入すると正常に値がセットされます
上のケースでは option の一覧が後から代入されるものなので select の value に v2 を代入するタイミングでは option がありません
存在しないオプションを設定したので未設定状態になり その後追加されたオプションの最初が表示されるということになります
ちなみに value を v3 に変えて再度レンダリングすると すでにオプションは存在するので v3 の 300 が表示されます

Promise ?

使う側で 2 回レンダリングするのは面倒ですし できればそういう対処方法は避けたいです
hyperHTML は Promise に対応してるので

hyperHTML.bind(document.body)`${Promise.resolve("1")}`

とすれば 1 が表示されます
非同期処理になるのでこれで v2 を非同期でセットすれば option がすでにあるのでできる と思ったのですが
対応してるのは本文のみで属性部分には Promise を使えませんでした

hyperHTML.bind(document.body)`<div id=${Promise.resolve("id")}></div>`
<div id="[object Promise]"></div>

selected を使う

select の初期値を設定できないのじゃ使いみちない気がするのでなにか方法はあるはずとサンプルを探していると selected プロパティを使っていました

hyperHTML.bind(document.body)`
<select>
${
[
{value: "v1", label: "100"},
{value: "v2", label: "200"},
{value: "v3", label: "300"},
].map(e => hyperHTML.wire(e)`<option value=${e.value} selected=${e.value === "v2"}>${e.label}</option>`)
}
</select>
`

select 要素は自身の value プロパティだけではなく子要素の option の selected を設定することでも設定可能です
要素を追加したときに selected を設定しているわけです
select が複数選択可能になっていないと後ろの要素ほどあとから selected を true に設定するので一番最後の selected が true の要素が選択されます
また プロパティで設定した場合に checkbox の checked と違って selected 属性はつかないので どのオプションにも selected 属性はありません
テンプレートストリングでの見た目と少し変わります