@avonjs/avonjs
Version:
A fluent Node.js API generator.
51 lines (50 loc) • 1.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_fs_1 = __importDefault(require("node:fs"));
const collect_js_1 = __importDefault(require("collect.js"));
const CollectionRepository_1 = __importDefault(require("./CollectionRepository"));
class FileRepository extends CollectionRepository_1.default {
/**
* Resolve items from the store path.
*/
resolveItems() {
const data = node_fs_1.default.readFileSync(this.filepath()).toString();
return JSON.parse(data).filter((item) => (0, collect_js_1.default)(item).isNotEmpty());
}
/**
* Store given model into the storage.
*/
async store(model) {
this.write(this.makeCollection()
.push(model.setAttribute(model.getKeyName(), model.getKey() ?? this.newId()))
.all());
return model;
}
/**
* Store given model into the storage.
*/
async update(model) {
this.write(this.makeCollection()
.map((item) => (item.getKey() === model.getKey() ? model : item))
.all());
return model;
}
/**
* Delete model for the given key.
*/
async delete(key) {
this.write(this.makeCollection()
.filter((item) => item.getKey() !== key)
.all());
}
/**
* Write given items to storage.
*/
write(items) {
node_fs_1.default.writeFileSync(this.filepath(), JSON.stringify(items.map((item) => item.getAttributes())));
}
}
exports.default = FileRepository;