@takker/crc
motivation
すでにCRC32を計算するpackagesはあるが、bundle sizeが大きすぎるか余り使われていない
npm
一番使われている
classで実装しているため、余計なコードを削除できない
2.1kB程度
crc/calcualtors/crc32が2.9kB
cache tableをhard codingしているため、どうしても1kBを越えてしまう
jsr
なし
deno.land/x
class実装、冗長
古いinterfaceであるDeno.Readerを使う形式
Denoにvendor-lockinされている
Bufferを使う形式
web APIに沿っていない
fflateの実装を参考に書いたコードは263B (0.3kB)に収まったので、これをpackageとしてpublishして使おうと思った ということは、package nameは@takker/crcではなく@takker/checksumのほうがいいか?
うーんめんどい、やっぱり同じrepoにするか?
でも検索する側からしたら、別のpackageになっていたほうが検索しやすいか
JSRはpackage nameからしか検索できないみたい API design
crc32(data: Uint8Array, prev?: number): number
dataをchunksで与えて逐次計算したいときは、prevに前回計算したchecksumを渡す
❌️JSで実装する
jsr.ioのコードをweb browserからdirectにimportできたら便利かと思ったが、現状だとJavaScript+JSDocではslow-type判定されていしまう 幸い、esm.shがJSRに対応しているので、そちらから読み込めば事が済む 実装
一部型定義を通すために書き換えた
cache tableはhard codingせず、program起動時に計算させる
base64で圧縮しても1.3kB程度までしか小さくならない
unit tests