on-zero 0.7.10 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{readme.md → README.md} +172 -231
- package/dist/cjs/cli.cjs +5 -2
- package/dist/cjs/cli.native.js +5 -2
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/combineZeroClients.cjs +2 -2
- package/dist/cjs/combineZeroClients.native.js +6 -6
- package/dist/cjs/combineZeroClients.native.js.map +1 -1
- package/dist/cjs/config.cjs +30 -0
- package/dist/cjs/config.native.js +33 -0
- package/dist/cjs/config.native.js.map +1 -0
- package/dist/cjs/createPermissions.cjs +2 -2
- package/dist/cjs/createPermissions.native.js +17 -27
- package/dist/cjs/createPermissions.native.js.map +1 -1
- package/dist/cjs/createUseQuery.cjs +3 -3
- package/dist/cjs/createUseQuery.native.js +4 -4
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createUseQueryDirect.cjs +4 -3
- package/dist/cjs/createUseQueryDirect.native.js +14 -18
- package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +29 -9
- package/dist/cjs/createZeroClient.connection.test.cjs +11 -0
- package/dist/cjs/createZeroClient.connection.test.native.js +14 -7
- package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +58 -32
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroClient.recovery.test.cjs +90 -3
- package/dist/cjs/createZeroClient.recovery.test.native.js +109 -19
- package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/cjs/generate-helpers.cjs +70 -17
- package/dist/cjs/generate-helpers.native.js +110 -23
- package/dist/cjs/generate-helpers.native.js.map +1 -1
- package/dist/cjs/generate-layout.cjs +586 -0
- package/dist/cjs/generate-layout.native.js +1275 -0
- package/dist/cjs/generate-layout.native.js.map +1 -0
- package/dist/cjs/generate-lite.cjs +295 -27
- package/dist/cjs/generate-lite.native.js +854 -102
- package/dist/cjs/generate-lite.native.js.map +1 -1
- package/dist/cjs/generate-lite.test.cjs +433 -41
- package/dist/cjs/generate-lite.test.native.js +446 -41
- package/dist/cjs/generate-lite.test.native.js.map +1 -1
- package/dist/cjs/generate.cjs +172 -94
- package/dist/cjs/generate.native.js +324 -148
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/generate.test.cjs +362 -45
- package/dist/cjs/generate.test.native.js +374 -45
- package/dist/cjs/generate.test.native.js.map +1 -1
- package/dist/cjs/helpers/NullToOptional.cjs +18 -0
- package/dist/cjs/helpers/NullToOptional.native.js +21 -0
- package/dist/cjs/helpers/NullToOptional.native.js.map +1 -0
- package/dist/cjs/helpers/asyncContext.cjs +128 -0
- package/dist/cjs/helpers/asyncContext.native.js +87 -0
- package/dist/cjs/helpers/asyncContext.native.js.map +1 -0
- package/dist/cjs/helpers/batchQuery.cjs +2 -2
- package/dist/cjs/helpers/batchQuery.native.js +2 -2
- package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.cjs +7 -4
- package/dist/cjs/helpers/createMutators.native.js +12 -9
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.test.native.js +2 -2
- package/dist/cjs/helpers/createMutators.test.native.js.map +1 -1
- package/dist/cjs/helpers/ellipsis.cjs +35 -0
- package/dist/cjs/helpers/ellipsis.native.js +38 -0
- package/dist/cjs/helpers/ellipsis.native.js.map +1 -0
- package/dist/cjs/helpers/emitter.cjs +99 -0
- package/dist/cjs/helpers/emitter.native.js +125 -0
- package/dist/cjs/helpers/emitter.native.js.map +1 -0
- package/dist/cjs/helpers/ensure.cjs +33 -0
- package/dist/cjs/helpers/ensure.native.js +37 -0
- package/dist/cjs/helpers/ensure.native.js.map +1 -0
- package/dist/cjs/helpers/ensureLoggedIn.cjs +2 -2
- package/dist/cjs/helpers/ensureLoggedIn.native.js +3 -3
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/cjs/helpers/errors.cjs +40 -0
- package/dist/cjs/helpers/errors.native.js +152 -0
- package/dist/cjs/helpers/errors.native.js.map +1 -0
- package/dist/cjs/helpers/getCurrentComponentStack.cjs +71 -0
- package/dist/cjs/helpers/getCurrentComponentStack.native.js +93 -0
- package/dist/cjs/helpers/getCurrentComponentStack.native.js.map +1 -0
- package/dist/cjs/helpers/globalValue.cjs +39 -0
- package/dist/cjs/helpers/globalValue.native.js +42 -0
- package/dist/cjs/helpers/globalValue.native.js.map +1 -0
- package/dist/cjs/helpers/mapObject.cjs +36 -0
- package/dist/cjs/helpers/mapObject.native.js +39 -0
- package/dist/cjs/helpers/mapObject.native.js.map +1 -0
- package/dist/cjs/helpers/mutationLifecycle.cjs +251 -0
- package/dist/cjs/helpers/mutationLifecycle.native.js +392 -0
- package/dist/cjs/helpers/mutationLifecycle.native.js.map +1 -0
- package/dist/cjs/helpers/mutationLifecycle.test.cjs +174 -0
- package/dist/cjs/helpers/mutationLifecycle.test.native.js +182 -0
- package/dist/cjs/helpers/mutationLifecycle.test.native.js.map +1 -0
- package/dist/cjs/helpers/mutatorContext.cjs +3 -3
- package/dist/cjs/helpers/mutatorContext.native.js +5 -5
- package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
- package/dist/cjs/helpers/platform.cjs +31 -0
- package/dist/cjs/helpers/platform.native.js +33 -0
- package/dist/cjs/helpers/platform.native.js.map +1 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.cjs +2 -2
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +7 -7
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/cjs/helpers/queryContext.cjs +2 -2
- package/dist/cjs/helpers/queryContext.native.js +4 -4
- package/dist/cjs/helpers/queryContext.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.cjs +14 -15
- package/dist/cjs/helpers/recoverZeroClient.native.js +26 -23
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.cjs +10 -8
- package/dist/cjs/helpers/recoverZeroClient.test.native.js +17 -21
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/helpers/sleep.cjs +34 -0
- package/dist/cjs/helpers/sleep.native.js +39 -0
- package/dist/cjs/helpers/sleep.native.js.map +1 -0
- package/dist/cjs/helpers/time.cjs +47 -0
- package/dist/cjs/helpers/time.native.js +80 -0
- package/dist/cjs/helpers/time.native.js.map +1 -0
- package/dist/cjs/helpers/tuple.cjs +18 -0
- package/dist/cjs/helpers/tuple.native.js +21 -0
- package/dist/cjs/helpers/tuple.native.js.map +1 -0
- package/dist/cjs/helpers/useMutation.native.js +5 -5
- package/dist/cjs/helpers/useMutation.native.js.map +1 -1
- package/dist/cjs/helpers/useMutation.test.native.js +1 -1
- package/dist/cjs/helpers/useMutation.test.native.js.map +1 -1
- package/dist/cjs/helpers/useZeroDebug.cjs +2 -2
- package/dist/cjs/helpers/useZeroDebug.native.js +7 -8
- package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/cjs/index.cjs +9 -1
- package/dist/cjs/index.native.js +8 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/instanceRegistry.cjs +16 -4
- package/dist/cjs/instanceRegistry.native.js +56 -6
- package/dist/cjs/instanceRegistry.native.js.map +1 -1
- package/dist/cjs/multi.cjs +34 -13
- package/dist/cjs/multi.native.js +39 -17
- package/dist/cjs/multi.native.js.map +1 -1
- package/dist/cjs/multiInstance.test.cjs +6 -2
- package/dist/cjs/multiInstance.test.native.js +13 -9
- package/dist/cjs/multiInstance.test.native.js.map +1 -1
- package/dist/cjs/multiInstanceNested.test.native.js +10 -10
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
- package/dist/cjs/multiPartition.test.cjs +85 -36
- package/dist/cjs/multiPartition.test.native.js +102 -39
- package/dist/cjs/multiPartition.test.native.js.map +1 -1
- package/dist/cjs/mutations.cjs +2 -2
- package/dist/cjs/mutations.native.js +4 -4
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/mutations.test.native.js +3 -3
- package/dist/cjs/mutations.test.native.js.map +1 -1
- package/dist/cjs/provideZero.hydration.test.cjs +3 -3
- package/dist/cjs/provideZero.hydration.test.native.js +4 -4
- package/dist/cjs/provideZero.hydration.test.native.js.map +1 -1
- package/dist/cjs/run.cjs +1 -1
- package/dist/cjs/run.native.js +3 -3
- package/dist/cjs/run.native.js.map +1 -1
- package/dist/cjs/server.cjs +20 -16
- package/dist/cjs/server.native.js +50 -57
- package/dist/cjs/server.native.js.map +1 -1
- package/dist/cjs/server.test.cjs +129 -6
- package/dist/cjs/server.test.native.js +141 -10
- package/dist/cjs/server.test.native.js.map +1 -1
- package/dist/cjs/serverWhere.test.native.js +3 -3
- package/dist/cjs/serverWhere.test.native.js.map +1 -1
- package/dist/cjs/state.cjs +2 -2
- package/dist/cjs/state.native.js +10 -10
- package/dist/cjs/state.native.js.map +1 -1
- package/dist/cjs/usePermission.test.native.js +3 -3
- package/dist/cjs/usePermission.test.native.js.map +1 -1
- package/dist/cjs/useQuery.empty.test.cjs +3 -3
- package/dist/cjs/useQuery.empty.test.native.js +6 -6
- package/dist/cjs/useQuery.empty.test.native.js.map +1 -1
- package/dist/cjs/useQuery.ssr.test.native.js +2 -2
- package/dist/cjs/useQuery.ssr.test.native.js.map +1 -1
- package/dist/cjs/vite-plugin.cjs +7 -8
- package/dist/cjs/vite-plugin.native.js +11 -11
- package/dist/cjs/vite-plugin.native.js.map +1 -1
- package/dist/cjs/where.cjs +3 -3
- package/dist/cjs/where.native.js +4 -4
- package/dist/cjs/where.native.js.map +1 -1
- package/dist/esm/cli.mjs +6 -3
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +6 -3
- package/dist/esm/cli.native.js.map +1 -1
- package/dist/esm/combineZeroClients.mjs +1 -1
- package/dist/esm/combineZeroClients.mjs.map +1 -1
- package/dist/esm/combineZeroClients.native.js +5 -5
- package/dist/esm/combineZeroClients.native.js.map +1 -1
- package/dist/esm/config.mjs +5 -0
- package/dist/esm/config.mjs.map +1 -0
- package/dist/esm/config.native.js +5 -0
- package/dist/esm/config.native.js.map +1 -0
- package/dist/esm/createPermissions.mjs +1 -1
- package/dist/esm/createPermissions.mjs.map +1 -1
- package/dist/esm/createPermissions.native.js +16 -26
- package/dist/esm/createPermissions.native.js.map +1 -1
- package/dist/esm/createUseQuery.mjs +2 -2
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +3 -3
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createUseQueryDirect.mjs +2 -1
- package/dist/esm/createUseQueryDirect.mjs.map +1 -1
- package/dist/esm/createUseQueryDirect.native.js +12 -16
- package/dist/esm/createUseQueryDirect.native.js.map +1 -1
- package/dist/esm/createZeroClient.connection.test.mjs +11 -0
- package/dist/esm/createZeroClient.connection.test.mjs.map +1 -1
- package/dist/esm/createZeroClient.connection.test.native.js +14 -7
- package/dist/esm/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +25 -5
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +54 -28
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.mjs +90 -3
- package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.native.js +109 -19
- package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/esm/generate-helpers.mjs +70 -18
- package/dist/esm/generate-helpers.mjs.map +1 -1
- package/dist/esm/generate-helpers.native.js +110 -24
- package/dist/esm/generate-helpers.native.js.map +1 -1
- package/dist/esm/generate-layout.mjs +560 -0
- package/dist/esm/generate-layout.mjs.map +1 -0
- package/dist/esm/generate-layout.native.js +1246 -0
- package/dist/esm/generate-layout.native.js.map +1 -0
- package/dist/esm/generate-lite.mjs +296 -28
- package/dist/esm/generate-lite.mjs.map +1 -1
- package/dist/esm/generate-lite.native.js +855 -103
- package/dist/esm/generate-lite.native.js.map +1 -1
- package/dist/esm/generate-lite.test.mjs +434 -42
- package/dist/esm/generate-lite.test.mjs.map +1 -1
- package/dist/esm/generate-lite.test.native.js +447 -42
- package/dist/esm/generate-lite.test.native.js.map +1 -1
- package/dist/esm/generate.mjs +172 -96
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +324 -150
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/generate.test.mjs +366 -49
- package/dist/esm/generate.test.mjs.map +1 -1
- package/dist/esm/generate.test.native.js +378 -49
- package/dist/esm/generate.test.native.js.map +1 -1
- package/dist/esm/helpers/NullToOptional.mjs +2 -0
- package/dist/esm/helpers/NullToOptional.mjs.map +1 -0
- package/dist/esm/helpers/NullToOptional.native.js +2 -0
- package/dist/esm/helpers/NullToOptional.native.js.map +1 -0
- package/dist/esm/helpers/asyncContext.mjs +102 -0
- package/dist/esm/helpers/asyncContext.mjs.map +1 -0
- package/dist/esm/helpers/asyncContext.native.js +58 -0
- package/dist/esm/helpers/asyncContext.native.js.map +1 -0
- package/dist/esm/helpers/batchQuery.mjs +1 -1
- package/dist/esm/helpers/batchQuery.native.js +1 -1
- package/dist/esm/helpers/createMutators.mjs +5 -2
- package/dist/esm/helpers/createMutators.mjs.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +10 -7
- package/dist/esm/helpers/createMutators.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.test.native.js +2 -2
- package/dist/esm/helpers/createMutators.test.native.js.map +1 -1
- package/dist/esm/helpers/ellipsis.mjs +10 -0
- package/dist/esm/helpers/ellipsis.mjs.map +1 -0
- package/dist/esm/helpers/ellipsis.native.js +10 -0
- package/dist/esm/helpers/ellipsis.native.js.map +1 -0
- package/dist/esm/helpers/emitter.mjs +72 -0
- package/dist/esm/helpers/emitter.mjs.map +1 -0
- package/dist/esm/helpers/emitter.native.js +95 -0
- package/dist/esm/helpers/emitter.native.js.map +1 -0
- package/dist/esm/helpers/ensure.mjs +8 -0
- package/dist/esm/helpers/ensure.mjs.map +1 -0
- package/dist/esm/helpers/ensure.native.js +9 -0
- package/dist/esm/helpers/ensure.native.js.map +1 -0
- package/dist/esm/helpers/ensureLoggedIn.mjs +1 -1
- package/dist/esm/helpers/ensureLoggedIn.mjs.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.native.js +2 -2
- package/dist/esm/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/esm/helpers/errors.mjs +14 -0
- package/dist/esm/helpers/errors.mjs.map +1 -0
- package/dist/esm/helpers/errors.native.js +123 -0
- package/dist/esm/helpers/errors.native.js.map +1 -0
- package/dist/esm/helpers/getCurrentComponentStack.mjs +35 -0
- package/dist/esm/helpers/getCurrentComponentStack.mjs.map +1 -0
- package/dist/esm/helpers/getCurrentComponentStack.native.js +54 -0
- package/dist/esm/helpers/getCurrentComponentStack.native.js.map +1 -0
- package/dist/esm/helpers/globalValue.mjs +14 -0
- package/dist/esm/helpers/globalValue.mjs.map +1 -0
- package/dist/esm/helpers/globalValue.native.js +14 -0
- package/dist/esm/helpers/globalValue.native.js.map +1 -0
- package/dist/esm/helpers/mapObject.mjs +11 -0
- package/dist/esm/helpers/mapObject.mjs.map +1 -0
- package/dist/esm/helpers/mapObject.native.js +11 -0
- package/dist/esm/helpers/mapObject.native.js.map +1 -0
- package/dist/esm/helpers/mutationLifecycle.mjs +221 -0
- package/dist/esm/helpers/mutationLifecycle.mjs.map +1 -0
- package/dist/esm/helpers/mutationLifecycle.native.js +359 -0
- package/dist/esm/helpers/mutationLifecycle.native.js.map +1 -0
- package/dist/esm/helpers/mutationLifecycle.test.mjs +175 -0
- package/dist/esm/helpers/mutationLifecycle.test.mjs.map +1 -0
- package/dist/esm/helpers/mutationLifecycle.test.native.js +180 -0
- package/dist/esm/helpers/mutationLifecycle.test.native.js.map +1 -0
- package/dist/esm/helpers/mutatorContext.mjs +1 -1
- package/dist/esm/helpers/mutatorContext.native.js +4 -4
- package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
- package/dist/esm/helpers/platform.mjs +5 -0
- package/dist/esm/helpers/platform.mjs.map +1 -0
- package/dist/esm/helpers/platform.native.js +4 -0
- package/dist/esm/helpers/platform.native.js.map +1 -0
- package/dist/esm/helpers/prettyFormatZeroQuery.mjs +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js +6 -6
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/esm/helpers/queryContext.mjs +1 -1
- package/dist/esm/helpers/queryContext.native.js +3 -3
- package/dist/esm/helpers/queryContext.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.mjs +14 -15
- package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +26 -23
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs +8 -6
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +15 -19
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/helpers/sleep.mjs +9 -0
- package/dist/esm/helpers/sleep.mjs.map +1 -0
- package/dist/esm/helpers/sleep.native.js +11 -0
- package/dist/esm/helpers/sleep.native.js.map +1 -0
- package/dist/esm/helpers/time.mjs +22 -0
- package/dist/esm/helpers/time.mjs.map +1 -0
- package/dist/esm/helpers/time.native.js +52 -0
- package/dist/esm/helpers/time.native.js.map +1 -0
- package/dist/esm/helpers/tuple.mjs +2 -0
- package/dist/esm/helpers/tuple.mjs.map +1 -0
- package/dist/esm/helpers/tuple.native.js +2 -0
- package/dist/esm/helpers/tuple.native.js.map +1 -0
- package/dist/esm/helpers/useMutation.native.js +5 -5
- package/dist/esm/helpers/useMutation.native.js.map +1 -1
- package/dist/esm/helpers/useMutation.test.native.js +1 -1
- package/dist/esm/helpers/useMutation.test.native.js.map +1 -1
- package/dist/esm/helpers/useZeroDebug.mjs +1 -1
- package/dist/esm/helpers/useZeroDebug.mjs.map +1 -1
- package/dist/esm/helpers/useZeroDebug.native.js +6 -7
- package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +3 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +3 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/instanceRegistry.mjs +13 -2
- package/dist/esm/instanceRegistry.mjs.map +1 -1
- package/dist/esm/instanceRegistry.native.js +53 -4
- package/dist/esm/instanceRegistry.native.js.map +1 -1
- package/dist/esm/multi.mjs +33 -12
- package/dist/esm/multi.mjs.map +1 -1
- package/dist/esm/multi.native.js +38 -16
- package/dist/esm/multi.native.js.map +1 -1
- package/dist/esm/multiInstance.test.mjs +5 -1
- package/dist/esm/multiInstance.test.mjs.map +1 -1
- package/dist/esm/multiInstance.test.native.js +12 -8
- package/dist/esm/multiInstance.test.native.js.map +1 -1
- package/dist/esm/multiInstanceNested.test.native.js +10 -10
- package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
- package/dist/esm/multiPartition.test.mjs +86 -37
- package/dist/esm/multiPartition.test.mjs.map +1 -1
- package/dist/esm/multiPartition.test.native.js +103 -40
- package/dist/esm/multiPartition.test.native.js.map +1 -1
- package/dist/esm/mutations.mjs +1 -1
- package/dist/esm/mutations.mjs.map +1 -1
- package/dist/esm/mutations.native.js +3 -3
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/mutations.test.native.js +3 -3
- package/dist/esm/mutations.test.native.js.map +1 -1
- package/dist/esm/provideZero.hydration.test.mjs +1 -1
- package/dist/esm/provideZero.hydration.test.mjs.map +1 -1
- package/dist/esm/provideZero.hydration.test.native.js +2 -2
- package/dist/esm/provideZero.hydration.test.native.js.map +1 -1
- package/dist/esm/run.mjs +1 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/run.native.js +3 -3
- package/dist/esm/run.native.js.map +1 -1
- package/dist/esm/server.mjs +20 -15
- package/dist/esm/server.mjs.map +1 -1
- package/dist/esm/server.native.js +50 -56
- package/dist/esm/server.native.js.map +1 -1
- package/dist/esm/server.test.mjs +130 -7
- package/dist/esm/server.test.mjs.map +1 -1
- package/dist/esm/server.test.native.js +142 -11
- package/dist/esm/server.test.native.js.map +1 -1
- package/dist/esm/serverWhere.test.mjs.map +1 -1
- package/dist/esm/serverWhere.test.native.js +3 -3
- package/dist/esm/serverWhere.test.native.js.map +1 -1
- package/dist/esm/state.mjs +1 -1
- package/dist/esm/state.mjs.map +1 -1
- package/dist/esm/state.native.js +9 -9
- package/dist/esm/state.native.js.map +1 -1
- package/dist/esm/usePermission.test.native.js +3 -3
- package/dist/esm/usePermission.test.native.js.map +1 -1
- package/dist/esm/useQuery.empty.test.mjs +1 -1
- package/dist/esm/useQuery.empty.test.mjs.map +1 -1
- package/dist/esm/useQuery.empty.test.native.js +4 -4
- package/dist/esm/useQuery.empty.test.native.js.map +1 -1
- package/dist/esm/useQuery.ssr.test.native.js +2 -2
- package/dist/esm/useQuery.ssr.test.native.js.map +1 -1
- package/dist/esm/vite-plugin.mjs +7 -8
- package/dist/esm/vite-plugin.mjs.map +1 -1
- package/dist/esm/vite-plugin.native.js +11 -11
- package/dist/esm/vite-plugin.native.js.map +1 -1
- package/dist/esm/where.mjs +1 -1
- package/dist/esm/where.mjs.map +1 -1
- package/dist/esm/where.native.js +2 -2
- package/dist/esm/where.native.js.map +1 -1
- package/package.json +18 -6
- package/src/cli.ts +11 -3
- package/src/combineZeroClients.tsx +18 -10
- package/src/config.ts +72 -0
- package/src/createPermissions.ts +3 -4
- package/src/createUseQuery.tsx +8 -8
- package/src/createUseQueryDirect.tsx +11 -10
- package/src/createZeroClient.authData.test.tsx +1 -1
- package/src/createZeroClient.connection.test.tsx +13 -2
- package/src/createZeroClient.recovery.test.tsx +100 -4
- package/src/createZeroClient.tsx +87 -30
- package/src/generate-helpers.ts +108 -31
- package/src/generate-layout.ts +841 -0
- package/src/generate-lite.test.ts +421 -42
- package/src/generate-lite.ts +479 -43
- package/src/generate.test.ts +552 -90
- package/src/generate.ts +360 -163
- package/src/helpers/NullToOptional.ts +5 -0
- package/src/helpers/asyncContext.native.ts +90 -0
- package/src/helpers/asyncContext.ts +159 -0
- package/src/helpers/batchQuery.ts +2 -2
- package/src/helpers/createMutators.ts +11 -8
- package/src/helpers/ellipsis.ts +9 -0
- package/src/helpers/emitter.tsx +106 -0
- package/src/helpers/ensure.ts +10 -0
- package/src/helpers/ensureLoggedIn.ts +1 -2
- package/src/helpers/errors.ts +13 -0
- package/src/helpers/getCurrentComponentStack.ts +56 -0
- package/src/helpers/globalValue.ts +40 -0
- package/src/helpers/mapObject.ts +14 -0
- package/src/helpers/mutationLifecycle.test.ts +180 -0
- package/src/helpers/mutationLifecycle.ts +313 -0
- package/src/helpers/mutatorContext.ts +3 -3
- package/src/helpers/platform.native.ts +2 -0
- package/src/helpers/platform.ts +16 -0
- package/src/helpers/prettyFormatZeroQuery.ts +2 -2
- package/src/helpers/queryContext.ts +2 -2
- package/src/helpers/recoverZeroClient.test.ts +23 -21
- package/src/helpers/recoverZeroClient.ts +56 -49
- package/src/helpers/sleep.ts +8 -0
- package/src/helpers/time.ts +51 -0
- package/src/helpers/tuple.ts +1 -0
- package/src/helpers/useMutation.tsx +3 -3
- package/src/helpers/useZeroDebug.ts +3 -3
- package/src/index.ts +13 -1
- package/src/instanceRegistry.ts +19 -6
- package/src/multi.ts +75 -31
- package/src/multiInstance.test.tsx +31 -13
- package/src/multiInstanceNested.test.tsx +2 -2
- package/src/multiPartition.test.ts +62 -27
- package/src/mutations.ts +10 -10
- package/src/provideZero.hydration.test.tsx +1 -1
- package/src/resolveQuery.ts +2 -2
- package/src/run.ts +7 -7
- package/src/server.test.ts +117 -18
- package/src/server.ts +70 -43
- package/src/serverWhere.ts +2 -2
- package/src/state.ts +2 -2
- package/src/types.ts +47 -6
- package/src/useQuery.empty.test.tsx +3 -3
- package/src/useQuery.ssr.test.ts +1 -1
- package/src/vite-plugin.ts +12 -9
- package/src/where.ts +6 -7
- package/src/zeroRunner.ts +2 -2
- package/types/combineZeroClients.d.ts +11 -5
- package/types/combineZeroClients.d.ts.map +1 -1
- package/types/config.d.ts +62 -0
- package/types/config.d.ts.map +1 -0
- package/types/createPermissions.d.ts.map +1 -1
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createUseQueryDirect.d.ts +1 -1
- package/types/createUseQueryDirect.d.ts.map +1 -1
- package/types/createZeroClient.d.ts +22 -12
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroClient.recovery.test.d.ts.map +1 -1
- package/types/generate-helpers.d.ts +17 -2
- package/types/generate-helpers.d.ts.map +1 -1
- package/types/generate-layout.d.ts +26 -0
- package/types/generate-layout.d.ts.map +1 -0
- package/types/generate-lite.d.ts +29 -1
- package/types/generate-lite.d.ts.map +1 -1
- package/types/generate.d.ts +20 -0
- package/types/generate.d.ts.map +1 -1
- package/types/helpers/NullToOptional.d.ts +6 -0
- package/types/helpers/NullToOptional.d.ts.map +1 -0
- package/types/helpers/asyncContext.d.ts +15 -0
- package/types/helpers/asyncContext.d.ts.map +1 -0
- package/types/helpers/asyncContext.native.d.ts +8 -0
- package/types/helpers/asyncContext.native.d.ts.map +1 -0
- package/types/helpers/createMutators.d.ts +2 -1
- package/types/helpers/createMutators.d.ts.map +1 -1
- package/types/helpers/ellipsis.d.ts +2 -0
- package/types/helpers/ellipsis.d.ts.map +1 -0
- package/types/helpers/emitter.d.ts +21 -0
- package/types/helpers/emitter.d.ts.map +1 -0
- package/types/helpers/ensure.d.ts +2 -0
- package/types/helpers/ensure.d.ts.map +1 -0
- package/types/helpers/ensureLoggedIn.d.ts.map +1 -1
- package/types/helpers/errors.d.ts +7 -0
- package/types/helpers/errors.d.ts.map +1 -0
- package/types/helpers/getCurrentComponentStack.d.ts +2 -0
- package/types/helpers/getCurrentComponentStack.d.ts.map +1 -0
- package/types/helpers/globalValue.d.ts +23 -0
- package/types/helpers/globalValue.d.ts.map +1 -0
- package/types/helpers/mapObject.d.ts +4 -0
- package/types/helpers/mapObject.d.ts.map +1 -0
- package/types/helpers/mutationLifecycle.d.ts +44 -0
- package/types/helpers/mutationLifecycle.d.ts.map +1 -0
- package/types/helpers/mutationLifecycle.test.d.ts +2 -0
- package/types/helpers/mutationLifecycle.test.d.ts.map +1 -0
- package/types/helpers/platform.d.ts +3 -0
- package/types/helpers/platform.d.ts.map +1 -0
- package/types/helpers/platform.native.d.ts +3 -0
- package/types/helpers/platform.native.d.ts.map +1 -0
- package/types/helpers/recoverZeroClient.d.ts +13 -9
- package/types/helpers/recoverZeroClient.d.ts.map +1 -1
- package/types/helpers/sleep.d.ts +2 -0
- package/types/helpers/sleep.d.ts.map +1 -0
- package/types/helpers/time.d.ts +28 -0
- package/types/helpers/time.d.ts.map +1 -0
- package/types/helpers/tuple.d.ts +2 -0
- package/types/helpers/tuple.d.ts.map +1 -0
- package/types/index.d.ts +3 -1
- package/types/index.d.ts.map +1 -1
- package/types/instanceRegistry.d.ts +1 -0
- package/types/instanceRegistry.d.ts.map +1 -1
- package/types/multi.d.ts +23 -1
- package/types/multi.d.ts.map +1 -1
- package/types/mutations.d.ts +1 -1
- package/types/mutations.d.ts.map +1 -1
- package/types/run.d.ts.map +1 -1
- package/types/server.d.ts +12 -8
- package/types/server.d.ts.map +1 -1
- package/types/state.d.ts +1 -1
- package/types/state.d.ts.map +1 -1
- package/types/types.d.ts +23 -1
- package/types/types.d.ts.map +1 -1
- package/types/vite-plugin.d.ts.map +1 -1
- package/types/where.d.ts.map +1 -1
- package/lint/ssr-guards.js +0 -165
- package/test-fixtures/server-return-types.ts +0 -58
- package/test-fixtures/tsconfig.json +0 -13
- package/tsconfig.json +0 -26
- package/vitest.config.ts +0 -8
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
interface AsyncContext<T> {
|
|
2
|
+
get(): T | undefined
|
|
3
|
+
run<R>(value: T, fn: () => R | Promise<R>): Promise<R>
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function setupAsyncLocalStorage(_AsyncLocalStorage: unknown): void {}
|
|
7
|
+
|
|
8
|
+
// react native implementation - no node:async_hooks available
|
|
9
|
+
export function createAsyncContext<T>(): AsyncContext<T> {
|
|
10
|
+
let currentContext: T | undefined
|
|
11
|
+
const contextStack: (T | undefined)[] = []
|
|
12
|
+
|
|
13
|
+
return {
|
|
14
|
+
get(): T | undefined {
|
|
15
|
+
return currentContext
|
|
16
|
+
},
|
|
17
|
+
async run<R>(value: T, fn: () => R | Promise<R>): Promise<R> {
|
|
18
|
+
const prevContext = currentContext
|
|
19
|
+
currentContext = value
|
|
20
|
+
contextStack.push(prevContext)
|
|
21
|
+
|
|
22
|
+
// store original Promise methods
|
|
23
|
+
const OriginalPromise = Promise
|
|
24
|
+
const OriginalThen = OriginalPromise.prototype.then
|
|
25
|
+
const OriginalCatch = OriginalPromise.prototype.catch
|
|
26
|
+
const OriginalFinally = OriginalPromise.prototype.finally
|
|
27
|
+
|
|
28
|
+
function wrapCallback(
|
|
29
|
+
callback: Function | undefined | null,
|
|
30
|
+
context: T | undefined
|
|
31
|
+
): Function | undefined | null {
|
|
32
|
+
if (!callback) return callback
|
|
33
|
+
return (...args: any[]) => {
|
|
34
|
+
const prevContext = currentContext
|
|
35
|
+
currentContext = context
|
|
36
|
+
try {
|
|
37
|
+
return callback(...args)
|
|
38
|
+
} finally {
|
|
39
|
+
currentContext = prevContext
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// patch Promise methods to capture and restore context
|
|
45
|
+
// eslint-disable-next-line no-then-property -- intentional patching for context propagation
|
|
46
|
+
OriginalPromise.prototype.then = function (
|
|
47
|
+
this: Promise<any>,
|
|
48
|
+
onFulfilled?: any,
|
|
49
|
+
onRejected?: any
|
|
50
|
+
): Promise<any> {
|
|
51
|
+
const context = currentContext
|
|
52
|
+
return OriginalThen.call(
|
|
53
|
+
this,
|
|
54
|
+
wrapCallback(onFulfilled, context) as any,
|
|
55
|
+
wrapCallback(onRejected, context) as any
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
OriginalPromise.prototype.catch = function (
|
|
60
|
+
this: Promise<any>,
|
|
61
|
+
onRejected?: any
|
|
62
|
+
): Promise<any> {
|
|
63
|
+
const context = currentContext
|
|
64
|
+
return OriginalCatch.call(this, wrapCallback(onRejected, context) as any)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
OriginalPromise.prototype.finally = function (
|
|
68
|
+
this: Promise<any>,
|
|
69
|
+
onFinally?: any
|
|
70
|
+
): Promise<any> {
|
|
71
|
+
const context = currentContext
|
|
72
|
+
return OriginalFinally.call(this, wrapCallback(onFinally, context) as any)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const result = await fn()
|
|
77
|
+
return result
|
|
78
|
+
} finally {
|
|
79
|
+
// restore original Promise methods
|
|
80
|
+
// eslint-disable-next-line no-then-property -- restoring original methods
|
|
81
|
+
OriginalPromise.prototype.then = OriginalThen
|
|
82
|
+
OriginalPromise.prototype.catch = OriginalCatch
|
|
83
|
+
OriginalPromise.prototype.finally = OriginalFinally
|
|
84
|
+
|
|
85
|
+
contextStack.pop()
|
|
86
|
+
currentContext = prevContext
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { IS_SERVER_RUNTIME } from './platform'
|
|
2
|
+
|
|
3
|
+
interface AsyncContext<T> {
|
|
4
|
+
get(): T | undefined
|
|
5
|
+
run<R>(value: T, fn: () => R | Promise<R>): Promise<R>
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface NodeAsyncLocalStorage<T> {
|
|
9
|
+
getStore(): T | undefined
|
|
10
|
+
run<R>(store: T, callback: () => R): R
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface AsyncLocalStorageConstructor {
|
|
14
|
+
new <T>(): NodeAsyncLocalStorage<T>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let nodeAsyncLocalStorageCache: AsyncLocalStorageConstructor | null = null
|
|
18
|
+
let configuredAsyncLocalStorage: AsyncLocalStorageConstructor | null = null
|
|
19
|
+
|
|
20
|
+
// hide from vite/esbuild static analysis to avoid browser compat warning
|
|
21
|
+
const nodeModuleId = ['node', 'async_hooks'].join(':')
|
|
22
|
+
|
|
23
|
+
export function setupAsyncLocalStorage(
|
|
24
|
+
AsyncLocalStorage: AsyncLocalStorageConstructor | null
|
|
25
|
+
): void {
|
|
26
|
+
configuredAsyncLocalStorage = AsyncLocalStorage
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function getNodeAsyncLocalStorage(): Promise<AsyncLocalStorageConstructor | null> {
|
|
30
|
+
if (!nodeAsyncLocalStorageCache) {
|
|
31
|
+
try {
|
|
32
|
+
const module = await import(/* @vite-ignore */ nodeModuleId)
|
|
33
|
+
nodeAsyncLocalStorageCache =
|
|
34
|
+
module.AsyncLocalStorage as AsyncLocalStorageConstructor
|
|
35
|
+
} catch {
|
|
36
|
+
return null
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return nodeAsyncLocalStorageCache
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function createAsyncContext<T>(): AsyncContext<T> {
|
|
43
|
+
if (IS_SERVER_RUNTIME) {
|
|
44
|
+
let storage: NodeAsyncLocalStorage<T> | null = null
|
|
45
|
+
|
|
46
|
+
const storageReady = Promise.resolve(configuredAsyncLocalStorage)
|
|
47
|
+
.then((AsyncLocalStorage) => AsyncLocalStorage || getNodeAsyncLocalStorage())
|
|
48
|
+
.then((AsyncLocalStorage) => {
|
|
49
|
+
if (AsyncLocalStorage && !storage) {
|
|
50
|
+
storage = new AsyncLocalStorage<T>()
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
get(): T | undefined {
|
|
56
|
+
if (!storage) {
|
|
57
|
+
throw new Error(`AsyncContext storage not initialized`)
|
|
58
|
+
}
|
|
59
|
+
return storage.getStore()
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
async run<R>(value: T, fn: () => R | Promise<R>): Promise<R> {
|
|
63
|
+
if (!storage) {
|
|
64
|
+
await storageReady
|
|
65
|
+
}
|
|
66
|
+
if (!storage) {
|
|
67
|
+
throw new Error(`AsyncContext storage unavailable in server runtime`)
|
|
68
|
+
}
|
|
69
|
+
return storage.run(value, fn)
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
} else {
|
|
73
|
+
// browser implementation using promise patching
|
|
74
|
+
return createBrowserAsyncContext<T>()
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function createBrowserAsyncContext<T>(): AsyncContext<T> {
|
|
79
|
+
let currentContext: T | undefined
|
|
80
|
+
const contextStack: (T | undefined)[] = []
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
get(): T | undefined {
|
|
84
|
+
return currentContext
|
|
85
|
+
},
|
|
86
|
+
async run<R>(value: T, fn: () => R | Promise<R>): Promise<R> {
|
|
87
|
+
const prevContext = currentContext
|
|
88
|
+
currentContext = value
|
|
89
|
+
contextStack.push(prevContext)
|
|
90
|
+
|
|
91
|
+
// store original Promise methods
|
|
92
|
+
const OriginalPromise = Promise
|
|
93
|
+
const OriginalThen = OriginalPromise.prototype.then
|
|
94
|
+
const OriginalCatch = OriginalPromise.prototype.catch
|
|
95
|
+
const OriginalFinally = OriginalPromise.prototype.finally
|
|
96
|
+
|
|
97
|
+
function wrapCallback(
|
|
98
|
+
callback: Function | undefined | null,
|
|
99
|
+
context: T | undefined
|
|
100
|
+
): Function | undefined | null {
|
|
101
|
+
if (!callback) return callback
|
|
102
|
+
return (...args: any[]) => {
|
|
103
|
+
const prevContext = currentContext
|
|
104
|
+
currentContext = context
|
|
105
|
+
try {
|
|
106
|
+
return callback(...args)
|
|
107
|
+
} finally {
|
|
108
|
+
currentContext = prevContext
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// patch Promise methods to capture and restore context
|
|
114
|
+
// eslint-disable-next-line no-then-property -- intentional patching for context propagation
|
|
115
|
+
OriginalPromise.prototype.then = function (
|
|
116
|
+
this: Promise<any>,
|
|
117
|
+
onFulfilled?: any,
|
|
118
|
+
onRejected?: any
|
|
119
|
+
): Promise<any> {
|
|
120
|
+
const context = currentContext
|
|
121
|
+
return OriginalThen.call(
|
|
122
|
+
this,
|
|
123
|
+
wrapCallback(onFulfilled, context) as any,
|
|
124
|
+
wrapCallback(onRejected, context) as any
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
OriginalPromise.prototype.catch = function (
|
|
129
|
+
this: Promise<any>,
|
|
130
|
+
onRejected?: any
|
|
131
|
+
): Promise<any> {
|
|
132
|
+
const context = currentContext
|
|
133
|
+
return OriginalCatch.call(this, wrapCallback(onRejected, context) as any)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
OriginalPromise.prototype.finally = function (
|
|
137
|
+
this: Promise<any>,
|
|
138
|
+
onFinally?: any
|
|
139
|
+
): Promise<any> {
|
|
140
|
+
const context = currentContext
|
|
141
|
+
return OriginalFinally.call(this, wrapCallback(onFinally, context) as any)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
const result = await fn()
|
|
146
|
+
return result
|
|
147
|
+
} finally {
|
|
148
|
+
// restore original Promise methods
|
|
149
|
+
// eslint-disable-next-line no-then-property -- restoring original methods
|
|
150
|
+
OriginalPromise.prototype.then = OriginalThen
|
|
151
|
+
OriginalPromise.prototype.catch = OriginalCatch
|
|
152
|
+
OriginalPromise.prototype.finally = OriginalFinally
|
|
153
|
+
|
|
154
|
+
contextStack.pop()
|
|
155
|
+
currentContext = prevContext
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sleep } from '
|
|
1
|
+
import { sleep } from './sleep'
|
|
2
2
|
|
|
3
3
|
import type { Query, Row } from '@rocicorp/zero'
|
|
4
4
|
|
|
@@ -18,7 +18,7 @@ export function createBatchQuery(server: ServerWithQuery) {
|
|
|
18
18
|
chunk: number
|
|
19
19
|
pause?: number
|
|
20
20
|
stopAfter?: number
|
|
21
|
-
} = { chunk: 20 }
|
|
21
|
+
} = { chunk: 20 }
|
|
22
22
|
) {
|
|
23
23
|
let hasMore = true
|
|
24
24
|
let last: Item | null = null
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { mapObject, time } from '@take-out/helpers'
|
|
2
|
-
|
|
3
1
|
import { getAuthData } from '../state'
|
|
2
|
+
import { mapObject } from './mapObject'
|
|
4
3
|
import { runWithContext } from './mutatorContext'
|
|
4
|
+
import { time } from './time'
|
|
5
5
|
|
|
6
6
|
import type {
|
|
7
7
|
AuthData,
|
|
@@ -26,6 +26,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
26
26
|
authData,
|
|
27
27
|
createServerActions,
|
|
28
28
|
enqueueTask = () => {},
|
|
29
|
+
enqueueAction = () => {},
|
|
29
30
|
can,
|
|
30
31
|
models,
|
|
31
32
|
validateMutation,
|
|
@@ -37,6 +38,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
37
38
|
can: Can
|
|
38
39
|
models: Models
|
|
39
40
|
enqueueTask?: NonNullable<MutatorContext['server']>['enqueueTask']
|
|
41
|
+
enqueueAction?: NonNullable<MutatorContext['server']>['enqueueAction']
|
|
40
42
|
createServerActions?: () => Record<string, any>
|
|
41
43
|
validateMutation?: ValidateMutationFn
|
|
42
44
|
/** valibot schemas keyed by model.mutationName, auto-validates args before running */
|
|
@@ -65,6 +67,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
65
67
|
? ({
|
|
66
68
|
actions: serverActions || {},
|
|
67
69
|
enqueueTask,
|
|
70
|
+
enqueueAction,
|
|
68
71
|
} as MutatorContext['server'])
|
|
69
72
|
: undefined,
|
|
70
73
|
}
|
|
@@ -80,7 +83,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
80
83
|
|
|
81
84
|
function withDevelopmentLogging<Args extends any[]>(
|
|
82
85
|
name: string,
|
|
83
|
-
fn: (...args: Args) => Promise<void
|
|
86
|
+
fn: (...args: Args) => Promise<void>
|
|
84
87
|
) {
|
|
85
88
|
if (process.env.NODE_ENV !== 'development' && !process.env.IS_TESTING) {
|
|
86
89
|
return fn
|
|
@@ -131,7 +134,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
131
134
|
fn: (...args: Args) => Promise<void>,
|
|
132
135
|
// don't want this too high - zero runs mutations in order and waits for the last to finish it seems
|
|
133
136
|
// so if one mutation gets stuck it will just sit there
|
|
134
|
-
timeoutMs: number = time.ms.minutes(1)
|
|
137
|
+
timeoutMs: number = time.ms.minutes(1)
|
|
135
138
|
) {
|
|
136
139
|
return async (...args: Args): Promise<void> => {
|
|
137
140
|
let timeoutId: ReturnType<typeof setTimeout> | undefined
|
|
@@ -152,7 +155,7 @@ export function createMutators<Models extends GenericModels>({
|
|
|
152
155
|
function withValidation<Args extends any[]>(
|
|
153
156
|
tableName: string,
|
|
154
157
|
mutatorName: string,
|
|
155
|
-
fn: (...args: Args) => Promise<void
|
|
158
|
+
fn: (...args: Args) => Promise<void>
|
|
156
159
|
) {
|
|
157
160
|
const validator = mutationValidators?.[tableName]?.[mutatorName]
|
|
158
161
|
|
|
@@ -200,9 +203,9 @@ export function createMutators<Models extends GenericModels>({
|
|
|
200
203
|
withValidation(
|
|
201
204
|
moduleName,
|
|
202
205
|
name,
|
|
203
|
-
withContext((...args: any[]) => getDynamicFn()(...args))
|
|
204
|
-
)
|
|
205
|
-
)
|
|
206
|
+
withContext((...args: any[]) => getDynamicFn()(...args))
|
|
207
|
+
)
|
|
208
|
+
)
|
|
206
209
|
)
|
|
207
210
|
}
|
|
208
211
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const ellipsis = (str: string, maxLength: number): string => {
|
|
2
|
+
// avoid running replace on huge string if its long
|
|
3
|
+
const shortened = str.length > 500 ? str.slice(0, 500) : str
|
|
4
|
+
const cleaned = shortened.replace(/\s+/g, ' ').trim()
|
|
5
|
+
if (cleaned.length > maxLength) {
|
|
6
|
+
return cleaned.substring(0, maxLength - 3) + '…'
|
|
7
|
+
}
|
|
8
|
+
return cleaned
|
|
9
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { dequal } from 'dequal'
|
|
2
|
+
import { useLayoutEffect, useState } from 'react'
|
|
3
|
+
|
|
4
|
+
type EmitterOptions<T> = {
|
|
5
|
+
name: string
|
|
6
|
+
silent?: boolean
|
|
7
|
+
comparator?: (a: T, b: T) => boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type CreateEmitterOptions<T> = Omit<EmitterOptions<T>, 'name'>
|
|
11
|
+
|
|
12
|
+
export class Emitter<const T> {
|
|
13
|
+
private listeners = new Set<(value: T) => void>()
|
|
14
|
+
value: T
|
|
15
|
+
options?: EmitterOptions<T>
|
|
16
|
+
|
|
17
|
+
constructor(value: T, options?: EmitterOptions<T>) {
|
|
18
|
+
this.value = value
|
|
19
|
+
this.options = options
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
listen = (listener: (value: T) => void): (() => void) => {
|
|
23
|
+
this.listeners.add(listener)
|
|
24
|
+
return () => {
|
|
25
|
+
this.listeners.delete(listener)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
emit = (next: T): void => {
|
|
30
|
+
if (process.env.NODE_ENV === 'development') {
|
|
31
|
+
setCache(this, next)
|
|
32
|
+
}
|
|
33
|
+
const compare = this.options?.comparator
|
|
34
|
+
if (compare) {
|
|
35
|
+
if (this.value && compare(this.value, next)) {
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
} else if (this.value === next && process.env.NODE_ENV === 'development') {
|
|
39
|
+
console.warn(
|
|
40
|
+
`[emitter] ${this.options?.name} no comparator option but received same value`
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
this.value = next
|
|
44
|
+
this.listeners.forEach((listener) => listener(next))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function createEmitter<T>(
|
|
49
|
+
name: string,
|
|
50
|
+
defaultValue: T,
|
|
51
|
+
options?: CreateEmitterOptions<T>
|
|
52
|
+
): Emitter<T> {
|
|
53
|
+
const existing = createOrUpdateCache(name, defaultValue) as T
|
|
54
|
+
return new Emitter(existing || defaultValue, { name, ...options })
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type EmitterValue<E extends Emitter<any>> = E extends Emitter<infer Value> ? Value : never
|
|
58
|
+
|
|
59
|
+
export function useEmitterValue<E extends Emitter<any>>(
|
|
60
|
+
emitter: E,
|
|
61
|
+
options?: { disable?: boolean }
|
|
62
|
+
): EmitterValue<E> {
|
|
63
|
+
const disabled = options?.disable
|
|
64
|
+
const [state, setState] = useState<EmitterValue<E>>(() => emitter.value)
|
|
65
|
+
|
|
66
|
+
useLayoutEffect(() => {
|
|
67
|
+
if (disabled) return
|
|
68
|
+
|
|
69
|
+
if (emitter.value !== state) {
|
|
70
|
+
setState(emitter.value)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return emitter.listen(setState)
|
|
74
|
+
}, [disabled, emitter])
|
|
75
|
+
|
|
76
|
+
return state
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const hmrCache =
|
|
80
|
+
process.env.NODE_ENV === 'development'
|
|
81
|
+
? new Map<string, { originalDefaultValue: unknown; currentValue: unknown }>()
|
|
82
|
+
: null
|
|
83
|
+
|
|
84
|
+
function setCache(emitter: Emitter<any>, value: unknown) {
|
|
85
|
+
const name = emitter.options?.name
|
|
86
|
+
if (!name) return
|
|
87
|
+
const cache = hmrCache?.get(name)
|
|
88
|
+
if (!cache) return
|
|
89
|
+
cache.currentValue = value
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function createOrUpdateCache(name: string, defaultValueProp: unknown) {
|
|
93
|
+
const existing = hmrCache?.get(name)
|
|
94
|
+
const defaultValue = dequal(existing?.originalDefaultValue, defaultValueProp)
|
|
95
|
+
? existing?.currentValue
|
|
96
|
+
: defaultValueProp
|
|
97
|
+
|
|
98
|
+
if (!existing) {
|
|
99
|
+
hmrCache?.set(name, {
|
|
100
|
+
originalDefaultValue: defaultValueProp,
|
|
101
|
+
currentValue: defaultValue,
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return defaultValue
|
|
106
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EnsureError } from './errors'
|
|
2
|
+
|
|
3
|
+
export function ensure<T>(
|
|
4
|
+
value: T,
|
|
5
|
+
msg = ''
|
|
6
|
+
): asserts value is Exclude<T, null | undefined | false> {
|
|
7
|
+
if (!value) {
|
|
8
|
+
throw new EnsureError(`ensure() invalid: (${value}): ${msg} ${new Error().stack}`)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class AbortError extends Error {
|
|
2
|
+
constructor(message = '') {
|
|
3
|
+
super(message)
|
|
4
|
+
this.name = 'AbortError'
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export class EnsureError extends Error {
|
|
9
|
+
constructor(message: string) {
|
|
10
|
+
super(message)
|
|
11
|
+
this.name = 'EnsureError'
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
export const getCurrentComponentStack = (format?: 'short'): string => {
|
|
4
|
+
if (process.env.NODE_ENV === 'development') {
|
|
5
|
+
// react 19.1+ exposes captureOwnerStack as a public api
|
|
6
|
+
const captureOwnerStack = (React as Record<string, any>).captureOwnerStack
|
|
7
|
+
const stack = typeof captureOwnerStack === 'function' ? captureOwnerStack() : null
|
|
8
|
+
|
|
9
|
+
if (!stack) return ''
|
|
10
|
+
|
|
11
|
+
if (format === 'short') {
|
|
12
|
+
return formatStackToShort(stack)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return stack
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return `(prod, no stack)`
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const formatStackToShort = (stack: string): string => {
|
|
22
|
+
if (process.env.NODE_ENV === 'development') {
|
|
23
|
+
const lines = stack
|
|
24
|
+
// huge stack was causing issues
|
|
25
|
+
.slice(0, 6000)
|
|
26
|
+
.split('\n')
|
|
27
|
+
|
|
28
|
+
const componentNames: string[] = []
|
|
29
|
+
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
// Extract component names from patterns like "at ComponentName ("
|
|
32
|
+
// Also handle cases like "at Route((chat))" or "Route() ("
|
|
33
|
+
const match = line.match(/\s*at\s+([A-Z][a-zA-Z0-9_]*)\s*\(/)
|
|
34
|
+
if (match) {
|
|
35
|
+
const componentName = match[1]
|
|
36
|
+
// Filter out framework internals and keep user components
|
|
37
|
+
if (
|
|
38
|
+
componentName &&
|
|
39
|
+
componentName !== 'Array' &&
|
|
40
|
+
componentName !== 'Root' &&
|
|
41
|
+
componentName !== 'Route'
|
|
42
|
+
) {
|
|
43
|
+
componentNames.push(componentName)
|
|
44
|
+
if (componentNames.length > 10) {
|
|
45
|
+
// avoid too many
|
|
46
|
+
break
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return componentNames.join(' < ')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return stack
|
|
56
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper to store a value that's not duplicated within the global context Uses
|
|
3
|
+
* a symbol stored on `globalThis` to achieve it.
|
|
4
|
+
*
|
|
5
|
+
* There's two main uses for this (for us, so far):
|
|
6
|
+
*
|
|
7
|
+
* - in dev mode, HMR re-runs files, but you may want to preserve globals
|
|
8
|
+
*
|
|
9
|
+
* - in published node modules, sometimes Vite or other bundlers can cause
|
|
10
|
+
* duplicate dependencies either through bad setup or heuristics, they may
|
|
11
|
+
* compile a module but then another code path doesn't compile it, so you
|
|
12
|
+
* have duplicate modules. in this case it can be good to just use a
|
|
13
|
+
* globalValue and warn the end-user. because you can't account for ever
|
|
14
|
+
* possible weird configuration, and often fixing that config can be a
|
|
15
|
+
* massive pain in the ass, it's better to retain functionality while
|
|
16
|
+
* warning them so they can fix it at their own pace. this often happens
|
|
17
|
+
* with WeakMaps.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export function globalValue<T>(
|
|
22
|
+
key: string,
|
|
23
|
+
factory: () => T,
|
|
24
|
+
opts?: {
|
|
25
|
+
warnMessage?: string
|
|
26
|
+
}
|
|
27
|
+
): T {
|
|
28
|
+
const symbolKey = Symbol.for(key)
|
|
29
|
+
const g = globalThis as Record<symbol, unknown>
|
|
30
|
+
|
|
31
|
+
if (!g[symbolKey]) {
|
|
32
|
+
g[symbolKey] = factory()
|
|
33
|
+
} else {
|
|
34
|
+
if (opts?.warnMessage) {
|
|
35
|
+
console.warn(`[globalValue] ${opts.warnMessage}`)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return g[symbolKey] as T
|
|
40
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function mapObject<T extends Record<string, any>, R>(
|
|
2
|
+
obj: T,
|
|
3
|
+
fn: <K extends keyof T>(value: T[K], key: K) => R
|
|
4
|
+
): { [K in keyof T]: R } {
|
|
5
|
+
const result = {} as { [K in keyof T]: R }
|
|
6
|
+
|
|
7
|
+
for (const key in obj) {
|
|
8
|
+
if (Object.hasOwn(obj, key)) {
|
|
9
|
+
result[key] = fn(obj[key], key)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return result
|
|
14
|
+
}
|