over-zero 0.0.10 → 0.0.11
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/LICENSE +21 -0
- package/dist/cjs/{build/schema.cjs → builder.cjs} +10 -7
- package/dist/cjs/{helpers/zeroEmitter.js → builder.js} +11 -7
- package/dist/cjs/builder.js.map +6 -0
- package/dist/cjs/builder.native.js +35 -0
- package/dist/cjs/builder.native.js.map +1 -0
- package/dist/cjs/cli.cjs +299 -0
- package/dist/cjs/cli.js +292 -0
- package/dist/cjs/cli.js.map +6 -0
- package/dist/cjs/cli.native.js +386 -0
- package/dist/cjs/cli.native.js.map +1 -0
- package/dist/cjs/createPermissions.cjs +22 -56
- package/dist/cjs/createPermissions.js +22 -64
- package/dist/cjs/createPermissions.js.map +1 -1
- package/dist/cjs/createPermissions.native.js +61 -87
- package/dist/cjs/createPermissions.native.js.map +1 -6
- package/dist/cjs/createZeroClient.cjs +41 -21
- package/dist/cjs/createZeroClient.js +23 -16
- package/dist/cjs/createZeroClient.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +139 -81
- package/dist/cjs/createZeroClient.native.js.map +1 -6
- package/dist/cjs/createZeroServer.cjs +40 -34
- package/dist/cjs/createZeroServer.js +35 -27
- package/dist/cjs/createZeroServer.js.map +2 -2
- package/dist/cjs/createZeroServer.native.js +119 -77
- package/dist/cjs/createZeroServer.native.js.map +1 -6
- package/dist/cjs/helpers/batchQuery.native.js +25 -18
- package/dist/cjs/helpers/batchQuery.native.js.map +1 -6
- package/dist/cjs/helpers/context.js.map +1 -1
- package/dist/cjs/helpers/context.native.js +20 -19
- package/dist/cjs/helpers/context.native.js.map +1 -6
- package/dist/cjs/helpers/createMutators.cjs +2 -2
- package/dist/cjs/helpers/createMutators.js +2 -2
- package/dist/cjs/helpers/createMutators.js.map +1 -1
- package/dist/cjs/helpers/createMutators.native.js +52 -41
- package/dist/cjs/helpers/createMutators.native.js.map +1 -6
- package/dist/cjs/helpers/didRunPermissionCheck.native.js +27 -22
- package/dist/cjs/helpers/didRunPermissionCheck.native.js.map +1 -6
- package/dist/cjs/helpers/ensureLoggedIn.cjs +2 -2
- package/dist/cjs/helpers/ensureLoggedIn.js +2 -2
- package/dist/cjs/helpers/ensureLoggedIn.js.map +1 -1
- package/dist/cjs/helpers/ensureLoggedIn.native.js +25 -18
- package/dist/cjs/helpers/ensureLoggedIn.native.js.map +1 -6
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.cjs +30 -0
- package/dist/cjs/{build/schema.native.js → helpers/getQueryOrMutatorAuthData.js} +9 -13
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.js.map +6 -0
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js +33 -0
- package/dist/cjs/helpers/getQueryOrMutatorAuthData.native.js.map +1 -0
- package/dist/cjs/helpers/mutatorContext.cjs +40 -0
- package/dist/cjs/helpers/mutatorContext.js +36 -0
- package/dist/cjs/helpers/mutatorContext.js.map +6 -0
- package/dist/cjs/helpers/mutatorContext.native.js +43 -0
- package/dist/cjs/helpers/mutatorContext.native.js.map +1 -0
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js +102 -82
- package/dist/cjs/helpers/prettyFormatZeroQuery.native.js.map +1 -6
- package/dist/cjs/helpers/queryContext.cjs +40 -0
- package/dist/cjs/helpers/{getDidRunPermissionCheck.native.js → queryContext.js} +21 -13
- package/dist/cjs/helpers/queryContext.js.map +6 -0
- package/dist/cjs/helpers/queryContext.native.js +43 -0
- package/dist/cjs/helpers/queryContext.native.js.map +1 -0
- package/dist/cjs/helpers/queryOrMutatorAuthData.js +1 -0
- package/dist/cjs/helpers/queryOrMutatorAuthData.native.js +2 -0
- package/dist/cjs/helpers/queryOrMutatorContext.js +1 -0
- package/dist/cjs/helpers/queryOrMutatorContext.native.js +2 -0
- package/dist/cjs/helpers/useZeroDebug.native.js +63 -50
- package/dist/cjs/helpers/useZeroDebug.native.js.map +1 -6
- package/dist/cjs/index.cjs +3 -2
- package/dist/cjs/index.js +3 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +21 -26
- package/dist/cjs/index.native.js.map +1 -6
- package/dist/cjs/mutations.cjs +1 -1
- package/dist/cjs/mutations.js +1 -1
- package/dist/cjs/mutations.js.map +1 -1
- package/dist/cjs/mutations.native.js +33 -28
- package/dist/cjs/mutations.native.js.map +1 -6
- package/dist/cjs/query.cjs +34 -0
- package/dist/cjs/{helpers/zeroEmitter.native.js → query.js} +13 -11
- package/dist/cjs/query.js.map +6 -0
- package/dist/cjs/query.native.js +39 -0
- package/dist/cjs/query.native.js.map +1 -0
- package/dist/cjs/{helpers/getDidRunPermissionCheck.cjs → queryBuilder.cjs} +10 -6
- package/dist/cjs/{build/schema.js → queryBuilder.js} +11 -7
- package/dist/cjs/queryBuilder.js.map +6 -0
- package/dist/cjs/queryBuilder.native.js +35 -0
- package/dist/cjs/queryBuilder.native.js.map +1 -0
- package/dist/cjs/server.native.js +13 -12
- package/dist/cjs/server.native.js.map +1 -6
- package/dist/cjs/state.cjs +52 -0
- package/dist/cjs/state.js +40 -0
- package/dist/cjs/state.js.map +6 -0
- package/dist/cjs/state.native.js +55 -0
- package/dist/cjs/state.native.js.map +1 -0
- package/dist/cjs/types.native.js +9 -5
- package/dist/cjs/types.native.js.map +1 -6
- package/dist/cjs/where.cjs +9 -2
- package/dist/cjs/where.js +8 -2
- package/dist/cjs/where.js.map +2 -2
- package/dist/cjs/where.native.js +29 -19
- package/dist/cjs/where.native.js.map +1 -6
- package/dist/cjs/{helpers/zeroEmitter.cjs → zql.cjs} +10 -6
- package/dist/cjs/{helpers/getDidRunPermissionCheck.js → zql.js} +11 -6
- package/dist/cjs/zql.js.map +6 -0
- package/dist/cjs/zql.native.js +35 -0
- package/dist/cjs/zql.native.js.map +1 -0
- package/dist/esm/builder.js +10 -0
- package/dist/esm/builder.js.map +6 -0
- package/dist/esm/builder.mjs +8 -0
- package/dist/esm/builder.mjs.map +1 -0
- package/dist/esm/builder.native.js +9 -0
- package/dist/esm/builder.native.js.map +1 -0
- package/dist/esm/cli.js +278 -0
- package/dist/esm/cli.js.map +6 -0
- package/dist/esm/cli.mjs +278 -0
- package/dist/esm/cli.mjs.map +1 -0
- package/dist/esm/cli.native.js +362 -0
- package/dist/esm/cli.native.js.map +1 -0
- package/dist/esm/createPermissions.js +21 -64
- package/dist/esm/createPermissions.js.map +1 -1
- package/dist/esm/createPermissions.mjs +20 -54
- package/dist/esm/createPermissions.mjs.map +1 -1
- package/dist/esm/createPermissions.native.js +26 -66
- package/dist/esm/createPermissions.native.js.map +1 -1
- package/dist/esm/createZeroClient.js +24 -16
- package/dist/esm/createZeroClient.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +40 -20
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +56 -25
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroServer.js +36 -19
- package/dist/esm/createZeroServer.js.map +1 -1
- package/dist/esm/createZeroServer.mjs +35 -18
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js +43 -23
- package/dist/esm/createZeroServer.native.js.map +1 -1
- package/dist/esm/helpers/context.js.map +1 -1
- package/dist/esm/helpers/context.mjs.map +1 -1
- package/dist/esm/helpers/context.native.js.map +1 -1
- package/dist/esm/helpers/createMutators.js +1 -1
- package/dist/esm/helpers/createMutators.mjs +1 -1
- package/dist/esm/helpers/createMutators.native.js +1 -1
- package/dist/esm/helpers/ensureLoggedIn.js +2 -2
- package/dist/esm/helpers/ensureLoggedIn.js.map +1 -1
- package/dist/esm/helpers/ensureLoggedIn.mjs +2 -2
- 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/getQueryOrMutatorAuthData.js +9 -0
- package/dist/esm/helpers/getQueryOrMutatorAuthData.js.map +6 -0
- package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs +7 -0
- package/dist/esm/helpers/getQueryOrMutatorAuthData.mjs.map +1 -0
- package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js +7 -0
- package/dist/esm/helpers/getQueryOrMutatorAuthData.native.js.map +1 -0
- package/dist/esm/helpers/mutatorContext.js +20 -0
- package/dist/esm/helpers/mutatorContext.js.map +6 -0
- package/dist/esm/helpers/mutatorContext.mjs +15 -0
- package/dist/esm/helpers/mutatorContext.mjs.map +1 -0
- package/dist/esm/helpers/mutatorContext.native.js +15 -0
- package/dist/esm/helpers/mutatorContext.native.js.map +1 -0
- package/dist/esm/helpers/queryContext.js +20 -0
- package/dist/esm/helpers/queryContext.js.map +6 -0
- package/dist/esm/helpers/queryContext.mjs +15 -0
- package/dist/esm/helpers/queryContext.mjs.map +1 -0
- package/dist/esm/helpers/queryContext.native.js +15 -0
- package/dist/esm/helpers/queryContext.native.js.map +1 -0
- package/dist/esm/helpers/queryOrMutatorAuthData.js +1 -0
- package/dist/esm/helpers/queryOrMutatorAuthData.mjs +2 -0
- package/dist/esm/helpers/queryOrMutatorAuthData.native.js +2 -0
- package/dist/esm/helpers/queryOrMutatorContext.js +1 -0
- package/dist/esm/helpers/queryOrMutatorContext.mjs +2 -0
- package/dist/esm/helpers/queryOrMutatorContext.mjs.map +1 -0
- package/dist/esm/helpers/queryOrMutatorContext.native.js +2 -0
- package/dist/esm/helpers/queryOrMutatorContext.native.js.map +1 -0
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +3 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +3 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/mutations.js +1 -1
- package/dist/esm/mutations.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 +1 -1
- package/dist/esm/mutations.native.js.map +1 -1
- package/dist/esm/query.js +13 -0
- package/dist/esm/query.js.map +6 -0
- package/dist/esm/query.mjs +11 -0
- package/dist/esm/query.mjs.map +1 -0
- package/dist/esm/query.native.js +13 -0
- package/dist/esm/query.native.js.map +1 -0
- package/dist/esm/queryBuilder.js +10 -0
- package/dist/esm/queryBuilder.js.map +6 -0
- package/dist/esm/queryBuilder.mjs +8 -0
- package/dist/esm/queryBuilder.mjs.map +1 -0
- package/dist/esm/queryBuilder.native.js +9 -0
- package/dist/esm/queryBuilder.native.js.map +1 -0
- package/dist/esm/state.js +24 -0
- package/dist/esm/state.js.map +6 -0
- package/dist/esm/state.mjs +25 -0
- package/dist/esm/state.mjs.map +1 -0
- package/dist/esm/state.native.js +25 -0
- package/dist/esm/state.native.js.map +1 -0
- package/dist/esm/where.js +9 -2
- package/dist/esm/where.js.map +2 -2
- package/dist/esm/where.mjs +9 -2
- package/dist/esm/where.mjs.map +1 -1
- package/dist/esm/where.native.js +10 -2
- package/dist/esm/where.native.js.map +1 -1
- package/dist/esm/zql.js +10 -0
- package/dist/esm/zql.js.map +6 -0
- package/dist/esm/zql.mjs +8 -0
- package/dist/esm/zql.mjs.map +1 -0
- package/dist/esm/zql.native.js +9 -0
- package/dist/esm/zql.native.js.map +1 -0
- package/package.json +13 -3
- package/readme.md +460 -13
- package/src/cli.ts +511 -0
- package/src/createPermissions.ts +21 -123
- package/src/createZeroClient.tsx +107 -23
- package/src/createZeroServer.ts +64 -29
- package/src/helpers/createMutators.ts +1 -1
- package/src/helpers/ensureLoggedIn.ts +2 -2
- package/src/helpers/getQueryOrMutatorAuthData.ts +11 -0
- package/src/helpers/{context.ts → mutatorContext.ts} +2 -6
- package/src/index.ts +3 -2
- package/src/mutations.ts +1 -1
- package/src/state.ts +32 -0
- package/src/types.ts +11 -5
- package/src/where.ts +33 -8
- package/src/zql.ts +9 -0
- package/types/builder.d.ts +3 -0
- package/types/builder.d.ts.map +1 -0
- package/types/cli.d.ts +3 -0
- package/types/cli.d.ts.map +1 -0
- package/types/createPermissions.d.ts +3 -27
- package/types/createPermissions.d.ts.map +1 -1
- package/types/createZeroClient.d.ts +16 -4
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroServer.d.ts +33 -6
- package/types/createZeroServer.d.ts.map +1 -1
- package/types/helpers/context.d.ts.map +1 -1
- package/types/helpers/getQueryOrMutatorAuthData.d.ts +3 -0
- package/types/helpers/getQueryOrMutatorAuthData.d.ts.map +1 -0
- package/types/helpers/mutatorContext.d.ts +5 -0
- package/types/helpers/mutatorContext.d.ts.map +1 -0
- package/types/helpers/queryContext.d.ts +5 -0
- package/types/helpers/queryContext.d.ts.map +1 -0
- package/types/index.d.ts +3 -2
- package/types/index.d.ts.map +1 -1
- package/types/state.d.ts +8 -0
- package/types/state.d.ts.map +1 -0
- package/types/types.d.ts +5 -4
- package/types/types.d.ts.map +1 -1
- package/types/where.d.ts +3 -2
- package/types/where.d.ts.map +1 -1
- package/types/zql.d.ts +3 -0
- package/types/zql.d.ts.map +1 -0
- package/dist/cjs/build/readPermissions.cjs +0 -51
- package/dist/cjs/build/readPermissions.js +0 -48
- package/dist/cjs/build/readPermissions.js.map +0 -6
- package/dist/cjs/build/readPermissions.native.js +0 -56
- package/dist/cjs/build/readPermissions.native.js.map +0 -6
- package/dist/cjs/build/schema.js.map +0 -6
- package/dist/cjs/build/schema.native.js.map +0 -6
- package/dist/cjs/createClient.cjs +0 -89
- package/dist/cjs/createClient.js +0 -76
- package/dist/cjs/createClient.js.map +0 -6
- package/dist/cjs/createClient.native.js +0 -81
- package/dist/cjs/createClient.native.js.map +0 -6
- package/dist/cjs/createMutations.cjs +0 -50
- package/dist/cjs/createMutations.js +0 -43
- package/dist/cjs/createMutations.js.map +0 -6
- package/dist/cjs/createMutations.native.js +0 -50
- package/dist/cjs/createMutations.native.js.map +0 -6
- package/dist/cjs/createServer.cjs +0 -92
- package/dist/cjs/createServer.js +0 -71
- package/dist/cjs/createServer.js.map +0 -6
- package/dist/cjs/createServer.native.js +0 -75
- package/dist/cjs/createServer.native.js.map +0 -6
- package/dist/cjs/createZero.cjs +0 -128
- package/dist/cjs/createZero.js +0 -107
- package/dist/cjs/createZero.js.map +0 -6
- package/dist/cjs/createZero.native.js +0 -115
- package/dist/cjs/createZero.native.js.map +0 -6
- package/dist/cjs/helpers/clearZeroDatabase.cjs +0 -57
- package/dist/cjs/helpers/clearZeroDatabase.js +0 -57
- package/dist/cjs/helpers/clearZeroDatabase.js.map +0 -6
- package/dist/cjs/helpers/clearZeroDatabase.native.js +0 -71
- package/dist/cjs/helpers/clearZeroDatabase.native.js.map +0 -6
- package/dist/cjs/helpers/getAuthData.js +0 -1
- package/dist/cjs/helpers/getAuthData.native.js +0 -2
- package/dist/cjs/helpers/getDidRunPermissionCheck.js.map +0 -6
- package/dist/cjs/helpers/getDidRunPermissionCheck.native.js.map +0 -6
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.cjs +0 -40
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.js +0 -36
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.js.map +0 -6
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.native.js +0 -36
- package/dist/cjs/helpers/setupZeroClientGlobalEffects.native.js.map +0 -6
- package/dist/cjs/helpers/useAuthData.js +0 -1
- package/dist/cjs/helpers/useAuthData.native.js +0 -2
- package/dist/cjs/helpers/useZDB.cjs +0 -70
- package/dist/cjs/helpers/useZDB.js +0 -51
- package/dist/cjs/helpers/useZDB.js.map +0 -6
- package/dist/cjs/helpers/useZDB.native.js +0 -68
- package/dist/cjs/helpers/useZDB.native.js.map +0 -6
- package/dist/cjs/helpers/zeroEmitter.js.map +0 -6
- package/dist/cjs/helpers/zeroEmitter.native.js.map +0 -6
- package/dist/esm/build/readPermissions.js +0 -36
- package/dist/esm/build/readPermissions.js.map +0 -6
- package/dist/esm/build/readPermissions.mjs +0 -28
- package/dist/esm/build/readPermissions.mjs.map +0 -1
- package/dist/esm/build/readPermissions.native.js +0 -34
- package/dist/esm/build/readPermissions.native.js.map +0 -1
- package/dist/esm/build/schema.js +0 -7
- package/dist/esm/build/schema.js.map +0 -6
- package/dist/esm/build/schema.mjs +0 -4
- package/dist/esm/build/schema.mjs.map +0 -1
- package/dist/esm/build/schema.native.js +0 -4
- package/dist/esm/build/schema.native.js.map +0 -1
- package/dist/esm/createClient.js +0 -68
- package/dist/esm/createClient.js.map +0 -6
- package/dist/esm/createClient.mjs +0 -66
- package/dist/esm/createClient.mjs.map +0 -1
- package/dist/esm/createClient.native.js +0 -74
- package/dist/esm/createClient.native.js.map +0 -1
- package/dist/esm/createMutations.js +0 -27
- package/dist/esm/createMutations.js.map +0 -6
- package/dist/esm/createMutations.mjs +0 -27
- package/dist/esm/createMutations.mjs.map +0 -1
- package/dist/esm/createMutations.native.js +0 -29
- package/dist/esm/createMutations.native.js.map +0 -1
- package/dist/esm/createServer.js +0 -54
- package/dist/esm/createServer.js.map +0 -6
- package/dist/esm/createServer.mjs +0 -58
- package/dist/esm/createServer.mjs.map +0 -1
- package/dist/esm/createServer.native.js +0 -61
- package/dist/esm/createServer.native.js.map +0 -1
- package/dist/esm/createZero.js +0 -99
- package/dist/esm/createZero.js.map +0 -6
- package/dist/esm/createZero.mjs +0 -105
- package/dist/esm/createZero.mjs.map +0 -1
- package/dist/esm/createZero.native.js +0 -119
- package/dist/esm/createZero.native.js.map +0 -1
- package/dist/esm/helpers/clearZeroDatabase.js +0 -42
- package/dist/esm/helpers/clearZeroDatabase.js.map +0 -6
- package/dist/esm/helpers/clearZeroDatabase.mjs +0 -34
- package/dist/esm/helpers/clearZeroDatabase.mjs.map +0 -1
- package/dist/esm/helpers/clearZeroDatabase.native.js +0 -50
- package/dist/esm/helpers/clearZeroDatabase.native.js.map +0 -1
- package/dist/esm/helpers/getAuthData.js +0 -1
- package/dist/esm/helpers/getAuthData.js.map +0 -6
- package/dist/esm/helpers/getAuthData.mjs +0 -2
- package/dist/esm/helpers/getAuthData.native.js +0 -2
- package/dist/esm/helpers/getDidRunPermissionCheck.js +0 -5
- package/dist/esm/helpers/getDidRunPermissionCheck.js.map +0 -6
- package/dist/esm/helpers/getDidRunPermissionCheck.mjs +0 -4
- package/dist/esm/helpers/getDidRunPermissionCheck.mjs.map +0 -1
- package/dist/esm/helpers/getDidRunPermissionCheck.native.js +0 -6
- package/dist/esm/helpers/getDidRunPermissionCheck.native.js.map +0 -1
- package/dist/esm/helpers/setupZeroClientGlobalEffects.js +0 -40
- package/dist/esm/helpers/setupZeroClientGlobalEffects.js.map +0 -6
- package/dist/esm/helpers/setupZeroClientGlobalEffects.mjs +0 -41
- package/dist/esm/helpers/setupZeroClientGlobalEffects.mjs.map +0 -1
- package/dist/esm/helpers/setupZeroClientGlobalEffects.native.js +0 -41
- package/dist/esm/helpers/setupZeroClientGlobalEffects.native.js.map +0 -1
- package/dist/esm/helpers/useAuthData.js +0 -1
- package/dist/esm/helpers/useAuthData.js.map +0 -6
- package/dist/esm/helpers/useAuthData.mjs +0 -2
- package/dist/esm/helpers/useAuthData.native.js +0 -2
- package/dist/esm/helpers/useZDB.js +0 -38
- package/dist/esm/helpers/useZDB.js.map +0 -6
- package/dist/esm/helpers/useZDB.mjs +0 -47
- package/dist/esm/helpers/useZDB.mjs.map +0 -1
- package/dist/esm/helpers/useZDB.native.js +0 -55
- package/dist/esm/helpers/useZDB.native.js.map +0 -1
- package/dist/esm/helpers/zeroEmitter.js +0 -6
- package/dist/esm/helpers/zeroEmitter.js.map +0 -6
- package/dist/esm/helpers/zeroEmitter.mjs +0 -4
- package/dist/esm/helpers/zeroEmitter.mjs.map +0 -1
- package/dist/esm/helpers/zeroEmitter.native.js +0 -4
- package/dist/esm/helpers/zeroEmitter.native.js.map +0 -1
- /package/dist/cjs/helpers/{getAuthData.cjs → queryOrMutatorAuthData.cjs} +0 -0
- /package/dist/cjs/helpers/{getAuthData.js.map → queryOrMutatorAuthData.js.map} +0 -0
- /package/dist/{esm/helpers/getAuthData.mjs.map → cjs/helpers/queryOrMutatorAuthData.native.js.map} +0 -0
- /package/dist/cjs/helpers/{useAuthData.cjs → queryOrMutatorContext.cjs} +0 -0
- /package/dist/cjs/helpers/{getAuthData.native.js.map → queryOrMutatorContext.js.map} +0 -0
- /package/dist/{esm/helpers/getAuthData.native.js.map → cjs/helpers/queryOrMutatorContext.native.js.map} +0 -0
- /package/dist/{cjs/helpers/useAuthData.js.map → esm/helpers/queryOrMutatorAuthData.js.map} +0 -0
- /package/dist/esm/helpers/{useAuthData.mjs.map → queryOrMutatorAuthData.mjs.map} +0 -0
- /package/dist/esm/helpers/{useAuthData.native.js.map → queryOrMutatorAuthData.native.js.map} +0 -0
- /package/dist/{cjs/helpers/useAuthData.native.js.map → esm/helpers/queryOrMutatorContext.js.map} +0 -0
package/src/cli.ts
ADDED
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { ModelToValibot } from '@sinclair/typebox-codegen/model'
|
|
3
|
+
import { TypeScriptToModel } from '@sinclair/typebox-codegen/typescript'
|
|
4
|
+
import { defineCommand, runMain } from 'citty'
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'
|
|
6
|
+
import { basename, resolve } from 'node:path'
|
|
7
|
+
import * as ts from 'typescript'
|
|
8
|
+
|
|
9
|
+
const generateQueries = defineCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
name: 'generate-queries',
|
|
12
|
+
description: 'Generate server-side query validators from TypeScript query functions',
|
|
13
|
+
},
|
|
14
|
+
args: {
|
|
15
|
+
dir: {
|
|
16
|
+
type: 'positional',
|
|
17
|
+
description: 'Directory containing query files',
|
|
18
|
+
required: false,
|
|
19
|
+
default: '.',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
async run({ args }) {
|
|
23
|
+
const dir = resolve(args.dir)
|
|
24
|
+
|
|
25
|
+
const { readdirSync, writeFileSync } = await import('node:fs')
|
|
26
|
+
|
|
27
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.ts'))
|
|
28
|
+
|
|
29
|
+
const allQueries: Array<{ name: string; params: string; valibotCode: string }> = []
|
|
30
|
+
|
|
31
|
+
// process files in parallel
|
|
32
|
+
const results = await Promise.all(
|
|
33
|
+
files.map(async (file) => {
|
|
34
|
+
const filePath = resolve(dir, file)
|
|
35
|
+
const queries: typeof allQueries = []
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
const content = readFileSync(filePath, 'utf-8')
|
|
39
|
+
|
|
40
|
+
const sourceFile = ts.createSourceFile(
|
|
41
|
+
filePath,
|
|
42
|
+
content,
|
|
43
|
+
ts.ScriptTarget.Latest,
|
|
44
|
+
true
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
ts.forEachChild(sourceFile, (node) => {
|
|
48
|
+
if (ts.isVariableStatement(node)) {
|
|
49
|
+
const exportModifier = node.modifiers?.find(
|
|
50
|
+
(m) => m.kind === ts.SyntaxKind.ExportKeyword
|
|
51
|
+
)
|
|
52
|
+
if (!exportModifier) return
|
|
53
|
+
|
|
54
|
+
const declaration = node.declarationList.declarations[0]
|
|
55
|
+
if (!declaration || !ts.isVariableDeclaration(declaration)) return
|
|
56
|
+
|
|
57
|
+
const name = declaration.name.getText(sourceFile)
|
|
58
|
+
|
|
59
|
+
if (
|
|
60
|
+
declaration.initializer &&
|
|
61
|
+
ts.isArrowFunction(declaration.initializer)
|
|
62
|
+
) {
|
|
63
|
+
const params = declaration.initializer.parameters
|
|
64
|
+
let paramType = 'void'
|
|
65
|
+
|
|
66
|
+
if (params.length > 0) {
|
|
67
|
+
const param = params[0]!
|
|
68
|
+
paramType = param.type?.getText(sourceFile) || 'unknown'
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
const typeString = `type QueryParams = ${paramType}`
|
|
73
|
+
const model = TypeScriptToModel.Generate(typeString)
|
|
74
|
+
const valibotCode = ModelToValibot.Generate(model)
|
|
75
|
+
|
|
76
|
+
queries.push({ name, params: paramType, valibotCode })
|
|
77
|
+
} catch (err) {
|
|
78
|
+
console.error(`✗ ${name}: ${err}`)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
} catch (err) {
|
|
84
|
+
console.error(`Error processing ${file}:`, err)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return queries
|
|
88
|
+
})
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
allQueries.push(...results.flat())
|
|
92
|
+
console.info(`✓ ${allQueries.length} query validators`)
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
function generateServerQueriesFile(
|
|
97
|
+
queries: Array<{ name: string; params: string; valibotCode: string }>
|
|
98
|
+
) {
|
|
99
|
+
const imports = `import * as v from 'valibot'\nimport * as queries from './queries'\n`
|
|
100
|
+
|
|
101
|
+
const validators = queries
|
|
102
|
+
.map((q) => {
|
|
103
|
+
// extract just the schema definition (without import and type export)
|
|
104
|
+
const lines = q.valibotCode.split('\n').filter((l) => l.trim())
|
|
105
|
+
// find line starting with "export const QueryParams"
|
|
106
|
+
const schemaLineIndex = lines.findIndex((l) =>
|
|
107
|
+
l.startsWith('export const QueryParams')
|
|
108
|
+
)
|
|
109
|
+
if (schemaLineIndex === -1) {
|
|
110
|
+
return `export const ${q.name}Schema = v.void()`
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// get the full schema (might be multiline)
|
|
114
|
+
const schemaLines: string[] = []
|
|
115
|
+
let openBraces = 0
|
|
116
|
+
let started = false
|
|
117
|
+
|
|
118
|
+
for (let i = schemaLineIndex; i < lines.length; i++) {
|
|
119
|
+
const line = lines[i]!
|
|
120
|
+
const cleaned = started ? line : line.replace('export const QueryParams = ', '')
|
|
121
|
+
schemaLines.push(cleaned)
|
|
122
|
+
started = true
|
|
123
|
+
|
|
124
|
+
// count braces to know when we're done
|
|
125
|
+
openBraces += (cleaned.match(/\{/g) || []).length
|
|
126
|
+
openBraces -= (cleaned.match(/\}/g) || []).length
|
|
127
|
+
openBraces += (cleaned.match(/\(/g) || []).length
|
|
128
|
+
openBraces -= (cleaned.match(/\)/g) || []).length
|
|
129
|
+
|
|
130
|
+
// done when braces are balanced and we have at least one line
|
|
131
|
+
if (openBraces === 0 && schemaLines.length > 0) {
|
|
132
|
+
break
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const schemaDef = schemaLines.join('\n')
|
|
137
|
+
return `export const ${q.name}Schema = ${schemaDef}`
|
|
138
|
+
})
|
|
139
|
+
.join('\n\n')
|
|
140
|
+
|
|
141
|
+
const queryMap = `\nexport const queryValidators = {\n${queries.map((q) => ` ${q.name}: ${q.name}Schema,`).join('\n')}\n} as const\n`
|
|
142
|
+
|
|
143
|
+
return imports + '\n' + validators + '\n' + queryMap
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const generate = defineCommand({
|
|
147
|
+
meta: {
|
|
148
|
+
name: 'generate',
|
|
149
|
+
description: 'Generate models, types, tables, and query validators',
|
|
150
|
+
},
|
|
151
|
+
args: {
|
|
152
|
+
dir: {
|
|
153
|
+
type: 'positional',
|
|
154
|
+
description: 'Base directory (defaults to src/data)',
|
|
155
|
+
required: false,
|
|
156
|
+
default: 'src/data',
|
|
157
|
+
},
|
|
158
|
+
watch: {
|
|
159
|
+
type: 'boolean',
|
|
160
|
+
description: 'Watch for changes and regenerate',
|
|
161
|
+
required: false,
|
|
162
|
+
default: false,
|
|
163
|
+
},
|
|
164
|
+
after: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
description: 'Command to run after generation completes',
|
|
167
|
+
required: false,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
async run({ args }) {
|
|
171
|
+
const baseDir = resolve(args.dir)
|
|
172
|
+
const modelsDir = resolve(baseDir, 'models')
|
|
173
|
+
const generatedDir = resolve(baseDir, 'generated')
|
|
174
|
+
const queriesDir = resolve(baseDir, 'queries')
|
|
175
|
+
|
|
176
|
+
const runGenerate = async () => {
|
|
177
|
+
// ensure generated dir exists
|
|
178
|
+
if (!existsSync(generatedDir)) {
|
|
179
|
+
mkdirSync(generatedDir, { recursive: true })
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// read all model files and check for schemas in parallel
|
|
183
|
+
const allModelFiles = readdirSync(modelsDir)
|
|
184
|
+
.filter((f) => f.endsWith('.ts'))
|
|
185
|
+
.sort()
|
|
186
|
+
|
|
187
|
+
const schemaChecks = await Promise.all(
|
|
188
|
+
allModelFiles.map(async (f) => ({
|
|
189
|
+
file: f,
|
|
190
|
+
hasSchema: readFileSync(resolve(modelsDir, f), 'utf-8').includes(
|
|
191
|
+
'export const schema = table('
|
|
192
|
+
),
|
|
193
|
+
}))
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
const filesWithSchema = schemaChecks.filter((c) => c.hasSchema).map((c) => c.file)
|
|
197
|
+
|
|
198
|
+
// generate all files in parallel
|
|
199
|
+
const [modelsOutput, typesOutput, tablesOutput] = await Promise.all([
|
|
200
|
+
Promise.resolve(generateModelsFile(allModelFiles)),
|
|
201
|
+
Promise.resolve(generateTypesFile(filesWithSchema)),
|
|
202
|
+
Promise.resolve(generateTablesFile(filesWithSchema)),
|
|
203
|
+
])
|
|
204
|
+
|
|
205
|
+
// write all generated files in parallel
|
|
206
|
+
await Promise.all([
|
|
207
|
+
Promise.resolve(
|
|
208
|
+
writeFileSync(resolve(generatedDir, 'models.ts'), modelsOutput, 'utf-8')
|
|
209
|
+
),
|
|
210
|
+
Promise.resolve(
|
|
211
|
+
writeFileSync(resolve(generatedDir, 'types.ts'), typesOutput, 'utf-8')
|
|
212
|
+
),
|
|
213
|
+
Promise.resolve(
|
|
214
|
+
writeFileSync(resolve(generatedDir, 'tables.ts'), tablesOutput, 'utf-8')
|
|
215
|
+
),
|
|
216
|
+
])
|
|
217
|
+
|
|
218
|
+
// generate synced queries
|
|
219
|
+
if (existsSync(queriesDir)) {
|
|
220
|
+
const queryFiles = readdirSync(queriesDir).filter((f) => f.endsWith('.ts'))
|
|
221
|
+
|
|
222
|
+
// process query files in parallel
|
|
223
|
+
const queryResults = await Promise.all(
|
|
224
|
+
queryFiles.map(async (file) => {
|
|
225
|
+
const filePath = resolve(queriesDir, file)
|
|
226
|
+
const fileBaseName = basename(file, '.ts')
|
|
227
|
+
const queries: Array<{
|
|
228
|
+
name: string
|
|
229
|
+
params: string
|
|
230
|
+
valibotCode: string
|
|
231
|
+
sourceFile: string
|
|
232
|
+
}> = []
|
|
233
|
+
|
|
234
|
+
try {
|
|
235
|
+
const content = readFileSync(filePath, 'utf-8')
|
|
236
|
+
|
|
237
|
+
const sourceFile = ts.createSourceFile(
|
|
238
|
+
filePath,
|
|
239
|
+
content,
|
|
240
|
+
ts.ScriptTarget.Latest,
|
|
241
|
+
true
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
ts.forEachChild(sourceFile, (node) => {
|
|
245
|
+
if (ts.isVariableStatement(node)) {
|
|
246
|
+
const exportModifier = node.modifiers?.find(
|
|
247
|
+
(m) => m.kind === ts.SyntaxKind.ExportKeyword
|
|
248
|
+
)
|
|
249
|
+
if (!exportModifier) return
|
|
250
|
+
|
|
251
|
+
const declaration = node.declarationList.declarations[0]
|
|
252
|
+
if (!declaration || !ts.isVariableDeclaration(declaration)) return
|
|
253
|
+
|
|
254
|
+
const name = declaration.name.getText(sourceFile)
|
|
255
|
+
|
|
256
|
+
// skip 'permission' exports
|
|
257
|
+
if (name === 'permission') return
|
|
258
|
+
|
|
259
|
+
if (
|
|
260
|
+
declaration.initializer &&
|
|
261
|
+
ts.isArrowFunction(declaration.initializer)
|
|
262
|
+
) {
|
|
263
|
+
const params = declaration.initializer.parameters
|
|
264
|
+
let paramType = 'void'
|
|
265
|
+
|
|
266
|
+
if (params.length > 0) {
|
|
267
|
+
const param = params[0]!
|
|
268
|
+
paramType = param.type?.getText(sourceFile) || 'unknown'
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
try {
|
|
272
|
+
const typeString = `type QueryParams = ${paramType}`
|
|
273
|
+
const model = TypeScriptToModel.Generate(typeString)
|
|
274
|
+
const valibotCode = ModelToValibot.Generate(model)
|
|
275
|
+
|
|
276
|
+
queries.push({
|
|
277
|
+
name,
|
|
278
|
+
params: paramType,
|
|
279
|
+
valibotCode,
|
|
280
|
+
sourceFile: fileBaseName,
|
|
281
|
+
})
|
|
282
|
+
} catch (err) {
|
|
283
|
+
console.error(`✗ ${name}: ${err}`)
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
})
|
|
288
|
+
} catch (err) {
|
|
289
|
+
console.error(`Error processing ${file}:`, err)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return queries
|
|
293
|
+
})
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
const allQueries = queryResults.flat()
|
|
297
|
+
const queriesOutput = generateQueriesFile(allQueries)
|
|
298
|
+
writeFileSync(resolve(generatedDir, 'queries.ts'), queriesOutput, 'utf-8')
|
|
299
|
+
|
|
300
|
+
console.info(
|
|
301
|
+
`✓ ${allModelFiles.length} models (${filesWithSchema.length} schemas), ${allQueries.length} queries`
|
|
302
|
+
)
|
|
303
|
+
} else {
|
|
304
|
+
console.info(
|
|
305
|
+
`✓ ${allModelFiles.length} models (${filesWithSchema.length} schemas)`
|
|
306
|
+
)
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// run after command if provided
|
|
310
|
+
if (args.after) {
|
|
311
|
+
try {
|
|
312
|
+
const { execSync } = await import('node:child_process')
|
|
313
|
+
execSync(args.after, { stdio: 'inherit' })
|
|
314
|
+
} catch (err) {
|
|
315
|
+
console.error(`Error running after command: ${err}`)
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// run once
|
|
321
|
+
await runGenerate()
|
|
322
|
+
|
|
323
|
+
// watch mode
|
|
324
|
+
if (args.watch) {
|
|
325
|
+
console.info('\n👀 watching...\n')
|
|
326
|
+
const chokidar = await import('chokidar')
|
|
327
|
+
|
|
328
|
+
let debounceTimer: ReturnType<typeof setTimeout> | null = null
|
|
329
|
+
|
|
330
|
+
const debouncedRegenerate = (path: string, event: string) => {
|
|
331
|
+
if (debounceTimer) {
|
|
332
|
+
clearTimeout(debounceTimer)
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
console.info(`\n${event} ${path}`)
|
|
336
|
+
|
|
337
|
+
debounceTimer = setTimeout(() => {
|
|
338
|
+
runGenerate()
|
|
339
|
+
}, 1000)
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
const watcher = chokidar.watch([modelsDir, queriesDir], {
|
|
343
|
+
persistent: true,
|
|
344
|
+
ignoreInitial: true,
|
|
345
|
+
})
|
|
346
|
+
|
|
347
|
+
watcher.on('change', (path) => debouncedRegenerate(path, '📝'))
|
|
348
|
+
watcher.on('add', (path) => debouncedRegenerate(path, '➕'))
|
|
349
|
+
watcher.on('unlink', (path) => debouncedRegenerate(path, '🗑️ '))
|
|
350
|
+
|
|
351
|
+
// keep process alive
|
|
352
|
+
await new Promise(() => {})
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
})
|
|
356
|
+
|
|
357
|
+
function generateModelsFile(modelFiles: string[]) {
|
|
358
|
+
const modelNames = modelFiles.map((f) => basename(f, '.ts')).sort()
|
|
359
|
+
|
|
360
|
+
// special case: user.ts should be imported as userPublic
|
|
361
|
+
const getImportName = (name: string) => (name === 'user' ? 'userPublic' : name)
|
|
362
|
+
|
|
363
|
+
// generate imports (sorted)
|
|
364
|
+
const imports = modelNames
|
|
365
|
+
.map((name) => {
|
|
366
|
+
const importName = getImportName(name)
|
|
367
|
+
return `import * as ${importName} from '~/data/models/${name}'`
|
|
368
|
+
})
|
|
369
|
+
.join('\n')
|
|
370
|
+
|
|
371
|
+
// generate models object (sorted by import name)
|
|
372
|
+
const sortedByImportName = [...modelNames].sort((a, b) =>
|
|
373
|
+
getImportName(a).localeCompare(getImportName(b))
|
|
374
|
+
)
|
|
375
|
+
const modelsObj = `export const models = {\n${sortedByImportName.map((name) => ` ${getImportName(name)},`).join('\n')}\n}`
|
|
376
|
+
|
|
377
|
+
return `// auto-generated by: over-zero generate\n${imports}\n\n${modelsObj}\n`
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
function generateTypesFile(modelFiles: string[]) {
|
|
381
|
+
const modelNames = modelFiles.map((f) => basename(f, '.ts')).sort()
|
|
382
|
+
|
|
383
|
+
// special case: user.ts should reference userPublic in schema
|
|
384
|
+
const getSchemaName = (name: string) => (name === 'user' ? 'userPublic' : name)
|
|
385
|
+
|
|
386
|
+
// generate type exports using TableInsertRow and TableUpdateRow (sorted)
|
|
387
|
+
const typeExports = modelNames
|
|
388
|
+
.map((name) => {
|
|
389
|
+
const pascalName = name.charAt(0).toUpperCase() + name.slice(1)
|
|
390
|
+
const schemaName = getSchemaName(name)
|
|
391
|
+
return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>\nexport type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`
|
|
392
|
+
})
|
|
393
|
+
.join('\n\n')
|
|
394
|
+
|
|
395
|
+
return `import type { TableInsertRow, TableUpdateRow } from 'over-zero'\nimport type * as schema from '../tables'\n\n${typeExports}\n`
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function generateTablesFile(modelFiles: string[]) {
|
|
399
|
+
const modelNames = modelFiles.map((f) => basename(f, '.ts')).sort()
|
|
400
|
+
|
|
401
|
+
// special case: user.ts should be exported as userPublic
|
|
402
|
+
const getExportName = (name: string) => (name === 'user' ? 'userPublic' : name)
|
|
403
|
+
|
|
404
|
+
// generate schema exports (sorted)
|
|
405
|
+
const exports = modelNames
|
|
406
|
+
.map(
|
|
407
|
+
(name) => `export { schema as ${getExportName(name)} } from '~/data/models/${name}'`
|
|
408
|
+
)
|
|
409
|
+
.join('\n')
|
|
410
|
+
|
|
411
|
+
return `// auto-generated by: over-zero generate\n// this is separate from models as otherwise you end up with circular types :/\n\n${exports}\n`
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
function generateQueriesFile(
|
|
415
|
+
queries: Array<{
|
|
416
|
+
name: string
|
|
417
|
+
params: string
|
|
418
|
+
valibotCode: string
|
|
419
|
+
sourceFile: string
|
|
420
|
+
}>
|
|
421
|
+
) {
|
|
422
|
+
// sort queries alphabetically
|
|
423
|
+
const sortedQueries = [...queries].sort((a, b) => a.name.localeCompare(b.name))
|
|
424
|
+
|
|
425
|
+
// Group queries by source file
|
|
426
|
+
const queryByFile = new Map<string, typeof queries>()
|
|
427
|
+
for (const q of sortedQueries) {
|
|
428
|
+
if (!queryByFile.has(q.sourceFile)) {
|
|
429
|
+
queryByFile.set(q.sourceFile, [])
|
|
430
|
+
}
|
|
431
|
+
queryByFile.get(q.sourceFile)!.push(q)
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Generate imports for each query file (sorted)
|
|
435
|
+
const queryImports = Array.from(queryByFile.keys())
|
|
436
|
+
.sort()
|
|
437
|
+
.map((file) => `import * as ${file}Queries from '../queries/${file}'`)
|
|
438
|
+
.join('\n')
|
|
439
|
+
|
|
440
|
+
const imports = `import * as v from 'valibot'
|
|
441
|
+
import { syncedQuery } from '@rocicorp/zero'
|
|
442
|
+
${queryImports}
|
|
443
|
+
`
|
|
444
|
+
|
|
445
|
+
const syncedQueries = sortedQueries
|
|
446
|
+
.map((q) => {
|
|
447
|
+
// extract validator schema
|
|
448
|
+
const lines = q.valibotCode.split('\n').filter((l) => l.trim())
|
|
449
|
+
const schemaLineIndex = lines.findIndex((l) =>
|
|
450
|
+
l.startsWith('export const QueryParams')
|
|
451
|
+
)
|
|
452
|
+
|
|
453
|
+
let validatorDef = 'v.void()'
|
|
454
|
+
if (schemaLineIndex !== -1) {
|
|
455
|
+
const schemaLines: string[] = []
|
|
456
|
+
let openBraces = 0
|
|
457
|
+
let started = false
|
|
458
|
+
|
|
459
|
+
for (let i = schemaLineIndex; i < lines.length; i++) {
|
|
460
|
+
const line = lines[i]!
|
|
461
|
+
const cleaned = started ? line : line.replace('export const QueryParams = ', '')
|
|
462
|
+
schemaLines.push(cleaned)
|
|
463
|
+
started = true
|
|
464
|
+
|
|
465
|
+
openBraces += (cleaned.match(/\{/g) || []).length
|
|
466
|
+
openBraces -= (cleaned.match(/\}/g) || []).length
|
|
467
|
+
openBraces += (cleaned.match(/\(/g) || []).length
|
|
468
|
+
openBraces -= (cleaned.match(/\)/g) || []).length
|
|
469
|
+
|
|
470
|
+
if (openBraces === 0 && schemaLines.length > 0) {
|
|
471
|
+
break
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
validatorDef = schemaLines.join('\n')
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// wrap validator in v.parser(v.tuple([...]))
|
|
478
|
+
const wrappedValidator =
|
|
479
|
+
validatorDef === 'v.void()'
|
|
480
|
+
? 'v.parser(v.tuple([]))'
|
|
481
|
+
: `v.parser(v.tuple([${validatorDef}]))`
|
|
482
|
+
|
|
483
|
+
// for void queries, no arg parameter
|
|
484
|
+
const queryFn =
|
|
485
|
+
validatorDef === 'v.void()'
|
|
486
|
+
? `() => {
|
|
487
|
+
return ${q.sourceFile}Queries.${q.name}()
|
|
488
|
+
}`
|
|
489
|
+
: `(arg) => {
|
|
490
|
+
return ${q.sourceFile}Queries.${q.name}(arg)
|
|
491
|
+
}`
|
|
492
|
+
|
|
493
|
+
return `export const ${q.name} = syncedQuery('${q.name}', ${wrappedValidator}, ${queryFn})`
|
|
494
|
+
})
|
|
495
|
+
.join('\n\n')
|
|
496
|
+
|
|
497
|
+
return imports + '\n' + syncedQueries + '\n'
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
const main = defineCommand({
|
|
501
|
+
meta: {
|
|
502
|
+
name: 'over-zero',
|
|
503
|
+
description: 'Over-zero CLI tools',
|
|
504
|
+
},
|
|
505
|
+
subCommands: {
|
|
506
|
+
generate: generate,
|
|
507
|
+
'generate-queries': generateQueries,
|
|
508
|
+
},
|
|
509
|
+
})
|
|
510
|
+
|
|
511
|
+
runMain(main)
|