create-questpie 2.0.0 → 2.0.2

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 (45) hide show
  1. package/README.md +10 -6
  2. package/dist/index.mjs +140 -25
  3. package/package.json +5 -3
  4. package/skills/questpie/AGENTS.md +2664 -0
  5. package/skills/questpie/SKILL.md +181 -0
  6. package/skills/questpie/references/auth.md +121 -0
  7. package/skills/questpie/references/business-logic.md +550 -0
  8. package/skills/questpie/references/codegen-plugin-api.md +382 -0
  9. package/skills/questpie/references/crud-api.md +378 -0
  10. package/skills/questpie/references/data-modeling.md +489 -0
  11. package/skills/questpie/references/extend.md +493 -0
  12. package/skills/questpie/references/field-types.md +386 -0
  13. package/skills/questpie/references/infrastructure-adapters.md +545 -0
  14. package/skills/questpie/references/multi-tenancy.md +364 -0
  15. package/skills/questpie/references/production.md +475 -0
  16. package/skills/questpie/references/query-operators.md +125 -0
  17. package/skills/questpie/references/quickstart.md +549 -0
  18. package/skills/questpie/references/rules.md +327 -0
  19. package/skills/questpie/references/tanstack-query.md +520 -0
  20. package/skills/questpie-admin/AGENTS.md +1442 -0
  21. package/skills/questpie-admin/SKILL.md +410 -0
  22. package/skills/questpie-admin/references/blocks.md +307 -0
  23. package/skills/questpie-admin/references/custom-ui.md +305 -0
  24. package/skills/questpie-admin/references/views.md +433 -0
  25. package/templates/tanstack-start/AGENTS.md +71 -62
  26. package/templates/tanstack-start/CLAUDE.md +26 -23
  27. package/templates/tanstack-start/README.md +32 -20
  28. package/templates/tanstack-start/env.example +1 -1
  29. package/templates/tanstack-start/package.json +20 -6
  30. package/templates/tanstack-start/src/lib/client.ts +2 -2
  31. package/templates/tanstack-start/src/lib/env.ts +1 -1
  32. package/templates/tanstack-start/src/questpie/admin/.generated/client.ts +13 -0
  33. package/templates/tanstack-start/src/questpie/admin/modules.ts +1 -0
  34. package/templates/tanstack-start/src/questpie/server/.generated/factories.ts +117 -241
  35. package/templates/tanstack-start/src/questpie/server/.generated/index.ts +129 -81
  36. package/templates/tanstack-start/src/questpie/server/app.ts +1 -1
  37. package/templates/tanstack-start/src/questpie/server/config/admin.ts +27 -30
  38. package/templates/tanstack-start/src/questpie/server/globals/site-settings.global.ts +1 -1
  39. package/templates/tanstack-start/src/questpie/server/questpie.config.ts +1 -1
  40. package/templates/tanstack-start/src/routeTree.gen.ts +138 -0
  41. package/templates/tanstack-start/src/routes/__root.tsx +0 -2
  42. package/templates/tanstack-start/src/routes/admin.tsx +8 -1
  43. package/templates/tanstack-start/src/tanstack-start.d.ts +1 -0
  44. package/templates/tanstack-start/src/vite-env.d.ts +1 -0
  45. package/templates/tanstack-start/vite.config.ts +1 -3
@@ -2,36 +2,34 @@
2
2
  // AUTO-GENERATED by questpie codegen — DO NOT EDIT
3
3
  // Regenerate with: questpie generate
4
4
 
5
- import {
6
- type AppContext,
7
- createApp,
8
- createContextFactory,
9
- type Questpie,
10
- type QuestpieConfig,
11
- } from "questpie";
12
- // ── Module type extraction (inline, no recursive types) ───
13
- import type { UnionToIntersection } from "questpie";
5
+ import { createApp, createContextFactory, extractAppServices, type AppDefinition, type ModuleDefinition, type AppContext, type Registry, type QueueClient, type CollectionAPI } from "questpie";
14
6
 
