123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.NodeCrud = void 0;
- const tslib_1 = require("tslib");
- const util_1 = require("../node-to-fsa/util");
- const util_2 = require("../crud/util");
- const util_3 = require("../fsa-to-crud/util");
- class NodeCrud {
- constructor(options) {
- var _a;
- this.options = options;
- this.put = async (collection, id, data, options) => {
- (0, util_2.assertType)(collection, 'put', 'crudfs');
- (0, util_1.assertName)(id, 'put', 'crudfs');
- const dir = this.dir + (collection.length ? collection.join(this.separator) + this.separator : '');
- const fs = this.fs;
- if (dir.length > 1)
- await fs.mkdir(dir, { recursive: true });
- const filename = dir + id;
- switch (options === null || options === void 0 ? void 0 : options.throwIf) {
- case 'exists': {
- try {
- await fs.writeFile(filename, data, { flag: 64 /* FLAG.O_CREAT */ | 128 /* FLAG.O_EXCL */ });
- }
- catch (error) {
- if (error && typeof error === 'object' && error.code === 'EEXIST')
- throw (0, util_3.newExistsError)();
- throw error;
- }
- break;
- }
- case 'missing': {
- try {
- await fs.writeFile(filename, data, { flag: 2 /* FLAG.O_RDWR */ });
- }
- catch (error) {
- if (error && typeof error === 'object' && error.code === 'ENOENT')
- throw (0, util_3.newMissingError)();
- throw error;
- }
- break;
- }
- default: {
- await fs.writeFile(filename, data);
- }
- }
- };
- this.get = async (collection, id) => {
- (0, util_2.assertType)(collection, 'get', 'crudfs');
- (0, util_1.assertName)(id, 'get', 'crudfs');
- const dir = await this.checkDir(collection);
- const filename = dir + id;
- const fs = this.fs;
- try {
- const buf = (await fs.readFile(filename));
- return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
- }
- catch (error) {
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT':
- throw (0, util_3.newFile404Error)(collection, id);
- }
- }
- throw error;
- }
- };
- this.del = async (collection, id, silent) => {
- (0, util_2.assertType)(collection, 'del', 'crudfs');
- (0, util_1.assertName)(id, 'del', 'crudfs');
- try {
- const dir = await this.checkDir(collection);
- const filename = dir + id;
- await this.fs.unlink(filename);
- }
- catch (error) {
- if (!!silent)
- return;
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT':
- throw (0, util_3.newFile404Error)(collection, id);
- }
- }
- throw error;
- }
- };
- this.info = async (collection, id) => {
- (0, util_2.assertType)(collection, 'info', 'crudfs');
- if (id) {
- (0, util_1.assertName)(id, 'info', 'crudfs');
- await this.checkDir(collection);
- try {
- const stats = await this.fs.stat(this.dir + collection.join(this.separator) + this.separator + id);
- if (!stats.isFile())
- throw (0, util_3.newFile404Error)(collection, id);
- return {
- type: 'resource',
- id,
- size: stats.size,
- modified: stats.mtimeMs,
- };
- }
- catch (error) {
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT':
- throw (0, util_3.newFile404Error)(collection, id);
- }
- }
- throw error;
- }
- }
- else {
- await this.checkDir(collection);
- try {
- const stats = await this.fs.stat(this.dir + collection.join(this.separator));
- if (!stats.isDirectory())
- throw (0, util_3.newFolder404Error)(collection);
- return {
- type: 'collection',
- id: '',
- };
- }
- catch (error) {
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT':
- case 'ENOTDIR':
- throw (0, util_3.newFolder404Error)(collection);
- }
- }
- throw error;
- }
- }
- };
- this.drop = async (collection, silent) => {
- (0, util_2.assertType)(collection, 'drop', 'crudfs');
- try {
- const dir = await this.checkDir(collection);
- const isRoot = dir === this.dir;
- if (isRoot) {
- const list = (await this.fs.readdir(dir));
- for (const entry of list)
- await this.fs.rmdir(dir + entry, { recursive: true });
- }
- else {
- await this.fs.rmdir(dir, { recursive: true });
- }
- }
- catch (error) {
- if (!silent)
- throw error;
- }
- };
- this.scan = function (collection) {
- return tslib_1.__asyncGenerator(this, arguments, function* () {
- var _a, e_1, _b, _c;
- (0, util_2.assertType)(collection, 'scan', 'crudfs');
- const dir = yield tslib_1.__await(this.checkDir(collection));
- const dirents = (yield tslib_1.__await(this.fs.readdir(dir, { withFileTypes: true })));
- try {
- for (var _d = true, dirents_1 = tslib_1.__asyncValues(dirents), dirents_1_1; dirents_1_1 = yield tslib_1.__await(dirents_1.next()), _a = dirents_1_1.done, !_a; _d = true) {
- _c = dirents_1_1.value;
- _d = false;
- const entry = _c;
- if (entry.isFile()) {
- yield yield tslib_1.__await({
- type: 'resource',
- id: '' + entry.name,
- });
- }
- else if (entry.isDirectory()) {
- yield yield tslib_1.__await({
- type: 'collection',
- id: '' + entry.name,
- });
- }
- }
- }
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
- finally {
- try {
- if (!_d && !_a && (_b = dirents_1.return)) yield tslib_1.__await(_b.call(dirents_1));
- }
- finally { if (e_1) throw e_1.error; }
- }
- });
- };
- this.list = async (collection) => {
- var _a, e_2, _b, _c;
- const entries = [];
- try {
- for (var _d = true, _e = tslib_1.__asyncValues(this.scan(collection)), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
- _c = _f.value;
- _d = false;
- const entry = _c;
- entries.push(entry);
- }
- }
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
- finally {
- try {
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
- }
- finally { if (e_2) throw e_2.error; }
- }
- return entries;
- };
- this.from = async (collection) => {
- (0, util_2.assertType)(collection, 'from', 'crudfs');
- const dir = this.dir + (collection.length ? collection.join(this.separator) + this.separator : '');
- const fs = this.fs;
- if (dir.length > 1)
- await fs.mkdir(dir, { recursive: true });
- await this.checkDir(collection);
- return new NodeCrud({
- dir,
- fs: this.fs,
- separator: this.separator,
- });
- };
- this.separator = (_a = options.separator) !== null && _a !== void 0 ? _a : '/';
- let dir = options.dir;
- const last = dir[dir.length - 1];
- if (last !== this.separator)
- dir = dir + this.separator;
- this.dir = dir;
- this.fs = options.fs;
- }
- async checkDir(collection) {
- const dir = this.dir + (collection.length ? collection.join(this.separator) + this.separator : '');
- const fs = this.fs;
- try {
- const stats = await fs.stat(dir);
- if (!stats.isDirectory())
- throw (0, util_3.newFolder404Error)(collection);
- return dir;
- }
- catch (error) {
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT':
- case 'ENOTDIR':
- throw (0, util_3.newFolder404Error)(collection);
- }
- }
- throw error;
- }
- }
- }
- exports.NodeCrud = NodeCrud;
- //# sourceMappingURL=NodeCrud.js.map
|