create-questpie 2.0.2 → 2.0.4

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 (40) hide show
  1. package/dist/index.mjs +244 -30
  2. package/package.json +1 -1
  3. package/skills/questpie/AGENTS.md +310 -103
  4. package/skills/questpie/SKILL.md +196 -84
  5. package/skills/questpie/coverage.json +213 -0
  6. package/skills/questpie/references/auth.md +119 -4
  7. package/skills/questpie/references/business-logic.md +126 -56
  8. package/skills/questpie/references/crud-api.md +231 -29
  9. package/skills/questpie/references/data-modeling.md +26 -6
  10. package/skills/questpie/references/extend.md +98 -7
  11. package/skills/questpie/references/field-types.md +14 -2
  12. package/skills/questpie/references/infrastructure-adapters.md +207 -32
  13. package/skills/questpie/references/mcp.md +147 -0
  14. package/skills/questpie/references/multi-tenancy.md +1 -2
  15. package/skills/questpie/references/production.md +218 -53
  16. package/skills/questpie/references/quickstart.md +31 -18
  17. package/skills/questpie/references/rules.md +140 -13
  18. package/skills/questpie/references/sandbox.md +110 -0
  19. package/skills/questpie/references/tanstack-query.md +34 -11
  20. package/skills/questpie/references/type-inference.md +167 -0
  21. package/skills/questpie/references/workflows.md +155 -0
  22. package/skills/questpie-admin/AGENTS.md +141 -68
  23. package/skills/questpie-admin/SKILL.md +96 -63
  24. package/skills/questpie-admin/references/blocks.md +28 -4
  25. package/skills/questpie-admin/references/custom-ui.md +1 -1
  26. package/skills/questpie-admin/references/views.md +21 -5
  27. package/templates/tanstack-start/AGENTS.md +15 -8
  28. package/templates/tanstack-start/CLAUDE.md +12 -5
  29. package/templates/tanstack-start/README.md +7 -6
  30. package/templates/tanstack-start/package.json +1 -0
  31. package/templates/tanstack-start/src/lib/query-client.ts +10 -1
  32. package/templates/tanstack-start/src/questpie/admin/modules.ts +3 -1
  33. package/templates/tanstack-start/src/questpie/server/.generated/factories.ts +10 -9
  34. package/templates/tanstack-start/src/questpie/server/config/auth.ts +1 -1
  35. package/templates/tanstack-start/src/questpie/server/modules.ts +4 -5
  36. package/templates/tanstack-start/src/questpie/server/questpie.config.ts +2 -1
  37. package/templates/tanstack-start/src/routes/admin/$.tsx +12 -1
  38. package/templates/tanstack-start/src/routes/admin/index.tsx +12 -5
  39. package/templates/tanstack-start/src/routes/api/$.ts +1 -2
  40. package/templates/tanstack-start/vite.config.ts +2 -2
@@ -3,10 +3,10 @@
3
3
  // Typed factory functions with plugin extensions. Regenerate with: questpie generate
4
4
 
5
5
  // ── Core Imports ───────────────────────────────────────────
6
- import { CollectionBuilder, GlobalBuilder, wrapBuilderWithExtensions, builtinFields, type EmptyCollectionState, type EmptyGlobalState, type BuiltinFields, Field } from "questpie";
6
+ import { CollectionBuilder, GlobalBuilder, wrapBuilderWithExtensions, builtinFields, type EmptyCollectionState, type EmptyGlobalState, type BuiltinFields, Field } from "questpie/builders";
7
7
 
8
8
  // ── Runtime Field Imports ──────────────────────────────────
9
- import { adminFields } from "@questpie/admin/server";
9
+ import { adminFields } from "@questpie/admin/fields";
10
10
 
