UNPKG

@varasto/fs-storage

Version:

Varasto storage implementation that stores data to hard disk

71 lines (70 loc) 2.61 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readItem = exports.globNamespace = exports.buildFilename = exports.createNamespace = void 0; const storage_1 = require("@varasto/storage"); const fs_1 = __importDefault(require("fs")); const glob_1 = require("glob"); const is_valid_slug_1 = require("is-valid-slug"); const mkdirp_1 = require("mkdirp"); const path_1 = __importDefault(require("path")); const createNamespace = (dir, namespace) => new Promise((resolve, reject) => { if (!(0, is_valid_slug_1.isValidSlug)(namespace)) { reject(new storage_1.InvalidSlugError('Given namespace is not valid slug')); return; } const filename = path_1.default.join(dir, namespace); fs_1.default.exists(filename, (exists) => { if (exists) { resolve(); } else { (0, mkdirp_1.mkdirp)(filename) .then(() => resolve()) .catch(reject); } }); }); exports.createNamespace = createNamespace; const buildFilename = (dir, namespace, key) => { if (!(0, is_valid_slug_1.isValidSlug)(namespace)) { throw new storage_1.InvalidSlugError('Given namespace is not valid slug'); } if (!(0, is_valid_slug_1.isValidSlug)(key)) { throw new storage_1.InvalidSlugError('Given key is not valid slug'); } return path_1.default.join(dir, namespace, `${key}.json`); }; exports.buildFilename = buildFilename; const globNamespace = (dir, namespace) => (0, is_valid_slug_1.isValidSlug)(namespace) ? (0, glob_1.glob)(path_1.default.join(dir, namespace, '*.json')) : Promise.reject(new storage_1.InvalidSlugError('Given namespace is not valid slug')); exports.globNamespace = globNamespace; const readItem = (filename, encoding, deserialize) => new Promise((resolve, reject) => { fs_1.default.readFile(filename, encoding, (err, text) => { if (err) { if (err.code === 'ENOENT') { resolve(undefined); } else { reject(err); } return; } try { const value = deserialize(text); if (typeof value === 'object') { resolve(value); } else { resolve(undefined); // XXX: Perhaps this should be an error? } } catch (err) { reject(err); } }); }); exports.readItem = readItem;