15
- // ── Plugin Singles ─────────────────────────────────────────
16
- import _branding from "../branding";
17
- // ── Collections ────────────────────────────────────────────
18
- import { posts as _coll_posts_collection } from "../collections/posts.collection";
19
- import _dashboard from "../dashboard";
20
- // ── Globals ────────────────────────────────────────────────
21
- import { siteSettings as _glob_siteSettings_global } from "../globals/site-settings.global";
22
- // ── Modules ────────────────────────────────────────────────
23
- import _modules from "../modules";
24
7
  // ── Runtime ────────────────────────────────────────────────
25
8
  import _runtime from "../questpie.config";
9
+
10
+ // ── Modules ────────────────────────────────────────────────
11
+ import _modules from "../modules";
12
+
13
+ // ── Collections ────────────────────────────────────────────
14
+ import { posts as _coll_posts } from "../collections/posts.collection";
15
+
16
+ // ── Globals ────────────────────────────────────────────────
17
+ import { siteSettings as _glob_siteSettings } from "../globals/site-settings.global";
18
+
19
+ // ── Core Singles ───────────────────────────────────────────
20
+ import _authConfig from "../config/auth";
21
+
22
+ // ── Plugin Singles ─────────────────────────────────────────
23
+ import _adminConfig from "../config/admin";
24
+ import _openapi from "../config/openapi";
25
+
26
26
  // ════════════════════════════════════════════════════════════
27
27
  // TYPES — composed from typeof references (zero inference cost)
28
28
  // ════════════════════════════════════════════════════════════
29
- import _sidebar from "../sidebar";
30
29
 
30
+ import type { ServiceCustomNamespaceInstances, ServiceInstanceOf, ServiceInstancesInNamespace, ServiceTopLevelInstances, UnionToIntersection } from "questpie";
31
31
  type _Module = (typeof _modules)[number];
32
- type _MPRaw<K extends string> = UnionToIntersection<
33
- _Module extends infer M ? (M extends Record<K, infer V> ? V : never) : never
34
- >;
32
+ type _MPRaw<K extends string> = UnionToIntersection<_Module extends infer M ? M extends Record<K, infer V> ? V : never : never>;
35
33
  type _MP<K extends string> = [_MPRaw<K>] extends [never] ? {} : _MPRaw<K>;
36
34
 
37
35
  type _ModuleCollections = _MP<"collections">;
@@ -39,15 +37,35 @@ type _ModuleGlobals = _MP<"globals">;
39
37
  type _ModuleJobs = _MP<"jobs">;
40
38
  type _ModuleRoutes = _MP<"routes">;
41
39
  type _ModuleServices = _MP<"services">;
40
+ type _ModuleFieldTypes = _MP<"fieldTypes">;
41
+ type _ModuleViews = _MP<"views">;
42
+ type _ModuleComponents = _MP<"components">;
43
+ type _ModuleBlocks = _MP<"blocks">;
44
+ // Registry category extraction from modules
45
+ type _Registry_Collections = _MP<"collections">;
46
+ type _Registry_Globals = _MP<"globals">;
47
+ type _Registry_Jobs = _MP<"jobs">;
48
+ type _Registry_Routes = _MP<"routes">;
49
+ type _Registry_Services = _MP<"services">;
50
+ type _Registry_Emails = _MP<"emails">;
51
+ type _Registry_FieldTypes = _MP<"fieldTypes">;
52
+ type _Registry_Views = _MP<"views">;
53
+ type _Registry_Components = _MP<"components">;
54
+ type _Registry_Blocks = _MP<"blocks">;
55
+
56
+ // Recursive module property extraction (for fields contributed at each level)
57
+ import type { ExtractModuleProp } from "questpie";
58
+
59
+ type _AllModuleFields = ExtractModuleProp<{ modules: typeof _modules }, "fields">;
42
60
 
