@rebasepro/app 0.21.0 → 0.21.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/README.md +37 -28
- package/dist/debug.js +5 -5
- package/dist/index.es.js +28 -0
- package/dist/index.es.js.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -9,10 +9,10 @@ pnpm add @rebasepro/app
|
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
ESM-only: `"type": "module"` with no CommonJS build, so it is loaded with
|
|
12
|
-
`import`.
|
|
13
|
-
`require(esm)
|
|
12
|
+
`import`. It needs Node `>=22.22.0` (its `engines` floor), where `require()`
|
|
13
|
+
of it resolves too: Node has supported `require(esm)` since 22.12.
|
|
14
14
|
|
|
15
|
-
**Peer dependencies:** `react
|
|
15
|
+
**Peer dependencies:** `react ^19.2.7`, `react-dom ^19.2.7`, `react-router ^8.3.0`, `typescript ^6.0.0`
|
|
16
16
|
|
|
17
17
|
## What This Package Does
|
|
18
18
|
|
|
@@ -20,9 +20,9 @@ ESM-only: `"type": "module"` with no CommonJS build, so it is loaded with
|
|
|
20
20
|
|
|
21
21
|
- **App bootstrapping** — `Rebase`, `RebaseRouter`, `RebaseRoutes`, `PluginProviderStack`
|
|
22
22
|
- **React contexts** — auth, data driver, storage, snackbar, dialogs, mode, admin mode, role, analytics, customization
|
|
23
|
-
- **Hooks** — data fetching (`useData`, `useCollection`, `useFetch`), data mutation (`
|
|
24
|
-
- **UI components** — `LoginView`, `RebaseAuth`, `ConfirmationDialog`, `ErrorView`, `UserSettingsView`,
|
|
25
|
-
- **Utilities** — icon system,
|
|
23
|
+
- **Hooks** — data fetching (`useData`, `useCollection`, `useFetch`), data mutation (`saveEntityWithCallbacks`, `deleteEntityWithCallbacks`), auth (`useAuthController`), storage, permissions, i18n, and more
|
|
24
|
+
- **UI components** — `LoginView`, `RebaseAuth`, `ConfirmationDialog`, `ErrorView`, `UserSettingsView`, etc.
|
|
25
|
+
- **Utilities** — icon system, entity draft cache, storage upload controller, enums, constants
|
|
26
26
|
- **i18n** — built-in English and Spanish locales via `react-i18next`
|
|
27
27
|
- **Studio Bridge** — shared context for optional CMS↔Studio integration
|
|
28
28
|
|
|
@@ -34,7 +34,7 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
34
34
|
|
|
35
35
|
| Export | Description |
|
|
36
36
|
|---|---|
|
|
37
|
-
| `Rebase` | Root component —
|
|
37
|
+
| `Rebase` | Root component — takes a `client` (plus `authController`, `plugins`, …) and renders its children: `<RebaseCMS>`, `<RebaseStudio>`, `<RebaseShell>` |
|
|
38
38
|
| `RebaseRouter` | Router wrapper for react-router integration |
|
|
39
39
|
| `RebaseRoutes` | Route definitions |
|
|
40
40
|
| `PluginProviderStack` | Wraps children with plugin-provided context providers |
|
|
@@ -45,11 +45,10 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
45
45
|
|---|---|
|
|
46
46
|
| `useData` | Access the data driver from context |
|
|
47
47
|
| `useCollection` | Fetch a collection with filters, pagination, and realtime |
|
|
48
|
-
| `useFetch` | Fetch a single
|
|
48
|
+
| `useFetch` | Fetch a single entity by ID |
|
|
49
49
|
| `useRelationSelector` | Relation field selector state |
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `delete` utilities | Snapshot delete helpers |
|
|
50
|
+
| `saveEntityWithCallbacks` | Save an entity, running the collection's `admin.browserCallbacks` |
|
|
51
|
+
| `deleteEntityWithCallbacks` | Delete an entity, running the collection's `admin.browserCallbacks` |
|
|
53
52
|
|
|
54
53
|
### Hooks — Auth & Permissions
|
|
55
54
|
|
|
@@ -83,7 +82,8 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
83
82
|
|
|
84
83
|
| Export | Description |
|
|
85
84
|
|---|---|
|
|
86
|
-
| `
|
|
85
|
+
| `StudioBridgeProvider` / `StudioBridgeContext` | Bridge context for CMS↔Studio communication |
|
|
86
|
+
| `useStudioCapabilities`, `useStudioSchemaEditing`, … | Read one part of the bridge |
|
|
87
87
|
| `useBridgeRegistration` | Register bridge callbacks (self-assembling) |
|
|
88
88
|
|
|
89
89
|
### Components
|
|
@@ -99,7 +99,6 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
99
99
|
| `UserSettingsView` | User profile settings page |
|
|
100
100
|
| `UserSelectPopover` / `UserDisplay` | User avatar/name display |
|
|
101
101
|
| `LanguageToggle` | i18n language switcher |
|
|
102
|
-
| `BootstrapAdminBanner` | First-user setup banner |
|
|
103
102
|
| `RebaseLogo` | Rebase branding logo |
|
|
104
103
|
|
|
105
104
|
### Contexts
|
|
@@ -107,9 +106,9 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
107
106
|
| Export | Description |
|
|
108
107
|
|---|---|
|
|
109
108
|
| `SnackbarProvider` | Snackbar notification context |
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
112
|
-
| `
|
|
109
|
+
| `ModeControllerContext` / `ModeControllerProvider` | Light/dark mode context |
|
|
110
|
+
| `AdminModeControllerContext` / `AdminModeControllerProvider` | Admin mode context |
|
|
111
|
+
| `EffectiveRoleControllerContext` / `EffectiveRoleControllerProvider` | User role context |
|
|
113
112
|
| `AuthControllerContext` | Auth controller context |
|
|
114
113
|
| `DataDriverContext` | Data driver context |
|
|
115
114
|
| `StorageSourceContext` | Storage source context |
|
|
@@ -122,9 +121,9 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
122
121
|
|
|
123
122
|
| Export | Description |
|
|
124
123
|
|---|---|
|
|
125
|
-
| `
|
|
124
|
+
| `iconsSearch` / `getIcon` | Fuzzy icon search, and an icon element by key |
|
|
126
125
|
| `createFormexStub` | Create a form stub for testing |
|
|
127
|
-
| `
|
|
126
|
+
| `saveEntityToCache` / `getEntityFromCache` | Local-changes backup of unsaved edits (`sessionStorage`) |
|
|
128
127
|
| `useStorageUploadController` | File upload progress controller |
|
|
129
128
|
| `previews` | Preview rendering utilities |
|
|
130
129
|
| `enums` / `constants` | Shared enums and constant values |
|
|
@@ -142,36 +141,46 @@ This package is **framework-agnostic** in the sense that it doesn't depend on an
|
|
|
142
141
|
Available as a separate entry point:
|
|
143
142
|
|
|
144
143
|
```ts
|
|
145
|
-
import {
|
|
144
|
+
import { rebaseCollectionsPlugin, rebaseManualChunks, transformCollectionSource } from "@rebasepro/app/vitePlugin";
|
|
146
145
|
```
|
|
147
146
|
|
|
147
|
+
`rebaseCollectionsPlugin` serves `virtual:rebase-collections`, lazy-loads the
|
|
148
|
+
components a collection names by path, and keeps the server-only `callbacks`
|
|
149
|
+
bodies out of the admin bundle; `transformCollectionSource` is that transform on
|
|
150
|
+
its own, and `rebaseManualChunks` is the admin's `manualChunks` split.
|
|
151
|
+
|
|
148
152
|
## Quick Start
|
|
149
153
|
|
|
150
154
|
```tsx
|
|
151
|
-
import { Rebase,
|
|
155
|
+
import { Rebase, RebaseAuth, useCollection } from "@rebasepro/app";
|
|
156
|
+
import { RebaseCMS, RebaseShell } from "@rebasepro/cms";
|
|
152
157
|
|
|
153
158
|
function App() {
|
|
154
159
|
return (
|
|
155
|
-
<Rebase
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
+
<Rebase client={client} authController={authController}>
|
|
161
|
+
<RebaseAuth />
|
|
162
|
+
<RebaseCMS collections={collections} />
|
|
163
|
+
<RebaseShell title="Rebase" />
|
|
164
|
+
</Rebase>
|
|
160
165
|
);
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
// Inside any child component:
|
|
164
169
|
function ProductList() {
|
|
165
|
-
const { data,
|
|
170
|
+
const { data, dataLoading } = useCollection({
|
|
171
|
+
path: "products",
|
|
172
|
+
collection: productsCollection,
|
|
173
|
+
itemCount: 20
|
|
174
|
+
});
|
|
166
175
|
// ...
|
|
167
176
|
}
|
|
168
177
|
```
|
|
169
178
|
|
|
170
179
|
## Related Packages
|
|
171
180
|
|
|
172
|
-
- [`@rebasepro/cms`](../
|
|
181
|
+
- [`@rebasepro/cms`](../cms) — CMS views, forms, and routing (built on top of this package)
|
|
173
182
|
- [`@rebasepro/ui`](../ui) — Design system components
|
|
174
183
|
- [`@rebasepro/common`](../common) — Shared utilities and collection registry
|
|
175
184
|
- [`@rebasepro/types`](../types) — TypeScript type definitions
|
|
176
|
-
- [`@rebasepro/forms`](../
|
|
185
|
+
- [`@rebasepro/forms`](../forms) — Form state management
|
|
177
186
|
- [`@rebasepro/client`](../client) — HTTP client SDK
|
package/dist/debug.js
CHANGED
|
@@ -3868,8 +3868,8 @@ function UIReferenceView() {
|
|
|
3868
3868
|
/* @__PURE__ */ jsx16("code", { className: "font-mono text-xs", children: "FieldBlock" }),
|
|
3869
3869
|
": 13px, primary ink, muted type icon) and the control is",
|
|
3870
3870
|
" ",
|
|
3871
|
-
/* @__PURE__ */ jsx16("code", { className: "font-mono text-xs", children: "
|
|
3872
|
-
",
|
|
3871
|
+
/* @__PURE__ */ jsx16("code", { className: "font-mono text-xs", children: "large" }),
|
|
3872
|
+
", 48px. A dialog or a standalone control carries its label",
|
|
3873
3873
|
" ",
|
|
3874
3874
|
/* @__PURE__ */ jsx16("em", { children: "inside" }),
|
|
3875
3875
|
" as the floating ",
|
|
@@ -3881,7 +3881,7 @@ function UIReferenceView() {
|
|
|
3881
3881
|
] }),
|
|
3882
3882
|
/* @__PURE__ */ jsxs16("div", { className: "grid grid-cols-12 gap-4", children: [
|
|
3883
3883
|
/* @__PURE__ */ jsxs16("div", { className: "col-span-12 sm:col-span-6", children: [
|
|
3884
|
-
/* @__PURE__ */ jsx16(Typography14, { variant: "caption", color: "secondary", className: "block mb-2 font-mono", children: 'record form \xB7 size="
|
|
3884
|
+
/* @__PURE__ */ jsx16(Typography14, { variant: "caption", color: "secondary", className: "block mb-2 font-mono", children: 'record form \xB7 size="large", label above' }),
|
|
3885
3885
|
/* @__PURE__ */ jsx16("div", { className: "flex flex-col gap-5 mb-6", children: [
|
|
3886
3886
|
["Product name", "Italian coffee maker", "Shown on the storefront and in receipts.", false, false],
|
|
3887
3887
|
["SKU", "SKU-57032", "Stock keeping unit \u2014 unique product identifier", true, false],
|
|
@@ -3892,7 +3892,7 @@ function UIReferenceView() {
|
|
|
3892
3892
|
/* @__PURE__ */ jsx16("span", { className: "truncate", children: label }),
|
|
3893
3893
|
required && /* @__PURE__ */ jsx16("span", { className: "text-red-500 dark:text-red-500 -ml-1", children: "*" })
|
|
3894
3894
|
] }),
|
|
3895
|
-
/* @__PURE__ */ jsx16(TextField3, { size: "
|
|
3895
|
+
/* @__PURE__ */ jsx16(TextField3, { size: "large", value, disabled, onChange: () => {
|
|
3896
3896
|
} }),
|
|
3897
3897
|
help && /* @__PURE__ */ jsx16(Typography14, { variant: "caption", color: "disabled", className: "mt-1.5 ml-0.5 leading-snug", children: help })
|
|
3898
3898
|
] }, label)) }),
|
|
@@ -3908,7 +3908,7 @@ function UIReferenceView() {
|
|
|
3908
3908
|
/* @__PURE__ */ jsx16(TextField3, { size: "small", label: "Small", placeholder: "Placeholder under the label" }),
|
|
3909
3909
|
/* @__PURE__ */ jsx16(TextField3, { size: "smallest", label: "Smallest", value: "Filled value", onChange: () => {
|
|
3910
3910
|
} }),
|
|
3911
|
-
/* @__PURE__ */ jsx16(TextField3, { size: "large", label: "Large", placeholder: "The login screen
|
|
3911
|
+
/* @__PURE__ */ jsx16(TextField3, { size: "large", label: "Large", placeholder: "The login screen" })
|
|
3912
3912
|
] })
|
|
3913
3913
|
] }),
|
|
3914
3914
|
/* @__PURE__ */ jsxs16("div", { className: "col-span-12 sm:col-span-6 flex flex-col gap-4", children: [
|
package/dist/index.es.js
CHANGED
|
@@ -6412,6 +6412,10 @@ var en = {
|
|
|
6412
6412
|
studio_backups_denied_hint: "Nothing is wrong with the project. Listing backups needs an admin connection, and the signed-in account was refused.",
|
|
6413
6413
|
studio_backups_read_failed: "Could not read this project's backups",
|
|
6414
6414
|
studio_backups_downloading: "Downloading…",
|
|
6415
|
+
studio_backups_roles_file: "Roles file",
|
|
6416
|
+
studio_backups_roles_file_hint: "The .globals.sql saved with this backup. It recreates the database roles that the dump's grants and row-level security refer to, and `rebase db restore` reads it from next to the .dump, so keep the two files together.",
|
|
6417
|
+
studio_backups_no_roles_file: "No roles file",
|
|
6418
|
+
studio_backups_no_roles_file_hint: "No .globals.sql was saved with this backup. Restoring it into a new Postgres stops at the first grant to a database role that does not exist there.",
|
|
6415
6419
|
studio_cron_denied_title: "You cannot list this project's cron jobs",
|
|
6416
6420
|
studio_cron_denied_hint: "Nothing is wrong with the project. The cron API is admin-only, and the signed-in account was refused.",
|
|
6417
6421
|
studio_cron_read_failed: "Could not read this project's cron jobs",
|
|
@@ -7424,6 +7428,10 @@ var es = {
|
|
|
7424
7428
|
studio_backups_denied_hint: "El proyecto está bien. Listar copias de seguridad requiere una conexión de administrador, y la cuenta con la sesión iniciada fue rechazada.",
|
|
7425
7429
|
studio_backups_read_failed: "No se han podido leer las copias de seguridad de este proyecto",
|
|
7426
7430
|
studio_backups_downloading: "Descargando…",
|
|
7431
|
+
studio_backups_roles_file: "Archivo de roles",
|
|
7432
|
+
studio_backups_roles_file_hint: "El .globals.sql guardado con esta copia. Recrea los roles de base de datos a los que se refieren los permisos y la seguridad a nivel de fila del volcado, y `rebase db restore` lo lee junto al .dump, así que guarda los dos archivos juntos.",
|
|
7433
|
+
studio_backups_no_roles_file: "Sin archivo de roles",
|
|
7434
|
+
studio_backups_no_roles_file_hint: "Esta copia no tiene ningún .globals.sql. Al restaurarla en un Postgres nuevo, se detiene en el primer permiso concedido a un rol de base de datos que allí no existe.",
|
|
7427
7435
|
studio_cron_denied_title: "No puedes listar las tareas cron de este proyecto",
|
|
7428
7436
|
studio_cron_denied_hint: "El proyecto está bien. La API de cron es solo para administradores, y la cuenta con la sesión iniciada fue rechazada.",
|
|
7429
7437
|
studio_cron_read_failed: "No se han podido leer las tareas cron de este proyecto",
|
|
@@ -8428,6 +8436,10 @@ var de = {
|
|
|
8428
8436
|
studio_backups_denied_hint: "Mit dem Projekt ist alles in Ordnung. Das Auflisten von Sicherungen erfordert eine Admin-Verbindung, und das angemeldete Konto wurde abgelehnt.",
|
|
8429
8437
|
studio_backups_read_failed: "Die Sicherungen dieses Projekts konnten nicht gelesen werden",
|
|
8430
8438
|
studio_backups_downloading: "Wird heruntergeladen…",
|
|
8439
|
+
studio_backups_roles_file: "Rollendatei",
|
|
8440
|
+
studio_backups_roles_file_hint: "Die .globals.sql, die mit dieser Sicherung gespeichert wurde. Sie legt die Datenbankrollen neu an, auf die sich die Berechtigungen und die Sicherheit auf Zeilenebene des Dumps beziehen, und `rebase db restore` liest sie neben der .dump – bewahre beide Dateien zusammen auf.",
|
|
8441
|
+
studio_backups_no_roles_file: "Keine Rollendatei",
|
|
8442
|
+
studio_backups_no_roles_file_hint: "Zu dieser Sicherung wurde keine .globals.sql gespeichert. Eine Wiederherstellung in ein neues Postgres bricht bei der ersten Berechtigung für eine Datenbankrolle ab, die dort nicht existiert.",
|
|
8431
8443
|
studio_cron_denied_title: "Du darfst die Cron-Jobs dieses Projekts nicht auflisten",
|
|
8432
8444
|
studio_cron_denied_hint: "Mit dem Projekt ist alles in Ordnung. Die Cron-API ist nur für Admins, und das angemeldete Konto wurde abgelehnt.",
|
|
8433
8445
|
studio_cron_read_failed: "Die Cron-Jobs dieses Projekts konnten nicht gelesen werden",
|
|
@@ -9432,6 +9444,10 @@ var fr = {
|
|
|
9432
9444
|
studio_backups_denied_hint: "Le projet n'a rien d'anormal. Lister les sauvegardes nécessite une connexion administrateur, et le compte connecté a été refusé.",
|
|
9433
9445
|
studio_backups_read_failed: "Impossible de lire les sauvegardes de ce projet",
|
|
9434
9446
|
studio_backups_downloading: "Téléchargement…",
|
|
9447
|
+
studio_backups_roles_file: "Fichier des rôles",
|
|
9448
|
+
studio_backups_roles_file_hint: "Le .globals.sql enregistré avec cette sauvegarde. Il recrée les rôles de base de données auxquels se réfèrent les autorisations et la sécurité au niveau des lignes du dump, et `rebase db restore` le lit à côté du .dump : gardez les deux fichiers ensemble.",
|
|
9449
|
+
studio_backups_no_roles_file: "Aucun fichier des rôles",
|
|
9450
|
+
studio_backups_no_roles_file_hint: "Aucun .globals.sql n'a été enregistré avec cette sauvegarde. Une restauration dans un nouveau Postgres s'arrête à la première autorisation accordée à un rôle de base de données qui n'y existe pas.",
|
|
9435
9451
|
studio_cron_denied_title: "Vous ne pouvez pas lister les tâches cron de ce projet",
|
|
9436
9452
|
studio_cron_denied_hint: "Le projet n'a rien d'anormal. L'API cron est réservée aux administrateurs, et le compte connecté a été refusé.",
|
|
9437
9453
|
studio_cron_read_failed: "Impossible de lire les tâches cron de ce projet",
|
|
@@ -10436,6 +10452,10 @@ var it = {
|
|
|
10436
10452
|
studio_backups_denied_hint: "Il progetto non ha nulla che non va. Elencare i backup richiede una connessione da amministratore, e l'account connesso è stato rifiutato.",
|
|
10437
10453
|
studio_backups_read_failed: "Non è stato possibile leggere i backup di questo progetto",
|
|
10438
10454
|
studio_backups_downloading: "Download in corso…",
|
|
10455
|
+
studio_backups_roles_file: "File dei ruoli",
|
|
10456
|
+
studio_backups_roles_file_hint: "Il .globals.sql salvato con questo backup. Ricrea i ruoli del database a cui fanno riferimento i permessi e la sicurezza a livello di riga del dump, e `rebase db restore` lo legge accanto al .dump, quindi tieni insieme i due file.",
|
|
10457
|
+
studio_backups_no_roles_file: "Nessun file dei ruoli",
|
|
10458
|
+
studio_backups_no_roles_file_hint: "Con questo backup non è stato salvato nessun .globals.sql. Ripristinarlo in un nuovo Postgres si ferma al primo permesso concesso a un ruolo del database che lì non esiste.",
|
|
10439
10459
|
studio_cron_denied_title: "Non puoi elencare i processi cron di questo progetto",
|
|
10440
10460
|
studio_cron_denied_hint: "Il progetto non ha nulla che non va. L'API cron è riservata agli amministratori, e l'account connesso è stato rifiutato.",
|
|
10441
10461
|
studio_cron_read_failed: "Non è stato possibile leggere i processi cron di questo progetto",
|
|
@@ -11440,6 +11460,10 @@ var hi = {
|
|
|
11440
11460
|
studio_backups_denied_hint: "प्रोजेक्ट में कोई गड़बड़ी नहीं है। बैकअप सूचीबद्ध करने के लिए एडमिन कनेक्शन चाहिए, और साइन-इन किए गए खाते को मना कर दिया गया।",
|
|
11441
11461
|
studio_backups_read_failed: "इस प्रोजेक्ट के बैकअप नहीं पढ़े जा सके",
|
|
11442
11462
|
studio_backups_downloading: "डाउनलोड हो रहा है…",
|
|
11463
|
+
studio_backups_roles_file: "रोल फ़ाइल",
|
|
11464
|
+
studio_backups_roles_file_hint: "इस बैकअप के साथ सहेजी गई .globals.sql। यह वे डेटाबेस रोल फिर से बनाती है जिनका ज़िक्र डंप की अनुमतियाँ और पंक्ति-स्तरीय सुरक्षा करती हैं, और `rebase db restore` इसे .dump के पास से पढ़ता है, इसलिए दोनों फ़ाइलें साथ रखें।",
|
|
11465
|
+
studio_backups_no_roles_file: "कोई रोल फ़ाइल नहीं",
|
|
11466
|
+
studio_backups_no_roles_file_hint: "इस बैकअप के साथ कोई .globals.sql सहेजी नहीं गई। इसे किसी नए Postgres में रिस्टोर करने पर यह पहली ऐसी अनुमति पर रुक जाता है जो किसी ऐसे डेटाबेस रोल को दी गई हो जो वहाँ मौजूद नहीं है।",
|
|
11443
11467
|
studio_cron_denied_title: "आप इस प्रोजेक्ट के क्रॉन जॉब सूचीबद्ध नहीं कर सकते",
|
|
11444
11468
|
studio_cron_denied_hint: "प्रोजेक्ट में कोई गड़बड़ी नहीं है। क्रॉन API केवल एडमिन के लिए है, और साइन-इन किए गए खाते को मना कर दिया गया।",
|
|
11445
11469
|
studio_cron_read_failed: "इस प्रोजेक्ट के क्रॉन जॉब नहीं पढ़े जा सके",
|
|
@@ -12449,6 +12473,10 @@ var pt = {
|
|
|
12449
12473
|
studio_backups_denied_hint: "O projeto não tem nada de errado. Listar cópias de segurança exige uma ligação de administrador, e a conta com sessão iniciada foi recusada.",
|
|
12450
12474
|
studio_backups_read_failed: "Não foi possível ler as cópias de segurança deste projeto",
|
|
12451
12475
|
studio_backups_downloading: "A descarregar…",
|
|
12476
|
+
studio_backups_roles_file: "Ficheiro de funções",
|
|
12477
|
+
studio_backups_roles_file_hint: "O .globals.sql guardado com esta cópia. Recria as funções da base de dados a que se referem as permissões e a segurança ao nível da linha do dump, e o `rebase db restore` lê-o ao lado do .dump, por isso mantenha os dois ficheiros juntos.",
|
|
12478
|
+
studio_backups_no_roles_file: "Sem ficheiro de funções",
|
|
12479
|
+
studio_backups_no_roles_file_hint: "Esta cópia não tem nenhum .globals.sql. Restaurá-la num Postgres novo para na primeira permissão concedida a uma função da base de dados que lá não existe.",
|
|
12452
12480
|
studio_cron_denied_title: "Não pode listar as tarefas cron deste projeto",
|
|
12453
12481
|
studio_cron_denied_hint: "O projeto não tem nada de errado. A API de cron é apenas para administradores, e a conta com sessão iniciada foi recusada.",
|
|
12454
12482
|
studio_cron_read_failed: "Não foi possível ler as tarefas cron deste projeto",
|