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
|
@@ -33,15 +33,19 @@ var import_vitest = require("vitest");
|
|
|
33
33
|
var import_generate = require("./generate.native.js");
|
|
34
34
|
const import_meta = {};
|
|
35
35
|
var testDir = (0, import_path.join)((0, import_os.tmpdir)(), "on-zero-test-" + Date.now());
|
|
36
|
-
(
|
|
37
|
-
(0, import_fs.mkdirSync)((0, import_path.
|
|
36
|
+
function writeFileSync(path, content) {
|
|
37
|
+
(0, import_fs.mkdirSync)((0, import_path.dirname)(path), {
|
|
38
38
|
recursive: true
|
|
39
39
|
});
|
|
40
|
-
(0, import_fs.
|
|
40
|
+
(0, import_fs.writeFileSync)(path, content);
|
|
41
|
+
}
|
|
42
|
+
(0, import_vitest.beforeEach)(function () {
|
|
43
|
+
(0, import_fs.mkdirSync)(testDir, {
|
|
41
44
|
recursive: true
|
|
42
45
|
});
|
|
43
46
|
});
|
|
44
47
|
(0, import_vitest.afterEach)(function () {
|
|
48
|
+
import_vitest.vi.restoreAllMocks();
|
|
45
49
|
(0, import_fs.rmSync)(testDir, {
|
|
46
50
|
recursive: true,
|
|
47
51
|
force: true
|
|
@@ -49,7 +53,7 @@ var testDir = (0, import_path.join)((0, import_os.tmpdir)(), "on-zero-test-" + D
|
|
|
49
53
|
});
|
|
50
54
|
(0, import_vitest.describe)("generate", function () {
|
|
51
55
|
(0, import_vitest.test)("generates models.ts, types.ts, tables.ts from model files", async function () {
|
|
52
|
-
|
|
56
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `
|
|
53
57
|
import { table, string, boolean } from 'on-zero'
|
|
54
58
|
|
|
55
59
|
export const schema = table('post', {
|
|
@@ -58,7 +62,7 @@ export const schema = table('post', {
|
|
|
58
62
|
published: boolean(),
|
|
59
63
|
})
|
|
60
64
|
`);
|
|
61
|
-
|
|
65
|
+
writeFileSync((0, import_path.join)(testDir, "comment/mutations.ts"), `
|
|
62
66
|
import { table, string } from 'on-zero'
|
|
63
67
|
|
|
64
68
|
export const schema = table('comment', {
|
|
@@ -67,8 +71,8 @@ export const schema = table('comment', {
|
|
|
67
71
|
body: string(),
|
|
68
72
|
})
|
|
69
73
|
`);
|
|
70
|
-
|
|
71
|
-
|
|
74
|
+
writeFileSync((0, import_path.join)(testDir, "post/post.test.ts"), `throw new Error('test files must not be generated as models')`);
|
|
75
|
+
writeFileSync((0, import_path.join)(testDir, "comment/comment.spec.ts"), `throw new Error('spec files must not be generated as queries')`);
|
|
72
76
|
var result = await (0, import_generate.generate)({
|
|
73
77
|
dir: testDir,
|
|
74
78
|
silent: true
|
|
@@ -80,20 +84,20 @@ export const schema = table('comment', {
|
|
|
80
84
|
(0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/types.ts"))).toBe(true);
|
|
81
85
|
(0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/tables.ts"))).toBe(true);
|
|
82
86
|
var modelsContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/models.ts"), "utf-8");
|
|
83
|
-
(0, import_vitest.expect)(modelsContent).toContain("import * as comment from '../
|
|
84
|
-
(0, import_vitest.expect)(modelsContent).toContain("import * as post from '../
|
|
87
|
+
(0, import_vitest.expect)(modelsContent).toContain("import * as comment from '../comment/mutations'");
|
|
88
|
+
(0, import_vitest.expect)(modelsContent).toContain("import * as post from '../post/mutations'");
|
|
85
89
|
(0, import_vitest.expect)(modelsContent).not.toContain("post.test");
|
|
86
90
|
(0, import_vitest.expect)(modelsContent).toContain("export const models = {");
|
|
87
91
|
var typesContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/types.ts"), "utf-8");
|
|
88
92
|
(0, import_vitest.expect)(typesContent).toContain("export type Post = TableInsertRow<typeof schema.post>");
|
|
89
93
|
(0, import_vitest.expect)(typesContent).toContain("export type Comment = TableInsertRow<typeof schema.comment>");
|
|
90
94
|
var tablesContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/tables.ts"), "utf-8");
|
|
91
|
-
(0, import_vitest.expect)(tablesContent).toContain("export { schema as post } from '../
|
|
92
|
-
(0, import_vitest.expect)(tablesContent).toContain("export { schema as comment } from '../
|
|
95
|
+
(0, import_vitest.expect)(tablesContent).toContain("export { schema as post } from '../post/mutations'");
|
|
96
|
+
(0, import_vitest.expect)(tablesContent).toContain("export { schema as comment } from '../comment/mutations'");
|
|
93
97
|
});
|
|
94
98
|
(0, import_vitest.test)("generates query validators from query files", async function () {
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
|
|
100
|
+
writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `
|
|
97
101
|
import { zero } from '../zero'
|
|
98
102
|
|
|
99
103
|
export const allPosts = () => zero.query.post
|
|
@@ -111,7 +115,8 @@ export const postsByAuthor = ({ authorId, limit }: { authorId: string; limit?: n
|
|
|
111
115
|
(0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/groupedQueries.ts"))).toBe(true);
|
|
112
116
|
(0, import_vitest.expect)((0, import_fs.existsSync)((0, import_path.join)(testDir, "generated/syncedQueries.ts"))).toBe(true);
|
|
113
117
|
var groupedContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/groupedQueries.ts"), "utf-8");
|
|
114
|
-
(0, import_vitest.expect)(groupedContent).toContain("
|
|
118
|
+
(0, import_vitest.expect)(groupedContent).toContain("import * as postSource from '../post/queries'");
|
|
119
|
+
(0, import_vitest.expect)(groupedContent).toContain("postById: postSource.postById");
|
|
115
120
|
var syncedContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/syncedQueries.ts"), "utf-8");
|
|
116
121
|
(0, import_vitest.expect)(syncedContent).toContain("allPosts: defineQuery");
|
|
117
122
|
(0, import_vitest.expect)(syncedContent).toContain("postById: defineQuery");
|
|
@@ -119,8 +124,8 @@ export const postsByAuthor = ({ authorId, limit }: { authorId: string; limit?: n
|
|
|
119
124
|
(0, import_vitest.expect)(syncedContent).toContain("v.object");
|
|
120
125
|
});
|
|
121
126
|
(0, import_vitest.test)("skips permission exports in queries", async function () {
|
|
122
|
-
|
|
123
|
-
|
|
127
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
|
|
128
|
+
writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `
|
|
124
129
|
export const permission = () => ({ canRead: true })
|
|
125
130
|
export const allPosts = () => zero.query.post
|
|
126
131
|
`);
|
|
@@ -134,20 +139,20 @@ export const allPosts = () => zero.query.post
|
|
|
134
139
|
(0, import_vitest.expect)(syncedContent).not.toContain("permission:");
|
|
135
140
|
});
|
|
136
141
|
(0, import_vitest.test)("aliases user import without changing the model key", async function () {
|
|
137
|
-
|
|
142
|
+
writeFileSync((0, import_path.join)(testDir, "user/mutations.ts"), `export const schema = table('user', { id: string(), name: string() })`);
|
|
138
143
|
await (0, import_generate.generate)({
|
|
139
144
|
dir: testDir,
|
|
140
145
|
silent: true
|
|
141
146
|
});
|
|
142
147
|
var modelsContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/models.ts"), "utf-8");
|
|
143
|
-
(0, import_vitest.expect)(modelsContent).toContain("import * as userPublic from '../
|
|
148
|
+
(0, import_vitest.expect)(modelsContent).toContain("import * as userPublic from '../user/mutations'");
|
|
144
149
|
(0, import_vitest.expect)(modelsContent).toContain("user: userPublic,");
|
|
145
150
|
(0, import_vitest.expect)(modelsContent).not.toContain("\n userPublic,");
|
|
146
151
|
var typesContent = (0, import_fs.readFileSync)((0, import_path.join)(testDir, "generated/types.ts"), "utf-8");
|
|
147
152
|
(0, import_vitest.expect)(typesContent).toContain("typeof schema.userPublic");
|
|
148
153
|
});
|
|
149
154
|
(0, import_vitest.test)("runs after command when files change", async function () {
|
|
150
|
-
|
|
155
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
|
|
151
156
|
var markerFile = (0, import_path.join)(testDir, "after-ran");
|
|
152
157
|
var result = await (0, import_generate.generate)({
|
|
153
158
|
dir: testDir,
|
|
@@ -158,7 +163,7 @@ export const allPosts = () => zero.query.post
|
|
|
158
163
|
(0, import_vitest.expect)((0, import_fs.existsSync)(markerFile)).toBe(true);
|
|
159
164
|
});
|
|
160
165
|
(0, import_vitest.test)("does not regenerate when nothing changed", async function () {
|
|
161
|
-
|
|
166
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
|
|
162
167
|
var first = await (0, import_generate.generate)({
|
|
163
168
|
dir: testDir,
|
|
164
169
|
silent: true
|
|
@@ -171,8 +176,8 @@ export const allPosts = () => zero.query.post
|
|
|
171
176
|
(0, import_vitest.expect)(second.filesChanged).toBe(0);
|
|
172
177
|
});
|
|
173
178
|
(0, import_vitest.test)("force regenerates without source changes", async function () {
|
|
174
|
-
|
|
175
|
-
|
|
179
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
|
|
180
|
+
writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `export const allPosts = () => zero.query.post`);
|
|
176
181
|
await (0, import_generate.generate)({
|
|
177
182
|
dir: testDir,
|
|
178
183
|
silent: true
|
|
@@ -187,9 +192,333 @@ export const allPosts = () => zero.query.post
|
|
|
187
192
|
(0, import_vitest.expect)((0, import_fs.existsSync)(syncedQueriesPath)).toBe(true);
|
|
188
193
|
});
|
|
189
194
|
});
|
|
195
|
+
(0, import_vitest.describe)("instance layout", function () {
|
|
196
|
+
var dataDir = function dataDir2() {
|
|
197
|
+
return (0, import_path.join)(testDir, "src/data");
|
|
198
|
+
};
|
|
199
|
+
(0, import_vitest.test)("discovers file and folder namespaces and emits related sync closure", async function () {
|
|
200
|
+
writeFileSync((0, import_path.join)(dataDir(), "control/reaction.ts"), `export const allReactions = () => zql.reaction`);
|
|
201
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
|
|
202
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message/queries.ts"), `
|
|
203
|
+
const unused = () => zql.message.related('notARealRelation')
|
|
204
|
+
const withComments = () => zql.message.related('comments', (q) => q.related('author'))
|
|
205
|
+
export const messages = () => withComments()
|
|
206
|
+
`);
|
|
207
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message/mutations.ts"), `export const schema = table('message').columns({ id: string(), projectId: string() })`);
|
|
208
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message/helpers.ts"), `export const privateHelper = () => 'ignored'`);
|
|
209
|
+
writeFileSync((0, import_path.join)(testDir, "src/database/relations.ts"), `
|
|
210
|
+
export const relations = defineRelations(schema, (r) => ({
|
|
211
|
+
message: { comments: r.many.comment({}) },
|
|
212
|
+
comment: { author: r.one.userPublic({}) },
|
|
213
|
+
}))
|
|
214
|
+
`);
|
|
215
|
+
writeFileSync((0, import_path.join)(testDir, "src/database/schema.ts"), `
|
|
216
|
+
export const comment = sqliteTable('comment', { id: text(), projectId: text() })
|
|
217
|
+
export const userPublic = sqliteTable('user_public', { id: text(), projectId: text() })
|
|
218
|
+
`);
|
|
219
|
+
var membership = await (0, import_generate.deriveDataMembership)({
|
|
220
|
+
dir: dataDir()
|
|
221
|
+
});
|
|
222
|
+
(0, import_vitest.expect)(membership.allTables).toEqual(["comment", "message", "reaction", "userPublic"]);
|
|
223
|
+
(0, import_vitest.expect)(membership.instances.project).toEqual({
|
|
224
|
+
tables: ["message"],
|
|
225
|
+
syncTables: ["comment", "message", "userPublic"],
|
|
226
|
+
supportTables: [],
|
|
227
|
+
scope: "projectId"
|
|
228
|
+
});
|
|
229
|
+
await (0, import_generate.generate)({
|
|
230
|
+
dir: dataDir(),
|
|
231
|
+
silent: true
|
|
232
|
+
});
|
|
233
|
+
var grouped = (0, import_fs.readFileSync)((0, import_path.join)(dataDir(), "generated/groupedQueries.ts"), "utf8");
|
|
234
|
+
(0, import_vitest.expect)(grouped).toContain("from '../control/reaction'");
|
|
235
|
+
(0, import_vitest.expect)(grouped).toContain("from '../project/message/queries'");
|
|
236
|
+
(0, import_vitest.expect)(grouped).not.toContain("privateHelper");
|
|
237
|
+
var manifest = (0, import_fs.readFileSync)((0, import_path.join)(dataDir(), "generated/instances.ts"), "utf8");
|
|
238
|
+
(0, import_vitest.expect)(manifest).toContain("control: {");
|
|
239
|
+
(0, import_vitest.expect)(manifest).toContain("project: {");
|
|
240
|
+
(0, import_vitest.expect)(manifest).toContain('tables: ["message"]');
|
|
241
|
+
(0, import_vitest.expect)(manifest).toContain('syncTables: ["comment","message","userPublic"]');
|
|
242
|
+
(0, import_vitest.expect)(manifest).toContain(`defaultVisibility: (value: string) => ({ column: "projectId", value })`);
|
|
243
|
+
});
|
|
244
|
+
(0, import_vitest.test)("derives single-file namespaces from data exports", async function () {
|
|
245
|
+
writeFileSync((0, import_path.join)(dataDir(), "server.ts"), `export const serverRows = () => zql.server`);
|
|
246
|
+
writeFileSync((0, import_path.join)(dataDir(), "types.ts"), `export const formatRow = (value: string) => value`);
|
|
247
|
+
writeFileSync((0, import_path.join)(dataDir(), "auth.ts"), `export function authId(auth: { id: string }) { return auth.id }`);
|
|
248
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
249
|
+
dir: dataDir()
|
|
250
|
+
})).resolves.toEqual({
|
|
251
|
+
instances: {
|
|
252
|
+
default: {
|
|
253
|
+
tables: ["server"],
|
|
254
|
+
syncTables: ["server"],
|
|
255
|
+
supportTables: [],
|
|
256
|
+
scope: null
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
allTables: ["server"]
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
(0, import_vitest.test)("warns once and ignores an unparseable non-data file", async function () {
|
|
263
|
+
writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `export const posts = () => zql.post`);
|
|
264
|
+
writeFileSync((0, import_path.join)(dataDir(), "types.ts"), `export type Broken = {`);
|
|
265
|
+
var warn = import_vitest.vi.spyOn(console, "warn").mockImplementation(function () {});
|
|
266
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
267
|
+
dir: dataDir()
|
|
268
|
+
})).resolves.toMatchObject({
|
|
269
|
+
allTables: ["post"]
|
|
270
|
+
});
|
|
271
|
+
(0, import_vitest.expect)(warn).toHaveBeenCalledOnce();
|
|
272
|
+
(0, import_vitest.expect)(warn).toHaveBeenCalledWith("[on-zero] ignoring data/types.ts: no recognized data exports");
|
|
273
|
+
warn.mockRestore();
|
|
274
|
+
});
|
|
275
|
+
(0, import_vitest.test)("derives fileless support tables through mutation helpers", async function () {
|
|
276
|
+
writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `
|
|
277
|
+
import { writeAudit } from './helpers/writeAudit'
|
|
278
|
+
export const posts = () => zql.post
|
|
279
|
+
export const mutate = mutations('post', { save: async (ctx) => writeAudit(ctx.tx) })
|
|
280
|
+
`);
|
|
281
|
+
writeFileSync((0, import_path.join)(dataDir(), "helpers/writeAudit.ts"), `
|
|
282
|
+
import { readSettings } from './readSettings'
|
|
283
|
+
export async function writeAudit(tx: Transaction) {
|
|
284
|
+
await tx.mutate.audit.insert({ id: 'audit' })
|
|
285
|
+
await tx.mutate.post.update({ id: 'post' })
|
|
286
|
+
await tx.mutate[tableName].insert({ id: 'dynamic' })
|
|
287
|
+
return readSettings(tx)
|
|
288
|
+
}
|
|
289
|
+
`);
|
|
290
|
+
writeFileSync((0, import_path.join)(dataDir(), "helpers/readSettings.ts"), `export const readSettings = (tx: Transaction) => tx.query.settings`);
|
|
291
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
292
|
+
dir: dataDir()
|
|
293
|
+
})).resolves.toEqual({
|
|
294
|
+
instances: {
|
|
295
|
+
default: {
|
|
296
|
+
tables: ["post"],
|
|
297
|
+
syncTables: ["post"],
|
|
298
|
+
supportTables: ["audit", "settings"],
|
|
299
|
+
scope: null
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
allTables: ["audit", "post", "settings"]
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
(0, import_vitest.test)("includes a fileless support table in every instance that uses it", async function () {
|
|
306
|
+
writeFileSync((0, import_path.join)(dataDir(), "control/account.ts"), `export const mutate = mutations('account', { save: async (ctx) => ctx.tx.mutate.audit.insert({}) })`);
|
|
307
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
|
|
308
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `
|
|
309
|
+
export const schema = table('message').columns({ id: string(), projectId: string() })
|
|
310
|
+
export const mutate = mutations(schema, permission, {
|
|
311
|
+
save: async (ctx) => ctx.tx.mutate.audit.insert({}),
|
|
312
|
+
})
|
|
313
|
+
`);
|
|
314
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
315
|
+
dir: dataDir()
|
|
316
|
+
})).resolves.toMatchObject({
|
|
317
|
+
instances: {
|
|
318
|
+
control: {
|
|
319
|
+
supportTables: ["audit"]
|
|
320
|
+
},
|
|
321
|
+
project: {
|
|
322
|
+
supportTables: ["audit"]
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
allTables: ["account", "audit", "message"]
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
(0, import_vitest.test)("keeps a configured default instance at the data root", async function () {
|
|
329
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { default: { dir: '.', supportTables: ['accountGithubOrgLink', 'accountRepo', 'usageLedger'] }, project: { scope: 'projectId' } } })`);
|
|
330
|
+
writeFileSync((0, import_path.join)(dataDir(), "account.ts"), `export const accounts = () => zql.account`);
|
|
331
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const schema = table('message').columns({ id: string(), projectId: string() })`);
|
|
332
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
333
|
+
dir: dataDir()
|
|
334
|
+
})).resolves.toEqual({
|
|
335
|
+
instances: {
|
|
336
|
+
default: {
|
|
337
|
+
tables: ["account"],
|
|
338
|
+
syncTables: ["account"],
|
|
339
|
+
supportTables: ["accountGithubOrgLink", "accountRepo", "usageLedger"],
|
|
340
|
+
scope: null
|
|
341
|
+
},
|
|
342
|
+
project: {
|
|
343
|
+
tables: ["message"],
|
|
344
|
+
syncTables: ["message"],
|
|
345
|
+
supportTables: [],
|
|
346
|
+
scope: "projectId"
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
allTables: ["account", "accountGithubOrgLink", "accountRepo", "message", "usageLedger"]
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
(0, import_vitest.test)("emits only relations whose source and target are derived members", async function () {
|
|
353
|
+
writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `export const posts = () => zql.post`);
|
|
354
|
+
writeFileSync((0, import_path.join)(dataDir(), "comment.ts"), `export const comments = () => zql.comment`);
|
|
355
|
+
writeFileSync((0, import_path.join)(testDir, "src/database/relations.ts"), `
|
|
356
|
+
export const relations = defineRelations(schema, (r) => ({
|
|
357
|
+
post: {
|
|
358
|
+
comments: r.many.comment({}),
|
|
359
|
+
privateNotes: r.many.privateNote({}),
|
|
360
|
+
},
|
|
361
|
+
comment: { post: r.one.post({}), author: r.one.privateUser({}) },
|
|
362
|
+
privateNote: { post: r.one.post({}) },
|
|
363
|
+
}))
|
|
364
|
+
`);
|
|
365
|
+
var generated = await (0, import_generate.generateDrizzleSchemaInputFile)({
|
|
366
|
+
dir: dataDir(),
|
|
367
|
+
schemaImportPath: "../../database/schema"
|
|
368
|
+
});
|
|
369
|
+
var runnable = generated.replace(`import { defineRelations } from 'drizzle-orm'`, "").replace(`import * as schema from "../../database/schema"`, "").replace(/export \{[^\n]+\} from [^\n]+/, "").replace("export const relations =", "globalThis.relations =");
|
|
370
|
+
var context = {
|
|
371
|
+
schema: {
|
|
372
|
+
comment: {},
|
|
373
|
+
post: {}
|
|
374
|
+
},
|
|
375
|
+
defineRelations: function defineRelations(_schema, factory) {
|
|
376
|
+
return factory({
|
|
377
|
+
one: new Proxy({}, {
|
|
378
|
+
get: function get(_target, table) {
|
|
379
|
+
return function () {
|
|
380
|
+
return {
|
|
381
|
+
table
|
|
382
|
+
};
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
}),
|
|
386
|
+
many: new Proxy({}, {
|
|
387
|
+
get: function get(_target, table) {
|
|
388
|
+
return function () {
|
|
389
|
+
return {
|
|
390
|
+
table
|
|
391
|
+
};
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
})
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
(0, import_vm.runInNewContext)(runnable, context);
|
|
399
|
+
(0, import_vitest.expect)(context.relations).toEqual({
|
|
400
|
+
comment: {
|
|
401
|
+
post: {
|
|
402
|
+
table: "post"
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
post: {
|
|
406
|
+
comments: {
|
|
407
|
+
table: "comment"
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
(0, import_vitest.test)("rejects a relation that crosses instance ownership", async function () {
|
|
413
|
+
writeFileSync((0, import_path.join)(dataDir(), "control/userPublic.ts"), `export const users = () => zql.userPublic`);
|
|
414
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
|
|
415
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `
|
|
416
|
+
export const schema = table('message').columns({ id: string(), projectId: string() })
|
|
417
|
+
export const messages = () => zql.message.related('author')
|
|
418
|
+
`);
|
|
419
|
+
writeFileSync((0, import_path.join)(testDir, "src/database/relations.ts"), `export const relations = defineRelations(schema, (r) => ({ message: { author: r.one.userPublic({}) } }))`);
|
|
420
|
+
await (0, import_vitest.expect)((0, import_generate.generate)({
|
|
421
|
+
dir: dataDir(),
|
|
422
|
+
silent: true
|
|
423
|
+
})).rejects.toThrow(/message\.messages.*instance 'project'.*userPublic.*instance 'control'/);
|
|
424
|
+
});
|
|
425
|
+
(0, import_vitest.test)("rejects a scoped sync table without the scope column", async function () {
|
|
426
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { project: { scope: 'projectId' } } })`);
|
|
427
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const schema = table('message').columns({ id: string() })`);
|
|
428
|
+
await (0, import_vitest.expect)((0, import_generate.generate)({
|
|
429
|
+
dir: dataDir(),
|
|
430
|
+
silent: true
|
|
431
|
+
})).rejects.toThrow(/table 'message'.*instance 'project'.*scope column 'projectId'/);
|
|
432
|
+
});
|
|
433
|
+
(0, import_vitest.test)("rejects duplicate namespaces across instances", async function () {
|
|
434
|
+
writeFileSync((0, import_path.join)(dataDir(), "control/message.ts"), `export const messages = () => zql.message`);
|
|
435
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: {}, project: { scope: 'projectId' } } })`);
|
|
436
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const schema = table('message').columns({ projectId: string() })`);
|
|
437
|
+
await (0, import_vitest.expect)((0, import_generate.generate)({
|
|
438
|
+
dir: dataDir(),
|
|
439
|
+
silent: true
|
|
440
|
+
})).rejects.toThrow(/namespace 'message'.*instances 'control' and 'project'/);
|
|
441
|
+
});
|
|
442
|
+
(0, import_vitest.test)("resolves configured instance directories relative to the config file", async function () {
|
|
443
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: { dir: './planes/control-data', supportTables: ['audit'] }, project: { dir: '../project-data', scope: 'projectId' } } })`);
|
|
444
|
+
writeFileSync((0, import_path.join)(dataDir(), "planes/control-data/account.ts"), `export const accounts = () => zql.account`);
|
|
445
|
+
writeFileSync((0, import_path.join)(testDir, "src/project-data/message.ts"), `export const schema = table('message').columns({ id: string(), projectId: string() })`);
|
|
446
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
447
|
+
dir: dataDir(),
|
|
448
|
+
config: (0, import_path.join)(dataDir(), "on-zero.config.ts")
|
|
449
|
+
})).resolves.toEqual({
|
|
450
|
+
instances: {
|
|
451
|
+
control: {
|
|
452
|
+
tables: ["account"],
|
|
453
|
+
syncTables: ["account"],
|
|
454
|
+
supportTables: ["audit"],
|
|
455
|
+
scope: null
|
|
456
|
+
},
|
|
457
|
+
project: {
|
|
458
|
+
tables: ["message"],
|
|
459
|
+
syncTables: ["message"],
|
|
460
|
+
supportTables: [],
|
|
461
|
+
scope: "projectId"
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
allTables: ["account", "audit", "message"]
|
|
465
|
+
});
|
|
466
|
+
await (0, import_vitest.expect)((0, import_generate.generate)({
|
|
467
|
+
dir: dataDir(),
|
|
468
|
+
config: (0, import_path.join)(dataDir(), "on-zero.config.ts"),
|
|
469
|
+
silent: true
|
|
470
|
+
})).resolves.toMatchObject({
|
|
471
|
+
modelCount: 2,
|
|
472
|
+
schemaCount: 1
|
|
473
|
+
});
|
|
474
|
+
(0, import_vitest.expect)((0, import_fs.readFileSync)((0, import_path.join)(dataDir(), "generated/models.ts"), "utf8")).toContain("from '../../project-data/message'");
|
|
475
|
+
});
|
|
476
|
+
(0, import_vitest.test)("rejects missing configured instance directories", async function () {
|
|
477
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { project: { dir: './missing' } } })`);
|
|
478
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
479
|
+
dir: dataDir()
|
|
480
|
+
})).rejects.toThrow(/instance 'project' directory does not exist.*missing/);
|
|
481
|
+
});
|
|
482
|
+
(0, import_vitest.test)("rejects two instances that resolve to the same directory", async function () {
|
|
483
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { control: { dir: './shared' }, project: { dir: './shared' } } })`);
|
|
484
|
+
writeFileSync((0, import_path.join)(dataDir(), "shared/account.ts"), `export const accounts = () => zql.account`);
|
|
485
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
486
|
+
dir: dataDir()
|
|
487
|
+
})).rejects.toThrow(/instances 'control' and 'project' resolve to the same directory/);
|
|
488
|
+
});
|
|
489
|
+
(0, import_vitest.test)("rejects root namespaces when instances are configured", async function () {
|
|
490
|
+
writeFileSync((0, import_path.join)(dataDir(), "on-zero.config.ts"), `export default defineConfig({ instances: { project: {} } })`);
|
|
491
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/message.ts"), `export const rows = () => zql.message`);
|
|
492
|
+
writeFileSync((0, import_path.join)(dataDir(), "account.ts"), `export const rows = () => zql.account`);
|
|
493
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
494
|
+
dir: dataDir()
|
|
495
|
+
})).rejects.toThrow(/data namespace .*account\.ts.*outside every instance directory/);
|
|
496
|
+
});
|
|
497
|
+
(0, import_vitest.test)("rejects removed instance.ts configuration", async function () {
|
|
498
|
+
writeFileSync((0, import_path.join)(dataDir(), "post.ts"), `export const posts = () => zql.post`);
|
|
499
|
+
writeFileSync((0, import_path.join)(dataDir(), "project/instance.ts"), `export default defineInstance({ scope: 'projectId' })`);
|
|
500
|
+
await (0, import_vitest.expect)((0, import_generate.deriveDataMembership)({
|
|
501
|
+
dir: dataDir()
|
|
502
|
+
})).rejects.toThrow(/uses removed instance\.ts configuration/);
|
|
503
|
+
});
|
|
504
|
+
(0, import_vitest.test)("rejects the removed top-level layout", async function () {
|
|
505
|
+
writeFileSync((0, import_path.join)(dataDir(), "queries/message.ts"), `export const messages = () => zql.message`);
|
|
506
|
+
await (0, import_vitest.expect)((0, import_generate.generate)({
|
|
507
|
+
dir: dataDir(),
|
|
508
|
+
silent: true
|
|
509
|
+
})).rejects.toThrow(/removed top-level queries\/ layout/);
|
|
510
|
+
});
|
|
511
|
+
(0, import_vitest.test)("rejects dynamically named relations", async function () {
|
|
512
|
+
writeFileSync((0, import_path.join)(dataDir(), "message.ts"), `export const messages = (relation: string) => zql.message.related(relation)`);
|
|
513
|
+
await (0, import_vitest.expect)((0, import_generate.generate)({
|
|
514
|
+
dir: dataDir(),
|
|
515
|
+
silent: true
|
|
516
|
+
})).rejects.toThrow(/related\(\) without a string literal.*statically derivable/);
|
|
517
|
+
});
|
|
518
|
+
});
|
|
190
519
|
(0, import_vitest.describe)("mutations", function () {
|
|
191
520
|
(0, import_vitest.test)("generates validators for inline mutation param types", async function () {
|
|
192
|
-
|
|
521
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `
|
|
193
522
|
import { table, string } from 'on-zero'
|
|
194
523
|
import { mutations, serverWhere } from 'on-zero'
|
|
195
524
|
|
|
@@ -218,7 +547,7 @@ export const mutate = mutations(schema, perm, {
|
|
|
218
547
|
(0, import_vitest.expect)(content).toContain("v.string()");
|
|
219
548
|
});
|
|
220
549
|
(0, import_vitest.test)("generates CRUD validators from schema columns", async function () {
|
|
221
|
-
|
|
550
|
+
writeFileSync((0, import_path.join)(testDir, "task/mutations.ts"), `
|
|
222
551
|
import { table, string, number, boolean } from 'on-zero'
|
|
223
552
|
import { mutations, serverWhere } from 'on-zero'
|
|
224
553
|
|
|
@@ -245,7 +574,7 @@ export const mutate = mutations(schema, perm)
|
|
|
245
574
|
(0, import_vitest.expect)(content).toContain("delete:");
|
|
246
575
|
});
|
|
247
576
|
(0, import_vitest.test)("treats models without export const mutate as empty mutations", async function () {
|
|
248
|
-
|
|
577
|
+
writeFileSync((0, import_path.join)(testDir, "readonly/mutations.ts"), `
|
|
249
578
|
import { table, string } from 'on-zero'
|
|
250
579
|
|
|
251
580
|
export const schema = table('readonly').columns({
|
|
@@ -262,7 +591,7 @@ export const schema = table('readonly').columns({
|
|
|
262
591
|
(0, import_vitest.expect)(content).toContain("readonly: {");
|
|
263
592
|
});
|
|
264
593
|
(0, import_vitest.test)("extracts custom mutations from bare mutations({})", async function () {
|
|
265
|
-
|
|
594
|
+
writeFileSync((0, import_path.join)(testDir, "admin/mutations.ts"), `
|
|
266
595
|
import { mutations } from 'on-zero'
|
|
267
596
|
|
|
268
597
|
export const mutate = mutations({
|
|
@@ -280,7 +609,7 @@ export const mutate = mutations({
|
|
|
280
609
|
(0, import_vitest.expect)(content).toContain("v.string()");
|
|
281
610
|
});
|
|
282
611
|
(0, import_vitest.test)("generates validators for string-model multiline mutation params", async function () {
|
|
283
|
-
|
|
612
|
+
writeFileSync((0, import_path.join)(testDir, "agentEvent/mutations.ts"), `
|
|
284
613
|
import { mutations, serverWhere } from 'on-zero'
|
|
285
614
|
|
|
286
615
|
const perm = serverWhere('agentEvent', () => true)
|
|
@@ -314,7 +643,7 @@ export const mutate = mutations('agentEvent', perm, {
|
|
|
314
643
|
(0, import_vitest.expect)(content).not.toContain("claimReviewLease: v.object({})");
|
|
315
644
|
});
|
|
316
645
|
(0, import_vitest.test)("generates validators for object intersections", async function () {
|
|
317
|
-
|
|
646
|
+
writeFileSync((0, import_path.join)(testDir, "agent/mutations.ts"), `
|
|
318
647
|
import { mutations, serverWhere } from 'on-zero'
|
|
319
648
|
|
|
320
649
|
const perm = serverWhere('agent', () => true)
|
|
@@ -347,7 +676,7 @@ export const mutate = mutations('agent', perm, {
|
|
|
347
676
|
(0, import_vitest.expect)(content).not.toContain("[key");
|
|
348
677
|
});
|
|
349
678
|
(0, import_vitest.test)("uses v.unknown for untyped mutation payloads", async function () {
|
|
350
|
-
|
|
679
|
+
writeFileSync((0, import_path.join)(testDir, "project/mutations.ts"), `
|
|
351
680
|
import { mutations, serverWhere } from 'on-zero'
|
|
352
681
|
|
|
353
682
|
const perm = serverWhere('project', () => true)
|
|
@@ -367,7 +696,7 @@ export const mutate = mutations('project', perm, {
|
|
|
367
696
|
(0, import_vitest.expect)(content).not.toContain("insert: v.void_()");
|
|
368
697
|
});
|
|
369
698
|
(0, import_vitest.test)("handles mutations with only context param (void)", async function () {
|
|
370
|
-
|
|
699
|
+
writeFileSync((0, import_path.join)(testDir, "user/mutations.ts"), `
|
|
371
700
|
import { table, string } from 'on-zero'
|
|
372
701
|
import { mutations, serverWhere } from 'on-zero'
|
|
373
702
|
|
|
@@ -392,7 +721,7 @@ export const mutate = mutations(schema, perm, {
|
|
|
392
721
|
(0, import_vitest.expect)(content).toContain("finishOnboarding");
|
|
393
722
|
});
|
|
394
723
|
(0, import_vitest.test)("handles primitive param type", async function () {
|
|
395
|
-
|
|
724
|
+
writeFileSync((0, import_path.join)(testDir, "user/mutations.ts"), `
|
|
396
725
|
import { table, string } from 'on-zero'
|
|
397
726
|
import { mutations, serverWhere } from 'on-zero'
|
|
398
727
|
|
|
@@ -418,7 +747,7 @@ export const mutate = mutations(schema, perm, {
|
|
|
418
747
|
(0, import_vitest.expect)(content).toContain("v.string()");
|
|
419
748
|
});
|
|
420
749
|
(0, import_vitest.test)("handles array param type", async function () {
|
|
421
|
-
|
|
750
|
+
writeFileSync((0, import_path.join)(testDir, "batch/mutations.ts"), `
|
|
422
751
|
import { mutations } from 'on-zero'
|
|
423
752
|
|
|
424
753
|
export const mutate = mutations({
|
|
@@ -436,7 +765,7 @@ export const mutate = mutations({
|
|
|
436
765
|
(0, import_vitest.expect)(content).toContain("v.array");
|
|
437
766
|
});
|
|
438
767
|
(0, import_vitest.test)("populates mutationCount and caching works", async function () {
|
|
439
|
-
|
|
768
|
+
writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
|
|
440
769
|
import { table, string } from 'on-zero'
|
|
441
770
|
import { mutations, serverWhere } from 'on-zero'
|
|
442
771
|
|
|
@@ -468,14 +797,14 @@ export const mutate = mutations(schema, perm, {
|
|
|
468
797
|
});
|
|
469
798
|
(0, import_vitest.describe)("type resolution", function () {
|
|
470
799
|
(0, import_vitest.test)("resolves imported type references for mutations", async function () {
|
|
471
|
-
|
|
800
|
+
writeFileSync((0, import_path.join)(testDir, "post/types.ts"), `
|
|
472
801
|
export type ArchiveParams = {
|
|
473
802
|
id: string
|
|
474
803
|
reason: string
|
|
475
804
|
archived: boolean
|
|
476
805
|
}
|
|
477
806
|
`);
|
|
478
|
-
|
|
807
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `
|
|
479
808
|
import { table, string, boolean } from 'on-zero'
|
|
480
809
|
import { mutations } from 'on-zero'
|
|
481
810
|
import type { ArchiveParams } from './types'
|
|
@@ -497,7 +826,7 @@ export const mutate = mutations({
|
|
|
497
826
|
(0, import_vitest.expect)(content).toContain("archived");
|
|
498
827
|
});
|
|
499
828
|
(0, import_vitest.test)("resolves utility types like Pick", async function () {
|
|
500
|
-
|
|
829
|
+
writeFileSync((0, import_path.join)(testDir, "item/types.ts"), `
|
|
501
830
|
export type Item = {
|
|
502
831
|
id: string
|
|
503
832
|
name: string
|
|
@@ -505,7 +834,7 @@ export type Item = {
|
|
|
505
834
|
count: number
|
|
506
835
|
}
|
|
507
836
|
`);
|
|
508
|
-
|
|
837
|
+
writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
|
|
509
838
|
import { table, string, number } from 'on-zero'
|
|
510
839
|
import { mutations, serverWhere } from 'on-zero'
|
|
511
840
|
import type { Item } from './types'
|
|
@@ -536,8 +865,8 @@ export const mutate = mutations(schema, perm, {
|
|
|
536
865
|
(0, import_vitest.expect)(content).not.toMatch(/rename:[\s\S]*count/);
|
|
537
866
|
});
|
|
538
867
|
(0, import_vitest.test)("resolves instantiated Zero row fields through Partial and Omit", async function () {
|
|
539
|
-
(0, import_fs.symlinkSync)((0, import_path.join)(import_meta.dirname, "
|
|
540
|
-
|
|
868
|
+
(0, import_fs.symlinkSync)((0, import_path.join)(import_meta.dirname, "../node_modules"), (0, import_path.join)(testDir, "node_modules"), "dir");
|
|
869
|
+
writeFileSync((0, import_path.join)(testDir, "item/types.ts"), `
|
|
541
870
|
import type { Row } from '@rocicorp/zero'
|
|
542
871
|
import { drizzleZeroConfig } from 'drizzle-zero-sqlite'
|
|
543
872
|
import { sqliteTable, text } from 'drizzle-orm/sqlite-core'
|
|
@@ -551,7 +880,7 @@ const schema = drizzleZeroConfig({ item })
|
|
|
551
880
|
|
|
552
881
|
export type Item = Row<(typeof schema)['tables']['item']>
|
|
553
882
|
`);
|
|
554
|
-
|
|
883
|
+
writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
|
|
555
884
|
import { mutations } from 'on-zero'
|
|
556
885
|
import type { Item } from './types'
|
|
557
886
|
|
|
@@ -574,13 +903,13 @@ export const mutate = mutations('item', {
|
|
|
574
903
|
(0, import_vitest.expect)(content).not.toContain("description: v.optional(v.unknown())");
|
|
575
904
|
});
|
|
576
905
|
(0, import_vitest.test)("skips symbol-keyed properties when resolving imported mutation param types", async function () {
|
|
577
|
-
|
|
906
|
+
writeFileSync((0, import_path.join)(testDir, "item/types.ts"), `
|
|
578
907
|
export type WeirdParams = {
|
|
579
908
|
id: string
|
|
580
909
|
[Symbol.iterator]?: () => Iterator<string>
|
|
581
910
|
}
|
|
582
911
|
`);
|
|
583
|
-
|
|
912
|
+
writeFileSync((0, import_path.join)(testDir, "item/mutations.ts"), `
|
|
584
913
|
import { mutations } from 'on-zero'
|
|
585
914
|
import type { WeirdParams } from './types'
|
|
586
915
|
|
|
@@ -600,14 +929,14 @@ export const mutate = mutations({
|
|
|
600
929
|
(0, import_vitest.expect)(content).not.toContain("__@iterator");
|
|
601
930
|
});
|
|
602
931
|
(0, import_vitest.test)("resolves imported types in query params", async function () {
|
|
603
|
-
|
|
604
|
-
|
|
932
|
+
writeFileSync((0, import_path.join)(testDir, "post/mutations.ts"), `export const schema = table('post', { id: string() })`);
|
|
933
|
+
writeFileSync((0, import_path.join)(testDir, "post/types.ts"), `
|
|
605
934
|
export type PostFilter = {
|
|
606
935
|
authorId: string
|
|
607
936
|
published: boolean
|
|
608
937
|
}
|
|
609
938
|
`);
|
|
610
|
-
|
|
939
|
+
writeFileSync((0, import_path.join)(testDir, "post/queries.ts"), `
|
|
611
940
|
import type { PostFilter } from './types'
|
|
612
941
|
|
|
613
942
|
export const filteredPosts = (filter: PostFilter) => zero.query.post
|