43
61
  /** All collections in the app (modules + user, user overrides) */
44
62
  export type AppCollections = _ModuleCollections & {
45
- "posts.collection": typeof _coll_posts_collection;
63
+ posts: typeof _coll_posts;
46
64
  };
47
65
 
48
66
  /** All globals in the app (modules + user, user overrides) */
49
67
  export type AppGlobals = _ModuleGlobals & {
50
- "siteSettings.global": typeof _glob_siteSettings_global;
68
+ siteSettings: typeof _glob_siteSettings;
51
69
  };
52
70
 
53
71
  /** All jobs in the app (modules + user, user overrides) */
@@ -56,51 +74,75 @@ export type AppJobs = _ModuleJobs;
56
74
  /** All routes in the app (modules + user, user overrides) */
57
75
  export type AppRoutes = _ModuleRoutes;
58
76
 
59
- /** All services in the app (modules + user, user overrides). Values are service instances. */
60
- export type AppServices = _ModuleServices;
77
+ /** All service definitions in the app (modules + user, user overrides). */
78
+ type _AppServiceDefinitions = _ModuleServices;
61
79
 
62
- /**
63
- * The fully-typed app instance type.
64
- * Use `typeof app` or this alias when you need to reference the app type.
65
- *
66
- * **Note:** Do NOT import `app` inside framework-defined files (collections,
67
- * globals, routes, hooks, blocks) — it creates circular dependencies with
68
- * the generated index. Use the context parameters provided to handlers instead.
69
- */
70
- export type App = Questpie<
71
- QuestpieConfig & {
72
- collections: AppCollections;
73
- globals: AppGlobals;
74
- jobs: AppJobs;
75
- routes: AppRoutes;
76
- services: AppServices;
77
- }
78
- >;
80
+ /** All services in the app as resolved service instances. */
81
+ export type AppServices = {
82
+ [K in keyof _AppServiceDefinitions]: ServiceInstanceOf<_AppServiceDefinitions[K]>;
83
+ };
84
+ type _AppDefaultServices = ServiceInstancesInNamespace<_AppServiceDefinitions, "services">;
85
+ type _AppTopLevelServices = ServiceTopLevelInstances<_AppServiceDefinitions>;
86
+ type _AppCustomServiceNamespaces = ServiceCustomNamespaceInstances<_AppServiceDefinitions>;
87
+
88
+ /** All email templates in the app — use with email.sendTemplate() */
89
+ export type AppEmailTemplates = Record<string, never>;
90
+
91
+ /** All fieldtypes in the app (modules + user, user overrides) */
92
+ export type AppFieldTypes = _ModuleFieldTypes;
93
+
94
+ /** All views in the app (modules + user, user overrides) */
95
+ export type AppViews = _ModuleViews;
96
+
97
+ /** All components in the app (modules + user, user overrides) */
98
+ export type AppComponents = _ModuleComponents;
99
+
100
+ /** All blocks in the app (modules + user, user overrides) */
101
+ export type AppBlocks = _ModuleBlocks;
102
+
103
+ type _CollectionsAPI = { [K in keyof AppCollections]: CollectionAPI<AppCollections[K], AppCollections> };
79
104
 
80
105
  // ── AppContext augmentation — auto-types ALL handlers ──────
