muya 2.5.3 → 2.5.5
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/{src/__tests__ → __tests__}/bench.test.tsx +4 -4
- package/{src/__tests__ → __tests__}/compare.test.tsx +8 -6
- package/{src/__tests__ → __tests__}/create.test.tsx +2 -2
- package/{src/utils/__tests__ → __tests__}/is.test.ts +3 -3
- package/{src/__tests__ → __tests__}/scheduler.test.tsx +1 -1
- package/{src/__tests__ → __tests__}/select.test.tsx +5 -5
- package/{src/utils/__tests__ → __tests__}/shallow.test.ts +1 -1
- package/{src/__tests__ → __tests__}/use-value-loadable.test.tsx +3 -3
- package/{src/__tests__ → __tests__}/use-value.test.tsx +8 -8
- package/build.ts +67 -0
- package/dist/cjs/index.js +1 -0
- package/dist/esm/create.js +1 -0
- package/dist/esm/debug/development-tools.js +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/select.js +1 -0
- package/{types → dist/types}/create-state.d.ts +1 -0
- package/dist/types/create-state.d.ts.map +1 -0
- package/{types → dist/types}/create.d.ts +1 -0
- package/dist/types/create.d.ts.map +1 -0
- package/dist/types/debug/development-tools.d.ts +13 -0
- package/dist/types/debug/development-tools.d.ts.map +1 -0
- package/{types → dist/types}/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -0
- package/{types → dist/types}/scheduler.d.ts +1 -0
- package/dist/types/scheduler.d.ts.map +1 -0
- package/{types → dist/types}/select.d.ts +1 -0
- package/dist/types/select.d.ts.map +1 -0
- package/{types → dist/types}/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -0
- package/{types → dist/types}/use-value-loadable.d.ts +1 -0
- package/dist/types/use-value-loadable.d.ts.map +1 -0
- package/{types → dist/types}/use-value.d.ts +2 -1
- package/dist/types/use-value.d.ts.map +1 -0
- package/{types → dist/types}/utils/common.d.ts +1 -0
- package/dist/types/utils/common.d.ts.map +1 -0
- package/{types → dist/types}/utils/create-emitter.d.ts +1 -0
- package/dist/types/utils/create-emitter.d.ts.map +1 -0
- package/{types → dist/types}/utils/id.d.ts +1 -0
- package/dist/types/utils/id.d.ts.map +1 -0
- package/{types → dist/types}/utils/is.d.ts +1 -0
- package/dist/types/utils/is.d.ts.map +1 -0
- package/{types → dist/types}/utils/shallow.d.ts +1 -0
- package/dist/types/utils/shallow.d.ts.map +1 -0
- package/package.json +23 -8
- package/src/create-state.d.ts.map +1 -0
- package/src/create.d.ts.map +1 -0
- package/src/create.ts +7 -2
- package/src/debug/development-tools.d.ts.map +1 -0
- package/src/debug/development-tools.ts +5 -40
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +2 -1
- package/src/scheduler.d.ts.map +1 -0
- package/src/select.d.ts.map +1 -0
- package/src/select.ts +7 -2
- package/src/types.d.ts.map +1 -0
- package/src/use-value-loadable.d.ts.map +1 -0
- package/src/use-value.d.ts.map +1 -0
- package/src/use-value.ts +1 -1
- package/src/utils/common.d.ts.map +1 -0
- package/src/utils/create-emitter.d.ts.map +1 -0
- package/src/utils/id.d.ts.map +1 -0
- package/src/utils/is.d.ts.map +1 -0
- package/src/utils/shallow.d.ts.map +1 -0
- package/tsconfig.build.json +12 -0
- package/cjs/index.js +0 -1
- package/esm/__tests__/test-utils.js +0 -1
- package/esm/create.js +0 -1
- package/esm/debug/development-tools.js +0 -1
- package/esm/index.js +0 -1
- package/esm/select.js +0 -1
- package/esm/sqlite/__tests__/create-sqlite.test.js +0 -1
- package/esm/sqlite/__tests__/map-deque.test.js +0 -1
- package/esm/sqlite/__tests__/table.test.js +0 -1
- package/esm/sqlite/__tests__/tokenizer.test.js +0 -1
- package/esm/sqlite/__tests__/where.test.js +0 -1
- package/esm/sqlite/create-sqlite.js +0 -1
- package/esm/sqlite/index.js +0 -1
- package/esm/sqlite/table/backend.js +0 -1
- package/esm/sqlite/table/bun-backend.js +0 -1
- package/esm/sqlite/table/index.js +0 -1
- package/esm/sqlite/table/map-deque.js +0 -1
- package/esm/sqlite/table/table.js +0 -43
- package/esm/sqlite/table/table.types.js +0 -0
- package/esm/sqlite/table/tokenizer.js +0 -1
- package/esm/sqlite/table/where.js +0 -1
- package/esm/sqlite/use-sqlite-count.js +0 -1
- package/esm/sqlite/use-sqlite.js +0 -1
- package/esm/utils/__tests__/is.test.js +0 -1
- package/esm/utils/__tests__/shallow.test.js +0 -1
- package/src/sqlite/__tests__/create-sqlite.test.ts +0 -264
- package/src/sqlite/__tests__/map-deque.test.ts +0 -61
- package/src/sqlite/__tests__/table.test.ts +0 -351
- package/src/sqlite/__tests__/tokenizer.test.ts +0 -43
- package/src/sqlite/__tests__/use-slite-count.test.tsx +0 -96
- package/src/sqlite/__tests__/use-sqlite.more.test.tsx +0 -637
- package/src/sqlite/__tests__/use-sqlite.test.tsx +0 -1008
- package/src/sqlite/__tests__/where.test.ts +0 -234
- package/src/sqlite/create-sqlite.ts +0 -164
- package/src/sqlite/index.ts +0 -4
- package/src/sqlite/table/backend.ts +0 -21
- package/src/sqlite/table/bun-backend.ts +0 -47
- package/src/sqlite/table/index.ts +0 -6
- package/src/sqlite/table/map-deque.ts +0 -29
- package/src/sqlite/table/table.ts +0 -353
- package/src/sqlite/table/table.types.ts +0 -129
- package/src/sqlite/table/tokenizer.ts +0 -35
- package/src/sqlite/table/where.ts +0 -207
- package/src/sqlite/use-sqlite-count.ts +0 -69
- package/src/sqlite/use-sqlite.ts +0 -250
- package/types/__tests__/test-utils.d.ts +0 -25
- package/types/debug/development-tools.d.ts +0 -8
- package/types/sqlite/create-sqlite.d.ts +0 -31
- package/types/sqlite/index.d.ts +0 -4
- package/types/sqlite/table/backend.d.ts +0 -20
- package/types/sqlite/table/bun-backend.d.ts +0 -6
- package/types/sqlite/table/index.d.ts +0 -6
- package/types/sqlite/table/map-deque.d.ts +0 -5
- package/types/sqlite/table/table.d.ts +0 -21
- package/types/sqlite/table/table.types.d.ts +0 -91
- package/types/sqlite/table/tokenizer.d.ts +0 -11
- package/types/sqlite/table/where.d.ts +0 -37
- package/types/sqlite/use-sqlite-count.d.ts +0 -17
- package/types/sqlite/use-sqlite.d.ts +0 -39
- /package/{src/__tests__ → __tests__}/test-utils.ts +0 -0
- /package/{esm → dist/esm}/create-state.js +0 -0
- /package/{esm → dist/esm}/scheduler.js +0 -0
- /package/{esm → dist/esm}/types.js +0 -0
- /package/{esm → dist/esm}/use-value-loadable.js +0 -0
- /package/{esm → dist/esm}/use-value.js +0 -0
- /package/{esm → dist/esm}/utils/common.js +0 -0
- /package/{esm → dist/esm}/utils/create-emitter.js +0 -0
- /package/{esm → dist/esm}/utils/id.js +0 -0
- /package/{esm → dist/esm}/utils/is.js +0 -0
- /package/{esm → dist/esm}/utils/shallow.js +0 -0
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
/* eslint-disable unicorn/consistent-function-scoping */
|
|
6
6
|
/* eslint-disable no-console */
|
|
7
7
|
|
|
8
|
-
import { act, renderHook } from '@testing-library/react
|
|
8
|
+
import { act, renderHook, waitFor } from '@testing-library/react'
|
|
9
9
|
import { useStore, create as zustand } from 'zustand'
|
|
10
10
|
import { useEffect, useState } from 'react'
|
|
11
|
-
import { useValue } from '../use-value'
|
|
11
|
+
import { useValue } from '../src/use-value'
|
|
12
12
|
import { atom, useAtom } from 'jotai'
|
|
13
|
-
import { create } from '../create'
|
|
13
|
+
import { create } from '../src/create'
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Utility to render a hook and measure the time it takes to reach a certain state
|
|
@@ -25,7 +25,7 @@ function renderPerfHook<T>(hook: () => T, getValue: (data: T) => number, toBe: n
|
|
|
25
25
|
onResolve = resolve
|
|
26
26
|
})
|
|
27
27
|
const start = performance.now()
|
|
28
|
-
const { result
|
|
28
|
+
const { result } = renderHook(() => {
|
|
29
29
|
const data = hook()
|
|
30
30
|
const count = getValue(data)
|
|
31
31
|
useEffect(() => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { act, renderHook } from '@testing-library/react
|
|
2
|
-
import { create } from '../create'
|
|
1
|
+
import { act, renderHook } from '@testing-library/react'
|
|
2
|
+
import { create } from '../src/create'
|
|
3
3
|
import { longPromise } from './test-utils'
|
|
4
4
|
import { waitFor } from '@testing-library/react'
|
|
5
5
|
import { atom, useAtom, useSetAtom } from 'jotai'
|
|
@@ -20,18 +20,20 @@ describe('compare', () => {
|
|
|
20
20
|
|
|
21
21
|
await waitFor(() => {
|
|
22
22
|
expect(result.current).toBe(2)
|
|
23
|
-
|
|
23
|
+
// React 19 renders 3 times due to suspense changes
|
|
24
|
+
expect(listen).toHaveBeenCalledTimes(3)
|
|
24
25
|
})
|
|
25
26
|
|
|
26
27
|
state.set(1)
|
|
27
28
|
|
|
28
29
|
await waitFor(() => {
|
|
29
30
|
expect(result.current).toBe(3)
|
|
30
|
-
//
|
|
31
|
-
expect(listen).toHaveBeenCalledTimes(
|
|
31
|
+
// React 19 - 4 renders total
|
|
32
|
+
expect(listen).toHaveBeenCalledTimes(4)
|
|
32
33
|
})
|
|
33
34
|
})
|
|
34
|
-
|
|
35
|
+
// Skip Jotai comparison test - not compatible with React 19 without additional setup
|
|
36
|
+
it.skip('should render async value with sync selector with jotai', async () => {
|
|
35
37
|
const state = atom(longPromise(100))
|
|
36
38
|
|
|
37
39
|
const selectedState = atom(async (get) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { create } from '../create'
|
|
1
|
+
import { create } from '../src/create'
|
|
2
2
|
import { waitFor } from '@testing-library/react'
|
|
3
3
|
import { longPromise } from './test-utils'
|
|
4
|
-
import { isPromise } from '../utils/is'
|
|
4
|
+
import { isPromise } from '../src/utils/is'
|
|
5
5
|
|
|
6
6
|
describe('create', () => {
|
|
7
7
|
it('should get basic value states here', async () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { create } from '
|
|
2
|
-
import { AbortError } from '../common'
|
|
1
|
+
import { create } from '../src/create'
|
|
2
|
+
import { AbortError } from '../src/utils/common'
|
|
3
3
|
import {
|
|
4
4
|
isPromise,
|
|
5
5
|
isFunction,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
isUndefined,
|
|
12
12
|
isState,
|
|
13
13
|
isAbortError,
|
|
14
|
-
} from '../is'
|
|
14
|
+
} from '../src/utils/is'
|
|
15
15
|
|
|
16
16
|
describe('isPromise', () => {
|
|
17
17
|
it('should return true for a Promise', () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { create } from '../create'
|
|
2
|
-
import { select } from '../select'
|
|
1
|
+
import { create } from '../src/create'
|
|
2
|
+
import { select } from '../src/select'
|
|
3
3
|
import { renderHook, waitFor } from '@testing-library/react'
|
|
4
4
|
import { longPromise } from './test-utils'
|
|
5
5
|
import { Suspense } from 'react'
|
|
@@ -211,8 +211,8 @@ describe('select', () => {
|
|
|
211
211
|
await waitFor(() => {
|
|
212
212
|
expect(result.current).toBe(false)
|
|
213
213
|
expect(selectedState.get()).toBe(false)
|
|
214
|
-
// re-render
|
|
215
|
-
expect(render).toHaveBeenCalledTimes(
|
|
214
|
+
// re-render three times with React 19 suspense behavior
|
|
215
|
+
expect(render).toHaveBeenCalledTimes(3)
|
|
216
216
|
})
|
|
217
217
|
|
|
218
218
|
state.set(1)
|
|
@@ -221,7 +221,7 @@ describe('select', () => {
|
|
|
221
221
|
expect(result.current).toBe(true)
|
|
222
222
|
expect(selectedState.get()).toBe(true)
|
|
223
223
|
// next time it re-render only once, as value is already resolved
|
|
224
|
-
expect(render).toHaveBeenCalledTimes(
|
|
224
|
+
expect(render).toHaveBeenCalledTimes(4)
|
|
225
225
|
})
|
|
226
226
|
})
|
|
227
227
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { renderHook, act } from '@testing-library/react
|
|
1
|
+
import { renderHook, act } from '@testing-library/react'
|
|
2
2
|
import { waitFor } from '@testing-library/react'
|
|
3
|
-
import { create } from '../create'
|
|
4
|
-
import { useValueLoadable } from '../use-value-loadable'
|
|
3
|
+
import { create } from '../src/create'
|
|
4
|
+
import { useValueLoadable } from '../src/use-value-loadable'
|
|
5
5
|
import { longPromise } from './test-utils'
|
|
6
6
|
|
|
7
7
|
describe('useValueLoadable', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { renderHook, act } from '@testing-library/react
|
|
2
|
-
import { create } from '../create'
|
|
3
|
-
import { useValue } from '../use-value'
|
|
1
|
+
import { renderHook, act } from '@testing-library/react'
|
|
2
|
+
import { create } from '../src/create'
|
|
3
|
+
import { useValue } from '../src/use-value'
|
|
4
4
|
import { waitFor } from '@testing-library/react'
|
|
5
5
|
import { longPromise } from './test-utils'
|
|
6
6
|
|
|
@@ -39,8 +39,8 @@ describe('useValue', () => {
|
|
|
39
39
|
const state = create(() => {
|
|
40
40
|
throw error
|
|
41
41
|
})
|
|
42
|
-
|
|
43
|
-
expect(
|
|
42
|
+
// In @testing-library/react, errors thrown in hooks propagate directly
|
|
43
|
+
expect(() => renderHook(() => useValue(state))).toThrow(error)
|
|
44
44
|
})
|
|
45
45
|
|
|
46
46
|
it('should handle promises returned from state suspense', async () => {
|
|
@@ -53,7 +53,7 @@ describe('useValue', () => {
|
|
|
53
53
|
})
|
|
54
54
|
await waitFor(() => {})
|
|
55
55
|
expect(result.current).toBe(1)
|
|
56
|
-
expect(renders).toHaveBeenCalledTimes(
|
|
56
|
+
expect(renders).toHaveBeenCalledTimes(3)
|
|
57
57
|
})
|
|
58
58
|
|
|
59
59
|
it('should unsubscribe on unmount', async () => {
|
|
@@ -92,8 +92,8 @@ describe('useValue', () => {
|
|
|
92
92
|
|
|
93
93
|
await waitFor(() => {
|
|
94
94
|
expect(result.current).toBe(0)
|
|
95
|
-
// when it render, it will return a promise - hit the suspense,
|
|
96
|
-
expect(render).toHaveBeenCalledTimes(
|
|
95
|
+
// when it render, it will return a promise - hit the suspense, React 19 renders 3 times
|
|
96
|
+
expect(render).toHaveBeenCalledTimes(3)
|
|
97
97
|
// after the promise resolved, it will re-render again, this part should be called once
|
|
98
98
|
expect(renderAfter).toHaveBeenCalledTimes(1)
|
|
99
99
|
})
|
package/build.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import esbuild from 'esbuild'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import fs from 'fs/promises'
|
|
4
|
+
import { exec } from 'child_process'
|
|
5
|
+
import { promisify } from 'util'
|
|
6
|
+
|
|
7
|
+
const execAsync = promisify(exec)
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Recursively get all .ts files in a directory, excluding test files.
|
|
11
|
+
*/
|
|
12
|
+
async function getAllFiles(dir: string): Promise<string[]> {
|
|
13
|
+
const dirents = await fs.readdir(dir, { withFileTypes: true })
|
|
14
|
+
const files = await Promise.all(
|
|
15
|
+
dirents.map((dirent) => {
|
|
16
|
+
const res = path.resolve(dir, dirent.name)
|
|
17
|
+
if (dirent.isDirectory()) {
|
|
18
|
+
if (dirent.name === '__tests__') return []
|
|
19
|
+
return getAllFiles(res)
|
|
20
|
+
}
|
|
21
|
+
return res.endsWith('.ts') || res.endsWith('.tsx') ? [res] : []
|
|
22
|
+
}),
|
|
23
|
+
)
|
|
24
|
+
return Array.prototype.concat(...files)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const entryDir = 'src'
|
|
28
|
+
const entry = path.join(entryDir, 'index.ts')
|
|
29
|
+
const outDir = 'dist'
|
|
30
|
+
const external = ['react', 'react-native', 'use-sync-external-store/shim/with-selector']
|
|
31
|
+
|
|
32
|
+
// Clean output directory
|
|
33
|
+
await fs.rm(outDir, { recursive: true, force: true })
|
|
34
|
+
|
|
35
|
+
// Ensure output directories
|
|
36
|
+
await fs.mkdir(path.join(outDir, 'cjs'), { recursive: true })
|
|
37
|
+
await fs.mkdir(path.join(outDir, 'esm'), { recursive: true })
|
|
38
|
+
await fs.mkdir(path.join(outDir, 'types'), { recursive: true })
|
|
39
|
+
|
|
40
|
+
// Get all source files
|
|
41
|
+
const files = await getAllFiles(entryDir)
|
|
42
|
+
|
|
43
|
+
// CommonJS build (single file)
|
|
44
|
+
await esbuild.build({
|
|
45
|
+
entryPoints: [entry],
|
|
46
|
+
bundle: true,
|
|
47
|
+
format: 'cjs',
|
|
48
|
+
outfile: path.join(outDir, 'cjs/index.js'),
|
|
49
|
+
minify: true,
|
|
50
|
+
preserveSymlinks: true,
|
|
51
|
+
external,
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
// ESM build (files as they are)
|
|
55
|
+
await esbuild.build({
|
|
56
|
+
entryPoints: files,
|
|
57
|
+
bundle: false,
|
|
58
|
+
format: 'esm',
|
|
59
|
+
outdir: path.join(outDir, 'esm'),
|
|
60
|
+
minify: true,
|
|
61
|
+
preserveSymlinks: true,
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// TypeScript types generation
|
|
65
|
+
await execAsync('bunx tsc --project tsconfig.build.json')
|
|
66
|
+
|
|
67
|
+
console.log('Build complete: dist/')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var O=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var J=(e,t)=>{for(var n in t)O(e,n,{get:t[n],enumerable:!0})},Q=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of $(t))!W.call(e,s)&&s!==n&&O(e,s,{get:()=>t[s],enumerable:!(a=Y(t,s))||a.enumerable});return e};var X=e=>Q(O({},"__esModule",{value:!0}),e);var ee={};J(ee,{EMPTY_SELECTOR:()=>y,STATE_SCHEDULER:()=>S,create:()=>F,getId:()=>I,isAbortError:()=>D,isArray:()=>k,isEqualBase:()=>m,isError:()=>w,isFunction:()=>b,isMap:()=>g,isPromise:()=>l,isSet:()=>P,isSetValueFunction:()=>R,isState:()=>B,isUndefined:()=>f,select:()=>A,shallow:()=>N,useValue:()=>C,useValueLoadable:()=>_});module.exports=X(ee);var T=class extends Error{static Error="AbortError"};function Z(e,t){t&&t.abort();let n=new AbortController,{signal:a}=n;return{promise:new Promise((o,c)=>{a.addEventListener("abort",()=>{c(new T)}),e.then(o).catch(c)}),controller:n}}function x(e,t=m){if(!f(e.current)){if(!f(e.previous)&&t(e.current,e.previous))return!1;e.previous=e.current}return!0}function p(e,t){let{cache:n,emitter:{emit:a}}=e;if(!l(t))return t;n.abortController&&n.abortController.abort();let{promise:s,controller:o}=Z(t,n.abortController);return n.abortController=o,s.then(c=>{n.current=c,a()}).catch(c=>{D(c)||(n.current=c,a())})}function l(e){return e instanceof Promise}function b(e){return typeof e=="function"}function g(e){return e instanceof Map}function P(e){return e instanceof Set}function k(e){return Array.isArray(e)}function m(e,t){return e===t?!0:!!Object.is(e,t)}function R(e){return typeof e=="function"}function D(e){return e instanceof T}function w(e){return e instanceof Error}function f(e){return e===void 0}function B(e){return b(e)&&"get"in e&&"set"in e&&"isSet"in e&&e.isSet===!0}var y=e=>e;function U(){let e=new Map,t=new Set,n=performance.now(),a=!1;function s(){let c=performance.now(),r=c-n,{size:i}=t;if(r<.2&&i>0&&i<10){n=c,o();return}a||(a=!0,Promise.resolve().then(()=>{a=!1,n=performance.now(),o()}))}function o(){if(t.size===0)return;let c=new Set,r=new Map;for(let i of t){if(e.has(i.id)){c.add(i.id);let{onResolveItem:u}=e.get(i.id);u&&u(i.value),r.has(i.id)||r.set(i.id,[]),r.get(i.id).push(i.value)}t.delete(i)}if(t.size>0){s();return}for(let i of c){let u=r.get(i);e.get(i)?.onScheduleDone(u)}}return{add(c,r){return e.set(c,r),()=>{e.delete(c)}},schedule(c,r){t.add({value:r,id:c}),s()}}}function A(e,t,n){function a(){let u=!1,d=e.map(v=>{let E=v.get();return l(E)&&(u=!0),E});return u?new Promise((v,E)=>{Promise.all(d).then(G=>{if(G.some(K=>f(K)))return E(new T);let j=t(...G);v(j)})}):t(...d)}function s(){if(f(r.cache.current)){let u=a();r.cache.current=p(r,u)}return r.cache.current}function o(){if(f(r.cache.current)){let d=a();r.cache.current=p(r,d)}let{current:u}=r.cache;return l(u)?new Promise(d=>{u.then(h=>{if(f(h)){d(o());return}d(h)})}):r.cache.current}let c=[];for(let u of e){let d=u.emitter.subscribe(()=>{S.schedule(r.id,null)});c.push(d)}let r=V({destroy(){for(let u of c)u();i(),r.emitter.clear(),r.cache.current=void 0},get:o,getSnapshot:s}),i=S.add(r.id,{onScheduleDone(){let u=a();r.cache.current=p(r,u),x(r.cache,n)&&(r.emitter.emit(),r.stateName??`${r.id}`,r.cache.current,void 0)}});return r}var M=require("react");var q=require("use-sync-external-store/shim/with-selector");function C(e,t=y){let{emitter:n}=e,a=(0,q.useSyncExternalStoreWithSelector)(e.emitter.subscribe,n.getSnapshot,n.getInitialSnapshot,t);if((0,M.useDebugValue)(a),l(a)||w(a))throw a;return a}function H(e,t){let n=new Set,a=[];return{clear:()=>{for(let s of a)s();n.clear()},subscribe:s=>(n.add(s),()=>{n.delete(s)}),emit:(...s)=>{for(let o of n)o(...s)},contains:s=>n.has(s),getSnapshot:e,getInitialSnapshot:t,getSize:()=>n.size,subscribeToOtherEmitter(s){let o=s.subscribe(()=>{this.emit()});a.push(o)}}}var z=0;function I(){return z++,z.toString(36)}function V(e){let{get:t,destroy:n,set:a,getSnapshot:s}=e,o=!!a,c={},r=function(i){return C(r,i)};return r.isSet=o,r.id=I(),r.emitter=H(s),r.destroy=n,r.listen=function(i){return this.emitter.subscribe(()=>{let u=t();l(u)||i(t())})},r.withName=function(i){return this.stateName=i,this},r.select=function(i,u=m){return A([r],i,u)},r.get=t,r.set=a,r.cache=c,r}var S=U();function F(e,t=m){function n(){try{if(f(o.cache.current)){let r=b(e)?e():e,i=p(o,r);return o.cache.current=i,o.cache.current}return o.cache.current}catch(r){o.cache.current=r}return o.cache.current}async function a(r,i){await r;let u=i(o.cache.current),d=p(o,u);o.cache.current=d}function s(r){let i=n(),u=R(r);if(u&&l(i)){a(i,r);return}o.cache.abortController&&o.cache.abortController.abort();let d=u?r(i):r,h=p(o,d);o.cache.current=h}let o=V({get:n,destroy(){n(),c(),o.emitter.clear(),o.cache.current=void 0},set(r){S.schedule(o.id,r)},getSnapshot:n}),c=S.add(o.id,{onScheduleDone(){o.cache.current=n(),x(o.cache,t)&&(o.emitter.emit(),o.stateName??`${o.id}`,o.cache.current,void 0)},onResolveItem:s});return b(e)||n(),o}var L=require("react");function _(e,t=y){let{emitter:n}=e,a=(0,L.useSyncExternalStore)(n.subscribe,n.getSnapshot,n.getInitialSnapshot);return(0,L.useDebugValue)(a),l(a)?[void 0,!0,!1,void 0]:w(a)?[void 0,!1,!0,a]:[t(a),!1,!1,void 0]}function N(e,t){if(e==t)return!0;if(typeof e!="object"||e==null||typeof t!="object"||t==null)return!1;if(g(e)&&g(t)){if(e.size!==t.size)return!1;for(let[s,o]of e)if(!Object.is(o,t.get(s)))return!1;return!0}if(P(e)&&P(t)){if(e.size!==t.size)return!1;for(let s of e)if(!t.has(s))return!1;return!0}if(k(e)&&k(t)){if(e.length!==t.length)return!1;for(let[s,o]of e.entries())if(!Object.is(o,t[s]))return!1;return!0}let n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(let s of n)if(!Object.prototype.hasOwnProperty.call(t,s)||!Object.is(e[s],t[s]))return!1;return!0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{canUpdate as S,handleAsyncUpdate as s}from"./utils/common";import{isEqualBase as T,isFunction as u,isPromise as p,isSetValueFunction as V,isUndefined as y}from"./utils/is";import{createScheduler as E}from"./scheduler";import{sendToDevtools as b}from"./debug/development-tools";import{createState as v}from"./create-state";const i=E();function U(a,l=T){function c(){try{if(y(e.cache.current)){const t=u(a)?a():a,r=s(e,t);return e.cache.current=r,e.cache.current}return e.cache.current}catch(t){e.cache.current=t}return e.cache.current}async function d(t,r){await t;const n=r(e.cache.current),o=s(e,n);e.cache.current=o}function h(t){const r=c(),n=V(t);if(n&&p(r)){d(r,t);return}e.cache.abortController&&e.cache.abortController.abort();const o=n?t(r):t,f=s(e,o);e.cache.current=f}const e=v({get:c,destroy(){c(),m(),e.emitter.clear(),e.cache.current=void 0},set(t){i.schedule(e.id,t)},getSnapshot:c}),m=i.add(e.id,{onScheduleDone(){e.cache.current=c(),S(e.cache,l)&&(e.emitter.emit(),b({name:e.stateName??`state(${e.id})`,type:"state",value:e.cache.current,message:"update"}))},onResolveItem:h});return u(a)||c(),e}export{i as STATE_SCHEDULER,U as create};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=globalThis?.__REDUX_DEVTOOLS_EXTENSION__?.connect({name:"CustomState",trace:!0});e&&e.init({message:"Initial state"});function a(t){}export{a as sendToDevtools};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./utils/is";export*from"./types";import{create as p,STATE_SCHEDULER as a}from"./create";import{select as l}from"./select";import{useValue as x}from"./use-value";import{useValueLoadable as u}from"./use-value-loadable";import{shallow as E}from"./utils/shallow";import{getId as b}from"./utils/id";export{a as STATE_SCHEDULER,p as create,b as getId,l as select,E as shallow,x as useValue,u as useValueLoadable};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{STATE_SCHEDULER as p}from"./create";import{createState as k}from"./create-state";import{sendToDevtools as E}from"./debug/development-tools";import{AbortError as g,canUpdate as v,handleAsyncUpdate as s}from"./utils/common";import{isPromise as h,isUndefined as c}from"./utils/is";function K(i,d,T){function a(){let t=!1;const n=i.map(u=>{const r=u.get();return h(r)&&(t=!0),r});return t?new Promise((u,r)=>{Promise.all(n).then(m=>{if(m.some(A=>c(A)))return r(new g);const w=d(...m);u(w)})}):d(...n)}function y(){if(c(e.cache.current)){const t=a();e.cache.current=s(e,t)}return e.cache.current}function f(){if(c(e.cache.current)){const n=a();e.cache.current=s(e,n)}const{current:t}=e.cache;return h(t)?new Promise(n=>{t.then(o=>{if(c(o)){n(f());return}n(o)})}):e.cache.current}const l=[];for(const t of i){const n=t.emitter.subscribe(()=>{p.schedule(e.id,null)});l.push(n)}const e=k({destroy(){for(const t of l)t();S(),e.emitter.clear(),e.cache.current=void 0},get:f,getSnapshot:y}),S=p.add(e.id,{onScheduleDone(){const t=a();e.cache.current=s(e,t),v(e.cache,T)&&(e.emitter.emit(),E({name:e.stateName??`derived(${e.id})`,type:"derived",value:e.cache.current,message:"update"}))}});return e}export{K as select};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-state.d.ts","sourceRoot":"","sources":["../../src/create-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAS,MAAM,SAAS,CAAA;AAM/D,UAAU,eAAe,CAAC,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;CAC9B;AAED,KAAK,SAAS,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AACxF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAiCxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAwB,KAAK,EAAE,MAAM,SAAS,CAAA;AAKjF,eAAO,MAAM,eAAe;;;CAAoB,CAAA;AAEhD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,OAAO,CAAC,CAAC,CAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CA2FpG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface SendOptions {
|
|
2
|
+
message?: string;
|
|
3
|
+
type: string;
|
|
4
|
+
value: unknown;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Send state information to Redux DevTools if available
|
|
9
|
+
* @param options Options containing message, type, value, and name
|
|
10
|
+
*/
|
|
11
|
+
export declare function sendToDevtools(options: SendOptions): void;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=development-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"development-tools.d.ts","sourceRoot":"","sources":["../../../src/debug/development-tools.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AACD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,QASlD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from './utils/is';
|
|
2
2
|
export * from './types';
|
|
3
|
-
export { create } from './create';
|
|
3
|
+
export { create, STATE_SCHEDULER } from './create';
|
|
4
4
|
export { select } from './select';
|
|
5
5
|
export { useValue } from './use-value';
|
|
6
6
|
export { useValueLoadable, type LoadableResult } from './use-value-loadable';
|
|
7
7
|
export { shallow } from './utils/shallow';
|
|
8
|
+
export { getId } from './utils/id';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/scheduler.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,MAAM,CAAA;AAC5B,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAM1C,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe;QAmEvB,CAAC,MAAM,UAAU,UAAU,gBAAgB,CAAC,CAAC,CAAC;aAMzC,CAAC,MAAM,UAAU,SAAS,CAAC;EAKvC"}
|
|
@@ -14,3 +14,4 @@ type AwaitedArray<T extends Array<unknown>> = {
|
|
|
14
14
|
*/
|
|
15
15
|
export declare function select<T = unknown, S extends Array<unknown> = []>(states: StateDependencies<S>, selector: (...values: AwaitedArray<S>) => T, isEqual?: IsEqual<T>): GetState<T>;
|
|
16
16
|
export {};
|
|
17
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAIhD,KAAK,iBAAiB,CAAC,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI;KAChD,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;CACxC,CAAA;AAED,KAAK,YAAY,CAAC,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI;KAC3C,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAA;AACD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAC/D,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAC3C,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACnB,QAAQ,CAAC,CAAC,CAAC,CA+Gb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;AAC1D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAC7D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACpD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AAC3C,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;AACtE,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,CAAA;IACX,QAAQ,CAAC,EAAE,CAAC,CAAA;IACZ,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAA8B,CAAC,CAAA;AAEjF,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,aAAa,SAAS,OAAO,GAAG,KAAK;IAChE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACnF;;OAEG;IACH,GAAG,EAAE,MAAM,aAAa,SAAS,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACtD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAA;CAChI;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC3C;;;;OAIG;IACH,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IACjC;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAA;IACpC,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;CAChB"}
|
|
@@ -12,3 +12,4 @@ export type LoadableResult<T> = LoadableLoading | LoadableSuccess<T> | LoadableE
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function useValueLoadable<T, S = undefined>(state: GetState<T>, selector?: (stateValue: Awaited<T>) => S): LoadableResult<undefined extends S ? Awaited<T> : S>;
|
|
14
14
|
export {};
|
|
15
|
+
//# sourceMappingURL=use-value-loadable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-value-loadable.d.ts","sourceRoot":"","sources":["../../src/use-value-loadable.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvD,KAAK,eAAe,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AAC1D,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AACtD,KAAK,aAAa,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAEpD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAA;AAEpF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAC/C,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,QAAQ,GAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAkB,GACvD,cAAc,CAAC,SAAS,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAkBtD"}
|
|
@@ -4,6 +4,7 @@ import { type GetState } from './types';
|
|
|
4
4
|
* @param state The state to subscribe to
|
|
5
5
|
* @param selector Optional function to derive a value from the state
|
|
6
6
|
* @returns The current value of the state or the derived value from the selector
|
|
7
|
-
* @throws If the value is a Promise or an Error, it will be thrown to be handled by an error boundary or suspense
|
|
7
|
+
* @throws {Promise | Error} If the value is a Promise or an Error, it will be thrown to be handled by an error boundary or suspense
|
|
8
8
|
*/
|
|
9
9
|
export declare function useValue<T, S>(state: GetState<T>, selector?: (stateValue: Awaited<T>) => S): undefined extends S ? Awaited<T> : S;
|
|
10
|
+
//# sourceMappingURL=use-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-value.d.ts","sourceRoot":"","sources":["../../src/use-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,QAAQ,GAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAkB,GACvD,SAAS,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAkBtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAGrD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,gBAAe;CACrC;AACD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAgBpH;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,OAAO,CAAC,CAAC,CAAe,GAAG,OAAO,CAQxF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA2BjE"}
|
|
@@ -19,3 +19,4 @@ export interface Emitter<T, P = undefined> {
|
|
|
19
19
|
* @returns An emitter object with methods to manage listeners and emit events
|
|
20
20
|
*/
|
|
21
21
|
export declare function createEmitter<T, P = undefined>(getSnapshot: () => T, getInitialSnapshot?: () => T): Emitter<T, P>;
|
|
22
|
+
//# sourceMappingURL=create-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-emitter.d.ts","sourceRoot":"","sources":["../../../src/utils/create-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;AAChG,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS;IACvC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC9B,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;IAC5D,WAAW,EAAE,MAAM,CAAC,CAAA;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5B,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC9B,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,KAAK,OAAO,CAAA;CAC1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAkCjH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../../src/utils/id.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAG9B"}
|
|
@@ -11,3 +11,4 @@ export declare function isAbortError(value: unknown): value is AbortError;
|
|
|
11
11
|
export declare function isError(value: unknown): value is Error;
|
|
12
12
|
export declare function isUndefined(value: unknown): value is undefined;
|
|
13
13
|
export declare function isState<T>(value: unknown): value is State<T>;
|
|
14
|
+
//# sourceMappingURL=is.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is.d.ts","sourceRoot":"","sources":["../../../src/utils/is.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAEhE;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAEhG;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAEpE;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAE3D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAK5D;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAEhF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAE5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shallow.d.ts","sourceRoot":"","sources":["../../../src/utils/shallow.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAmDxD"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "muya",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.5",
|
|
4
4
|
"author": "samuel.gjabel@gmail.com",
|
|
5
5
|
"repository": "https://github.com/samuelgjabel/muya",
|
|
6
|
-
"main": "cjs/index.js",
|
|
7
|
-
"module": "esm/index.js",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"types": "dist/types/index.d.ts",
|
|
9
|
+
"typescript": {
|
|
10
|
+
"main": "src/index.ts"
|
|
11
|
+
},
|
|
12
|
+
"react-native": "src/index.ts",
|
|
8
13
|
"description": "👀 Another React state management library",
|
|
9
14
|
"homepage": "https://github.com/samuelgjabel/muya",
|
|
10
15
|
"keywords": [
|
|
@@ -20,10 +25,20 @@
|
|
|
20
25
|
],
|
|
21
26
|
"license": "MIT",
|
|
22
27
|
"peerDependencies": {
|
|
23
|
-
"react": ">=18 <20"
|
|
24
|
-
|
|
28
|
+
"react": ">=18 <20"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"use-sync-external-store": "^1.6.0"
|
|
25
32
|
},
|
|
26
|
-
"react-native": "src/index.ts",
|
|
27
33
|
"sideEffects": false,
|
|
28
|
-
"
|
|
29
|
-
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "bun run build.ts"
|
|
36
|
+
},
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"types": "./dist/types/index.d.ts",
|
|
40
|
+
"import": "./dist/esm/index.js",
|
|
41
|
+
"require": "./dist/cjs/index.js"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-state.d.ts","sourceRoot":"","sources":["create-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAS,MAAM,SAAS,CAAA;AAM/D,UAAU,eAAe,CAAC,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;CAC9B;AAED,KAAK,SAAS,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AACxF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAiCxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAwB,KAAK,EAAE,MAAM,SAAS,CAAA;AAKjF,eAAO,MAAM,eAAe;;;CAAoB,CAAA;AAEhD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,OAAO,CAAC,CAAC,CAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CA2FpG"}
|
package/src/create.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { canUpdate, handleAsyncUpdate } from './utils/common'
|
|
|
2
2
|
import { isEqualBase, isFunction, isPromise, isSetValueFunction, isUndefined } from './utils/is'
|
|
3
3
|
import type { DefaultValue, IsEqual, SetStateCb, SetValue, State } from './types'
|
|
4
4
|
import { createScheduler } from './scheduler'
|
|
5
|
-
import {
|
|
5
|
+
import { sendToDevtools } from './debug/development-tools'
|
|
6
6
|
import { createState } from './create-state'
|
|
7
7
|
|
|
8
8
|
export const STATE_SCHEDULER = createScheduler()
|
|
@@ -89,6 +89,12 @@ export function create<T>(initialValue: DefaultValue<T>, isEqual: IsEqual<T> = i
|
|
|
89
89
|
return
|
|
90
90
|
}
|
|
91
91
|
state.emitter.emit()
|
|
92
|
+
sendToDevtools({
|
|
93
|
+
name: state.stateName ?? `state(${state.id})`,
|
|
94
|
+
type: 'state',
|
|
95
|
+
value: state.cache.current,
|
|
96
|
+
message: 'update',
|
|
97
|
+
})
|
|
92
98
|
},
|
|
93
99
|
onResolveItem: setValue,
|
|
94
100
|
})
|
|
@@ -97,6 +103,5 @@ export function create<T>(initialValue: DefaultValue<T>, isEqual: IsEqual<T> = i
|
|
|
97
103
|
getValue()
|
|
98
104
|
}
|
|
99
105
|
|
|
100
|
-
subscribeToDevelopmentTools(state)
|
|
101
106
|
return state
|
|
102
107
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"development-tools.d.ts","sourceRoot":"","sources":["development-tools.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AACD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,QASlD"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import type { GetState, State } from '../types'
|
|
2
|
-
import { isPromise, isState } from '../utils/is'
|
|
3
|
-
|
|
4
1
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
5
2
|
// @ts-expect-error
|
|
6
3
|
const reduxDevelopmentTools = globalThis?.__REDUX_DEVTOOLS_EXTENSION__?.connect({
|
|
@@ -12,11 +9,9 @@ if (reduxDevelopmentTools) {
|
|
|
12
9
|
reduxDevelopmentTools.init({ message: 'Initial state' })
|
|
13
10
|
}
|
|
14
11
|
|
|
15
|
-
export type StateType = 'state' | 'derived'
|
|
16
|
-
|
|
17
12
|
interface SendOptions {
|
|
18
13
|
message?: string
|
|
19
|
-
type:
|
|
14
|
+
type: string
|
|
20
15
|
value: unknown
|
|
21
16
|
name: string
|
|
22
17
|
}
|
|
@@ -24,43 +19,13 @@ interface SendOptions {
|
|
|
24
19
|
* Send state information to Redux DevTools if available
|
|
25
20
|
* @param options Options containing message, type, value, and name
|
|
26
21
|
*/
|
|
27
|
-
function
|
|
28
|
-
if (
|
|
22
|
+
export function sendToDevtools(options: SendOptions) {
|
|
23
|
+
if (process.env.NODE_ENV === 'production') {
|
|
29
24
|
return
|
|
30
25
|
}
|
|
31
|
-
|
|
32
|
-
if (isPromise(value)) {
|
|
26
|
+
if (!reduxDevelopmentTools) {
|
|
33
27
|
return
|
|
34
28
|
}
|
|
29
|
+
const { message, type, value, name } = options
|
|
35
30
|
reduxDevelopmentTools.send(name, { value, type, message }, type)
|
|
36
31
|
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Create a listener function for development tools that sends state updates
|
|
40
|
-
* @param name The name of the state
|
|
41
|
-
* @param type The type of the state ('state' or 'derived')
|
|
42
|
-
* @returns A listener function that sends updates to development tools
|
|
43
|
-
*/
|
|
44
|
-
function developmentToolsListener(name: string, type: StateType) {
|
|
45
|
-
return (value: unknown) => {
|
|
46
|
-
sendToDevelopmentTools({ name, type, value, message: 'update' })
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Subscribe a state to development tools if available
|
|
52
|
-
* @param state The state to subscribe
|
|
53
|
-
* @returns A function to unsubscribe from development tools
|
|
54
|
-
*/
|
|
55
|
-
export function subscribeToDevelopmentTools<T>(state: State<T> | GetState<T>) {
|
|
56
|
-
if (process.env.NODE_ENV === 'production') {
|
|
57
|
-
return
|
|
58
|
-
}
|
|
59
|
-
let type: StateType = 'state'
|
|
60
|
-
|
|
61
|
-
if (!isState(state)) {
|
|
62
|
-
type = 'derived'
|
|
63
|
-
}
|
|
64
|
-
const name = state.stateName?.length ? state.stateName : `${type}(${state.id.toString()})`
|
|
65
|
-
return state.listen(developmentToolsListener(name, type))
|
|
66
|
-
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|