on-zero 0.16.20 → 0.16.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.cjs +6 -0
- package/dist/cjs/cli.native.js +6 -0
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/combineZeroClients.native.js.map +1 -1
- package/dist/cjs/config.native.js.map +1 -1
- package/dist/cjs/createPermissions.native.js.map +1 -1
- package/dist/cjs/createSchemaFromDrizzle.native.js.map +1 -1
- package/dist/cjs/createUseQuery.cjs +14 -4
- package/dist/cjs/createUseQuery.native.js +18 -5
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createUseQueryDirect.cjs +13 -2
- package/dist/cjs/createUseQueryDirect.native.js +14 -2
- package/dist/cjs/createUseQueryDirect.native.js.map +1 -1
- package/dist/cjs/createZeroClient.authData.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +21 -3
- package/dist/cjs/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.exportProbe.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.headless.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.httpAuth.test.native.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +28 -3
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/cjs/generate-helpers.native.js.map +1 -1
- package/dist/cjs/generate-helpers.test.native.js.map +1 -1
- package/dist/cjs/generate-layout.native.js.map +1 -1
- package/dist/cjs/generate-lite.native.js.map +1 -1
- package/dist/cjs/generate-lite.test.native.js.map +1 -1
- package/dist/cjs/generate.cjs +57 -30
- package/dist/cjs/generate.native.js +92 -31
- package/dist/cjs/generate.native.js.map +1 -1
- package/dist/cjs/generate.test.cjs +147 -0
- package/dist/cjs/generate.test.native.js +147 -0
- package/dist/cjs/generate.test.native.js.map +1 -1
- package/dist/cjs/helpers/NullToOptional.native.js.map +1 -1
- package/dist/cjs/helpers/asyncContext.hostStorage.test.native.js.map +1 -1
- package/dist/cjs/helpers/batchQuery.native.js.map +1 -1
- package/dist/cjs/helpers/clearZeroClientData.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.native.js.map +1 -1
- package/dist/cjs/helpers/createMutators.test.native.js.map +1 -1
- package/dist/cjs/helpers/ellipsis.native.js.map +1 -1
- package/dist/cjs/helpers/emitter.native.js.map +1 -1
- package/dist/cjs/helpers/ensure.native.js.map +1 -1
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -1
- package/dist/cjs/helpers/errors.native.js.map +1 -1
- package/dist/cjs/helpers/getAuth.native.js.map +1 -1
- package/dist/cjs/helpers/getCurrentComponentStack.native.js.map +1 -1
- package/dist/cjs/helpers/globalValue.native.js.map +1 -1
- package/dist/cjs/helpers/hostStorageScope.native.js.map +1 -1
- package/dist/cjs/helpers/mapObject.native.js.map +1 -1
- package/dist/cjs/helpers/mutationLifecycle.native.js.map +1 -1
- package/dist/cjs/helpers/mutationLifecycle.test.native.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.native.js.map +1 -1
- package/dist/cjs/helpers/mutatorContext.test.native.js.map +1 -1
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/cjs/helpers/queryContext.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/helpers/showZeroClientError.native.js.map +1 -1
- package/dist/cjs/helpers/sleep.native.js.map +1 -1
- package/dist/cjs/helpers/time.native.js.map +1 -1
- package/dist/cjs/helpers/tuple.native.js.map +1 -1
- package/dist/cjs/helpers/useMutation.native.js.map +1 -1
- package/dist/cjs/helpers/useMutation.test.native.js.map +1 -1
- package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/instanceRegistry.native.js.map +1 -1
- package/dist/cjs/modelRegistry.native.js.map +1 -1
- package/dist/cjs/multi.cjs +10 -5
- package/dist/cjs/multi.native.js +10 -5
- package/dist/cjs/multi.native.js.map +1 -1
- package/dist/cjs/multiInstance.test.native.js.map +1 -1
- package/dist/cjs/multiInstanceMutations.test.native.js.map +1 -1
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
- package/dist/cjs/multiPartition.test.cjs +46 -2
- package/dist/cjs/multiPartition.test.native.js +50 -2
- package/dist/cjs/multiPartition.test.native.js.map +1 -1
- package/dist/cjs/mutations.native.js.map +1 -1
- package/dist/cjs/mutations.test.native.js.map +1 -1
- package/dist/cjs/native-typescript.cjs +50 -11
- package/dist/cjs/native-typescript.native.js +158 -30
- package/dist/cjs/native-typescript.native.js.map +1 -1
- package/dist/cjs/provideZero.eagerInstance.test.cjs +22 -0
- package/dist/cjs/provideZero.eagerInstance.test.native.js +30 -0
- package/dist/cjs/provideZero.eagerInstance.test.native.js.map +1 -1
- package/dist/cjs/provideZero.hydration.test.native.js.map +1 -1
- package/dist/cjs/provideZero.ssr.test.native.js.map +1 -1
- package/dist/cjs/queryErrorRecovery.cjs +93 -0
- package/dist/cjs/queryErrorRecovery.native.js +205 -0
- package/dist/cjs/queryErrorRecovery.native.js.map +1 -0
- package/dist/cjs/queryJson.native.js.map +1 -1
- package/dist/cjs/queryRegistry.native.js.map +1 -1
- package/dist/cjs/resolveQuery.native.js.map +1 -1
- package/dist/cjs/run.native.js.map +1 -1
- package/dist/cjs/server.native.js.map +1 -1
- package/dist/cjs/server.test.native.js.map +1 -1
- package/dist/cjs/serverWhere.native.js.map +1 -1
- package/dist/cjs/serverWhere.test.native.js.map +1 -1
- package/dist/cjs/state.native.js.map +1 -1
- package/dist/cjs/streaming.native.js.map +1 -1
- package/dist/cjs/testSetup.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/usePermission.test.native.js.map +1 -1
- package/dist/cjs/useQuery.aggregate.zero.test.cjs +199 -4
- package/dist/cjs/useQuery.aggregate.zero.test.native.js +212 -4
- package/dist/cjs/useQuery.aggregate.zero.test.native.js.map +1 -1
- package/dist/cjs/useQuery.empty.test.native.js.map +1 -1
- package/dist/cjs/useQuery.ssr.test.native.js.map +1 -1
- package/dist/cjs/useStreamingField.loop.test.native.js.map +1 -1
- package/dist/cjs/useStreamingField.native.js.map +1 -1
- package/dist/cjs/vite-plugin.cjs +10 -0
- package/dist/cjs/vite-plugin.native.js +10 -0
- package/dist/cjs/vite-plugin.native.js.map +1 -1
- package/dist/cjs/where.native.js.map +1 -1
- package/dist/cjs/zeroRunner.native.js.map +1 -1
- package/dist/cjs/zql.native.js.map +1 -1
- package/dist/esm/cli.mjs +6 -0
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +7 -1
- package/dist/esm/cli.native.js.map +1 -1
- package/dist/esm/combineZeroClients.native.js +4 -4
- package/dist/esm/combineZeroClients.native.js.map +1 -1
- package/dist/esm/config.native.js.map +1 -1
- package/dist/esm/createPermissions.native.js +4 -4
- package/dist/esm/createPermissions.native.js.map +1 -1
- package/dist/esm/createSchemaFromDrizzle.native.js +1 -1
- package/dist/esm/createSchemaFromDrizzle.native.js.map +1 -1
- package/dist/esm/createUseQuery.mjs +16 -6
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +24 -11
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createUseQueryDirect.mjs +13 -2
- package/dist/esm/createUseQueryDirect.mjs.map +1 -1
- package/dist/esm/createUseQueryDirect.native.js +19 -7
- package/dist/esm/createUseQueryDirect.native.js.map +1 -1
- package/dist/esm/createZeroClient.authData.test.native.js +2 -2
- package/dist/esm/createZeroClient.authData.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.connection.test.native.js +1 -1
- package/dist/esm/createZeroClient.connection.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.exportProbe.test.native.js +1 -1
- package/dist/esm/createZeroClient.exportProbe.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.headless.test.native.js +2 -2
- package/dist/esm/createZeroClient.headless.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.httpAuth.test.native.js +1 -1
- package/dist/esm/createZeroClient.httpAuth.test.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +21 -3
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +49 -24
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.native.js +2 -2
- package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -1
- package/dist/esm/generate-helpers.native.js.map +1 -1
- package/dist/esm/generate-helpers.test.native.js +1 -1
- package/dist/esm/generate-helpers.test.native.js.map +1 -1
- package/dist/esm/generate-layout.native.js.map +1 -1
- package/dist/esm/generate-lite.native.js +1 -1
- package/dist/esm/generate-lite.native.js.map +1 -1
- package/dist/esm/generate-lite.test.native.js +1 -1
- package/dist/esm/generate-lite.test.native.js.map +1 -1
- package/dist/esm/generate.mjs +57 -30
- package/dist/esm/generate.mjs.map +1 -1
- package/dist/esm/generate.native.js +95 -34
- package/dist/esm/generate.native.js.map +1 -1
- package/dist/esm/generate.test.mjs +147 -0
- package/dist/esm/generate.test.mjs.map +1 -1
- package/dist/esm/generate.test.native.js +148 -1
- package/dist/esm/generate.test.native.js.map +1 -1
- package/dist/esm/helpers/NullToOptional.native.js.map +1 -1
- package/dist/esm/helpers/asyncContext.hostStorage.test.native.js +7 -7
- package/dist/esm/helpers/asyncContext.hostStorage.test.native.js.map +1 -1
- package/dist/esm/helpers/batchQuery.native.js +1 -1
- package/dist/esm/helpers/batchQuery.native.js.map +1 -1
- package/dist/esm/helpers/clearZeroClientData.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.native.js +4 -4
- 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.native.js.map +1 -1
- package/dist/esm/helpers/emitter.native.js.map +1 -1
- package/dist/esm/helpers/ensure.native.js +1 -1
- package/dist/esm/helpers/ensure.native.js.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.native.js.map +1 -1
- package/dist/esm/helpers/getAuth.native.js +3 -3
- package/dist/esm/helpers/getAuth.native.js.map +1 -1
- package/dist/esm/helpers/getCurrentComponentStack.native.js.map +1 -1
- package/dist/esm/helpers/globalValue.native.js.map +1 -1
- package/dist/esm/helpers/hostStorageScope.native.js.map +1 -1
- package/dist/esm/helpers/mapObject.native.js.map +1 -1
- package/dist/esm/helpers/mutationLifecycle.native.js +1 -1
- package/dist/esm/helpers/mutationLifecycle.native.js.map +1 -1
- package/dist/esm/helpers/mutationLifecycle.test.native.js +1 -1
- package/dist/esm/helpers/mutationLifecycle.test.native.js.map +1 -1
- package/dist/esm/helpers/mutatorContext.native.js +1 -1
- package/dist/esm/helpers/mutatorContext.native.js.map +1 -1
- package/dist/esm/helpers/mutatorContext.test.native.js +6 -6
- package/dist/esm/helpers/mutatorContext.test.native.js.map +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js +1 -1
- package/dist/esm/helpers/prettyFormatZeroQuery.native.js.map +1 -1
- package/dist/esm/helpers/queryContext.native.js +1 -1
- package/dist/esm/helpers/queryContext.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js +1 -1
- package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js +2 -2
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/helpers/showZeroClientError.native.js +1 -1
- package/dist/esm/helpers/showZeroClientError.native.js.map +1 -1
- package/dist/esm/helpers/sleep.native.js +1 -1
- package/dist/esm/helpers/sleep.native.js.map +1 -1
- package/dist/esm/helpers/time.native.js.map +1 -1
- package/dist/esm/helpers/tuple.native.js.map +1 -1
- 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.native.js +2 -2
- package/dist/esm/helpers/useZeroDebug.native.js.map +1 -1
- package/dist/esm/index.native.js +23 -23
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/instanceRegistry.native.js +2 -2
- package/dist/esm/instanceRegistry.native.js.map +1 -1
- package/dist/esm/modelRegistry.native.js.map +1 -1
- package/dist/esm/multi.mjs +10 -5
- package/dist/esm/multi.mjs.map +1 -1
- package/dist/esm/multi.native.js +15 -10
- package/dist/esm/multi.native.js.map +1 -1
- package/dist/esm/multiInstance.test.native.js +10 -10
- package/dist/esm/multiInstance.test.native.js.map +1 -1
- package/dist/esm/multiInstanceMutations.test.native.js +4 -4
- package/dist/esm/multiInstanceMutations.test.native.js.map +1 -1
- package/dist/esm/multiInstanceNested.test.native.js +3 -3
- package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
- package/dist/esm/multiPartition.test.mjs +47 -3
- package/dist/esm/multiPartition.test.mjs.map +1 -1
- package/dist/esm/multiPartition.test.native.js +52 -4
- package/dist/esm/multiPartition.test.native.js.map +1 -1
- package/dist/esm/mutations.native.js +2 -2
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/mutations.test.native.js +4 -4
- package/dist/esm/mutations.test.native.js.map +1 -1
- package/dist/esm/native-typescript.mjs +50 -11
- package/dist/esm/native-typescript.mjs.map +1 -1
- package/dist/esm/native-typescript.native.js +158 -30
- package/dist/esm/native-typescript.native.js.map +1 -1
- package/dist/esm/provideZero.eagerInstance.test.mjs +22 -0
- package/dist/esm/provideZero.eagerInstance.test.mjs.map +1 -1
- package/dist/esm/provideZero.eagerInstance.test.native.js +31 -1
- package/dist/esm/provideZero.eagerInstance.test.native.js.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/provideZero.ssr.test.native.js +2 -2
- package/dist/esm/provideZero.ssr.test.native.js.map +1 -1
- package/dist/esm/queryErrorRecovery.mjs +66 -0
- package/dist/esm/queryErrorRecovery.mjs.map +1 -0
- package/dist/esm/queryErrorRecovery.native.js +175 -0
- package/dist/esm/queryErrorRecovery.native.js.map +1 -0
- package/dist/esm/queryJson.native.js +1 -1
- package/dist/esm/queryJson.native.js.map +1 -1
- package/dist/esm/queryRegistry.native.js.map +1 -1
- package/dist/esm/resolveQuery.native.js +2 -2
- package/dist/esm/resolveQuery.native.js.map +1 -1
- package/dist/esm/run.native.js +4 -4
- package/dist/esm/run.native.js.map +1 -1
- package/dist/esm/server.native.js +10 -10
- package/dist/esm/server.native.js.map +1 -1
- package/dist/esm/server.test.native.js +2 -2
- package/dist/esm/server.test.native.js.map +1 -1
- package/dist/esm/serverWhere.native.js +1 -1
- package/dist/esm/serverWhere.native.js.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.native.js +1 -1
- package/dist/esm/state.native.js.map +1 -1
- package/dist/esm/streaming.native.js +1 -1
- package/dist/esm/streaming.native.js.map +1 -1
- package/dist/esm/testSetup.native.js.map +1 -1
- package/dist/esm/types.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.aggregate.zero.test.mjs +197 -2
- package/dist/esm/useQuery.aggregate.zero.test.mjs.map +1 -1
- package/dist/esm/useQuery.aggregate.zero.test.native.js +212 -4
- package/dist/esm/useQuery.aggregate.zero.test.native.js.map +1 -1
- package/dist/esm/useQuery.empty.test.native.js +3 -3
- 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/useStreamingField.loop.test.native.js +1 -1
- package/dist/esm/useStreamingField.loop.test.native.js.map +1 -1
- package/dist/esm/useStreamingField.native.js.map +1 -1
- package/dist/esm/vite-plugin.mjs +10 -0
- package/dist/esm/vite-plugin.mjs.map +1 -1
- package/dist/esm/vite-plugin.native.js +11 -1
- package/dist/esm/vite-plugin.native.js.map +1 -1
- package/dist/esm/where.native.js +3 -3
- package/dist/esm/where.native.js.map +1 -1
- package/dist/esm/zeroRunner.native.js +1 -1
- package/dist/esm/zeroRunner.native.js.map +1 -1
- package/dist/esm/zql.native.js +1 -1
- package/dist/esm/zql.native.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +6 -0
- package/src/createUseQuery.tsx +20 -5
- package/src/createUseQueryDirect.tsx +17 -1
- package/src/createZeroClient.tsx +37 -4
- package/src/generate.test.ts +116 -0
- package/src/generate.ts +109 -52
- package/src/multi.ts +11 -3
- package/src/multiPartition.test.ts +55 -11
- package/src/native-typescript.ts +64 -11
- package/src/provideZero.eagerInstance.test.tsx +27 -0
- package/src/queryErrorRecovery.ts +95 -0
- package/src/useQuery.aggregate.zero.test.tsx +187 -2
- package/src/vite-plugin.ts +10 -0
- package/types/createUseQuery.d.ts +3 -1
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createUseQueryDirect.d.ts +3 -1
- package/types/createUseQueryDirect.d.ts.map +1 -1
- package/types/createZeroClient.d.ts +3 -1
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/generate.d.ts +4 -0
- package/types/generate.d.ts.map +1 -1
- package/types/multi.d.ts +3 -1
- package/types/multi.d.ts.map +1 -1
- package/types/native-typescript.d.ts +7 -1
- package/types/native-typescript.d.ts.map +1 -1
- package/types/queryErrorRecovery.d.ts +33 -0
- package/types/queryErrorRecovery.d.ts.map +1 -0
- package/types/useQuery.aggregate.zero.test.d.ts.map +1 -1
- package/types/vite-plugin.d.ts.map +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isAbsolute, relative, resolve } from "path";
|
|
2
|
-
import { generate } from "./generate
|
|
2
|
+
import { generate } from "./generate";
|
|
3
3
|
function createOnZeroHmrPlugin() {
|
|
4
4
|
var hmrInclude = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [],
|
|
5
5
|
dataDir = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "src/data";
|
|
@@ -42,9 +42,12 @@ function onZeroPlugin() {
|
|
|
42
42
|
var dir = (_options_dir = options.dir) !== null && _options_dir !== void 0 ? _options_dir : "src/data";
|
|
43
43
|
var dataDir;
|
|
44
44
|
var databaseDir;
|
|
45
|
+
var tsconfig;
|
|
45
46
|
var runGenerate = function runGenerate2(silent) {
|
|
46
47
|
return generate({
|
|
47
48
|
dir: dataDir,
|
|
49
|
+
config: options.config,
|
|
50
|
+
tsconfig,
|
|
48
51
|
after: options.after,
|
|
49
52
|
silent,
|
|
50
53
|
force: options.force
|
|
@@ -56,13 +59,19 @@ function onZeroPlugin() {
|
|
|
56
59
|
configResolved(config) {
|
|
57
60
|
dataDir = resolve(config.root, dir);
|
|
58
61
|
databaseDir = resolve(dataDir, "../database");
|
|
62
|
+
tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;
|
|
59
63
|
},
|
|
60
64
|
async buildStart() {
|
|
61
65
|
if (!options.disableGenerate) await runGenerate(false);
|
|
62
66
|
},
|
|
63
67
|
configureServer(server) {
|
|
64
68
|
if (options.disableGenerate) return;
|
|
69
|
+
if (tsconfig) server.watcher.add(tsconfig);
|
|
65
70
|
var handler = async function handler2(file) {
|
|
71
|
+
if (file === tsconfig) {
|
|
72
|
+
await runGenerate(false);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
66
75
|
if (!/\.tsx?$/.test(file)) return;
|
|
67
76
|
if (isWithinDirectory(file, dataDir) && !isWithinDirectory(file, resolve(dataDir, "generated")) || isWithinDirectory(file, databaseDir)) {
|
|
68
77
|
await runGenerate(false);
|
|
@@ -77,6 +86,7 @@ function onZeroPlugin() {
|
|
|
77
86
|
apply: "build",
|
|
78
87
|
configResolved(config) {
|
|
79
88
|
dataDir = resolve(config.root, dir);
|
|
89
|
+
tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;
|
|
80
90
|
},
|
|
81
91
|
async buildStart() {
|
|
82
92
|
if (!options.disableGenerate) await runGenerate(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isAbsolute","relative","resolve","generate","createOnZeroHmrPlugin","hmrInclude","arguments","length","dataDir","normalizedDataDir","replaceAll","replace","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","transformed","map","isWithinDirectory","file","dir","rel","startsWith","onZeroPlugin","options","_options_dir","databaseDir","runGenerate","runGenerate2","silent","after","force","configResolved","
|
|
1
|
+
{"version":3,"names":["isAbsolute","relative","resolve","generate","createOnZeroHmrPlugin","hmrInclude","arguments","length","dataDir","normalizedDataDir","replaceAll","replace","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","transformed","map","isWithinDirectory","file","dir","rel","startsWith","onZeroPlugin","options","_options_dir","databaseDir","tsconfig","runGenerate","runGenerate2","silent","config","after","force","configResolved","root","buildStart","disableGenerate","configureServer","server","watcher","add","handler","handler2","on","onZeroHmrPlugin","onZeroHmrPlugin2","include","vite_plugin_default","default"],"sources":["vite-plugin.native.js"],"sourcesContent":["import { isAbsolute, relative, resolve } from \"path\";\nimport { generate } from \"./generate\";\nfunction createOnZeroHmrPlugin() {\n var hmrInclude = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], dataDir = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"src/data\";\n var normalizedDataDir = `/${dataDir.replaceAll(\"\\\\\", \"/\").replace(/^\\/+|\\/+$/g, \"\")}/`;\n var hmrPaths = [\n normalizedDataDir,\n ...hmrInclude\n ];\n return {\n name: \"on-zero:hmr\",\n apply: \"serve\",\n enforce: \"post\",\n transform(code, id) {\n if (!hmrPaths.some(function(p) {\n return id.includes(p);\n }) || !/\\.tsx?$/.test(id)) return;\n var transformed = code;\n if (code.includes(\"import.meta.hot.invalidate\")) {\n transformed = transformed.replace(/if\\s*\\(invalidateMessage\\)\\s*import\\.meta\\.hot\\.invalidate\\(invalidateMessage\\);?/g, \"/* on-zero: HMR invalidate disabled */\");\n }\n if (id.includes(\"/generated/models.\") && !code.includes(\"import.meta.hot.accept\")) {\n transformed += `\nif (import.meta.hot) {\n import.meta.hot.accept()\n}\n`;\n }\n if (transformed === code) return;\n return {\n code: transformed,\n map: null\n };\n }\n };\n}\nfunction isWithinDirectory(file, dir) {\n var rel = relative(dir, file);\n return rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n}\nfunction onZeroPlugin() {\n var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _options_dir;\n var dir = (_options_dir = options.dir) !== null && _options_dir !== void 0 ? _options_dir : \"src/data\";\n var dataDir;\n var databaseDir;\n var tsconfig;\n var runGenerate = function runGenerate2(silent) {\n return generate({\n dir: dataDir,\n config: options.config,\n tsconfig,\n after: options.after,\n silent,\n force: options.force\n });\n };\n return [\n {\n name: \"on-zero:serve\",\n apply: \"serve\",\n configResolved(config) {\n dataDir = resolve(config.root, dir);\n databaseDir = resolve(dataDir, \"../database\");\n tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;\n },\n async buildStart() {\n if (!options.disableGenerate) await runGenerate(false);\n },\n configureServer(server) {\n if (options.disableGenerate) return;\n if (tsconfig) server.watcher.add(tsconfig);\n var handler = async function handler2(file) {\n if (file === tsconfig) {\n await runGenerate(false);\n return;\n }\n if (!/\\.tsx?$/.test(file)) return;\n if (isWithinDirectory(file, dataDir) && !isWithinDirectory(file, resolve(dataDir, \"generated\")) || isWithinDirectory(file, databaseDir)) {\n await runGenerate(false);\n }\n };\n server.watcher.on(\"change\", handler);\n server.watcher.on(\"add\", handler);\n server.watcher.on(\"unlink\", handler);\n }\n },\n {\n name: \"on-zero:build\",\n apply: \"build\",\n configResolved(config) {\n dataDir = resolve(config.root, dir);\n tsconfig = options.tsconfig ? resolve(config.root, options.tsconfig) : void 0;\n },\n async buildStart() {\n if (!options.disableGenerate) await runGenerate(true);\n }\n },\n createOnZeroHmrPlugin(options.hmrInclude, dir)\n ];\n}\nvar onZeroHmrPlugin = function onZeroHmrPlugin2(options) {\n return createOnZeroHmrPlugin(options === null || options === void 0 ? void 0 : options.include);\n};\nvar vite_plugin_default = onZeroPlugin;\nexport {\n vite_plugin_default as default,\n onZeroHmrPlugin,\n onZeroPlugin\n};\n//# sourceMappingURL=vite-plugin.js.map\n"],"mappings":"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","ignoreList":[]}
|
package/dist/esm/where.native.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getAuth } from "./helpers/getAuth
|
|
2
|
-
import { globalValue } from "./helpers/globalValue
|
|
3
|
-
import { getEnvironment } from "./state
|
|
1
|
+
import { getAuth } from "./helpers/getAuth";
|
|
2
|
+
import { globalValue } from "./helpers/globalValue";
|
|
3
|
+
import { getEnvironment } from "./state";
|
|
4
4
|
var _evaluatingPermission = false;
|
|
5
5
|
function setEvaluatingPermission(value) {
|
|
6
6
|
_evaluatingPermission = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAuth","globalValue","getEnvironment","_evaluatingPermission","setEvaluatingPermission","value","where","a","b","isServerOnly","arguments","length","whereFn","wrappedWhereFn","wrappedWhereFn2","a2","_$b","and","result","cmpLit","WhereRawBuilderMap","set","WhereTableNameMap","WeakMap","getWhereTableName","where2","get","getRawWhere"],"sources":["
|
|
1
|
+
{"version":3,"names":["getAuth","globalValue","getEnvironment","_evaluatingPermission","setEvaluatingPermission","value","where","a","b","isServerOnly","arguments","length","whereFn","wrappedWhereFn","wrappedWhereFn2","a2","_$b","and","result","cmpLit","WhereRawBuilderMap","set","WhereTableNameMap","WeakMap","getWhereTableName","where2","get","getRawWhere"],"sources":["where.native.js"],"sourcesContent":["import { getAuth } from \"./helpers/getAuth\";\nimport { globalValue } from \"./helpers/globalValue\";\nimport { getEnvironment } from \"./state\";\nvar _evaluatingPermission = false;\nfunction setEvaluatingPermission(value) {\n _evaluatingPermission = value;\n}\nfunction where(a, b) {\n var isServerOnly = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n var whereFn = b || a;\n var wrappedWhereFn = function wrappedWhereFn2(a2) {\n var _$b = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : getAuth();\n if (getEnvironment() !== \"server\" && isServerOnly && !_evaluatingPermission) {\n return a2.and();\n }\n var result = whereFn(a2, _$b);\n if (typeof result === \"boolean\") {\n if (result) {\n return a2.cmpLit(0, \"=\", 0);\n } else {\n return a2.cmpLit(1, \"=\", 0);\n }\n }\n return result;\n };\n WhereRawBuilderMap.set(wrappedWhereFn, whereFn);\n if (b) {\n WhereTableNameMap.set(wrappedWhereFn, a);\n }\n return wrappedWhereFn;\n}\nvar WhereTableNameMap = globalValue(`on-zero:where-name`, function() {\n return /* @__PURE__ */ new WeakMap();\n});\nvar WhereRawBuilderMap = globalValue(`on-zero:where-raw`, function() {\n return /* @__PURE__ */ new WeakMap();\n});\nfunction getWhereTableName(where2) {\n return WhereTableNameMap.get(where2);\n}\nfunction getRawWhere(where2) {\n return WhereRawBuilderMap.get(where2);\n}\nexport {\n getRawWhere,\n getWhereTableName,\n setEvaluatingPermission,\n where\n};\n//# sourceMappingURL=where.js.map\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,cAAc,QAAQ,SAAS;AACxC,IAAIC,qBAAqB,GAAG,KAAK;AACjC,SAASC,uBAAuBA,CAACC,KAAK,EAAE;EACtCF,qBAAqB,GAAGE,KAAK;AAC/B;AACA,SAASC,KAAKA,CAACC,CAAC,EAAEC,CAAC,EAAE;EACnB,IAAIC,YAAY,GAAGC,SAAS,CAACC,MAAM,GAAG,CAAC,IAAID,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAGA,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK;EACzF,IAAIE,OAAO,GAAGJ,CAAC,IAAID,CAAC;EACpB,IAAIM,cAAc,GAAG,SAASC,eAAeA,CAACC,EAAE,EAAE;IAChD,IAAIC,GAAG,GAAGN,SAAS,CAACC,MAAM,GAAG,CAAC,IAAID,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAGA,SAAS,CAAC,CAAC,CAAC,GAAGV,OAAO,CAAC,CAAC;IACpF,IAAIE,cAAc,CAAC,CAAC,KAAK,QAAQ,IAAIO,YAAY,IAAI,CAACN,qBAAqB,EAAE;MAC3E,OAAOY,EAAE,CAACE,GAAG,CAAC,CAAC;IACjB;IACA,IAAIC,MAAM,GAAGN,OAAO,CAACG,EAAE,EAAEC,GAAG,CAAC;IAC7B,IAAI,OAAOE,MAAM,KAAK,SAAS,EAAE;MAC/B,IAAIA,MAAM,EAAE;QACV,OAAOH,EAAE,CAACI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;MAC7B,CAAC,MAAM;QACL,OAAOJ,EAAE,CAACI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;MAC7B;IACF;IACA,OAAOD,MAAM;EACf,CAAC;EACDE,kBAAkB,CAACC,GAAG,CAACR,cAAc,EAAED,OAAO,CAAC;EAC/C,IAAIJ,CAAC,EAAE;IACLc,iBAAiB,CAACD,GAAG,CAACR,cAAc,EAAEN,CAAC,CAAC;EAC1C;EACA,OAAOM,cAAc;AACvB;AACA,IAAIS,iBAAiB,GAAGrB,WAAW,CAAC,oBAAoB,EAAE,YAAW;EACnE,OAAO,eAAgB,IAAIsB,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AACF,IAAIH,kBAAkB,GAAGnB,WAAW,CAAC,mBAAmB,EAAE,YAAW;EACnE,OAAO,eAAgB,IAAIsB,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AACF,SAASC,iBAAiBA,CAACC,MAAM,EAAE;EACjC,OAAOH,iBAAiB,CAACI,GAAG,CAACD,MAAM,CAAC;AACtC;AACA,SAASE,WAAWA,CAACF,MAAM,EAAE;EAC3B,OAAOL,kBAAkB,CAACM,GAAG,CAACD,MAAM,CAAC;AACvC;AACA,SACEE,WAAW,EACXH,iBAAiB,EACjBpB,uBAAuB,EACvBE,KAAK","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isInZeroMutation","mutatorContext","runner","setRunner","r","getRunner","instance","q","o","tx","run","getAmbientRunner","Error"],"sources":["
|
|
1
|
+
{"version":3,"names":["isInZeroMutation","mutatorContext","runner","setRunner","r","getRunner","instance","q","o","tx","run","getAmbientRunner","Error"],"sources":["zeroRunner.native.js"],"sourcesContent":["import { isInZeroMutation, mutatorContext } from \"./helpers/mutatorContext\";\nvar runner = null;\nfunction setRunner(r) {\n runner = r;\n}\nfunction getRunner(instance) {\n if (isInZeroMutation()) {\n return function(q, o) {\n return mutatorContext().tx.run(q, o);\n };\n }\n return getAmbientRunner(instance);\n}\nfunction getAmbientRunner(instance) {\n if (instance === null || instance === void 0 ? void 0 : instance.runner) {\n return instance.runner;\n }\n if (!runner) {\n throw new Error(\"Zero runner not initialized. Ensure ProvideZero is mounted, connectHeadless() was called, or server bindings are active.\");\n }\n return runner;\n}\nexport {\n getAmbientRunner,\n getRunner,\n setRunner\n};\n//# sourceMappingURL=zeroRunner.js.map\n"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,cAAc,QAAQ,0BAA0B;AAC3E,IAAIC,MAAM,GAAG,IAAI;AACjB,SAASC,SAASA,CAACC,CAAC,EAAE;EACpBF,MAAM,GAAGE,CAAC;AACZ;AACA,SAASC,SAASA,CAACC,QAAQ,EAAE;EAC3B,IAAIN,gBAAgB,CAAC,CAAC,EAAE;IACtB,OAAO,UAASO,CAAC,EAAEC,CAAC,EAAE;MACpB,OAAOP,cAAc,CAAC,CAAC,CAACQ,EAAE,CAACC,GAAG,CAACH,CAAC,EAAEC,CAAC,CAAC;IACtC,CAAC;EACH;EACA,OAAOG,gBAAgB,CAACL,QAAQ,CAAC;AACnC;AACA,SAASK,gBAAgBA,CAACL,QAAQ,EAAE;EAClC,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,QAAQ,CAACJ,MAAM,EAAE;IACvE,OAAOI,QAAQ,CAACJ,MAAM;EACxB;EACA,IAAI,CAACA,MAAM,EAAE;IACX,MAAM,IAAIU,KAAK,CAAC,0HAA0H,CAAC;EAC7I;EACA,OAAOV,MAAM;AACf;AACA,SACES,gBAAgB,EAChBN,SAAS,EACTF,SAAS","ignoreList":[]}
|
package/dist/esm/zql.native.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getZQL","zql","Proxy","get","_target","prop","b"],"sources":["
|
|
1
|
+
{"version":3,"names":["getZQL","zql","Proxy","get","_target","prop","b"],"sources":["zql.native.js"],"sourcesContent":["import { getZQL } from \"./state\";\nvar zql = new Proxy({}, {\n get(_target, prop) {\n var b = getZQL();\n return b[prop];\n }\n});\nexport {\n zql\n};\n//# sourceMappingURL=zql.js.map\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,IAAIC,GAAG,GAAG,IAAIC,KAAK,CAAC,CAAC,CAAC,EAAE;EACtBC,GAAGA,CAACC,OAAO,EAAEC,IAAI,EAAE;IACjB,IAAIC,CAAC,GAAGN,MAAM,CAAC,CAAC;IAChB,OAAOM,CAAC,CAACD,IAAI,CAAC;EAChB;AACF,CAAC,CAAC;AACF,SACEJ,GAAG","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.21",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"files": [
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"chokidar": "^4.0.3",
|
|
114
114
|
"citty": "^0.1.6",
|
|
115
115
|
"dequal": "^2.0.3",
|
|
116
|
-
"orez-lite": "0.16.
|
|
116
|
+
"orez-lite": "0.16.21",
|
|
117
117
|
"typescript": "7.0.2",
|
|
118
118
|
"valibot": "^1.1.0"
|
|
119
119
|
},
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"react": "^19.0.0",
|
|
146
146
|
"react-dom": "^19.0.0",
|
|
147
147
|
"react-native": "*",
|
|
148
|
-
"vitest": "^3.
|
|
148
|
+
"vitest": "^3.2.7"
|
|
149
149
|
},
|
|
150
|
-
"releaseSourceCommit": "
|
|
150
|
+
"releaseSourceCommit": "692d233ff502256274f2ff23036a5d17c0936b5a"
|
|
151
151
|
}
|
package/src/cli.ts
CHANGED
|
@@ -24,6 +24,11 @@ const generateCommand = defineCommand({
|
|
|
24
24
|
required: false,
|
|
25
25
|
default: false,
|
|
26
26
|
},
|
|
27
|
+
tsconfig: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'TypeScript project used only for generation',
|
|
30
|
+
required: false,
|
|
31
|
+
},
|
|
27
32
|
after: {
|
|
28
33
|
type: 'string',
|
|
29
34
|
description: 'Command to run after generation completes',
|
|
@@ -43,6 +48,7 @@ const generateCommand = defineCommand({
|
|
|
43
48
|
const opts = {
|
|
44
49
|
dir: config ? dirname(config) : target,
|
|
45
50
|
config,
|
|
51
|
+
tsconfig: args.tsconfig,
|
|
46
52
|
after: args.after,
|
|
47
53
|
force: args.force,
|
|
48
54
|
}
|
package/src/createUseQuery.tsx
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { addContextToQuery, asQueryInternals } from '@rocicorp/zero/bindings'
|
|
2
|
-
import { useQuery as zeroUseQuery } from '@rocicorp/zero/react'
|
|
3
|
-
import { useContext, useMemo, useRef, type Context } from 'react'
|
|
2
|
+
import { useQuery as zeroUseQuery, useZero } from '@rocicorp/zero/react'
|
|
3
|
+
import { useContext, useEffect, useMemo, useRef, type Context } from 'react'
|
|
4
4
|
|
|
5
5
|
import { IS_SERVER_RUNTIME } from './helpers/platform'
|
|
6
6
|
import { useZeroDebug } from './helpers/useZeroDebug'
|
|
7
|
+
import { QueryErrorRecovery, useQueryFault, type QueryFaults } from './queryErrorRecovery'
|
|
7
8
|
import { serializeQueryParams } from './queryJson'
|
|
8
9
|
import { resolveQuery, type PlainQueryFn } from './resolveQuery'
|
|
9
10
|
|
|
@@ -90,9 +91,11 @@ export function parseUseQueryArgs(paramsOrOptions: any, optionsArg: any) {
|
|
|
90
91
|
export function createUseQuery<Schema extends ZeroSchema>({
|
|
91
92
|
DisabledContext,
|
|
92
93
|
customQueries,
|
|
94
|
+
getQueryFaults,
|
|
93
95
|
}: {
|
|
94
96
|
DisabledContext: Context<QueryControlMode>
|
|
95
97
|
customQueries: AnyQueryRegistry
|
|
98
|
+
getQueryFaults: (zero: object) => QueryFaults | undefined
|
|
96
99
|
}): UseQueryHook<Schema> {
|
|
97
100
|
// SSG: return an inert hook. on-zero's bundled React copy isn't the same
|
|
98
101
|
// one the SSG build's renderer initialises, so hook dispatch returns null.
|
|
@@ -156,6 +159,18 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
156
159
|
[effectiveEnabled, optionTTL]
|
|
157
160
|
)
|
|
158
161
|
const rawOut = zeroUseQuery(queryRequest, effectiveOptions)
|
|
162
|
+
const zero = useZero()
|
|
163
|
+
const faultOut = useQueryFault(
|
|
164
|
+
effectiveEnabled === false ? undefined : getQueryFaults(zero),
|
|
165
|
+
queryRequest,
|
|
166
|
+
rawOut
|
|
167
|
+
)
|
|
168
|
+
const recovery = useMemo(() => new QueryErrorRecovery(), [queryRequest])
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
if (recovery.changed(rawOut[0], rawOut[1].type) && rawOut[1].type === 'error') {
|
|
171
|
+
rawOut[1].retry?.()
|
|
172
|
+
}
|
|
173
|
+
}, [rawOut, recovery])
|
|
159
174
|
|
|
160
175
|
// normalize the rare null-data first snapshot for plural queries to []:
|
|
161
176
|
// zero-react's viewStore briefly hands us [null, {type:'unknown'}] when a
|
|
@@ -164,11 +179,11 @@ export function createUseQuery<Schema extends ZeroSchema>({
|
|
|
164
179
|
// callers must never see null here. cheap drop-in: only allocates a new
|
|
165
180
|
// tuple in the (rare) null case; the steady-state pass-through is one
|
|
166
181
|
// identity check per render.
|
|
167
|
-
let out: any =
|
|
168
|
-
if (
|
|
182
|
+
let out: any = faultOut
|
|
183
|
+
if (faultOut?.[0] === null) {
|
|
169
184
|
const fallback = emptyResponseFor(queryRequest)
|
|
170
185
|
if (fallback === EMPTY_RESPONSE_PLURAL) {
|
|
171
|
-
out = [EMPTY_PLURAL,
|
|
186
|
+
out = [EMPTY_PLURAL, faultOut[1] ?? RESULT_UNKNOWN]
|
|
172
187
|
}
|
|
173
188
|
}
|
|
174
189
|
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
} from './createUseQuery'
|
|
16
16
|
import { useEmitterValue, type Emitter } from './helpers/emitter'
|
|
17
17
|
import { IS_SERVER_RUNTIME } from './helpers/platform'
|
|
18
|
+
import { QueryErrorRecovery, useQueryFault, type QueryFaults } from './queryErrorRecovery'
|
|
18
19
|
import { serializeQueryParams } from './queryJson'
|
|
19
20
|
import { resolveQuery } from './resolveQuery'
|
|
20
21
|
|
|
@@ -60,6 +61,7 @@ export type CreateUseQueryDirect<Schema extends ZeroSchema> = (props: {
|
|
|
60
61
|
customQueries: AnyQueryRegistry
|
|
61
62
|
getZero: () => MaterializableZero | null
|
|
62
63
|
zeroVersion: Emitter<number>
|
|
64
|
+
getQueryFaults: (zero: object) => QueryFaults | undefined
|
|
63
65
|
}) => UseQueryHook<Schema>
|
|
64
66
|
|
|
65
67
|
type DirectResultType = 'unknown' | 'complete' | 'error'
|
|
@@ -134,6 +136,7 @@ class DirectViewWrapper implements DirectView {
|
|
|
134
136
|
private snapshot: DirectSnapshot
|
|
135
137
|
private readonly listeners = new Set<() => void>()
|
|
136
138
|
private destroyTimer: ReturnType<typeof setTimeout> | undefined
|
|
139
|
+
private readonly recovery = new QueryErrorRecovery()
|
|
137
140
|
|
|
138
141
|
constructor(
|
|
139
142
|
private readonly query: any,
|
|
@@ -148,6 +151,8 @@ class DirectViewWrapper implements DirectView {
|
|
|
148
151
|
|
|
149
152
|
private onData = (data: unknown, resultType: string, error?: DirectQueryError) => {
|
|
150
153
|
const cloned = data === undefined ? undefined : deepClone(data as ReadonlyJSONValue)
|
|
154
|
+
const retryAfterChange = this.recovery.changed(cloned, resultType)
|
|
155
|
+
const current = this.view
|
|
151
156
|
this.snapshot = getSnapshot(
|
|
152
157
|
this.singular,
|
|
153
158
|
cloned,
|
|
@@ -158,6 +163,11 @@ class DirectViewWrapper implements DirectView {
|
|
|
158
163
|
for (const listener of this.listeners) {
|
|
159
164
|
listener()
|
|
160
165
|
}
|
|
166
|
+
if (retryAfterChange) {
|
|
167
|
+
queueMicrotask(() => {
|
|
168
|
+
if (this.view === current && this.snapshot[1].type === 'error') this.retry()
|
|
169
|
+
})
|
|
170
|
+
}
|
|
161
171
|
}
|
|
162
172
|
|
|
163
173
|
private retry = () => {
|
|
@@ -259,6 +269,7 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
|
|
|
259
269
|
customQueries,
|
|
260
270
|
getZero,
|
|
261
271
|
zeroVersion,
|
|
272
|
+
getQueryFaults,
|
|
262
273
|
}: Parameters<CreateUseQueryDirect<Schema>>[0]): UseQueryHook<Schema> {
|
|
263
274
|
// SSG: return an inert hook — see createUseQuery for the rationale. resolve
|
|
264
275
|
// each call's query shape so singular queries get [undefined, info] and
|
|
@@ -334,11 +345,16 @@ export function createUseQueryDirect<Schema extends ZeroSchema>({
|
|
|
334
345
|
}, [queryRequest, enabled, ttl, zeroInstance])
|
|
335
346
|
|
|
336
347
|
const getEmpty = () => emptyForQuery as DirectSnapshot
|
|
337
|
-
const
|
|
348
|
+
const rawOut = useSyncExternalStore(
|
|
338
349
|
view ? view.subscribe : DISABLED_SUBSCRIBE,
|
|
339
350
|
view ? view.getSnapshot : getEmpty,
|
|
340
351
|
view ? view.getSnapshot : getEmpty
|
|
341
352
|
)
|
|
353
|
+
const out = useQueryFault(
|
|
354
|
+
zeroInstance && enabled && !disableMode ? getQueryFaults(zeroInstance) : undefined,
|
|
355
|
+
queryRequest,
|
|
356
|
+
rawOut
|
|
357
|
+
)
|
|
342
358
|
|
|
343
359
|
if (!disableMode) {
|
|
344
360
|
lastRef.current = out
|
package/src/createZeroClient.tsx
CHANGED
|
@@ -51,6 +51,7 @@ import {
|
|
|
51
51
|
import { observeMutation, reportMutationInvocationError } from './helpers/useMutation'
|
|
52
52
|
import { registerClientInstance } from './instanceRegistry'
|
|
53
53
|
import { getAllMutationsPermissions, getMutationsPermissions } from './modelRegistry'
|
|
54
|
+
import { QueryFaults } from './queryErrorRecovery'
|
|
54
55
|
import { assertQueryJson } from './queryJson'
|
|
55
56
|
import { registerQuery } from './queryRegistry'
|
|
56
57
|
import { resolveQuery, type PlainQueryFn } from './resolveQuery'
|
|
@@ -92,7 +93,12 @@ export type GroupedQueries = Record<string, Record<string, (...args: any[]) => a
|
|
|
92
93
|
export type PermissionStrategy = 'optimistic' | 'optimistic-deny' | 'optimistic-allow'
|
|
93
94
|
|
|
94
95
|
export type ZeroProviderTransport = {
|
|
95
|
-
install(
|
|
96
|
+
install(
|
|
97
|
+
serverURL: string
|
|
98
|
+
):
|
|
99
|
+
| (Pick<HttpPullTransport, 'subscribeLifecycle'> &
|
|
100
|
+
Partial<Pick<HttpPullTransport, 'pull'>>)
|
|
101
|
+
| undefined
|
|
96
102
|
logClassifications?: {
|
|
97
103
|
benign?: readonly ZeroLogPattern[]
|
|
98
104
|
}
|
|
@@ -129,6 +135,7 @@ export type DirectQueryAdapter<Schema extends ZeroSchema> = (props: {
|
|
|
129
135
|
customQueries: AnyQueryRegistry
|
|
130
136
|
getZero: () => any
|
|
131
137
|
zeroVersion: Emitter<number>
|
|
138
|
+
getQueryFaults: (zero: object) => QueryFaults | undefined
|
|
132
139
|
}) => UseQueryHook<Schema>
|
|
133
140
|
|
|
134
141
|
function getZeroProxyValue(instance: object, key: PropertyKey) {
|
|
@@ -335,8 +342,9 @@ export function createZeroClientInternal<
|
|
|
335
342
|
let clientMutators: ReturnType<typeof createMutators> | null = null
|
|
336
343
|
const installedTransports = new WeakMap<
|
|
337
344
|
ZeroInstance,
|
|
338
|
-
|
|
345
|
+
ReturnType<ZeroProviderTransport['install']>
|
|
339
346
|
>()
|
|
347
|
+
const queryFaults = new WeakMap<object, QueryFaults>()
|
|
340
348
|
function getClientMutators() {
|
|
341
349
|
clientMutators ??= createMutators({
|
|
342
350
|
models,
|
|
@@ -375,7 +383,7 @@ export function createZeroClientInternal<
|
|
|
375
383
|
awaitReconnected,
|
|
376
384
|
reload,
|
|
377
385
|
}: ConstructZeroInstanceArgs): ZeroInstance {
|
|
378
|
-
let installedTransport:
|
|
386
|
+
let installedTransport: ReturnType<ZeroProviderTransport['install']>
|
|
379
387
|
// install before construction so the instance's first connect goes through
|
|
380
388
|
// HTTP. ensureHttpPullTransport is per-origin idempotent by design (a
|
|
381
389
|
// rotation would otherwise chain shims), so repeat calls reuse.
|
|
@@ -433,7 +441,15 @@ export function createZeroClientInternal<
|
|
|
433
441
|
options.onClientStateNotFound ?? recovery.onClientStateNotFound,
|
|
434
442
|
})
|
|
435
443
|
instanceRef.current = createdInstance
|
|
436
|
-
if (installedTransport)
|
|
444
|
+
if (installedTransport) {
|
|
445
|
+
installedTransports.set(createdInstance, installedTransport)
|
|
446
|
+
queryFaults.set(
|
|
447
|
+
createdInstance,
|
|
448
|
+
new QueryFaults(() => {
|
|
449
|
+
void installedTransport?.pull?.()
|
|
450
|
+
})
|
|
451
|
+
)
|
|
452
|
+
}
|
|
437
453
|
primeGroupCache(recoveryDeps)
|
|
438
454
|
return createdInstance
|
|
439
455
|
}
|
|
@@ -600,6 +616,7 @@ export function createZeroClientInternal<
|
|
|
600
616
|
const useQuery = createUseQuery<Schema>({
|
|
601
617
|
DisabledContext,
|
|
602
618
|
customQueries,
|
|
619
|
+
getQueryFaults: (zero) => queryFaults.get(zero),
|
|
603
620
|
})
|
|
604
621
|
|
|
605
622
|
const useQueryDirect = createDirectUseQuery
|
|
@@ -608,6 +625,7 @@ export function createZeroClientInternal<
|
|
|
608
625
|
customQueries,
|
|
609
626
|
getZero: () => zeroRuntime.zero,
|
|
610
627
|
zeroVersion: zeroInstanceVersion!,
|
|
628
|
+
getQueryFaults: (zero) => queryFaults.get(zero),
|
|
611
629
|
})
|
|
612
630
|
: createUnavailableDirectUseQuery<Schema>()
|
|
613
631
|
|
|
@@ -1244,6 +1262,12 @@ export function createZeroClientInternal<
|
|
|
1244
1262
|
|
|
1245
1263
|
const ProvideZero = IS_SERVER_RUNTIME ? ProvideZeroServer : ProvideZeroClient
|
|
1246
1264
|
|
|
1265
|
+
// committed SetZeroInstance mounts per client. a tree can hold two mounts of
|
|
1266
|
+
// one client at once (a remounted subtree commits before its predecessor
|
|
1267
|
+
// cleans up), and the first cleanup must not clear a facade the second
|
|
1268
|
+
// still owns.
|
|
1269
|
+
const publishedMounts = new Map<ZeroInstance, number>()
|
|
1270
|
+
|
|
1247
1271
|
const SetZeroInstance = () => {
|
|
1248
1272
|
const zeroInstance = useZero<Schema, ZeroMutators>()
|
|
1249
1273
|
|
|
@@ -1256,7 +1280,14 @@ export function createZeroClientInternal<
|
|
|
1256
1280
|
// provider actually unmounts, which is the lifecycle boundary that
|
|
1257
1281
|
// invalidates this generation.
|
|
1258
1282
|
publishZeroInstance(zeroInstance)
|
|
1283
|
+
publishedMounts.set(zeroInstance, (publishedMounts.get(zeroInstance) ?? 0) + 1)
|
|
1259
1284
|
return () => {
|
|
1285
|
+
const remaining = publishedMounts.get(zeroInstance)! - 1
|
|
1286
|
+
if (remaining > 0) {
|
|
1287
|
+
publishedMounts.set(zeroInstance, remaining)
|
|
1288
|
+
return
|
|
1289
|
+
}
|
|
1290
|
+
publishedMounts.delete(zeroInstance)
|
|
1260
1291
|
if (!unpublishZeroInstance(zeroInstance)) return
|
|
1261
1292
|
mutationLifecycle.fence()
|
|
1262
1293
|
}
|
|
@@ -1405,6 +1436,8 @@ export function createZeroClientInternal<
|
|
|
1405
1436
|
? installedTransport.subscribeLifecycle((event: HttpPullLifecycleEvent) => {
|
|
1406
1437
|
if (event.type === 'pull' && event.clientID === zeroInstance.clientID) {
|
|
1407
1438
|
authRefreshAttempts = 0
|
|
1439
|
+
if (event.queryErrors)
|
|
1440
|
+
queryFaults.get(zeroInstance)?.update(event.queryErrors)
|
|
1408
1441
|
}
|
|
1409
1442
|
})
|
|
1410
1443
|
: undefined
|
package/src/generate.test.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
generateDrizzleSchemaFile,
|
|
21
21
|
generateDrizzleSchemaInputFile,
|
|
22
22
|
} from './generate'
|
|
23
|
+
import { createNativeTypeScriptProject } from './native-typescript'
|
|
23
24
|
|
|
24
25
|
const testDir = join(tmpdir(), 'on-zero-test-' + Date.now())
|
|
25
26
|
|
|
@@ -38,6 +39,51 @@ afterEach(() => {
|
|
|
38
39
|
})
|
|
39
40
|
|
|
40
41
|
describe('generate', () => {
|
|
42
|
+
test('scopes generation to its project and keeps explicit ambient argument types', async () => {
|
|
43
|
+
const dataDir = join(testDir, 'data')
|
|
44
|
+
const sourcePath = join(dataDir, 'post/mutations.ts')
|
|
45
|
+
const tsconfig = join(testDir, 'tsconfig.generate.json')
|
|
46
|
+
const ambient = join(testDir, 'ambient.d.ts')
|
|
47
|
+
const unrelated = join(testDir, 'application.ts')
|
|
48
|
+
writeFileSync(
|
|
49
|
+
join(testDir, 'tsconfig.json'),
|
|
50
|
+
JSON.stringify({ include: ['**/*.ts'] })
|
|
51
|
+
)
|
|
52
|
+
writeFileSync(
|
|
53
|
+
tsconfig,
|
|
54
|
+
JSON.stringify({
|
|
55
|
+
extends: './tsconfig.json',
|
|
56
|
+
include: ['data/**/*.ts', 'ambient.d.ts'],
|
|
57
|
+
})
|
|
58
|
+
)
|
|
59
|
+
writeFileSync(ambient, 'type ScopedArgs = { count: number }')
|
|
60
|
+
writeFileSync(unrelated, 'export const application = 1')
|
|
61
|
+
writeFileSync(
|
|
62
|
+
sourcePath,
|
|
63
|
+
`
|
|
64
|
+
export const schema = table('post').columns({ id: string() }).primaryKey('id')
|
|
65
|
+
export const mutate = mutations(schema, permission, {
|
|
66
|
+
publish: async (ctx, args: ScopedArgs) => {},
|
|
67
|
+
})
|
|
68
|
+
`
|
|
69
|
+
)
|
|
70
|
+
const project = await createNativeTypeScriptProject(dataDir, [sourcePath], {
|
|
71
|
+
tsconfig,
|
|
72
|
+
})
|
|
73
|
+
const dependencies = await project.sourceFilePaths()
|
|
74
|
+
await project.close()
|
|
75
|
+
expect(dependencies).toContain(ambient)
|
|
76
|
+
expect(dependencies).not.toContain(unrelated)
|
|
77
|
+
|
|
78
|
+
await generate({ dir: dataDir, tsconfig, silent: true })
|
|
79
|
+
const outputPath = join(dataDir, 'generated/syncedMutations.ts')
|
|
80
|
+
expect(readFileSync(outputPath, 'utf8')).toContain('count: v.number()')
|
|
81
|
+
|
|
82
|
+
writeFileSync(ambient, 'type ScopedArgs = { count: string }')
|
|
83
|
+
await generate({ dir: dataDir, tsconfig, silent: true })
|
|
84
|
+
expect(readFileSync(outputPath, 'utf8')).toContain('count: v.string()')
|
|
85
|
+
})
|
|
86
|
+
|
|
41
87
|
test('runs after command when files change', async () => {
|
|
42
88
|
writeFileSync(
|
|
43
89
|
join(testDir, 'post/mutations.ts'),
|
|
@@ -69,6 +115,76 @@ describe('generate', () => {
|
|
|
69
115
|
expect(second.filesChanged).toBe(0)
|
|
70
116
|
})
|
|
71
117
|
|
|
118
|
+
test('refreshes validators when a transitive imported union changes', async () => {
|
|
119
|
+
const dataDir = join(testDir, 'data')
|
|
120
|
+
const kindsPath = join(testDir, 'protocol/kinds.ts')
|
|
121
|
+
writeFileSync(kindsPath, `export type Kind = 'send'`)
|
|
122
|
+
writeFileSync(
|
|
123
|
+
join(testDir, 'protocol/index.ts'),
|
|
124
|
+
`export type { Kind } from './kinds'`
|
|
125
|
+
)
|
|
126
|
+
writeFileSync(
|
|
127
|
+
join(dataDir, 'command/mutations.ts'),
|
|
128
|
+
`import type { Kind } from '../../protocol'
|
|
129
|
+
export const schema = table('command').columns({ id: string() }).primaryKey('id')
|
|
130
|
+
export const mutate = mutations(schema, permission, {
|
|
131
|
+
dispatch: async (ctx, args: { kind: Kind }) => {},
|
|
132
|
+
})`
|
|
133
|
+
)
|
|
134
|
+
const validator = () => {
|
|
135
|
+
const context = { v, exports: {} as { mutationValidators?: any } }
|
|
136
|
+
runInNewContext(
|
|
137
|
+
readFileSync(join(dataDir, 'generated/syncedMutations.ts'), 'utf8')
|
|
138
|
+
.replace(/^import .*$/m, '')
|
|
139
|
+
.replace('export const', 'exports.mutationValidators ='),
|
|
140
|
+
context
|
|
141
|
+
)
|
|
142
|
+
return context.exports.mutationValidators!.command.dispatch
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
await generate({ dir: dataDir, silent: true })
|
|
146
|
+
expect(v.safeParse(validator(), { kind: 'send' }).success).toBe(true)
|
|
147
|
+
expect(v.safeParse(validator(), { kind: 'throttle' }).success).toBe(false)
|
|
148
|
+
expect((await generate({ dir: dataDir, silent: true })).filesChanged).toBe(0)
|
|
149
|
+
|
|
150
|
+
writeFileSync(kindsPath, `export type Kind = 'send' | 'throttle'`)
|
|
151
|
+
await generate({ dir: dataDir, silent: true })
|
|
152
|
+
expect(v.safeParse(validator(), { kind: 'throttle' }).success).toBe(true)
|
|
153
|
+
expect(v.safeParse(validator(), { kind: 'unknown' }).success).toBe(false)
|
|
154
|
+
expect((await generate({ dir: dataDir, silent: true })).filesChanged).toBe(0)
|
|
155
|
+
|
|
156
|
+
writeFileSync(kindsPath, `export type Kind = 'throttle'`)
|
|
157
|
+
await generate({ dir: dataDir, silent: true })
|
|
158
|
+
expect(v.safeParse(validator(), { kind: 'send' }).success).toBe(false)
|
|
159
|
+
expect(v.safeParse(validator(), { kind: 'throttle' }).success).toBe(true)
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
test('validates a type reused by siblings and stops at a cycle', async () => {
|
|
163
|
+
const dataDir = join(testDir, 'data')
|
|
164
|
+
writeFileSync(
|
|
165
|
+
join(dataDir, 'command/mutations.ts'),
|
|
166
|
+
`type Tree = { name: string; children: Tree[] }
|
|
167
|
+
export const schema = table('command').columns({ id: string() }).primaryKey('id')
|
|
168
|
+
export const mutate = mutations(schema, permission, {
|
|
169
|
+
dispatch: async (ctx, args: { a: string[]; b: string[]; nested: { c: string[] }; tree: Tree }) => {},
|
|
170
|
+
})`
|
|
171
|
+
)
|
|
172
|
+
await generate({ dir: dataDir, silent: true })
|
|
173
|
+
const context = { v, exports: {} as { mutationValidators?: any } }
|
|
174
|
+
runInNewContext(
|
|
175
|
+
readFileSync(join(dataDir, 'generated/syncedMutations.ts'), 'utf8')
|
|
176
|
+
.replace(/^import .*$/m, '')
|
|
177
|
+
.replace('export const', 'exports.mutationValidators ='),
|
|
178
|
+
context
|
|
179
|
+
)
|
|
180
|
+
const validator = context.exports.mutationValidators!.command.dispatch
|
|
181
|
+
const tree = { name: 'root', children: [{ name: 'leaf', children: [] }] }
|
|
182
|
+
const valid = { a: ['x'], b: ['y'], nested: { c: ['z'] }, tree }
|
|
183
|
+
expect(v.safeParse(validator, valid).success).toBe(true)
|
|
184
|
+
expect(v.safeParse(validator, { ...valid, b: [1] }).success).toBe(false)
|
|
185
|
+
expect(v.safeParse(validator, { ...valid, nested: { c: [1] } }).success).toBe(false)
|
|
186
|
+
})
|
|
187
|
+
|
|
72
188
|
test('force regenerates without source changes', async () => {
|
|
73
189
|
writeFileSync(
|
|
74
190
|
join(testDir, 'post/mutations.ts'),
|