valyrian.js 7.2.12 → 8.0.1

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.
Files changed (168) hide show
  1. package/README.md +6 -6
  2. package/dist/flux-store/index.d.ts +32 -0
  3. package/dist/flux-store/index.d.ts.map +1 -0
  4. package/dist/flux-store/index.js +267 -0
  5. package/dist/flux-store/index.js.map +7 -0
  6. package/dist/flux-store/index.min.js +1 -0
  7. package/dist/flux-store/index.min.js.map +1 -0
  8. package/dist/flux-store/index.mjs +246 -0
  9. package/dist/flux-store/index.mjs.map +7 -0
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +35 -51
  12. package/dist/hooks/index.js.map +3 -3
  13. package/dist/hooks/index.min.js +1 -0
  14. package/dist/hooks/index.min.js.map +1 -0
  15. package/dist/hooks/index.mjs +36 -52
  16. package/dist/hooks/index.mjs.map +3 -3
  17. package/dist/index.d.ts +18 -14
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +107 -88
  20. package/dist/index.js.map +3 -3
  21. package/dist/index.min.js +1 -1
  22. package/dist/index.min.js.map +1 -1
  23. package/dist/index.mjs +107 -88
  24. package/dist/index.mjs.map +3 -3
  25. package/dist/native-store/index.d.ts +14 -0
  26. package/dist/native-store/index.d.ts.map +1 -0
  27. package/dist/native-store/index.js +103 -0
  28. package/dist/native-store/index.js.map +7 -0
  29. package/dist/native-store/index.min.js +1 -0
  30. package/dist/native-store/index.min.js.map +1 -0
  31. package/dist/native-store/index.mjs +82 -0
  32. package/dist/native-store/index.mjs.map +7 -0
  33. package/dist/node/index.d.ts +1 -1
  34. package/dist/node/index.d.ts.map +1 -1
  35. package/dist/node/index.js +125 -10
  36. package/dist/node/index.js.map +4 -4
  37. package/dist/node/index.mjs +125 -10
  38. package/dist/node/index.mjs.map +4 -4
  39. package/dist/node/node.sw.js +152 -0
  40. package/dist/node/utils/icons.d.ts +4 -5
  41. package/dist/node/utils/icons.d.ts.map +1 -1
  42. package/dist/node/utils/inline.d.ts +1 -1
  43. package/dist/node/utils/inline.d.ts.map +1 -1
  44. package/dist/node/utils/node.sw.js +152 -0
  45. package/dist/node/utils/session-storage.d.ts +22 -0
  46. package/dist/node/utils/session-storage.d.ts.map +1 -0
  47. package/dist/node/utils/sw.d.ts.map +1 -1
  48. package/dist/node/utils/tree-adapter.d.ts +5 -1
  49. package/dist/node/utils/tree-adapter.d.ts.map +1 -1
  50. package/dist/pulse-store/index.d.ts +16 -0
  51. package/dist/pulse-store/index.d.ts.map +1 -0
  52. package/dist/pulse-store/index.js +143 -0
  53. package/dist/pulse-store/index.js.map +7 -0
  54. package/dist/pulse-store/index.min.js +1 -0
  55. package/dist/pulse-store/index.min.js.map +1 -0
  56. package/dist/pulse-store/index.mjs +122 -0
  57. package/dist/pulse-store/index.mjs.map +7 -0
  58. package/dist/request/index.d.ts +11 -11
  59. package/dist/request/index.d.ts.map +1 -1
  60. package/dist/request/index.js +63 -84
  61. package/dist/request/index.js.map +2 -2
  62. package/dist/request/index.min.js +1 -0
  63. package/dist/request/index.min.js.map +1 -0
  64. package/dist/request/index.mjs +63 -84
  65. package/dist/request/index.mjs.map +2 -2
  66. package/dist/router/index.d.ts +36 -33
  67. package/dist/router/index.d.ts.map +1 -1
  68. package/dist/router/index.js +247 -96
  69. package/dist/router/index.js.map +3 -3
  70. package/dist/router/index.min.js +1 -0
  71. package/dist/router/index.min.js.map +1 -0
  72. package/dist/router/index.mjs +247 -96
  73. package/dist/router/index.mjs.map +3 -3
  74. package/dist/signals/index.d.ts +6 -0
  75. package/dist/signals/index.d.ts.map +1 -0
  76. package/dist/signals/index.js +92 -0
  77. package/dist/signals/index.js.map +7 -0
  78. package/dist/signals/index.min.js +1 -0
  79. package/dist/signals/index.min.js.map +1 -0
  80. package/dist/signals/index.mjs +71 -0
  81. package/dist/signals/index.mjs.map +7 -0
  82. package/dist/suspense/index.d.ts +6 -0
  83. package/dist/suspense/index.d.ts.map +1 -0
  84. package/dist/suspense/index.js +67 -0
  85. package/dist/suspense/index.js.map +7 -0
  86. package/dist/suspense/index.min.js +1 -0
  87. package/dist/suspense/index.min.js.map +1 -0
  88. package/dist/suspense/index.mjs +46 -0
  89. package/dist/suspense/index.mjs.map +7 -0
  90. package/dist/sw/index.min.js +1 -0
  91. package/dist/sw/index.min.js.map +1 -0
  92. package/dist/translate/index.d.ts +19 -0
  93. package/dist/translate/index.d.ts.map +1 -0
  94. package/dist/translate/index.js +150 -0
  95. package/dist/translate/index.js.map +7 -0
  96. package/dist/translate/index.min.js +1 -0
  97. package/dist/translate/index.min.js.map +1 -0
  98. package/dist/translate/index.mjs +129 -0
  99. package/dist/translate/index.mjs.map +7 -0
  100. package/dist/tsconfig.tsbuildinfo +1 -1
  101. package/dist/utils/deep-freeze.d.ts +3 -0
  102. package/dist/utils/deep-freeze.d.ts.map +1 -0
  103. package/dist/utils/getter-setter.d.ts +3 -0
  104. package/dist/utils/getter-setter.d.ts.map +1 -0
  105. package/dist/utils/has-changed.d.ts +2 -0
  106. package/dist/utils/has-changed.d.ts.map +1 -0
  107. package/dist/utils/index.d.ts +4 -0
  108. package/dist/utils/index.d.ts.map +1 -0
  109. package/dist/utils/index.js +138 -0
  110. package/dist/utils/index.js.map +7 -0
  111. package/dist/utils/index.min.js +1 -0
  112. package/dist/utils/index.min.js.map +1 -0
  113. package/dist/utils/index.mjs +115 -0
  114. package/dist/utils/index.mjs.map +7 -0
  115. package/lib/flux-store/index.ts +312 -0
  116. package/lib/hooks/index.ts +39 -57
  117. package/lib/index.ts +135 -118
  118. package/lib/native-store/index.ts +106 -0
  119. package/lib/node/index.ts +3 -1
  120. package/lib/node/utils/icons.ts +4 -4
  121. package/lib/node/utils/inline.ts +2 -0
  122. package/lib/node/utils/node.sw.js +152 -0
  123. package/lib/node/utils/session-storage.ts +117 -0
  124. package/lib/node/utils/sw.ts +34 -10
  125. package/lib/node/utils/tree-adapter.ts +19 -1
  126. package/lib/pulse-store/index.ts +188 -0
  127. package/lib/request/index.ts +92 -122
  128. package/lib/router/index.ts +353 -164
  129. package/lib/signals/index.ts +98 -0
  130. package/lib/suspense/index.ts +57 -0
  131. package/lib/translate/index.ts +156 -0
  132. package/lib/utils/deep-freeze.ts +54 -0
  133. package/lib/utils/getter-setter.ts +40 -0
  134. package/lib/utils/has-changed.ts +43 -0
  135. package/lib/utils/index.ts +3 -0
  136. package/package.json +40 -57
  137. package/tsconfig.json +5 -4
  138. package/dist/dataset/index.d.ts +0 -24
  139. package/dist/dataset/index.d.ts.map +0 -1
  140. package/dist/dataset/index.js +0 -178
  141. package/dist/dataset/index.js.map +0 -7
  142. package/dist/dataset/index.mjs +0 -157
  143. package/dist/dataset/index.mjs.map +0 -7
  144. package/dist/node/node.sw.tpl +0 -133
  145. package/dist/node/utils/node.sw.tpl +0 -133
  146. package/dist/proxy-signal/index.d.ts +0 -23
  147. package/dist/proxy-signal/index.d.ts.map +0 -1
  148. package/dist/proxy-signal/index.js +0 -138
  149. package/dist/proxy-signal/index.js.map +0 -7
  150. package/dist/proxy-signal/index.mjs +0 -117
  151. package/dist/proxy-signal/index.mjs.map +0 -7
  152. package/dist/signal/index.d.ts +0 -9
  153. package/dist/signal/index.d.ts.map +0 -1
  154. package/dist/signal/index.js +0 -76
  155. package/dist/signal/index.js.map +0 -7
  156. package/dist/signal/index.mjs +0 -55
  157. package/dist/signal/index.mjs.map +0 -7
  158. package/dist/store/index.d.ts +0 -16
  159. package/dist/store/index.d.ts.map +0 -1
  160. package/dist/store/index.js +0 -93
  161. package/dist/store/index.js.map +0 -7
  162. package/dist/store/index.mjs +0 -72
  163. package/dist/store/index.mjs.map +0 -7
  164. package/lib/dataset/index.ts +0 -193
  165. package/lib/node/utils/node.sw.tpl +0 -133
  166. package/lib/proxy-signal/index.ts +0 -187
  167. package/lib/signal/index.ts +0 -86
  168. package/lib/store/index.ts +0 -101
