From b34c90469fff73b475b809df1628b6865172759c Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:56:10 -0800 Subject: [PATCH] update to latest zenstack --- .gitignore | 1 + components/ManageMembers.tsx | 11 +- components/Todo.tsx | 28 ++-- components/TodoList.tsx | 13 +- lib/hooks/account.ts | 211 ++++++++++++++++------- lib/hooks/list.ts | 209 ++++++++++++++++------- lib/hooks/space-user.ts | 231 +++++++++++++++++--------- lib/hooks/space.ts | 211 ++++++++++++++++------- lib/hooks/todo.ts | 209 ++++++++++++++++------- lib/hooks/user.ts | 209 ++++++++++++++++------- package-lock.json | 196 ++++++++++++---------- package.json | 10 +- pages/create-space.tsx | 14 +- pages/space/[slug]/[listId]/index.tsx | 95 +++-------- pages/space/[slug]/index.tsx | 59 +++---- tailwind.config.js | 2 +- 16 files changed, 1101 insertions(+), 608 deletions(-) diff --git a/.gitignore b/.gitignore index 8a77877..988fbf4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ logs node_modules/ .env.local .next +.zenstack_repl_history diff --git a/components/ManageMembers.tsx b/components/ManageMembers.tsx index 1b5947e..d63f22f 100644 --- a/components/ManageMembers.tsx +++ b/components/ManageMembers.tsx @@ -1,6 +1,6 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'; import { useCurrentUser } from '@lib/context'; -import { useFindManySpaceUser, useMutateSpaceUser } from '@lib/hooks'; +import { useCreateSpaceUser, useDeleteSpaceUser, useFindManySpaceUser } from '@lib/hooks'; import { Space, SpaceUserRole } from '@prisma/client'; import { ChangeEvent, KeyboardEvent, useState } from 'react'; import { toast } from 'react-toastify'; @@ -14,7 +14,8 @@ export default function ManageMembers({ space }: Props) { const [email, setEmail] = useState(''); const [role, setRole] = useState(SpaceUserRole.USER); const user = useCurrentUser(); - const { createSpaceUser, deleteSpaceUser } = useMutateSpaceUser(); + const { trigger: createSpaceUser } = useCreateSpaceUser(); + const { trigger: deleteSpaceUser } = useDeleteSpaceUser(); const { data: members } = useFindManySpaceUser({ where: { @@ -62,9 +63,9 @@ export default function ManageMembers({ space }: Props) { } }; - const removeMember = async (id: string) => { + const removeMember = (id: string) => { if (confirm(`Are you sure to remove this member from space?`)) { - await deleteSpaceUser({ where: { id } }); + deleteSpaceUser({ where: { id } }); } }; @@ -115,7 +116,7 @@ export default function ManageMembers({ space }: Props) {
{user?.id !== member.user.id && ( { removeMember(member.id); }} diff --git a/components/Todo.tsx b/components/Todo.tsx index 84c7536..6354d86 100644 --- a/components/Todo.tsx +++ b/components/Todo.tsx @@ -1,5 +1,5 @@ import { TrashIcon } from '@heroicons/react/24/outline'; -import { useMutateTodo } from '@lib/hooks'; +import { useDeleteTodo, useUpdateTodo } from '@lib/hooks'; import { Todo, User } from '@prisma/client'; import { ChangeEvent } from 'react'; import Avatar from './Avatar'; @@ -7,31 +7,25 @@ import TimeInfo from './TimeInfo'; type Props = { value: Todo & { owner: User }; - updated?: (value: Todo) => any; - deleted?: (value: Todo) => any; + optimistic?: boolean; }; -export default function TodoComponent({ value, updated, deleted }: Props) { - const { updateTodo, deleteTodo } = useMutateTodo(); +export default function TodoComponent({ value, optimistic }: Props) { + const { trigger: updateTodo } = useUpdateTodo({ optimisticUpdate: true }); + const { trigger: deleteTodo } = useDeleteTodo({ optimisticUpdate: true }); const onDeleteTodo = async () => { - await deleteTodo({ where: { id: value.id } }); - if (deleted) { - deleted(value); - } + deleteTodo({ where: { id: value.id } }); }; const toggleCompleted = async (completed: boolean) => { if (completed === !!value.completedAt) { return; } - const newValue = await updateTodo({ + updateTodo({ where: { id: value.id }, data: { completedAt: completed ? new Date() : null }, }); - if (updated && newValue) { - updated(newValue); - } }; return ( @@ -43,18 +37,22 @@ export default function TodoComponent({ value, updated, deleted }: Props) { }`} > {value.title} + {optimistic && }
) => toggleCompleted(e.currentTarget.checked)} /> { - onDeleteTodo(); + !optimistic && onDeleteTodo(); }} />
diff --git a/components/TodoList.tsx b/components/TodoList.tsx index ff34b33..f61df02 100644 --- a/components/TodoList.tsx +++ b/components/TodoList.tsx @@ -1,5 +1,5 @@ import { LockClosedIcon, TrashIcon } from '@heroicons/react/24/outline'; -import { useMutateList } from '@lib/hooks'; +import { useDeleteList } from '@lib/hooks'; import { List } from '@prisma/client'; import { customAlphabet } from 'nanoid'; import { User } from 'next-auth'; @@ -14,17 +14,14 @@ type Props = { deleted?: (value: List) => void; }; -export default function TodoList({ value, deleted }: Props) { +export default function TodoList({ value }: Props) { const router = useRouter(); - const { deleteList } = useMutateList(); + const { trigger: deleteList } = useDeleteList(); - const onDeleteList = async () => { + const onDeleteList = () => { if (confirm('Are you sure to delete this list?')) { - await deleteList({ where: { id: value.id } }); - if (deleted) { - deleted(value); - } + deleteList({ where: { id: value.id } }); } }; diff --git a/lib/hooks/account.ts b/lib/hooks/account.ts index f72050d..bcc3ec7 100644 --- a/lib/hooks/account.ts +++ b/lib/hooks/account.ts @@ -1,100 +1,113 @@ /* eslint-disable */ -import type { Prisma, Account } from '@prisma/client'; +import type { Prisma } from '@prisma/client'; import { - RequestHandlerContext, type GetNextArgs, - type RequestOptions, - type InfiniteRequestOptions, + type QueryOptions, + type InfiniteQueryOptions, + type MutationOptions, type PickEnumerable, - type CheckSelect, useHooksContext, } from '@zenstackhq/swr/runtime'; import metadata from './__model_meta'; import * as request from '@zenstackhq/swr/runtime'; export function useMutateAccount() { - const { endpoint, fetch, logging } = useHooksContext(); - const mutate = request.useMutate('Account', metadata, logging); + const { endpoint, fetch } = useHooksContext(); + const invalidate = request.useInvalidation('Account', metadata); + /** @deprecated Use `useCreateAccount` hook instead. */ async function createAccount( args: Prisma.SelectSubset, ) { - return await request.post>, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/account/create`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useCreateManyAccount` hook instead. */ async function createManyAccount( args: Prisma.SelectSubset, ) { - return await request.post( + return await request.mutationRequest( + 'POST', `${endpoint}/account/createMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpdateAccount` hook instead. */ async function updateAccount( args: Prisma.SelectSubset, ) { - return await request.put, true>( + return await request.mutationRequest | undefined, true>( + 'PUT', `${endpoint}/account/update`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useUpdateManyAccount` hook instead. */ async function updateManyAccount( args: Prisma.SelectSubset, ) { - return await request.put( + return await request.mutationRequest( + 'PUT', `${endpoint}/account/updateMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpsertAccount` hook instead. */ async function upsertAccount( args: Prisma.SelectSubset, ) { - return await request.post, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/account/upsert`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useDeleteAccount` hook instead. */ async function deleteAccount( args: Prisma.SelectSubset, ) { - return await request.del, true>( + return await request.mutationRequest | undefined, true>( + 'DELETE', `${endpoint}/account/delete`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useDeleteManyAccount` hook instead. */ async function deleteManyAccount( args: Prisma.SelectSubset, ) { - return await request.del( + return await request.mutationRequest( + 'DELETE', `${endpoint}/account/deleteMany`, args, - mutate, + invalidate, fetch, false, ); @@ -110,12 +123,39 @@ export function useMutateAccount() { }; } +export function useCreateAccount( + options?: MutationOptions< + Prisma.AccountGetPayload | undefined, + unknown, + Prisma.AccountCreateArgs + >, +) { + const mutation = request.useModelMutation('Account', 'POST', 'create', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useCreateManyAccount( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('Account', 'POST', 'createMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + export function useFindManyAccount( args?: Prisma.SelectSubset, - options?: RequestOptions>>, + options?: QueryOptions & { $optimistic?: boolean }>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>>('Account', 'findMany', endpoint, args, options, fetch); + return request.useModelQuery('Account', 'findMany', args, options); } export function useInfiniteFindManyAccount< @@ -123,37 +163,102 @@ export function useInfiniteFindManyAccount< R extends Array>, >( getNextArgs: GetNextArgs | undefined, R>, - options?: InfiniteRequestOptions>>, + options?: InfiniteQueryOptions>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useInfiniteGet< - Prisma.SelectSubset | undefined, - Array> - >('Account', 'findMany', endpoint, getNextArgs, options, fetch); + return request.useInfiniteModelQuery('Account', 'findMany', getNextArgs, options); } export function useFindUniqueAccount( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Account', 'findUnique', endpoint, args, options, fetch); + return request.useModelQuery('Account', 'findUnique', args, options); } export function useFindFirstAccount( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Account', 'findFirst', endpoint, args, options, fetch); + return request.useModelQuery('Account', 'findFirst', args, options); +} + +export function useUpdateAccount( + options?: MutationOptions< + Prisma.AccountGetPayload | undefined, + unknown, + Prisma.AccountUpdateArgs + >, +) { + const mutation = request.useModelMutation('Account', 'PUT', 'update', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useUpdateManyAccount( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('Account', 'PUT', 'updateMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + +export function useUpsertAccount( + options?: MutationOptions< + Prisma.AccountGetPayload | undefined, + unknown, + Prisma.AccountUpsertArgs + >, +) { + const mutation = request.useModelMutation('Account', 'POST', 'upsert', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteAccount( + options?: MutationOptions< + Prisma.AccountGetPayload | undefined, + unknown, + Prisma.AccountDeleteArgs + >, +) { + const mutation = request.useModelMutation('Account', 'DELETE', 'delete', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteManyAccount( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('Account', 'DELETE', 'deleteMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; } export function useAggregateAccount( args?: Prisma.Subset, - options?: RequestOptions>, + options?: QueryOptions>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Account', 'aggregate', endpoint, args, options, fetch); + return request.useModelQuery('Account', 'aggregate', args, options); } export function useGroupByAccount< @@ -207,7 +312,7 @@ export function useGroupByAccount< }[OrderFields], >( args?: Prisma.SubsetIntersection & InputErrors, - options?: RequestOptions< + options?: QueryOptions< {} extends InputErrors ? Array< PickEnumerable & { @@ -221,25 +326,12 @@ export function useGroupByAccount< : InputErrors >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - {} extends InputErrors - ? Array< - PickEnumerable & { - [P in keyof T & keyof Prisma.AccountGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - : InputErrors - >('Account', 'groupBy', endpoint, args, options, fetch); + return request.useModelQuery('Account', 'groupBy', args, options); } export function useCountAccount( args?: Prisma.Subset, - options?: RequestOptions< + options?: QueryOptions< T extends { select: any } ? T['select'] extends true ? number @@ -247,12 +339,5 @@ export function useCountAccount( : number >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - T extends { select: any } - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >('Account', 'count', endpoint, args, options, fetch); + return request.useModelQuery('Account', 'count', args, options); } diff --git a/lib/hooks/list.ts b/lib/hooks/list.ts index 441b95a..ff28599 100644 --- a/lib/hooks/list.ts +++ b/lib/hooks/list.ts @@ -1,110 +1,223 @@ /* eslint-disable */ -import type { Prisma, List } from '@prisma/client'; +import type { Prisma } from '@prisma/client'; import { - RequestHandlerContext, type GetNextArgs, - type RequestOptions, - type InfiniteRequestOptions, + type QueryOptions, + type InfiniteQueryOptions, + type MutationOptions, type PickEnumerable, - type CheckSelect, useHooksContext, } from '@zenstackhq/swr/runtime'; import metadata from './__model_meta'; import * as request from '@zenstackhq/swr/runtime'; export function useMutateList() { - const { endpoint, fetch, logging } = useHooksContext(); - const mutate = request.useMutate('List', metadata, logging); + const { endpoint, fetch } = useHooksContext(); + const invalidate = request.useInvalidation('List', metadata); + /** @deprecated Use `useCreateList` hook instead. */ async function createList(args: Prisma.SelectSubset) { - return await request.post>, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/list/create`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useCreateManyList` hook instead. */ async function createManyList( args: Prisma.SelectSubset, ) { - return await request.post( + return await request.mutationRequest( + 'POST', `${endpoint}/list/createMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpdateList` hook instead. */ async function updateList(args: Prisma.SelectSubset) { - return await request.put, true>(`${endpoint}/list/update`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'PUT', + `${endpoint}/list/update`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useUpdateManyList` hook instead. */ async function updateManyList( args: Prisma.SelectSubset, ) { - return await request.put(`${endpoint}/list/updateMany`, args, mutate, fetch, false); + return await request.mutationRequest( + 'PUT', + `${endpoint}/list/updateMany`, + args, + invalidate, + fetch, + false, + ); } + /** @deprecated Use `useUpsertList` hook instead. */ async function upsertList(args: Prisma.SelectSubset) { - return await request.post, true>(`${endpoint}/list/upsert`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'POST', + `${endpoint}/list/upsert`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useDeleteList` hook instead. */ async function deleteList(args: Prisma.SelectSubset) { - return await request.del, true>(`${endpoint}/list/delete`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'DELETE', + `${endpoint}/list/delete`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useDeleteManyList` hook instead. */ async function deleteManyList( args: Prisma.SelectSubset, ) { - return await request.del(`${endpoint}/list/deleteMany`, args, mutate, fetch, false); + return await request.mutationRequest( + 'DELETE', + `${endpoint}/list/deleteMany`, + args, + invalidate, + fetch, + false, + ); } return { createList, createManyList, updateList, updateManyList, upsertList, deleteList, deleteManyList }; } +export function useCreateList( + options?: MutationOptions | undefined, unknown, Prisma.ListCreateArgs>, +) { + const mutation = request.useModelMutation('List', 'POST', 'create', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useCreateManyList(options?: MutationOptions) { + const mutation = request.useModelMutation('List', 'POST', 'createMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + export function useFindManyList( args?: Prisma.SelectSubset, - options?: RequestOptions>>, + options?: QueryOptions & { $optimistic?: boolean }>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>>('List', 'findMany', endpoint, args, options, fetch); + return request.useModelQuery('List', 'findMany', args, options); } export function useInfiniteFindManyList>>( getNextArgs: GetNextArgs | undefined, R>, - options?: InfiniteRequestOptions>>, + options?: InfiniteQueryOptions>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useInfiniteGet< - Prisma.SelectSubset | undefined, - Array> - >('List', 'findMany', endpoint, getNextArgs, options, fetch); + return request.useInfiniteModelQuery('List', 'findMany', getNextArgs, options); } export function useFindUniqueList( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('List', 'findUnique', endpoint, args, options, fetch); + return request.useModelQuery('List', 'findUnique', args, options); } export function useFindFirstList( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('List', 'findFirst', endpoint, args, options, fetch); + return request.useModelQuery('List', 'findFirst', args, options); +} + +export function useUpdateList( + options?: MutationOptions | undefined, unknown, Prisma.ListUpdateArgs>, +) { + const mutation = request.useModelMutation('List', 'PUT', 'update', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useUpdateManyList(options?: MutationOptions) { + const mutation = request.useModelMutation('List', 'PUT', 'updateMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + +export function useUpsertList( + options?: MutationOptions | undefined, unknown, Prisma.ListUpsertArgs>, +) { + const mutation = request.useModelMutation('List', 'POST', 'upsert', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteList( + options?: MutationOptions | undefined, unknown, Prisma.ListDeleteArgs>, +) { + const mutation = request.useModelMutation('List', 'DELETE', 'delete', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteManyList(options?: MutationOptions) { + const mutation = request.useModelMutation('List', 'DELETE', 'deleteMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; } export function useAggregateList( args?: Prisma.Subset, - options?: RequestOptions>, + options?: QueryOptions>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('List', 'aggregate', endpoint, args, options, fetch); + return request.useModelQuery('List', 'aggregate', args, options); } export function useGroupByList< @@ -158,7 +271,7 @@ export function useGroupByList< }[OrderFields], >( args?: Prisma.SubsetIntersection & InputErrors, - options?: RequestOptions< + options?: QueryOptions< {} extends InputErrors ? Array< PickEnumerable & { @@ -172,25 +285,12 @@ export function useGroupByList< : InputErrors >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - {} extends InputErrors - ? Array< - PickEnumerable & { - [P in keyof T & keyof Prisma.ListGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - : InputErrors - >('List', 'groupBy', endpoint, args, options, fetch); + return request.useModelQuery('List', 'groupBy', args, options); } export function useCountList( args?: Prisma.Subset, - options?: RequestOptions< + options?: QueryOptions< T extends { select: any } ? T['select'] extends true ? number @@ -198,12 +298,5 @@ export function useCountList( : number >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - T extends { select: any } - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >('List', 'count', endpoint, args, options, fetch); + return request.useModelQuery('List', 'count', args, options); } diff --git a/lib/hooks/space-user.ts b/lib/hooks/space-user.ts index 4dd571b..ebf2dd3 100644 --- a/lib/hooks/space-user.ts +++ b/lib/hooks/space-user.ts @@ -1,100 +1,113 @@ /* eslint-disable */ -import type { Prisma, SpaceUser } from '@prisma/client'; +import type { Prisma } from '@prisma/client'; import { - RequestHandlerContext, type GetNextArgs, - type RequestOptions, - type InfiniteRequestOptions, + type QueryOptions, + type InfiniteQueryOptions, + type MutationOptions, type PickEnumerable, - type CheckSelect, useHooksContext, } from '@zenstackhq/swr/runtime'; import metadata from './__model_meta'; import * as request from '@zenstackhq/swr/runtime'; export function useMutateSpaceUser() { - const { endpoint, fetch, logging } = useHooksContext(); - const mutate = request.useMutate('SpaceUser', metadata, logging); + const { endpoint, fetch } = useHooksContext(); + const invalidate = request.useInvalidation('SpaceUser', metadata); + /** @deprecated Use `useCreateSpaceUser` hook instead. */ async function createSpaceUser( args: Prisma.SelectSubset, ) { - return await request.post>, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/spaceUser/create`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useCreateManySpaceUser` hook instead. */ async function createManySpaceUser( args: Prisma.SelectSubset, ) { - return await request.post( + return await request.mutationRequest( + 'POST', `${endpoint}/spaceUser/createMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpdateSpaceUser` hook instead. */ async function updateSpaceUser( args: Prisma.SelectSubset, ) { - return await request.put, true>( + return await request.mutationRequest | undefined, true>( + 'PUT', `${endpoint}/spaceUser/update`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useUpdateManySpaceUser` hook instead. */ async function updateManySpaceUser( args: Prisma.SelectSubset, ) { - return await request.put( + return await request.mutationRequest( + 'PUT', `${endpoint}/spaceUser/updateMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpsertSpaceUser` hook instead. */ async function upsertSpaceUser( args: Prisma.SelectSubset, ) { - return await request.post, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/spaceUser/upsert`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useDeleteSpaceUser` hook instead. */ async function deleteSpaceUser( args: Prisma.SelectSubset, ) { - return await request.del, true>( + return await request.mutationRequest | undefined, true>( + 'DELETE', `${endpoint}/spaceUser/delete`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useDeleteManySpaceUser` hook instead. */ async function deleteManySpaceUser( args: Prisma.SelectSubset, ) { - return await request.del( + return await request.mutationRequest( + 'DELETE', `${endpoint}/spaceUser/deleteMany`, args, - mutate, + invalidate, fetch, false, ); @@ -110,19 +123,41 @@ export function useMutateSpaceUser() { }; } +export function useCreateSpaceUser( + options?: MutationOptions< + Prisma.SpaceUserGetPayload | undefined, + unknown, + Prisma.SpaceUserCreateArgs + >, +) { + const mutation = request.useModelMutation('SpaceUser', 'POST', 'create', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useCreateManySpaceUser( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('SpaceUser', 'POST', 'createMany', metadata, options, false); + return { + ...mutation, + trigger( + args: Prisma.SelectSubset, + ) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + export function useFindManySpaceUser( args?: Prisma.SelectSubset, - options?: RequestOptions>>, + options?: QueryOptions & { $optimistic?: boolean }>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>>( - 'SpaceUser', - 'findMany', - endpoint, - args, - options, - fetch, - ); + return request.useModelQuery('SpaceUser', 'findMany', args, options); } export function useInfiniteFindManySpaceUser< @@ -130,44 +165,106 @@ export function useInfiniteFindManySpaceUser< R extends Array>, >( getNextArgs: GetNextArgs | undefined, R>, - options?: InfiniteRequestOptions>>, + options?: InfiniteQueryOptions>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useInfiniteGet< - Prisma.SelectSubset | undefined, - Array> - >('SpaceUser', 'findMany', endpoint, getNextArgs, options, fetch); + return request.useInfiniteModelQuery('SpaceUser', 'findMany', getNextArgs, options); } export function useFindUniqueSpaceUser( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('SpaceUser', 'findUnique', endpoint, args, options, fetch); + return request.useModelQuery('SpaceUser', 'findUnique', args, options); } export function useFindFirstSpaceUser( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('SpaceUser', 'findFirst', endpoint, args, options, fetch); + return request.useModelQuery('SpaceUser', 'findFirst', args, options); +} + +export function useUpdateSpaceUser( + options?: MutationOptions< + Prisma.SpaceUserGetPayload | undefined, + unknown, + Prisma.SpaceUserUpdateArgs + >, +) { + const mutation = request.useModelMutation('SpaceUser', 'PUT', 'update', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useUpdateManySpaceUser( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('SpaceUser', 'PUT', 'updateMany', metadata, options, false); + return { + ...mutation, + trigger( + args: Prisma.SelectSubset, + ) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + +export function useUpsertSpaceUser( + options?: MutationOptions< + Prisma.SpaceUserGetPayload | undefined, + unknown, + Prisma.SpaceUserUpsertArgs + >, +) { + const mutation = request.useModelMutation('SpaceUser', 'POST', 'upsert', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteSpaceUser( + options?: MutationOptions< + Prisma.SpaceUserGetPayload | undefined, + unknown, + Prisma.SpaceUserDeleteArgs + >, +) { + const mutation = request.useModelMutation('SpaceUser', 'DELETE', 'delete', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteManySpaceUser( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('SpaceUser', 'DELETE', 'deleteMany', metadata, options, false); + return { + ...mutation, + trigger( + args: Prisma.SelectSubset, + ) { + return mutation.trigger(args, options as any) as Promise; + }, + }; } export function useAggregateSpaceUser( args?: Prisma.Subset, - options?: RequestOptions>, + options?: QueryOptions>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>( - 'SpaceUser', - 'aggregate', - endpoint, - args, - options, - fetch, - ); + return request.useModelQuery('SpaceUser', 'aggregate', args, options); } export function useGroupBySpaceUser< @@ -221,7 +318,7 @@ export function useGroupBySpaceUser< }[OrderFields], >( args?: Prisma.SubsetIntersection & InputErrors, - options?: RequestOptions< + options?: QueryOptions< {} extends InputErrors ? Array< PickEnumerable & { @@ -235,25 +332,12 @@ export function useGroupBySpaceUser< : InputErrors >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - {} extends InputErrors - ? Array< - PickEnumerable & { - [P in keyof T & keyof Prisma.SpaceUserGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - : InputErrors - >('SpaceUser', 'groupBy', endpoint, args, options, fetch); + return request.useModelQuery('SpaceUser', 'groupBy', args, options); } export function useCountSpaceUser( args?: Prisma.Subset, - options?: RequestOptions< + options?: QueryOptions< T extends { select: any } ? T['select'] extends true ? number @@ -261,12 +345,5 @@ export function useCountSpaceUser( : number >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - T extends { select: any } - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >('SpaceUser', 'count', endpoint, args, options, fetch); + return request.useModelQuery('SpaceUser', 'count', args, options); } diff --git a/lib/hooks/space.ts b/lib/hooks/space.ts index 048ac44..fe8e4e3 100644 --- a/lib/hooks/space.ts +++ b/lib/hooks/space.ts @@ -1,92 +1,105 @@ /* eslint-disable */ -import type { Prisma, Space } from '@prisma/client'; +import type { Prisma } from '@prisma/client'; import { - RequestHandlerContext, type GetNextArgs, - type RequestOptions, - type InfiniteRequestOptions, + type QueryOptions, + type InfiniteQueryOptions, + type MutationOptions, type PickEnumerable, - type CheckSelect, useHooksContext, } from '@zenstackhq/swr/runtime'; import metadata from './__model_meta'; import * as request from '@zenstackhq/swr/runtime'; export function useMutateSpace() { - const { endpoint, fetch, logging } = useHooksContext(); - const mutate = request.useMutate('Space', metadata, logging); + const { endpoint, fetch } = useHooksContext(); + const invalidate = request.useInvalidation('Space', metadata); + /** @deprecated Use `useCreateSpace` hook instead. */ async function createSpace(args: Prisma.SelectSubset) { - return await request.post>, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/space/create`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useCreateManySpace` hook instead. */ async function createManySpace( args: Prisma.SelectSubset, ) { - return await request.post( + return await request.mutationRequest( + 'POST', `${endpoint}/space/createMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpdateSpace` hook instead. */ async function updateSpace(args: Prisma.SelectSubset) { - return await request.put, true>( + return await request.mutationRequest | undefined, true>( + 'PUT', `${endpoint}/space/update`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useUpdateManySpace` hook instead. */ async function updateManySpace( args: Prisma.SelectSubset, ) { - return await request.put( + return await request.mutationRequest( + 'PUT', `${endpoint}/space/updateMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpsertSpace` hook instead. */ async function upsertSpace(args: Prisma.SelectSubset) { - return await request.post, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/space/upsert`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useDeleteSpace` hook instead. */ async function deleteSpace(args: Prisma.SelectSubset) { - return await request.del, true>( + return await request.mutationRequest | undefined, true>( + 'DELETE', `${endpoint}/space/delete`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useDeleteManySpace` hook instead. */ async function deleteManySpace( args: Prisma.SelectSubset, ) { - return await request.del( + return await request.mutationRequest( + 'DELETE', `${endpoint}/space/deleteMany`, args, - mutate, + invalidate, fetch, false, ); @@ -94,12 +107,39 @@ export function useMutateSpace() { return { createSpace, createManySpace, updateSpace, updateManySpace, upsertSpace, deleteSpace, deleteManySpace }; } +export function useCreateSpace( + options?: MutationOptions< + Prisma.SpaceGetPayload | undefined, + unknown, + Prisma.SpaceCreateArgs + >, +) { + const mutation = request.useModelMutation('Space', 'POST', 'create', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useCreateManySpace( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('Space', 'POST', 'createMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + export function useFindManySpace( args?: Prisma.SelectSubset, - options?: RequestOptions>>, + options?: QueryOptions & { $optimistic?: boolean }>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>>('Space', 'findMany', endpoint, args, options, fetch); + return request.useModelQuery('Space', 'findMany', args, options); } export function useInfiniteFindManySpace< @@ -107,37 +147,102 @@ export function useInfiniteFindManySpace< R extends Array>, >( getNextArgs: GetNextArgs | undefined, R>, - options?: InfiniteRequestOptions>>, + options?: InfiniteQueryOptions>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useInfiniteGet< - Prisma.SelectSubset | undefined, - Array> - >('Space', 'findMany', endpoint, getNextArgs, options, fetch); + return request.useInfiniteModelQuery('Space', 'findMany', getNextArgs, options); } export function useFindUniqueSpace( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Space', 'findUnique', endpoint, args, options, fetch); + return request.useModelQuery('Space', 'findUnique', args, options); } export function useFindFirstSpace( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Space', 'findFirst', endpoint, args, options, fetch); + return request.useModelQuery('Space', 'findFirst', args, options); +} + +export function useUpdateSpace( + options?: MutationOptions< + Prisma.SpaceGetPayload | undefined, + unknown, + Prisma.SpaceUpdateArgs + >, +) { + const mutation = request.useModelMutation('Space', 'PUT', 'update', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useUpdateManySpace( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('Space', 'PUT', 'updateMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + +export function useUpsertSpace( + options?: MutationOptions< + Prisma.SpaceGetPayload | undefined, + unknown, + Prisma.SpaceUpsertArgs + >, +) { + const mutation = request.useModelMutation('Space', 'POST', 'upsert', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteSpace( + options?: MutationOptions< + Prisma.SpaceGetPayload | undefined, + unknown, + Prisma.SpaceDeleteArgs + >, +) { + const mutation = request.useModelMutation('Space', 'DELETE', 'delete', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteManySpace( + options?: MutationOptions, +) { + const mutation = request.useModelMutation('Space', 'DELETE', 'deleteMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; } export function useAggregateSpace( args?: Prisma.Subset, - options?: RequestOptions>, + options?: QueryOptions>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Space', 'aggregate', endpoint, args, options, fetch); + return request.useModelQuery('Space', 'aggregate', args, options); } export function useGroupBySpace< @@ -191,7 +296,7 @@ export function useGroupBySpace< }[OrderFields], >( args?: Prisma.SubsetIntersection & InputErrors, - options?: RequestOptions< + options?: QueryOptions< {} extends InputErrors ? Array< PickEnumerable & { @@ -205,25 +310,12 @@ export function useGroupBySpace< : InputErrors >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - {} extends InputErrors - ? Array< - PickEnumerable & { - [P in keyof T & keyof Prisma.SpaceGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - : InputErrors - >('Space', 'groupBy', endpoint, args, options, fetch); + return request.useModelQuery('Space', 'groupBy', args, options); } export function useCountSpace( args?: Prisma.Subset, - options?: RequestOptions< + options?: QueryOptions< T extends { select: any } ? T['select'] extends true ? number @@ -231,12 +323,5 @@ export function useCountSpace( : number >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - T extends { select: any } - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >('Space', 'count', endpoint, args, options, fetch); + return request.useModelQuery('Space', 'count', args, options); } diff --git a/lib/hooks/todo.ts b/lib/hooks/todo.ts index 44a5954..7fb1247 100644 --- a/lib/hooks/todo.ts +++ b/lib/hooks/todo.ts @@ -1,110 +1,223 @@ /* eslint-disable */ -import type { Prisma, Todo } from '@prisma/client'; +import type { Prisma } from '@prisma/client'; import { - RequestHandlerContext, type GetNextArgs, - type RequestOptions, - type InfiniteRequestOptions, + type QueryOptions, + type InfiniteQueryOptions, + type MutationOptions, type PickEnumerable, - type CheckSelect, useHooksContext, } from '@zenstackhq/swr/runtime'; import metadata from './__model_meta'; import * as request from '@zenstackhq/swr/runtime'; export function useMutateTodo() { - const { endpoint, fetch, logging } = useHooksContext(); - const mutate = request.useMutate('Todo', metadata, logging); + const { endpoint, fetch } = useHooksContext(); + const invalidate = request.useInvalidation('Todo', metadata); + /** @deprecated Use `useCreateTodo` hook instead. */ async function createTodo(args: Prisma.SelectSubset) { - return await request.post>, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/todo/create`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useCreateManyTodo` hook instead. */ async function createManyTodo( args: Prisma.SelectSubset, ) { - return await request.post( + return await request.mutationRequest( + 'POST', `${endpoint}/todo/createMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpdateTodo` hook instead. */ async function updateTodo(args: Prisma.SelectSubset) { - return await request.put, true>(`${endpoint}/todo/update`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'PUT', + `${endpoint}/todo/update`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useUpdateManyTodo` hook instead. */ async function updateManyTodo( args: Prisma.SelectSubset, ) { - return await request.put(`${endpoint}/todo/updateMany`, args, mutate, fetch, false); + return await request.mutationRequest( + 'PUT', + `${endpoint}/todo/updateMany`, + args, + invalidate, + fetch, + false, + ); } + /** @deprecated Use `useUpsertTodo` hook instead. */ async function upsertTodo(args: Prisma.SelectSubset) { - return await request.post, true>(`${endpoint}/todo/upsert`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'POST', + `${endpoint}/todo/upsert`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useDeleteTodo` hook instead. */ async function deleteTodo(args: Prisma.SelectSubset) { - return await request.del, true>(`${endpoint}/todo/delete`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'DELETE', + `${endpoint}/todo/delete`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useDeleteManyTodo` hook instead. */ async function deleteManyTodo( args: Prisma.SelectSubset, ) { - return await request.del(`${endpoint}/todo/deleteMany`, args, mutate, fetch, false); + return await request.mutationRequest( + 'DELETE', + `${endpoint}/todo/deleteMany`, + args, + invalidate, + fetch, + false, + ); } return { createTodo, createManyTodo, updateTodo, updateManyTodo, upsertTodo, deleteTodo, deleteManyTodo }; } +export function useCreateTodo( + options?: MutationOptions | undefined, unknown, Prisma.TodoCreateArgs>, +) { + const mutation = request.useModelMutation('Todo', 'POST', 'create', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useCreateManyTodo(options?: MutationOptions) { + const mutation = request.useModelMutation('Todo', 'POST', 'createMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + export function useFindManyTodo( args?: Prisma.SelectSubset, - options?: RequestOptions>>, + options?: QueryOptions & { $optimistic?: boolean }>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>>('Todo', 'findMany', endpoint, args, options, fetch); + return request.useModelQuery('Todo', 'findMany', args, options); } export function useInfiniteFindManyTodo>>( getNextArgs: GetNextArgs | undefined, R>, - options?: InfiniteRequestOptions>>, + options?: InfiniteQueryOptions>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useInfiniteGet< - Prisma.SelectSubset | undefined, - Array> - >('Todo', 'findMany', endpoint, getNextArgs, options, fetch); + return request.useInfiniteModelQuery('Todo', 'findMany', getNextArgs, options); } export function useFindUniqueTodo( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Todo', 'findUnique', endpoint, args, options, fetch); + return request.useModelQuery('Todo', 'findUnique', args, options); } export function useFindFirstTodo( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Todo', 'findFirst', endpoint, args, options, fetch); + return request.useModelQuery('Todo', 'findFirst', args, options); +} + +export function useUpdateTodo( + options?: MutationOptions | undefined, unknown, Prisma.TodoUpdateArgs>, +) { + const mutation = request.useModelMutation('Todo', 'PUT', 'update', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useUpdateManyTodo(options?: MutationOptions) { + const mutation = request.useModelMutation('Todo', 'PUT', 'updateMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + +export function useUpsertTodo( + options?: MutationOptions | undefined, unknown, Prisma.TodoUpsertArgs>, +) { + const mutation = request.useModelMutation('Todo', 'POST', 'upsert', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteTodo( + options?: MutationOptions | undefined, unknown, Prisma.TodoDeleteArgs>, +) { + const mutation = request.useModelMutation('Todo', 'DELETE', 'delete', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteManyTodo(options?: MutationOptions) { + const mutation = request.useModelMutation('Todo', 'DELETE', 'deleteMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; } export function useAggregateTodo( args?: Prisma.Subset, - options?: RequestOptions>, + options?: QueryOptions>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('Todo', 'aggregate', endpoint, args, options, fetch); + return request.useModelQuery('Todo', 'aggregate', args, options); } export function useGroupByTodo< @@ -158,7 +271,7 @@ export function useGroupByTodo< }[OrderFields], >( args?: Prisma.SubsetIntersection & InputErrors, - options?: RequestOptions< + options?: QueryOptions< {} extends InputErrors ? Array< PickEnumerable & { @@ -172,25 +285,12 @@ export function useGroupByTodo< : InputErrors >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - {} extends InputErrors - ? Array< - PickEnumerable & { - [P in keyof T & keyof Prisma.TodoGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - : InputErrors - >('Todo', 'groupBy', endpoint, args, options, fetch); + return request.useModelQuery('Todo', 'groupBy', args, options); } export function useCountTodo( args?: Prisma.Subset, - options?: RequestOptions< + options?: QueryOptions< T extends { select: any } ? T['select'] extends true ? number @@ -198,12 +298,5 @@ export function useCountTodo( : number >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - T extends { select: any } - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >('Todo', 'count', endpoint, args, options, fetch); + return request.useModelQuery('Todo', 'count', args, options); } diff --git a/lib/hooks/user.ts b/lib/hooks/user.ts index 1de8cee..66cffb2 100644 --- a/lib/hooks/user.ts +++ b/lib/hooks/user.ts @@ -1,110 +1,223 @@ /* eslint-disable */ -import type { Prisma, User } from '@prisma/client'; +import type { Prisma } from '@prisma/client'; import { - RequestHandlerContext, type GetNextArgs, - type RequestOptions, - type InfiniteRequestOptions, + type QueryOptions, + type InfiniteQueryOptions, + type MutationOptions, type PickEnumerable, - type CheckSelect, useHooksContext, } from '@zenstackhq/swr/runtime'; import metadata from './__model_meta'; import * as request from '@zenstackhq/swr/runtime'; export function useMutateUser() { - const { endpoint, fetch, logging } = useHooksContext(); - const mutate = request.useMutate('User', metadata, logging); + const { endpoint, fetch } = useHooksContext(); + const invalidate = request.useInvalidation('User', metadata); + /** @deprecated Use `useCreateUser` hook instead. */ async function createUser(args: Prisma.SelectSubset) { - return await request.post>, true>( + return await request.mutationRequest | undefined, true>( + 'POST', `${endpoint}/user/create`, args, - mutate, + invalidate, fetch, true, ); } + /** @deprecated Use `useCreateManyUser` hook instead. */ async function createManyUser( args: Prisma.SelectSubset, ) { - return await request.post( + return await request.mutationRequest( + 'POST', `${endpoint}/user/createMany`, args, - mutate, + invalidate, fetch, false, ); } + /** @deprecated Use `useUpdateUser` hook instead. */ async function updateUser(args: Prisma.SelectSubset) { - return await request.put, true>(`${endpoint}/user/update`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'PUT', + `${endpoint}/user/update`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useUpdateManyUser` hook instead. */ async function updateManyUser( args: Prisma.SelectSubset, ) { - return await request.put(`${endpoint}/user/updateMany`, args, mutate, fetch, false); + return await request.mutationRequest( + 'PUT', + `${endpoint}/user/updateMany`, + args, + invalidate, + fetch, + false, + ); } + /** @deprecated Use `useUpsertUser` hook instead. */ async function upsertUser(args: Prisma.SelectSubset) { - return await request.post, true>(`${endpoint}/user/upsert`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'POST', + `${endpoint}/user/upsert`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useDeleteUser` hook instead. */ async function deleteUser(args: Prisma.SelectSubset) { - return await request.del, true>(`${endpoint}/user/delete`, args, mutate, fetch, true); + return await request.mutationRequest | undefined, true>( + 'DELETE', + `${endpoint}/user/delete`, + args, + invalidate, + fetch, + true, + ); } + /** @deprecated Use `useDeleteManyUser` hook instead. */ async function deleteManyUser( args: Prisma.SelectSubset, ) { - return await request.del(`${endpoint}/user/deleteMany`, args, mutate, fetch, false); + return await request.mutationRequest( + 'DELETE', + `${endpoint}/user/deleteMany`, + args, + invalidate, + fetch, + false, + ); } return { createUser, createManyUser, updateUser, updateManyUser, upsertUser, deleteUser, deleteManyUser }; } +export function useCreateUser( + options?: MutationOptions | undefined, unknown, Prisma.UserCreateArgs>, +) { + const mutation = request.useModelMutation('User', 'POST', 'create', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useCreateManyUser(options?: MutationOptions) { + const mutation = request.useModelMutation('User', 'POST', 'createMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + export function useFindManyUser( args?: Prisma.SelectSubset, - options?: RequestOptions>>, + options?: QueryOptions & { $optimistic?: boolean }>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>>('User', 'findMany', endpoint, args, options, fetch); + return request.useModelQuery('User', 'findMany', args, options); } export function useInfiniteFindManyUser>>( getNextArgs: GetNextArgs | undefined, R>, - options?: InfiniteRequestOptions>>, + options?: InfiniteQueryOptions>>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useInfiniteGet< - Prisma.SelectSubset | undefined, - Array> - >('User', 'findMany', endpoint, getNextArgs, options, fetch); + return request.useInfiniteModelQuery('User', 'findMany', getNextArgs, options); } export function useFindUniqueUser( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('User', 'findUnique', endpoint, args, options, fetch); + return request.useModelQuery('User', 'findUnique', args, options); } export function useFindFirstUser( args?: Prisma.SelectSubset, - options?: RequestOptions>, + options?: QueryOptions & { $optimistic?: boolean }>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('User', 'findFirst', endpoint, args, options, fetch); + return request.useModelQuery('User', 'findFirst', args, options); +} + +export function useUpdateUser( + options?: MutationOptions | undefined, unknown, Prisma.UserUpdateArgs>, +) { + const mutation = request.useModelMutation('User', 'PUT', 'update', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useUpdateManyUser(options?: MutationOptions) { + const mutation = request.useModelMutation('User', 'PUT', 'updateMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; +} + +export function useUpsertUser( + options?: MutationOptions | undefined, unknown, Prisma.UserUpsertArgs>, +) { + const mutation = request.useModelMutation('User', 'POST', 'upsert', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteUser( + options?: MutationOptions | undefined, unknown, Prisma.UserDeleteArgs>, +) { + const mutation = request.useModelMutation('User', 'DELETE', 'delete', metadata, options, true); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise | undefined>; + }, + }; +} + +export function useDeleteManyUser(options?: MutationOptions) { + const mutation = request.useModelMutation('User', 'DELETE', 'deleteMany', metadata, options, false); + return { + ...mutation, + trigger(args: Prisma.SelectSubset) { + return mutation.trigger(args, options as any) as Promise; + }, + }; } export function useAggregateUser( args?: Prisma.Subset, - options?: RequestOptions>, + options?: QueryOptions>, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet>('User', 'aggregate', endpoint, args, options, fetch); + return request.useModelQuery('User', 'aggregate', args, options); } export function useGroupByUser< @@ -158,7 +271,7 @@ export function useGroupByUser< }[OrderFields], >( args?: Prisma.SubsetIntersection & InputErrors, - options?: RequestOptions< + options?: QueryOptions< {} extends InputErrors ? Array< PickEnumerable & { @@ -172,25 +285,12 @@ export function useGroupByUser< : InputErrors >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - {} extends InputErrors - ? Array< - PickEnumerable & { - [P in keyof T & keyof Prisma.UserGroupByOutputType]: P extends '_count' - ? T[P] extends boolean - ? number - : Prisma.GetScalarType - : Prisma.GetScalarType; - } - > - : InputErrors - >('User', 'groupBy', endpoint, args, options, fetch); + return request.useModelQuery('User', 'groupBy', args, options); } export function useCountUser( args?: Prisma.Subset, - options?: RequestOptions< + options?: QueryOptions< T extends { select: any } ? T['select'] extends true ? number @@ -198,12 +298,5 @@ export function useCountUser( : number >, ) { - const { endpoint, fetch } = useHooksContext(); - return request.useGet< - T extends { select: any } - ? T['select'] extends true - ? number - : Prisma.GetScalarType - : number - >('User', 'count', endpoint, args, options, fetch); + return request.useModelQuery('User', 'count', args, options); } diff --git a/package-lock.json b/package-lock.json index 4569bce..c73ccc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,11 +12,11 @@ "@next-auth/prisma-adapter": "^1.0.6", "@prisma/client": "^5.0.0", "@vercel/analytics": "^1.0.1", - "@zenstackhq/runtime": "1.3.2", - "@zenstackhq/server": "1.3.2", + "@zenstackhq/runtime": "1.4.0", + "@zenstackhq/server": "1.4.0", "babel-plugin-superjson-next": "^0.4.5", "bcryptjs": "^2.4.3", - "daisyui": "^2.31.0", + "daisyui": "^4.4.10", "moment": "^2.29.4", "nanoid": "^4.0.0", "next": "^13.4.4", @@ -33,7 +33,7 @@ "@types/node": "^14.17.3", "@types/react": "^18.2.22", "@types/react-dom": "18.0.6", - "@zenstackhq/swr": "1.3.2", + "@zenstackhq/swr": "1.4.0", "autoprefixer": "^10.4.12", "eslint": "^7.19.0", "eslint-config-next": "12.3.1", @@ -41,7 +41,7 @@ "prisma": "^5.0.0", "tailwindcss": "^3.1.8", "typescript": "^5.1.6", - "zenstack": "1.3.2" + "zenstack": "1.4.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -57,6 +57,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, "engines": { "node": ">=10" }, @@ -295,6 +296,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -308,6 +310,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -316,6 +319,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -323,12 +327,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1448,21 +1454,21 @@ "integrity": "sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow==" }, "node_modules/@zenstackhq/language": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@zenstackhq/language/-/language-1.3.2.tgz", - "integrity": "sha512-HsROvLxts3muDK4FHg6zi2TGXj6Nr83Mj3ZGQJZmSRKOfjpykZmE1HmcVQbYrKM5DXGIb5omt3VpKwLsR5vnrw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@zenstackhq/language/-/language-1.4.0.tgz", + "integrity": "sha512-Wov7KbPEEwYaa/aswxBezh59FqHQ94eal/9W2dGgnBdxEcVct0UFZreLyOnuapMVjbcCopxCZthU2l66UsXJpQ==", "dependencies": { "langium": "1.2.0" } }, "node_modules/@zenstackhq/openapi": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@zenstackhq/openapi/-/openapi-1.3.2.tgz", - "integrity": "sha512-jpDquPkjJDbkcXe6PuJOLZy/7xfidhhIQQsS2ABBaC0Czq8K0XC8RTzju/6oV7SjfvX7Q8PfiN76DXYGP/vfaw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@zenstackhq/openapi/-/openapi-1.4.0.tgz", + "integrity": "sha512-Jy2ybWAh2Fnwt2oqF69CHHB/BAm/kLD9vQsl5sz9I+HIRagrd2HV2NWyLhZXNMJXtH3ptruZXh8nvJggI39G0A==", "dependencies": { "@prisma/generator-helper": "^5.0.0", - "@zenstackhq/runtime": "1.3.2", - "@zenstackhq/sdk": "1.3.2", + "@zenstackhq/runtime": "1.4.0", + "@zenstackhq/sdk": "1.4.0", "change-case": "^4.1.2", "lower-case-first": "^2.0.2", "openapi-types": "^12.1.0", @@ -1474,9 +1480,9 @@ } }, "node_modules/@zenstackhq/runtime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-1.3.2.tgz", - "integrity": "sha512-BIKU439oj1ZRJqGV8ZGX7+GeB9EFO9STU+VHxETmCvVHdWosKnLapUFj6ydY6tiHfKY4xhBPt7RRb40I2zxQ1g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-1.4.0.tgz", + "integrity": "sha512-57ZosQVeRVPPCc8t1PxmVEIFfIonp8B//aEpPSBRbuT5nYnSvigo7DzeefPvYfKBh+CYBUkHJziKOEboSW5kWQ==", "dependencies": { "@types/bcryptjs": "^2.4.2", "bcryptjs": "^2.4.3", @@ -1489,6 +1495,7 @@ "pluralize": "^8.0.0", "semver": "^7.3.8", "superjson": "^1.11.0", + "tiny-invariant": "^1.3.1", "tslib": "^2.4.1", "upper-case-first": "^2.0.2", "uuid": "^9.0.0", @@ -1509,15 +1516,15 @@ } }, "node_modules/@zenstackhq/sdk": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@zenstackhq/sdk/-/sdk-1.3.2.tgz", - "integrity": "sha512-36n+ylac5vDyj/66dxr/TNV90ADCiKgNA0KM9/xtU+r34PWK4a6vtHCeg3qJpxmAW8Xv0KAoccpQggiyQ3KxGQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@zenstackhq/sdk/-/sdk-1.4.0.tgz", + "integrity": "sha512-z7jXqeStSsYilPKJmPF08nZvAsRQUyJF/kwXUYjcFweVLUcMFlJMR7wOKZEhbudBhzd9ZDJdYD3DN9WLU1AMsw==", "dependencies": { "@prisma/generator-helper": "^5.0.0", "@prisma/internals": "^4.16.0", "@prisma/internals-v5": "npm:@prisma/internals@^5.0.0", - "@zenstackhq/language": "1.3.2", - "@zenstackhq/runtime": "1.3.2", + "@zenstackhq/language": "1.4.0", + "@zenstackhq/runtime": "1.4.0", "lower-case-first": "^2.0.2", "prettier": "^2.8.3", "semver": "^7.3.8", @@ -1526,12 +1533,12 @@ } }, "node_modules/@zenstackhq/server": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@zenstackhq/server/-/server-1.3.2.tgz", - "integrity": "sha512-ZP0mzFIM6pLzgfMMxpsbJFbhX1zfhFaxZqsE9AhkAbOhca/b6Cryo5mEsQBd0DKGdoKaf4e51I0bNKF679Ty0g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@zenstackhq/server/-/server-1.4.0.tgz", + "integrity": "sha512-930+O/I4Obt5qCVPqeWPP8xnsD41YjjhRDOGPVSmB+OpFU+UmjDOOA56QsM5mNrPZlkMhSRMf0BPVMthbX8/Hg==", "dependencies": { - "@zenstackhq/openapi": "1.3.2", - "@zenstackhq/runtime": "1.3.2", + "@zenstackhq/openapi": "1.4.0", + "@zenstackhq/runtime": "1.4.0", "change-case": "^4.1.2", "lower-case-first": "^2.0.2", "superjson": "^1.11.0", @@ -1544,14 +1551,14 @@ } }, "node_modules/@zenstackhq/swr": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@zenstackhq/swr/-/swr-1.3.2.tgz", - "integrity": "sha512-QbZ2vl1Bygvt36CUuAtQCaQA+HB5qPv5cmdpHETetPMENe3PgzvUaxJ8xTEwODl38S9iryHf79NEwlT4X4RHPA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@zenstackhq/swr/-/swr-1.4.0.tgz", + "integrity": "sha512-4UHhj2QD7Hv1e2x4FdT3xX0acykv7v80h/D5nJnx2LxfsKjL6RADy6JAvj/IILZuSMdb0n7P/ZXeXlCLW1lkPg==", "dev": true, "dependencies": { "@prisma/generator-helper": "^5.0.0", - "@zenstackhq/runtime": "1.3.2", - "@zenstackhq/sdk": "1.3.2", + "@zenstackhq/runtime": "1.4.0", + "@zenstackhq/sdk": "1.4.0", "change-case": "^4.1.2", "cross-fetch": "^4.0.0", "decimal.js": "^10.4.2", @@ -1680,12 +1687,14 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1946,6 +1955,7 @@ "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2059,6 +2069,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } @@ -2120,6 +2131,7 @@ "version": "4.21.10", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2342,6 +2354,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", @@ -2452,18 +2465,6 @@ "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz", "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==" }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2480,15 +2481,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -2501,6 +2493,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, "engines": { "node": ">= 6" } @@ -2681,23 +2674,30 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "dev": true }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/daisyui": { - "version": "2.52.0", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.52.0.tgz", - "integrity": "sha512-LQTA5/IVXAJHBMFoeaEMfd7/akAFPPcdQPR3O9fzzcFiczneJFM73CFPnScmW2sOgn/D83cvkP854ep2T9OfTg==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.4.10.tgz", + "integrity": "sha512-NGDsOLtCQ9UzfeOUlKn1lwneQte4UoINmAaDBcrMAbZviu/jWm7PSR9DqH3eE/AY/TpkImdAPVK+kGsZlpEFkQ==", "dependencies": { - "color": "^4.2", - "css-selector-tokenizer": "^0.8.0", - "postcss-js": "^4.0.0", - "tailwindcss": "^3" + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/daisyui" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.1.6" } }, "node_modules/damerau-levenshtein": { @@ -2831,7 +2831,8 @@ "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "node_modules/dir-glob": { "version": "3.0.1", @@ -2847,7 +2848,8 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "node_modules/doctrine": { "version": "3.0.0", @@ -2881,7 +2883,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.487", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.487.tgz", - "integrity": "sha512-XbCRs/34l31np/p33m+5tdBrdXu9jJkZxSbNxj5I0H1KtV2ZMSB+i/HYqDiRzHaFx2T5EdytjoBRe8QRJE2vQg==" + "integrity": "sha512-XbCRs/34l31np/p33m+5tdBrdXu9jJkZxSbNxj5I0H1KtV2ZMSB+i/HYqDiRzHaFx2T5EdytjoBRe8QRJE2vQg==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -3038,6 +3041,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -3726,6 +3730,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, "engines": { "node": "*" }, @@ -3834,6 +3839,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -4425,6 +4431,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4761,6 +4768,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "dev": true, "bin": { "jiti": "bin/jiti.js" } @@ -4944,6 +4952,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, "engines": { "node": ">=10" } @@ -5237,6 +5246,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -5432,7 +5442,8 @@ "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -5465,6 +5476,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5562,6 +5574,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6001,6 +6014,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6009,6 +6023,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, "engines": { "node": ">= 6" } @@ -6111,6 +6126,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -6145,6 +6161,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, "dependencies": { "lilconfig": "^2.0.5", "yaml": "^2.1.1" @@ -6173,6 +6190,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -6191,6 +6209,7 @@ "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6202,7 +6221,8 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, "node_modules/postcss/node_modules/nanoid": { "version": "3.3.6", @@ -6483,6 +6503,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -6625,6 +6646,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -6927,19 +6949,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -7222,6 +7231,7 @@ "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -7243,6 +7253,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7373,6 +7384,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -7409,6 +7421,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -7420,6 +7433,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { "node": ">= 6" } @@ -7533,6 +7547,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -7541,6 +7556,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -7637,7 +7653,8 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true }, "node_modules/ts-japi": { "version": "1.9.1", @@ -7859,6 +7876,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -8185,16 +8203,16 @@ } }, "node_modules/zenstack": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-1.3.2.tgz", - "integrity": "sha512-lT5/uKADKAljKYxmQDDNTyXKc60PupJT7h+wFRSOjjpxpb9B8+4bcNEcmJi4cShdUUaRYLlkb+OfhNX88I54qA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-1.4.0.tgz", + "integrity": "sha512-EI6RKX4aSPMqYVCA6Y7RLASlp59lTeAiNWMwkJv15/jkA+OM0IfOXXMJK/7JNmuMYKWJfjMkt2vZ5w1uuy2XGA==", "dev": true, "hasInstallScript": true, "dependencies": { "@paralleldrive/cuid2": "^2.2.0", "@prisma/generator-helper": "^5.0.0", - "@zenstackhq/language": "1.3.2", - "@zenstackhq/sdk": "1.3.2", + "@zenstackhq/language": "1.4.0", + "@zenstackhq/sdk": "1.4.0", "async-exit-hook": "^2.0.1", "change-case": "^4.1.2", "colors": "1.4.0", diff --git a/package.json b/package.json index 77a9d2c..205bf86 100644 --- a/package.json +++ b/package.json @@ -23,11 +23,11 @@ "@next-auth/prisma-adapter": "^1.0.6", "@prisma/client": "^5.0.0", "@vercel/analytics": "^1.0.1", - "@zenstackhq/runtime": "1.3.2", - "@zenstackhq/server": "1.3.2", + "@zenstackhq/runtime": "1.4.0", + "@zenstackhq/server": "1.4.0", "babel-plugin-superjson-next": "^0.4.5", "bcryptjs": "^2.4.3", - "daisyui": "^2.31.0", + "daisyui": "^4.4.10", "moment": "^2.29.4", "nanoid": "^4.0.0", "next": "^13.4.4", @@ -44,7 +44,7 @@ "@types/node": "^14.17.3", "@types/react": "^18.2.22", "@types/react-dom": "18.0.6", - "@zenstackhq/swr": "1.3.2", + "@zenstackhq/swr": "1.4.0", "autoprefixer": "^10.4.12", "eslint": "^7.19.0", "eslint-config-next": "12.3.1", @@ -52,6 +52,6 @@ "prisma": "^5.0.0", "tailwindcss": "^3.1.8", "typescript": "^5.1.6", - "zenstack": "1.3.2" + "zenstack": "1.4.0" } } diff --git a/pages/create-space.tsx b/pages/create-space.tsx index 3f662f6..c36080c 100644 --- a/pages/create-space.tsx +++ b/pages/create-space.tsx @@ -1,4 +1,4 @@ -import { useMutateSpace } from '@lib/hooks'; +import { useCreateSpace } from '@lib/hooks'; import { SpaceUserRole } from '@prisma/client'; import WithNavBar from 'components/WithNavBar'; import { NextPage } from 'next'; @@ -12,7 +12,7 @@ const CreateSpace: NextPage = () => { const [name, setName] = useState(''); const [slug, setSlug] = useState(''); - const { createSpace } = useMutateSpace(); + const { trigger: createSpace } = useCreateSpace(); const router = useRouter(); const onSubmit = async (event: FormEvent) => { @@ -33,7 +33,7 @@ const CreateSpace: NextPage = () => { }, }); console.log('Space created:', space); - toast.success("Space created successfull! You'll be redirected."); + toast.success("Space created successfully! You'll be redirected."); setTimeout(() => { if (space) { @@ -96,7 +96,13 @@ const CreateSpace: NextPage = () => { value="Create" className="btn btn-primary px-8" /> -
diff --git a/pages/space/[slug]/[listId]/index.tsx b/pages/space/[slug]/[listId]/index.tsx index 14c1700..e7e423d 100644 --- a/pages/space/[slug]/[listId]/index.tsx +++ b/pages/space/[slug]/[listId]/index.tsx @@ -1,13 +1,12 @@ import { PlusIcon } from '@heroicons/react/24/outline'; import { useCurrentUser } from '@lib/context'; -import { useInfiniteFindManyTodo, useMutateTodo } from '@lib/hooks'; +import { useCreateTodo, useFindManyTodo } from '@lib/hooks'; import { List, Space } from '@prisma/client'; import BreadCrumb from 'components/BreadCrumb'; import TodoComponent from 'components/Todo'; import WithNavBar from 'components/WithNavBar'; import { GetServerSideProps } from 'next'; -import React, { ChangeEvent, KeyboardEvent, useState } from 'react'; -import { toast } from 'react-toastify'; +import { ChangeEvent, KeyboardEvent, useState } from 'react'; import { getEnhancedPrisma } from 'server/enhanced-db'; type Props = { @@ -15,58 +14,33 @@ type Props = { list: List; }; -const PAGE_SIZE = 5; - export default function TodoList(props: Props) { const user = useCurrentUser(); const [title, setTitle] = useState(''); - const { createTodo } = useMutateTodo(); + const { trigger: createTodo } = useCreateTodo({ optimisticUpdate: true }); - const { - data: pages, - mutate: refetch, - size, - setSize, - } = useInfiniteFindManyTodo( - (pageIndex, previousPageData) => { - if (previousPageData && !previousPageData.length) { - return null; - } - return { - where: { listId: props.list.id }, - include: { - owner: true, - }, - orderBy: { - createdAt: 'desc', - }, - take: PAGE_SIZE, - skip: pageIndex * PAGE_SIZE, - }; - }, + const { data: todos } = useFindManyTodo( { - disabled: !props.list, - } + where: { listId: props.list.id }, + include: { + owner: true, + }, + orderBy: { + createdAt: 'desc', + }, + }, + { keepPreviousData: true } ); - const isEmpty = pages?.[0]?.length === 0; - const isReachingEnd = isEmpty || (pages && pages[pages.length - 1].length < PAGE_SIZE); - - const _createTodo = async () => { - try { - const todo = await createTodo({ - data: { - title, - owner: { connect: { id: user!.id } }, - list: { connect: { id: props.list.id } }, - }, - }); - console.log(`Todo created: ${todo}`); - setTitle(''); - refetch(); - } catch (err: any) { - toast.error(`Failed to create todo: ${err.info?.message || err.message}`); - } + const _createTodo = () => { + createTodo({ + data: { + title, + owner: { connect: { id: user!.id } }, + list: { connect: { id: props.list.id } }, + }, + }); + setTitle(''); }; if (!props.space || !props.list) { @@ -100,32 +74,11 @@ export default function TodoList(props: Props) { - {isEmpty &&

No items found.

} - - - {!isReachingEnd && ( - - )} ); diff --git a/pages/space/[slug]/index.tsx b/pages/space/[slug]/index.tsx index b35db97..b177f56 100644 --- a/pages/space/[slug]/index.tsx +++ b/pages/space/[slug]/index.tsx @@ -1,5 +1,5 @@ import { SpaceContext, UserContext } from '@lib/context'; -import { useFindManyList, useMutateList } from '@lib/hooks'; +import { useCreateList, useFindManyList } from '@lib/hooks'; import { List, Space, User } from '@prisma/client'; import BreadCrumb from 'components/BreadCrumb'; import SpaceMembers from 'components/SpaceMembers'; @@ -11,7 +11,7 @@ import { ChangeEvent, FormEvent, useContext, useEffect, useRef, useState } from import { toast } from 'react-toastify'; import { getEnhancedPrisma } from 'server/enhanced-db'; -function CreateDialog({ created }: { created: (list: List) => void }) { +function CreateDialog() { const user = useContext(UserContext); const space = useContext(SpaceContext); @@ -19,7 +19,18 @@ function CreateDialog({ created }: { created: (list: List) => void }) { const [title, setTitle] = useState(''); const [_private, setPrivate] = useState(false); - const { createList } = useMutateList(); + const { trigger: createList } = useCreateList({ + onSuccess: () => { + toast.success('List created successfully!'); + + // reset states + setTitle(''); + setPrivate(false); + + // close modal + setModalOpen(false); + }, + }); const inputRef = useRef(null); @@ -29,35 +40,17 @@ function CreateDialog({ created }: { created: (list: List) => void }) { } }, [modalOpen]); - const onSubmit = async (event: FormEvent) => { + const onSubmit = (event: FormEvent) => { event.preventDefault(); - try { - const list = await createList({ - data: { - title, - private: _private, - space: { connect: { id: space!.id } }, - owner: { connect: { id: user!.id } }, - }, - }); - - if (created && list) { - created(list); - } - } catch (err: any) { - toast.error(`Failed to create list: ${err.info?.message || err.message}`); - return; - } - - toast.success('List created successfully!'); - - // reset states - setTitle(''); - setPrivate(false); - - // close modal - setModalOpen(false); + createList({ + data: { + title, + private: _private, + space: { connect: { id: space!.id } }, + owner: { connect: { id: user!.id } }, + }, + }); }; return ( @@ -124,7 +117,7 @@ type Props = { export default function SpaceHome(props: Props) { const router = useRouter(); - const { data: lists, mutate: refetch } = useFindManyList( + const { data: lists } = useFindManyList( { where: { space: { @@ -160,12 +153,12 @@ export default function SpaceHome(props: Props) { - refetch()} /> + ); diff --git a/tailwind.config.js b/tailwind.config.js index f3296d1..2e30d8f 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -6,6 +6,6 @@ module.exports = { }, plugins: [require('daisyui'), require('@tailwindcss/line-clamp')], daisyui: { - themes: false, + themes: ['light'], }, };