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.
- package/README.md +10 -6
- package/dist/index.mjs +140 -25
- package/package.json +5 -3
- package/skills/questpie/AGENTS.md +2664 -0
- package/skills/questpie/SKILL.md +181 -0
- package/skills/questpie/references/auth.md +121 -0
- package/skills/questpie/references/business-logic.md +550 -0
- package/skills/questpie/references/codegen-plugin-api.md +382 -0
- package/skills/questpie/references/crud-api.md +378 -0
- package/skills/questpie/references/data-modeling.md +489 -0
- package/skills/questpie/references/extend.md +493 -0
- package/skills/questpie/references/field-types.md +386 -0
- package/skills/questpie/references/infrastructure-adapters.md +545 -0
- package/skills/questpie/references/multi-tenancy.md +364 -0
- package/skills/questpie/references/production.md +475 -0
- package/skills/questpie/references/query-operators.md +125 -0
- package/skills/questpie/references/quickstart.md +549 -0
- package/skills/questpie/references/rules.md +327 -0
- package/skills/questpie/references/tanstack-query.md +520 -0
- package/skills/questpie-admin/AGENTS.md +1442 -0
- package/skills/questpie-admin/SKILL.md +410 -0
- package/skills/questpie-admin/references/blocks.md +307 -0
- package/skills/questpie-admin/references/custom-ui.md +305 -0
- package/skills/questpie-admin/references/views.md +433 -0
- package/templates/tanstack-start/AGENTS.md +71 -62
- package/templates/tanstack-start/CLAUDE.md +26 -23
- package/templates/tanstack-start/README.md +32 -20
- package/templates/tanstack-start/env.example +1 -1
- package/templates/tanstack-start/package.json +20 -6
- package/templates/tanstack-start/src/lib/client.ts +2 -2
- package/templates/tanstack-start/src/lib/env.ts +1 -1
- package/templates/tanstack-start/src/questpie/admin/.generated/client.ts +13 -0
- package/templates/tanstack-start/src/questpie/admin/modules.ts +1 -0
- package/templates/tanstack-start/src/questpie/server/.generated/factories.ts +117 -241
- package/templates/tanstack-start/src/questpie/server/.generated/index.ts +129 -81
- package/templates/tanstack-start/src/questpie/server/app.ts +1 -1
- package/templates/tanstack-start/src/questpie/server/config/admin.ts +27 -30
- package/templates/tanstack-start/src/questpie/server/globals/site-settings.global.ts +1 -1
- package/templates/tanstack-start/src/questpie/server/questpie.config.ts +1 -1
- package/templates/tanstack-start/src/routeTree.gen.ts +138 -0
- package/templates/tanstack-start/src/routes/__root.tsx +0 -2
- package/templates/tanstack-start/src/routes/admin.tsx +8 -1
- package/templates/tanstack-start/src/tanstack-start.d.ts +1 -0
- package/templates/tanstack-start/src/vite-env.d.ts +1 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
|
60
|
-
|
|
77
|
+
/** All service definitions in the app (modules + user, user overrides). */
|
|
78
|
+
type _AppServiceDefinitions = _ModuleServices;
|
|
61
79
|
|
|
62
|
-
/**
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
params?: Record<string, unknown>,
|
|
102
|
-
|
|
103
|
-
|
|
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 =
|
|
122
|
-
{
|
|
123
|
-
modules: _modules as
|
|
165
|
+
export const app = await createApp(
|
|
166
|
+
({
|
|
167
|
+
modules: _modules as ModuleDefinition[],
|
|
124
168
|
collections: {
|
|
125
|
-
|
|
169
|
+
posts: _coll_posts,
|
|
126
170
|
},
|
|
127
171
|
globals: {
|
|
128
|
-
|
|
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
|
-
|
|
131
|
-
dashboard: _dashboard as any,
|
|
132
|
-
sidebar: _sidebar as any,
|
|
133
|
-
},
|
|
179
|
+
}) satisfies AppDefinition,
|
|
134
180
|
_runtime,
|
|
135
|
-
)
|
|
136
|
-
|
|
137
|
-
|
|
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';
|
|
@@ -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("
|
|
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
|
-
*
|
|
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>()
|
|
@@ -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
|
|
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
|
});
|