@better-t-stack/template-generator 3.13.2-dev.6c6cffb

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.
Files changed (425) hide show
  1. package/dist/fs-writer.d.mts +8 -0
  2. package/dist/fs-writer.d.mts.map +1 -0
  3. package/dist/fs-writer.mjs +50 -0
  4. package/dist/fs-writer.mjs.map +1 -0
  5. package/dist/index.d.mts +182 -0
  6. package/dist/index.d.mts.map +1 -0
  7. package/dist/index.mjs +26727 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/template-reader.d.mts +30 -0
  10. package/dist/template-reader.d.mts.map +1 -0
  11. package/dist/template-reader.mjs +2860 -0
  12. package/dist/template-reader.mjs.map +1 -0
  13. package/dist/types-BubFnV2d.d.mts +36 -0
  14. package/dist/types-BubFnV2d.d.mts.map +1 -0
  15. package/package.json +66 -0
  16. package/scripts/generate-templates.ts +97 -0
  17. package/templates/addons/biome/biome.json.hbs +96 -0
  18. package/templates/addons/husky/.husky/pre-commit +1 -0
  19. package/templates/addons/pwa/apps/web/next/public/favicon/apple-touch-icon.png +0 -0
  20. package/templates/addons/pwa/apps/web/next/public/favicon/favicon-96x96.png +0 -0
  21. package/templates/addons/pwa/apps/web/next/public/favicon/favicon.svg +6 -0
  22. package/templates/addons/pwa/apps/web/next/public/favicon/site.webmanifest.hbs +21 -0
  23. package/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-192x192.png +0 -0
  24. package/templates/addons/pwa/apps/web/next/public/favicon/web-app-manifest-512x512.png +0 -0
  25. package/templates/addons/pwa/apps/web/next/src/app/manifest.ts.hbs +26 -0
  26. package/templates/addons/pwa/apps/web/vite/public/logo.png +0 -0
  27. package/templates/addons/pwa/apps/web/vite/pwa-assets.config.ts.hbs +12 -0
  28. package/templates/addons/ruler/.ruler/bts.md.hbs +142 -0
  29. package/templates/addons/ruler/.ruler/ruler.toml.hbs +80 -0
  30. package/templates/addons/turborepo/turbo.json.hbs +74 -0
  31. package/templates/addons/ultracite/biome.json.hbs +26 -0
  32. package/templates/api/orpc/fullstack/next/src/app/api/rpc/[[...rest]]/route.ts.hbs +50 -0
  33. package/templates/api/orpc/fullstack/tanstack-start/src/routes/api/rpc/$.ts.hbs +58 -0
  34. package/templates/api/orpc/native/utils/orpc.ts.hbs +39 -0
  35. package/templates/api/orpc/server/_gitignore +34 -0
  36. package/templates/api/orpc/server/package.json.hbs +15 -0
  37. package/templates/api/orpc/server/src/context.ts.hbs +148 -0
  38. package/templates/api/orpc/server/src/index.ts.hbs +21 -0
  39. package/templates/api/orpc/server/src/routers/index.ts.hbs +55 -0
  40. package/templates/api/orpc/server/tsconfig.json.hbs +10 -0
  41. package/templates/api/orpc/web/nuxt/app/plugins/orpc.ts.hbs +32 -0
  42. package/templates/api/orpc/web/nuxt/app/plugins/vue-query.ts.hbs +44 -0
  43. package/templates/api/orpc/web/react/base/src/utils/orpc.ts.hbs +113 -0
  44. package/templates/api/orpc/web/solid/src/utils/orpc.ts.hbs +30 -0
  45. package/templates/api/orpc/web/svelte/src/lib/orpc.ts.hbs +30 -0
  46. package/templates/api/trpc/fullstack/next/src/app/api/trpc/[trpc]/route.ts.hbs +14 -0
  47. package/templates/api/trpc/fullstack/tanstack-start/src/routes/api/trpc/$.ts.hbs +22 -0
  48. package/templates/api/trpc/native/utils/trpc.ts.hbs +37 -0
  49. package/templates/api/trpc/server/_gitignore +34 -0
  50. package/templates/api/trpc/server/package.json.hbs +14 -0
  51. package/templates/api/trpc/server/src/context.ts.hbs +148 -0
  52. package/templates/api/trpc/server/src/index.ts.hbs +26 -0
  53. package/templates/api/trpc/server/src/routers/index.ts.hbs +55 -0
  54. package/templates/api/trpc/server/tsconfig.json.hbs +10 -0
  55. package/templates/api/trpc/web/react/base/src/utils/trpc.ts.hbs +97 -0
  56. package/templates/auth/better-auth/convex/backend/convex/auth.config.ts.hbs +6 -0
  57. package/templates/auth/better-auth/convex/backend/convex/auth.ts.hbs +68 -0
  58. package/templates/auth/better-auth/convex/backend/convex/http.ts.hbs +12 -0
  59. package/templates/auth/better-auth/convex/backend/convex/privateData.ts.hbs +17 -0
  60. package/templates/auth/better-auth/convex/native/bare/components/sign-in.tsx.hbs +127 -0
  61. package/templates/auth/better-auth/convex/native/bare/components/sign-up.tsx.hbs +138 -0
  62. package/templates/auth/better-auth/convex/native/base/lib/auth-client.ts.hbs +18 -0
  63. package/templates/auth/better-auth/convex/native/unistyles/components/sign-in.tsx.hbs +127 -0
  64. package/templates/auth/better-auth/convex/native/unistyles/components/sign-up.tsx.hbs +145 -0
  65. package/templates/auth/better-auth/convex/native/uniwind/components/sign-in.tsx.hbs +73 -0
  66. package/templates/auth/better-auth/convex/native/uniwind/components/sign-up.tsx.hbs +85 -0
  67. package/templates/auth/better-auth/convex/web/react/next/src/app/api/auth/[...all]/route.ts.hbs +3 -0
  68. package/templates/auth/better-auth/convex/web/react/next/src/app/dashboard/page.tsx.hbs +40 -0
  69. package/templates/auth/better-auth/convex/web/react/next/src/components/sign-in-form.tsx.hbs +129 -0
  70. package/templates/auth/better-auth/convex/web/react/next/src/components/sign-up-form.tsx.hbs +154 -0
  71. package/templates/auth/better-auth/convex/web/react/next/src/components/user-menu.tsx.hbs +48 -0
  72. package/templates/auth/better-auth/convex/web/react/next/src/lib/auth-client.ts.hbs +6 -0
  73. package/templates/auth/better-auth/convex/web/react/next/src/lib/auth-server.ts.hbs +16 -0
  74. package/templates/auth/better-auth/convex/web/react/tanstack-router/src/components/sign-in-form.tsx.hbs +133 -0
  75. package/templates/auth/better-auth/convex/web/react/tanstack-router/src/components/sign-up-form.tsx.hbs +158 -0
  76. package/templates/auth/better-auth/convex/web/react/tanstack-router/src/components/user-menu.tsx.hbs +52 -0
  77. package/templates/auth/better-auth/convex/web/react/tanstack-router/src/lib/auth-client.ts.hbs +11 -0
  78. package/templates/auth/better-auth/convex/web/react/tanstack-router/src/routes/dashboard.tsx.hbs +43 -0
  79. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/components/sign-in-form.tsx.hbs +133 -0
  80. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/components/sign-up-form.tsx.hbs +158 -0
  81. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/components/user-menu.tsx.hbs +47 -0
  82. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/lib/auth-client.ts.hbs +6 -0
  83. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/lib/auth-server.ts.hbs +13 -0
  84. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/routes/api/auth/$.ts.hbs +11 -0
  85. package/templates/auth/better-auth/convex/web/react/tanstack-start/src/routes/dashboard.tsx.hbs +43 -0
  86. package/templates/auth/better-auth/fullstack/next/src/app/api/auth/[...all]/route.ts.hbs +4 -0
  87. package/templates/auth/better-auth/fullstack/tanstack-start/src/routes/api/auth/$.ts.hbs +15 -0
  88. package/templates/auth/better-auth/native/bare/app/(drawer)/index.tsx.hbs +186 -0
  89. package/templates/auth/better-auth/native/bare/components/sign-in.tsx.hbs +131 -0
  90. package/templates/auth/better-auth/native/bare/components/sign-up.tsx.hbs +150 -0
  91. package/templates/auth/better-auth/native/base/lib/auth-client.ts.hbs +16 -0
  92. package/templates/auth/better-auth/native/unistyles/app/(drawer)/index.tsx.hbs +187 -0
  93. package/templates/auth/better-auth/native/unistyles/components/sign-in.tsx.hbs +139 -0
  94. package/templates/auth/better-auth/native/unistyles/components/sign-up.tsx.hbs +157 -0
  95. package/templates/auth/better-auth/native/uniwind/app/(drawer)/index.tsx.hbs +123 -0
  96. package/templates/auth/better-auth/native/uniwind/components/sign-in.tsx.hbs +87 -0
  97. package/templates/auth/better-auth/native/uniwind/components/sign-up.tsx.hbs +128 -0
  98. package/templates/auth/better-auth/server/base/_gitignore +34 -0
  99. package/templates/auth/better-auth/server/base/package.json.hbs +14 -0
  100. package/templates/auth/better-auth/server/base/src/index.ts.hbs +304 -0
  101. package/templates/auth/better-auth/server/base/tsconfig.json.hbs +10 -0
  102. package/templates/auth/better-auth/server/db/drizzle/mysql/src/schema/auth.ts.hbs +100 -0
  103. package/templates/auth/better-auth/server/db/drizzle/postgres/src/schema/auth.ts.hbs +93 -0
  104. package/templates/auth/better-auth/server/db/drizzle/sqlite/src/schema/auth.ts.hbs +107 -0
  105. package/templates/auth/better-auth/server/db/mongoose/mongodb/src/models/auth.model.ts.hbs +68 -0
  106. package/templates/auth/better-auth/server/db/prisma/mongodb/prisma/schema/auth.prisma.hbs +62 -0
  107. package/templates/auth/better-auth/server/db/prisma/mysql/prisma/schema/auth.prisma.hbs +62 -0
  108. package/templates/auth/better-auth/server/db/prisma/postgres/prisma/schema/auth.prisma.hbs +62 -0
  109. package/templates/auth/better-auth/server/db/prisma/sqlite/prisma/schema/auth.prisma.hbs +62 -0
  110. package/templates/auth/better-auth/web/nuxt/app/components/SignInForm.vue.hbs +82 -0
  111. package/templates/auth/better-auth/web/nuxt/app/components/SignUpForm.vue.hbs +91 -0
  112. package/templates/auth/better-auth/web/nuxt/app/components/UserMenu.vue.hbs +42 -0
  113. package/templates/auth/better-auth/web/nuxt/app/middleware/auth.ts.hbs +14 -0
  114. package/templates/auth/better-auth/web/nuxt/app/pages/dashboard.vue.hbs +99 -0
  115. package/templates/auth/better-auth/web/nuxt/app/pages/login.vue.hbs +27 -0
  116. package/templates/auth/better-auth/web/nuxt/app/plugins/auth-client.ts.hbs +21 -0
  117. package/templates/auth/better-auth/web/react/base/src/lib/auth-client.ts.hbs +16 -0
  118. package/templates/auth/better-auth/web/react/next/src/app/dashboard/dashboard.tsx.hbs +60 -0
  119. package/templates/auth/better-auth/web/react/next/src/app/dashboard/page.tsx.hbs +42 -0
  120. package/templates/auth/better-auth/web/react/next/src/app/login/page.tsx.hbs +16 -0
  121. package/templates/auth/better-auth/web/react/next/src/components/sign-in-form.tsx.hbs +135 -0
  122. package/templates/auth/better-auth/web/react/next/src/components/sign-up-form.tsx.hbs +160 -0
  123. package/templates/auth/better-auth/web/react/next/src/components/user-menu.tsx.hbs +62 -0
  124. package/templates/auth/better-auth/web/react/react-router/src/components/sign-in-form.tsx.hbs +135 -0
  125. package/templates/auth/better-auth/web/react/react-router/src/components/sign-up-form.tsx.hbs +160 -0
  126. package/templates/auth/better-auth/web/react/react-router/src/components/user-menu.tsx.hbs +61 -0
  127. package/templates/auth/better-auth/web/react/react-router/src/routes/dashboard.tsx.hbs +80 -0
  128. package/templates/auth/better-auth/web/react/react-router/src/routes/login.tsx.hbs +13 -0
  129. package/templates/auth/better-auth/web/react/tanstack-router/src/components/sign-in-form.tsx.hbs +135 -0
  130. package/templates/auth/better-auth/web/react/tanstack-router/src/components/sign-up-form.tsx.hbs +160 -0
  131. package/templates/auth/better-auth/web/react/tanstack-router/src/components/user-menu.tsx.hbs +63 -0
  132. package/templates/auth/better-auth/web/react/tanstack-router/src/routes/dashboard.tsx.hbs +71 -0
  133. package/templates/auth/better-auth/web/react/tanstack-router/src/routes/login.tsx.hbs +18 -0
  134. package/templates/auth/better-auth/web/react/tanstack-start/src/components/sign-in-form.tsx.hbs +135 -0
  135. package/templates/auth/better-auth/web/react/tanstack-start/src/components/sign-up-form.tsx.hbs +160 -0
  136. package/templates/auth/better-auth/web/react/tanstack-start/src/components/user-menu.tsx.hbs +63 -0
  137. package/templates/auth/better-auth/web/react/tanstack-start/src/functions/get-user.ts.hbs +6 -0
  138. package/templates/auth/better-auth/web/react/tanstack-start/src/middleware/auth.ts.hbs +31 -0
  139. package/templates/auth/better-auth/web/react/tanstack-start/src/routes/dashboard.tsx.hbs +84 -0
  140. package/templates/auth/better-auth/web/react/tanstack-start/src/routes/login.tsx.hbs +18 -0
  141. package/templates/auth/better-auth/web/solid/src/components/sign-in-form.tsx.hbs +124 -0
  142. package/templates/auth/better-auth/web/solid/src/components/sign-up-form.tsx.hbs +148 -0
  143. package/templates/auth/better-auth/web/solid/src/components/user-menu.tsx.hbs +55 -0
  144. package/templates/auth/better-auth/web/solid/src/lib/auth-client.ts.hbs +12 -0
  145. package/templates/auth/better-auth/web/solid/src/routes/dashboard.tsx.hbs +67 -0
  146. package/templates/auth/better-auth/web/solid/src/routes/login.tsx.hbs +23 -0
  147. package/templates/auth/better-auth/web/svelte/src/components/SignInForm.svelte.hbs +109 -0
  148. package/templates/auth/better-auth/web/svelte/src/components/SignUpForm.svelte.hbs +142 -0
  149. package/templates/auth/better-auth/web/svelte/src/components/UserMenu.svelte.hbs +52 -0
  150. package/templates/auth/better-auth/web/svelte/src/lib/auth-client.ts.hbs +12 -0
  151. package/templates/auth/better-auth/web/svelte/src/routes/dashboard/+page.svelte.hbs +59 -0
  152. package/templates/auth/better-auth/web/svelte/src/routes/login/+page.svelte.hbs +12 -0
  153. package/templates/auth/clerk/convex/backend/convex/auth.config.ts.hbs +12 -0
  154. package/templates/auth/clerk/convex/backend/convex/privateData.ts.hbs +16 -0
  155. package/templates/auth/clerk/convex/native/base/app/(auth)/_layout.tsx.hbs +12 -0
  156. package/templates/auth/clerk/convex/native/base/app/(auth)/sign-in.tsx.hbs +67 -0
  157. package/templates/auth/clerk/convex/native/base/app/(auth)/sign-up.tsx.hbs +110 -0
  158. package/templates/auth/clerk/convex/native/base/components/sign-out-button.tsx.hbs +27 -0
  159. package/templates/auth/clerk/convex/web/react/next/src/app/dashboard/page.tsx.hbs +29 -0
  160. package/templates/auth/clerk/convex/web/react/next/src/middleware.ts.hbs +12 -0
  161. package/templates/auth/clerk/convex/web/react/react-router/src/routes/dashboard.tsx.hbs +32 -0
  162. package/templates/auth/clerk/convex/web/react/tanstack-router/src/routes/dashboard.tsx.hbs +37 -0
  163. package/templates/auth/clerk/convex/web/react/tanstack-start/src/routes/dashboard.tsx.hbs +37 -0
  164. package/templates/auth/clerk/convex/web/react/tanstack-start/src/start.ts.hbs +8 -0
  165. package/templates/backend/convex/packages/backend/_gitignore +2 -0
  166. package/templates/backend/convex/packages/backend/convex/README.md +90 -0
  167. package/templates/backend/convex/packages/backend/convex/convex.config.ts.hbs +17 -0
  168. package/templates/backend/convex/packages/backend/convex/healthCheck.ts.hbs +7 -0
  169. package/templates/backend/convex/packages/backend/convex/schema.ts.hbs +11 -0
  170. package/templates/backend/convex/packages/backend/convex/tsconfig.json.hbs +25 -0
  171. package/templates/backend/convex/packages/backend/package.json.hbs +15 -0
  172. package/templates/backend/server/base/_gitignore +55 -0
  173. package/templates/backend/server/base/package.json.hbs +17 -0
  174. package/templates/backend/server/base/tsconfig.json.hbs +13 -0
  175. package/templates/backend/server/base/tsdown.config.ts.hbs +9 -0
  176. package/templates/backend/server/elysia/src/index.ts.hbs +122 -0
  177. package/templates/backend/server/express/src/index.ts.hbs +126 -0
  178. package/templates/backend/server/fastify/src/index.ts.hbs +187 -0
  179. package/templates/backend/server/hono/src/index.ts.hbs +171 -0
  180. package/templates/base/_gitignore +50 -0
  181. package/templates/base/package.json.hbs +10 -0
  182. package/templates/base/tsconfig.json.hbs +3 -0
  183. package/templates/db/base/_gitignore +35 -0
  184. package/templates/db/base/package.json.hbs +14 -0
  185. package/templates/db/base/tsconfig.json.hbs +10 -0
  186. package/templates/db/drizzle/base/src/schema/index.ts.hbs +7 -0
  187. package/templates/db/drizzle/mysql/drizzle.config.ts.hbs +19 -0
  188. package/templates/db/drizzle/mysql/src/index.ts.hbs +54 -0
  189. package/templates/db/drizzle/postgres/drizzle.config.ts.hbs +19 -0
  190. package/templates/db/drizzle/postgres/src/index.ts.hbs +44 -0
  191. package/templates/db/drizzle/sqlite/drizzle.config.ts.hbs +28 -0
  192. package/templates/db/drizzle/sqlite/src/index.ts.hbs +39 -0
  193. package/templates/db/mongoose/mongodb/src/index.ts.hbs +10 -0
  194. package/templates/db/prisma/mongodb/prisma/schema/schema.prisma.hbs +19 -0
  195. package/templates/db/prisma/mongodb/prisma.config.ts.hbs +18 -0
  196. package/templates/db/prisma/mongodb/src/index.ts.hbs +5 -0
  197. package/templates/db/prisma/mysql/prisma/schema/schema.prisma.hbs +21 -0
  198. package/templates/db/prisma/mysql/prisma.config.ts.hbs +21 -0
  199. package/templates/db/prisma/mysql/src/index.ts.hbs +55 -0
  200. package/templates/db/prisma/postgres/prisma/schema/schema.prisma.hbs +21 -0
  201. package/templates/db/prisma/postgres/prisma.config.ts.hbs +21 -0
  202. package/templates/db/prisma/postgres/src/index.ts.hbs +69 -0
  203. package/templates/db/prisma/sqlite/prisma/schema/schema.prisma.hbs +18 -0
  204. package/templates/db/prisma/sqlite/prisma.config.ts.hbs +25 -0
  205. package/templates/db/prisma/sqlite/src/index.ts.hbs +25 -0
  206. package/templates/db-setup/docker-compose/mongodb/docker-compose.yml.hbs +23 -0
  207. package/templates/db-setup/docker-compose/mysql/docker-compose.yml.hbs +24 -0
  208. package/templates/db-setup/docker-compose/postgres/docker-compose.yml.hbs +23 -0
  209. package/templates/examples/ai/convex/packages/backend/convex/agent.ts.hbs +9 -0
  210. package/templates/examples/ai/convex/packages/backend/convex/chat.ts.hbs +67 -0
  211. package/templates/examples/ai/fullstack/next/src/app/api/ai/route.ts.hbs +20 -0
  212. package/templates/examples/ai/fullstack/tanstack-start/src/routes/api/ai/$.ts.hbs +36 -0
  213. package/templates/examples/ai/native/bare/app/(drawer)/ai.tsx.hbs +586 -0
  214. package/templates/examples/ai/native/bare/polyfills.js +22 -0
  215. package/templates/examples/ai/native/unistyles/app/(drawer)/ai.tsx.hbs +588 -0
  216. package/templates/examples/ai/native/unistyles/polyfills.js +22 -0
  217. package/templates/examples/ai/native/uniwind/app/(drawer)/ai.tsx.hbs +331 -0
  218. package/templates/examples/ai/native/uniwind/polyfills.js +22 -0
  219. package/templates/examples/ai/web/nuxt/app/pages/ai.vue.hbs +54 -0
  220. package/templates/examples/ai/web/react/next/src/app/ai/page.tsx.hbs +267 -0
  221. package/templates/examples/ai/web/react/react-router/src/routes/ai.tsx.hbs +235 -0
  222. package/templates/examples/ai/web/react/tanstack-router/src/routes/ai.tsx.hbs +242 -0
  223. package/templates/examples/ai/web/react/tanstack-start/src/routes/ai.tsx.hbs +243 -0
  224. package/templates/examples/ai/web/svelte/src/routes/ai/+page.svelte.hbs +107 -0
  225. package/templates/examples/todo/convex/packages/backend/convex/todos.ts.hbs +42 -0
  226. package/templates/examples/todo/native/bare/app/(drawer)/todos.tsx.hbs +521 -0
  227. package/templates/examples/todo/native/unistyles/app/(drawer)/todos.tsx.hbs +340 -0
  228. package/templates/examples/todo/native/uniwind/app/(drawer)/todos.tsx.hbs +282 -0
  229. package/templates/examples/todo/server/drizzle/base/src/routers/todo.ts.hbs +75 -0
  230. package/templates/examples/todo/server/drizzle/mysql/src/schema/todo.ts +7 -0
  231. package/templates/examples/todo/server/drizzle/postgres/src/schema/todo.ts +7 -0
  232. package/templates/examples/todo/server/drizzle/sqlite/src/schema/todo.ts +7 -0
  233. package/templates/examples/todo/server/mongoose/base/src/routers/todo.ts.hbs +66 -0
  234. package/templates/examples/todo/server/mongoose/mongodb/src/models/todo.model.ts.hbs +24 -0
  235. package/templates/examples/todo/server/prisma/base/src/routers/todo.ts.hbs +116 -0
  236. package/templates/examples/todo/server/prisma/mongodb/prisma/schema/todo.prisma.hbs +7 -0
  237. package/templates/examples/todo/server/prisma/mysql/prisma/schema/todo.prisma.hbs +7 -0
  238. package/templates/examples/todo/server/prisma/postgres/prisma/schema/todo.prisma.hbs +7 -0
  239. package/templates/examples/todo/server/prisma/sqlite/prisma/schema/todo.prisma.hbs +7 -0
  240. package/templates/examples/todo/web/nuxt/app/pages/todos.vue.hbs +220 -0
  241. package/templates/examples/todo/web/react/next/src/app/todos/page.tsx.hbs +245 -0
  242. package/templates/examples/todo/web/react/react-router/src/routes/todos.tsx.hbs +242 -0
  243. package/templates/examples/todo/web/react/tanstack-router/src/routes/todos.tsx.hbs +247 -0
  244. package/templates/examples/todo/web/react/tanstack-start/src/routes/todos.tsx.hbs +272 -0
  245. package/templates/examples/todo/web/solid/src/routes/todos.tsx.hbs +132 -0
  246. package/templates/examples/todo/web/svelte/src/routes/todos/+page.svelte.hbs +317 -0
  247. package/templates/extras/_npmrc.hbs +5 -0
  248. package/templates/extras/bunfig.toml.hbs +6 -0
  249. package/templates/extras/pnpm-workspace.yaml +3 -0
  250. package/templates/frontend/native/bare/_gitignore +18 -0
  251. package/templates/frontend/native/bare/app/(drawer)/(tabs)/_layout.tsx.hbs +41 -0
  252. package/templates/frontend/native/bare/app/(drawer)/(tabs)/index.tsx.hbs +43 -0
  253. package/templates/frontend/native/bare/app/(drawer)/(tabs)/two.tsx.hbs +43 -0
  254. package/templates/frontend/native/bare/app/(drawer)/_layout.tsx.hbs +90 -0
  255. package/templates/frontend/native/bare/app/(drawer)/index.tsx.hbs +234 -0
  256. package/templates/frontend/native/bare/app/+not-found.tsx.hbs +65 -0
  257. package/templates/frontend/native/bare/app/_layout.tsx.hbs +165 -0
  258. package/templates/frontend/native/bare/app/modal.tsx.hbs +34 -0
  259. package/templates/frontend/native/bare/app.json.hbs +50 -0
  260. package/templates/frontend/native/bare/components/container.tsx.hbs +25 -0
  261. package/templates/frontend/native/bare/components/header-button.tsx.hbs +47 -0
  262. package/templates/frontend/native/bare/components/tabbar-icon.tsx.hbs +9 -0
  263. package/templates/frontend/native/bare/lib/android-navigation-bar.tsx.hbs +12 -0
  264. package/templates/frontend/native/bare/lib/constants.ts.hbs +19 -0
  265. package/templates/frontend/native/bare/lib/use-color-scheme.ts.hbs +20 -0
  266. package/templates/frontend/native/bare/metro.config.js.hbs +9 -0
  267. package/templates/frontend/native/bare/package.json.hbs +51 -0
  268. package/templates/frontend/native/bare/tsconfig.json.hbs +11 -0
  269. package/templates/frontend/native/base/assets/images/android-icon-background.png +0 -0
  270. package/templates/frontend/native/base/assets/images/android-icon-foreground.png +0 -0
  271. package/templates/frontend/native/base/assets/images/android-icon-monochrome.png +0 -0
  272. package/templates/frontend/native/base/assets/images/favicon.png +0 -0
  273. package/templates/frontend/native/base/assets/images/icon.png +0 -0
  274. package/templates/frontend/native/base/assets/images/partial-react-logo.png +0 -0
  275. package/templates/frontend/native/base/assets/images/react-logo.png +0 -0
  276. package/templates/frontend/native/base/assets/images/react-logo@2x.png +0 -0
  277. package/templates/frontend/native/base/assets/images/react-logo@3x.png +0 -0
  278. package/templates/frontend/native/base/assets/images/splash-icon.png +0 -0
  279. package/templates/frontend/native/unistyles/_gitignore +24 -0
  280. package/templates/frontend/native/unistyles/app/(drawer)/(tabs)/_layout.tsx.hbs +39 -0
  281. package/templates/frontend/native/unistyles/app/(drawer)/(tabs)/index.tsx.hbs +37 -0
  282. package/templates/frontend/native/unistyles/app/(drawer)/(tabs)/two.tsx.hbs +37 -0
  283. package/templates/frontend/native/unistyles/app/(drawer)/_layout.tsx.hbs +87 -0
  284. package/templates/frontend/native/unistyles/app/(drawer)/index.tsx.hbs +333 -0
  285. package/templates/frontend/native/unistyles/app/+not-found.tsx.hbs +65 -0
  286. package/templates/frontend/native/unistyles/app/_layout.tsx.hbs +169 -0
  287. package/templates/frontend/native/unistyles/app/modal.tsx.hbs +33 -0
  288. package/templates/frontend/native/unistyles/app.json.hbs +49 -0
  289. package/templates/frontend/native/unistyles/babel.config.js.hbs +21 -0
  290. package/templates/frontend/native/unistyles/breakpoints.ts.hbs +9 -0
  291. package/templates/frontend/native/unistyles/components/container.tsx.hbs +15 -0
  292. package/templates/frontend/native/unistyles/components/header-button.tsx.hbs +36 -0
  293. package/templates/frontend/native/unistyles/components/tabbar-icon.tsx.hbs +8 -0
  294. package/templates/frontend/native/unistyles/index.js.hbs +2 -0
  295. package/templates/frontend/native/unistyles/metro.config.js.hbs +5 -0
  296. package/templates/frontend/native/unistyles/package.json.hbs +51 -0
  297. package/templates/frontend/native/unistyles/theme.ts.hbs +98 -0
  298. package/templates/frontend/native/unistyles/tsconfig.json.hbs +12 -0
  299. package/templates/frontend/native/unistyles/unistyles.ts.hbs +27 -0
  300. package/templates/frontend/native/uniwind/_gitignore +21 -0
  301. package/templates/frontend/native/uniwind/app/(drawer)/(tabs)/_layout.tsx.hbs +46 -0
  302. package/templates/frontend/native/uniwind/app/(drawer)/(tabs)/index.tsx.hbs +15 -0
  303. package/templates/frontend/native/uniwind/app/(drawer)/(tabs)/two.tsx.hbs +15 -0
  304. package/templates/frontend/native/uniwind/app/(drawer)/_layout.tsx.hbs +91 -0
  305. package/templates/frontend/native/uniwind/app/(drawer)/index.tsx.hbs +191 -0
  306. package/templates/frontend/native/uniwind/app/+not-found.tsx.hbs +27 -0
  307. package/templates/frontend/native/uniwind/app/_layout.tsx.hbs +132 -0
  308. package/templates/frontend/native/uniwind/app/modal.tsx.hbs +37 -0
  309. package/templates/frontend/native/uniwind/app.json.hbs +19 -0
  310. package/templates/frontend/native/uniwind/components/container.tsx.hbs +33 -0
  311. package/templates/frontend/native/uniwind/components/theme-toggle.tsx.hbs +35 -0
  312. package/templates/frontend/native/uniwind/contexts/app-theme-context.tsx.hbs +62 -0
  313. package/templates/frontend/native/uniwind/global.css +5 -0
  314. package/templates/frontend/native/uniwind/metro.config.js.hbs +13 -0
  315. package/templates/frontend/native/uniwind/package.json.hbs +54 -0
  316. package/templates/frontend/native/uniwind/tsconfig.json.hbs +14 -0
  317. package/templates/frontend/nuxt/_gitignore +27 -0
  318. package/templates/frontend/nuxt/app/app.config.ts.hbs +15 -0
  319. package/templates/frontend/nuxt/app/app.vue.hbs +17 -0
  320. package/templates/frontend/nuxt/app/assets/css/main.css +2 -0
  321. package/templates/frontend/nuxt/app/components/Header.vue.hbs +40 -0
  322. package/templates/frontend/nuxt/app/layouts/default.vue.hbs +10 -0
  323. package/templates/frontend/nuxt/app/pages/index.vue.hbs +97 -0
  324. package/templates/frontend/nuxt/nuxt.config.ts.hbs +29 -0
  325. package/templates/frontend/nuxt/package.json.hbs +24 -0
  326. package/templates/frontend/nuxt/public/favicon.ico +0 -0
  327. package/templates/frontend/nuxt/public/robots.txt +2 -0
  328. package/templates/frontend/nuxt/server/tsconfig.json +3 -0
  329. package/templates/frontend/nuxt/tsconfig.json.hbs +18 -0
  330. package/templates/frontend/react/next/next-env.d.ts.hbs +5 -0
  331. package/templates/frontend/react/next/next.config.ts.hbs +22 -0
  332. package/templates/frontend/react/next/package.json.hbs +34 -0
  333. package/templates/frontend/react/next/postcss.config.mjs.hbs +5 -0
  334. package/templates/frontend/react/next/src/app/favicon.ico +0 -0
  335. package/templates/frontend/react/next/src/app/layout.tsx.hbs +76 -0
  336. package/templates/frontend/react/next/src/app/page.tsx.hbs +79 -0
  337. package/templates/frontend/react/next/src/components/mode-toggle.tsx.hbs +37 -0
  338. package/templates/frontend/react/next/src/components/providers.tsx.hbs +89 -0
  339. package/templates/frontend/react/next/src/components/theme-provider.tsx.hbs +11 -0
  340. package/templates/frontend/react/next/tsconfig.json.hbs +41 -0
  341. package/templates/frontend/react/react-router/package.json.hbs +42 -0
  342. package/templates/frontend/react/react-router/public/favicon.ico +0 -0
  343. package/templates/frontend/react/react-router/react-router.config.ts +6 -0
  344. package/templates/frontend/react/react-router/src/components/mode-toggle.tsx.hbs +29 -0
  345. package/templates/frontend/react/react-router/src/components/theme-provider.tsx.hbs +11 -0
  346. package/templates/frontend/react/react-router/src/root.tsx.hbs +190 -0
  347. package/templates/frontend/react/react-router/src/routes/_index.tsx.hbs +85 -0
  348. package/templates/frontend/react/react-router/src/routes.ts +4 -0
  349. package/templates/frontend/react/react-router/tsconfig.json.hbs +27 -0
  350. package/templates/frontend/react/react-router/vite.config.ts.hbs +12 -0
  351. package/templates/frontend/react/tanstack-router/index.html.hbs +13 -0
  352. package/templates/frontend/react/tanstack-router/package.json.hbs +41 -0
  353. package/templates/frontend/react/tanstack-router/src/components/mode-toggle.tsx.hbs +29 -0
  354. package/templates/frontend/react/tanstack-router/src/components/theme-provider.tsx.hbs +11 -0
  355. package/templates/frontend/react/tanstack-router/src/main.tsx.hbs +90 -0
  356. package/templates/frontend/react/tanstack-router/src/routes/__root.tsx.hbs +103 -0
  357. package/templates/frontend/react/tanstack-router/src/routes/index.tsx.hbs +85 -0
  358. package/templates/frontend/react/tanstack-router/tsconfig.json.hbs +18 -0
  359. package/templates/frontend/react/tanstack-router/vite.config.ts.hbs +21 -0
  360. package/templates/frontend/react/tanstack-start/package.json.hbs +43 -0
  361. package/templates/frontend/react/tanstack-start/public/robots.txt +3 -0
  362. package/templates/frontend/react/tanstack-start/src/router.tsx.hbs +144 -0
  363. package/templates/frontend/react/tanstack-start/src/routes/__root.tsx.hbs +208 -0
  364. package/templates/frontend/react/tanstack-start/src/routes/index.tsx.hbs +85 -0
  365. package/templates/frontend/react/tanstack-start/tsconfig.json.hbs +28 -0
  366. package/templates/frontend/react/tanstack-start/vite.config.ts.hbs +22 -0
  367. package/templates/frontend/react/web-base/_gitignore +60 -0
  368. package/templates/frontend/react/web-base/components.json +24 -0
  369. package/templates/frontend/react/web-base/src/components/header.tsx.hbs +78 -0
  370. package/templates/frontend/react/web-base/src/components/loader.tsx.hbs +9 -0
  371. package/templates/frontend/react/web-base/src/components/ui/button.tsx.hbs +57 -0
  372. package/templates/frontend/react/web-base/src/components/ui/card.tsx.hbs +103 -0
  373. package/templates/frontend/react/web-base/src/components/ui/checkbox.tsx.hbs +26 -0
  374. package/templates/frontend/react/web-base/src/components/ui/dropdown-menu.tsx.hbs +262 -0
  375. package/templates/frontend/react/web-base/src/components/ui/input.tsx.hbs +20 -0
  376. package/templates/frontend/react/web-base/src/components/ui/label.tsx.hbs +20 -0
  377. package/templates/frontend/react/web-base/src/components/ui/skeleton.tsx.hbs +13 -0
  378. package/templates/frontend/react/web-base/src/components/ui/sonner.tsx.hbs +44 -0
  379. package/templates/frontend/react/web-base/src/index.css.hbs +131 -0
  380. package/templates/frontend/react/web-base/src/lib/utils.ts.hbs +6 -0
  381. package/templates/frontend/solid/_gitignore +11 -0
  382. package/templates/frontend/solid/index.html +13 -0
  383. package/templates/frontend/solid/package.json.hbs +24 -0
  384. package/templates/frontend/solid/public/robots.txt +3 -0
  385. package/templates/frontend/solid/src/components/header.tsx.hbs +38 -0
  386. package/templates/frontend/solid/src/components/loader.tsx +9 -0
  387. package/templates/frontend/solid/src/main.tsx.hbs +41 -0
  388. package/templates/frontend/solid/src/routes/__root.tsx.hbs +34 -0
  389. package/templates/frontend/solid/src/routes/index.tsx.hbs +72 -0
  390. package/templates/frontend/solid/src/styles.css +5 -0
  391. package/templates/frontend/solid/tsconfig.json.hbs +29 -0
  392. package/templates/frontend/solid/vite.config.ts.hbs +21 -0
  393. package/templates/frontend/svelte/_gitignore +24 -0
  394. package/templates/frontend/svelte/_npmrc +1 -0
  395. package/templates/frontend/svelte/package.json.hbs +27 -0
  396. package/templates/frontend/svelte/src/app.css +5 -0
  397. package/templates/frontend/svelte/src/app.d.ts +13 -0
  398. package/templates/frontend/svelte/src/app.html +12 -0
  399. package/templates/frontend/svelte/src/components/Header.svelte.hbs +40 -0
  400. package/templates/frontend/svelte/src/lib/index.ts +2 -0
  401. package/templates/frontend/svelte/src/routes/+layout.svelte.hbs +54 -0
  402. package/templates/frontend/svelte/src/routes/+page.svelte.hbs +92 -0
  403. package/templates/frontend/svelte/static/favicon.png +0 -0
  404. package/templates/frontend/svelte/svelte.config.js.hbs +18 -0
  405. package/templates/frontend/svelte/tsconfig.json.hbs +19 -0
  406. package/templates/frontend/svelte/vite.config.ts.hbs +7 -0
  407. package/templates/packages/config/package.json.hbs +5 -0
  408. package/templates/packages/config/tsconfig.base.json.hbs +33 -0
  409. package/templates/packages/env/env.d.ts.hbs +16 -0
  410. package/templates/packages/env/package.json.hbs +7 -0
  411. package/templates/packages/env/src/native.ts.hbs +21 -0
  412. package/templates/packages/env/src/server.ts.hbs +39 -0
  413. package/templates/packages/env/src/web.ts.hbs +98 -0
  414. package/templates/packages/env/tsconfig.json.hbs +3 -0
  415. package/templates/packages/infra/alchemy.run.ts.hbs +271 -0
  416. package/templates/packages/infra/package.json.hbs +10 -0
  417. package/templates/payments/polar/server/base/src/lib/payments.ts.hbs +7 -0
  418. package/templates/payments/polar/web/nuxt/app/pages/success.vue.hbs +11 -0
  419. package/templates/payments/polar/web/react/next/src/app/success/page.tsx.hbs +15 -0
  420. package/templates/payments/polar/web/react/react-router/src/routes/success.tsx.hbs +13 -0
  421. package/templates/payments/polar/web/react/tanstack-router/src/routes/success.tsx.hbs +19 -0
  422. package/templates/payments/polar/web/react/tanstack-start/src/functions/get-payment.ts.hbs +15 -0
  423. package/templates/payments/polar/web/react/tanstack-start/src/routes/success.tsx.hbs +19 -0
  424. package/templates/payments/polar/web/solid/src/routes/success.tsx.hbs +23 -0
  425. package/templates/payments/polar/web/svelte/src/routes/success/+page.svelte.hbs +12 -0
