godprotocol
Version:
A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.
76 lines (60 loc) • 1.9 kB
JavaScript
const addresses = new Object()
const retrieve = async(args, {vm, chain})=>{
let {address, _id} = args;
address = await address.literal()
_id = _id && await _id.literal()
let res = await vm.account.parse({address, _id, retrieve: true})
return res;
}
const store = async(args, {vm, chain, thread})=>{
if (!addresses) addresses = new Object()
let {object} = args;
let config = object.config, data, address = config.location;
let id = `${address}-${config._id}`
let exists = addresses[id]
if(exists){
if (exists.updated >= config.updated){
return
}
}
addresses[id] = {...config}
switch(config.type){
case 'instance':
if (config.methods.__store__){
let spli = vm._split_datapath(config.methods.__store__)
await object.run({identifier: {value: spli[0], _id: spli[1]}, arguments:[]}, {chain, thread})
}
break;
case 'string':
address = config.location
break;
case 'number':
address = config.location
break;
case 'array':
data = await object.store({store, thread})
break;
case 'twain':
data = await object.store({store, thread})
break;
default:
console.log(config, "DFAULT")
data = await object.to_address()
console.log(data)
return;
}
if(!address)return;
let ds = vm.account.manager.ds
let folder = await ds.folder(address, {account: vm.account.physical_address})
let res = await folder.write(data || config, {replace: true})
if (config.type === 'instance'){
let class_account = config.cls.split('/').slice(0,2).join('/')
let class_folder_account = await (await ds.folder(config.cls)).folder(`${vm.account.physical_address}`, {account: class_account})
await class_folder_account.write({
_id: config._id,
})
}
return data || config
}
export default store;
export {retrieve}