@@ -0,0 +1,152 @@
1
+ // eslint-disable-next-line no-console
2
+ const Log = console.log;
3
+
4
+ const config = {
5
+ version: "v1.2::",
6
+ name: "Valyrian.js",
7
+ // Critical resources and offline page
8
+ urls: ["/"]
9
+ };
10
+
11
+ const cacheName = config.version + config.name;
12
+ const MAX_CACHE_SIZE = 50; // Max cache size
13
+
14
+ // Send messages to clients (controlled pages)
15
+ function sendMessageToClients(message) {
16
+ self.clients.matchAll().then((clients) => {
17
+ clients.forEach((client) => {
18
+ client.postMessage(message);
19
+ });
20
+ });
21
+ }
22
+
23
+ // Limit the cache size by deleting the oldest entries
24
+ function limitCacheSize(name, size) {
25
+ caches.open(name).then((cache) => {
26
+ cache.keys().then((keys) => {
27
+ if (keys.length > size) {
28
+ cache.delete(keys[0]).then(() => {
29
+ limitCacheSize(name, size);
30
+ });
31
+ }
32
+ });
33
+ });
34
+ }
35
+
36
+ async function fetchRequest(event) {
37
+ Log("WORKER: fetch event for " + event.request.url);
38
+ try {
39
+ // Clone the request to store it in the cache
40
+ const fetchRequest = event.request.clone();
41
+ const response = await fetch(fetchRequest);
42
+
43
+ // Verify if the response is valid
44
+ if (response && response.status === 200 && response.type === "basic") {
45
+ // Clone the response to store it in the cache
46
+ const responseToCache = response.clone();
47
+ const cache = await caches.open(cacheName);
48
+ cache.put(event.request, responseToCache);
49
+
50
+ // Limit the cache size
51
+ limitCacheSize(cacheName, MAX_CACHE_SIZE);
52
+
53
+ Log("WORKER: fetch response stored in cache.", event.request.url);
54
+ }
55
+ return response;
56
+ } catch (error) {
57
+ Log("WORKER: fetch request failed.", error);
58
+
59
+ // Try to serve the cached response if available
60
+ const cachedResponse = await caches.match(event.request);
61
+ if (cachedResponse) {
62
+ Log("WORKER: fetch request failed, responding with cache.");
63
+ return cachedResponse;
64
+ }
65
+
66
+ // Send the offline page if no cache is available
67
+ const cache = await caches.open(cacheName);
68
+ const offlineResponse = await cache.match("/offline.html");
69
+ if (offlineResponse) {
70
+ return offlineResponse;
71
+ }
72
+
73
+ // Generic offline page
74
+ return new Response("<h1>Offline</h1>", {
75
+ status: 503,
76
+ statusText: "Service Unavailable",
77
+ headers: new Headers({
78
+ "Content-Type": "text/html"
79
+ })
80
+ });
81
+ }
82
+ }
83
+
84
+ self.addEventListener("fetch", (event) => {
85
+ // Ignore requests with the "only-if-cached" cache mode
86
+ if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
87
+ return;
88
+ }
89
+
90
+ Log("WORKER: fetch event in progress.", event.request.url);
91
+
92
+ // Ignore requests that are not GET
93
+ if (event.request.method !== "GET") {
94
+ return;
95
+ }
96
+
97
+ // If the request is for the API, use the network first
98
+ if (event.request.url.includes("/api/")) {
99
+ event.respondWith(fetchRequest(event));
100
+ } else {
101
+ // Use the cache first for other requests
102
+ event.respondWith(
103
+ caches.match(event.request).then((response) => {
104
+ if (response) {
105
+ Log("WORKER: returning from cache.", event.request.url);
106
+ return response;
107
+ }
108
+ return fetchRequest(event);
109
+ })
110
+ );
111
+ }
112
+ });
113
+
114
+ self.addEventListener("install", (event) => {
115
+ Log("WORKER: installing version", cacheName);
116
+ event.waitUntil(
117
+ caches
118
+ .open(cacheName)
119
+ .then((cache) => {
120
+ return cache.addAll(config.urls);
121
+ })
122
+ .then(() => {
123
+ Log("WORKER: install completed.");
124
+ })
125
+ );
126
+ });
127
+
128
+ self.addEventListener("activate", (event) => {
129
+ Log("WORKER: activating new version", cacheName);
130
+
131
+ event.waitUntil(
132
+ caches.keys().then((keys) =>
133
+ Promise.all(
134
+ keys
135
+ // Filter the caches that belong to this app version
136
+ .filter((key) => key !== cacheName)
137
+ .map((key) => caches.delete(key))
138
+ ).then(() => {
139
+ Log("WORKER: old caches cleared.");
140
+ // Notify clients about the new version
141
+ sendMessageToClients({ type: "NEW_VERSION" });
142
+ })
143
+ )
144
+ );
145
+ });
146
+
147
+ // Listen for messages from clients
148
+ self.addEventListener("message", (event) => {
149
+ if (event.data && event.data.type === "SKIP_WAITING") {
150
+ self.skipWaiting();
151
+ }
152
+ });
@@ -0,0 +1,22 @@
1
+ export declare class SessionStorage {
2
+ private storage;
3
+ private limit;
4
+ private persist;
5
+ private filePath;
6
+ private directory;
7
+ constructor({ persist, filePath }?: {
8
+ persist?: boolean;
9
+ filePath?: string;
10
+ });
11
+ private getStorageSize;
12
+ private checkSizeLimit;
13
+ setItem(key: string | null | undefined, value: string | null | undefined): void;
14
+ getItem(key: string | null | undefined): string | null;
15
+ removeItem(key: string | null | undefined): void;
16
+ clear(): void;
17
+ get length(): number;
18
+ key(index: number): string | null;
19
+ private saveToFile;
20
+ private loadFromFile;
21
+ }
22
+ //# sourceMappingURL=session-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/session-storage.ts"],"names":[],"mappings":"AAGA,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA8B;gBAEnC,EAAE,OAAe,EAAE,QAA+B,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAiB/G,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAmB/E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;IAQtD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAWhD,KAAK,IAAI,IAAI;IAQb,IAAI,MAAM,IAAI,MAAM,CAEnB;IAGD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMjC,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;CAUrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"sw.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/sw.ts"],"names":[],"mappings":"AAGA,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,QAsB5C"}
1
+ {"version":3,"file":"sw.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/sw.ts"],"names":[],"mappings":"AAGA,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,QAoB5C"}
@@ -1,6 +1,7 @@
1
1
  interface ChildNodes extends Array<Node | Element | Text | DocumentFragment> {
2
2
  }
