Initial commit

Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com>
Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com>
Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com>
Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com>
Co-Authored-By: Johan  <4934465+joolsus@users.noreply.github.com>
Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com>
Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
This commit is contained in:
Michael Cartner
2024-01-26 11:52:55 +01:00
commit b9c60b07dc
2789 changed files with 868795 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
import { platform, filesystem, IStorage } from "@noodl/platform";
import path from "path";
import mkdir from "mkdirp-sync";
import rimraf from "rimraf";
function fileNameForKey(key: string) {
const keyFileName = path.basename(key, ".json") + ".json";
// Prevent ENOENT and other similar errors when using
// reserved characters in Windows filenames.
// See: https://en.wikipedia.org/wiki/Filename#Reserved%5Fcharacters%5Fand%5Fwords
const escapedFileName = encodeURIComponent(keyFileName);
const userDataPath = platform.getUserDataPath();
return path.join(userDataPath, escapedFileName);
}
export class StorageNode implements IStorage {
async get(key: string): Promise<any> {
try {
const filename = fileNameForKey(key);
const fileContent = await filesystem.readJson(filename);
return fileContent;
} catch (error) {
// In some cases there is no json file
// so we just return an empty object.
return {};
}
}
async set(key: string, data: { [key: string]: any }): Promise<void> {
const filename = fileNameForKey(key);
mkdir(path.dirname(filename));
await filesystem.writeJson(filename, data);
}
async remove(key: string): Promise<void> {
var filename = fileNameForKey(key);
return new Promise<void>((resolve, reject) => {
rimraf(filename, (error) => {
if (error) {
reject(error);
} else {
resolve();
}
});
});
}
}