@@ -0,0 +1,304 @@
1
+ {{#if (eq orm "prisma")}}
2
+ import { betterAuth } from "better-auth";
3
+ import { prismaAdapter } from "better-auth/adapters/prisma";
4
+ import { env } from "@{{projectName}}/env/server";
5
+ {{#if (eq payments "polar")}}
6
+ import { polar, checkout, portal } from "@polar-sh/better-auth";
7
+ import { polarClient } from "./lib/payments";
8
+ {{/if}}
9
+ import prisma from "@{{projectName}}/db";
10
+
11
+ export const auth = betterAuth({
12
+ database: prismaAdapter(prisma, {
13
+ {{#if (eq database "postgres")}}provider: "postgresql",{{/if}}
14
+ {{#if (eq database "sqlite")}}provider: "sqlite",{{/if}}
15
+ {{#if (eq database "mysql")}}provider: "mysql",{{/if}}
16
+ {{#if (eq database "mongodb")}}provider: "mongodb",{{/if}}
17
+ }),
18
+ trustedOrigins: [
19
+ env.CORS_ORIGIN,
20
+ {{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
21
+ "mybettertapp://", "exp://"
22
+ {{/if}}
23
+ ],
24
+ emailAndPassword: {
25
+ enabled: true,
26
+ },
27
+ {{#if (ne backend "self")}}
28
+ advanced: {
29
+ defaultCookieAttributes: {
30
+ sameSite: "none",
31
+ secure: true,
32
+ httpOnly: true,
33
+ },
34
+ },
35
+ {{/if}}
36
+ {{#if (eq payments "polar")}}
37
+ plugins: [
38
+ polar({
39
+ client: polarClient,
40
+ createCustomerOnSignUp: true,
41
+ enableCustomerPortal: true,
42
+ use: [
43
+ checkout({
44
+ products: [
45
+ {
46
+ productId: "your-product-id",
47
+ slug: "pro",
48
+ },
49
+ ],
50
+ successUrl: env.POLAR_SUCCESS_URL,
51
+ authenticatedUsersOnly: true,
52
+ }),
53
+ portal(),
54
+ ],
55
+ }),
56
+ ],
57
+ {{/if}}
58
+ });
59
+ {{/if}}
60
+
61
+ {{#if (eq orm "drizzle")}}
62
+ {{#if (or (eq runtime "bun") (eq runtime "node") (eq runtime "none"))}}
63
+ import { betterAuth } from "better-auth";
64
+ import { drizzleAdapter } from "better-auth/adapters/drizzle";
65
+ import { env } from "@{{projectName}}/env/server";
66
+ {{#if (eq payments "polar")}}
67
+ import { polar, checkout, portal } from "@polar-sh/better-auth";
68
+ import { polarClient } from "./lib/payments";
69
+ {{/if}}
70
+ import { db } from "@{{projectName}}/db";
71
+ import * as schema from "@{{projectName}}/db/schema/auth";
72
+
73
+ export const auth = betterAuth({
74
+ database: drizzleAdapter(db, {
75
+ {{#if (eq database "postgres")}}provider: "pg",{{/if}}
76
+ {{#if (eq database "sqlite")}}provider: "sqlite",{{/if}}
77
+ {{#if (eq database "mysql")}}provider: "mysql",{{/if}}
78
+ schema: schema,
79
+ }),
80
+ trustedOrigins: [
81
+ env.CORS_ORIGIN,
82
+ {{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
83
+ "mybettertapp://", "exp://"
84
+ {{/if}}
85
+ ],
86
+ emailAndPassword: {
87
+ enabled: true,
88
+ },
89
+ {{#if (ne backend "self")}}
90
+ advanced: {
91
+ defaultCookieAttributes: {
92
+ sameSite: "none",
93
+ secure: true,
94
+ httpOnly: true,
95
+ },
96
+ },
97
+ {{/if}}
98
+ {{#if (eq payments "polar")}}
99
+ plugins: [
100
+ polar({
101
+ client: polarClient,
102
+ createCustomerOnSignUp: true,
103
+ enableCustomerPortal: true,
104
+ use: [
105
+ checkout({
106
+ products: [
107
+ {
108
+ productId: "your-product-id",
109
+ slug: "pro",
110
+ },
111
+ ],
112
+ successUrl: env.POLAR_SUCCESS_URL,
113
+ authenticatedUsersOnly: true,
114
+ }),
115
+ portal(),
116
+ ],
117
+ }),
118
+ ],
119
+ {{/if}}
120
+ });
121
+ {{/if}}
122
+
123
+ {{#if (eq runtime "workers")}}
124
+ import { betterAuth } from "better-auth";
125
+ import { drizzleAdapter } from "better-auth/adapters/drizzle";
126
+ import { env } from "@{{projectName}}/env/server";
127
+ {{#if (eq payments "polar")}}
128
+ import { polar, checkout, portal } from "@polar-sh/better-auth";
129
+ import { polarClient } from "./lib/payments";
130
+ {{/if}}
131
+ import { db } from "@{{projectName}}/db";
132
+ import * as schema from "@{{projectName}}/db/schema/auth";
133
+
134
+ export const auth = betterAuth({
135
+ database: drizzleAdapter(db, {
136
+ {{#if (eq database "postgres")}}provider: "pg",{{/if}}
137
+ {{#if (eq database "sqlite")}}provider: "sqlite",{{/if}}
138
+ {{#if (eq database "mysql")}}provider: "mysql",{{/if}}
139
+ schema: schema,
140
+ }),
141
+ trustedOrigins: [
142
+ env.CORS_ORIGIN,
143
+ {{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
144
+ "mybettertapp://", "exp://"
145
+ {{/if}}
146
+ ],
147
+ emailAndPassword: {
148
+ enabled: true,
149
+ },
150
+ // uncomment cookieCache setting when ready to deploy to Cloudflare using *.workers.dev domains
151
+ // session: {
152
+ // cookieCache: {
153
+ // enabled: true,
154
+ // maxAge: 60,
155
+ // },
156
+ // },
157
+ secret: env.BETTER_AUTH_SECRET,
158
+ baseURL: env.BETTER_AUTH_URL,
159
+ advanced: {
160
+ defaultCookieAttributes: {
161
+ sameSite: "none",
162
+ secure: true,
163
+ httpOnly: true,
164
+ },
165
+ // uncomment crossSubDomainCookies setting when ready to deploy and replace <your-workers-subdomain> with your actual workers subdomain
166
+ // https://developers.cloudflare.com/workers/wrangler/configuration/#workersdev
167
+ // crossSubDomainCookies: {
168
+ // enabled: true,
169
+ // domain: "<your-workers-subdomain>",
170
+ // },
171
+ },
172
+ {{#if (eq payments "polar")}}
173
+ plugins: [
174
+ polar({
175
+ client: polarClient,
176
+ createCustomerOnSignUp: true,
177
+ enableCustomerPortal: true,
178
+ use: [
179
+ checkout({
180
+ products: [
181
+ {
182
+ productId: "your-product-id",
183
+ slug: "pro",
184
+ },
185
+ ],
186
+ successUrl: env.POLAR_SUCCESS_URL,
187
+ authenticatedUsersOnly: true,
188
+ }),
189
+ portal(),
190
+ ],
191
+ }),
192
+ ],
193
+ {{/if}}
194
+ });
195
+ {{/if}}
196
+ {{/if}}
197
+
198
+ {{#if (eq orm "mongoose")}}
199
+ import { betterAuth } from "better-auth";
200
+ import { mongodbAdapter } from "better-auth/adapters/mongodb";
201
+ import { env } from "@{{projectName}}/env/server";
202
+ {{#if (eq payments "polar")}}
203
+ import { polar, checkout, portal } from "@polar-sh/better-auth";
204
+ import { polarClient } from "./lib/payments";
205
+ {{/if}}
206
+ import { client } from "@{{projectName}}/db";
207
+
208
+ export const auth = betterAuth({
209
+ database: mongodbAdapter(client),
210
+ trustedOrigins: [
211
+ env.CORS_ORIGIN,
212
+ {{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
213
+ "mybettertapp://", "exp://"
214
+ {{/if}}
215
+ ],
216
+ emailAndPassword: {
217
+ enabled: true,
218
+ },
219
+ {{#if (ne backend "self")}}
220
+ advanced: {
221
+ defaultCookieAttributes: {
222
+ sameSite: "none",
223
+ secure: true,
224
+ httpOnly: true,
225
+ },
226
+ },
227
+ {{/if}}
228
+ {{#if (eq payments "polar")}}
229
+ plugins: [
230
+ polar({
231
+ client: polarClient,
232
+ createCustomerOnSignUp: true,
233
+ enableCustomerPortal: true,
234
+ use: [
235
+ checkout({
236
+ products: [
237
+ {
238
+ productId: "your-product-id",
239
+ slug: "pro",
240
+ },
241
+ ],
242
+ successUrl: env.POLAR_SUCCESS_URL,
243
+ authenticatedUsersOnly: true,
244
+ }),
245
+ portal(),
246
+ ],
247
+ }),
248
+ ],
249
+ {{/if}}
250
+ });
251
+ {{/if}}
252
+
253
+ {{#if (eq orm "none")}}
254
+ import { betterAuth } from "better-auth";
255
+ import { env } from "@{{projectName}}/env/server";
256
+ {{#if (eq payments "polar")}}
257
+ import { polar, checkout, portal } from "@polar-sh/better-auth";
258
+ import { polarClient } from "./lib/payments";
259
+ {{/if}}
260
+
261
+ export const auth = betterAuth({
262
+ database: "", // Invalid configuration
263
+ trustedOrigins: [
264
+ env.CORS_ORIGIN,
265
+ {{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
266
+ "mybettertapp://", "exp://"
267
+ {{/if}}
268
+ ],
269
+ emailAndPassword: {
270
+ enabled: true,
271
+ },
272
+ {{#if (ne backend "self")}}
273
+ advanced: {
274
+ defaultCookieAttributes: {
275
+ sameSite: "none",
276
+ secure: true,
277
+ httpOnly: true,
278
+ },
279
+ },
280
+ {{/if}}
281
+ {{#if (eq payments "polar")}}
282
+ plugins: [
283
+ polar({
284
+ client: polarClient,
285
+ createCustomerOnSignUp: true,
286
+ enableCustomerPortal: true,
287
+ use: [
288
+ checkout({
289
+ products: [
290
+ {
291
+ productId: "your-product-id",
292
+ slug: "pro",
293
+ },
294
+ ],
295
+ successUrl: env.POLAR_SUCCESS_URL,
296
+ authenticatedUsersOnly: true,
297
+ }),
298
+ portal(),
299
+ ],
300
+ }),
301
+ ],
302
+ {{/if}}
303
+ });
304
+ {{/if}}
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "@{{projectName}}/config/tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "declaration": true,
5
+ "declarationMap": true,
6
+ "sourceMap": true,
7
+ "outDir": "dist",
8
+ "composite": true
9
+ }
10
+ }
@@ -0,0 +1,100 @@
1
+ import { relations } from "drizzle-orm";
2
+ import {
3
+ mysqlTable,
4
+ varchar,
5
+ text,
6
+ timestamp,
7
+ boolean,
8
+ index,
9
+ } from "drizzle-orm/mysql-core";
10
+
11
+ export const user = mysqlTable("user", {
12
+ id: varchar("id", { length: 36 }).primaryKey(),
13
+ name: varchar("name", { length: 255 }).notNull(),
14
+ email: varchar("email", { length: 255 }).notNull().unique(),
15
+ emailVerified: boolean("email_verified").default(false).notNull(),
16
+ image: text("image"),
17
+ createdAt: timestamp("created_at", { fsp: 3 }).defaultNow().notNull(),
18
+ updatedAt: timestamp("updated_at", { fsp: 3 })
19
+ .defaultNow()
20
+ .$onUpdate(() => /* @__PURE__ */ new Date())
21
+ .notNull(),
22
+ });
23
+
24
+ export const session = mysqlTable(
25
+ "session",
26
+ {
27
+ id: varchar("id", { length: 36 }).primaryKey(),
28
+ expiresAt: timestamp("expires_at", { fsp: 3 }).notNull(),
29
+ token: varchar("token", { length: 255 }).notNull().unique(),
30
+ createdAt: timestamp("created_at", { fsp: 3 }).defaultNow().notNull(),
31
+ updatedAt: timestamp("updated_at", { fsp: 3 })
32
+ .$onUpdate(() => /* @__PURE__ */ new Date())
33
+ .notNull(),
34
+ ipAddress: text("ip_address"),
35
+ userAgent: text("user_agent"),
36
+ userId: varchar("user_id", { length: 36 })
37
+ .notNull()
38
+ .references(() => user.id, { onDelete: "cascade" }),
39
+ },
40
+ (table) => [index("session_userId_idx").on(table.userId)],
41
+ );
42
+
43
+ export const account = mysqlTable(
44
+ "account",
45
+ {
46
+ id: varchar("id", { length: 36 }).primaryKey(),
47
+ accountId: text("account_id").notNull(),
48
+ providerId: text("provider_id").notNull(),
49
+ userId: varchar("user_id", { length: 36 })
50
+ .notNull()
51
+ .references(() => user.id, { onDelete: "cascade" }),
52
+ accessToken: text("access_token"),
53
+ refreshToken: text("refresh_token"),
54
+ idToken: text("id_token"),
55
+ accessTokenExpiresAt: timestamp("access_token_expires_at", { fsp: 3 }),
56
+ refreshTokenExpiresAt: timestamp("refresh_token_expires_at", { fsp: 3 }),
57
+ scope: text("scope"),
58
+ password: text("password"),
59
+ createdAt: timestamp("created_at", { fsp: 3 }).defaultNow().notNull(),
60
+ updatedAt: timestamp("updated_at", { fsp: 3 })
61
+ .$onUpdate(() => /* @__PURE__ */ new Date())
62
+ .notNull(),
63
+ },
64
+ (table) => [index("account_userId_idx").on(table.userId)],
65
+ );
66
+
67
+ export const verification = mysqlTable(
68
+ "verification",
69
+ {
70
+ id: varchar("id", { length: 36 }).primaryKey(),
71
+ identifier: varchar("identifier", { length: 255 }).notNull(),
72
+ value: text("value").notNull(),
73
+ expiresAt: timestamp("expires_at", { fsp: 3 }).notNull(),
74
+ createdAt: timestamp("created_at", { fsp: 3 }).defaultNow().notNull(),
75
+ updatedAt: timestamp("updated_at", { fsp: 3 })
76
+ .defaultNow()
77
+ .$onUpdate(() => /* @__PURE__ */ new Date())
78
+ .notNull(),
79
+ },
80
+ (table) => [index("verification_identifier_idx").on(table.identifier)],
81
+ );
82
+
83
+ export const userRelations = relations(user, ({ many }) => ({
84
+ sessions: many(session),
85
+ accounts: many(account),
86
+ }));
87
+
88
+ export const sessionRelations = relations(session, ({ one }) => ({
89
+ user: one(user, {
90
+ fields: [session.userId],
91
+ references: [user.id],
92
+ }),
93
+ }));
94
+
95
+ export const accountRelations = relations(account, ({ one }) => ({
96
+ user: one(user, {
97
+ fields: [account.userId],
98
+ references: [user.id],
99
+ }),
100
+ }));
@@ -0,0 +1,93 @@
1
+ import { relations } from "drizzle-orm";
2
+ import { pgTable, text, timestamp, boolean, index } from "drizzle-orm/pg-core";
3
+
4
+ export const user = pgTable("user", {
5
+ id: text("id").primaryKey(),
6
+ name: text("name").notNull(),
7
+ email: text("email").notNull().unique(),
8
+ emailVerified: boolean("email_verified").default(false).notNull(),
9
+ image: text("image"),
10
+ createdAt: timestamp("created_at").defaultNow().notNull(),
11
+ updatedAt: timestamp("updated_at")
12
+ .defaultNow()
13
+ .$onUpdate(() => /* @__PURE__ */ new Date())
14
+ .notNull(),
15
+ });
16
+
17
+ export const session = pgTable(
18
+ "session",
19
+ {
20
+ id: text("id").primaryKey(),
21
+ expiresAt: timestamp("expires_at").notNull(),
22
+ token: text("token").notNull().unique(),
23
+ createdAt: timestamp("created_at").defaultNow().notNull(),
24
+ updatedAt: timestamp("updated_at")
25
+ .$onUpdate(() => /* @__PURE__ */ new Date())
26
+ .notNull(),
27
+ ipAddress: text("ip_address"),
28
+ userAgent: text("user_agent"),
29
+ userId: text("user_id")
30
+ .notNull()
31
+ .references(() => user.id, { onDelete: "cascade" }),
32
+ },
33
+ (table) => [index("session_userId_idx").on(table.userId)],
34
+ );
35
+
36
+ export const account = pgTable(
37
+ "account",
38
+ {
39
+ id: text("id").primaryKey(),
40
+ accountId: text("account_id").notNull(),
41
+ providerId: text("provider_id").notNull(),
42
+ userId: text("user_id")
43
+ .notNull()
44
+ .references(() => user.id, { onDelete: "cascade" }),
45
+ accessToken: text("access_token"),
46
+ refreshToken: text("refresh_token"),
47
+ idToken: text("id_token"),
48
+ accessTokenExpiresAt: timestamp("access_token_expires_at"),
49
+ refreshTokenExpiresAt: timestamp("refresh_token_expires_at"),
50
+ scope: text("scope"),
51
+ password: text("password"),
52
+ createdAt: timestamp("created_at").defaultNow().notNull(),
53
+ updatedAt: timestamp("updated_at")
54
+ .$onUpdate(() => /* @__PURE__ */ new Date())
55
+ .notNull(),
56
+ },
57
+ (table) => [index("account_userId_idx").on(table.userId)],
58
+ );
59
+
60
+ export const verification = pgTable(
61
+ "verification",
62
+ {
63
+ id: text("id").primaryKey(),
64
+ identifier: text("identifier").notNull(),
65
+ value: text("value").notNull(),
66
+ expiresAt: timestamp("expires_at").notNull(),
67
+ createdAt: timestamp("created_at").defaultNow().notNull(),
68
+ updatedAt: timestamp("updated_at")
69
+ .defaultNow()
70
+ .$onUpdate(() => /* @__PURE__ */ new Date())
71
+ .notNull(),
72
+ },
73
+ (table) => [index("verification_identifier_idx").on(table.identifier)],
74
+ );
75
+
76
+ export const userRelations = relations(user, ({ many }) => ({
77
+ sessions: many(session),
78
+ accounts: many(account),
79
+ }));
80
+
81
+ export const sessionRelations = relations(session, ({ one }) => ({
82
+ user: one(user, {
83
+ fields: [session.userId],
84
+ references: [user.id],
85
+ }),
86
+ }));
87
+
88
+ export const accountRelations = relations(account, ({ one }) => ({
89
+ user: one(user, {
90
+ fields: [account.userId],
91
+ references: [user.id],
92
+ }),
93
+ }));
@@ -0,0 +1,107 @@
1
+ import { relations, sql } from "drizzle-orm";
2
+ import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core";
3
+
4
+ export const user = sqliteTable("user", {
5
+ id: text("id").primaryKey(),
6
+ name: text("name").notNull(),
7
+ email: text("email").notNull().unique(),
8
+ emailVerified: integer("email_verified", { mode: "boolean" })
9
+ .default(false)
10
+ .notNull(),
11
+ image: text("image"),
12
+ createdAt: integer("created_at", { mode: "timestamp_ms" })
13
+ .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
14
+ .notNull(),
15
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" })
16
+ .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
17
+ .$onUpdate(() => /* @__PURE__ */ new Date())
18
+ .notNull(),
19
+ });
20
+
21
+ export const session = sqliteTable(
22
+ "session",
23
+ {
24
+ id: text("id").primaryKey(),
25
+ expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(),
26
+ token: text("token").notNull().unique(),
27
+ createdAt: integer("created_at", { mode: "timestamp_ms" })
28
+ .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
29
+ .notNull(),
30
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" })
31
+ .$onUpdate(() => /* @__PURE__ */ new Date())
32
+ .notNull(),
33
+ ipAddress: text("ip_address"),
34
+ userAgent: text("user_agent"),
35
+ userId: text("user_id")
36
+ .notNull()
37
+ .references(() => user.id, { onDelete: "cascade" }),
38
+ },
39
+ (table) => [index("session_userId_idx").on(table.userId)],
40
+ );
41
+
42
+ export const account = sqliteTable(
43
+ "account",
44
+ {
45
+ id: text("id").primaryKey(),
46
+ accountId: text("account_id").notNull(),
47
+ providerId: text("provider_id").notNull(),
48
+ userId: text("user_id")
49
+ .notNull()
50
+ .references(() => user.id, { onDelete: "cascade" }),
51
+ accessToken: text("access_token"),
52
+ refreshToken: text("refresh_token"),
53
+ idToken: text("id_token"),
54
+ accessTokenExpiresAt: integer("access_token_expires_at", {
55
+ mode: "timestamp_ms",
56
+ }),
57
+ refreshTokenExpiresAt: integer("refresh_token_expires_at", {
58
+ mode: "timestamp_ms",
59
+ }),
60
+ scope: text("scope"),
61
+ password: text("password"),
62
+ createdAt: integer("created_at", { mode: "timestamp_ms" })
63
+ .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
64
+ .notNull(),
65
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" })
66
+ .$onUpdate(() => /* @__PURE__ */ new Date())
67
+ .notNull(),
68
+ },
69
+ (table) => [index("account_userId_idx").on(table.userId)],
70
+ );
71
+
72
+ export const verification = sqliteTable(
73
+ "verification",
74
+ {
75
+ id: text("id").primaryKey(),
76
+ identifier: text("identifier").notNull(),
77
+ value: text("value").notNull(),
78
+ expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(),
79
+ createdAt: integer("created_at", { mode: "timestamp_ms" })
80
+ .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
81
+ .notNull(),
82
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" })
83
+ .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)
84
+ .$onUpdate(() => /* @__PURE__ */ new Date())
85
+ .notNull(),
86
+ },
87
+ (table) => [index("verification_identifier_idx").on(table.identifier)],
88
+ );
89
+
90
+ export const userRelations = relations(user, ({ many }) => ({
91
+ sessions: many(session),
92
+ accounts: many(account),
93
+ }));
94
+
95
+ export const sessionRelations = relations(session, ({ one }) => ({
96
+ user: one(user, {
97
+ fields: [session.userId],
98
+ references: [user.id],
99
+ }),
100
+ }));
101
+
102
+ export const accountRelations = relations(account, ({ one }) => ({
103
+ user: one(user, {
104
+ fields: [account.userId],
105
+ references: [user.id],
106
+ }),
107
+ }));
@@ -0,0 +1,68 @@
1
+ import mongoose from 'mongoose';
2
+
3
+ const { Schema, model } = mongoose;
4
+
5
+ const userSchema = new Schema(
6
+ {
7
+ _id: { type: String },
8
+ name: { type: String, required: true },
9
+ email: { type: String, required: true, unique: true },
10
+ emailVerified: { type: Boolean, required: true },
11
+ image: { type: String },
12
+ createdAt: { type: Date, required: true },
13
+ updatedAt: { type: Date, required: true },
14
+ },
15
+ { collection: 'user' }
16
+ );
17
+
18
+ const sessionSchema = new Schema(
19
+ {
20
+ _id: { type: String },
21
+ expiresAt: { type: Date, required: true },
22
+ token: { type: String, required: true, unique: true },
23
+ createdAt: { type: Date, required: true },
24
+ updatedAt: { type: Date, required: true },
25
+ ipAddress: { type: String },
26
+ userAgent: { type: String },
27
+ userId: { type: String, ref: 'User', required: true },
28
+ },
29
+ { collection: 'session' }
30
+ );
31
+
32
+ const accountSchema = new Schema(
33
+ {
34
+ _id: { type: String },
35
+ accountId: { type: String, required: true },
36
+ providerId: { type: String, required: true },
37
+ userId: { type: String, ref: 'User', required: true },
38
+ accessToken: { type: String },
39
+ refreshToken: { type: String },
40
+ idToken: { type: String },
41
+ accessTokenExpiresAt: { type: Date },
42
+ refreshTokenExpiresAt: { type: Date },
43
+ scope: { type: String },
44
+ password: { type: String },
45
+ createdAt: { type: Date, required: true },
46
+ updatedAt: { type: Date, required: true },
47
+ },
48
+ { collection: 'account' }
49
+ );
50
+
51
+ const verificationSchema = new Schema(
52
+ {
53
+ _id: { type: String },
54
+ identifier: { type: String, required: true },
55
+ value: { type: String, required: true },
56
+ expiresAt: { type: Date, required: true },
57
+ createdAt: { type: Date },
58
+ updatedAt: { type: Date },
59
+ },
60
+ { collection: 'verification' }
61
+ );
62
+
63
+ const User = model('User', userSchema);
64
+ const Session = model('Session', sessionSchema);
65
+ const Account = model('Account', accountSchema);
66
+ const Verification = model('Verification', verificationSchema);
67
+
68
+ export { User, Session, Account, Verification };