bouzuya.hatenablog.com

ぼうずやのにっき

はじめての DefinitelyTyped への Pull Request が Merge された

はじめて DefinitelyTyped/DefinitelyTyped に Pull Request して Merge された (DefinitelyTyped/DefinitelyTyped#15244) 。これにより @types/htmlescape が追加された。

htmlescape は HTML に JavaScript を埋め込むことを考慮した escape をするものだ。browserify をはじめ、多くの npm package で使われている。

使用例を挙げよう。

'<script>window.__STATE__ = ' + JSON.stringify(initialState) + '</script>';

いかにも書きたくなりそうだが、このコードには脆弱性がある。initialState'</script>' のような文字列が含まれていると壊れる。そこで htmlescape を使う。

import * as htmlescape from 'htmlescape';
'<script>window.__STATE__ = ' + htmlescape(initialState) + '</script>';

htmlescape< などを escape するので、問題ない。ちなみに、もちろんだが、上記の例は TypeScript のつもりで書いている。 npm install @types/htmlescape で使える。

さっそく bouzuya/mr-jums にも適用した。良い。

DefinitelyTyped への Pull Request は規則に従うのが面倒なので避けていたが、 Lint や generator も用意されているので、意外と簡単だ。小さいものについては今後は積極的に投げていこうと思う。