61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
|
importScripts(
|
||
|
// Batched optimization
|
||
|
"./lightning-fs.min.js?v=0.0.2.3",
|
||
|
// Fixed a bug
|
||
|
"./magic_portal.js"
|
||
|
);
|
||
|
|
||
|
const detect = () => {
|
||
|
if (typeof window !== 'undefined' && !self.skipWaiting) {
|
||
|
return 'window'
|
||
|
} else if (typeof self !== 'undefined' && !self.skipWaiting) {
|
||
|
return 'Worker'
|
||
|
} else if (typeof self !== 'undefined' && self.skipWaiting) {
|
||
|
return 'ServiceWorker'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const fsName = 'logseq';
|
||
|
const createFS = () => new LightningFS(fsName);
|
||
|
let fs = createFS();
|
||
|
let pfs = fs.promises;
|
||
|
|
||
|
if (detect() === 'Worker') {
|
||
|
const portal = new MagicPortal(self);
|
||
|
portal.set('fs', fs);
|
||
|
portal.set('pfs', pfs);
|
||
|
|
||
|
portal.set('workerThread', {
|
||
|
rimraf: async function (path) {
|
||
|
// try {
|
||
|
// // First assume path is itself a file
|
||
|
// await pfs.unlink(path)
|
||
|
// // if that worked we're done
|
||
|
// return
|
||
|
// } catch (err) {
|
||
|
// // Otherwise, path must be a directory
|
||
|
// if (err.code !== 'EISDIR') throw err
|
||
|
// }
|
||
|
// Knowing path is a directory,
|
||
|
// first, assume everything inside path is a file.
|
||
|
let files = await pfs.readdir(path);
|
||
|
for (let file of files) {
|
||
|
let child = path + '/' + file
|
||
|
try {
|
||
|
await pfs.unlink(child)
|
||
|
} catch (err) {
|
||
|
if (err.code !== 'EISDIR') throw err
|
||
|
}
|
||
|
}
|
||
|
// Assume what's left are directories and recurse.
|
||
|
let dirs = await pfs.readdir(path)
|
||
|
for (let dir of dirs) {
|
||
|
let child = path + '/' + dir
|
||
|
await rimraf(child, pfs)
|
||
|
}
|
||
|
// Finally, delete the empty directory
|
||
|
await pfs.rmdir(path)
|
||
|
}
|
||
|
});
|
||
|
}
|