Sign In

@ultimat3/admin

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ultimat3/admin - npm Package Compare versions

Comparing version
5.0.1
to
6.0.0
+16
-16
package.json
{
"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"
}
}

@@ -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 @@

@@ -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;

// 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) }),