@proofkit/cli 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +120 -0
- package/LICENSE.md +21 -0
- package/README.md +19 -0
- package/dist/acorn-AKFTBDM6.js +15 -0
- package/dist/angular-BOQ6FHSU.js +2 -0
- package/dist/babel-ZTOORN7K.js +15 -0
- package/dist/chunk-4LISTI44.js +1 -0
- package/dist/estree-KOJPX4S6.js +36 -0
- package/dist/flow-RCI44GYZ.js +19 -0
- package/dist/glimmer-GV5EF5E4.js +30 -0
- package/dist/graphql-YXQNPQWM.js +29 -0
- package/dist/html-ZAJTRROK.js +22 -0
- package/dist/index.js +300 -0
- package/dist/markdown-Q75DTQI7.js +63 -0
- package/dist/meriyah-32K7GBV5.js +4 -0
- package/dist/postcss-WWYO4PGL.js +54 -0
- package/dist/typescript-M6N7JDNQ.js +20 -0
- package/dist/yaml-LY7PNAYV.js +161 -0
- package/index.d.ts +19 -0
- package/package.json +122 -0
- package/template/extras/_cursor/conditional-rules/nextjs-framework.mdc +51 -0
- package/template/extras/_cursor/conditional-rules/npm.mdc +60 -0
- package/template/extras/_cursor/conditional-rules/pnpm.mdc +65 -0
- package/template/extras/_cursor/conditional-rules/yarn.mdc +60 -0
- package/template/extras/_cursor/rules/cursor-rules.mdc +88 -0
- package/template/extras/_cursor/rules/filemaker-api.mdc +176 -0
- package/template/extras/_cursor/rules/troubleshooting-patterns.mdc +240 -0
- package/template/extras/_cursor/rules/ui-components.mdc +57 -0
- package/template/extras/config/_eslint.js +27 -0
- package/template/extras/config/_prettier.config.js +6 -0
- package/template/extras/config/drizzle-config-mysql.ts +12 -0
- package/template/extras/config/drizzle-config-postgres.ts +12 -0
- package/template/extras/config/drizzle-config-sqlite.ts +12 -0
- package/template/extras/config/fmschema.config.mjs +9 -0
- package/template/extras/config/get-query-client.ts +6 -0
- package/template/extras/config/postcss.config.cjs +7 -0
- package/template/extras/config/query-provider-vite.tsx +19 -0
- package/template/extras/config/query-provider.tsx +21 -0
- package/template/extras/emailProviders/none/email.tsx +24 -0
- package/template/extras/emailProviders/plunk/email.tsx +26 -0
- package/template/extras/emailProviders/plunk/service.ts +4 -0
- package/template/extras/emailProviders/resend/email.tsx +23 -0
- package/template/extras/emailProviders/resend/service.ts +4 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/actions.ts +93 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/page.tsx +27 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/profile-form.tsx +56 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/reset-password-form.tsx +110 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/schema.ts +19 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/actions.ts +37 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/forgot-form.tsx +41 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/page.tsx +21 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/schema.ts +5 -0
- package/template/extras/fmaddon-auth/app/auth/login/actions.ts +34 -0
- package/template/extras/fmaddon-auth/app/auth/login/login-form.tsx +64 -0
- package/template/extras/fmaddon-auth/app/auth/login/page.tsx +26 -0
- package/template/extras/fmaddon-auth/app/auth/login/schema.ts +6 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/actions.ts +50 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/page.tsx +32 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/reset-password-form.tsx +59 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/schema.ts +14 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/actions.ts +45 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/page.tsx +32 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/schema.ts +5 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/verify-email-form.tsx +48 -0
- package/template/extras/fmaddon-auth/app/auth/signup/actions.ts +49 -0
- package/template/extras/fmaddon-auth/app/auth/signup/page.tsx +26 -0
- package/template/extras/fmaddon-auth/app/auth/signup/schema.ts +12 -0
- package/template/extras/fmaddon-auth/app/auth/signup/signup-form.tsx +67 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/actions.ts +110 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/email-verification-form.tsx +45 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/page.tsx +38 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/resend-button.tsx +35 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/schema.ts +5 -0
- package/template/extras/fmaddon-auth/components/auth/actions.ts +16 -0
- package/template/extras/fmaddon-auth/components/auth/protect.tsx +17 -0
- package/template/extras/fmaddon-auth/components/auth/redirect.tsx +26 -0
- package/template/extras/fmaddon-auth/components/auth/use-user.ts +59 -0
- package/template/extras/fmaddon-auth/components/auth/user-menu.tsx +51 -0
- package/template/extras/fmaddon-auth/emails/auth-code.tsx +156 -0
- package/template/extras/fmaddon-auth/middleware.ts +45 -0
- package/template/extras/fmaddon-auth/server/auth/utils/email-verification.ts +136 -0
- package/template/extras/fmaddon-auth/server/auth/utils/encryption.ts +51 -0
- package/template/extras/fmaddon-auth/server/auth/utils/index.ts +16 -0
- package/template/extras/fmaddon-auth/server/auth/utils/password-reset.ts +152 -0
- package/template/extras/fmaddon-auth/server/auth/utils/password.ts +67 -0
- package/template/extras/fmaddon-auth/server/auth/utils/redirect.ts +8 -0
- package/template/extras/fmaddon-auth/server/auth/utils/session.ts +192 -0
- package/template/extras/fmaddon-auth/server/auth/utils/user.ts +147 -0
- package/template/extras/prisma/schema/base-planetscale.prisma +24 -0
- package/template/extras/prisma/schema/base.prisma +20 -0
- package/template/extras/prisma/schema/with-auth-planetscale.prisma +77 -0
- package/template/extras/prisma/schema/with-auth.prisma +74 -0
- package/template/extras/src/app/_components/post-tw.tsx +50 -0
- package/template/extras/src/app/_components/post.tsx +54 -0
- package/template/extras/src/app/api/auth/[...nextauth]/route.ts +4 -0
- package/template/extras/src/app/api/trpc/[trpc]/route.ts +34 -0
- package/template/extras/src/app/clerk-auth/layout.tsx +10 -0
- package/template/extras/src/app/clerk-auth/signin/[[...sign-in]]/page.tsx +5 -0
- package/template/extras/src/app/clerk-auth/signup/[[...sign-up]]/page.tsx +5 -0
- package/template/extras/src/app/layout/base.tsx +34 -0
- package/template/extras/src/app/layout/main-shell.tsx +37 -0
- package/template/extras/src/app/layout/with-trpc-tw.tsx +24 -0
- package/template/extras/src/app/layout/with-trpc.tsx +24 -0
- package/template/extras/src/app/layout/with-tw.tsx +20 -0
- package/template/extras/src/app/next-auth/layout.tsx +22 -0
- package/template/extras/src/app/next-auth/signin/page.tsx +82 -0
- package/template/extras/src/app/next-auth/signup/action.ts +24 -0
- package/template/extras/src/app/next-auth/signup/page.tsx +40 -0
- package/template/extras/src/app/next-auth/signup/validation.ts +12 -0
- package/template/extras/src/app/page/base.tsx +6 -0
- package/template/extras/src/app/page/with-auth-trpc-tw.tsx +67 -0
- package/template/extras/src/app/page/with-auth-trpc.tsx +68 -0
- package/template/extras/src/app/page/with-trpc-tw.tsx +53 -0
- package/template/extras/src/app/page/with-trpc.tsx +54 -0
- package/template/extras/src/app/page/with-tw.tsx +37 -0
- package/template/extras/src/components/clerk-auth/clerk-provider.tsx +18 -0
- package/template/extras/src/components/clerk-auth/user-menu-mobile.tsx +36 -0
- package/template/extras/src/components/clerk-auth/user-menu.tsx +24 -0
- package/template/extras/src/components/next-auth/next-auth-provider.tsx +14 -0
- package/template/extras/src/components/next-auth/user-menu-mobile.tsx +31 -0
- package/template/extras/src/components/next-auth/user-menu.tsx +38 -0
- package/template/extras/src/env/with-auth.ts +31 -0
- package/template/extras/src/env/with-clerk.ts +20 -0
- package/template/extras/src/index.module.css +177 -0
- package/template/extras/src/middleware/clerk.ts +20 -0
- package/template/extras/src/middleware/next-auth.ts +5 -0
- package/template/extras/src/pages/_app/base.tsx +14 -0
- package/template/extras/src/pages/_app/with-auth-trpc-tw.tsx +23 -0
- package/template/extras/src/pages/_app/with-auth-trpc.tsx +23 -0
- package/template/extras/src/pages/_app/with-auth-tw.tsx +21 -0
- package/template/extras/src/pages/_app/with-auth.tsx +21 -0
- package/template/extras/src/pages/_app/with-trpc-tw.tsx +16 -0
- package/template/extras/src/pages/_app/with-trpc.tsx +16 -0
- package/template/extras/src/pages/_app/with-tw.tsx +14 -0
- package/template/extras/src/pages/api/auth/[...nextauth].ts +5 -0
- package/template/extras/src/pages/api/trpc/[trpc].ts +19 -0
- package/template/extras/src/pages/index/base.tsx +47 -0
- package/template/extras/src/pages/index/with-auth-trpc-tw.tsx +80 -0
- package/template/extras/src/pages/index/with-auth-trpc.tsx +81 -0
- package/template/extras/src/pages/index/with-trpc-tw.tsx +52 -0
- package/template/extras/src/pages/index/with-trpc.tsx +53 -0
- package/template/extras/src/pages/index/with-tw.tsx +45 -0
- package/template/extras/src/server/api/root.ts +23 -0
- package/template/extras/src/server/api/routers/post/base.ts +40 -0
- package/template/extras/src/server/api/routers/post/with-auth-drizzle.ts +39 -0
- package/template/extras/src/server/api/routers/post/with-auth-prisma.ts +41 -0
- package/template/extras/src/server/api/routers/post/with-auth.ts +37 -0
- package/template/extras/src/server/api/routers/post/with-drizzle.ts +30 -0
- package/template/extras/src/server/api/routers/post/with-prisma.ts +31 -0
- package/template/extras/src/server/api/trpc-app/base.ts +103 -0
- package/template/extras/src/server/api/trpc-app/with-auth-db.ts +133 -0
- package/template/extras/src/server/api/trpc-app/with-auth.ts +130 -0
- package/template/extras/src/server/api/trpc-app/with-db.ts +106 -0
- package/template/extras/src/server/api/trpc-pages/base.ts +122 -0
- package/template/extras/src/server/api/trpc-pages/with-auth-db.ts +160 -0
- package/template/extras/src/server/api/trpc-pages/with-auth.ts +158 -0
- package/template/extras/src/server/api/trpc-pages/with-db.ts +125 -0
- package/template/extras/src/server/data/users.ts +23 -0
- package/template/extras/src/server/db/db-prisma-planetscale.ts +22 -0
- package/template/extras/src/server/db/db-prisma.ts +17 -0
- package/template/extras/src/server/db/index-drizzle/with-mysql.ts +18 -0
- package/template/extras/src/server/db/index-drizzle/with-planetscale.ts +7 -0
- package/template/extras/src/server/db/index-drizzle/with-postgres.ts +18 -0
- package/template/extras/src/server/db/index-drizzle/with-sqlite.ts +19 -0
- package/template/extras/src/server/db/schema-drizzle/base-mysql.ts +34 -0
- package/template/extras/src/server/db/schema-drizzle/base-planetscale.ts +34 -0
- package/template/extras/src/server/db/schema-drizzle/base-postgres.ts +36 -0
- package/template/extras/src/server/db/schema-drizzle/base-sqlite.ts +30 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-mysql.ts +123 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-planetscale.ts +117 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-postgres.ts +130 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-sqlite.ts +116 -0
- package/template/extras/src/server/next-auth/base.ts +111 -0
- package/template/extras/src/server/next-auth/password.ts +13 -0
- package/template/extras/src/server/next-auth/with-drizzle.ts +83 -0
- package/template/extras/src/server/next-auth/with-prisma.ts +72 -0
- package/template/extras/src/trpc/query-client.ts +25 -0
- package/template/extras/src/trpc/react.tsx +76 -0
- package/template/extras/src/trpc/server.ts +30 -0
- package/template/extras/src/utils/api.ts +68 -0
- package/template/extras/start-database/mysql.sh +54 -0
- package/template/extras/start-database/postgres.sh +55 -0
- package/template/fm-addon/ProofKitAuth/de.xml +518 -0
- package/template/fm-addon/ProofKitAuth/en.xml +518 -0
- package/template/fm-addon/ProofKitAuth/es.xml +518 -0
- package/template/fm-addon/ProofKitAuth/fr.xml +518 -0
- package/template/fm-addon/ProofKitAuth/icon.png +0 -0
- package/template/fm-addon/ProofKitAuth/icon@2x.png +0 -0
- package/template/fm-addon/ProofKitAuth/info.json +11 -0
- package/template/fm-addon/ProofKitAuth/info_de.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_en.json +8 -0
- package/template/fm-addon/ProofKitAuth/info_es.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_fr.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_it.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_ja.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_ko.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_nl.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_pt.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_sv.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_zh.json +18 -0
- package/template/fm-addon/ProofKitAuth/it.xml +518 -0
- package/template/fm-addon/ProofKitAuth/ja.xml +518 -0
- package/template/fm-addon/ProofKitAuth/ko.xml +518 -0
- package/template/fm-addon/ProofKitAuth/nl.xml +518 -0
- package/template/fm-addon/ProofKitAuth/preview.png +0 -0
- package/template/fm-addon/ProofKitAuth/pt.xml +518 -0
- package/template/fm-addon/ProofKitAuth/sv.xml +518 -0
- package/template/fm-addon/ProofKitAuth/template.xml +0 -0
- package/template/fm-addon/ProofKitAuth/zh.xml +518 -0
- package/template/fm-addon/ProofKitWV/de.xml +896 -0
- package/template/fm-addon/ProofKitWV/en.xml +896 -0
- package/template/fm-addon/ProofKitWV/es.xml +896 -0
- package/template/fm-addon/ProofKitWV/fr.xml +896 -0
- package/template/fm-addon/ProofKitWV/icon.png +0 -0
- package/template/fm-addon/ProofKitWV/icon@2x.png +0 -0
- package/template/fm-addon/ProofKitWV/info.json +11 -0
- package/template/fm-addon/ProofKitWV/info_de.json +18 -0
- package/template/fm-addon/ProofKitWV/info_en.json +11 -0
- package/template/fm-addon/ProofKitWV/info_es.json +18 -0
- package/template/fm-addon/ProofKitWV/info_fr.json +18 -0
- package/template/fm-addon/ProofKitWV/info_it.json +18 -0
- package/template/fm-addon/ProofKitWV/info_ja.json +18 -0
- package/template/fm-addon/ProofKitWV/info_ko.json +18 -0
- package/template/fm-addon/ProofKitWV/info_nl.json +18 -0
- package/template/fm-addon/ProofKitWV/info_pt.json +18 -0
- package/template/fm-addon/ProofKitWV/info_sv.json +18 -0
- package/template/fm-addon/ProofKitWV/info_zh.json +18 -0
- package/template/fm-addon/ProofKitWV/it.xml +896 -0
- package/template/fm-addon/ProofKitWV/ja.xml +896 -0
- package/template/fm-addon/ProofKitWV/ko.xml +896 -0
- package/template/fm-addon/ProofKitWV/nl.xml +896 -0
- package/template/fm-addon/ProofKitWV/preview.png +0 -0
- package/template/fm-addon/ProofKitWV/pt.xml +896 -0
- package/template/fm-addon/ProofKitWV/records_de.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_en.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_es.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_fr.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_it.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_ja.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_ko.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_nl.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_pt.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_sv.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_zh.xml +0 -0
- package/template/fm-addon/ProofKitWV/sv.xml +896 -0
- package/template/fm-addon/ProofKitWV/template.xml +0 -0
- package/template/fm-addon/ProofKitWV/zh.xml +896 -0
- package/template/nextjs/README.md +27 -0
- package/template/nextjs/_gitignore +37 -0
- package/template/nextjs/next.config.ts +12 -0
- package/template/nextjs/package.json +50 -0
- package/template/nextjs/postcss.config.cjs +14 -0
- package/template/nextjs/proofkit.json +1 -0
- package/template/nextjs/public/favicon.ico +0 -0
- package/template/nextjs/public/proofkit.png +0 -0
- package/template/nextjs/src/app/(main)/layout.tsx +6 -0
- package/template/nextjs/src/app/(main)/page.tsx +90 -0
- package/template/nextjs/src/app/layout.tsx +39 -0
- package/template/nextjs/src/app/navigation.tsx +12 -0
- package/template/nextjs/src/components/AppLogo.tsx +6 -0
- package/template/nextjs/src/components/AppShell/internal/AppShell.tsx +21 -0
- package/template/nextjs/src/components/AppShell/internal/Header.module.css +40 -0
- package/template/nextjs/src/components/AppShell/internal/Header.tsx +34 -0
- package/template/nextjs/src/components/AppShell/internal/HeaderMobileMenu.tsx +27 -0
- package/template/nextjs/src/components/AppShell/internal/HeaderNavLink.tsx +31 -0
- package/template/nextjs/src/components/AppShell/internal/config.ts +1 -0
- package/template/nextjs/src/components/AppShell/slot-header-center.tsx +13 -0
- package/template/nextjs/src/components/AppShell/slot-header-left.tsx +23 -0
- package/template/nextjs/src/components/AppShell/slot-header-mobile-content.tsx +43 -0
- package/template/nextjs/src/components/AppShell/slot-header-right.tsx +26 -0
- package/template/nextjs/src/config/env.ts +13 -0
- package/template/nextjs/src/config/theme/globals.css +1 -0
- package/template/nextjs/src/config/theme/mantine-theme.ts +22 -0
- package/template/nextjs/src/server/safe-action.ts +3 -0
- package/template/nextjs/src/utils/notification-helpers.ts +32 -0
- package/template/nextjs/tsconfig.json +40 -0
- package/template/pages/nextjs/blank/page.tsx +5 -0
- package/template/pages/nextjs/table/page.tsx +17 -0
- package/template/pages/nextjs/table/table.tsx +18 -0
- package/template/pages/nextjs/table-edit/actions.ts +23 -0
- package/template/pages/nextjs/table-edit/page.tsx +28 -0
- package/template/pages/nextjs/table-edit/schema.ts +4 -0
- package/template/pages/nextjs/table-edit/table.tsx +43 -0
- package/template/pages/nextjs/table-infinite/actions.ts +62 -0
- package/template/pages/nextjs/table-infinite/page.tsx +11 -0
- package/template/pages/nextjs/table-infinite/query.ts +44 -0
- package/template/pages/nextjs/table-infinite/table.tsx +107 -0
- package/template/pages/nextjs/table-infinite-edit/actions.ts +84 -0
- package/template/pages/nextjs/table-infinite-edit/page.tsx +23 -0
- package/template/pages/nextjs/table-infinite-edit/query.ts +81 -0
- package/template/pages/nextjs/table-infinite-edit/schema.ts +4 -0
- package/template/pages/nextjs/table-infinite-edit/table.tsx +130 -0
- package/template/pages/vite-wv/blank/index.tsx +0 -0
- package/template/pages/vite-wv/table/index.tsx +34 -0
- package/template/pages/vite-wv/table-edit/index.tsx +72 -0
- package/template/vite-wv/.vscode/settings.json +11 -0
- package/template/vite-wv/_gitignore +18 -0
- package/template/vite-wv/index.html +13 -0
- package/template/vite-wv/package.json +52 -0
- package/template/vite-wv/pnpm-lock.yaml +2294 -0
- package/template/vite-wv/postcss.config.cjs +14 -0
- package/template/vite-wv/proofkit.json +1 -0
- package/template/vite-wv/scripts/launch-fm.sh +3 -0
- package/template/vite-wv/scripts/upload.js +21 -0
- package/template/vite-wv/src/components/AppLogo.tsx +5 -0
- package/template/vite-wv/src/components/full-screen-loader.tsx +9 -0
- package/template/vite-wv/src/config/env.ts +16 -0
- package/template/vite-wv/src/config/theme/globals.css +1 -0
- package/template/vite-wv/src/config/theme/mantine-theme.ts +22 -0
- package/template/vite-wv/src/main.tsx +42 -0
- package/template/vite-wv/src/routeTree.gen.ts +111 -0
- package/template/vite-wv/src/routes/__root.tsx +21 -0
- package/template/vite-wv/src/routes/index.tsx +63 -0
- package/template/vite-wv/src/routes/secondary.tsx +28 -0
- package/template/vite-wv/src/utils/notification-helpers.ts +32 -0
- package/template/vite-wv/tsconfig.json +14 -0
- package/template/vite-wv/vite.config.ts +18 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { QueryClientProvider, type QueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { loggerLink, unstable_httpBatchStreamLink } from "@trpc/client";
|
|
5
|
+
import { createTRPCReact } from "@trpc/react-query";
|
|
6
|
+
import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server";
|
|
7
|
+
import { useState } from "react";
|
|
8
|
+
import SuperJSON from "superjson";
|
|
9
|
+
|
|
10
|
+
import { type AppRouter } from "~/server/api/root";
|
|
11
|
+
import { createQueryClient } from "./query-client";
|
|
12
|
+
|
|
13
|
+
let clientQueryClientSingleton: QueryClient | undefined = undefined;
|
|
14
|
+
const getQueryClient = () => {
|
|
15
|
+
if (typeof window === "undefined") {
|
|
16
|
+
// Server: always make a new query client
|
|
17
|
+
return createQueryClient();
|
|
18
|
+
}
|
|
19
|
+
// Browser: use singleton pattern to keep the same query client
|
|
20
|
+
return (clientQueryClientSingleton ??= createQueryClient());
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const api = createTRPCReact<AppRouter>();
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Inference helper for inputs.
|
|
27
|
+
*
|
|
28
|
+
* @example type HelloInput = RouterInputs['example']['hello']
|
|
29
|
+
*/
|
|
30
|
+
export type RouterInputs = inferRouterInputs<AppRouter>;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Inference helper for outputs.
|
|
34
|
+
*
|
|
35
|
+
* @example type HelloOutput = RouterOutputs['example']['hello']
|
|
36
|
+
*/
|
|
37
|
+
export type RouterOutputs = inferRouterOutputs<AppRouter>;
|
|
38
|
+
|
|
39
|
+
export function TRPCReactProvider(props: { children: React.ReactNode }) {
|
|
40
|
+
const queryClient = getQueryClient();
|
|
41
|
+
|
|
42
|
+
const [trpcClient] = useState(() =>
|
|
43
|
+
api.createClient({
|
|
44
|
+
links: [
|
|
45
|
+
loggerLink({
|
|
46
|
+
enabled: (op) =>
|
|
47
|
+
process.env.NODE_ENV === "development" ||
|
|
48
|
+
(op.direction === "down" && op.result instanceof Error),
|
|
49
|
+
}),
|
|
50
|
+
unstable_httpBatchStreamLink({
|
|
51
|
+
transformer: SuperJSON,
|
|
52
|
+
url: getBaseUrl() + "/api/trpc",
|
|
53
|
+
headers: () => {
|
|
54
|
+
const headers = new Headers();
|
|
55
|
+
headers.set("x-trpc-source", "nextjs-react");
|
|
56
|
+
return headers;
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
],
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<QueryClientProvider client={queryClient}>
|
|
65
|
+
<api.Provider client={trpcClient} queryClient={queryClient}>
|
|
66
|
+
{props.children}
|
|
67
|
+
</api.Provider>
|
|
68
|
+
</QueryClientProvider>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getBaseUrl() {
|
|
73
|
+
if (typeof window !== "undefined") return window.location.origin;
|
|
74
|
+
if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`;
|
|
75
|
+
return `http://localhost:${process.env.PORT ?? 3000}`;
|
|
76
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
|
|
3
|
+
import { createHydrationHelpers } from "@trpc/react-query/rsc";
|
|
4
|
+
import { headers } from "next/headers";
|
|
5
|
+
import { cache } from "react";
|
|
6
|
+
|
|
7
|
+
import { createCaller, type AppRouter } from "~/server/api/root";
|
|
8
|
+
import { createTRPCContext } from "~/server/api/trpc";
|
|
9
|
+
import { createQueryClient } from "./query-client";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when
|
|
13
|
+
* handling a tRPC call from a React Server Component.
|
|
14
|
+
*/
|
|
15
|
+
const createContext = cache(() => {
|
|
16
|
+
const heads = new Headers(headers());
|
|
17
|
+
heads.set("x-trpc-source", "rsc");
|
|
18
|
+
|
|
19
|
+
return createTRPCContext({
|
|
20
|
+
headers: heads,
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const getQueryClient = cache(createQueryClient);
|
|
25
|
+
const caller = createCaller(createContext);
|
|
26
|
+
|
|
27
|
+
export const { trpc: api, HydrateClient } = createHydrationHelpers<AppRouter>(
|
|
28
|
+
caller,
|
|
29
|
+
getQueryClient
|
|
30
|
+
);
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is the client-side entrypoint for your tRPC API. It is used to create the `api` object which
|
|
3
|
+
* contains the Next.js App-wrapper, as well as your type-safe React Query hooks.
|
|
4
|
+
*
|
|
5
|
+
* We also create a few inference helpers for input and output types.
|
|
6
|
+
*/
|
|
7
|
+
import { httpBatchLink, loggerLink } from "@trpc/client";
|
|
8
|
+
import { createTRPCNext } from "@trpc/next";
|
|
9
|
+
import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server";
|
|
10
|
+
import superjson from "superjson";
|
|
11
|
+
|
|
12
|
+
import { type AppRouter } from "~/server/api/root";
|
|
13
|
+
|
|
14
|
+
const getBaseUrl = () => {
|
|
15
|
+
if (typeof window !== "undefined") return ""; // browser should use relative url
|
|
16
|
+
if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url
|
|
17
|
+
return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** A set of type-safe react-query hooks for your tRPC API. */
|
|
21
|
+
export const api = createTRPCNext<AppRouter>({
|
|
22
|
+
config() {
|
|
23
|
+
return {
|
|
24
|
+
/**
|
|
25
|
+
* Links used to determine request flow from client to server.
|
|
26
|
+
*
|
|
27
|
+
* @see https://trpc.io/docs/links
|
|
28
|
+
*/
|
|
29
|
+
links: [
|
|
30
|
+
loggerLink({
|
|
31
|
+
enabled: (opts) =>
|
|
32
|
+
process.env.NODE_ENV === "development" ||
|
|
33
|
+
(opts.direction === "down" && opts.result instanceof Error),
|
|
34
|
+
}),
|
|
35
|
+
httpBatchLink({
|
|
36
|
+
/**
|
|
37
|
+
* Transformer used for data de-serialization from the server.
|
|
38
|
+
*
|
|
39
|
+
* @see https://trpc.io/docs/data-transformers
|
|
40
|
+
*/
|
|
41
|
+
transformer: superjson,
|
|
42
|
+
url: `${getBaseUrl()}/api/trpc`,
|
|
43
|
+
}),
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* Whether tRPC should await queries when server rendering pages.
|
|
49
|
+
*
|
|
50
|
+
* @see https://trpc.io/docs/nextjs#ssr-boolean-default-false
|
|
51
|
+
*/
|
|
52
|
+
ssr: false,
|
|
53
|
+
transformer: superjson,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Inference helper for inputs.
|
|
58
|
+
*
|
|
59
|
+
* @example type HelloInput = RouterInputs['example']['hello']
|
|
60
|
+
*/
|
|
61
|
+
export type RouterInputs = inferRouterInputs<AppRouter>;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Inference helper for outputs.
|
|
65
|
+
*
|
|
66
|
+
* @example type HelloOutput = RouterOutputs['example']['hello']
|
|
67
|
+
*/
|
|
68
|
+
export type RouterOutputs = inferRouterOutputs<AppRouter>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Use this script to start a docker container for a local development database
|
|
3
|
+
|
|
4
|
+
# TO RUN ON WINDOWS:
|
|
5
|
+
# 1. Install WSL (Windows Subsystem for Linux) - https://learn.microsoft.com/en-us/windows/wsl/install
|
|
6
|
+
# 2. Install Docker Desktop for Windows - https://docs.docker.com/docker-for-windows/install/
|
|
7
|
+
# 3. Open WSL - `wsl`
|
|
8
|
+
# 4. Run this script - `./start-database.sh`
|
|
9
|
+
|
|
10
|
+
# On Linux and macOS you can run this script directly - `./start-database.sh`
|
|
11
|
+
|
|
12
|
+
DB_CONTAINER_NAME="project1-mysql"
|
|
13
|
+
|
|
14
|
+
if ! [ -x "$(command -v docker)" ]; then
|
|
15
|
+
echo -e "Docker is not installed. Please install docker and try again.\nDocker install guide: https://docs.docker.com/engine/install/"
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
if [ "$(docker ps -q -f name=$DB_CONTAINER_NAME)" ]; then
|
|
20
|
+
echo "Database container '$DB_CONTAINER_NAME' already running"
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
if [ "$(docker ps -q -a -f name=$DB_CONTAINER_NAME)" ]; then
|
|
25
|
+
docker start "$DB_CONTAINER_NAME"
|
|
26
|
+
echo "Existing database container '$DB_CONTAINER_NAME' started"
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# import env variables from .env
|
|
31
|
+
set -a
|
|
32
|
+
source .env
|
|
33
|
+
|
|
34
|
+
DB_PASSWORD=$(echo "$DATABASE_URL" | awk -F':' '{print $3}' | awk -F'@' '{print $1}')
|
|
35
|
+
DB_PORT=$(echo "$DATABASE_URL" | awk -F':' '{print $4}' | awk -F'\/' '{print $1}')
|
|
36
|
+
|
|
37
|
+
if [ "$DB_PASSWORD" == "password" ]; then
|
|
38
|
+
echo "You are using the default database password"
|
|
39
|
+
read -p "Should we generate a random password for you? [y/N]: " -r REPLY
|
|
40
|
+
if ! [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
41
|
+
echo "Please change the default password in the .env file and try again"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
# Generate a random URL-safe password
|
|
45
|
+
DB_PASSWORD=$(openssl rand -base64 12 | tr '+/' '-_')
|
|
46
|
+
sed -i -e "s#:password@#:$DB_PASSWORD@#" .env
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
docker run -d \
|
|
50
|
+
--name $DB_CONTAINER_NAME \
|
|
51
|
+
-e MYSQL_ROOT_PASSWORD="$DB_PASSWORD" \
|
|
52
|
+
-e MYSQL_DATABASE=project1 \
|
|
53
|
+
-p "$DB_PORT":3306 \
|
|
54
|
+
docker.io/mysql && echo "Database container '$DB_CONTAINER_NAME' was successfully created"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Use this script to start a docker container for a local development database
|
|
3
|
+
|
|
4
|
+
# TO RUN ON WINDOWS:
|
|
5
|
+
# 1. Install WSL (Windows Subsystem for Linux) - https://learn.microsoft.com/en-us/windows/wsl/install
|
|
6
|
+
# 2. Install Docker Desktop for Windows - https://docs.docker.com/docker-for-windows/install/
|
|
7
|
+
# 3. Open WSL - `wsl`
|
|
8
|
+
# 4. Run this script - `./start-database.sh`
|
|
9
|
+
|
|
10
|
+
# On Linux and macOS you can run this script directly - `./start-database.sh`
|
|
11
|
+
|
|
12
|
+
DB_CONTAINER_NAME="project1-postgres"
|
|
13
|
+
|
|
14
|
+
if ! [ -x "$(command -v docker)" ]; then
|
|
15
|
+
echo -e "Docker is not installed. Please install docker and try again.\nDocker install guide: https://docs.docker.com/engine/install/"
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
if [ "$(docker ps -q -f name=$DB_CONTAINER_NAME)" ]; then
|
|
20
|
+
echo "Database container '$DB_CONTAINER_NAME' already running"
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
if [ "$(docker ps -q -a -f name=$DB_CONTAINER_NAME)" ]; then
|
|
25
|
+
docker start "$DB_CONTAINER_NAME"
|
|
26
|
+
echo "Existing database container '$DB_CONTAINER_NAME' started"
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# import env variables from .env
|
|
31
|
+
set -a
|
|
32
|
+
source .env
|
|
33
|
+
|
|
34
|
+
DB_PASSWORD=$(echo "$DATABASE_URL" | awk -F':' '{print $3}' | awk -F'@' '{print $1}')
|
|
35
|
+
DB_PORT=$(echo "$DATABASE_URL" | awk -F':' '{print $4}' | awk -F'\/' '{print $1}')
|
|
36
|
+
|
|
37
|
+
if [ "$DB_PASSWORD" = "password" ]; then
|
|
38
|
+
echo "You are using the default database password"
|
|
39
|
+
read -p "Should we generate a random password for you? [y/N]: " -r REPLY
|
|
40
|
+
if ! [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
41
|
+
echo "Please change the default password in the .env file and try again"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
# Generate a random URL-safe password
|
|
45
|
+
DB_PASSWORD=$(openssl rand -base64 12 | tr '+/' '-_')
|
|
46
|
+
sed -i -e "s#:password@#:$DB_PASSWORD@#" .env
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
docker run -d \
|
|
50
|
+
--name $DB_CONTAINER_NAME \
|
|
51
|
+
-e POSTGRES_USER="postgres" \
|
|
52
|
+
-e POSTGRES_PASSWORD="$DB_PASSWORD" \
|
|
53
|
+
-e POSTGRES_DB=project1 \
|
|
54
|
+
-p "$DB_PORT":5432 \
|
|
55
|
+
docker.io/postgres && echo "Database container '$DB_CONTAINER_NAME' was successfully created"
|