81
- declare module "questpie" {
82
- interface AppContext {
83
- // Infrastructure
84
- db: App["db"];
85
- email: App["email"];
86
- queue: App["queue"];
87
- storage: App["storage"];
88
- kv: App["kv"];
89
- logger: App["logger"];
90
- search: App["search"];
91
- realtime: App["realtime"];
92
-
93
- // Entity APIs
94
- collections: App["collections"];
95
- globals: App["globals"];
96
-
97
- // Request-scoped
98
- session: Awaited<ReturnType<App["auth"]["api"]["getSession"]>> | null;
99
- t: (
100
- key: string,
101
- params?: Record<string, unknown>,
102
- locale?: string,
103
- ) => string;
106
+ declare global {
107
+ namespace Questpie {
108
+ interface AppContext extends _AppTopLevelServices, _AppCustomServiceNamespaces {
109
+ // Infrastructure
110
+ db: (typeof app)['db'];
111
+ email: (typeof app)['email'];
112
+ queue: QueueClient<AppJobs>;
113
+ storage: (typeof app)['storage'];
114
+ kv: (typeof app)['kv'];
115
+ logger: (typeof app)['logger'];
116
+ search: (typeof app)['search'];
117
+ realtime: (typeof app)['realtime'];
118
+
119
+ // Entity APIs
120
+ collections: _CollectionsAPI;
121
+ globals: (typeof app)['globals'];
122
+ tables: (typeof app)['tables'];
123
+
124
+ // Request-scoped
125
+ session: (typeof app)['auth'] extends { api: { getSession: (...args: any[]) => Promise<infer TSession> } } ? NonNullable<TSession> | null : null;
126
+ t: (key: string, params?: Record<string, unknown>, locale?: string) => string;
127
+
128
+ // User services
129
+ services: _AppDefaultServices;
130
+ }
131
+
132
+ interface ServiceCreateContext extends AppContext {}
133
+
134
+ interface Registry {
135
+ collections: _Registry_Collections;
136
+ globals: _Registry_Globals;
137
+ jobs: _Registry_Jobs;
138
+ routes: _Registry_Routes;
139
+ services: _Registry_Services;
140
+ emails: _Registry_Emails;
141
+ "~fieldTypes": _Registry_FieldTypes & _AllModuleFields;
142
+ views: _Registry_Views;
143
+ components: _Registry_Components;
144
+ blocks: _Registry_Blocks;
145
+ }
104
146
  }
105
147
  }
106
148
 
@@ -110,32 +152,36 @@ declare module "questpie" {
110
152
  * For handler context, use `AppContext` (auto-typed via module augmentation).
111
153
  */
112
154
  export type AppConfig = {
113
- collections: AppCollections;
114
- globals: AppGlobals;
155
+ collections: AppCollections & Record<string, any>;
156
+ globals: AppGlobals & Record<string, any>;
157
+ routes: AppRoutes;
158
+ auth: typeof _authConfig;
115
159
  };
116
160
 
117
161
  // ════════════════════════════════════════════════════════════
118
162
  // RUNTIME — create the app instance
119
163
  // ════════════════════════════════════════════════════════════
120
164
 
121
- export const app = (await createApp(
122
- {
123
- modules: _modules as any,
165
+ export const app = await createApp(
166
+ ({
167
+ modules: _modules as ModuleDefinition[],
124
168
  collections: {
125
- "posts.collection": _coll_posts_collection,
169
+ posts: _coll_posts,
126
170
  },
127
171
  globals: {
128
- "siteSettings.global": _glob_siteSettings_global,
172
+ siteSettings: _glob_siteSettings,
173
+ },
174
+ config: {
175
+ auth: _authConfig as any,
176
+ admin: _adminConfig as any,
177
+ openapi: _openapi as any,
129
178
  },
130
- branding: _branding as any,
131
- dashboard: _dashboard as any,
132
- sidebar: _sidebar as any,
133
- },
179
+ }) satisfies AppDefinition,
134
180
  _runtime,
135
- )) as unknown as AppConfig & {
136
- waitForInit(): Promise<void>;
137
- destroy(): Promise<void>;
138
- };
181
+ );
182
+
183
+ /** Fully typed QUESTPIE app instance. */
184
+ export type App = typeof app;
139
185
 
140
186
  // ── createContext — typed context for scripts ──────────────
141
187
  /**
@@ -151,3 +197,5 @@ export const app = (await createApp(
151
197
  * ```
152
198
  */
153
199
  export const createContext = createContextFactory(app);
200
+
201
+ // Factories: import { collection, global, ... } from '#questpie/factories';
@@ -7,4 +7,4 @@
7
7
  * If .generated/ does not exist yet, run: bun questpie generate
8
8
  */
9
9
 
10
- export { type App, app } from "./.generated/index";
10
+ export { type App, type AppConfig, app } from "./.generated/index";
@@ -9,23 +9,40 @@ export default adminConfig({
9
9
  {
10
10
  id: "main",
11
11
  title: "Content",
12
- items: [
13
- {
14
- type: "link",
15
- label: "Dashboard",
16
- href: "/admin",
17
- icon: { type: "icon", props: { name: "ph:house" } },
18
- },
19
- { type: "collection", collection: "posts" },
20
- { type: "global", global: "siteSettings" },
21
- ],
22
12
  },
23
13
  ],
14
+ items: [
15
+ {
16
+ sectionId: "main",
17
+ type: "link",
18
+ label: "Dashboard",
19
+ href: "/admin",
20
+ icon: { type: "icon", props: { name: "ph:house" } },
21
+ },
22
+ { sectionId: "main", type: "collection", collection: "posts" },
23
+ { sectionId: "main", type: "global", global: "siteSettings" },
24
+ ],
24
25
  },
25
26
  dashboard: {
26
27
  title: "Dashboard",
27
28
  description: "Overview of your content",
28
29
  columns: 4,
30
+ actions: [
31
+ {
32
+ id: "new-post",
33
+ label: "New Post",
34
+ href: "/admin/collections/posts/create",
35
+ icon: { type: "icon", props: { name: "ph:article" } },
36
+ variant: "primary",
37
+ },
38
+ {
39
+ id: "site-settings",
40
+ label: "Site Settings",
41
+ href: "/admin/globals/siteSettings",
42
+ icon: { type: "icon", props: { name: "ph:gear" } },
43
+ variant: "outline",
44
+ },
45
+ ],
29
46
  sections: [
30
47
  { id: "content", label: "Content", layout: "grid", columns: 2 },
31
48
  { id: "recent", label: "Recent", layout: "grid", columns: 4 },
@@ -58,26 +75,6 @@ export default adminConfig({
58
75
  limit: 5,
59
76
  span: 2,
60
77
  },
61
- {
62
- sectionId: "recent",
63
- id: "quick-actions",
64
- type: "quickActions",
65
- label: "Quick Actions",
66
- actions: [
67
- {
68
- label: "New Post",
69
- action: { type: "create", collection: "posts" },
70
- },
71
- {
72
- label: "Site Settings",
73
- action: {
74
- type: "link",
75
- href: "/admin/globals/siteSettings",
76
- },
77
- },
78
- ],
79
- span: 2,
80
- },
81
78
  ],
82
79
  },
83
80
  });
@@ -1,6 +1,6 @@
1
1
  import { global } from "#questpie/factories";
2
2
 
3
- export const siteSettings = global("site_settings")
3
+ export const siteSettings = global("siteSettings")
4
4
  .fields(({ f }) => ({
5
5
  siteName: f.text().label("Site Name").required().default("{{projectName}}"),
6
6
  description: f
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Runtime-only configuration: database, adapters, secrets.
5
5
  * Entity definitions (collections, globals, etc.) are codegen-generated.
6
- * Sidebar, dashboard, branding are file conventions.
6
+ * Admin sidebar, dashboard, and branding live in config/admin.ts.
7
7
  */
8
8
 
9
9
  import { ConsoleAdapter, runtimeConfig } from "questpie";
@@ -0,0 +1,138 @@
1
+ /* eslint-disable */
2
+
3
+ // @ts-nocheck
4
+
5
+ // noinspection JSUnusedGlobalSymbols
6
+
7
+ // This file was automatically generated by TanStack Router.
8
+ // You should NOT make any changes in this file as it will be overwritten.
9
+ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
10
+
11
+ import { Route as rootRouteImport } from './routes/__root'
12
+ import { Route as AdminRouteImport } from './routes/admin'
13
+ import { Route as AdminIndexRouteImport } from './routes/admin/index'
14
+ import { Route as ApiSplatRouteImport } from './routes/api/$'
15
+ import { Route as AdminLoginRouteImport } from './routes/admin/login'
16
+ import { Route as AdminSplatRouteImport } from './routes/admin/$'
17
+
18
+ const AdminRoute = AdminRouteImport.update({
19
+ id: '/admin',
20
+ path: '/admin',
21
+ getParentRoute: () => rootRouteImport,
22
+ } as any)
23
+ const AdminIndexRoute = AdminIndexRouteImport.update({
24
+ id: '/',
25
+ path: '/',
26
+ getParentRoute: () => AdminRoute,
27
+ } as any)
28
+ const ApiSplatRoute = ApiSplatRouteImport.update({
29
+ id: '/api/$',
30
+ path: '/api/$',
31
+ getParentRoute: () => rootRouteImport,
32
+ } as any)
33
+ const AdminLoginRoute = AdminLoginRouteImport.update({
34
+ id: '/login',
35
+ path: '/login',
36
+ getParentRoute: () => AdminRoute,
37
+ } as any)
38
+ const AdminSplatRoute = AdminSplatRouteImport.update({
39
+ id: '/$',
40
+ path: '/$',
41
+ getParentRoute: () => AdminRoute,
42
+ } as any)
43
+
44
+ export interface FileRoutesByFullPath {
45
+ '/admin': typeof AdminRouteWithChildren
46
+ '/admin/$': typeof AdminSplatRoute
47
+ '/admin/login': typeof AdminLoginRoute
48
+ '/api/$': typeof ApiSplatRoute
49
+ '/admin/': typeof AdminIndexRoute
50
+ }
51
+ export interface FileRoutesByTo {
52
+ '/admin/$': typeof AdminSplatRoute
53
+ '/admin/login': typeof AdminLoginRoute
54
+ '/api/$': typeof ApiSplatRoute
55
+ '/admin': typeof AdminIndexRoute
56
+ }
57
+ export interface FileRoutesById {
58
+ __root__: typeof rootRouteImport
59
+ '/admin': typeof AdminRouteWithChildren
60
+ '/admin/$': typeof AdminSplatRoute
61
+ '/admin/login': typeof AdminLoginRoute
62
+ '/api/$': typeof ApiSplatRoute
63
+ '/admin/': typeof AdminIndexRoute
64
+ }
65
+ export interface FileRouteTypes {
66
+ fileRoutesByFullPath: FileRoutesByFullPath
67
+ fullPaths: '/admin' | '/admin/$' | '/admin/login' | '/api/$' | '/admin/'
68
+ fileRoutesByTo: FileRoutesByTo
69
+ to: '/admin/$' | '/admin/login' | '/api/$' | '/admin'
70
+ id: '__root__' | '/admin' | '/admin/$' | '/admin/login' | '/api/$' | '/admin/'
71
+ fileRoutesById: FileRoutesById
72
+ }
73
+ export interface RootRouteChildren {
74
+ AdminRoute: typeof AdminRouteWithChildren
75
+ ApiSplatRoute: typeof ApiSplatRoute
76
+ }
77
+
78
+ declare module '@tanstack/react-router' {
79
+ interface FileRoutesByPath {
80
+ '/admin': {
81
+ id: '/admin'
82
+ path: '/admin'
83
+ fullPath: '/admin'
84
+ preLoaderRoute: typeof AdminRouteImport
85
+ parentRoute: typeof rootRouteImport
86
+ }
87
+ '/admin/': {
88
+ id: '/admin/'
89
+ path: '/'
90
+ fullPath: '/admin/'
91
+ preLoaderRoute: typeof AdminIndexRouteImport
92
+ parentRoute: typeof AdminRoute
93
+ }
94
+ '/api/$': {
95
+ id: '/api/$'
96
+ path: '/api/$'
97
+ fullPath: '/api/$'
98
+ preLoaderRoute: typeof ApiSplatRouteImport
99
+ parentRoute: typeof rootRouteImport
100
+ }
101
+ '/admin/login': {
102
+ id: '/admin/login'
103
+ path: '/login'
104
+ fullPath: '/admin/login'
105
+ preLoaderRoute: typeof AdminLoginRouteImport
106
+ parentRoute: typeof AdminRoute
107
+ }
108
+ '/admin/$': {
109
+ id: '/admin/$'
110
+ path: '/$'
111
+ fullPath: '/admin/$'
112
+ preLoaderRoute: typeof AdminSplatRouteImport
113
+ parentRoute: typeof AdminRoute
114
+ }
115
+ }
116
+ }
117
+
118
+ interface AdminRouteChildren {
119
+ AdminSplatRoute: typeof AdminSplatRoute
120
+ AdminLoginRoute: typeof AdminLoginRoute
121
+ AdminIndexRoute: typeof AdminIndexRoute
122
+ }
123
+
124
+ const AdminRouteChildren: AdminRouteChildren = {
125
+ AdminSplatRoute: AdminSplatRoute,
126
+ AdminLoginRoute: AdminLoginRoute,
127
+ AdminIndexRoute: AdminIndexRoute,
128
+ }
129
+
130
+ const AdminRouteWithChildren = AdminRoute._addFileChildren(AdminRouteChildren)
131
+
132
+ const rootRouteChildren: RootRouteChildren = {
133
+ AdminRoute: AdminRouteWithChildren,
134
+ ApiSplatRoute: ApiSplatRoute,
135
+ }
136
+ export const routeTree = rootRouteImport
137
+ ._addFileChildren(rootRouteChildren)
138
+ ._addFileTypes<FileRouteTypes>()
@@ -1,5 +1,3 @@
1
- import "virtual:iconify-preload";
2
-
3
1
  import { createRootRoute } from "@tanstack/react-router";
4
2
 
5
3
  export const Route = createRootRoute({
@@ -20,14 +20,21 @@ function AdminLink({
20
20
  className,
21
21
  children,
22
22
  activeProps,
23
+ activeOptions,
23
24
  }: {
24
25
  to: string;
25
26
  className?: string;
26
27
  children: React.ReactNode;
27
28
  activeProps?: { className?: string };
29
+ activeOptions?: { exact?: boolean };
28
30
  }) {
29
31
  return (
30
- <Link to={to} className={className} activeProps={activeProps}>
32
+ <Link
33
+ to={to}
34
+ className={className}
35
+ activeProps={activeProps}
36
+ activeOptions={activeOptions}
37
+ >
31
38
  {children}
32
39
  </Link>
33
40
  );
@@ -0,0 +1 @@
1
+ import "@tanstack/react-start";
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -1,4 +1,3 @@
1
- import { iconifyPreload } from "@questpie/vite-plugin-iconify";
2
1
  import tailwindcss from "@tailwindcss/vite";
3
2
  import { devtools } from "@tanstack/devtools-vite";
4
3
  import { tanstackStart } from "@tanstack/react-start/plugin/vite";
@@ -9,7 +8,6 @@ import viteTsConfigPaths from "vite-tsconfig-paths";
9
8
 
10
9
  export default defineConfig({
11
10
  plugins: [
12
- iconifyPreload(),
13
11
  devtools(),
14
12
  nitro({ preset: "bun" }) as any,
15
13
  viteTsConfigPaths({ projects: ["./tsconfig.json"] }),
@@ -22,7 +20,7 @@ export default defineConfig({
22
20
  },
23
21
  build: {
24
22
  rollupOptions: {
25
- external: ["bun", /^drizzle-kit/],
23
+ external: ["bun", /^drizzle-kit/, /^@aws-sdk\//],
26
24
  },
27
25
  },
28
26
  });