11
11
  const _fieldExt: Record<string, { stateKey: string; resolve: (v: any) => any }> = {
12
12
  admin: { stateKey: "admin", resolve: (v: any) => v },
@@ -32,8 +32,9 @@ const _allFieldDefs = Object.fromEntries(
32
32
  ) as unknown as typeof _rawFieldDefs;
33
33
 
34
34
  // ── Plugin Imports ─────────────────────────────────────────
35
- import { type AdminCollectionConfig, type AdminConfigContext, type ListViewConfig, type ListViewConfigContext, type FilterViewsByKind, type FormViewConfig, type FormViewConfigContext, type PreviewConfig, type ServerActionsConfig, type ActionsConfigContext, type AdminGlobalConfig, type AdminConfigInput, createViewCallbackProxy, createComponentCallbackProxy, createActionCallbackProxy } from "@questpie/admin/server";
36
- import { type AppConfigInput, type AuthConfig, createFieldNameProxy } from "questpie";
35
+ import { type AdminCollectionConfig, type AdminConfigContext, type ListViewConfig, type ListViewConfigContext, type FilterViewsByKind, type FormViewConfig, type FormViewConfigContext, type PreviewConfig, type ServerActionsConfig, type ActionsConfigContext, type AdminGlobalConfig, type AdminConfigInput, createViewCallbackProxy, createComponentCallbackProxy, createActionCallbackProxy } from "@questpie/admin/factories";
36
+ import { type AppConfigInput, type AuthConfig } from "questpie/types";
37
+ import { createFieldNameProxy } from "questpie/builders";
37
38
  import { type OpenApiModuleConfig } from "@questpie/openapi";
38
39
 
39
40
  // ════════════════════════════════════════════════════════════
@@ -67,7 +68,7 @@ declare module "questpie" {
67
68
  }
68
69
  interface Field<TState> {
69
70
  admin(config: unknown): Field<TState>;
70
- form(configFn: (ctx: { f: Record<string, string> }) => { fields: import('@questpie/admin/server').FieldLayoutItem[] }): Field<TState>;
71
+ form(configFn: (ctx: { f: Record<string, string> }) => { fields: import('@questpie/admin/factories').FieldLayoutItem[] }): Field<TState>;
71
72
  }
72
73
  }
73
74
 
@@ -78,7 +79,7 @@ declare global {
78
79
  }
79
80
  }
80
81
 
