@terreno/mcp 57.21.0 → 58.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +57 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +17 -16
- package/dist/bootstrap.js.map +1 -1
- package/dist/docs/guidelines/admin-frontend/guidelines/core.md +6 -5
- package/dist/docs/guidelines/ui/guidelines/core.md +1 -1
- package/dist/docs/prompts/debug.md +6 -4
- package/dist/docs/prompts/screen.md +11 -17
- package/dist/docs/resources/overview.md +5 -3
- package/dist/docs/resources/patterns.md +157 -238
- package/dist/docs/resources/syncdb.md +44 -16
- package/dist/docs/templates/bootstrap/CLAUDE.template.md +2 -2
- package/dist/docs/templates/bootstrap/cursorrules.template.md +7 -5
- package/dist/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +8 -12
- package/dist/docs/templates/bootstrap/frontend/app/_layout.template.tsx +75 -52
- package/dist/docs/templates/bootstrap/frontend/app/login.template.tsx +46 -108
- package/dist/docs/templates/bootstrap/frontend/app/signup.template.tsx +53 -0
- package/dist/docs/templates/bootstrap/frontend/lib/betterAuth.template.md +18 -0
- package/dist/docs/templates/bootstrap/frontend/store/apiClient.template.md +33 -0
- package/dist/docs/templates/bootstrap/frontend/store/apiSdk.template.md +76 -0
- package/dist/docs/templates/bootstrap/frontend/store/syncdb.template.md +56 -0
- package/dist/docs/templates/bootstrap/frontend/utils/index.template.md +0 -4
- package/dist/docs/upgrades/58.0.0-beta.1.md +504 -0
- package/dist/docs/upgrades/58.0.0.md +495 -4
- package/dist/docs/versioned/next/README.md +2 -2
- package/dist/docs/versioned/next/approval-rubric.md +2 -2
- package/dist/docs/versioned/next/explanation/admin-interface.md +6 -5
- package/dist/docs/versioned/next/explanation/admin-plugin-frontend.md +1 -1
- package/dist/docs/versioned/next/explanation/ai-workflows.md +5 -3
- package/dist/docs/versioned/next/explanation/announcements/rtk-deprecation.md +16 -11
- package/dist/docs/versioned/next/explanation/authentication.md +62 -43
- package/dist/docs/versioned/next/explanation/dependency-management.md +1 -1
- package/dist/docs/versioned/next/explanation/deployment-baseline.md +1 -1
- package/dist/docs/versioned/next/explanation/example-coverage.md +2 -2
- package/dist/docs/versioned/next/explanation/explicit-any-policy.md +5 -6
- package/dist/docs/versioned/next/explanation/gcp-hosting-architecture.md +1 -1
- package/dist/docs/versioned/next/explanation/local-first-data.md +11 -9
- package/dist/docs/versioned/next/explanation/model-router-actions.md +1 -1
- package/dist/docs/versioned/next/explanation/modular-api-design.md +2 -2
- package/dist/docs/versioned/next/explanation/no-barrel-imports.md +5 -5
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +4 -3
- package/dist/docs/versioned/next/explanation/source-rules.md +2 -2
- package/dist/docs/versioned/next/explanation/typescript-configuration.md +2 -4
- package/dist/docs/versioned/next/explanation/versioning-policy.md +3 -3
- package/dist/docs/versioned/next/how-to/README.md +3 -2
- package/dist/docs/versioned/next/how-to/add-feature-flags.md +50 -25
- package/dist/docs/versioned/next/how-to/add-organizations.md +2 -1
- package/dist/docs/versioned/next/how-to/admin-custom-home.md +8 -2
- package/dist/docs/versioned/next/how-to/admin-custom-widget.md +0 -1
- package/dist/docs/versioned/next/how-to/agent-ui-asks.md +6 -6
- package/dist/docs/versioned/next/how-to/build-admin-screens.md +10 -8
- package/dist/docs/versioned/next/how-to/build-for-web.md +1 -1
- package/dist/docs/versioned/next/how-to/call-external-apis.md +2 -2
- package/dist/docs/versioned/next/how-to/circleci.md +12 -6
- package/dist/docs/versioned/next/how-to/configure-better-auth.md +114 -60
- package/dist/docs/versioned/next/how-to/connect-mcp-service-token.md +10 -4
- package/dist/docs/versioned/next/how-to/create-a-terreno-app.md +14 -2
- package/dist/docs/versioned/next/how-to/debug-with-mcp.md +8 -13
- package/dist/docs/versioned/next/how-to/expose-mcp-tools.md +15 -4
- package/dist/docs/versioned/next/how-to/generate-the-client-sdk.md +33 -0
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +2 -2
- package/dist/docs/versioned/next/how-to/in-app-notifications.md +1 -1
- package/dist/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +318 -447
- package/dist/docs/versioned/next/how-to/password-reset.md +1 -1
- package/dist/docs/versioned/next/how-to/product-announcements.md +6 -3
- package/dist/docs/versioned/next/how-to/rate-limiting.md +38 -16
- package/dist/docs/versioned/next/how-to/run-mongodb-migrations.md +19 -0
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +2 -3
- package/dist/docs/versioned/next/how-to/set-up-social-login.md +1 -1
- package/dist/docs/versioned/next/how-to/set-up-terreno-mcp.md +2 -2
- package/dist/docs/versioned/next/how-to/track-upstream-expo.md +1 -1
- package/dist/docs/versioned/next/how-to/upgrade-banner.md +5 -3
- package/dist/docs/versioned/next/how-to/upgrade-terreno.md +5 -5
- package/dist/docs/versioned/next/how-to/use-syncdb-correctly.md +1 -1
- package/dist/docs/versioned/next/how-to/websocket-integration.md +113 -402
- package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +5 -0
- package/dist/docs/versioned/next/implementationPlans/native-module-baseline.md +29 -5
- package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/remove-rtk.md +185 -0
- package/dist/docs/versioned/next/reference/README.md +1 -1
- package/dist/docs/versioned/next/reference/admin-frontend.md +85 -70
- package/dist/docs/versioned/next/reference/admin-spa.md +10 -4
- package/dist/docs/versioned/next/reference/ai.md +36 -4
- package/dist/docs/versioned/next/reference/announcements.md +3 -3
- package/dist/docs/versioned/next/reference/api.md +39 -24
- package/dist/docs/versioned/next/reference/cli.md +3 -4
- package/dist/docs/versioned/next/reference/environment-variables.md +16 -16
- package/dist/docs/versioned/next/reference/feature-flags.md +48 -7
- package/dist/docs/versioned/next/reference/jobs.md +2 -2
- package/dist/docs/versioned/next/reference/legacy/rtk.md +25 -600
- package/dist/docs/versioned/next/reference/mcp-server.md +441 -1158
- package/dist/docs/versioned/next/reference/syncdb.md +426 -16
- package/dist/docs/versioned/next/reference/test.md +28 -3
- package/dist/docs/versioned/next/reference/ui.md +132 -19
- package/dist/docs/versioned/next/tasks/native-module-baseline.md +8 -4
- package/dist/docs/versioned/next/tasks/rate-limiting.md +9 -2
- package/dist/docs/versioned/next/tasks/remove-legacy-realtime.md +5 -5
- package/dist/docs/versioned/next/tasks/remove-rtk.md +155 -0
- package/dist/local/localTools.d.ts.map +1 -1
- package/dist/local/localTools.js +3 -54
- package/dist/local/localTools.js.map +1 -1
- package/dist/local/tools/runtime.d.ts +0 -21
- package/dist/local/tools/runtime.d.ts.map +1 -1
- package/dist/local/tools/runtime.js +0 -176
- package/dist/local/tools/runtime.js.map +1 -1
- package/dist/local/tools/syncDb.d.ts +0 -11
- package/dist/local/tools/syncDb.d.ts.map +1 -1
- package/dist/local/tools/syncDb.js +1 -5
- package/dist/local/tools/syncDb.js.map +1 -1
- package/dist/packageGuidelines.d.ts +3 -2
- package/dist/packageGuidelines.d.ts.map +1 -1
- package/dist/packageGuidelines.js +4 -11
- package/dist/packageGuidelines.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +17 -18
- package/dist/prompts.js.map +1 -1
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +1 -8
- package/dist/resources.js.map +1 -1
- package/dist/search/chunker.d.ts +1 -1
- package/dist/search/chunker.d.ts.map +1 -1
- package/dist/search/inferPackages.d.ts +1 -1
- package/dist/search/inferPackages.js +5 -5
- package/dist/search/inferPackages.js.map +1 -1
- package/dist/tools.d.ts +6 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +126 -119
- package/dist/tools.js.map +1 -1
- package/package.json +6 -6
- package/src/docs/guidelines/admin-frontend/guidelines/core.md +6 -5
- package/src/docs/guidelines/ui/guidelines/core.md +1 -1
- package/src/docs/prompts/debug.md +6 -4
- package/src/docs/prompts/screen.md +11 -17
- package/src/docs/resources/overview.md +5 -3
- package/src/docs/resources/patterns.md +157 -238
- package/src/docs/resources/syncdb.md +44 -16
- package/src/docs/templates/bootstrap/CLAUDE.template.md +2 -2
- package/src/docs/templates/bootstrap/cursorrules.template.md +7 -5
- package/src/docs/templates/bootstrap/frontend/app/(tabs)/profile.template.tsx +8 -12
- package/src/docs/templates/bootstrap/frontend/app/_layout.template.tsx +75 -52
- package/src/docs/templates/bootstrap/frontend/app/login.template.tsx +46 -108
- package/src/docs/templates/bootstrap/frontend/app/signup.template.tsx +53 -0
- package/src/docs/templates/bootstrap/frontend/lib/betterAuth.template.md +18 -0
- package/src/docs/templates/bootstrap/frontend/store/apiClient.template.md +33 -0
- package/src/docs/templates/bootstrap/frontend/store/apiSdk.template.md +76 -0
- package/src/docs/templates/bootstrap/frontend/store/syncdb.template.md +56 -0
- package/src/docs/templates/bootstrap/frontend/utils/index.template.md +0 -4
- package/src/docs/upgrades/58.0.0-beta.1.md +504 -0
- package/src/docs/upgrades/58.0.0.md +495 -4
- package/src/docs/versioned/next/README.md +2 -2
- package/src/docs/versioned/next/approval-rubric.md +2 -2
- package/src/docs/versioned/next/explanation/admin-interface.md +6 -5
- package/src/docs/versioned/next/explanation/admin-plugin-frontend.md +1 -1
- package/src/docs/versioned/next/explanation/ai-workflows.md +5 -3
- package/src/docs/versioned/next/explanation/announcements/rtk-deprecation.md +16 -11
- package/src/docs/versioned/next/explanation/authentication.md +62 -43
- package/src/docs/versioned/next/explanation/dependency-management.md +1 -1
- package/src/docs/versioned/next/explanation/deployment-baseline.md +1 -1
- package/src/docs/versioned/next/explanation/example-coverage.md +2 -2
- package/src/docs/versioned/next/explanation/explicit-any-policy.md +5 -6
- package/src/docs/versioned/next/explanation/gcp-hosting-architecture.md +1 -1
- package/src/docs/versioned/next/explanation/local-first-data.md +11 -9
- package/src/docs/versioned/next/explanation/model-router-actions.md +1 -1
- package/src/docs/versioned/next/explanation/modular-api-design.md +2 -2
- package/src/docs/versioned/next/explanation/no-barrel-imports.md +5 -5
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +4 -3
- package/src/docs/versioned/next/explanation/source-rules.md +2 -2
- package/src/docs/versioned/next/explanation/typescript-configuration.md +2 -4
- package/src/docs/versioned/next/explanation/versioning-policy.md +3 -3
- package/src/docs/versioned/next/how-to/README.md +3 -2
- package/src/docs/versioned/next/how-to/add-feature-flags.md +50 -25
- package/src/docs/versioned/next/how-to/add-organizations.md +2 -1
- package/src/docs/versioned/next/how-to/admin-custom-home.md +8 -2
- package/src/docs/versioned/next/how-to/admin-custom-widget.md +0 -1
- package/src/docs/versioned/next/how-to/agent-ui-asks.md +6 -6
- package/src/docs/versioned/next/how-to/build-admin-screens.md +10 -8
- package/src/docs/versioned/next/how-to/build-for-web.md +1 -1
- package/src/docs/versioned/next/how-to/call-external-apis.md +2 -2
- package/src/docs/versioned/next/how-to/circleci.md +12 -6
- package/src/docs/versioned/next/how-to/configure-better-auth.md +114 -60
- package/src/docs/versioned/next/how-to/connect-mcp-service-token.md +10 -4
- package/src/docs/versioned/next/how-to/create-a-terreno-app.md +14 -2
- package/src/docs/versioned/next/how-to/debug-with-mcp.md +8 -13
- package/src/docs/versioned/next/how-to/expose-mcp-tools.md +15 -4
- package/src/docs/versioned/next/how-to/generate-the-client-sdk.md +33 -0
- package/src/docs/versioned/next/how-to/github-actions-ci.md +2 -2
- package/src/docs/versioned/next/how-to/in-app-notifications.md +1 -1
- package/src/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +318 -447
- package/src/docs/versioned/next/how-to/password-reset.md +1 -1
- package/src/docs/versioned/next/how-to/product-announcements.md +6 -3
- package/src/docs/versioned/next/how-to/rate-limiting.md +38 -16
- package/src/docs/versioned/next/how-to/run-mongodb-migrations.md +19 -0
- package/src/docs/versioned/next/how-to/run-tests-locally.md +2 -3
- package/src/docs/versioned/next/how-to/set-up-social-login.md +1 -1
- package/src/docs/versioned/next/how-to/set-up-terreno-mcp.md +2 -2
- package/src/docs/versioned/next/how-to/track-upstream-expo.md +1 -1
- package/src/docs/versioned/next/how-to/upgrade-banner.md +5 -3
- package/src/docs/versioned/next/how-to/upgrade-terreno.md +5 -5
- package/src/docs/versioned/next/how-to/use-syncdb-correctly.md +1 -1
- package/src/docs/versioned/next/how-to/websocket-integration.md +113 -402
- package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +1 -1
- package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +5 -0
- package/src/docs/versioned/next/implementationPlans/native-module-baseline.md +29 -5
- package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -1
- package/src/docs/versioned/next/implementationPlans/remove-rtk.md +185 -0
- package/src/docs/versioned/next/reference/README.md +1 -1
- package/src/docs/versioned/next/reference/admin-frontend.md +85 -70
- package/src/docs/versioned/next/reference/admin-spa.md +10 -4
- package/src/docs/versioned/next/reference/ai.md +36 -4
- package/src/docs/versioned/next/reference/announcements.md +3 -3
- package/src/docs/versioned/next/reference/api.md +39 -24
- package/src/docs/versioned/next/reference/cli.md +3 -4
- package/src/docs/versioned/next/reference/environment-variables.md +16 -16
- package/src/docs/versioned/next/reference/feature-flags.md +48 -7
- package/src/docs/versioned/next/reference/jobs.md +2 -2
- package/src/docs/versioned/next/reference/legacy/rtk.md +25 -600
- package/src/docs/versioned/next/reference/mcp-server.md +441 -1158
- package/src/docs/versioned/next/reference/syncdb.md +426 -16
- package/src/docs/versioned/next/reference/test.md +28 -3
- package/src/docs/versioned/next/reference/ui.md +132 -19
- package/src/docs/versioned/next/tasks/native-module-baseline.md +8 -4
- package/src/docs/versioned/next/tasks/rate-limiting.md +9 -2
- package/src/docs/versioned/next/tasks/remove-legacy-realtime.md +5 -5
- package/src/docs/versioned/next/tasks/remove-rtk.md +155 -0
- package/dist/docs/guidelines/rtk/guidelines/core.md +0 -26
- package/dist/docs/resources/rtk.md +0 -181
- package/dist/docs/templates/bootstrap/frontend/openapi-config.template.md +0 -16
- package/dist/docs/templates/bootstrap/frontend/scripts/generate-sdk.template.md +0 -49
- package/dist/docs/templates/bootstrap/frontend/store/appState.template.md +0 -45
- package/dist/docs/templates/bootstrap/frontend/store/errors.template.md +0 -51
- package/dist/docs/templates/bootstrap/frontend/store/index.template.md +0 -86
- package/dist/docs/templates/bootstrap/frontend/store/openApiSdk.template.md +0 -49
- package/dist/docs/templates/bootstrap/frontend/store/sdk.template.md +0 -80
- package/src/docs/guidelines/rtk/guidelines/core.md +0 -26
- package/src/docs/resources/rtk.md +0 -181
- package/src/docs/templates/bootstrap/frontend/openapi-config.template.md +0 -16
- package/src/docs/templates/bootstrap/frontend/scripts/generate-sdk.template.md +0 -49
- package/src/docs/templates/bootstrap/frontend/store/appState.template.md +0 -45
- package/src/docs/templates/bootstrap/frontend/store/errors.template.md +0 -51
- package/src/docs/templates/bootstrap/frontend/store/index.template.md +0 -86
- package/src/docs/templates/bootstrap/frontend/store/openApiSdk.template.md +0 -49
- package/src/docs/templates/bootstrap/frontend/store/sdk.template.md +0 -80
package/dist/resources.js
CHANGED
|
@@ -171,18 +171,11 @@ const buildResources = () => {
|
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
content: loadMarkdown("syncdb.md"),
|
|
174
|
-
description: "
|
|
174
|
+
description: "@terreno/syncdb — synced collections, request client + generated API hooks, auth session, config, flags",
|
|
175
175
|
mimeType: "text/markdown",
|
|
176
176
|
name: "@terreno/syncdb Documentation",
|
|
177
177
|
uri: "terreno://docs/syncdb",
|
|
178
178
|
},
|
|
179
|
-
{
|
|
180
|
-
content: loadMarkdown("rtk.md"),
|
|
181
|
-
description: "Legacy @terreno/rtk docs — OpenAPI SDK, auth, feature flags (not data sync)",
|
|
182
|
-
mimeType: "text/markdown",
|
|
183
|
-
name: "@terreno/rtk Documentation (legacy)",
|
|
184
|
-
uri: "terreno://docs/rtk",
|
|
185
|
-
},
|
|
186
179
|
{
|
|
187
180
|
content: loadMarkdown("patterns.md"),
|
|
188
181
|
description: "Common patterns and best practices for Terreno development",
|
package/dist/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/dist/search/chunker.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface MarkdownChunk {
|
|
|
9
9
|
breadcrumb: string;
|
|
10
10
|
/** Searchable body (heading line may repeat for BM25) */
|
|
11
11
|
text: string;
|
|
12
|
-
/** Short package ids for filtering (api, ui,
|
|
12
|
+
/** Short package ids for filtering (api, ui, syncdb, docs, …) */
|
|
13
13
|
packageTags: string[];
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/search/chunker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/search/chunker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD;;;GAGG;AACH,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,EAClB,KAAK,MAAM,EACX,aAAa,MAAM,EAAE,KACpB,aAOD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,MAAM,EAClB,KAAK,MAAM,EACX,aAAa,MAAM,EAAE,KACpB,aAAa,EAqDf,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Map a docs-relative path to Terreno package tags used by `terreno_search_docs` filters.
|
|
3
|
-
* Tags are lowercase short names: api, ui,
|
|
3
|
+
* Tags are lowercase short names: api, ui, syncdb, admin-backend, admin-frontend, mcp-server, docs.
|
|
4
4
|
*/
|
|
5
5
|
export declare const inferPackageTags: (relativePath: string) => string[];
|
|
6
6
|
export declare const normalizePackageFilter: (pkg: string) => string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Map a docs-relative path to Terreno package tags used by `terreno_search_docs` filters.
|
|
3
|
-
* Tags are lowercase short names: api, ui,
|
|
3
|
+
* Tags are lowercase short names: api, ui, syncdb, admin-backend, admin-frontend, mcp-server, docs.
|
|
4
4
|
*/
|
|
5
5
|
export const inferPackageTags = (relativePath) => {
|
|
6
6
|
const norm = relativePath.replace(/\\/g, "/").toLowerCase();
|
|
@@ -12,8 +12,8 @@ export const inferPackageTags = (relativePath) => {
|
|
|
12
12
|
if (base === "ui.md" || norm.includes("/resources/ui.md")) {
|
|
13
13
|
tags.add("ui");
|
|
14
14
|
}
|
|
15
|
-
if (base === "
|
|
16
|
-
tags.add("
|
|
15
|
+
if (base === "syncdb.md" || norm.includes("/resources/syncdb.md")) {
|
|
16
|
+
tags.add("syncdb");
|
|
17
17
|
}
|
|
18
18
|
if (norm.includes("admin-backend")) {
|
|
19
19
|
tags.add("admin-backend");
|
|
@@ -36,8 +36,8 @@ export const inferPackageTags = (relativePath) => {
|
|
|
36
36
|
if (norm.includes("/ui/") && !norm.includes("admin-frontend")) {
|
|
37
37
|
tags.add("ui");
|
|
38
38
|
}
|
|
39
|
-
if (norm.includes("/
|
|
40
|
-
tags.add("
|
|
39
|
+
if (norm.includes("/syncdb/")) {
|
|
40
|
+
tags.add("syncdb");
|
|
41
41
|
}
|
|
42
42
|
if (norm.includes("ui-types") || norm.includes("component")) {
|
|
43
43
|
tags.add("ui");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inferPackages.js","sourceRoot":"","sources":["../../src/search/inferPackages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACjE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAE3C,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"inferPackages.js","sourceRoot":"","sources":["../../src/search/inferPackages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACjE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAE3C,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAU,EAAE;IAC5D,OAAO,GAAG;SACP,IAAI,EAAE;SACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,WAAW,EAAE,CAAC;AACnB,CAAC,CAAC"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -27,11 +27,17 @@ export declare const generateRoute: (args: {
|
|
|
27
27
|
ownerFiltered?: boolean;
|
|
28
28
|
sort?: string;
|
|
29
29
|
}) => string;
|
|
30
|
+
/**
|
|
31
|
+
* Default synced collection name for a model: kebab-case plural of the model name
|
|
32
|
+
* (`Product` → `products`, `TodoItem` → `todo-items`), matching a `modelRouter` path.
|
|
33
|
+
*/
|
|
34
|
+
export declare const toCollectionName: (modelName: string) => string;
|
|
30
35
|
export declare const generateScreen: (args: {
|
|
31
36
|
name: string;
|
|
32
37
|
type: "list" | "detail" | "form" | "empty";
|
|
33
38
|
modelName?: string;
|
|
34
39
|
fields?: string[];
|
|
40
|
+
collection?: string;
|
|
35
41
|
}) => string;
|
|
36
42
|
export declare const generateFormFields: (args: {
|
|
37
43
|
fields: Array<{
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAC;AA+JvD,eAAO,MAAM,KAAK,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
CHANGED
|
@@ -5,7 +5,7 @@ import { getComponentDocsMarkdown, searchDocs } from "./search/docIndex.js";
|
|
|
5
5
|
import { getUpgradeGuideMarkdown } from "./upgradeGuide.js";
|
|
6
6
|
const docSearchTools = [
|
|
7
7
|
{
|
|
8
|
-
description: "Search Terreno documentation (Diátaxis docs, bundled package guides, and @terreno/ui component props) with BM25-style keyword search. **Call this before guessing** modelRouter, OpenAPI,
|
|
8
|
+
description: "Search Terreno documentation (Diátaxis docs, bundled package guides, and @terreno/ui component props) with BM25-style keyword search. **Call this before guessing** modelRouter, OpenAPI, syncdb, or UI APIs — same workflow as Laravel Boost search-docs.",
|
|
9
9
|
inputSchema: {
|
|
10
10
|
properties: {
|
|
11
11
|
packages: {
|
|
@@ -236,9 +236,13 @@ export const tools = [
|
|
|
236
236
|
name: "terreno_generate_route",
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
|
-
description: "Generate a React Native screen component using @terreno/ui components",
|
|
239
|
+
description: "Generate a React Native screen component using @terreno/ui components. List, detail, and form screens read and write a synced collection with @terreno/syncdb/react (useQuery, useEntity, useMutate).",
|
|
240
240
|
inputSchema: {
|
|
241
241
|
properties: {
|
|
242
|
+
collection: {
|
|
243
|
+
description: "Synced collection name (defaults to the kebab-case plural of modelName, e.g. 'todo-items')",
|
|
244
|
+
type: "string",
|
|
245
|
+
},
|
|
242
246
|
fields: {
|
|
243
247
|
description: "Fields to display or edit",
|
|
244
248
|
items: { type: "string" },
|
|
@@ -515,6 +519,23 @@ export const add${modelName}Routes = (router: Router) => {
|
|
|
515
519
|
};
|
|
516
520
|
`;
|
|
517
521
|
};
|
|
522
|
+
/**
|
|
523
|
+
* Default synced collection name for a model: kebab-case plural of the model name
|
|
524
|
+
* (`Product` → `products`, `TodoItem` → `todo-items`), matching a `modelRouter` path.
|
|
525
|
+
*/
|
|
526
|
+
export const toCollectionName = (modelName) => {
|
|
527
|
+
const kebab = modelName
|
|
528
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
529
|
+
.replace(/[\s_]+/g, "-")
|
|
530
|
+
.toLowerCase();
|
|
531
|
+
if (kebab.endsWith("s")) {
|
|
532
|
+
return kebab;
|
|
533
|
+
}
|
|
534
|
+
if (/[^aeiou]y$/.test(kebab)) {
|
|
535
|
+
return `${kebab.slice(0, -1)}ies`;
|
|
536
|
+
}
|
|
537
|
+
return `${kebab}s`;
|
|
538
|
+
};
|
|
518
539
|
export const generateScreen = (args) => {
|
|
519
540
|
const { name, type, modelName, fields } = args;
|
|
520
541
|
if (type === "empty") {
|
|
@@ -534,47 +555,39 @@ const ${name}Screen: React.FC = () => {
|
|
|
534
555
|
export default ${name}Screen;
|
|
535
556
|
`;
|
|
536
557
|
}
|
|
558
|
+
// Generated screens read and write a synced collection through @terreno/syncdb (local-first).
|
|
559
|
+
// Non-synced models use the generated request hooks in `@/store/apiSdk` instead.
|
|
560
|
+
const collection = args.collection ?? (modelName ? toCollectionName(modelName) : "");
|
|
561
|
+
const typeName = modelName ? `${modelName}Row` : "";
|
|
562
|
+
const rowInterface = modelName
|
|
563
|
+
? `interface ${typeName} {
|
|
564
|
+
id: string;
|
|
565
|
+
${(fields ?? []).map((f) => ` ${f}?: unknown;`).join("\n")}
|
|
566
|
+
}
|
|
567
|
+
`
|
|
568
|
+
: "";
|
|
537
569
|
if (type === "list" && modelName) {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
import { Box, Page,
|
|
541
|
-
import { useGet${modelName}sQuery } from "@/store/openApiSdk";
|
|
570
|
+
return `import React from "react";
|
|
571
|
+
import { useQuery, useSyncStatus } from "@terreno/syncdb/react";
|
|
572
|
+
import { Box, Page, Spinner, Text } from "@terreno/ui";
|
|
542
573
|
|
|
574
|
+
${rowInterface}
|
|
543
575
|
const ${name}Screen: React.FC = () => {
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
return (
|
|
548
|
-
<Page navigation={undefined} title="${name}">
|
|
549
|
-
<Box flex={1} alignItems="center" justifyContent="center">
|
|
550
|
-
<Text>Loading...</Text>
|
|
551
|
-
</Box>
|
|
552
|
-
</Page>
|
|
553
|
-
);
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
if (error) {
|
|
557
|
-
return (
|
|
558
|
-
<Page navigation={undefined} title="${name}">
|
|
559
|
-
<Box flex={1} alignItems="center" justifyContent="center" gap={2}>
|
|
560
|
-
<Text color="error500">Failed to load data</Text>
|
|
561
|
-
<Button text="Retry" onClick={refetch} />
|
|
562
|
-
</Box>
|
|
563
|
-
</Page>
|
|
564
|
-
);
|
|
565
|
-
}
|
|
576
|
+
// Local-first: rows come from the on-device store and update as sync deltas arrive.
|
|
577
|
+
const items = useQuery<${typeName}>("${collection}");
|
|
578
|
+
const {isSyncing} = useSyncStatus();
|
|
566
579
|
|
|
567
580
|
return (
|
|
568
|
-
<Page navigation={undefined} title="${name}">
|
|
569
|
-
<
|
|
570
|
-
<
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
</
|
|
577
|
-
</
|
|
581
|
+
<Page navigation={undefined} scroll title="${name}">
|
|
582
|
+
<Box padding={4} gap={2}>
|
|
583
|
+
{isSyncing && items.length === 0 ? <Spinner /> : null}
|
|
584
|
+
{items.map((item) => (
|
|
585
|
+
<Box key={item.id} padding={3} color="base" rounding="md">
|
|
586
|
+
<Text>{String(item.${fields?.[0] ?? "id"} ?? "")}</Text>
|
|
587
|
+
</Box>
|
|
588
|
+
))}
|
|
589
|
+
{!isSyncing && items.length === 0 ? <Text>No ${collection} yet</Text> : null}
|
|
590
|
+
</Box>
|
|
578
591
|
</Page>
|
|
579
592
|
);
|
|
580
593
|
};
|
|
@@ -587,17 +600,17 @@ export default ${name}Screen;
|
|
|
587
600
|
.map((f) => ` const [${f}, set${f.charAt(0).toUpperCase() + f.slice(1)}] = useState("");`)
|
|
588
601
|
.join("\n");
|
|
589
602
|
const fieldInputs = (fields ?? ["name"])
|
|
590
|
-
.map((f) => `
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
603
|
+
.map((f) => ` <TextField
|
|
604
|
+
title="${f.charAt(0).toUpperCase() + f.slice(1)}"
|
|
605
|
+
value={${f}}
|
|
606
|
+
onChange={set${f.charAt(0).toUpperCase() + f.slice(1)}}
|
|
607
|
+
errorText={errors.${f}}
|
|
608
|
+
/>`)
|
|
596
609
|
.join("\n");
|
|
597
610
|
const bodyFields = (fields ?? ["name"]).map((f) => `${f}`).join(", ");
|
|
598
611
|
return `import React, { useCallback, useState } from "react";
|
|
612
|
+
import { useMutate } from "@terreno/syncdb/react";
|
|
599
613
|
import { Box, Page, Button, TextField } from "@terreno/ui";
|
|
600
|
-
import { useCreate${modelName}Mutation } from "@/store/openApiSdk";
|
|
601
614
|
|
|
602
615
|
interface FormErrors {
|
|
603
616
|
${(fields ?? ["name"]).map((f) => `${f}?: string;`).join("\n ")}
|
|
@@ -606,38 +619,28 @@ interface FormErrors {
|
|
|
606
619
|
const ${name}Screen: React.FC = () => {
|
|
607
620
|
${fieldStates}
|
|
608
621
|
const [errors, setErrors] = useState<FormErrors>({});
|
|
609
|
-
|
|
622
|
+
// Local-first write: applies optimistically and syncs through the durable outbox.
|
|
623
|
+
const {create} = useMutate("${collection}");
|
|
610
624
|
|
|
611
|
-
const handleSubmit = useCallback(
|
|
625
|
+
const handleSubmit = useCallback((): void => {
|
|
612
626
|
const newErrors: FormErrors = {};
|
|
613
|
-
${(fields ?? ["name"]).map((f) => `if (!${f}.trim()) newErrors.${f} = "${f.charAt(0).toUpperCase() + f.slice(1)} is required"
|
|
627
|
+
${(fields ?? ["name"]).map((f) => `if (!${f}.trim()) {\n newErrors.${f} = "${f.charAt(0).toUpperCase() + f.slice(1)} is required";\n }`).join("\n ")}
|
|
614
628
|
|
|
615
629
|
if (Object.keys(newErrors).length > 0) {
|
|
616
630
|
setErrors(newErrors);
|
|
617
631
|
return;
|
|
618
632
|
}
|
|
619
633
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
const apiError = err as {data?: {fields?: FormErrors}};
|
|
625
|
-
if (apiError.data?.fields) {
|
|
626
|
-
setErrors(apiError.data.fields);
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
}, [${bodyFields}, create${modelName}]);
|
|
634
|
+
setErrors({});
|
|
635
|
+
create({data: { ${bodyFields} }});
|
|
636
|
+
// Success - navigate or show message. Server rejections surface through useConflicts().
|
|
637
|
+
}, [${bodyFields}, create]);
|
|
630
638
|
|
|
631
639
|
return (
|
|
632
640
|
<Page navigation={undefined} title="Create ${modelName}">
|
|
633
641
|
<Box padding={4} gap={3}>
|
|
634
642
|
${fieldInputs}
|
|
635
|
-
<Button
|
|
636
|
-
text="Create"
|
|
637
|
-
onClick={handleSubmit}
|
|
638
|
-
loading={isLoading}
|
|
639
|
-
fullWidth
|
|
640
|
-
/>
|
|
643
|
+
<Button text="Create" onClick={handleSubmit} fullWidth />
|
|
641
644
|
</Box>
|
|
642
645
|
</Page>
|
|
643
646
|
);
|
|
@@ -648,42 +651,30 @@ export default ${name}Screen;
|
|
|
648
651
|
}
|
|
649
652
|
if (type === "detail" && modelName) {
|
|
650
653
|
return `import React from "react";
|
|
651
|
-
import {
|
|
652
|
-
import {
|
|
654
|
+
import { useEntity } from "@terreno/syncdb/react";
|
|
655
|
+
import { Box, Page, Text } from "@terreno/ui";
|
|
653
656
|
import { useLocalSearchParams } from "expo-router";
|
|
654
657
|
|
|
658
|
+
${rowInterface}
|
|
655
659
|
const ${name}Screen: React.FC = () => {
|
|
656
660
|
const { id } = useLocalSearchParams<{ id: string }>();
|
|
657
|
-
const { data: item,
|
|
661
|
+
const { data: item, deleted } = useEntity<${typeName}>("${collection}", id ?? "");
|
|
658
662
|
|
|
659
|
-
if (
|
|
663
|
+
if (!item || deleted) {
|
|
660
664
|
return (
|
|
661
665
|
<Page navigation={undefined} title="${name}">
|
|
662
|
-
<Box
|
|
663
|
-
<Text>
|
|
664
|
-
</Box>
|
|
665
|
-
</Page>
|
|
666
|
-
);
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
if (error || !item) {
|
|
670
|
-
return (
|
|
671
|
-
<Page navigation={undefined} title="${name}">
|
|
672
|
-
<Box flex={1} alignItems="center" justifyContent="center" gap={2}>
|
|
673
|
-
<Text color="error500">Failed to load data</Text>
|
|
674
|
-
<Button text="Retry" onClick={refetch} />
|
|
666
|
+
<Box padding={4} alignItems="center" justifyContent="center">
|
|
667
|
+
<Text>Not found</Text>
|
|
675
668
|
</Box>
|
|
676
669
|
</Page>
|
|
677
670
|
);
|
|
678
671
|
}
|
|
679
672
|
|
|
680
673
|
return (
|
|
681
|
-
<Page navigation={undefined} title="${name}">
|
|
682
|
-
<
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
</Box>
|
|
686
|
-
</ScrollView>
|
|
674
|
+
<Page navigation={undefined} scroll title="${name}">
|
|
675
|
+
<Box padding={4} gap={2}>
|
|
676
|
+
${(fields ?? ["id"]).map((f) => `<Text>{String(item.${f} ?? "")}</Text>`).join("\n ")}
|
|
677
|
+
</Box>
|
|
687
678
|
</Page>
|
|
688
679
|
);
|
|
689
680
|
};
|
|
@@ -876,14 +867,47 @@ export const generateInstallAdmin = (args) => {
|
|
|
876
867
|
.join("\n");
|
|
877
868
|
const modelImports = models.map((m) => m.modelName).join(", ");
|
|
878
869
|
const files = [
|
|
870
|
+
{
|
|
871
|
+
content: `import {AdminProvider} from "@terreno/admin-frontend";
|
|
872
|
+
import {baseUrl} from "@terreno/syncdb/config";
|
|
873
|
+
import {Stack} from "expo-router";
|
|
874
|
+
import type React from "react";
|
|
875
|
+
import {authProvider} from "@/store/syncdb";
|
|
876
|
+
|
|
877
|
+
// Every admin request (model CRUD and admin RPC) goes through AdminProvider's fetch client.
|
|
878
|
+
// authProvider is the same @terreno/syncdb AuthProvider the sync and request clients use
|
|
879
|
+
// (Better Auth session token, or the JWT from jwtAuthAdapter).
|
|
880
|
+
const getAdminAuthHeaders = async (): Promise<HeadersInit> => {
|
|
881
|
+
const token = await authProvider.getToken();
|
|
882
|
+
if (!token) {
|
|
883
|
+
return {};
|
|
884
|
+
}
|
|
885
|
+
return {Authorization: \`Bearer \${token}\`};
|
|
886
|
+
};
|
|
887
|
+
|
|
888
|
+
const AdminLayout: React.FC = () => {
|
|
889
|
+
return (
|
|
890
|
+
<AdminProvider
|
|
891
|
+
apiBase="/admin"
|
|
892
|
+
apiOrigin={baseUrl}
|
|
893
|
+
getAuthHeaders={getAdminAuthHeaders}
|
|
894
|
+
routeBase="/admin"
|
|
895
|
+
>
|
|
896
|
+
<Stack screenOptions={{headerShown: false}} />
|
|
897
|
+
</AdminProvider>
|
|
898
|
+
);
|
|
899
|
+
};
|
|
900
|
+
|
|
901
|
+
export default AdminLayout;
|
|
902
|
+
`,
|
|
903
|
+
path: "frontend/app/(tabs)/admin/_layout.tsx",
|
|
904
|
+
},
|
|
879
905
|
{
|
|
880
906
|
content: `import {AdminModelList} from "@terreno/admin-frontend";
|
|
881
907
|
import type React from "react";
|
|
882
|
-
import {terrenoApi} from "@/store/sdk";
|
|
883
|
-
import {baseUrl} from "@terreno/rtk";
|
|
884
908
|
|
|
885
909
|
const AdminIndexScreen: React.FC = () => {
|
|
886
|
-
return <AdminModelList
|
|
910
|
+
return <AdminModelList baseUrl="/admin" />;
|
|
887
911
|
};
|
|
888
912
|
|
|
889
913
|
export default AdminIndexScreen;
|
|
@@ -894,15 +918,11 @@ export default AdminIndexScreen;
|
|
|
894
918
|
content: `import {AdminModelTable} from "@terreno/admin-frontend";
|
|
895
919
|
import type React from "react";
|
|
896
920
|
import {useLocalSearchParams} from "expo-router";
|
|
897
|
-
import {terrenoApi} from "@/store/sdk";
|
|
898
|
-
import {baseUrl} from "@terreno/rtk";
|
|
899
921
|
|
|
900
922
|
const AdminModelScreen: React.FC = () => {
|
|
901
923
|
const {model} = useLocalSearchParams<{model: string}>();
|
|
902
924
|
|
|
903
|
-
return
|
|
904
|
-
<AdminModelTable api={terrenoApi} baseUrl={\`\${baseUrl}/admin\`} modelName={model!} />
|
|
905
|
-
);
|
|
925
|
+
return <AdminModelTable baseUrl="/admin" modelName={model!} />;
|
|
906
926
|
};
|
|
907
927
|
|
|
908
928
|
export default AdminModelScreen;
|
|
@@ -913,20 +933,11 @@ export default AdminModelScreen;
|
|
|
913
933
|
content: `import {AdminModelForm} from "@terreno/admin-frontend";
|
|
914
934
|
import type React from "react";
|
|
915
935
|
import {useLocalSearchParams} from "expo-router";
|
|
916
|
-
import {terrenoApi} from "@/store/sdk";
|
|
917
|
-
import {baseUrl} from "@terreno/rtk";
|
|
918
936
|
|
|
919
937
|
const AdminCreateScreen: React.FC = () => {
|
|
920
938
|
const {model} = useLocalSearchParams<{model: string}>();
|
|
921
939
|
|
|
922
|
-
return
|
|
923
|
-
<AdminModelForm
|
|
924
|
-
api={terrenoApi}
|
|
925
|
-
baseUrl={\`\${baseUrl}/admin\`}
|
|
926
|
-
mode="create"
|
|
927
|
-
modelName={model!}
|
|
928
|
-
/>
|
|
929
|
-
);
|
|
940
|
+
return <AdminModelForm baseUrl="/admin" mode="create" modelName={model!} />;
|
|
930
941
|
};
|
|
931
942
|
|
|
932
943
|
export default AdminCreateScreen;
|
|
@@ -937,21 +948,11 @@ export default AdminCreateScreen;
|
|
|
937
948
|
content: `import {AdminModelForm} from "@terreno/admin-frontend";
|
|
938
949
|
import type React from "react";
|
|
939
950
|
import {useLocalSearchParams} from "expo-router";
|
|
940
|
-
import {terrenoApi} from "@/store/sdk";
|
|
941
|
-
import {baseUrl} from "@terreno/rtk";
|
|
942
951
|
|
|
943
952
|
const AdminEditScreen: React.FC = () => {
|
|
944
953
|
const {model, id} = useLocalSearchParams<{model: string; id: string}>();
|
|
945
954
|
|
|
946
|
-
return
|
|
947
|
-
<AdminModelForm
|
|
948
|
-
api={terrenoApi}
|
|
949
|
-
baseUrl={\`\${baseUrl}/admin\`}
|
|
950
|
-
itemId={id}
|
|
951
|
-
mode="edit"
|
|
952
|
-
modelName={model!}
|
|
953
|
-
/>
|
|
954
|
-
);
|
|
955
|
+
return <AdminModelForm baseUrl="/admin" itemId={id} mode="edit" modelName={model!} />;
|
|
955
956
|
};
|
|
956
957
|
|
|
957
958
|
export default AdminEditScreen;
|
|
@@ -1015,9 +1016,13 @@ Add the dependency to \`frontend/package.json\`:
|
|
|
1015
1016
|
cd frontend && bun add @terreno/admin-frontend
|
|
1016
1017
|
\`\`\`
|
|
1017
1018
|
|
|
1018
|
-
### Step 4: Create the
|
|
1019
|
+
### Step 4: Create the admin layout and 3 screen files
|
|
1019
1020
|
|
|
1020
|
-
Create the files listed above. Each file's content is provided below.
|
|
1021
|
+
Create the files listed above. Each file's content is provided below. The \`_layout.tsx\`
|
|
1022
|
+
\`AdminProvider\` is required: it binds every admin request to your API origin and auth
|
|
1023
|
+
headers. It reads the token from the \`authProvider\` exported by \`frontend/store/syncdb.ts\`
|
|
1024
|
+
(the scaffold's shared \`@terreno/syncdb\` auth provider) and the API origin from
|
|
1025
|
+
\`@terreno/syncdb/config\`. Admin screens take no \`api\` prop.
|
|
1021
1026
|
|
|
1022
1027
|
### Step 5: Add Admin tab to \`frontend/app/(tabs)/_layout.tsx\`
|
|
1023
1028
|
|
|
@@ -1161,7 +1166,7 @@ export const handleToolCall = async (name, args) => {
|
|
|
1161
1166
|
result = wrapWithFileInstructions(code, `backend/src/api/${modelName}.ts`, [
|
|
1162
1167
|
`Export from \`backend/src/api/index.ts\`: \`export * from "./${modelName}";\``,
|
|
1163
1168
|
`Register in server setup: \`add${routeArgs.modelName}Routes(router, options);\``,
|
|
1164
|
-
`Regenerate frontend
|
|
1169
|
+
`Regenerate frontend API hooks (store/apiSdk.ts): \`bun run sdk\` in the frontend directory`,
|
|
1165
1170
|
]);
|
|
1166
1171
|
break;
|
|
1167
1172
|
}
|
|
@@ -1170,6 +1175,8 @@ export const handleToolCall = async (name, args) => {
|
|
|
1170
1175
|
const code = generateScreen(screenArgs);
|
|
1171
1176
|
result = wrapWithFileInstructions(code, `frontend/src/screens/${screenArgs.name}Screen.tsx`, [
|
|
1172
1177
|
"Add the screen to your navigation configuration",
|
|
1178
|
+
"List/detail/form screens need the model synced: syncPlugin + isDeletedPlugin, modelRouter `sync` config, and the collection in SYNC_COLLECTIONS (frontend/store/syncdb.ts)",
|
|
1179
|
+
"For a non-synced model, swap the syncdb hooks for the generated request hooks in `@/store/apiSdk` (run `bun run sdk` first)",
|
|
1173
1180
|
]);
|
|
1174
1181
|
break;
|
|
1175
1182
|
}
|