3
3
  export declare class Node implements Node {
4
+ #private;
4
5
  childNodes: ChildNodes;
5
6
  baseURI: string;
6
7
  tag_name: string;
@@ -20,6 +21,8 @@ export declare class Node implements Node {
20
21
  parent_node: Node | null;
21
22
  get parentNode(): Node | null;
22
23
  set parentNode(node: Node | null);
24
+ get dataset(): Record<string | number, any>;
25
+ set dataset(value: Record<string | number, any>);
23
26
  constructor();
24
27
  appendChild<T extends Node>(node: T): T;
25
28
  insertBefore<T extends Node>(node: T, child: Node | null): T;
@@ -62,12 +65,13 @@ export declare class DocumentFragment extends Element {
62
65
  }
63
66
  export declare class Document extends Element {
64
67
  constructor();
68
+ body: Element;
65
69
  createDocumentFragment(): DocumentFragment;
66
70
  createElement(type: string): Element;
67
71
  createElementNS(ns: string, type: string): Element;
68
72
  createTextNode(text: any): Text;
69
73
  }
70
- export declare function domToHtml(dom: Element): string;
74
+ export declare function domToHtml(dom: Element | Text | DocumentFragment): string;
71
75
  export declare function domToHyperscript(childNodes: ChildNodes, depth?: number): string;
72
76
  export declare function htmlToDom(html: string): Element | Text | DocumentFragment;
73
77
  export declare function htmlToHyperscript(html: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"tree-adapter.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/tree-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-adapter.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/tree-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ type State = Record<string, any>;
2
+ export type Pulse<StateType> = (state: StateType, ...args: any[]) => void | Promise<void>;
3
+ export type Pulses<StateType> = {
4
+ [key: string]: Pulse<StateType>;
5
+ };
6
+ type ProxyState<StateType> = StateType & {
7
+ [key: string]: any;
8
+ };
9
+ type StorePulses<PulsesType> = {
10
+ [K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R ? (...args: Args) => R : never;
11
+ };
12
+ export declare function createPulseStore<StateType extends State, PulsesType extends Pulses<StateType>>(initialState: StateType, pulses: PulsesType): () => [ProxyState<StateType>, StorePulses<PulsesType>];
13
+ export declare function createMutableStore<StateType extends State, PulsesType extends Pulses<StateType>>(initialState: StateType, pulses: PulsesType): () => [ProxyState<StateType>, StorePulses<PulsesType>];
14
+ export declare function createEffect(effect: Function): void;
15
+ export {};
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/pulse-store/index.ts"],"names":[],"mappings":"AAIA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAIjC,MAAM,MAAM,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAG1F,MAAM,MAAM,MAAM,CAAC,SAAS,IAAI;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;CACjC,CAAC;AAKF,KAAK,UAAU,CAAC,SAAS,IAAI,SAAS,GAAG;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAKF,KAAK,WAAW,CAAC,UAAU,IAAI;KAC5B,CAAC,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,CAAC,GACvF,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,GACpB,KAAK;CACV,CAAC;AAgIF,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,KAAK,EAAE,UAAU,SAAS,MAAM,CAAC,SAAS,CAAC,EAC5F,YAAY,EAAE,SAAS,EACvB,MAAM,EAAE,UAAU,GACjB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAExD;AAGD,wBAAgB,kBAAkB,CAAC,SAAS,SAAS,KAAK,EAAE,UAAU,SAAS,MAAM,CAAC,SAAS,CAAC,EAC9F,YAAY,EAAE,SAAS,EACvB,MAAM,EAAE,UAAU,GACjB,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAKxD;AAGD,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,QAW5C"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // lib/pulse-store/index.ts
21
+ var pulse_store_exports = {};
22
+ __export(pulse_store_exports, {
23
+ createEffect: () => createEffect,
24
+ createMutableStore: () => createMutableStore,
25
+ createPulseStore: () => createPulseStore
26
+ });
27
+ module.exports = __toCommonJS(pulse_store_exports);
28
+ var import_valyrian = require("valyrian.js");
29
+ var import_utils = require("valyrian.js/utils");
30
+ var effectStack = [];
31
+ function createStore(initialState, pulses, immutable = false) {
32
+ const subscribers = /* @__PURE__ */ new Set();
33
+ const vnodesToUpdate = /* @__PURE__ */ new WeakSet();
34
+ const localState = (typeof initialState === "function" ? initialState() : initialState) || {};
35
+ function isMutable() {
36
+ if (immutable) {
37
+ throw new Error("You need to call a pulse to modify the state");
38
+ }
39
+ }
40
+ const proxyState = new Proxy(localState, {
41
+ get: (state, prop) => {
42
+ const currentEffect = effectStack[effectStack.length - 1];
43
+ if (currentEffect && !subscribers.has(currentEffect)) {
44
+ subscribers.add(currentEffect);
45
+ }
46
+ const currentVnode = import_valyrian.current.vnode;
47
+ if (currentVnode && !vnodesToUpdate.has(currentVnode)) {
48
+ const subscription = () => {
49
+ if (!currentVnode.dom) {
50
+ subscribers.delete(subscription);
51
+ vnodesToUpdate.delete(currentVnode);
52
+ return;
53
+ }
54
+ (0, import_valyrian.updateVnode)(currentVnode);
55
+ };
56
+ subscribers.add(subscription);
57
+ vnodesToUpdate.add(currentVnode);
58
+ }
59
+ return state[prop];
60
+ },
61
+ // If the user tries to set directly it will throw an error
62
+ set: (state, prop, value) => {
63
+ isMutable();
64
+ Reflect.set(state, prop, value);
65
+ return true;
66
+ },
67
+ // If the user tries to delete directly it will throw an error
68
+ deleteProperty: (state, prop) => {
69
+ isMutable();
70
+ Reflect.deleteProperty(state, prop);
71
+ return true;
72
+ }
73
+ });
74
+ function syncState(newState) {
75
+ for (const key in newState) {
76
+ localState[key] = immutable ? (0, import_utils.deepFreeze)(newState[key]) : newState[key];
77
+ }
78
+ for (const key in localState) {
79
+ if (!(key in newState)) {
80
+ Reflect.deleteProperty(localState, key);
81
+ }
82
+ }
83
+ }
84
+ function setState(newState) {
85
+ if (!(0, import_utils.hasChanged)(localState, newState)) {
86
+ return;
87
+ }
88
+ syncState(newState);
89
+ subscribers.forEach((subscriber) => subscriber());
90
+ }
91
+ function getPulseMethod(key) {
92
+ return (...args) => {
93
+ const currentState = (0, import_utils.deepCloneUnfreeze)(localState);
94
+ const pulse = pulses[key](currentState, ...args);
95
+ if (pulse instanceof Promise) {
96
+ return pulse.then(() => setState(currentState)).catch((error) => {
97
+ console.error("Error in pulse:", error);
98
+ });
99
+ }
100
+ setState(currentState);
101
+ };
102
+ }
103
+ const boundPulses = {};
104
+ for (const key in pulses) {
105
+ if (typeof pulses[key] !== "function") {
106
+ throw new Error(`Pulse '${key}' must be a function`);
107
+ }
108
+ boundPulses[key] = getPulseMethod(key);
109
+ }
110
+ const pulsesProxy = new Proxy(boundPulses, {
111
+ get: (pulses2, prop) => {
112
+ if (!(prop in pulses2)) {
113
+ throw new Error(`Pulse '${prop}' does not exist`);
114
+ }
115
+ return pulses2[prop];
116
+ }
117
+ });
118
+ function usePulseStore() {
119
+ return [proxyState, pulsesProxy];
120
+ }
121
+ syncState(localState);
122
+ return usePulseStore;
123
+ }
124
+ function createPulseStore(initialState, pulses) {
125
+ return createStore(initialState, pulses, true);
126
+ }
127
+ function createMutableStore(initialState, pulses) {
128
+ console.warn(
129
+ "Warning: You are working with a mutable state. This can lead to unpredictable behavior. All state changes made outside of a pulse will not trigger a re-render."
130
+ );
131
+ return createStore(initialState, pulses, false);
132
+ }
133
+ function createEffect(effect) {
134
+ const runEffect = () => {
135
+ try {
136
+ effectStack.push(runEffect);
137
+ effect();
138
+ } finally {
139
+ effectStack.pop();
140
+ }
141
+ };
142
+ runEffect();
143
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/pulse-store/index.ts"],
4
+ "sourcesContent": ["/* eslint-disable no-console */\nimport { updateVnode, Vnode, VnodeWithDom, current } from \"valyrian.js\";\nimport { deepCloneUnfreeze, deepFreeze, hasChanged } from \"valyrian.js/utils\";\n\ntype State = Record<string, any>;\n\n// An action or pulse type definition\n// eslint-disable-next-line no-unused-vars\nexport type Pulse<StateType> = (state: StateType, ...args: any[]) => void | Promise<void>;\n\n// A collection of pulses\nexport type Pulses<StateType> = {\n [key: string]: Pulse<StateType>;\n};\n\n// A proxy state\n// This is a state that is proxied to automatically subscribe to changes\n// And is used internally to update the vnode when the state changes\ntype ProxyState<StateType> = StateType & {\n [key: string]: any;\n};\n\n// The effect stack\nconst effectStack: Function[] = [];\n\ntype StorePulses<PulsesType> = {\n [K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R\n ? (...args: Args) => R\n : never;\n};\n\n// Creates the store\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction createStore<StateType extends State, PulsesType extends Pulses<StateType>>(\n initialState: StateType | (() => StateType) | null,\n pulses: PulsesType,\n immutable = false\n): () => [ProxyState<StateType>, StorePulses<PulsesType>] {\n const subscribers = new Set<Function>();\n const vnodesToUpdate = new WeakSet<Vnode>();\n\n // Initialize the localState for this store\n const localState: StateType =\n (typeof initialState === \"function\" ? initialState() : initialState) || ({} as StateType);\n\n function isMutable() {\n if (immutable) {\n throw new Error(\"You need to call a pulse to modify the state\");\n }\n }\n\n // We create a proxy for the state\n const proxyState = new Proxy(localState, {\n get: (state, prop: string) => {\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n\n const currentVnode = current.vnode as VnodeWithDom;\n if (currentVnode && !vnodesToUpdate.has(currentVnode)) {\n const subscription = () => {\n if (!currentVnode.dom) {\n subscribers.delete(subscription);\n vnodesToUpdate.delete(currentVnode);\n return;\n }\n\n updateVnode(currentVnode);\n };\n\n subscribers.add(subscription);\n vnodesToUpdate.add(currentVnode);\n }\n\n return state[prop];\n },\n // If the user tries to set directly it will throw an error\n set: (state, prop: string, value: any) => {\n isMutable();\n Reflect.set(state, prop, value);\n return true;\n },\n // If the user tries to delete directly it will throw an error\n deleteProperty: (state, prop: string) => {\n isMutable();\n Reflect.deleteProperty(state, prop);\n return true;\n }\n });\n\n function syncState(newState: StateType) {\n for (const key in newState) {\n localState[key] = immutable ? deepFreeze(newState[key]) : newState[key];\n }\n\n for (const key in localState) {\n if (!(key in newState)) {\n Reflect.deleteProperty(localState, key);\n }\n }\n }\n\n function setState(newState: StateType) {\n if (!hasChanged(localState, newState)) {\n return;\n }\n\n syncState(newState);\n\n subscribers.forEach((subscriber) => subscriber());\n }\n\n function getPulseMethod(key: string) {\n return (...args: any[]) => {\n const currentState = deepCloneUnfreeze(localState);\n const pulse = pulses[key](currentState, ...args);\n\n if (pulse instanceof Promise) {\n return pulse\n .then(() => setState(currentState))\n .catch((error) => {\n console.error(\"Error in pulse:\", error);\n });\n }\n\n setState(currentState);\n };\n }\n\n const boundPulses: Record<string, Pulse<StateType>> = {};\n for (const key in pulses) {\n if (typeof pulses[key] !== \"function\") {\n throw new Error(`Pulse '${key}' must be a function`);\n }\n boundPulses[key] = getPulseMethod(key);\n }\n\n const pulsesProxy = new Proxy(boundPulses, {\n get: (pulses, prop: string) => {\n if (!(prop in pulses)) {\n throw new Error(`Pulse '${prop}' does not exist`);\n }\n return pulses[prop];\n }\n });\n\n function usePulseStore(): [ProxyState<StateType>, StorePulses<PulsesType>] {\n return [proxyState, pulsesProxy as StorePulses<PulsesType>];\n }\n\n syncState(localState);\n\n return usePulseStore;\n}\n\n// Creates a pulse store with an immutable state by default\nexport function createPulseStore<StateType extends State, PulsesType extends Pulses<StateType>>(\n initialState: StateType,\n pulses: PulsesType\n): () => [ProxyState<StateType>, StorePulses<PulsesType>] {\n return createStore(initialState, pulses, true);\n}\n\n// Creates a mutable store, useful for performance, but not recommended\nexport function createMutableStore<StateType extends State, PulsesType extends Pulses<StateType>>(\n initialState: StateType,\n pulses: PulsesType\n): () => [ProxyState<StateType>, StorePulses<PulsesType>] {\n console.warn(\n \"Warning: You are working with a mutable state. This can lead to unpredictable behavior. All state changes made outside of a pulse will not trigger a re-render.\"\n );\n return createStore(initialState, pulses, false);\n}\n\n// Creates an effect\nexport function createEffect(effect: Function) {\n const runEffect = () => {\n try {\n effectStack.push(runEffect);\n effect();\n } finally {\n effectStack.pop();\n }\n };\n\n runEffect();\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["pulses"]
7
+ }
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,o={};((t,r)=>{for(var n in r)e(t,n,{get:r[n],enumerable:!0})})(o,{createEffect:()=>p,createMutableStore:()=>d,createPulseStore:()=>f});var a,i=(a=o,((o,a,i,u)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of r(a))n.call(o,c)||c===i||e(o,c,{get:()=>a[c],enumerable:!(u=t(a,c))||u.enumerable});return o})(e({},"__esModule",{value:!0}),a)),u=require("valyrian.js"),c=require("valyrian.js/utils"),s=[];function l(e,t,r=!1){const n=new Set,o=new WeakSet,a=("function"==typeof e?e():e)||{};function i(){if(r)throw new Error("You need to call a pulse to modify the state")}const l=new Proxy(a,{get:(e,t)=>{const r=s[s.length-1];r&&!n.has(r)&&n.add(r);const a=u.current.vnode;if(a&&!o.has(a)){const e=()=>{if(!a.dom)return n.delete(e),void o.delete(a);(0,u.updateVnode)(a)};n.add(e),o.add(a)}return e[t]},set:(e,t,r)=>(i(),Reflect.set(e,t,r),!0),deleteProperty:(e,t)=>(i(),Reflect.deleteProperty(e,t),!0)});function f(e){for(const t in e)a[t]=r?(0,c.deepFreeze)(e[t]):e[t];for(const t in a)t in e||Reflect.deleteProperty(a,t)}function d(e){(0,c.hasChanged)(a,e)&&(f(e),n.forEach(e=>e()))}function p(e){return(...r)=>{const n=(0,c.deepCloneUnfreeze)(a),o=t[e](n,...r);if(o instanceof Promise)return o.then(()=>d(n)).catch(e=>{console.error("Error in pulse:",e)});d(n)}}const y={};for(const e in t){if("function"!=typeof t[e])throw new Error(`Pulse '${e}' must be a function`);y[e]=p(e)}const h=new Proxy(y,{get:(e,t)=>{if(!(t in e))throw new Error(`Pulse '${t}' does not exist`);return e[t]}});return f(a),function(){return[l,h]}}function f(e,t){return l(e,t,!0)}function d(e,t){return console.warn("Warning: You are working with a mutable state. This can lead to unpredictable behavior. All state changes made outside of a pulse will not trigger a re-render."),l(e,t,!1)}function p(e){const t=()=>{try{s.push(t),e()}finally{s.pop()}};t()}"undefined"!=typeof module?module.exports=i:self.ValyrianPulseStore=i})();//# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwdWxzZV9zdG9yZV9leHBvcnRzIiwiX19leHBvcnQiLCJjcmVhdGVFZmZlY3QiLCJjcmVhdGVNdXRhYmxlU3RvcmUiLCJjcmVhdGVQdWxzZVN0b3JlIiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwiZWZmZWN0U3RhY2siLCJjcmVhdGVTdG9yZSIsImluaXRpYWxTdGF0ZSIsInB1bHNlcyIsImltbXV0YWJsZSIsInN1YnNjcmliZXJzIiwiU2V0Iiwidm5vZGVzVG9VcGRhdGUiLCJXZWFrU2V0IiwibG9jYWxTdGF0ZSIsImlzTXV0YWJsZSIsIkVycm9yIiwicHJveHlTdGF0ZSIsIlByb3h5IiwiZ2V0Iiwic3RhdGUiLCJwcm9wIiwiY3VycmVudEVmZmVjdCIsImxlbmd0aCIsImhhcyIsImFkZCIsImN1cnJlbnRWbm9kZSIsImN1cnJlbnQiLCJ2bm9kZSIsInN1YnNjcmlwdGlvbiIsImRvbSIsImRlbGV0ZSIsInVwZGF0ZVZub2RlIiwic2V0IiwidmFsdWUiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJzeW5jU3RhdGUiLCJuZXdTdGF0ZSIsImtleSIsImRlZXBGcmVlemUiLCJzZXRTdGF0ZSIsImhhc0NoYW5nZWQiLCJmb3JFYWNoIiwic3Vic2NyaWJlciIsImdldFB1bHNlTWV0aG9kIiwiYXJncyIsImN1cnJlbnRTdGF0ZSIsImRlZXBDbG9uZVVuZnJlZXplIiwicHVsc2UiLCJQcm9taXNlIiwidGhlbiIsImNhdGNoIiwiZXJyb3IiLCJjb25zb2xlIiwiYm91bmRQdWxzZXMiLCJwdWxzZXNQcm94eSIsIndhcm4iLCJlZmZlY3QiLCJydW5FZmZlY3QiLCJwdXNoIiwicG9wIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3B1bHNlLXN0b3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IHVwZGF0ZVZub2RlLCBWbm9kZSwgVm5vZGVXaXRoRG9tLCBjdXJyZW50IH0gZnJvbSBcInZhbHlyaWFuLmpzXCI7XG5pbXBvcnQgeyBkZWVwQ2xvbmVVbmZyZWV6ZSwgZGVlcEZyZWV6ZSwgaGFzQ2hhbmdlZCB9IGZyb20gXCJ2YWx5cmlhbi5qcy91dGlsc1wiO1xuXG50eXBlIFN0YXRlID0gUmVjb3JkPHN0cmluZywgYW55PjtcblxuLy8gQW4gYWN0aW9uIG9yIHB1bHNlIHR5cGUgZGVmaW5pdGlvblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgdHlwZSBQdWxzZTxTdGF0ZVR5cGU+ID0gKHN0YXRlOiBTdGF0ZVR5cGUsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuLy8gQSBjb2xsZWN0aW9uIG9mIHB1bHNlc1xuZXhwb3J0IHR5cGUgUHVsc2VzPFN0YXRlVHlwZT4gPSB7XG4gIFtrZXk6IHN0cmluZ106IFB1bHNlPFN0YXRlVHlwZT47XG59O1xuXG4vLyBBIHByb3h5IHN0YXRlXG4vLyBUaGlzIGlzIGEgc3RhdGUgdGhhdCBpcyBwcm94aWVkIHRvIGF1dG9tYXRpY2FsbHkgc3Vic2NyaWJlIHRvIGNoYW5nZXNcbi8vIEFuZCBpcyB1c2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB2bm9kZSB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzXG50eXBlIFByb3h5U3RhdGU8U3RhdGVUeXBlPiA9IFN0YXRlVHlwZSAmIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuLy8gVGhlIGVmZmVjdCBzdGFja1xuY29uc3QgZWZmZWN0U3RhY2s6IEZ1bmN0aW9uW10gPSBbXTtcblxudHlwZSBTdG9yZVB1bHNlczxQdWxzZXNUeXBlPiA9IHtcbiAgW0sgaW4ga2V5b2YgUHVsc2VzVHlwZV06IFB1bHNlc1R5cGVbS10gZXh0ZW5kcyAoc3RhdGU6IGFueSwgLi4uYXJnczogaW5mZXIgQXJncykgPT4gaW5mZXIgUlxuICAgID8gKC4uLmFyZ3M6IEFyZ3MpID0+IFJcbiAgICA6IG5ldmVyO1xufTtcblxuLy8gQ3JlYXRlcyB0aGUgc3RvcmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG5mdW5jdGlvbiBjcmVhdGVTdG9yZTxTdGF0ZVR5cGUgZXh0ZW5kcyBTdGF0ZSwgUHVsc2VzVHlwZSBleHRlbmRzIFB1bHNlczxTdGF0ZVR5cGU+PihcbiAgaW5pdGlhbFN0YXRlOiBTdGF0ZVR5cGUgfCAoKCkgPT4gU3RhdGVUeXBlKSB8IG51bGwsXG4gIHB1bHNlczogUHVsc2VzVHlwZSxcbiAgaW1tdXRhYmxlID0gZmFsc2Vcbik6ICgpID0+IFtQcm94eVN0YXRlPFN0YXRlVHlwZT4sIFN0b3JlUHVsc2VzPFB1bHNlc1R5cGU+XSB7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IFNldDxGdW5jdGlvbj4oKTtcbiAgY29uc3Qgdm5vZGVzVG9VcGRhdGUgPSBuZXcgV2Vha1NldDxWbm9kZT4oKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBsb2NhbFN0YXRlIGZvciB0aGlzIHN0b3JlXG4gIGNvbnN0IGxvY2FsU3RhdGU6IFN0YXRlVHlwZSA9XG4gICAgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IGluaXRpYWxTdGF0ZSgpIDogaW5pdGlhbFN0YXRlKSB8fCAoe30gYXMgU3RhdGVUeXBlKTtcblxuICBmdW5jdGlvbiBpc011dGFibGUoKSB7XG4gICAgaWYgKGltbXV0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gY2FsbCBhIHB1bHNlIHRvIG1vZGlmeSB0aGUgc3RhdGVcIik7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgY3JlYXRlIGEgcHJveHkgZm9yIHRoZSBzdGF0ZVxuICBjb25zdCBwcm94eVN0YXRlID0gbmV3IFByb3h5KGxvY2FsU3RhdGUsIHtcbiAgICBnZXQ6IChzdGF0ZSwgcHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RWZmZWN0ID0gZWZmZWN0U3RhY2tbZWZmZWN0U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpZiAoY3VycmVudEVmZmVjdCAmJiAhc3Vic2NyaWJlcnMuaGFzKGN1cnJlbnRFZmZlY3QpKSB7XG4gICAgICAgIHN1YnNjcmliZXJzLmFkZChjdXJyZW50RWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFZub2RlID0gY3VycmVudC52bm9kZSBhcyBWbm9kZVdpdGhEb207XG4gICAgICBpZiAoY3VycmVudFZub2RlICYmICF2bm9kZXNUb1VwZGF0ZS5oYXMoY3VycmVudFZub2RlKSkge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50Vm5vZGUuZG9tKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHZub2Rlc1RvVXBkYXRlLmRlbGV0ZShjdXJyZW50Vm5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVZub2RlKGN1cnJlbnRWbm9kZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHZub2Rlc1RvVXBkYXRlLmFkZChjdXJyZW50Vm5vZGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVbcHJvcF07XG4gICAgfSxcbiAgICAvLyBJZiB0aGUgdXNlciB0cmllcyB0byBzZXQgZGlyZWN0bHkgaXQgd2lsbCB0aHJvdyBhbiBlcnJvclxuICAgIHNldDogKHN0YXRlLCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlzTXV0YWJsZSgpO1xuICAgICAgUmVmbGVjdC5zZXQoc3RhdGUsIHByb3AsIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLy8gSWYgdGhlIHVzZXIgdHJpZXMgdG8gZGVsZXRlIGRpcmVjdGx5IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3JcbiAgICBkZWxldGVQcm9wZXJ0eTogKHN0YXRlLCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIGlzTXV0YWJsZSgpO1xuICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHN5bmNTdGF0ZShuZXdTdGF0ZTogU3RhdGVUeXBlKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmV3U3RhdGUpIHtcbiAgICAgIGxvY2FsU3RhdGVba2V5XSA9IGltbXV0YWJsZSA/IGRlZXBGcmVlemUobmV3U3RhdGVba2V5XSkgOiBuZXdTdGF0ZVtrZXldO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGxvY2FsU3RhdGUpIHtcbiAgICAgIGlmICghKGtleSBpbiBuZXdTdGF0ZSkpIHtcbiAgICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShsb2NhbFN0YXRlLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlOiBTdGF0ZVR5cGUpIHtcbiAgICBpZiAoIWhhc0NoYW5nZWQobG9jYWxTdGF0ZSwgbmV3U3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3luY1N0YXRlKG5ld1N0YXRlKTtcblxuICAgIHN1YnNjcmliZXJzLmZvckVhY2goKHN1YnNjcmliZXIpID0+IHN1YnNjcmliZXIoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQdWxzZU1ldGhvZChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGRlZXBDbG9uZVVuZnJlZXplKGxvY2FsU3RhdGUpO1xuICAgICAgY29uc3QgcHVsc2UgPSBwdWxzZXNba2V5XShjdXJyZW50U3RhdGUsIC4uLmFyZ3MpO1xuXG4gICAgICBpZiAocHVsc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBwdWxzZVxuICAgICAgICAgIC50aGVuKCgpID0+IHNldFN0YXRlKGN1cnJlbnRTdGF0ZSkpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIHB1bHNlOlwiLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHNldFN0YXRlKGN1cnJlbnRTdGF0ZSk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGJvdW5kUHVsc2VzOiBSZWNvcmQ8c3RyaW5nLCBQdWxzZTxTdGF0ZVR5cGU+PiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBwdWxzZXMpIHtcbiAgICBpZiAodHlwZW9mIHB1bHNlc1trZXldICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHVsc2UgJyR7a2V5fScgbXVzdCBiZSBhIGZ1bmN0aW9uYCk7XG4gICAgfVxuICAgIGJvdW5kUHVsc2VzW2tleV0gPSBnZXRQdWxzZU1ldGhvZChrZXkpO1xuICB9XG5cbiAgY29uc3QgcHVsc2VzUHJveHkgPSBuZXcgUHJveHkoYm91bmRQdWxzZXMsIHtcbiAgICBnZXQ6IChwdWxzZXMsIHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCEocHJvcCBpbiBwdWxzZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHVsc2UgJyR7cHJvcH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHVsc2VzW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gdXNlUHVsc2VTdG9yZSgpOiBbUHJveHlTdGF0ZTxTdGF0ZVR5cGU+LCBTdG9yZVB1bHNlczxQdWxzZXNUeXBlPl0ge1xuICAgIHJldHVybiBbcHJveHlTdGF0ZSwgcHVsc2VzUHJveHkgYXMgU3RvcmVQdWxzZXM8UHVsc2VzVHlwZT5dO1xuICB9XG5cbiAgc3luY1N0YXRlKGxvY2FsU3RhdGUpO1xuXG4gIHJldHVybiB1c2VQdWxzZVN0b3JlO1xufVxuXG4vLyBDcmVhdGVzIGEgcHVsc2Ugc3RvcmUgd2l0aCBhbiBpbW11dGFibGUgc3RhdGUgYnkgZGVmYXVsdFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVB1bHNlU3RvcmU8U3RhdGVUeXBlIGV4dGVuZHMgU3RhdGUsIFB1bHNlc1R5cGUgZXh0ZW5kcyBQdWxzZXM8U3RhdGVUeXBlPj4oXG4gIGluaXRpYWxTdGF0ZTogU3RhdGVUeXBlLFxuICBwdWxzZXM6IFB1bHNlc1R5cGVcbik6ICgpID0+IFtQcm94eVN0YXRlPFN0YXRlVHlwZT4sIFN0b3JlUHVsc2VzPFB1bHNlc1R5cGU+XSB7XG4gIHJldHVybiBjcmVhdGVTdG9yZShpbml0aWFsU3RhdGUsIHB1bHNlcywgdHJ1ZSk7XG59XG5cbi8vIENyZWF0ZXMgYSBtdXRhYmxlIHN0b3JlLCB1c2VmdWwgZm9yIHBlcmZvcm1hbmNlLCBidXQgbm90IHJlY29tbWVuZGVkXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YWJsZVN0b3JlPFN0YXRlVHlwZSBleHRlbmRzIFN0YXRlLCBQdWxzZXNUeXBlIGV4dGVuZHMgUHVsc2VzPFN0YXRlVHlwZT4+KFxuICBpbml0aWFsU3RhdGU6IFN0YXRlVHlwZSxcbiAgcHVsc2VzOiBQdWxzZXNUeXBlXG4pOiAoKSA9PiBbUHJveHlTdGF0ZTxTdGF0ZVR5cGU+LCBTdG9yZVB1bHNlczxQdWxzZXNUeXBlPl0ge1xuICBjb25zb2xlLndhcm4oXG4gICAgXCJXYXJuaW5nOiBZb3UgYXJlIHdvcmtpbmcgd2l0aCBhIG11dGFibGUgc3RhdGUuIFRoaXMgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gQWxsIHN0YXRlIGNoYW5nZXMgbWFkZSBvdXRzaWRlIG9mIGEgcHVsc2Ugd2lsbCBub3QgdHJpZ2dlciBhIHJlLXJlbmRlci5cIlxuICApO1xuICByZXR1cm4gY3JlYXRlU3RvcmUoaW5pdGlhbFN0YXRlLCBwdWxzZXMsIGZhbHNlKTtcbn1cblxuLy8gQ3JlYXRlcyBhbiBlZmZlY3RcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFZmZlY3QoZWZmZWN0OiBGdW5jdGlvbikge1xuICBjb25zdCBydW5FZmZlY3QgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGVmZmVjdFN0YWNrLnB1c2gocnVuRWZmZWN0KTtcbiAgICAgIGVmZmVjdCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlZmZlY3RTdGFjay5wb3AoKTtcbiAgICB9XG4gIH07XG5cbiAgcnVuRWZmZWN0KCk7XG59XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENBQUFFLGFBQUEsSUFBQUEsRUFBQUMsbUJBQUEsSUFBQUEsRUFBQUMsaUJBQUEsSUFBQUEsSUFBQSxJLEVBQUFDLEcsRUFBQUwsRSwwTUFDQU0sRUFBMERDLFFBQUEsZUFDMURDLEVBQTBERCxRQUFBLHFCQXFCcERFLEVBQTBCLEdBVWhDLFNBQVNDLEVBQ1BDLEVBQ0FDLEVBQ0FDLEdBQVksR0FFWixNQUFNQyxFQUFjLElBQUlDLElBQ2xCQyxFQUFpQixJQUFJQyxRQUdyQkMsR0FDcUIsbUJBQWpCUCxFQUE4QkEsSUFBaUJBLElBQWtCLENBQUMsRUFFNUUsU0FBU1EsSUFDUCxHQUFJTixFQUNGLE1BQU0sSUFBSU8sTUFBTSwrQ0FFcEIsQ0FHQSxNQUFNQyxFQUFhLElBQUlDLE1BQU1KLEVBQVksQ0FDdkNLLElBQUssQ0FBQ0MsRUFBT0MsS0FDWCxNQUFNQyxFQUFnQmpCLEVBQVlBLEVBQVlrQixPQUFTLEdBQ25ERCxJQUFrQlosRUFBWWMsSUFBSUYsSUFDcENaLEVBQVllLElBQUlILEdBR2xCLE1BQU1JLEVBQWV4QixFQUFBeUIsUUFBUUMsTUFDN0IsR0FBSUYsSUFBaUJkLEVBQWVZLElBQUlFLEdBQWUsQ0FDckQsTUFBTUcsRUFBZSxLQUNuQixJQUFLSCxFQUFhSSxJQUdoQixPQUZBcEIsRUFBWXFCLE9BQU9GLFFBQ25CakIsRUFBZW1CLE9BQU9MLElBSXhCLEVBQUF4QixFQUFBOEIsYUFBWU4sRUFBWSxFQUcxQmhCLEVBQVllLElBQUlJLEdBQ2hCakIsRUFBZWEsSUFBSUMsRUFDckIsQ0FFQSxPQUFPTixFQUFNQyxFQUFJLEVBR25CWSxJQUFLLENBQUNiLEVBQU9DLEVBQWNhLEtBQ3pCbkIsSUFDQW9CLFFBQVFGLElBQUliLEVBQU9DLEVBQU1hLElBQ2xCLEdBR1RFLGVBQWdCLENBQUNoQixFQUFPQyxLQUN0Qk4sSUFDQW9CLFFBQVFDLGVBQWVoQixFQUFPQyxJQUN2QixLQUlYLFNBQVNnQixFQUFVQyxHQUNqQixVQUFXQyxLQUFPRCxFQUNoQnhCLEVBQVd5QixHQUFPOUIsR0FBQSxFQUFZTCxFQUFBb0MsWUFBV0YsRUFBU0MsSUFBUUQsRUFBU0MsR0FHckUsVUFBV0EsS0FBT3pCLEVBQ1Z5QixLQUFPRCxHQUNYSCxRQUFRQyxlQUFldEIsRUFBWXlCLEVBR3pDLENBRUEsU0FBU0UsRUFBU0gsSUFDWixFQUFDbEMsRUFBQXNDLFlBQVc1QixFQUFZd0IsS0FJNUJELEVBQVVDLEdBRVY1QixFQUFZaUMsUUFBU0MsR0FBZUEsS0FDdEMsQ0FFQSxTQUFTQyxFQUFlTixHQUN0QixNQUFPLElBQUlPLEtBQ1QsTUFBTUMsR0FBQSxFQUFlM0MsRUFBQTRDLG1CQUFrQmxDLEdBQ2pDbUMsRUFBUXpDLEVBQU8rQixHQUFLUSxLQUFpQkQsR0FFM0MsR0FBSUcsYUFBaUJDLFFBQ25CLE9BQU9ELEVBQ0pFLEtBQUssSUFBTVYsRUFBU00sSUFDcEJLLE1BQU9DLElBQ05DLFFBQVFELE1BQU0sa0JBQW1CQSxFQUFLLEdBSTVDWixFQUFTTSxFQUFZLENBRXpCLENBRUEsTUFBTVEsRUFBZ0QsQ0FBQyxFQUN2RCxVQUFXaEIsS0FBTy9CLEVBQVEsQ0FDeEIsR0FBMkIsbUJBQWhCQSxFQUFPK0IsR0FDaEIsTUFBTSxJQUFJdkIsTUFBTSxVQUFVdUIseUJBRTVCZ0IsRUFBWWhCLEdBQU9NLEVBQWVOLEVBQ3BDLENBRUEsTUFBTWlCLEVBQWMsSUFBSXRDLE1BQU1xQyxFQUFhLENBQ3pDcEMsSUFBSyxDQUFDWCxFQUFRYSxLQUNaLEtBQU1BLEtBQVFiLEdBQ1osTUFBTSxJQUFJUSxNQUFNLFVBQVVLLHFCQUU1QixPQUFPYixFQUFPYSxFQUFJLElBVXRCLE9BRkFnQixFQUFVdkIsR0FKVixXQUNFLE1BQU8sQ0FBQ0csRUFBWXVDLEVBQ3RCLENBS0YsQ0FHTyxTQUFTeEQsRUFDZE8sRUFDQUMsR0FFQSxPQUFPRixFQUFZQyxFQUFjQyxHQUFRLEVBQzNDLENBR08sU0FBU1QsRUFDZFEsRUFDQUMsR0FLQSxPQUhBOEMsUUFBUUcsS0FDTixtS0FFS25ELEVBQVlDLEVBQWNDLEdBQVEsRUFDM0MsQ0FHTyxTQUFTVixFQUFhNEQsR0FDM0IsTUFBTUMsRUFBWSxLQUNoQixJQUNFdEQsRUFBWXVELEtBQUtELEdBQ2pCRCxHQUNGLFNBQ0VyRCxFQUFZd0QsS0FDZCxHQUdGRixHQUNGLEMifQ==
@@ -0,0 +1,122 @@
1
+ // lib/pulse-store/index.ts
2
+ import { updateVnode, current } from "valyrian.js";
3
+ import { deepCloneUnfreeze, deepFreeze, hasChanged } from "valyrian.js/utils";
4
+ var effectStack = [];
5
+ function createStore(initialState, pulses, immutable = false) {
6
+ const subscribers = /* @__PURE__ */ new Set();
7
+ const vnodesToUpdate = /* @__PURE__ */ new WeakSet();
8
+ const localState = (typeof initialState === "function" ? initialState() : initialState) || {};
9
+ function isMutable() {
10
+ if (immutable) {
11
+ throw new Error("You need to call a pulse to modify the state");
12
+ }
13
+ }
14
+ const proxyState = new Proxy(localState, {
15
+ get: (state, prop) => {
16
+ const currentEffect = effectStack[effectStack.length - 1];
17
+ if (currentEffect && !subscribers.has(currentEffect)) {
18
+ subscribers.add(currentEffect);
19
+ }
20
+ const currentVnode = current.vnode;
21
+ if (currentVnode && !vnodesToUpdate.has(currentVnode)) {
22
+ const subscription = () => {
23
+ if (!currentVnode.dom) {
24
+ subscribers.delete(subscription);
25
+ vnodesToUpdate.delete(currentVnode);
26
+ return;
27
+ }
28
+ updateVnode(currentVnode);
29
+ };
30
+ subscribers.add(subscription);
31
+ vnodesToUpdate.add(currentVnode);
32
+ }
33
+ return state[prop];
34
+ },
35
+ // If the user tries to set directly it will throw an error
36
+ set: (state, prop, value) => {
37
+ isMutable();
38
+ Reflect.set(state, prop, value);
39
+ return true;
40
+ },
41
+ // If the user tries to delete directly it will throw an error
42
+ deleteProperty: (state, prop) => {
43
+ isMutable();
44
+ Reflect.deleteProperty(state, prop);
45
+ return true;
46
+ }
47
+ });
48
+ function syncState(newState) {
49
+ for (const key in newState) {
50
+ localState[key] = immutable ? deepFreeze(newState[key]) : newState[key];
51
+ }
52
+ for (const key in localState) {
53
+ if (!(key in newState)) {
54
+ Reflect.deleteProperty(localState, key);
55
+ }
56
+ }
57
+ }
58
+ function setState(newState) {
59
+ if (!hasChanged(localState, newState)) {
60
+ return;
61
+ }
62
+ syncState(newState);
63
+ subscribers.forEach((subscriber) => subscriber());
64
+ }
65
+ function getPulseMethod(key) {
66
+ return (...args) => {
67
+ const currentState = deepCloneUnfreeze(localState);
68
+ const pulse = pulses[key](currentState, ...args);
69
+ if (pulse instanceof Promise) {
70
+ return pulse.then(() => setState(currentState)).catch((error) => {
71
+ console.error("Error in pulse:", error);
72
+ });
73
+ }
74
+ setState(currentState);
75
+ };
76
+ }
77
+ const boundPulses = {};
78
+ for (const key in pulses) {
79
+ if (typeof pulses[key] !== "function") {
80
+ throw new Error(`Pulse '${key}' must be a function`);
81
+ }
82
+ boundPulses[key] = getPulseMethod(key);
83
+ }
84
+ const pulsesProxy = new Proxy(boundPulses, {
85
+ get: (pulses2, prop) => {
86
+ if (!(prop in pulses2)) {
87
+ throw new Error(`Pulse '${prop}' does not exist`);
88
+ }
89
+ return pulses2[prop];
90
+ }
91
+ });
92
+ function usePulseStore() {
93
+ return [proxyState, pulsesProxy];
94
+ }
95
+ syncState(localState);
96
+ return usePulseStore;
97
+ }
98
+ function createPulseStore(initialState, pulses) {
99
+ return createStore(initialState, pulses, true);
100
+ }
101
+ function createMutableStore(initialState, pulses) {
102
+ console.warn(
103
+ "Warning: You are working with a mutable state. This can lead to unpredictable behavior. All state changes made outside of a pulse will not trigger a re-render."
104
+ );
105
+ return createStore(initialState, pulses, false);
106
+ }
107
+ function createEffect(effect) {
108
+ const runEffect = () => {
109
+ try {
110
+ effectStack.push(runEffect);
111
+ effect();
112
+ } finally {
113
+ effectStack.pop();
114
+ }
115
+ };
116
+ runEffect();
117
+ }
118
+ export {
119
+ createEffect,
120
+ createMutableStore,
121
+ createPulseStore
122
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/pulse-store/index.ts"],
4
+ "sourcesContent": ["/* eslint-disable no-console */\nimport { updateVnode, Vnode, VnodeWithDom, current } from \"valyrian.js\";\nimport { deepCloneUnfreeze, deepFreeze, hasChanged } from \"valyrian.js/utils\";\n\ntype State = Record<string, any>;\n\n// An action or pulse type definition\n// eslint-disable-next-line no-unused-vars\nexport type Pulse<StateType> = (state: StateType, ...args: any[]) => void | Promise<void>;\n\n// A collection of pulses\nexport type Pulses<StateType> = {\n [key: string]: Pulse<StateType>;\n};\n\n// A proxy state\n// This is a state that is proxied to automatically subscribe to changes\n// And is used internally to update the vnode when the state changes\ntype ProxyState<StateType> = StateType & {\n [key: string]: any;\n};\n\n// The effect stack\nconst effectStack: Function[] = [];\n\ntype StorePulses<PulsesType> = {\n [K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R\n ? (...args: Args) => R\n : never;\n};\n\n// Creates the store\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction createStore<StateType extends State, PulsesType extends Pulses<StateType>>(\n initialState: StateType | (() => StateType) | null,\n pulses: PulsesType,\n immutable = false\n): () => [ProxyState<StateType>, StorePulses<PulsesType>] {\n const subscribers = new Set<Function>();\n const vnodesToUpdate = new WeakSet<Vnode>();\n\n // Initialize the localState for this store\n const localState: StateType =\n (typeof initialState === \"function\" ? initialState() : initialState) || ({} as StateType);\n\n function isMutable() {\n if (immutable) {\n throw new Error(\"You need to call a pulse to modify the state\");\n }\n }\n\n // We create a proxy for the state\n const proxyState = new Proxy(localState, {\n get: (state, prop: string) => {\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n\n const currentVnode = current.vnode as VnodeWithDom;\n if (currentVnode && !vnodesToUpdate.has(currentVnode)) {\n const subscription = () => {\n if (!currentVnode.dom) {\n subscribers.delete(subscription);\n vnodesToUpdate.delete(currentVnode);\n return;\n }\n\n updateVnode(currentVnode);\n };\n\n subscribers.add(subscription);\n vnodesToUpdate.add(currentVnode);\n }\n\n return state[prop];\n },\n // If the user tries to set directly it will throw an error\n set: (state, prop: string, value: any) => {\n isMutable();\n Reflect.set(state, prop, value);\n return true;\n },\n // If the user tries to delete directly it will throw an error\n deleteProperty: (state, prop: string) => {\n isMutable();\n Reflect.deleteProperty(state, prop);\n return true;\n }\n });\n\n function syncState(newState: StateType) {\n for (const key in newState) {\n localState[key] = immutable ? deepFreeze(newState[key]) : newState[key];\n }\n\n for (const key in localState) {\n if (!(key in newState)) {\n Reflect.deleteProperty(localState, key);\n }\n }\n }\n\n function setState(newState: StateType) {\n if (!hasChanged(localState, newState)) {\n return;\n }\n\n syncState(newState);\n\n subscribers.forEach((subscriber) => subscriber());\n }\n\n function getPulseMethod(key: string) {\n return (...args: any[]) => {\n const currentState = deepCloneUnfreeze(localState);\n const pulse = pulses[key](currentState, ...args);\n\n if (pulse instanceof Promise) {\n return pulse\n .then(() => setState(currentState))\n .catch((error) => {\n console.error(\"Error in pulse:\", error);\n });\n }\n\n setState(currentState);\n };\n }\n\n const boundPulses: Record<string, Pulse<StateType>> = {};\n for (const key in pulses) {\n if (typeof pulses[key] !== \"function\") {\n throw new Error(`Pulse '${key}' must be a function`);\n }\n boundPulses[key] = getPulseMethod(key);\n }\n\n const pulsesProxy = new Proxy(boundPulses, {\n get: (pulses, prop: string) => {\n if (!(prop in pulses)) {\n throw new Error(`Pulse '${prop}' does not exist`);\n }\n return pulses[prop];\n }\n });\n\n function usePulseStore(): [ProxyState<StateType>, StorePulses<PulsesType>] {\n return [proxyState, pulsesProxy as StorePulses<PulsesType>];\n }\n\n syncState(localState);\n\n return usePulseStore;\n}\n\n// Creates a pulse store with an immutable state by default\nexport function createPulseStore<StateType extends State, PulsesType extends Pulses<StateType>>(\n initialState: StateType,\n pulses: PulsesType\n): () => [ProxyState<StateType>, StorePulses<PulsesType>] {\n return createStore(initialState, pulses, true);\n}\n\n// Creates a mutable store, useful for performance, but not recommended\nexport function createMutableStore<StateType extends State, PulsesType extends Pulses<StateType>>(\n initialState: StateType,\n pulses: PulsesType\n): () => [ProxyState<StateType>, StorePulses<PulsesType>] {\n console.warn(\n \"Warning: You are working with a mutable state. This can lead to unpredictable behavior. All state changes made outside of a pulse will not trigger a re-render.\"\n );\n return createStore(initialState, pulses, false);\n}\n\n// Creates an effect\nexport function createEffect(effect: Function) {\n const runEffect = () => {\n try {\n effectStack.push(runEffect);\n effect();\n } finally {\n effectStack.pop();\n }\n };\n\n runEffect();\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["pulses"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  interface UrlOptions {
2
- base: string;
3
- node: string | null;
4
- api: string | null;
2
+ base?: string;
3
+ node?: string | null;
4
+ api?: string | null;
5
5
  }
6
6
  interface RequestOptions {
7
7
  allowedMethods?: string[];
@@ -19,17 +19,17 @@ interface SendOptions extends RequestOptionsWithUrls, RequestInit {
19
19
  resolveWithFullResponse?: boolean;
20
20
  }
21
21
  export interface RequestInterface {
22
- (method: string, url: string, data?: Record<string, any>, options?: Partial<SendOptions>): any | Response;
22
+ (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;
23
23
  new: (baseUrl: string, options?: RequestOptions) => RequestInterface;
24
24
  setOptions: (key: string, value: any) => void;
25
25
  getOptions: (key?: string) => RequestOptions | void;
26
- get: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
27
- post: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
28
- put: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
29
- patch: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
30
- delete: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
31
- head: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
32
- options: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;
26
+ get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
27
+ post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
28
+ put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
29
+ patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
30
+ delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
31
+ head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
32
+ options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;
33
33
  [key: string | number | symbol]: any;
34
34
  }
35
35
  export declare const request: RequestInterface;