split: sync-client utils and errors reorganization
Move error classes from services/ and file-operations/ into a new errors/ directory (authentication-error, server-version-mismatch-error, sync-reset-error, file-not-found-error), plus add file-already-exists-error and http-client-error. Update consts.ts and utils/* (await-all, create-client-id, hash, rate-limit, find-matching-file). Replace data-structures (locks, min-covered, event-listeners, fix-sized-cache) and add debugging utilities (in-memory-file-system, log-to-console, slow-web-socket-factory). Removes utils/create-promise.ts.
This commit is contained in:
parent
f7beb31d8f
commit
9d99a4ac23
22 changed files with 384 additions and 215 deletions
|
|
@ -1,12 +1,14 @@
|
|||
// https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript
|
||||
export function hash(content: Uint8Array): string {
|
||||
let result = 0;
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
||||
for (let i = 0; i < content.length; i++) {
|
||||
result = (result << 5) - result + content[i];
|
||||
result |= 0; // Convert to 32bit integer
|
||||
}
|
||||
return Math.abs(result).toString(16).padStart(8, "0");
|
||||
export async function hash(content: Uint8Array): Promise<string> {
|
||||
// Re-wrap into a fresh Uint8Array<ArrayBuffer> so SubtleCrypto's
|
||||
// BufferSource overload accepts it without an unsafe type assertion.
|
||||
// The lib types require an ArrayBuffer-backed view; the source may
|
||||
// be backed by SharedArrayBuffer in some runtimes.
|
||||
const buffer = new ArrayBuffer(content.byteLength);
|
||||
new Uint8Array(buffer).set(content);
|
||||
const digest = await crypto.subtle.digest("SHA-256", buffer);
|
||||
const bytes = new Uint8Array(digest);
|
||||
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
||||
}
|
||||
|
||||
export const EMPTY_HASH = hash(new Uint8Array(0));
|
||||
// SHA-256 of empty content, computed once at import time
|
||||
export const EMPTY_HASH: Promise<string> = hash(new Uint8Array());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue