stunk 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.js +19 -18
- package/package.json +1 -1
- package/src/core.ts +30 -24
- package/tsconfig.json +2 -1
- package/types/stunk.d.ts +11 -0
package/dist/core.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
// Chunk creation function
|
|
2
1
|
export function createChunk(initialValue) {
|
|
3
|
-
let value = initialValue;
|
|
4
|
-
const subscribers =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return value;
|
|
9
|
-
},
|
|
10
|
-
// Set a new value and notify subscribers
|
|
11
|
-
set(newValue) {
|
|
2
|
+
let value = initialValue;
|
|
3
|
+
const subscribers = [];
|
|
4
|
+
const get = () => value;
|
|
5
|
+
const set = (newValue) => {
|
|
6
|
+
if (newValue !== value) {
|
|
12
7
|
value = newValue;
|
|
13
|
-
subscribers.forEach((
|
|
14
|
-
}
|
|
15
|
-
// Subscribe to changes
|
|
16
|
-
subscribe(callback) {
|
|
17
|
-
subscribers.add(callback);
|
|
18
|
-
// Return an unsubscribe function
|
|
19
|
-
return () => subscribers.delete(callback);
|
|
20
|
-
},
|
|
8
|
+
subscribers.forEach((subscriber) => subscriber(value)); // Notify all subscribers
|
|
9
|
+
}
|
|
21
10
|
};
|
|
11
|
+
const subscribe = (callback) => {
|
|
12
|
+
subscribers.push(callback);
|
|
13
|
+
callback(value); // Immediately notify on subscription
|
|
14
|
+
// Return unsubscribe function
|
|
15
|
+
return () => {
|
|
16
|
+
const index = subscribers.indexOf(callback);
|
|
17
|
+
if (index >= 0) {
|
|
18
|
+
subscribers.splice(index, 1);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
return { get, set, subscribe };
|
|
22
23
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stunk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Stunk - A framework-agnostic state management library implementing the Atomic State technique, utilizing chunk-based units for efficient state management.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
package/src/core.ts
CHANGED
|
@@ -1,30 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
export type Subscriber<T> = (newValue: T) => void;
|
|
2
|
+
|
|
3
|
+
export interface Chunk<T> {
|
|
4
|
+
get: () => T;
|
|
5
|
+
set: (value: T) => void;
|
|
6
|
+
subscribe: (callback: Subscriber<T>) => () => void;
|
|
7
|
+
}
|
|
7
8
|
|
|
8
|
-
// Chunk creation function
|
|
9
9
|
export function createChunk<T>(initialValue: T): Chunk<T> {
|
|
10
|
-
let value = initialValue;
|
|
11
|
-
const subscribers
|
|
10
|
+
let value = initialValue;
|
|
11
|
+
const subscribers: Subscriber<T>[] = [];
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
// Set a new value and notify subscribers
|
|
19
|
-
set(newValue: T) {
|
|
13
|
+
const get = () => value;
|
|
14
|
+
|
|
15
|
+
const set = (newValue: T) => {
|
|
16
|
+
if (newValue !== value) {
|
|
20
17
|
value = newValue;
|
|
21
|
-
subscribers.forEach((
|
|
22
|
-
}
|
|
23
|
-
// Subscribe to changes
|
|
24
|
-
subscribe(callback: (value: T) => void) {
|
|
25
|
-
subscribers.add(callback);
|
|
26
|
-
// Return an unsubscribe function
|
|
27
|
-
return () => subscribers.delete(callback);
|
|
28
|
-
},
|
|
18
|
+
subscribers.forEach((subscriber) => subscriber(value)); // Notify all subscribers
|
|
19
|
+
}
|
|
29
20
|
};
|
|
21
|
+
|
|
22
|
+
const subscribe = (callback: Subscriber<T>) => {
|
|
23
|
+
subscribers.push(callback);
|
|
24
|
+
callback(value); // Immediately notify on subscription
|
|
25
|
+
|
|
26
|
+
// Return unsubscribe function
|
|
27
|
+
return () => {
|
|
28
|
+
const index = subscribers.indexOf(callback);
|
|
29
|
+
if (index >= 0) {
|
|
30
|
+
subscribers.splice(index, 1);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return { get, set, subscribe };
|
|
30
36
|
}
|
package/tsconfig.json
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
"outDir": "./dist",
|
|
7
7
|
"declaration": true,
|
|
8
8
|
"declarationDir": "./dist/types",
|
|
9
|
+
"typeRoots": ["./node_modules/@types", "./types"],
|
|
9
10
|
"strict": true,
|
|
10
11
|
"esModuleInterop": true,
|
|
11
12
|
"skipLibCheck": true
|
|
12
13
|
},
|
|
13
|
-
"include": ["src/**/*"],
|
|
14
|
+
"include": ["src/**/*", "types/stunk.d.ts"],
|
|
14
15
|
"exclude": ["node_modules", "dist"]
|
|
15
16
|
}
|
package/types/stunk.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare module 'stunk' {
|
|
2
|
+
export type Subscriber<T> = (newValue: T) => void;
|
|
3
|
+
|
|
4
|
+
export interface Chunk<T> {
|
|
5
|
+
get: () => T;
|
|
6
|
+
set: (value: T) => void;
|
|
7
|
+
subscribe: (callback: Subscriber<T>) => () => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function createChunk<T>(initialValue: T): Chunk<T>;
|
|
11
|
+
}
|