@ultimat3/admin
Advanced tools
+16
-16
| { | ||
| "name": "@ultimat3/admin", | ||
| "version": "5.0.1", | ||
| "version": "6.0.0", | ||
| "description": "Two dashboards: the /_x framework dev panels and the generated, AI-first app admin", | ||
@@ -35,18 +35,18 @@ "license": "MIT", | ||
| "dependencies": { | ||
| "@ultimat3/action": "5.0.1", | ||
| "@ultimat3/ai": "5.0.1", | ||
| "@ultimat3/cache": "5.0.1", | ||
| "@ultimat3/core": "5.0.1", | ||
| "@ultimat3/db": "5.0.1", | ||
| "@ultimat3/entity": "5.0.1", | ||
| "@ultimat3/i18n": "5.0.1", | ||
| "@ultimat3/jobs": "5.0.1", | ||
| "@ultimat3/mcp": "5.0.1", | ||
| "@ultimat3/money": "5.0.1", | ||
| "@ultimat3/policy": "5.0.1", | ||
| "@ultimat3/query": "5.0.1", | ||
| "@ultimat3/render": "5.0.1", | ||
| "@ultimat3/schema": "5.0.1", | ||
| "@ultimat3/ui": "5.0.1" | ||
| "@ultimat3/action": "6.0.0", | ||
| "@ultimat3/ai": "6.0.0", | ||
| "@ultimat3/cache": "6.0.0", | ||
| "@ultimat3/core": "6.0.0", | ||
| "@ultimat3/db": "6.0.0", | ||
| "@ultimat3/entity": "6.0.0", | ||
| "@ultimat3/i18n": "6.0.0", | ||
| "@ultimat3/jobs": "6.0.0", | ||
| "@ultimat3/mcp": "6.0.0", | ||
| "@ultimat3/money": "6.0.0", | ||
| "@ultimat3/policy": "6.0.0", | ||
| "@ultimat3/query": "6.0.0", | ||
| "@ultimat3/render": "6.0.0", | ||
| "@ultimat3/schema": "6.0.0", | ||
| "@ultimat3/ui": "6.0.0" | ||
| } | ||
| } |
+1
-1
@@ -61,3 +61,3 @@ # @ultimat3/admin ๐ ๏ธ | ||
| export const routes = adminRoutes(admin); // generated views `spa`, custom pages `ssr`, all gated | ||
| export const routes = adminRoutes(admin); // every view `ssr`, gated โ an admin screen is per-actor | ||
| ``` | ||
@@ -64,0 +64,0 @@ |
+1
-1
@@ -17,3 +17,3 @@ // The facts a /_x panel may read: one shape per introspection call. Kept apart from the | ||
| readonly path: string; | ||
| /** `RouteDescriptor.mode` โ `ssr`, `isr`, `static`, `stream`, `spa`. */ | ||
| /** `RouteDescriptor.mode` โ `static`, `isr`, `ssr`, `stream`. */ | ||
| readonly render: string; | ||
@@ -20,0 +20,0 @@ readonly offline: string; |
+13
-9
| // The one bridge from the admin's route table to @ultimat3/render, and the one place a policy | ||
| // is composed onto an admin page. A generated view is `spa`: it is behind auth, so there is | ||
| // nothing to prerender and nothing a CDN may hold โ and `network-only` keeps a stale org's rows | ||
| // out of a service worker cache. A custom page is `ssr`, because its guard runs on the server. | ||
| // is composed onto an admin page. Every admin route is `ssr`: it is behind auth, so its guard runs | ||
| // on the server, there is nothing to prerender and nothing a CDN may hold โ and `network-only` | ||
| // keeps a stale org's rows out of a service worker cache. | ||
@@ -34,3 +34,3 @@ import { t } from '@ultimat3/i18n'; | ||
| * request by `decideAll`, in `crud.ts` for a generated view and in `page-guard.tsx` for a page. | ||
| * An empty list is refused here too: `render: 'spa'` and `'ssr'` would both ship a public shell. | ||
| * An empty list is refused here too: `render: 'ssr'` with no policy is a public dashboard. | ||
| */ | ||
@@ -40,3 +40,2 @@ export function adminRouteConfig(route: AdminRoute): AdminRouteConfig { | ||
| if (permission === undefined) throw new AdminPageUnguardedError({ path: route.path }); | ||
| const custom = route.component !== undefined; | ||
| const policy: RouteGuard = { permission }; | ||
@@ -52,7 +51,12 @@ | ||
| config: defineRoute({ | ||
| // A custom page renders server data behind the guard; a generated view is a shell that | ||
| // fetches through the admin's own gated calls. One mode each, never an author's choice. | ||
| render: custom ? 'ssr' : 'spa', | ||
| // One mode for every admin route, never an author's choice. A generated view was `spa` โ a | ||
| // shell the browser was supposed to fill โ until `spa` was deleted: nothing ever built the | ||
| // client bundle it preloaded and `renderSpa` never read the route's component, so every | ||
| // generated view served an empty `<div id="x-root">`. `ssr` renders the same rows behind the | ||
| // same guard, and the interactive part of a screen arrives as an `island({ src })`, budgeted | ||
| // in real bytes. `hydrate: 'never'` follows from that: an admin view is a pure function of | ||
| // its props (no `createSignal`, no local state), so the page level has nothing to hydrate. | ||
| render: 'ssr', | ||
| offline: 'network-only', | ||
| hydrate: custom ? 'never' : 'idle', | ||
| hydrate: 'never', | ||
| policy, | ||
@@ -59,0 +63,0 @@ meta: () => ({ title: t(route.titleKey) }), |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
296843
0.13%6357
0.06%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated
Updated