81
- declare module "@questpie/admin/server" {
82
+ declare module "@questpie/admin/factories" {
82
83
  interface ComponentTypeRegistry extends Record<_ComponentsNames_Strict, {}> {}
83
84
  }
84
85
 
@@ -97,7 +98,7 @@ const _collExt: Record<string, { stateKey: string; resolve: (v: any) => any }> =
97
98
  list: {
98
99
  stateKey: "adminList",
99
100
  resolve(configOrFn: any) {
100
- const resolved = typeof configOrFn === 'function' ? configOrFn({ v: createViewCallbackProxy(), f: createFieldNameProxy(), a: createActionCallbackProxy() }) : configOrFn;
101
+ const resolved = typeof configOrFn === 'function' ? configOrFn({ v: createViewCallbackProxy(), f: createFieldNameProxy(), a: createActionCallbackProxy(), c: createComponentCallbackProxy() }) : configOrFn;
101
102
  return { ...{"view":"collection-table","showSearch":true,"showFilters":true,"showToolbar":true}, ...resolved };
102
103
  },
103
104
  },
@@ -167,11 +168,11 @@ export function global<TName extends string>(name: TName): GlobalBuilder<EmptyGl
167
168
  // Builder factory functions (plugin-contributed)
168
169
  // ════════════════════════════════════════════════════════════
169
170
 
170
- import { BlockBuilder } from "@questpie/admin/server";
171
+ import { BlockBuilder } from "@questpie/admin/factories";
171
172
  /**
172
173
  * Create a typed block builder with wrapped field defs.
173
174
  */
174
- export function block<TName extends string>(name: TName): import('@questpie/admin/server').BlockBuilder<{ name: TName }> {
175
+ export function block<TName extends string>(name: TName): import('@questpie/admin/factories').BlockBuilder<{ name: TName }> {
175
176
  return BlockBuilder.create(name, _allFieldDefs) as any;
176
177
  }
177
178
 
@@ -1,4 +1,4 @@
1
- import { authConfig } from "questpie";
1
+ import { authConfig } from "questpie/app";
2
2
 
3
3
  export default authConfig({
4
4
  emailAndPassword: {
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * Modules — static module dependencies for this project.
3
3
  */
4
- import { adminModule } from "@questpie/admin/server";
4
+ import { adminModule } from "@questpie/admin/modules/admin";
5
5
  import { openApiModule } from "@questpie/openapi";
6
6
 
7
- export default [
8
- adminModule,
9
- openApiModule,
10
- ] as const;
7
+ const modules = [adminModule, openApiModule] as const;
8
+
9
+ export default modules;
@@ -6,7 +6,8 @@
6
6
  * Admin sidebar, dashboard, and branding live in config/admin.ts.
7
7
  */
8
8
 
9
- import { ConsoleAdapter, runtimeConfig } from "questpie";
9
+ import { runtimeConfig } from "questpie/app";
10
+ import { ConsoleAdapter } from "questpie/adapters/console";
10
11
 
11
12
  import { env } from "@/lib/env.js";
12
13
 
@@ -1,17 +1,28 @@
1
1
  import { createFileRoute, useNavigate } from "@tanstack/react-router";
2
+ import { useMemo } from "react";
2
3
 
3
4
  import { AdminRouter } from "@questpie/admin/client";
4
5
 
6
+ function createAdminNavigate(navigate: ReturnType<typeof useNavigate>) {
7
+ return (path: string) => {
8
+ void navigate({ to: path });
9
+ };
10
+ }
11
+
5
12
  function AdminCatchAll() {
6
13
  const navigate = useNavigate();
7
14
  const params = Route.useParams();
8
15
  const splat = params._splat as string;
16
+ const handleNavigate = useMemo(
17
+ () => createAdminNavigate(navigate),
18
+ [navigate],
19
+ );
9
20
  const segments = splat ? splat.split("/").filter(Boolean) : [];
10
21
 
11
22
  return (
12
23
  <AdminRouter
13
24
  segments={segments}
14
- navigate={(path) => navigate({ to: path })}
25
+ navigate={handleNavigate}
15
26
  basePath="/admin"
16
27
  />
17
28
  );
@@ -1,16 +1,23 @@
1
1
  import { createFileRoute, useNavigate } from "@tanstack/react-router";
2
+ import { useMemo } from "react";
2
3
 
3
4
  import { AdminRouter } from "@questpie/admin/client";
4
5
 
6
+ function createAdminNavigate(navigate: ReturnType<typeof useNavigate>) {
7
+ return (path: string) => {
8
+ void navigate({ to: path });
9
+ };
10
+ }
11
+
5
12
  function AdminDashboard() {
6
13
  const navigate = useNavigate();
14
+ const handleNavigate = useMemo(
15
+ () => createAdminNavigate(navigate),
16
+ [navigate],
17
+ );
7
18
 
8
19
  return (
9
- <AdminRouter
10
- segments={[]}
11
- navigate={(path) => navigate({ to: path })}
12
- basePath="/admin"
13
- />
20
+ <AdminRouter segments={[]} navigate={handleNavigate} basePath="/admin" />
14
21
  );
15
22
  }
16
23
 
@@ -1,6 +1,5 @@
1
1
  import { createFileRoute } from "@tanstack/react-router";
2
- import { createFetchHandler } from "questpie";
3
-
2
+ import { createFetchHandler } from "questpie/http";
4
3
  import { app } from "@/questpie/server/app.js";
5
4
 
6
5
  const handler = createFetchHandler(app, {
@@ -3,13 +3,13 @@ import { devtools } from "@tanstack/devtools-vite";
3
3
  import { tanstackStart } from "@tanstack/react-start/plugin/vite";
4
4
  import viteReact from "@vitejs/plugin-react";
5
5
  import { nitro } from "nitro/vite";
6
- import { defineConfig } from "vite";
6
+ import { defineConfig, type PluginOption } from "vite";
7
7
  import viteTsConfigPaths from "vite-tsconfig-paths";
8
8
 
9
9
  export default defineConfig({
10
10
  plugins: [
11
11
  devtools(),
12
- nitro({ preset: "bun" }) as any,
12
+ nitro({ preset: "bun" }) as unknown as PluginOption,
13
13
  viteTsConfigPaths({ projects: ["./tsconfig.json"] }),
14
14
  tailwindcss(),
15
15
  tanstackStart(),