58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.CrudCasBase = void 0;
|
|
const normalizeErrors = async (code) => {
|
|
try {
|
|
return await code();
|
|
}
|
|
catch (error) {
|
|
if (error && typeof error === 'object') {
|
|
switch (error.name) {
|
|
case 'ResourceNotFound':
|
|
case 'CollectionNotFound':
|
|
throw new DOMException(error.message, 'BlobNotFound');
|
|
}
|
|
}
|
|
throw error;
|
|
}
|
|
};
|
|
class CrudCasBase {
|
|
constructor(crud, hash, hash2Loc, hashEqual) {
|
|
this.crud = crud;
|
|
this.hash = hash;
|
|
this.hash2Loc = hash2Loc;
|
|
this.hashEqual = hashEqual;
|
|
this.put = async (blob) => {
|
|
const digest = await this.hash(blob);
|
|
const [collection, resource] = this.hash2Loc(digest);
|
|
await this.crud.put(collection, resource, blob);
|
|
return digest;
|
|
};
|
|
this.get = async (hash, options) => {
|
|
const [collection, resource] = this.hash2Loc(hash);
|
|
return await normalizeErrors(async () => {
|
|
const blob = await this.crud.get(collection, resource);
|
|
if (!(options === null || options === void 0 ? void 0 : options.skipVerification)) {
|
|
const digest = await this.hash(blob);
|
|
if (!this.hashEqual(digest, hash))
|
|
throw new DOMException('Blob contents does not match hash', 'Integrity');
|
|
}
|
|
return blob;
|
|
});
|
|
};
|
|
this.del = async (hash, silent) => {
|
|
const [collection, resource] = this.hash2Loc(hash);
|
|
await normalizeErrors(async () => {
|
|
return await this.crud.del(collection, resource, silent);
|
|
});
|
|
};
|
|
this.info = async (hash) => {
|
|
const [collection, resource] = this.hash2Loc(hash);
|
|
return await normalizeErrors(async () => {
|
|
return await this.crud.info(collection, resource);
|
|
});
|
|
};
|
|
}
|
|
}
|
|
exports.CrudCasBase = CrudCasBase;
|
|
//# sourceMappingURL=CrudCasBase.js.map
|