frosty 0.0.116 → 0.0.117
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/_native.mjs +2 -2
- package/dist/dom.mjs +3 -3
- package/dist/index.js +8 -168
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -165
- package/dist/index.mjs.map +1 -1
- package/dist/internals/{renderer--MMBf_If.mjs → renderer-Be-LIw4p.mjs} +3 -3
- package/dist/internals/{renderer--MMBf_If.mjs.map → renderer-Be-LIw4p.mjs.map} +1 -1
- package/dist/internals/{renderer-CZSG1hY8.mjs → renderer-oGiv2WIb.mjs} +2 -2
- package/dist/internals/{renderer-CZSG1hY8.mjs.map → renderer-oGiv2WIb.mjs.map} +1 -1
- package/dist/internals/{state-DgSrjGGU.mjs → state-k40d_k34.mjs} +2 -2
- package/dist/internals/{state-DgSrjGGU.mjs.map → state-k40d_k34.mjs.map} +1 -1
- package/dist/internals/{sync-B7gLfyQK.js → sync-D4YtyMaB.js} +167 -1
- package/dist/internals/sync-D4YtyMaB.js.map +1 -0
- package/dist/internals/{sync-CeJllG9M.mjs → sync-DRp6Vg-9.mjs} +164 -3
- package/dist/internals/sync-DRp6Vg-9.mjs.map +1 -0
- package/dist/server-dom.mjs +3 -3
- package/dist/web.d.mts.map +1 -1
- package/dist/web.d.ts.map +1 -1
- package/dist/web.js +54 -7
- package/dist/web.js.map +1 -1
- package/dist/web.mjs +58 -11
- package/dist/web.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/internals/sync-B7gLfyQK.js.map +0 -1
- package/dist/internals/sync-CeJllG9M.mjs.map +0 -1
package/dist/web.mjs
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { r as reconciler,
|
|
2
|
-
import { _ as _DOMRenderer } from './internals/renderer
|
|
3
|
-
export { D as DOMNativeNode } from './internals/renderer
|
|
1
|
+
import { r as reconciler, u as uniqueId, d as EventEmitter } from './internals/state-k40d_k34.mjs';
|
|
2
|
+
import { _ as _DOMRenderer } from './internals/renderer-Be-LIw4p.mjs';
|
|
3
|
+
export { D as DOMNativeNode } from './internals/renderer-Be-LIw4p.mjs';
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
import 'myers.js';
|
|
6
|
-
import {
|
|
6
|
+
import { g as useRendererStorage, d as useSyncExternalStore, f as useMemo, b as useCallback, a as useEffect } from './internals/sync-DRp6Vg-9.mjs';
|
|
7
7
|
import 'nextick';
|
|
8
8
|
import 'postcss';
|
|
9
9
|
import 'postcss-js';
|
|
10
10
|
import 'postcss-nested';
|
|
11
11
|
import './internals/runtime-Dp4_akLf.mjs';
|
|
12
|
-
import './internals/renderer-
|
|
12
|
+
import './internals/renderer-oGiv2WIb.mjs';
|
|
13
|
+
import './jsx-runtime.mjs';
|
|
13
14
|
|
|
14
15
|
//
|
|
15
16
|
// document.ts
|
|
@@ -53,6 +54,52 @@ const useDocument = () => {
|
|
|
53
54
|
}
|
|
54
55
|
};
|
|
55
56
|
|
|
57
|
+
//
|
|
58
|
+
// utils.ts
|
|
59
|
+
//
|
|
60
|
+
// The MIT License
|
|
61
|
+
// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
|
|
62
|
+
//
|
|
63
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
64
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
65
|
+
// in the Software without restriction, including without limitation the rights
|
|
66
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
67
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
68
|
+
// furnished to do so, subject to the following conditions:
|
|
69
|
+
//
|
|
70
|
+
// The above copyright notice and this permission notice shall be included in
|
|
71
|
+
// all copies or substantial portions of the Software.
|
|
72
|
+
//
|
|
73
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
74
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
75
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
76
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
77
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
78
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
79
|
+
// THE SOFTWARE.
|
|
80
|
+
//
|
|
81
|
+
const sharedStorageKey = Symbol('sharedStorageKey');
|
|
82
|
+
const _useSharedSyncExternalStore = (sharedKey, subscribe, getSnapshot, getServerSnapshot) => {
|
|
83
|
+
const store = useRendererStorage(false);
|
|
84
|
+
const sharedStorage = store.get(sharedStorageKey) ?? new Map();
|
|
85
|
+
if (!store.has(sharedStorageKey)) {
|
|
86
|
+
store.set(sharedStorageKey, sharedStorage);
|
|
87
|
+
}
|
|
88
|
+
return useSyncExternalStore(subscribe, () => {
|
|
89
|
+
if (store.has(sharedKey))
|
|
90
|
+
return store.get(sharedKey);
|
|
91
|
+
const result = getSnapshot();
|
|
92
|
+
store.set(sharedKey, result);
|
|
93
|
+
return result;
|
|
94
|
+
}, getServerSnapshot && (() => {
|
|
95
|
+
if (store.has(sharedKey))
|
|
96
|
+
return store.get(sharedKey);
|
|
97
|
+
const result = getServerSnapshot();
|
|
98
|
+
store.set(sharedKey, result);
|
|
99
|
+
return result;
|
|
100
|
+
}));
|
|
101
|
+
};
|
|
102
|
+
|
|
56
103
|
//
|
|
57
104
|
// window.ts
|
|
58
105
|
//
|
|
@@ -136,7 +183,7 @@ const safeAreaInsets = (window) => {
|
|
|
136
183
|
*/
|
|
137
184
|
const useWindowMetrics = () => {
|
|
138
185
|
const window = useWindow();
|
|
139
|
-
return
|
|
186
|
+
return _useSharedSyncExternalStore('useWindowMetrics', (onStoreChange) => {
|
|
140
187
|
window.addEventListener('resize', onStoreChange);
|
|
141
188
|
return () => {
|
|
142
189
|
window.removeEventListener('resize', onStoreChange);
|
|
@@ -158,7 +205,7 @@ const useWindowMetrics = () => {
|
|
|
158
205
|
*/
|
|
159
206
|
const useVisualViewportMetrics = () => {
|
|
160
207
|
const { visualViewport } = useWindow();
|
|
161
|
-
return
|
|
208
|
+
return _useSharedSyncExternalStore('useVisualViewportMetrics', (onStoreChange) => {
|
|
162
209
|
visualViewport?.addEventListener('resize', onStoreChange);
|
|
163
210
|
return () => {
|
|
164
211
|
visualViewport?.removeEventListener('resize', onStoreChange);
|
|
@@ -177,7 +224,7 @@ const useVisualViewportMetrics = () => {
|
|
|
177
224
|
*/
|
|
178
225
|
const useWindowScroll = () => {
|
|
179
226
|
const window = useWindow();
|
|
180
|
-
return
|
|
227
|
+
return _useSharedSyncExternalStore('useWindowScroll', (onStoreChange) => {
|
|
181
228
|
window.addEventListener('scroll', onStoreChange);
|
|
182
229
|
return () => {
|
|
183
230
|
window.removeEventListener('scroll', onStoreChange);
|
|
@@ -199,7 +246,7 @@ const useColorScheme = () => {
|
|
|
199
246
|
if (!colorSchemeDarkCache.has(window))
|
|
200
247
|
colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));
|
|
201
248
|
const colorSchemeDark = colorSchemeDarkCache.get(window);
|
|
202
|
-
return
|
|
249
|
+
return _useSharedSyncExternalStore('useColorScheme', (onStoreChange) => {
|
|
203
250
|
colorSchemeDark?.addEventListener('change', onStoreChange);
|
|
204
251
|
return () => {
|
|
205
252
|
colorSchemeDark?.removeEventListener('change', onStoreChange);
|
|
@@ -480,7 +527,7 @@ const usePerformanceObserver = (callback, options) => {
|
|
|
480
527
|
*
|
|
481
528
|
* @returns A boolean indicating whether the browser is online.
|
|
482
529
|
*/
|
|
483
|
-
const useOnline = () =>
|
|
530
|
+
const useOnline = () => _useSharedSyncExternalStore('useOnline', (onStoreChange) => {
|
|
484
531
|
window.addEventListener('offline', onStoreChange);
|
|
485
532
|
window.addEventListener('online', onStoreChange);
|
|
486
533
|
return () => {
|
|
@@ -782,7 +829,7 @@ const useSessionStorage = (key, initialValue) => _useStorage(() => window.sessio
|
|
|
782
829
|
*/
|
|
783
830
|
const useVisibility = () => {
|
|
784
831
|
const document = useDocument();
|
|
785
|
-
return
|
|
832
|
+
return _useSharedSyncExternalStore('useVisibility', (onStoreChange) => {
|
|
786
833
|
document.addEventListener('visibilitychange', onStoreChange);
|
|
787
834
|
return () => {
|
|
788
835
|
document.removeEventListener('visibilitychange', onStoreChange);
|
package/dist/web.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.mjs","sources":["../../src/web/document.ts","../../src/web/window.ts","../../src/web/location.ts","../../src/web/observer.ts","../../src/web/online.ts","../../src/renderer/minify/decompress.ts","../../src/web/server.ts","../../src/web/storage.ts","../../src/web/visibility.ts"],"sourcesContent":["//\n// document.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\n/**\n * Hook to access the current document object in a web renderer.\n * \n * @returns The current document object.\n * @throws Error if used outside of a render function or with an unsupported renderer.\n */\nexport const useDocument = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useDocument must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.document;\n } else {\n throw Error('Unsupported renderer.');\n }\n}","//\n// window.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { uniqueId } from '../core/utils';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\n/**\n * Hook to access the current window object in a web renderer.\n * \n * @returns The current window object.\n * @throws Error if used outside of a render function or with an unsupported renderer.\n */\nexport const useWindow = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useWindow must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.window;\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n\nconst emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };\nconst safeAreaInsets = (window: ReturnType<typeof useWindow>) => {\n let support;\n if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {\n return emptyInsets;\n }\n if (window.CSS.supports('top: env(safe-area-inset-top)')) {\n support = 'env'\n } else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {\n support = 'constant'\n } else {\n return emptyInsets;\n }\n const id = uniqueId();\n const style = document.createElement('style');\n style.textContent = `:root {\n --${id}-top: ${support}(safe-area-inset-top);\n --${id}-left: ${support}(safe-area-inset-left);\n --${id}-right: ${support}(safe-area-inset-right);\n --${id}-bottom: ${support}(safe-area-inset-bottom);\n }`;\n document.head.appendChild(style);\n const computedStyle = getComputedStyle(document.documentElement);\n const insets = {\n top: computedStyle.getPropertyValue(`--${id}-top`),\n left: computedStyle.getPropertyValue(`--${id}-left`),\n right: computedStyle.getPropertyValue(`--${id}-right`),\n bottom: computedStyle.getPropertyValue(`--${id}-bottom`),\n };\n style.remove();\n return _.mapValues(insets, v => parseFloat(v));\n}\n\n/**\n * A hook that provides various metrics of the window object.\n * It listens to the 'resize' event to update the metrics.\n * \n * @returns An object containing safe area insets, device pixel ratio, outer and inner dimensions of the window.\n */\nexport const useWindowMetrics = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n };\n }, () => ({\n safeAreaInsets: safeAreaInsets(window),\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n }));\n}\n\n/** \n * A hook that provides metrics of the visual viewport.\n * It listens to the 'resize' event of the visual viewport to update the metrics.\n * \n * @returns An object containing width, height, and scale of the visual viewport.\n */\nexport const useVisualViewportMetrics = () => {\n const { visualViewport } = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n visualViewport?.addEventListener('resize', onStoreChange);\n return () => {\n visualViewport?.removeEventListener('resize', onStoreChange);\n };\n }, () => visualViewport && ({\n width: visualViewport.width,\n height: visualViewport.height,\n scale: visualViewport.scale,\n }));\n}\n\n/**\n * A hook that provides the current scroll position of the window.\n * It listens to the 'scroll' event to update the position.\n * \n * @returns An object containing scrollX and scrollY values.\n */\nexport const useWindowScroll = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('scroll', onStoreChange);\n };\n }, () => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n }));\n}\n\nconst colorSchemeDarkCache = new WeakMap<ReturnType<typeof useWindow>, MediaQueryList | undefined>();\n\n/**\n * A hook that detects the user's preferred color scheme (light or dark).\n * It listens to changes in the '(prefers-color-scheme: dark)' media query.\n * \n * @returns A string indicating the current color scheme: 'light' or 'dark'.\n */\nexport const useColorScheme = () => {\n const window = useWindow();\n if (!colorSchemeDarkCache.has(window)) colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));\n const colorSchemeDark = colorSchemeDarkCache.get(window);\n return useSyncExternalStore((onStoreChange) => {\n colorSchemeDark?.addEventListener('change', onStoreChange);\n return () => {\n colorSchemeDark?.removeEventListener('change', onStoreChange);\n };\n }, () => colorSchemeDark?.matches ? 'dark' : 'light');\n}\n","//\n// location.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useMemo } from '../core/hooks/memo';\nimport { useCallback } from '../core/hooks/callback';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { EventEmitter } from '../core/reconciler/events';\nimport { SetStateAction } from '../core/types/common';\nimport { useWindow } from './window';\n\nconst emitters = new WeakMap<Document, EventEmitter>();\nconst emitterFor = (document: Document) => {\n if (!emitters.has(document)) emitters.set(document, new EventEmitter());\n return emitters.get(document)!;\n}\n\n/**\n * A hook that provides the current browser location and methods to manipulate the browser history.\n *\n * @returns An object with the following properties and methods:\n * - `hash`: The fragment identifier of the URL.\n * - `host`: The hostname and port number.\n * - `hostname`: The domain name.\n * - `href`: The full URL.\n * - `origin`: The protocol, hostname, and port.\n * - `pathname`: The path of the URL.\n * - `port`: The port number.\n * - `protocol`: The protocol scheme.\n * - `search`: The query string.\n * - `state`: The current state object associated with the history entry.\n * - `back()`: Navigates to the previous entry in the history stack.\n * - `forward()`: Navigates to the next entry in the history stack.\n * - `pushState(data, url)`: Pushes a new entry onto the history stack.\n * - `replaceState(data, url)`: Replaces the current history entry.\n *\n * The hook subscribes to changes in the browser's history and location, causing components to re-render when navigation occurs.\n *\n * @example\n * const location = useLocation();\n * console.log(location.pathname); // e.g., \"/about\"\n * location.pushState({ some: 'state' }, '/new-path');\n */\nexport const useLocation = () => {\n const window = useWindow();\n const emitter = emitterFor(window.document);\n const result = (history?: History) => ({\n ..._.pick(window.document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),\n state: history?.state ?? null,\n back: () => {\n history?.back();\n },\n forward: () => {\n history?.forward();\n emitter.emit('change');\n },\n pushState: (data: any, url?: string | URL | null) => {\n history?.pushState(data, '', url);\n emitter.emit('change');\n },\n replaceState: (data: any, url?: string | URL | null) => {\n history?.replaceState(data, '', url);\n emitter.emit('change');\n },\n });\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('popstate', onStoreChange);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n event.remove();\n }\n }, () => result(window.history));\n}\n\n/**\n * A hook for reading and updating the URL's query string (search parameters).\n *\n * @returns A tuple:\n * - The first element is a `URLSearchParams` instance representing the current query string.\n * - The second element is a function to update the search parameters, which accepts any valid\n * `URLSearchParams` initializer (string, array, or object).\n *\n * Updating the search parameters will push a new history entry and update the URL in the address bar.\n *\n * @example\n * const [searchParams, setSearchParams] = useSearchParams();\n * const page = searchParams.get('page');\n * setSearchParams({ page: '2', filter: 'active' });\n */\nexport const useSearchParams = () => {\n const location = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n type URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];\n const setSearchParams = useCallback((\n dispatch: SetStateAction<URLSearchParamsInit, URLSearchParams>,\n config?: {\n replace?: boolean;\n },\n ) => {\n const params = _.isFunction(dispatch) ? dispatch(new URLSearchParams(location.search)) : dispatch;\n const newParams = new URLSearchParams(params);\n if (config?.replace === false) {\n location.pushState(location.state, `?${newParams.toString()}`);\n } else {\n location.replaceState(location.state, `?${newParams.toString()}`);\n }\n });\n return [searchParams, setSearchParams] as const;\n}\n","//\n// observer.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useEffect } from '../core/hooks/effect';\nimport { useCallback } from '../core/hooks/callback';\nimport { RefObject } from '../core/types/common';\n\ninterface _Observer<T> {\n observe(target: Element, options?: T): void;\n unobserve(target: Element): void;\n}\n\nconst createObserver = <E extends { target: Element; }, T>(\n constructor: new (callback: (entries: E[]) => void) => _Observer<T>\n) => {\n const listeners = new WeakMap<Element, ((entry: E) => void)[]>();\n const observer = new constructor((entries) => {\n for (const entry of entries) {\n for (const listener of listeners.get(entry.target) ?? []) {\n (async () => {\n try {\n await listener(entry);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n }\n });\n return {\n observe: (target: Element, callback: (entry: E) => void, options?: T) => {\n observer.observe(target, options);\n listeners.set(target, [...listeners.get(target) ?? [], callback]);\n },\n unobserve: (target: Element, callback: (entry: E) => void) => {\n const list = _.filter(listeners.get(target), x => x !== callback);\n listeners.set(target, list);\n if (_.isEmpty(list)) observer.unobserve?.(target);\n },\n };\n};\n\nconst observer = typeof window === 'undefined' ? undefined : {\n resize: createObserver(ResizeObserver),\n intersection: createObserver(IntersectionObserver),\n};\n\n/**\n * A hook that sets up a ResizeObserver on the given target element.\n * \n * @param target - The target element or a ref object containing the target element.\n * @param callback - The callback function to be called when the target element is resized.\n * @param options - Optional ResizeObserverOptions to configure the observer.\n */\nexport const useResizeObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.resize.observe(_target, _callback, options);\n return () => observer.resize.unobserve(_target, _callback);\n }, [target]);\n}\n\n/**\n * A hook that sets up an IntersectionObserver on the given target element.\n * \n * @param target - The target element or a ref object containing the target element.\n * @param callback - The callback function to be called when the target element's intersection changes.\n */\nexport const useIntersectionObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.intersection.observe(_target, _callback);\n return () => observer.intersection.unobserve(_target, _callback);\n }, [target]);\n}\n\n/**\n * A hook that sets up a MutationObserver on the given target node.\n * \n * @param target - The target node or a ref object containing the target node.\n * @param callback - The callback function to be called when mutations are observed.\n * @param options - Optional MutationObserverInit to configure the observer.\n */\nexport const useMutationObserver = (\n target: RefObject<Node | null | undefined> | Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (typeof window === 'undefined' || !_target) return;\n const observer = new MutationObserver(_callback);\n observer.observe(_target, options);\n return () => observer.disconnect();\n }, [target]);\n}\n\n/**\n * A hook that sets up a PerformanceObserver with the given callback and options.\n * \n * @param callback - The callback function to be called when performance entries are observed.\n * @param options - Optional PerformanceObserverInit to configure the observer.\n */\nexport const usePerformanceObserver = (\n callback: PerformanceObserverCallback,\n options?: PerformanceObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const observer = new PerformanceObserver(_callback);\n observer.observe(options);\n return () => observer.disconnect();\n }, []);\n}\n","//\n// online.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\n\n/**\n * A hook that returns the current online status of the browser.\n * It listens to the 'online' and 'offline' events to update the status.\n * \n * @returns A boolean indicating whether the browser is online.\n */\nexport const useOnline = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('offline', onStoreChange);\n window.addEventListener('online', onStoreChange);\n return () => {\n window.removeEventListener('offline', onStoreChange);\n window.removeEventListener('online', onStoreChange);\n };\n}, () => navigator.onLine, () => false);","//\n// decompress.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n/**\n * Decompresses a string that was compressed using the compress function\n * @param compressedInput - The compressed string to decompress\n * @returns The original uncompressed string\n */\nexport const decompress = (compressedInput: string): string => {\n // Algorithm state variables\n let previousEntry: string | undefined;\n let bitValue = 0;\n let bitIndex = 0;\n let currentEntry: string | number;\n let charCode = 0;\n\n // Dictionary for storing code->string mappings during decompression\n const dictionary: string[] = [];\n\n // Decompression parameters\n let resetCounter = 1;\n let nextCode = 3;\n let bitsPerCode = 1;\n\n // Output buffer - memory optimized with mutable string\n let result = \"\";\n\n // Bit reading state\n let bitBuffer = 0;\n let inputPosition = 0;\n\n /**\n * Reads the specified number of bits from the compressed input\n * @param numBits - Number of bits to read\n */\n function readBits(numBits: number): void {\n bitIndex = bitValue = 0;\n\n while (bitIndex < numBits) {\n // Refill bit buffer when needed\n if (bitBuffer < 2) {\n bitBuffer = 64;\n charCode = compressedInput.charCodeAt(inputPosition++);\n // Convert from custom alphabet back to numeric value\n charCode = charCode > 92 ? charCode - 59 : charCode - 58;\n }\n\n // Extract bits and build the value\n bitValue |= ((charCode & (bitBuffer /= 2)) > 0 ? 1 : 0) << bitIndex;\n ++bitIndex;\n }\n }\n\n // Main decompression loop\n while (true) {\n // Read the next code from input\n readBits(bitsPerCode + 1);\n\n // Check for end-of-stream marker\n if (bitValue === 2) {\n return result;\n }\n\n // Handle the current code\n currentEntry = bitValue;\n\n // Check if this is a character code (bit pattern check)\n if ((-2 & (currentEntry as number)) === 0) {\n // This is a raw character code, read the character value\n readBits(8 * bitValue + 8);\n\n // Create dictionary entry for this character\n currentEntry = nextCode++;\n dictionary[currentEntry] = String.fromCharCode(bitValue);\n\n // Update compression parameters\n if (--resetCounter === 0) {\n resetCounter = 2 << bitsPerCode++;\n }\n }\n\n // Get the string for this code (from dictionary or construct it)\n const entryString = dictionary[currentEntry as number] || (previousEntry ? previousEntry + previousEntry[0] : \"\");\n\n // Add to output using string concatenation\n result += entryString;\n\n // Update dictionary with new combination if we have a previous entry\n if (previousEntry) {\n dictionary[nextCode++] = previousEntry + entryString[0];\n\n // Update compression parameters\n if (--resetCounter === 0) {\n resetCounter = 2 << bitsPerCode++;\n }\n }\n\n // Remember this entry for next iteration\n previousEntry = entryString;\n }\n};\n","//\n// server.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\nimport { decompress } from '../renderer/minify/decompress';\n\nconst decodedSsrData = new WeakMap<Document, any>();\n\n/**\n * A hook to manage server-side resources in a web renderer.\n * It allows tracking and retrieving resources identified by a key.\n * \n * @param key - The unique key for the resource.\n * @param resource - An optional function that returns the resource string when called on the server side.\n * @returns The resource string if available, otherwise undefined.\n * @throws Error if used outside of a render function or with an unsupported renderer.\n */\nexport const useServerResource = (key: string, resource?: () => string): string | undefined => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useServerResource must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n if (state.renderer._server) {\n const data = resource?.();\n if (!_.isString(data)) throw Error('Invalid return type of resource');\n state.renderer._tracked_server_resource.set(key, data);\n return data;\n } else {\n const cached = decodedSsrData.get(state.renderer.document);\n if (!_.isNil(cached)) return cached[key];\n const ssrData = state.renderer.document.querySelector('script[data-frosty-ssr-data]');\n if (ssrData instanceof HTMLElement) {\n try {\n const decoded = JSON.parse(decompress(ssrData.innerText.trim()));\n decodedSsrData.set(state.renderer.document, decoded);\n return decoded[key];\n } catch (e) {\n console.error(e);\n decodedSsrData.set(state.renderer.document, {});\n }\n ssrData.remove();\n } else {\n decodedSsrData.set(state.renderer.document, {});\n }\n }\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useCallback } from '../core/hooks/callback';\nimport { SetStateAction } from '../core/types/common';\nimport { EventEmitter } from '../core/reconciler/events';\n\nconst emitters = new WeakMap<Storage, EventEmitter>();\nconst emitterFor = (storage: Storage) => {\n if (!emitters.has(storage)) emitters.set(storage, new EventEmitter());\n return emitters.get(storage)!;\n}\n\nconst _useStorage = (\n storage: () => Storage,\n key: string,\n initialValue?: string | null\n) => {\n const state = useSyncExternalStore((onStoreChange) => {\n const _storage = storage();\n const emitter = emitterFor(_storage);\n const callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('storage', callback);\n event.remove();\n }\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n const newValue = _.isFunction(v) ? v(state) : v;\n if (_.isNil(newValue)) {\n _storage.removeItem(key);\n } else {\n _storage.setItem(key, newValue);\n }\n const emitter = emitterFor(_storage);\n emitter.emit('change');\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue ?? null, setState] as const;\n}\n\n/**\n * A hook to manage a value in localStorage.\n * It provides a stateful value and a function to update it.\n * \n * @param key - The key in localStorage to manage.\n * @param initialValue - An optional initial value if the key does not exist in localStorage.\n * @returns A tuple containing the current value and a function to update it.\n */\nexport const useLocalStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.localStorage, key, initialValue);\n\n/** \n * A hook to manage a value in sessionStorage.\n * It provides a stateful value and a function to update it.\n * \n * @param key - The key in sessionStorage to manage.\n * @param initialValue - An optional initial value if the key does not exist in sessionStorage.\n * @returns A tuple containing the current value and a function to update it.\n */\nexport const useSessionStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.sessionStorage, key, initialValue);\n","//\n// visibility.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useDocument } from './document';\n\n/**\n * A hook to get the current visibility state of the document.\n * It listens to the 'visibilitychange' event to update the state.\n * \n * @returns A string indicating the current visibility state: 'active', 'inactive', 'background', or 'unknown'.\n */\nexport const useVisibility = () => {\n const document = useDocument();\n return useSyncExternalStore((onStoreChange) => {\n document.addEventListener('visibilitychange', onStoreChange);\n return () => {\n document.removeEventListener('visibilitychange', onStoreChange);\n }\n }, () => {\n if (document.hasFocus()) {\n return 'active' as const;\n } else if (document.visibilityState === 'visible') {\n return 'inactive' as const;\n } else {\n return 'background' as const;\n }\n }, () => 'unknown' as const);\n}\n"],"names":["emitters","emitterFor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web.mjs","sources":["../../src/web/document.ts","../../src/web/utils.ts","../../src/web/window.ts","../../src/web/location.ts","../../src/web/observer.ts","../../src/web/online.ts","../../src/renderer/minify/decompress.ts","../../src/web/server.ts","../../src/web/storage.ts","../../src/web/visibility.ts"],"sourcesContent":["//\n// document.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\n/**\n * Hook to access the current document object in a web renderer.\n * \n * @returns The current document object.\n * @throws Error if used outside of a render function or with an unsupported renderer.\n */\nexport const useDocument = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useDocument must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.document;\n } else {\n throw Error('Unsupported renderer.');\n }\n}","//\n// utils.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { useRendererStorage, useSyncExternalStore } from '../core/hooks';\n\nconst sharedStorageKey = Symbol('sharedStorageKey');\n\nexport const _useSharedSyncExternalStore = <Snapshot>(\n sharedKey: string,\n subscribe: (\n onStoreChange: () => void,\n signal: AbortSignal,\n ) => Awaitable<void | (() => Awaitable<void>)>,\n getSnapshot: () => Snapshot,\n getServerSnapshot?: () => Snapshot,\n) => {\n const store = useRendererStorage(false);\n const sharedStorage = store.get(sharedStorageKey) ?? new Map<string, Snapshot>();\n if (!store.has(sharedStorageKey)) {\n store.set(sharedStorageKey, sharedStorage);\n }\n return useSyncExternalStore(\n subscribe,\n (): Snapshot => {\n if (store.has(sharedKey))\n return store.get(sharedKey);\n const result = getSnapshot();\n store.set(sharedKey, result);\n return result;\n },\n getServerSnapshot && ((): Snapshot => {\n if (store.has(sharedKey))\n return store.get(sharedKey);\n const result = getServerSnapshot();\n store.set(sharedKey, result);\n return result;\n }),\n );\n};","//\n// window.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { uniqueId } from '../core/utils';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\nimport { _useSharedSyncExternalStore } from './utils';\n\n/**\n * Hook to access the current window object in a web renderer.\n * \n * @returns The current window object.\n * @throws Error if used outside of a render function or with an unsupported renderer.\n */\nexport const useWindow = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useWindow must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.window;\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n\nconst emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };\nconst safeAreaInsets = (window: ReturnType<typeof useWindow>) => {\n let support;\n if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {\n return emptyInsets;\n }\n if (window.CSS.supports('top: env(safe-area-inset-top)')) {\n support = 'env'\n } else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {\n support = 'constant'\n } else {\n return emptyInsets;\n }\n const id = uniqueId();\n const style = document.createElement('style');\n style.textContent = `:root {\n --${id}-top: ${support}(safe-area-inset-top);\n --${id}-left: ${support}(safe-area-inset-left);\n --${id}-right: ${support}(safe-area-inset-right);\n --${id}-bottom: ${support}(safe-area-inset-bottom);\n }`;\n document.head.appendChild(style);\n const computedStyle = getComputedStyle(document.documentElement);\n const insets = {\n top: computedStyle.getPropertyValue(`--${id}-top`),\n left: computedStyle.getPropertyValue(`--${id}-left`),\n right: computedStyle.getPropertyValue(`--${id}-right`),\n bottom: computedStyle.getPropertyValue(`--${id}-bottom`),\n };\n style.remove();\n return _.mapValues(insets, v => parseFloat(v));\n}\n\n/**\n * A hook that provides various metrics of the window object.\n * It listens to the 'resize' event to update the metrics.\n * \n * @returns An object containing safe area insets, device pixel ratio, outer and inner dimensions of the window.\n */\nexport const useWindowMetrics = () => {\n const window = useWindow();\n return _useSharedSyncExternalStore(\n 'useWindowMetrics',\n (onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n };\n },\n () => ({\n safeAreaInsets: safeAreaInsets(window),\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n })\n );\n};\n\n/** \n * A hook that provides metrics of the visual viewport.\n * It listens to the 'resize' event of the visual viewport to update the metrics.\n * \n * @returns An object containing width, height, and scale of the visual viewport.\n */\nexport const useVisualViewportMetrics = () => {\n const { visualViewport } = useWindow();\n return _useSharedSyncExternalStore(\n 'useVisualViewportMetrics',\n (onStoreChange) => {\n visualViewport?.addEventListener('resize', onStoreChange);\n return () => {\n visualViewport?.removeEventListener('resize', onStoreChange);\n };\n }, () => visualViewport && ({\n width: visualViewport.width,\n height: visualViewport.height,\n scale: visualViewport.scale,\n })\n );\n};\n\n/**\n * A hook that provides the current scroll position of the window.\n * It listens to the 'scroll' event to update the position.\n * \n * @returns An object containing scrollX and scrollY values.\n */\nexport const useWindowScroll = () => {\n const window = useWindow();\n return _useSharedSyncExternalStore(\n 'useWindowScroll',\n (onStoreChange) => {\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('scroll', onStoreChange);\n };\n }, () => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n })\n );\n};\n\nconst colorSchemeDarkCache = new WeakMap<ReturnType<typeof useWindow>, MediaQueryList | undefined>();\n\n/**\n * A hook that detects the user's preferred color scheme (light or dark).\n * It listens to changes in the '(prefers-color-scheme: dark)' media query.\n * \n * @returns A string indicating the current color scheme: 'light' or 'dark'.\n */\nexport const useColorScheme = () => {\n const window = useWindow();\n if (!colorSchemeDarkCache.has(window)) colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));\n const colorSchemeDark = colorSchemeDarkCache.get(window);\n return _useSharedSyncExternalStore(\n 'useColorScheme',\n (onStoreChange) => {\n colorSchemeDark?.addEventListener('change', onStoreChange);\n return () => {\n colorSchemeDark?.removeEventListener('change', onStoreChange);\n };\n }, () => colorSchemeDark?.matches ? 'dark' : 'light'\n );\n};\n","//\n// location.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useMemo } from '../core/hooks/memo';\nimport { useCallback } from '../core/hooks/callback';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { EventEmitter } from '../core/reconciler/events';\nimport { SetStateAction } from '../core/types/common';\nimport { useWindow } from './window';\n\nconst emitters = new WeakMap<Document, EventEmitter>();\nconst emitterFor = (document: Document) => {\n if (!emitters.has(document)) emitters.set(document, new EventEmitter());\n return emitters.get(document)!;\n}\n\n/**\n * A hook that provides the current browser location and methods to manipulate the browser history.\n *\n * @returns An object with the following properties and methods:\n * - `hash`: The fragment identifier of the URL.\n * - `host`: The hostname and port number.\n * - `hostname`: The domain name.\n * - `href`: The full URL.\n * - `origin`: The protocol, hostname, and port.\n * - `pathname`: The path of the URL.\n * - `port`: The port number.\n * - `protocol`: The protocol scheme.\n * - `search`: The query string.\n * - `state`: The current state object associated with the history entry.\n * - `back()`: Navigates to the previous entry in the history stack.\n * - `forward()`: Navigates to the next entry in the history stack.\n * - `pushState(data, url)`: Pushes a new entry onto the history stack.\n * - `replaceState(data, url)`: Replaces the current history entry.\n *\n * The hook subscribes to changes in the browser's history and location, causing components to re-render when navigation occurs.\n *\n * @example\n * const location = useLocation();\n * console.log(location.pathname); // e.g., \"/about\"\n * location.pushState({ some: 'state' }, '/new-path');\n */\nexport const useLocation = () => {\n const window = useWindow();\n const emitter = emitterFor(window.document);\n const result = (history?: History) => ({\n ..._.pick(window.document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),\n state: history?.state ?? null,\n back: () => {\n history?.back();\n },\n forward: () => {\n history?.forward();\n emitter.emit('change');\n },\n pushState: (data: any, url?: string | URL | null) => {\n history?.pushState(data, '', url);\n emitter.emit('change');\n },\n replaceState: (data: any, url?: string | URL | null) => {\n history?.replaceState(data, '', url);\n emitter.emit('change');\n },\n });\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('popstate', onStoreChange);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n event.remove();\n }\n }, () => result(window.history));\n}\n\n/**\n * A hook for reading and updating the URL's query string (search parameters).\n *\n * @returns A tuple:\n * - The first element is a `URLSearchParams` instance representing the current query string.\n * - The second element is a function to update the search parameters, which accepts any valid\n * `URLSearchParams` initializer (string, array, or object).\n *\n * Updating the search parameters will push a new history entry and update the URL in the address bar.\n *\n * @example\n * const [searchParams, setSearchParams] = useSearchParams();\n * const page = searchParams.get('page');\n * setSearchParams({ page: '2', filter: 'active' });\n */\nexport const useSearchParams = () => {\n const location = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n type URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];\n const setSearchParams = useCallback((\n dispatch: SetStateAction<URLSearchParamsInit, URLSearchParams>,\n config?: {\n replace?: boolean;\n },\n ) => {\n const params = _.isFunction(dispatch) ? dispatch(new URLSearchParams(location.search)) : dispatch;\n const newParams = new URLSearchParams(params);\n if (config?.replace === false) {\n location.pushState(location.state, `?${newParams.toString()}`);\n } else {\n location.replaceState(location.state, `?${newParams.toString()}`);\n }\n });\n return [searchParams, setSearchParams] as const;\n}\n","//\n// observer.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useEffect } from '../core/hooks/effect';\nimport { useCallback } from '../core/hooks/callback';\nimport { RefObject } from '../core/types/common';\n\ninterface _Observer<T> {\n observe(target: Element, options?: T): void;\n unobserve(target: Element): void;\n}\n\nconst createObserver = <E extends { target: Element; }, T>(\n constructor: new (callback: (entries: E[]) => void) => _Observer<T>\n) => {\n const listeners = new WeakMap<Element, ((entry: E) => void)[]>();\n const observer = new constructor((entries) => {\n for (const entry of entries) {\n for (const listener of listeners.get(entry.target) ?? []) {\n (async () => {\n try {\n await listener(entry);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n }\n });\n return {\n observe: (target: Element, callback: (entry: E) => void, options?: T) => {\n observer.observe(target, options);\n listeners.set(target, [...listeners.get(target) ?? [], callback]);\n },\n unobserve: (target: Element, callback: (entry: E) => void) => {\n const list = _.filter(listeners.get(target), x => x !== callback);\n listeners.set(target, list);\n if (_.isEmpty(list)) observer.unobserve?.(target);\n },\n };\n};\n\nconst observer = typeof window === 'undefined' ? undefined : {\n resize: createObserver(ResizeObserver),\n intersection: createObserver(IntersectionObserver),\n};\n\n/**\n * A hook that sets up a ResizeObserver on the given target element.\n * \n * @param target - The target element or a ref object containing the target element.\n * @param callback - The callback function to be called when the target element is resized.\n * @param options - Optional ResizeObserverOptions to configure the observer.\n */\nexport const useResizeObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.resize.observe(_target, _callback, options);\n return () => observer.resize.unobserve(_target, _callback);\n }, [target]);\n}\n\n/**\n * A hook that sets up an IntersectionObserver on the given target element.\n * \n * @param target - The target element or a ref object containing the target element.\n * @param callback - The callback function to be called when the target element's intersection changes.\n */\nexport const useIntersectionObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.intersection.observe(_target, _callback);\n return () => observer.intersection.unobserve(_target, _callback);\n }, [target]);\n}\n\n/**\n * A hook that sets up a MutationObserver on the given target node.\n * \n * @param target - The target node or a ref object containing the target node.\n * @param callback - The callback function to be called when mutations are observed.\n * @param options - Optional MutationObserverInit to configure the observer.\n */\nexport const useMutationObserver = (\n target: RefObject<Node | null | undefined> | Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (typeof window === 'undefined' || !_target) return;\n const observer = new MutationObserver(_callback);\n observer.observe(_target, options);\n return () => observer.disconnect();\n }, [target]);\n}\n\n/**\n * A hook that sets up a PerformanceObserver with the given callback and options.\n * \n * @param callback - The callback function to be called when performance entries are observed.\n * @param options - Optional PerformanceObserverInit to configure the observer.\n */\nexport const usePerformanceObserver = (\n callback: PerformanceObserverCallback,\n options?: PerformanceObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const observer = new PerformanceObserver(_callback);\n observer.observe(options);\n return () => observer.disconnect();\n }, []);\n}\n","//\n// online.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _useSharedSyncExternalStore } from './utils';\n\n/**\n * A hook that returns the current online status of the browser.\n * It listens to the 'online' and 'offline' events to update the status.\n * \n * @returns A boolean indicating whether the browser is online.\n */\nexport const useOnline = () => _useSharedSyncExternalStore(\n 'useOnline',\n (onStoreChange) => {\n window.addEventListener('offline', onStoreChange);\n window.addEventListener('online', onStoreChange);\n return () => {\n window.removeEventListener('offline', onStoreChange);\n window.removeEventListener('online', onStoreChange);\n };\n }, () => navigator.onLine, () => false\n);","//\n// decompress.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n/**\n * Decompresses a string that was compressed using the compress function\n * @param compressedInput - The compressed string to decompress\n * @returns The original uncompressed string\n */\nexport const decompress = (compressedInput: string): string => {\n // Algorithm state variables\n let previousEntry: string | undefined;\n let bitValue = 0;\n let bitIndex = 0;\n let currentEntry: string | number;\n let charCode = 0;\n\n // Dictionary for storing code->string mappings during decompression\n const dictionary: string[] = [];\n\n // Decompression parameters\n let resetCounter = 1;\n let nextCode = 3;\n let bitsPerCode = 1;\n\n // Output buffer - memory optimized with mutable string\n let result = \"\";\n\n // Bit reading state\n let bitBuffer = 0;\n let inputPosition = 0;\n\n /**\n * Reads the specified number of bits from the compressed input\n * @param numBits - Number of bits to read\n */\n function readBits(numBits: number): void {\n bitIndex = bitValue = 0;\n\n while (bitIndex < numBits) {\n // Refill bit buffer when needed\n if (bitBuffer < 2) {\n bitBuffer = 64;\n charCode = compressedInput.charCodeAt(inputPosition++);\n // Convert from custom alphabet back to numeric value\n charCode = charCode > 92 ? charCode - 59 : charCode - 58;\n }\n\n // Extract bits and build the value\n bitValue |= ((charCode & (bitBuffer /= 2)) > 0 ? 1 : 0) << bitIndex;\n ++bitIndex;\n }\n }\n\n // Main decompression loop\n while (true) {\n // Read the next code from input\n readBits(bitsPerCode + 1);\n\n // Check for end-of-stream marker\n if (bitValue === 2) {\n return result;\n }\n\n // Handle the current code\n currentEntry = bitValue;\n\n // Check if this is a character code (bit pattern check)\n if ((-2 & (currentEntry as number)) === 0) {\n // This is a raw character code, read the character value\n readBits(8 * bitValue + 8);\n\n // Create dictionary entry for this character\n currentEntry = nextCode++;\n dictionary[currentEntry] = String.fromCharCode(bitValue);\n\n // Update compression parameters\n if (--resetCounter === 0) {\n resetCounter = 2 << bitsPerCode++;\n }\n }\n\n // Get the string for this code (from dictionary or construct it)\n const entryString = dictionary[currentEntry as number] || (previousEntry ? previousEntry + previousEntry[0] : \"\");\n\n // Add to output using string concatenation\n result += entryString;\n\n // Update dictionary with new combination if we have a previous entry\n if (previousEntry) {\n dictionary[nextCode++] = previousEntry + entryString[0];\n\n // Update compression parameters\n if (--resetCounter === 0) {\n resetCounter = 2 << bitsPerCode++;\n }\n }\n\n // Remember this entry for next iteration\n previousEntry = entryString;\n }\n};\n","//\n// server.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\nimport { decompress } from '../renderer/minify/decompress';\n\nconst decodedSsrData = new WeakMap<Document, any>();\n\n/**\n * A hook to manage server-side resources in a web renderer.\n * It allows tracking and retrieving resources identified by a key.\n * \n * @param key - The unique key for the resource.\n * @param resource - An optional function that returns the resource string when called on the server side.\n * @returns The resource string if available, otherwise undefined.\n * @throws Error if used outside of a render function or with an unsupported renderer.\n */\nexport const useServerResource = (key: string, resource?: () => string): string | undefined => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useServerResource must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n if (state.renderer._server) {\n const data = resource?.();\n if (!_.isString(data)) throw Error('Invalid return type of resource');\n state.renderer._tracked_server_resource.set(key, data);\n return data;\n } else {\n const cached = decodedSsrData.get(state.renderer.document);\n if (!_.isNil(cached)) return cached[key];\n const ssrData = state.renderer.document.querySelector('script[data-frosty-ssr-data]');\n if (ssrData instanceof HTMLElement) {\n try {\n const decoded = JSON.parse(decompress(ssrData.innerText.trim()));\n decodedSsrData.set(state.renderer.document, decoded);\n return decoded[key];\n } catch (e) {\n console.error(e);\n decodedSsrData.set(state.renderer.document, {});\n }\n ssrData.remove();\n } else {\n decodedSsrData.set(state.renderer.document, {});\n }\n }\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useCallback } from '../core/hooks/callback';\nimport { SetStateAction } from '../core/types/common';\nimport { EventEmitter } from '../core/reconciler/events';\n\nconst emitters = new WeakMap<Storage, EventEmitter>();\nconst emitterFor = (storage: Storage) => {\n if (!emitters.has(storage)) emitters.set(storage, new EventEmitter());\n return emitters.get(storage)!;\n}\n\nconst _useStorage = (\n storage: () => Storage,\n key: string,\n initialValue?: string | null\n) => {\n const state = useSyncExternalStore((onStoreChange) => {\n const _storage = storage();\n const emitter = emitterFor(_storage);\n const callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('storage', callback);\n event.remove();\n }\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n const newValue = _.isFunction(v) ? v(state) : v;\n if (_.isNil(newValue)) {\n _storage.removeItem(key);\n } else {\n _storage.setItem(key, newValue);\n }\n const emitter = emitterFor(_storage);\n emitter.emit('change');\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue ?? null, setState] as const;\n}\n\n/**\n * A hook to manage a value in localStorage.\n * It provides a stateful value and a function to update it.\n * \n * @param key - The key in localStorage to manage.\n * @param initialValue - An optional initial value if the key does not exist in localStorage.\n * @returns A tuple containing the current value and a function to update it.\n */\nexport const useLocalStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.localStorage, key, initialValue);\n\n/** \n * A hook to manage a value in sessionStorage.\n * It provides a stateful value and a function to update it.\n * \n * @param key - The key in sessionStorage to manage.\n * @param initialValue - An optional initial value if the key does not exist in sessionStorage.\n * @returns A tuple containing the current value and a function to update it.\n */\nexport const useSessionStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.sessionStorage, key, initialValue);\n","//\n// visibility.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useDocument } from './document';\nimport { _useSharedSyncExternalStore } from './utils';\n\n/**\n * A hook to get the current visibility state of the document.\n * It listens to the 'visibilitychange' event to update the state.\n * \n * @returns A string indicating the current visibility state: 'active', 'inactive', 'background', or 'unknown'.\n */\nexport const useVisibility = () => {\n const document = useDocument();\n return _useSharedSyncExternalStore(\n 'useVisibility',\n (onStoreChange) => {\n document.addEventListener('visibilitychange', onStoreChange);\n return () => {\n document.removeEventListener('visibilitychange', onStoreChange);\n }\n },\n () => {\n if (document.hasFocus()) {\n return 'active' as const;\n } else if (document.visibilityState === 'visible') {\n return 'inactive' as const;\n } else {\n return 'background' as const;\n }\n }, () => 'unknown' as const\n );\n}\n"],"names":["emitters","emitterFor"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-B7gLfyQK.js","sources":["../../../src/core/reconciler/hooks.ts","../../../src/core/hooks/effect.ts","../../../src/core/hooks/callback.ts","../../../src/core/hooks/memo.ts","../../../src/core/hooks/sync.ts"],"sourcesContent":["//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from './state';\nimport { equalDeps } from './utils';\n\nconst _useHookState = (hook: string) => {\n const state = reconciler.currentHookState;\n if (!state) throw Error(`${hook} must be used within a render function.`);\n const { prevState, state: newState } = state;\n if (prevState && prevState[newState.length]?.hook !== hook) {\n console.warn([\n `Hook \"${hook}\" is called conditionally.`,\n 'Hooks must be called in the exact same order in every component render.',\n 'Did you accidentally call a hook after an early return?'\n ].join(' '));\n }\n return state;\n};\n\nexport const _useEffect = (\n hook: string,\n effect: (state: ReturnType<typeof _useHookState>) => () => void,\n deps?: any\n) => {\n const state = _useHookState(hook);\n const { state: newState } = state;\n newState.push({\n mount: () => effect(state),\n deps,\n hook,\n });\n};\n\nexport const _useMemo = <T>(\n hook: string,\n factory: (state: ReturnType<typeof _useHookState>) => T,\n deps?: any\n): T => {\n const state = _useHookState(hook);\n const { prevState, state: newState } = state;\n const idx = newState.length;\n const changed = prevState?.[idx]?.hook !== hook || !equalDeps(prevState[idx].deps, deps);\n const data = changed ? factory(state) : prevState[idx].data;\n newState.push({\n deps,\n hook,\n data\n });\n return data;\n};\n","//\n// effect.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { _useEffect } from '../reconciler/hooks';\n\n/**\n * A hook that manages side effects with support for an `AbortSignal`.\n * It ensures proper cleanup logic and handles asynchronous operations effectively.\n *\n * @param effect - \n * A function that receives an `AbortSignal` and performs side effects. \n * It can optionally return a cleanup function or a promise that resolves to a cleanup function.\n *\n * @param deps - \n * An optional dependencies that determines when the effect should be re-executed.\n *\n * @example\n * useEffect((signal) => {\n * fetch('/api/data', { signal })\n * .then(response => response.json())\n * .then(data => console.log(data))\n * .catch(err => {\n * if (err.name === 'AbortError') {\n * console.log('Fetch aborted');\n * } else {\n * console.error(err);\n * }\n * });\n * \n * return () => {\n * console.log('Cleanup logic here');\n * };\n * }, []);\n */\nexport const useEffect = (\n effect: (\n signal: AbortSignal,\n ) => Awaitable<void | (() => Awaitable<void>)>,\n deps?: any,\n) => _useEffect('useEffect', () => {\n const abort = new AbortController();\n try {\n const destructor = effect(abort.signal);\n return () => {\n abort.abort();\n (async () => {\n try {\n const _destructor = await destructor;\n if (_.isFunction(_destructor)) _destructor();\n } catch (e) {\n console.error(e);\n }\n })();\n };\n } catch (e) {\n console.error(e);\n return () => abort.abort();\n }\n}, deps);","//\n// memo.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _useMemo } from '../reconciler/hooks';\n\n/**\n * A hook that memoizes a callback function, ensuring that it only changes\n * if its dependencies change. This is useful for optimizing performance by preventing\n * unnecessary re-creations of functions.\n *\n * @template T - The type of the callback function.\n * @param callback - The callback function to be memoized.\n * @param deps - An optional dependencies. If provided, the callback\n * will only be updated when one of these dependencies changes.\n * If not provided, the callback will remain stable.\n * @returns - A stable version of the callback function that will not change unless\n * its dependencies change.\n *\n * @example\n * const memoizedCallback = useCallback(() => {\n * console.log('This function is memoized!');\n * }, [dependency]);\n */\n\nexport function useCallback<T extends (...args: any) => any>(\n callback: T,\n deps?: any\n): T;\n\nexport function useCallback<T extends ((...args: any) => any) | _.Falsey>(\n callback: T,\n deps?: any\n): T;\n\nexport function useCallback<T extends ((...args: any) => any) | _.Falsey>(\n callback: T,\n deps?: any\n): T {\n if (!_.isUndefined(deps)) return _useMemo('useCallback', () => callback, deps);\n const store = _useMemo('useCallback', () => {\n const store = {\n current: callback,\n stable: function (this: any, ...args: any) {\n if (_.isFunction(store.current))\n return store.current.call(this, ...args);\n },\n };\n return store;\n }, null);\n if (_.isFunction(callback)) store.current = callback;\n return callback && (store.stable as T);\n}\n","//\n// memo.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _useMemo } from '../reconciler/hooks';\n\n/**\n * A utility function that memoizes the result of a factory function.\n * \n * @template T The type of the value returned by the factory function.\n * @param factory A function that produces a value to be memoized.\n * @param deps An optional dependency array. The memoized value is recalculated \n * only when the dependencies change.\n * @returns The memoized value produced by the factory function.\n */\nexport const useMemo = <T>(\n factory: () => T,\n deps?: any,\n) => _useMemo('useMemo', () => factory(), deps);\n","//\n// sync.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { _useEffect } from '../reconciler/hooks';\nimport { reconciler } from '../reconciler/state';\n\n/**\n * A hook utility for synchronizing with an external store.\n *\n * @template Snapshot - The type of the snapshot returned by the store.\n * @param subscribe - A function that sets up a subscription to the external store.\n * - `onStoreChange`: A callback to invoke when the store changes.\n * - `signal`: An `AbortSignal` to handle cleanup when the subscription is no longer needed.\n * - Returns an optional cleanup function or a promise resolving to one.\n * @param getSnapshot - A function that retrieves the current snapshot of the store.\n * @param getServerSnapshot - (Optional) A function that retrieves the snapshot of the store\n * in a server environment.\n * @returns The current snapshot of the store.\n *\n * @throws Will throw an error if used outside of a valid render context.\n */\nexport const useSyncExternalStore = <Snapshot>(\n subscribe: (\n onStoreChange: () => void,\n signal: AbortSignal,\n ) => Awaitable<void | (() => Awaitable<void>)>,\n getSnapshot: () => Snapshot,\n getServerSnapshot?: () => Snapshot,\n) => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useSyncExternalStore must be used within a render function.');\n _useEffect('useSyncExternalStore', ({ node }) => {\n const abort = new AbortController();\n try {\n const destructor = subscribe(() => { node?._setDirty(); }, abort.signal);\n return () => {\n abort.abort();\n (async () => {\n try {\n const _destructor = await destructor;\n if (_.isFunction(_destructor)) _destructor();\n } catch (e) {\n console.error(e);\n }\n })();\n };\n } catch (e) {\n console.error(e);\n return () => abort.abort();\n }\n }, null);\n if (getServerSnapshot && state.renderer._server) {\n return getServerSnapshot();\n }\n return getSnapshot();\n};"],"names":["state","reconciler","equalDeps"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-CeJllG9M.mjs","sources":["../../../src/core/reconciler/hooks.ts","../../../src/core/hooks/effect.ts","../../../src/core/hooks/callback.ts","../../../src/core/hooks/memo.ts","../../../src/core/hooks/sync.ts"],"sourcesContent":["//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from './state';\nimport { equalDeps } from './utils';\n\nconst _useHookState = (hook: string) => {\n const state = reconciler.currentHookState;\n if (!state) throw Error(`${hook} must be used within a render function.`);\n const { prevState, state: newState } = state;\n if (prevState && prevState[newState.length]?.hook !== hook) {\n console.warn([\n `Hook \"${hook}\" is called conditionally.`,\n 'Hooks must be called in the exact same order in every component render.',\n 'Did you accidentally call a hook after an early return?'\n ].join(' '));\n }\n return state;\n};\n\nexport const _useEffect = (\n hook: string,\n effect: (state: ReturnType<typeof _useHookState>) => () => void,\n deps?: any\n) => {\n const state = _useHookState(hook);\n const { state: newState } = state;\n newState.push({\n mount: () => effect(state),\n deps,\n hook,\n });\n};\n\nexport const _useMemo = <T>(\n hook: string,\n factory: (state: ReturnType<typeof _useHookState>) => T,\n deps?: any\n): T => {\n const state = _useHookState(hook);\n const { prevState, state: newState } = state;\n const idx = newState.length;\n const changed = prevState?.[idx]?.hook !== hook || !equalDeps(prevState[idx].deps, deps);\n const data = changed ? factory(state) : prevState[idx].data;\n newState.push({\n deps,\n hook,\n data\n });\n return data;\n};\n","//\n// effect.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { _useEffect } from '../reconciler/hooks';\n\n/**\n * A hook that manages side effects with support for an `AbortSignal`.\n * It ensures proper cleanup logic and handles asynchronous operations effectively.\n *\n * @param effect - \n * A function that receives an `AbortSignal` and performs side effects. \n * It can optionally return a cleanup function or a promise that resolves to a cleanup function.\n *\n * @param deps - \n * An optional dependencies that determines when the effect should be re-executed.\n *\n * @example\n * useEffect((signal) => {\n * fetch('/api/data', { signal })\n * .then(response => response.json())\n * .then(data => console.log(data))\n * .catch(err => {\n * if (err.name === 'AbortError') {\n * console.log('Fetch aborted');\n * } else {\n * console.error(err);\n * }\n * });\n * \n * return () => {\n * console.log('Cleanup logic here');\n * };\n * }, []);\n */\nexport const useEffect = (\n effect: (\n signal: AbortSignal,\n ) => Awaitable<void | (() => Awaitable<void>)>,\n deps?: any,\n) => _useEffect('useEffect', () => {\n const abort = new AbortController();\n try {\n const destructor = effect(abort.signal);\n return () => {\n abort.abort();\n (async () => {\n try {\n const _destructor = await destructor;\n if (_.isFunction(_destructor)) _destructor();\n } catch (e) {\n console.error(e);\n }\n })();\n };\n } catch (e) {\n console.error(e);\n return () => abort.abort();\n }\n}, deps);","//\n// memo.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _useMemo } from '../reconciler/hooks';\n\n/**\n * A hook that memoizes a callback function, ensuring that it only changes\n * if its dependencies change. This is useful for optimizing performance by preventing\n * unnecessary re-creations of functions.\n *\n * @template T - The type of the callback function.\n * @param callback - The callback function to be memoized.\n * @param deps - An optional dependencies. If provided, the callback\n * will only be updated when one of these dependencies changes.\n * If not provided, the callback will remain stable.\n * @returns - A stable version of the callback function that will not change unless\n * its dependencies change.\n *\n * @example\n * const memoizedCallback = useCallback(() => {\n * console.log('This function is memoized!');\n * }, [dependency]);\n */\n\nexport function useCallback<T extends (...args: any) => any>(\n callback: T,\n deps?: any\n): T;\n\nexport function useCallback<T extends ((...args: any) => any) | _.Falsey>(\n callback: T,\n deps?: any\n): T;\n\nexport function useCallback<T extends ((...args: any) => any) | _.Falsey>(\n callback: T,\n deps?: any\n): T {\n if (!_.isUndefined(deps)) return _useMemo('useCallback', () => callback, deps);\n const store = _useMemo('useCallback', () => {\n const store = {\n current: callback,\n stable: function (this: any, ...args: any) {\n if (_.isFunction(store.current))\n return store.current.call(this, ...args);\n },\n };\n return store;\n }, null);\n if (_.isFunction(callback)) store.current = callback;\n return callback && (store.stable as T);\n}\n","//\n// memo.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { _useMemo } from '../reconciler/hooks';\n\n/**\n * A utility function that memoizes the result of a factory function.\n * \n * @template T The type of the value returned by the factory function.\n * @param factory A function that produces a value to be memoized.\n * @param deps An optional dependency array. The memoized value is recalculated \n * only when the dependencies change.\n * @returns The memoized value produced by the factory function.\n */\nexport const useMemo = <T>(\n factory: () => T,\n deps?: any,\n) => _useMemo('useMemo', () => factory(), deps);\n","//\n// sync.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Awaitable } from '@o2ter/utils-js';\nimport { _useEffect } from '../reconciler/hooks';\nimport { reconciler } from '../reconciler/state';\n\n/**\n * A hook utility for synchronizing with an external store.\n *\n * @template Snapshot - The type of the snapshot returned by the store.\n * @param subscribe - A function that sets up a subscription to the external store.\n * - `onStoreChange`: A callback to invoke when the store changes.\n * - `signal`: An `AbortSignal` to handle cleanup when the subscription is no longer needed.\n * - Returns an optional cleanup function or a promise resolving to one.\n * @param getSnapshot - A function that retrieves the current snapshot of the store.\n * @param getServerSnapshot - (Optional) A function that retrieves the snapshot of the store\n * in a server environment.\n * @returns The current snapshot of the store.\n *\n * @throws Will throw an error if used outside of a valid render context.\n */\nexport const useSyncExternalStore = <Snapshot>(\n subscribe: (\n onStoreChange: () => void,\n signal: AbortSignal,\n ) => Awaitable<void | (() => Awaitable<void>)>,\n getSnapshot: () => Snapshot,\n getServerSnapshot?: () => Snapshot,\n) => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useSyncExternalStore must be used within a render function.');\n _useEffect('useSyncExternalStore', ({ node }) => {\n const abort = new AbortController();\n try {\n const destructor = subscribe(() => { node?._setDirty(); }, abort.signal);\n return () => {\n abort.abort();\n (async () => {\n try {\n const _destructor = await destructor;\n if (_.isFunction(_destructor)) _destructor();\n } catch (e) {\n console.error(e);\n }\n })();\n };\n } catch (e) {\n console.error(e);\n return () => abort.abort();\n }\n }, null);\n if (getServerSnapshot && state.renderer._server) {\n return getServerSnapshot();\n }\n return getSnapshot();\n};"],"names":[],"mappings":"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"}
|