Skip to content

Commit

Permalink
added observable mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Sovgut committed May 30, 2024
1 parent a3001b6 commit f3b8750
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 7 deletions.
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sovgut/state",
"version": "1.0.12",
"version": "1.0.13",
"type": "module",
"repository": "https://github.com/Sovgut/state.git",
"author": {
Expand All @@ -12,6 +12,9 @@
"test": "vitest run",
"build": "tsc && vite build"
},
"peerDependencies": {
"eventemitter3": "^5.0.1"
},
"devDependencies": {
"@types/node": "^20.12.13",
"@vitest/coverage-v8": "^1.6.0",
Expand Down
29 changes: 23 additions & 6 deletions src/modules/base/base.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
import { UnsupportedException } from "@/errors/unsupported/unsupported";
import { ISupportedPrimitive, IProvider } from "@/types";
import EventEmitter from "eventemitter3";

export class BaseState {
static provider: IProvider | undefined = undefined;
private static observer = new EventEmitter()
public static provider: IProvider | undefined = undefined;

public static on(event: `${string}:${'set' | 'unset'}`, callback: (...args: any[]) => void): void {
this.observer.on(event, callback);
}

public static get<T = unknown>(
key: string,
Expand Down Expand Up @@ -47,19 +53,29 @@ export class BaseState {

switch (typeof value) {
case "bigint": {
return this.provider.setItem(key, value.toString());
this.provider.setItem(key, value.toString());
this.observer.emit(`${key}:set`);
break;
}
case "boolean": {
return this.provider.setItem(key, String(value));
this.provider.setItem(key, String(value));
this.observer.emit(`${key}:set`);
break;
}
case "number": {
return this.provider.setItem(key, String(value));
this.provider.setItem(key, String(value));
this.observer.emit(`${key}:set`);
break;
}
case "object": {
return this.provider.setItem(key, JSON.stringify(value));
this.provider.setItem(key, JSON.stringify(value));
this.observer.emit(`${key}:set`);
break;
}
case "string": {
return this.provider.setItem(key, value);
this.provider.setItem(key, value);
this.observer.emit(`${key}:set`);
break;
}
}
}
Expand All @@ -70,6 +86,7 @@ export class BaseState {
}

this.provider.removeItem(key);
this.observer.emit(`${key}:unset`);
}

public static clear(): void {
Expand Down
5 changes: 5 additions & 0 deletions vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { URL, fileURLToPath } from "node:url";
import { resolve } from "node:path";
import dts from "vite-plugin-dts";

import * as packageJson from './package.json'

export default defineConfig({
plugins: [dts()],
build: {
Expand All @@ -15,6 +17,9 @@ export default defineConfig({
entry: resolve("src", "main.ts"),
formats: ["es"],
},
rollupOptions: {
external: [...Object.keys(packageJson.peerDependencies)],
}
},
resolve: {
alias: {
Expand Down

0 comments on commit f3b8750

Please sign in to comment.