diff options
| author | Adam <[email protected]> | 2025-12-08 06:24:19 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-08 06:24:24 -0600 |
| commit | 9363c15b4a1fafca2d30063ebcb166f36ba35235 (patch) | |
| tree | fa7d6c62a0b0d0f7811562d6d989735bfad49537 /packages/util | |
| parent | 3325823f23800687e4af8d9960438b848bd4e005 (diff) | |
| download | opencode-9363c15b4a1fafca2d30063ebcb166f36ba35235.tar.gz opencode-9363c15b4a1fafca2d30063ebcb166f36ba35235.zip | |
feat: better code and diff perf
Diffstat (limited to 'packages/util')
| -rw-r--r-- | packages/util/src/encode.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/util/src/encode.ts b/packages/util/src/encode.ts new file mode 100644 index 000000000..cc40fbe9d --- /dev/null +++ b/packages/util/src/encode.ts @@ -0,0 +1,25 @@ +export function base64Encode(value: string) { + return btoa(value).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "") +} + +export function base64Decode(value: string) { + return atob(value.replace(/-/g, "+").replace(/_/g, "/")) +} + +export async function hash(content: string, algorithm = "SHA-256"): Promise<string> { + const encoder = new TextEncoder() + const data = encoder.encode(content) + const hashBuffer = await crypto.subtle.digest(algorithm, data) + const hashArray = Array.from(new Uint8Array(hashBuffer)) + const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("") + return hashHex +} + +export function checksum(content: string): string { + let hash = 0x811c9dc5 + for (let i = 0; i < content.length; i++) { + hash ^= content.charCodeAt(i) + hash = Math.imul(hash, 0x01000193) + } + return (hash >>> 0).toString(36) +} |
