@voltro/cli 0.55.0 → 0.57.0
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 +691 -0
- package/bin/voltro.mjs +24 -0
- package/dist/apiBuild-B83Cb2Rv.js +2 -0
- package/dist/{apiBuild-CMvLJM_K.js → apiBuild-DDr2aNFd.js} +119 -88
- package/dist/bin.js +1 -1
- package/dist/{build-S0QOzqPT.js → build-QKP6Bm0J.js} +308 -279
- package/dist/buildReport-52gHKgfO.js +64 -0
- package/dist/{checkCommand-DNkY5kwF.js → checkCommand-BISqx1OJ.js} +1 -1
- package/dist/{checkCommand-fbj9GDjN.js → checkCommand-DUtMWjcR.js} +6 -6
- package/dist/{clusterCmd-DrVFCzSj.js → clusterCmd-CdLB1GkT.js} +1 -1
- package/dist/{codegen-SIepQtUl.js → codegen-Bth5lUTU.js} +2 -1
- package/dist/codegen-DbH7NbCR.js +2 -0
- package/dist/{codegenCommand-3TDJezom.js → codegenCommand-DnVuDxwT.js} +11 -11
- package/dist/{codemodRunner-C2zxZUIw.js → codemodRunner-BlQPfjzA.js} +222 -0
- package/dist/{commands-BBYJ7Q3B.js → commands-CRbxgxv0.js} +35 -35
- package/dist/{dashboardCommand-D2kmyCLL.js → dashboardCommand-Bf_-Ne3P.js} +5 -5
- package/dist/{dataCommand-BEPPQiTl.js → dataCommand-BoBJJ-Gb.js} +3 -3
- package/dist/{dbCommand-DZTmOFT4.js → dbCommand-CMAIz-Bf.js} +457 -441
- package/dist/dbCommand-DHi_RuDl.js +2 -0
- package/dist/dev-Bl9HqtV7.js +3 -0
- package/dist/{dev-Ca_A_S9v.js → dev-DOEJXicj.js} +2623 -2485
- package/dist/{doctorCommand-CGZJK_4o.js → doctorCommand-BrWu67JZ.js} +524 -280
- package/dist/doctorCommand-DrQv9SL3.js +2 -0
- package/dist/{dormancyCommand-DY2rYpTa.js → dormancyCommand-xn2y-pJm.js} +1 -1
- package/dist/{embeddingsCommand-BoCqZsgp.js → embeddingsCommand-Cn5MbRDM.js} +1 -1
- package/dist/emptyResultHeadline-Csa5fZOF.js +18 -0
- package/dist/{envCommand-Bxy2fOjc.js → envCommand-UJmJIbs9.js} +8 -8
- package/dist/{evolveCommand-BsbZ-XDg.js → evolveCommand-Db30twUy.js} +2 -2
- package/dist/frameworkTableAssembly-B96WCNJA.js +2 -0
- package/dist/{frameworkTableAssembly-Do-cf6RJ.js → frameworkTableAssembly-vfkzuzEo.js} +131 -104
- package/dist/index.js +1 -1
- package/dist/{infoCommand-EmM3jPKD.js → infoCommand-BjVXpMlP.js} +1 -1
- package/dist/inspect-B0hL41s0.js +2 -0
- package/dist/inspect-DZnan87F.js +1500 -0
- package/dist/{inspectCmd-niF97fAq.js → inspectCmd-CP-G0sVK.js} +1 -1
- package/dist/{inspectFetch-EMuhTG_9.js → inspectFetch-BU1NyzxV.js} +36 -24
- package/dist/{inspectMetrics-CGF94puw.js → inspectMetrics-BY0Sjb2F.js} +19 -19
- package/dist/{logsCmd-B6oNsfaZ.js → logsCmd-C5y9HyrG.js} +59 -54
- package/dist/{manifestBuild-DjX5MoXy.js → manifestBuild-DnbFKF6w.js} +1 -1
- package/dist/manifestBuild-UXrnUcXP.js +2 -0
- package/dist/{migrate-CGFZS-1a.js → migrate-DtC3lu7H.js} +4 -4
- package/dist/precompressAssets-YhTi1aWp.js +40 -0
- package/dist/{probeCommand-Bs3iVBSL.js → probeCommand-C5fuN6Z2.js} +2 -2
- package/dist/{runtimeTrace-C1BTpHGQ.js → runtimeTrace-BQL_lfz6.js} +1 -1
- package/dist/{scheduleCmd-DQRu6BZC.js → scheduleCmd-DYBUfo_T.js} +1 -1
- package/dist/{sdkgen-CXMwLg9n.js → sdkgen-CMUPrDjH.js} +1 -1
- package/dist/{seedRunner-Dgsiwk_e.js → seedRunner-DISBKow-.js} +16 -16
- package/dist/serveCommand-B_w-Mpb_.js +2544 -0
- package/dist/serveCommand-Dtb48ffg.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/{start-EOV7s1NZ.js → start-YaUehtDV.js} +580 -558
- package/dist/{start-DH7cat4-.js → start-s25GAIgn.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/staticCachePolicy-CIyj6DbS.js +15 -0
- package/dist/{test-DO27-x2P.js → test-jipIQ5Mx.js} +1 -1
- package/dist/{tracesCmd-DgtgOUdi.js → tracesCmd-C1qKa94g.js} +69 -64
- package/dist/{updateCommand-C_jN1w18.js → updateCommand-C9n_Z_oG.js} +8 -2
- package/dist/updateCommand-DsXEAHbd.js +2 -0
- package/dist/webDev-B6ZMX42w.js +2 -0
- package/dist/{webDev-B7vNj4Bq.js → webDev-BgdkyjP6.js} +1379 -1303
- package/dist/{webhooksCommand-B1LVcyO3.js → webhooksCommand-CYXTNvXq.js} +2 -2
- package/dist/{workflowsCmd-BGF-mRZ5.js → workflowsCmd-g-DNpaUc.js} +1 -1
- package/package.json +55 -19
- package/templates/AGENTS.core.md +20 -1
- package/templates/AGENTS.md +21 -2
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/_manifest.json +2 -2
- package/templates/agent-docs/ai.md +1 -1
- package/templates/agent-docs/authentication.md +34 -19
- package/templates/agent-docs/cli.md +170 -0
- package/templates/agent-docs/configuration.md +29 -4
- package/templates/agent-docs/data.md +145 -5
- package/templates/agent-docs/database/scaling.md +50 -2
- package/templates/agent-docs/deployment.md +75 -1
- package/templates/agent-docs/internationalization.md +32 -0
- package/templates/agent-docs/local-first-mobile.md +9 -2
- package/templates/agent-docs/observability.md +227 -0
- package/templates/agent-docs/plugins/audit.md +21 -5
- package/templates/agent-docs/plugins/billing.md +17 -0
- package/templates/agent-docs/plugins/broadcast.md +2 -1
- package/templates/agent-docs/plugins/ratelimit.md +6 -1
- package/templates/agent-docs/plugins/row-history.md +11 -0
- package/templates/agent-docs/plugins.md +19 -0
- package/templates/agent-docs/reference.md +1 -0
- package/templates/agent-docs/scheduling.md +23 -0
- package/templates/agent-docs/schema-driven-ui.md +81 -0
- package/templates/agent-docs/templates/appshells.md +3 -3
- package/templates/agent-docs/whats-new.md +133 -77
- package/templates/apps/api-ai/package.json +6 -6
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +9 -9
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-row-history/package.json +8 -8
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +7 -7
- package/templates/apps/changelog/src/pages/[locale]/page.tsx +7 -1
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +7 -8
- package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +1 -2
- package/templates/apps/frontend-app/package.json +8 -9
- package/templates/apps/frontend-app/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-auth/package.json +7 -8
- package/templates/apps/frontend-auth/src/components/AuthShell.tsx +1 -2
- package/templates/apps/frontend-blank/package.json +6 -7
- package/templates/apps/frontend-blank/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-cms/package.json +8 -9
- package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +1 -2
- package/templates/apps/frontend-collab/README.md +7 -2
- package/templates/apps/frontend-collab/package.json +9 -10
- package/templates/apps/frontend-collab/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-collab/src/pages/page.test.tsx +8 -4
- package/templates/apps/frontend-collab/src/pages/page.tsx +10 -5
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +1 -1
- package/templates/apps/frontend-dashboard/package.json +6 -7
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +1 -2
- package/templates/apps/frontend-docs/package.json +8 -8
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +7 -8
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +1 -2
- package/templates/apps/frontend-saas/package.json +7 -8
- package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +1 -2
- package/templates/apps/frontend-spa/package.json +6 -7
- package/templates/apps/frontend-spa/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-ssr/package.json +6 -7
- package/templates/apps/frontend-ssr/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-ssr-api/package.json +7 -8
- package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-static-blog/package.json +8 -8
- package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +1 -1
- package/templates/apps/frontend-static-blog/src/pages/[locale]/page.tsx +7 -1
- package/templates/apps/frontend-status/package.json +7 -8
- package/templates/apps/frontend-status/src/pages/layout.tsx +1 -2
- package/templates/apps/mobile-app/package.json +4 -4
- package/templates/baselines/compose/docker/api.Dockerfile +61 -5
- package/templates/baselines/compose/docker/web.Dockerfile +55 -10
- package/templates/baselines/compose-mariadb/docker/api.Dockerfile +61 -5
- package/templates/baselines/compose-mariadb/docker/web.Dockerfile +55 -10
- package/dist/apiBuild-Cl0IDx8c.js +0 -2
- package/dist/codegen-CN6vMM4J.js +0 -2
- package/dist/dbCommand-BTyBGhIA.js +0 -2
- package/dist/dev-DfVZaoys.js +0 -3
- package/dist/doctorCommand-djmqEcDC.js +0 -2
- package/dist/frameworkTableAssembly-Df2Ymp2f.js +0 -2
- package/dist/inspect-DCqILJ1G.js +0 -1197
- package/dist/inspect-DGJwpOAb.js +0 -2
- package/dist/manifestBuild-CJ2zvPvT.js +0 -2
- package/dist/serveCommand-C7IrCD58.js +0 -2445
- package/dist/serveCommand-Cjt5S9hD.js +0 -2
- package/dist/updateCommand-nnFjDbl4.js +0 -2
- package/dist/webDev-1XpVnYkW.js +0 -2
|
@@ -12,18 +12,17 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/
|
|
21
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
|
+
"@voltro/cli": "0.57.0",
|
|
17
|
+
"@voltro/client": "0.57.0",
|
|
18
|
+
"@voltro/env": "0.57.0",
|
|
19
|
+
"@voltro/i18n": "0.57.0",
|
|
20
|
+
"@voltro/web": "0.57.0",
|
|
22
21
|
"react": "^19.0.0",
|
|
23
22
|
"react-dom": "^19.0.0"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.57.0",
|
|
27
26
|
"@types/react": "^19.0.0",
|
|
28
27
|
"@types/react-dom": "^19.0.0",
|
|
29
28
|
"jsdom": "^30.0.0",
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
// directory name never appears in a URL — the pages inside are `/` and
|
|
3
3
|
// `/login`. Gives the public pages a header distinct from the admin sidebar.
|
|
4
4
|
import type { ReactNode } from 'react'
|
|
5
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
6
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
5
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
7
6
|
import { APP_NAME } from '../../config'
|
|
8
7
|
|
|
9
8
|
const LOCALES = [
|
|
@@ -16,8 +16,7 @@ import {
|
|
|
16
16
|
useUndoLog,
|
|
17
17
|
PermissionProvider,
|
|
18
18
|
} from '@voltro/client'
|
|
19
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
20
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
19
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
21
20
|
import { APP_NAME } from '../../config'
|
|
22
21
|
import { isSignedIn } from '../../lib/auth'
|
|
23
22
|
import { DEMO_SCOPES } from '../../lib/admin'
|
|
@@ -12,19 +12,18 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/
|
|
21
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
|
+
"@voltro/cli": "0.57.0",
|
|
17
|
+
"@voltro/client": "0.57.0",
|
|
18
|
+
"@voltro/env": "0.57.0",
|
|
19
|
+
"@voltro/i18n": "0.57.0",
|
|
20
|
+
"@voltro/web": "0.57.0",
|
|
22
21
|
"react": "^19.0.0",
|
|
23
22
|
"react-dom": "^19.0.0"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
27
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/devtools": "0.57.0",
|
|
26
|
+
"@voltro/testing": "0.57.0",
|
|
28
27
|
"@types/react": "^19.0.0",
|
|
29
28
|
"@types/react-dom": "^19.0.0",
|
|
30
29
|
"jsdom": "^30.0.0",
|
|
@@ -8,8 +8,7 @@
|
|
|
8
8
|
// + reloads so the framework re-renders in the chosen language.
|
|
9
9
|
|
|
10
10
|
import type { ReactNode } from 'react'
|
|
11
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
12
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
11
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
13
12
|
|
|
14
13
|
interface LayoutProps {
|
|
15
14
|
readonly children: ReactNode
|
|
@@ -12,18 +12,17 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/
|
|
21
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
|
+
"@voltro/cli": "0.57.0",
|
|
17
|
+
"@voltro/client": "0.57.0",
|
|
18
|
+
"@voltro/env": "0.57.0",
|
|
19
|
+
"@voltro/i18n": "0.57.0",
|
|
20
|
+
"@voltro/web": "0.57.0",
|
|
22
21
|
"react": "^19.0.0",
|
|
23
22
|
"react-dom": "^19.0.0"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.57.0",
|
|
27
26
|
"@types/react": "^19.0.0",
|
|
28
27
|
"@types/react-dom": "^19.0.0",
|
|
29
28
|
"jsdom": "^30.0.0",
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
// The centered auth card every page renders inside — brand, title, the form
|
|
2
2
|
// (children), an optional message, a footer link row, and the locale switcher.
|
|
3
3
|
import type { ReactNode } from 'react'
|
|
4
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
5
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
4
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
6
5
|
import { APP_NAME } from '../config'
|
|
7
6
|
|
|
8
7
|
const LOCALES = [
|
|
@@ -12,17 +12,16 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/
|
|
20
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@voltro/cli": "0.57.0",
|
|
16
|
+
"@voltro/client": "0.57.0",
|
|
17
|
+
"@voltro/env": "0.57.0",
|
|
18
|
+
"@voltro/i18n": "0.57.0",
|
|
19
|
+
"@voltro/web": "0.57.0",
|
|
21
20
|
"react": "^19.0.0",
|
|
22
21
|
"react-dom": "^19.0.0"
|
|
23
22
|
},
|
|
24
23
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.57.0",
|
|
26
25
|
"@types/react": "^19.0.0",
|
|
27
26
|
"@types/react-dom": "^19.0.0",
|
|
28
27
|
"jsdom": "^30.0.0",
|
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
// the chosen language.
|
|
12
12
|
|
|
13
13
|
import type { ReactNode } from 'react'
|
|
14
|
-
import { useLocale, useT } from '@voltro/i18n'
|
|
15
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
14
|
+
import { useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
16
15
|
|
|
17
16
|
interface LayoutProps {
|
|
18
17
|
readonly children: ReactNode
|
|
@@ -12,19 +12,18 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/cms": "0.
|
|
19
|
-
"@voltro/env": "0.
|
|
20
|
-
"@voltro/i18n": "0.
|
|
21
|
-
"@voltro/
|
|
22
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
|
+
"@voltro/cli": "0.57.0",
|
|
17
|
+
"@voltro/client": "0.57.0",
|
|
18
|
+
"@voltro/cms": "0.57.0",
|
|
19
|
+
"@voltro/env": "0.57.0",
|
|
20
|
+
"@voltro/i18n": "0.57.0",
|
|
21
|
+
"@voltro/web": "0.57.0",
|
|
23
22
|
"react": "^19.0.0",
|
|
24
23
|
"react-dom": "^19.0.0"
|
|
25
24
|
},
|
|
26
25
|
"devDependencies": {
|
|
27
|
-
"@voltro/devtools": "0.
|
|
26
|
+
"@voltro/devtools": "0.57.0",
|
|
28
27
|
"@types/react": "^19.0.0",
|
|
29
28
|
"@types/react-dom": "^19.0.0",
|
|
30
29
|
"jsdom": "^30.0.0",
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
// `renderMode: 'ssr'` precisely so this runs per request.
|
|
6
6
|
import type { ReactNode } from 'react'
|
|
7
7
|
import { RedirectError, useLoaderData, type LoaderFn } from '@voltro/web'
|
|
8
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
9
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
8
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
10
9
|
import type { Identity } from '../../lib/api'
|
|
11
10
|
|
|
12
11
|
const LOCALES = [
|
|
@@ -60,13 +60,18 @@ the whole binding: `push` = the `setBody` mutation, `remote` = the `documents`
|
|
|
60
60
|
subscription. The sync-client lifecycle, offline queue, bounded retry,
|
|
61
61
|
`outstanding`/`synced` and the echo guard all live in the hook.
|
|
62
62
|
|
|
63
|
-
## `renderMode = '
|
|
63
|
+
## `renderMode = 'spa'`
|
|
64
64
|
|
|
65
65
|
`page.tsx` sets it explicitly. A rich-text editor needs a browser: `renderMode`
|
|
66
66
|
defaults to `'static'`, which pre-renders at build time, and Tiptap's
|
|
67
67
|
`new Editor()` finds no `window` there — the build fails. There is nothing
|
|
68
68
|
worth pre-rendering for a document that arrives over a live subscription
|
|
69
|
-
anyway.
|
|
69
|
+
anyway. `'spa'` skips the prerender and mounts on the client.
|
|
70
|
+
|
|
71
|
+
The value used to be `'client'`, which is not one of the four render modes
|
|
72
|
+
(`'static' | 'spa' | 'ssr' | 'isr'`), so this template could not be built at
|
|
73
|
+
all. It came from a docs page that taught the same non-existent value while
|
|
74
|
+
another page in the same site listed it as invalid.
|
|
70
75
|
|
|
71
76
|
## Not wired here: presence carets
|
|
72
77
|
|
|
@@ -12,24 +12,23 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
16
|
"@tiptap/extension-collaboration": "^3.0.0",
|
|
17
17
|
"@tiptap/extension-collaboration-caret": "^3.0.0",
|
|
18
18
|
"@tiptap/react": "^3.0.0",
|
|
19
19
|
"@tiptap/starter-kit": "^3.0.0",
|
|
20
|
-
"@voltro/cli": "0.
|
|
21
|
-
"@voltro/client": "0.
|
|
22
|
-
"@voltro/env": "0.
|
|
23
|
-
"@voltro/i18n": "0.
|
|
24
|
-
"@voltro/local-first": "0.
|
|
25
|
-
"@voltro/
|
|
26
|
-
"@voltro/web": "0.55.0",
|
|
20
|
+
"@voltro/cli": "0.57.0",
|
|
21
|
+
"@voltro/client": "0.57.0",
|
|
22
|
+
"@voltro/env": "0.57.0",
|
|
23
|
+
"@voltro/i18n": "0.57.0",
|
|
24
|
+
"@voltro/local-first": "0.57.0",
|
|
25
|
+
"@voltro/web": "0.57.0",
|
|
27
26
|
"react": "^19.0.0",
|
|
28
27
|
"react-dom": "^19.0.0"
|
|
29
28
|
},
|
|
30
29
|
"devDependencies": {
|
|
31
|
-
"@voltro/devtools": "0.
|
|
32
|
-
"@voltro/testing": "0.
|
|
30
|
+
"@voltro/devtools": "0.57.0",
|
|
31
|
+
"@voltro/testing": "0.57.0",
|
|
33
32
|
"@types/react": "^19.0.0",
|
|
34
33
|
"@types/react-dom": "^19.0.0",
|
|
35
34
|
"jsdom": "^30.0.0",
|
|
@@ -8,8 +8,7 @@
|
|
|
8
8
|
// re-renders in the chosen language.
|
|
9
9
|
|
|
10
10
|
import type { ReactNode } from 'react'
|
|
11
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
12
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
11
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
13
12
|
|
|
14
13
|
interface LayoutProps {
|
|
15
14
|
readonly children: ReactNode
|
|
@@ -115,10 +115,14 @@ afterEach(() => {
|
|
|
115
115
|
|
|
116
116
|
describe('collab editor — the page contract', () => {
|
|
117
117
|
test('renders in the browser only — a rich-text editor cannot be prerendered', () => {
|
|
118
|
-
// Pinned because the failure is a BUILD failure
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
118
|
+
// Pinned because the failure is a BUILD failure: `renderMode` defaults to
|
|
119
|
+
// 'static', and Tiptap's `new Editor()` has no `window` during prerender.
|
|
120
|
+
//
|
|
121
|
+
// The value is 'spa'. This assertion said 'client' — the reason above was
|
|
122
|
+
// right and the value was not a render mode at all, so it pinned a template
|
|
123
|
+
// that could not be built. A green suite is not a built app; `voltro test`
|
|
124
|
+
// transpiles and never runs the prerender that rejects the value.
|
|
125
|
+
expect(renderMode).toBe('spa')
|
|
122
126
|
})
|
|
123
127
|
})
|
|
124
128
|
|
|
@@ -34,11 +34,16 @@ import { getCatalog } from '../locales'
|
|
|
34
34
|
|
|
35
35
|
// A rich-text editor needs a BROWSER. `renderMode` defaults to `'static'`,
|
|
36
36
|
// which pre-renders this page at build time — and Tiptap's `new Editor()` has
|
|
37
|
-
// no `window` there, so the build fails outright. `'
|
|
38
|
-
//
|
|
39
|
-
// is nothing meaningful to pre-render for a document that arrives over a
|
|
40
|
-
// subscription.
|
|
41
|
-
|
|
37
|
+
// no `window` there, so the build fails outright. `'spa'` skips the prerender
|
|
38
|
+
// and mounts on the client, which is what a collaborative editor wants anyway:
|
|
39
|
+
// there is nothing meaningful to pre-render for a document that arrives over a
|
|
40
|
+
// live subscription.
|
|
41
|
+
//
|
|
42
|
+
// The mode is `'spa'`, not `'client'`. This file said `'client'` — not a valid
|
|
43
|
+
// value, so the page threw `unknown renderMode 'client'` and the template could
|
|
44
|
+
// not be built at all. It survived because nothing ever BUILT a template, and
|
|
45
|
+
// because the test next door pinned the wrong value with a good reason attached.
|
|
46
|
+
export const renderMode = 'spa' as const
|
|
42
47
|
|
|
43
48
|
export const meta = ({ locale }: { readonly locale: string }): PageMeta => ({
|
|
44
49
|
title: getCatalog(locale)['meta.editor.title'],
|
|
@@ -15,18 +15,18 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@effect/platform": "^0.97.0",
|
|
18
|
-
"@voltro/cli": "0.
|
|
19
|
-
"@voltro/client": "0.
|
|
20
|
-
"@voltro/env": "0.
|
|
21
|
-
"@voltro/i18n": "0.
|
|
22
|
-
"@voltro/serverless": "0.
|
|
23
|
-
"@voltro/web": "0.
|
|
18
|
+
"@voltro/cli": "0.57.0",
|
|
19
|
+
"@voltro/client": "0.57.0",
|
|
20
|
+
"@voltro/env": "0.57.0",
|
|
21
|
+
"@voltro/i18n": "0.57.0",
|
|
22
|
+
"@voltro/serverless": "0.57.0",
|
|
23
|
+
"@voltro/web": "0.57.0",
|
|
24
24
|
"effect": "^3.22.0",
|
|
25
25
|
"react": "^19.0.0",
|
|
26
26
|
"react-dom": "^19.0.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@voltro/devtools": "0.
|
|
29
|
+
"@voltro/devtools": "0.57.0",
|
|
30
30
|
"@types/react": "^19.0.0",
|
|
31
31
|
"@types/react-dom": "^19.0.0",
|
|
32
32
|
"jsdom": "^30.0.0",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
import type { FormEvent, ReactNode } from 'react'
|
|
20
20
|
import { useState } from 'react'
|
|
21
|
-
import { island } from '@voltro/web'
|
|
21
|
+
import { island } from '@voltro/web/islands'
|
|
22
22
|
import { CONTACT_ENDPOINT } from '../config'
|
|
23
23
|
|
|
24
24
|
// Every user-facing string the island shows, resolved per-locale by the page.
|
|
@@ -12,17 +12,16 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/
|
|
20
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@voltro/cli": "0.57.0",
|
|
16
|
+
"@voltro/client": "0.57.0",
|
|
17
|
+
"@voltro/env": "0.57.0",
|
|
18
|
+
"@voltro/i18n": "0.57.0",
|
|
19
|
+
"@voltro/web": "0.57.0",
|
|
21
20
|
"react": "^19.0.0",
|
|
22
21
|
"react-dom": "^19.0.0"
|
|
23
22
|
},
|
|
24
23
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.57.0",
|
|
26
25
|
"@types/react": "^19.0.0",
|
|
27
26
|
"@types/react-dom": "^19.0.0",
|
|
28
27
|
"jsdom": "^30.0.0",
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
// segment for it. Here it gives the public pages a marketing header/footer
|
|
6
6
|
// distinct from the dashboard's sidebar shell.
|
|
7
7
|
import type { ReactNode } from 'react'
|
|
8
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
9
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
8
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
10
9
|
import { APP_NAME } from '../../config'
|
|
11
10
|
|
|
12
11
|
const LOCALES = [
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
// can't redirect per-visitor, and the build rejects a RedirectError there.
|
|
11
11
|
import type { ReactNode } from 'react'
|
|
12
12
|
import { RedirectError, useLoaderData, useLocation, type LoaderFn } from '@voltro/web'
|
|
13
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
14
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
13
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
15
14
|
import { APP_NAME } from '../../config'
|
|
16
15
|
import { isSignedIn } from '../../lib/auth'
|
|
17
16
|
|
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/content": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/ui-shadcn": "0.
|
|
21
|
-
"@voltro/web": "0.
|
|
15
|
+
"@voltro/cli": "0.57.0",
|
|
16
|
+
"@voltro/client": "0.57.0",
|
|
17
|
+
"@voltro/content": "0.57.0",
|
|
18
|
+
"@voltro/env": "0.57.0",
|
|
19
|
+
"@voltro/i18n": "0.57.0",
|
|
20
|
+
"@voltro/ui-shadcn": "0.57.0",
|
|
21
|
+
"@voltro/web": "0.57.0",
|
|
22
22
|
"effect": "^3.22.0",
|
|
23
23
|
"react": "^19.0.0",
|
|
24
24
|
"react-dom": "^19.0.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@voltro/devtools": "0.
|
|
27
|
+
"@voltro/devtools": "0.57.0",
|
|
28
28
|
"@types/react": "^19.0.0",
|
|
29
29
|
"@types/react-dom": "^19.0.0",
|
|
30
30
|
"jsdom": "^30.0.0",
|
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/web": "0.
|
|
15
|
+
"@voltro/cli": "0.57.0",
|
|
16
|
+
"@voltro/client": "0.57.0",
|
|
17
|
+
"@voltro/env": "0.57.0",
|
|
18
|
+
"@voltro/i18n": "0.57.0",
|
|
19
|
+
"@voltro/web": "0.57.0",
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"react-dom": "^19.0.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.57.0",
|
|
25
25
|
"@types/react": "^19.0.0",
|
|
26
26
|
"@types/react-dom": "^19.0.0",
|
|
27
27
|
"jsdom": "^30.0.0",
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/ui-shadcn": "0.
|
|
20
|
-
"@voltro/web": "0.
|
|
15
|
+
"@voltro/cli": "0.57.0",
|
|
16
|
+
"@voltro/client": "0.57.0",
|
|
17
|
+
"@voltro/env": "0.57.0",
|
|
18
|
+
"@voltro/i18n": "0.57.0",
|
|
19
|
+
"@voltro/ui-shadcn": "0.57.0",
|
|
20
|
+
"@voltro/web": "0.57.0",
|
|
21
21
|
"react": "^19.0.0",
|
|
22
22
|
"react-dom": "^19.0.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.57.0",
|
|
26
26
|
"@types/react": "^19.0.0",
|
|
27
27
|
"@types/react-dom": "^19.0.0",
|
|
28
28
|
"jsdom": "^30.0.0",
|
|
@@ -12,18 +12,17 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/
|
|
21
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
|
+
"@voltro/cli": "0.57.0",
|
|
17
|
+
"@voltro/client": "0.57.0",
|
|
18
|
+
"@voltro/env": "0.57.0",
|
|
19
|
+
"@voltro/i18n": "0.57.0",
|
|
20
|
+
"@voltro/web": "0.57.0",
|
|
22
21
|
"react": "^19.0.0",
|
|
23
22
|
"react-dom": "^19.0.0"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.57.0",
|
|
27
26
|
"@types/react": "^19.0.0",
|
|
28
27
|
"@types/react-dom": "^19.0.0",
|
|
29
28
|
"jsdom": "^30.0.0",
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
// this runs per request.
|
|
6
6
|
import type { ReactNode } from 'react'
|
|
7
7
|
import { RedirectError, useLoaderData, useLocation, type LoaderFn } from '@voltro/web'
|
|
8
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
9
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
8
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
10
9
|
import { APP_NAME } from '../../config'
|
|
11
10
|
import type { Identity } from '../../lib/api'
|
|
12
11
|
|
|
@@ -12,18 +12,17 @@
|
|
|
12
12
|
"test": "voltro test"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@{{projectName}}/api": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/client": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/i18n": "0.
|
|
20
|
-
"@voltro/
|
|
21
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@{{projectName}}/api": "0.57.0",
|
|
16
|
+
"@voltro/cli": "0.57.0",
|
|
17
|
+
"@voltro/client": "0.57.0",
|
|
18
|
+
"@voltro/env": "0.57.0",
|
|
19
|
+
"@voltro/i18n": "0.57.0",
|
|
20
|
+
"@voltro/web": "0.57.0",
|
|
22
21
|
"react": "^19.0.0",
|
|
23
22
|
"react-dom": "^19.0.0"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
26
|
-
"@voltro/devtools": "0.
|
|
25
|
+
"@voltro/devtools": "0.57.0",
|
|
27
26
|
"@types/react": "^19.0.0",
|
|
28
27
|
"@types/react-dom": "^19.0.0",
|
|
29
28
|
"jsdom": "^30.0.0",
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
// `/login`. It gives the public pages a marketing header distinct from the
|
|
4
4
|
// dashboard's sidebar shell.
|
|
5
5
|
import type { ReactNode } from 'react'
|
|
6
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
7
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
6
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
8
7
|
import { APP_NAME } from '../../config'
|
|
9
8
|
|
|
10
9
|
const LOCALES = [
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
// per-visitor, and the build rejects a RedirectError there.
|
|
7
7
|
import type { ReactNode } from 'react'
|
|
8
8
|
import { RedirectError, useLoaderData, useLocation, type LoaderFn } from '@voltro/web'
|
|
9
|
-
import { T, useLocale, useT } from '@voltro/i18n'
|
|
10
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
9
|
+
import { T, useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
11
10
|
import { APP_NAME } from '../../config'
|
|
12
11
|
import type { Identity } from '../../lib/api'
|
|
13
12
|
|
|
@@ -12,17 +12,16 @@
|
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@voltro/cli": "0.
|
|
16
|
-
"@voltro/client": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/i18n": "0.
|
|
19
|
-
"@voltro/
|
|
20
|
-
"@voltro/web": "0.55.0",
|
|
15
|
+
"@voltro/cli": "0.57.0",
|
|
16
|
+
"@voltro/client": "0.57.0",
|
|
17
|
+
"@voltro/env": "0.57.0",
|
|
18
|
+
"@voltro/i18n": "0.57.0",
|
|
19
|
+
"@voltro/web": "0.57.0",
|
|
21
20
|
"react": "^19.0.0",
|
|
22
21
|
"react-dom": "^19.0.0"
|
|
23
22
|
},
|
|
24
23
|
"devDependencies": {
|
|
25
|
-
"@voltro/devtools": "0.
|
|
24
|
+
"@voltro/devtools": "0.57.0",
|
|
26
25
|
"@types/react": "^19.0.0",
|
|
27
26
|
"@types/react-dom": "^19.0.0",
|
|
28
27
|
"jsdom": "^30.0.0",
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
// chosen language.
|
|
7
7
|
|
|
8
8
|
import type { ReactNode } from 'react'
|
|
9
|
-
import { useLocale, useT } from '@voltro/i18n'
|
|
10
|
-
import { LocaleSwitcher } from '@voltro/ui-shadcn'
|
|
9
|
+
import { useLocale, useT, LocaleSwitcher } from '@voltro/i18n'
|
|
11
10
|
import '../globals.css'
|
|
12
11
|
|
|
13
12
|
const LOCALES = [
|