Skip to content

Commit

Permalink
generating declaration files and renaming destination folder
Browse files Browse the repository at this point in the history
  • Loading branch information
kwertop committed Oct 17, 2023
1 parent b1890c5 commit 86af128
Show file tree
Hide file tree
Showing 12 changed files with 99 additions and 31 deletions.
1 change: 1 addition & 0 deletions lib/benchmarkCache.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {};
File renamed without changes.
13 changes: 13 additions & 0 deletions lib/examples/cache.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export declare class LocalCache {
private static cache;
private constructor();
static InitiateInstance(): void;
static get(key: string): any;
static set(key: string, value: any, ttl?: number): void;
static del(key: string): void;
static getTtl(key: string): number | undefined;
static recover(): void;
private static createNodeCacheInstance;
private static getTtlWithJitter;
static flushAll(): Promise<void>;
}
File renamed without changes.
1 change: 1 addition & 0 deletions lib/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as PersistentNodeCache } from "./persistentNodeCache";
9 changes: 0 additions & 9 deletions build/index.js → lib/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,8 @@
"use strict";
// import { LocalCache } from "./cache";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PersistentNodeCache = void 0;
// import { PersistentNodeCache } from "./persistentNodeCache";
// LocalCache.InitiateInstance();
// LocalCache.set("foo", "bar");
// LocalCache.set("cat", "dog");
// LocalCache.set("something", "nothing");
// LocalCache.recover();
// let val = LocalCache.get("foo")
// console.log(val);
var persistentNodeCache_1 = require("./persistentNodeCache");
Object.defineProperty(exports, "PersistentNodeCache", { enumerable: true, get: function () { return __importDefault(persistentNodeCache_1).default; } });
22 changes: 22 additions & 0 deletions lib/persistentNodeCache.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import NodeCache, { Key, ValueSetItem } from "node-cache";
export default class PersistentNodeCache extends NodeCache {
private readonly interval;
private readonly cacheName;
private readonly emitter;
private readonly backupFilePath;
private readonly appendFilePath;
private flushingToDisk;
private appendFileDescriptor;
constructor(cacheName: string, period?: number, dir?: string, opts?: any);
set<T>(key: Key, value: T, ttl?: number | string): boolean;
mset<T>(keyValueSet: ValueSetItem<T>[]): boolean;
del(keys: Key | Key[]): number;
take<T>(key: Key): T | undefined;
ttl(key: Key, ttl?: number): boolean;
flushAll(): void;
close(): void;
recover(): Promise<void>;
private appendExpiredEvent;
private saveToDisk;
private appendToFile;
}
18 changes: 4 additions & 14 deletions build/persistentNodeCache.js → lib/persistentNodeCache.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ class PersistentNodeCache extends node_cache_1.default {
constructor(cacheName, period, dir, opts) {
super(opts);
this.cacheName = cacheName;
this.interval = setInterval(() => { this.saveToDisk(); }, period);
this.interval = setInterval(() => { this.saveToDisk(); }, period || 1000);
this.emitter = new events_1.EventEmitter();
this.flushingToDisk = false;
if (dir === null || dir === void 0 ? void 0 : dir.endsWith('/')) {
dir = dir.slice(0, -1);
}
this.backupFilePath = (dir || os_1.default.homedir()) + `/${cacheName}.backup`;
this.appendFilePath = (dir || os_1.default.homedir()) + `/${cacheName}.append`;
this.backupFilePath = (dir || os_1.default.homedir()) + `/${this.cacheName}.backup`;
this.appendFilePath = (dir || os_1.default.homedir()) + `/${this.cacheName}.append`;
fs_1.default.writeFileSync(this.appendFilePath, '');
super.on("expired", (key, _) => { this.appendExpiredEvent(key); });
}
Expand Down Expand Up @@ -186,11 +186,6 @@ class PersistentNodeCache extends node_cache_1.default {
let bf = Buffer.from(JSON.stringify(data));
fs_1.default.writeFileSync(this.backupFilePath, bf);
fs_1.default.writeFileSync(this.appendFilePath, '');
// fs.write(this.appendFileDescriptor, '', (writeErr, written, buffer) => {
// if (writeErr) {
// console.error('Error writing to file:', writeErr);
// }
// });
this.appendFileDescriptor.close();
}
catch (err) {
Expand Down Expand Up @@ -220,13 +215,8 @@ class PersistentNodeCache extends node_cache_1.default {
this.appendFileDescriptor = fd;
fs_1.default.write(fd, data, 0, data.length, null, (writeErr, written, buffer) => {
if (writeErr) {
console.error('Error witing to file:', writeErr);
console.error('Error writing to file:', writeErr);
}
// fs.close(fd, (closeErr) => {
// if(closeErr) {
// console.error('Error closing file:', closeErr);
// }
// });
});
});
}
Expand Down
22 changes: 22 additions & 0 deletions lib/waitFor.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
export declare const waitFor: <Event_1 extends string>(event: Event_1, emitter: EventEmitter<Event_1>, callback?: Callback) => Promise<void>;
export declare const removeListener: <Event_1 extends string>(emitter: EventEmitterOff<Event_1> | EventEmitterRemoveListener<Event_1>, event: "error" | Event_1, listener: EventListener) => void;
interface Callback {
(error: any): void;
}
interface EventListener {
(...args: any[]): void;
}
interface EventEmitterOn<Event extends string> {
on(event: Event | 'error', listener: EventListener): void;
}
interface EventEmitterOff<Event extends string> {
off(event: Event | 'error', listener: EventListener): void;
}
interface EventEmitterAddListener<Event extends string> {
addListener(event: Event | 'error', listener: EventListener): void;
}
interface EventEmitterRemoveListener<Event extends string> {
removeListener(event: Event | 'error', listener: EventListener): void;
}
type EventEmitter<Event extends string> = (EventEmitterOn<Event> | EventEmitterAddListener<Event>) & (EventEmitterOff<Event> | EventEmitterRemoveListener<Event>);
export {};
File renamed without changes.
40 changes: 34 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
"name": "persistent-node-cache",
"version": "1.0.0",
"description": "persistent wrapper over node-cache for recovery",
"main": "index.js",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"test": "jest --coverage",
"tsc": "tsc",
"build": "rm -rf ./build && tsc -p .",
"start": "tsc -p . && node ./build/index.js",
"benchmark": "tsc -p . && node ./build/benchmarkCache.js"
"build": "rm -rf ./lib && tsc -p .",
"start": "tsc -p . && node ./lib/index.js",
"benchmark": "tsc -p . && node ./lib/benchmarkCache.js"
},
"devDependencies": {
"@jest/globals": "^29.6.4",
Expand All @@ -21,7 +22,34 @@
"ts-node": "^10.9.1",
"typescript": "^5.2.2"
},
"dependencies": {
"dependencies": {
"node-cache": "^5.1.2"
}
},
"directories": {
"lib": "lib",
"test": "test"
},
"repository": {
"type": "git",
"url": "git+https://github.com/kwertop/persistent-node-cache.git"
},
"keywords": [
"fast",
"persistent",
"cache",
"caching",
"node",
"nodejs",
"recovery",
"restore",
"directio",
"in-memory",
"disk-storage"
],
"author": "Rahul Sharma",
"license": "ISC",
"bugs": {
"url": "https://github.com/kwertop/persistent-node-cache/issues"
},
"homepage": "https://github.com/kwertop/persistent-node-cache#readme"
}
4 changes: 2 additions & 2 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */

/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
"declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
"outDir": "./build", /* Specify an output folder for all emitted files. */
"outDir": "./lib", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
Expand Down

0 comments on commit 86af128

Please sign in to comment.