ddd
This commit is contained in:
parent
0a343ecbc5
commit
c3a6f5ff37
80 changed files with 2512 additions and 1625 deletions
18
server/json-repository.js
Normal file
18
server/json-repository.js
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
'use strict';
|
||||
|
||||
function createJsonRepository({fsp,crypto,processId=process.pid}={}){
|
||||
if(!fsp?.readFile||!fsp?.writeFile||!fsp?.rename||!crypto?.randomBytes)throw new TypeError('Filesystem and crypto adapters are required');
|
||||
const read=async(file,{missing=null}={})=>{
|
||||
try{return JSON.parse(await fsp.readFile(file,'utf8'))}
|
||||
catch(error){if(error.code==='ENOENT'&&missing!==undefined)return typeof missing==='function'?missing():missing;throw error}
|
||||
};
|
||||
const write=async(file,value)=>{
|
||||
const temporary=`${file}.${processId}.${crypto.randomBytes(6).toString('hex')}.tmp`;
|
||||
await fsp.writeFile(temporary,JSON.stringify(value),{encoding:'utf8',mode:0o600});
|
||||
await fsp.rename(temporary,file);
|
||||
};
|
||||
const remove=async file=>fsp.unlink(file).catch(error=>{if(error.code!=='ENOENT')throw error});
|
||||
return Object.freeze({read,write,remove});
|
||||
}
|
||||
|
||||
module.exports=Object.freeze({createJsonRepository});
|
||||
Loading…
Add table
Add a link
Reference in a new issue