Meta tags:
description= The source code contains no comments, so the reasons behind non-obvious choices are recorded here. Each note names the file where the choice lives.;
Headings (most frequently used words):
the, and, its, name, in, on, are, to, generated, resource, not, is, sign, app, init, ui, supabase, pages, own, hasdefault, never, table, key, by, material, time, date, number, one, per, from, pidrang, layers, signed, out, demo, apps, throws, an, field, readonly, nullable, as, resourceform, timestamp, numeric, stay, text, each, columns, graphql, list, order, names, checked, before, demos, only, first, new, opens, page, design, notes, guide, reference, maintainers, core, cli, routing, injectauthprovider, error, injectresource, unknown, injectresourcelist, accepts, reactive, replace, based, exclusion, casts, create, update, every, needs, id, primary, contains, uses, imatch, ilike, looks, up, fields, runtime, warn, color, or, layer, has, selector, prefix, identified, position, scrolls, inside, container, long, value, stays, line, remounted, record, reused, introspecting, through, three, schema, providers, split, same, way, detected, strategy, extent, can, see, them, default, chosen, when, resources, ts, unsupported, left, mapped, against, rest, api, guessed, connection, settings, any, request, copy, load, lazily, navigation, layout, side, menu, hides, narrow, screens, link, points, path, provides, checks, everything, it, writes, anything, wizard, asks, for, url, defaults, service, role, publishable, secret, keys, legacy, kept, aliases, wires, itself, scripted, takes, answers, file, credentials, environment, offers, install, packages, after, writing, whose, tables, need, user, route, matters, action, flags, guard, routes, price, total, keep, no, save, lock, keeps, running, saves, with, 30, second, timeout, runs, at, release, gate, owns, servers, database, local,
Text of the page (most frequently used words):
the (1186), and (406), not (180), app (177), that (167), with (147), resource (122), its (118), page (114), only (111), table (102), are (93), when (84), for (80), one (79), src (78), sign (76), pidrang (74), column (73), file (72), from (71), field (70), init (67), #generated (65), every (64), run (64), #create (60), same (59), libs (59), key (57), lib (57), which (56), edit (54), cli (53), supabase (53), does (53), own (53), demo (51), never (51), layout (50), without (49), list (48), still (48), would (48), pages (48), default (47), resources (46), new (44), before (44), value (44), type (44), read (43), material (42), user (42), route (42), name (42), out (41), provider (40), what (39), each (39), has (38), routes (38), already (37), since (35), form (35), first (34), any (34), both (33), writes (33), apps (32), tailwind (32), cannot (32), error (32), nothing (32), this (31), keeps (31), time (31), save (31), reads (30), instead (30), schema (30), can (29), left (29), there (29), path (28), written (28), angular (27), plan (27), null (27), after (27), now (26), then (26), them (26), state (26), way (25), session (24), numeric (24), connection (24), text (24), second (23), see (23), whose (23), core (23), json (22), database (22), answers (22), because (22), through (22), into (22), stays (22), columns (22), menu (22), they (21), than (21), shows (21), names (21), once (21), guard (21), hasdefault (21), number (21), role (21), empty (21), postgrest (21), runs (20), other (20), must (20), kept (20), too (20), was (20), postgres (20), strategy (20), graphql (20), fields (20), date (20), test (19), leaves (19), comment (19), while (19), write (19), again (19), message (19), build (18), actions (18), url (18), checked (18), project (17), environment (17), files (17), signed (17), gets (17), tables (17), untouched (17), wizard (17), next (16), needs (16), navigation (16), change (16), two (16), later (16), says (16), but (16), shared (16), identity (16), required (16), used (16), below (16), config (15), server (15), call (15), request (15), generate (15), line (15), delete (15), changes (15), html (15), row (14), against (14), local (14), hand (14), checks (14), like (14), back (14), per (14), component (14), auth (14), above (14), export (14), therefore (14), string (14), syntax (14), record (14), hidden (14), else (14), data (14), service (14), nullable (14), readonly (14), open (13), bundle (13), version (13), inside (13), missing (13), rather (13), button (13), lock (13), show (13), may (13), refused (13), bigint (13), demos (12), itself (12), real (12), even (12), root (12), signal (12), adds (12), takes (12), edited (12), spec (12), payload (12), array (12), pg_graphql (12), screen (12), touched (12), host (12), width (12), resourceform (12), input (12), secret (11), exists (11), gate (11), packages (11), full (11), starts (11), refuses (11), failure (11), all (11), stops (11), added (11), asks (11), until (11), sync (11), holds (11), sees (11), always (11), note (11), created_at (11), anon (11), forms (11), running (10), fails (10), private (10), failed (10), installed (10), means (10), typescript (10), add (10), named (10), counts (10), existing (10), literal (10), template (10), use (10), opens (10), writing (10), fail (10), timestamp (10), link (9), visitor (9), lists (9), install (9), npm (9), node (9), package (9), release (9), reason (9), answer (9), set (9), those (9), earlier (9), wrote (9), content (9), question (9), alone (9), imports (9), shown (9), otherwise (9), false (9), stay (9), action (9), single (9), where (9), pattern (9), just (9), block (9), client (9), placeholder (9), keys (9), types (9), cell (9), layers (9), consumer (8), sets (8), comes (8), optional (8), could (8), goes (8), reported (8), providepidrang (8), code (8), follows (8), changed (8), anything (8), let (8), bound (8), import (8), such (8), check (8), created (8), typed (8), order (8), exactly (8), precision (8), accepts (8), guarded (8), unavailable (8), matches (8), theme (8), layer (8), direct (8), element (8), container (8), insert (8), overflow (8), stack (7), redirect (7), non (7), either (7), end (7), settles (7), started (7), saved (7), generates (7), uses (7), also (7), under (7), yet (7), found (7), providesigninpath (7), declares (7), about (7), whether (7), helpers (7), carries (7), covers (7), entry (7), true (7), store (7), sent (7), router (7), take (7), should (7), exist (7), integer (7), three (7), generic (7), color (7), fixed (7), off (7), document (7), throws (7), target (7), get (7), made (7), jwt (7), object (7), const (7), overlay (7), wide (7), writable (7), dirty (7), public (6), publishable (6), sb_publishable_ (6), their (6), welcome (6), tests (6), live (6), did (6), compile (6), need (6), exact (6), copied (6), outside (6), points (6), came (6), disabled (6), known (6), provides (6), authprovider (6), none (6), have (6), buttons (6), waiting (6), reports (6), replaced (6), edits (6), silently (6), keep (6), limit (6), know (6), renders (6), whole (6), returns (6), submit (6), match (6), policy (6), sends (6), prints (6), choice (6), pnpm (6), printed (6), whatever (6), errors (6), inputs (6), parsed (6), byte (6), probe (6), breakpoint (6), max (6), update (6), primary (6), actually (6), seed (6), level (5), security (5), repository (5), mode (5), readable (5), over (5), browser (5), success (5), who (5), another (5), components (5), load (5), everything (5), why (5), source (5), index (5), styles (5), being (5), hold (5), across (5), accepted (5), leave (5), lives (5), hint (5), here (5), make (5), fieldtype (5), rules (5), anonymous (5), signedout (5), click (5), status (5), rule (5), rename (5), products (5), openapi (5), select (5), tree (5), setup (5), breaks (5), built (5), notes (5), top (5), legacy (5), visible (5), warn (5), gives (5), works (5), wrong (5), defaults (5), application (5), strings (5), included (5), becomes (5), long (5), scrolls (5), header (5), wraps (5), mat (5), side (5), window (5), query (5), leaving (5), unsupported (5), format (5), prisma (5), sending (5), updatedat (5), model (5), native (5), regex (5), flag (4), start (4), removed (4), longer (4), starter (4), signing (4), lands (4), 2026 (4), resolves (4), reading (4), blocks (4), tools (4), visit (4), older (4), went (4), last (4), tab (4), seconds (4), reload (4), drops (4), caller (4), steps (4), current (4), finds (4), ones (4), place (4), makes (4), derived (4), follow (4), break (4), outcome (4), behind (4), result (4), hide (4), event (4), soon (4), case (4), timeout (4), including (4), loaded (4), constant (4), send (4), price (4), values (4), these (4), decimal (4), providers (4), double (4), declared (4), hides (4), say (4), function (4), rendered (4), reaches (4), layouts (4), inject (4), enabled (4), registered (4), offers (4), copy (4), more (4), come (4), pass (4), asked (4), depend (4), rows (4), questions (4), available (4), turns (4), invalid (4), quotes (4), definition (4), right (4), outlet (4), comments (4), rest (4), count (4), providerouter (4), api (4), sb_secret_ (4), how (4), had (4), blank (4), child (4), stop (4), parse (4), plain (4), detected (4), narrow (4), dark (4), system (4), main (4), 48rem (4), rendering (4), four (4), lost (4), supported (4), non_null (4), returning (4), css (4), selector (4), buildresourcepayload (4), undefined (4), design (4), releasing (3), previous (3), hosted (3), meant (3), supabasepublishablekey (3), valid (3), environments (3), old (3), fixtures (3), wired (3), playwright (3), unit (3), passed (3), startup (3), budget (3), showed (3), peer (3), node_modules (3), artifacts (3), port (3), share (3), serve (3), account (3), saves (3), cleared (3), late (3), safe (3), script (3), plus (3), injector (3), getidentity (3), injectauthsession (3), knows (3), ask (3), alongside (3), keeping (3), exits (3), yes (3), credentials (3), separate (3), succeeds (3), removes (3), keyed (3), opened (3), finished (3), allowed (3), explanation (3), specific (3), dataprovider (3), render (3), condition (3), seen (3), draft (3), land (3), reference (3), total (3), neither (3), unchanged (3), apply (3), further (3), data_type (3), treats (3), purpose (3), canmatchsignedin (3), changing (3), arrives (3), unknown (3), omitted (3), segment (3), settings (3), login (3), policies (3), least (3), introspection (3), passes (3), 129 (3), marked (3), view (3), gone (3), decides (3), yarn (3), folder (3), range (3), fresh (3), appsetup (3), support (3), listed (3), variables (3), messages (3), lines (3), title (3), listing (3), became (3), matching (3), adding (3), point (3), dashboard (3), your (3), warning (3), prompts (3), mistake (3), http (3), extension (3), ctrl (3), between (3), style (3), trailing (3), reused (3), property (3), exported (3), binding (3), rejects (3), resolved (3), push (3), labels (3), parses (3), token (3), relative (3), segments (3), serializer (3), injectauthprovider (3), escape (3), close (3), 390 (3), position (3), toolbar (3), links (3), capped (3), screens (3), wider (3), closed (3), applayout (3), module (3), variant (3), sources (3), shape (3), enum (3), boolean (3), jsonb (3), sort (3), defaultsorters (3), trigger (3), alter (3), label (3), insertinput (3), stored (3), bare (3), editable (3), day (3), split (3), maps (3), timestamptz (3), enough (3), edges (3), instance (3), 12rem (3), viewport (3), span (3), prefix (3), happens (3), fielderror (3), exception (3), pre (3), past (3), blocking (3), blocked (3), attached (3), runtime (3), search (3), ilike (3), contains (3), refine (2), ignored (2), projects (2), were (2), e2e (2), workspace (2), installs (2), tarballs (2), loading (2), staff_notes (2), mjs (2), generation (2), identities (2), properties (2), dependency (2), tested (2), deleting (2), ships (2), requests (2), reloaded (2), owns (2), enter (2), signs (2), flight (2), released (2), home (2), ran (2), elsewhere (2), attempt (2), dropped (2), injection (2), calling (2), onsessionchange (2), linkedsignal (2), params (2), rewritten (2), calls (2), step (2), opt (2), inlines (2), common (2), errorhandler (2), settimeout (2), settling (2), directly (2), visits (2), finishes (2), return (2), effect (2), earliersave (2), twice (2), recorded (2), done (2), locked (2), saying (2), custom (2), ends (2), pending (2), someone (2), collected (2), reserved (2), expected (2), give (2), map (2), carry (2), today (2), information_schema (2), lets (2), visitors (2), states (2), describes (2), control (2), signinlink (2), handler (2), loadcomponent (2), reloads (2), entries (2), cases (2), sessionpending (2), redirects (2), flags (2), authorization (2), paths (2), resource_routes_snippet (2), matters (2), grants (2), applies (2), readsneedsignin (2), given (2), extended (2), marks (2), needing (2), front (2), rerun (2), 125 (2), exports (2), schematic (2), git (2), decide (2), packagemanager (2), network (2), commands (2), warns (2), agnostic (2), pinned (2), work (2), choices (2), repeatable (2), secrets (2), part (2), parser (2), connectionfromplan (2), scripted (2), nor (2), development (2), except (2), replacing (2), some (2), several (2), ranges (2), withcomponentinputbinding (2), constants (2), ref (2), paste (2), 107 (2), missed (2), wires (2), wire (2), supabaseanonkey (2), receives (2), argument (2), wins (2), pasted (2), serves (2), asking (2), starting (2), unreachable (2), 200 (2), tried (2), cost (2), cloud (2), rejected (2), 401 (2), sits (2), requiring (2), receive (2), spread (2), during (2), 130 (2), depends (2), quote (2), aside (2), turned (2), appended (2), 131 (2), literals (2), comma (2), certain (2), alias (2), includes (2), anywhere (2), inferred (2), widens (2), templates (2), grows (2), endings (2), nocheck (2), composite (2), transpilemodule (2), tsconfig (2), find (2), skip (2), standalone (2), routing (2), identical (2), overwritten (2), href (2), boundary (2), routerlink (2), urltree (2), closes (2), middle (2), height (2), fallback (2), taller (2), scroll (2), shrink (2), ellipsis (2), scheme (2), canvas (2), themes (2), surface (2), display (2), disagree (2), tap (2), focus (2), keyboard (2), listener (2), phone (2), moment (2), matchmedia (2), creates (2), shell (2), imported (2), chosen (2), initial (2), password (2), reach (2), mappers (2), mapper (2), scalars (2), kinds (2), describetable (2), uuid (2), describe (2), createdat (2), fills (2), decision (2), 168 (2), fix (2), audit (2), clock (2), word (2), others (2), fixture (2), wrapped (2), although (2), reuses (2), independent (2), response (2), looks (2), expr (2), is_nullable (2), is_identity (2), column_default (2), identity_generation (2), is_generated (2), emits (2), losing (2), unquoted (2), behavior (2), serializes (2), bigfloat (2), int8 (2), lookup (2), int64 (2), smallint (2), zone (2), populated (2), oftype (2), wrapper (2), collection (2), constructed (2), auto (2), cells (2), cap (2), 20rem (2), reader (2), align (2), white (2), space (2), nowrap (2), inline (2), projected (2), focusable (2), resourcetable (2), region (2), div (2), using (2), collide (2), adapter (2), coexistence (2), showing (2), defaultvalueforfield (2), absent (2), though (2), box (2), genuinely (2), partial (2), typing (2), patch (2), shouldblocksubmit (2), attribute (2), validation (2), ctx (2), validators (2), callback (2), dynamic (2), reactive (2), applyeach (2), ever (2), parsing (2), amount (2), casts (2), imatch (2), differently (2), cast (2), replace (2), authentication (2), maintainers (2), getting (2), mit, licensed, inspired, affiliated, pager, github, ship, browsers, limited, unmodified, contributor, requires, containers, scanners, 127, toml, looked, heading, served, smoke, consumers, stopped, exceeded, workflows, crashes, dependencies, records, edgesout, vitest, resolve, unnoticed, sha256, checking, publishing, prove, bytes, verify, 4310, 4311, 4320, 4321, 4322, 4323, reuse, 4200, loopback, hosts, worker, reuseexistingserver, servers, submits, natively, disables, successful, ins, prevents, pulled, away, clears, early, reloading, injectsignin, sign_in_state, subscribed, unsubscribed, destroy, helper, themselves, latest, refresh, numbers, been, undone, bootstrapapplication, session_identity, importing, 156, caught, recognized, overwrites, binds, exiting, signinpage, unless, wants, demand, signin, 112, class, little, derive, unescaped, 177, plansignin, rethrows, turn, unlock, newer, injectsavelock, within, failures, disappears, times, limits, operation, settled, exposing, learns, ended, seeing, notice, shipped, hiding, expired, delivers, tick, provided, lazy, user_updated, cancelled, races, timer, applied, finally, retry, forever, legitimately, fetch, save_store, safety, net, exceeds, digits, represents, risk, unconditionally, scale, join, undetected, treated, unsafe, safer, inconsistency, candidate, deliberately, migrations, 20260914123253_create_demo_tables, sql, 163, declare, measure, protected, urlneedssignin, expires, displayed, disappear, registers, recovers, contract, signature, complete, loadchildren, weakmap, children, frame, offered, computes, expose, candelete, canedit, cancreate, fall, clashes, skiplocationchange, resource_unavailable_path, canmatch, patterns, captured, grant, permissive, granted, restrictive, deciding, expression, evaluated, catalog, guards, pg_class, relrowsecurity, emitted, unguarded, convenience, information, covered, admits, guarding, opening, canmatchresourceaction, authenticated, signedinresources, addsignedinguard, enables, selects, 145, candidates, touch, show_lists, isresourceactionenabled, poor, down, existingentryactions, declaresentryroute, isnewapp, undo, present, manager, lockfiles, searched, stray, lockfile, directory, plug, play, useful, registry, notices, installing, engines, bin, bring, picks, fits, pages_ui_layer_packages, sorted, modes, gained, problem, committed, repeat, overwrite, configuration, mirroring, filereplacements, recognizes, queryselector, safely, configs, something, customized, prepends, strips, rebuilds, accumulate, ng5002, appconfig, regular, expressions, positions, idempotent, features, concrete, memory, access, snippets, acceptance, manual, snippet, put, resourceroutes, xxx, migration, connect, framework, picked, 119, recommended, env, secret_key, prefixes, directions, service_role, working, stderr, console, migrates, renaming, widened, anonkey, pidrang_supabase_service_role_key, pidrang_supabase_anon_key, hands, worked, 124, pidrang_supabase_secret_key, pidrang_supabase_publishable_key, aliases, preference, pooler, supabaseappsetup, likeliest, sit, relied, refuse, verified, dns, prefilled, costs, less, become, kind, enable, continue, refusal, prompt, supabaseconnectionerror, pgrst202, listtables, answered, typical, told, pick, 121, third, whichever, 143, authroutes, param, folders, half, disk, job, force, lose, locks, regenerates, compares, formatter, switched, having, decided, joins, naming, askreadsneedsignin, recognize, taken, indentation, output, avoids, selection, computed, assertion, overlap, referenced, nowhere, diagnostics, commented, certainly, destructured, separated, winning, merges, declarations, assigns, tell, assignment, program, tuple, fit, option, forced, raise, occurrence, handled, instructions, expect, ignore, strictnullchecks, incremental, differs, pidrangconfig, options, defaultconfiguration, var, appresource, gettrailingcommentranges, generateresourcesfile, existed, got, mix, together, afterwards, assuming, lays, classified, ignoring, windows, different, meanwhile, saving, short, concurrent, applywriteplan, sourceroot, preflight, users, linking, unlike, malformed, breaking, external, urls, surrounding, spaces, clear, serializing, refusals, well, formed, dot, decoding, validated, piece, following, urlserializer, defaulturlserializer, sign_in_path, provide, shift, moving, auxclick, grid, 56px, 600px, 64px, density, reachable, background, transparent, widening, spacing, rem, font, size, area, sideways, pushes, words, sys, contents, thinks, ignores, clicks, toggles, shadow, resize, resized, pressed, jsdom, mediaquerylist, defaultview, composedpath, beforeeach, testbed, overridecomponent, remove, schemas, custom_elements_schema, injectresources, injectauthsessionstate, unused, ng8113, routeroutlet, appname, around, often, decorator, difference, barrel, besides, brings, 691, 500, modules, anyway, budgets, lazily, rewrites, published, parity, validate, 65535, slashes, trimmed, newline, tls, verifies, certificate, certificates, repeats, nan, abc, createsupabaseschemaprovider, assert, problems, capital, letter, renamed, lowercase, rls, advice, trusted, mutations, offer, 42501, 403, 42703, 404, invoices, inflect_names, guessed, arrays, enums, defined, harmless, refusing, subset, opaque, udt_name, assertpostgrestfield, inet, interval, bytea, citext, mapped, random, ago, 111, sorter, many, inserted_at, managed, usually, triggers, stores, discarded, admin, insertable, suggesting, defaultsvisible, invites, splits, lower, upper, capitalizes, lowercases, items, fixture_items, updated_at, publishes, affected, gaps, accept, guess, marker, assumed, assumption, mean, trusting, things, print, most, definitions, description, queried, explicit, distinction, whenever, posted, guessing, hardcoded, 22007, introspecttable, extent, expects, risks, rounds, treating, rounding, claimed, rely, to_json, fold, float, agree, integers, floats, originally, groups, scalar, versions, spellings, int32, serial, datetime, time_formats, timestamp_formats, timetz, recursive, depth, cover, margin, walks, unwrapobjecttype, exposes, relay, reaching, requested, unwrap, edge, interface, __type, nodeid, introspecting, matched, regardless, survives, initializer, lifetime, navigating, editing, product, recreating, iterates, destroys, recreates, patching, track, orders, equivalents, remounted, sizes, honour, few, thousand, characters, tall, cut, growing, held, 1280, pointer, move, wrap, truncate, vertical, min, overflowed, 711, 611, scroller, pane, took, belongs, boxes, axe, cause, scrollable, aria, tabindex, 100, identifies, called, duplicate, internal, announces, matcolumndef, identified, adapters, ng8023, enforced, lint, library, future, libraries, builder, directive, eslint, ordinary, misleadingly, suggest, opposite, fieldhint, trimming, much, described, paragraph, bug, chose, asymmetry, special, casing, combination, entirely, apart, violation, produces, body, emitting, legitimate, cosmetic, normalization, serialize, lossy, filters, trust, filtered, unfiltered, able, accident, unchecked, absence, saw, touppercase, stringify, emit, onsubmit, dependent, unrelated, method, fieldstate, markastouched, catch, emptied, vacuously, allow, raw, precisely, tells, omit, dirties, clearing, deliberate, validator, dirtied, converts, fieldrequiresvaluewhenempty, loop, synchronously, attaches, validates, ng0950, chooses, inspecting, dom, subsequent, keystroke, reproducing, loss, avoid, similarly, logged, represent, documented, failing, fixes, building, coerces, kicks, normalizeresourcevalue, ng01921, loses, round, trips, moved, group, tightened, calendar, bounds, hour, minute, month, digit, english, 2024, 99t99, formatpatternforfield, presentation, compatible, palette, scoped, red, scss, fieldtree, character, literally, wildcards, insensitive, metacharacter, escaped, conformance, btree, scans, large, trigram, pg_trgm, gin, gin_trgm_ops, filter, intentional, scope, oversight, getone, unify, unconstrained, narrowest, compiles, removing, properly, hardcode, express, worth, separately, metadata, produced, eligibility, consumed, final, non_editable_fields, based, exclusion, callers, signals, depending, example, parameter, skips, convention, getlist, injectresourcelist, typo, site, confusing, somewhere, throw, injectresource, configures, injects, letting, hit, silent, configured, auth_provider, reasons, obvious, overview, architecture, yourself, guide, sidebar, docs,
Text of the page (random words):
d the table must be one the connection lists its name must work as a route at least one action no action the table cannot support a hidden field must be one of the fields that are kept actions and hidden fields are sorted the way the wizard returns them and tables follow the order the provider lists them in the same choices therefore give the same resources ts in both modes actions are required the wizard checks every available action by default but a plan that silently gained an action when the schema changed would not be repeatable pidrang init offers to install the packages after writing apps pidrang cli src install packages ts node version ts run cli ts appsetup packages the generated code imports pidrang core the provider s packages and the ui layer so a fresh app does not build until they are installed the list comes from the provider appsetup packages and from the pages bundle pages_ui_layer_packages never from the bin so pidrang cli stays provider agnostic and a tailwind bundle can bring its own list the pidrang packages are pinned to the version of the cli because the generated pages and helpers are written for that version angular material goes through ng add which picks a version that fits the installed angular and sets up a theme the install runs after the files are written files that are already in place stay useful when the network or the registry fails and the exact commands are printed instead a failed install exits with 1 so ci notices plan never installs it asks no question and installing is a change to the app that a ci run should opt into by running the printed commands node js is checked before anything else against the engines range since npm only warns about it and a test keeps the two in sync a second run must not undo what the app already set up running the material schematic again would ask its questions again and may add a theme next to the app s own a package counts as present when package json declares it and node_modules holds it and an pidrang one only at the version of the cli the package manager follows what the angular cli itself reads cli packagemanager then packagemanager then lockfiles up to the git root so an app inside a pnpm or yarn workspace is not installed with npm outside a git repository only the app folder is searched so a stray lockfile in a home directory does not decide with yarn plug n play there is no node_modules so every package counts as missing yarn add runs again which changes nothing and so does ng add angular material which asks its questions again a new app opens on its first list apps pidrang cli src edit app routes ts isnewapp declaresentryroute entry redirect ts edit resources ts existingentryactions run cli ts ng new leaves on an empty view once the welcome template is gone so a new app showed nothing until the user typed a resource url 125 init now redirects to the first generated page but only on a new app an app routes ts that exports an empty routes array and an app html that still holds the welcome template an app with its own routes decides what it opens on so init only prints the redirect line there and not even that when app routes ts already declares a route without typescript the empty array and the route are found with a pattern instead of the syntax tree the target is the list of the first table that has one and the create page of the first table that has one only when no table has a list a form is a poor first screen when a list exists further down tables keep the order the provider lists them in the pages that exist are the ones resources ts enables at the end of the run not the answers a resource already in the file is kept as it is so a kept name products list false has no list even when this run selects one and products would show resource unavailable 145 the choice therefore reads list and create from each kept resource like isresourceactionenabled does omitted or true is on false is off and takes the answers only for the tables this run adds only the tables of this run are candidates in the same order a resource of the file that this run does not touch is never the target a flag that is not a literal list show_lists or a table that is not in the file after the run resources ts could only get a pidrang comment on this run or on a rerun before the change is made leaves the choice open when no earlier table settles it init then adds no redirect and says why with the line to write the message an app with its own routes gets follows the same choice when those reads need a signed in user the routes of that table are guarded instead see a new app whose tables need a signed in user opens on the sign in page a new app whose tables need a signed in user opens on the sign in page libs demo shared src lib can match signed in ts addsignedinguard in libs cli src lib generate pages bundle ts signedinresources in apps pidrang cli src run cli ts readsneedsignin in libs cli supabase src lib postgres schema provider ts wizard ts init plan ts a table whose select policy only admits authenticated reads comes back empty or refused to the anonymous visitor a new app starts as so the app opened on a table with no rows 129 the redirect from to the first list stays as it is what changes is the route of a table marked as needing a signed in user which gets canmatchsignedin in front of canmatchresourceaction then resolves through the redirect into a route whose guard sends a signed out visitor to the sign in path and the sign in page s own navigation to lands on the first list once the user is signed in guarding per table rather than the whole app keeps a public table opening for a signed out visitor next to a private one the names are written into resource routes ts at generation time rather than read at run time the app s resource list carries no policy information and a browser cannot read policies a table added later is covered only when the file is rewritten the guard lives in the copied helpers not in pidrang core which must not depend on the router for the reason given in the sign in link points only to a path the app provides it is emitted only on a new app whose run writes the sign in page since a guard without a page sends the visitor to a route that does not exist and later extended on a second run when resource routes ts is still the guarded file init wrote see pidrang init checks everything before it writes anything the wizard asks about reads only after the sign in question and a plan that marks tables private without writing a page prints which tables stay unguarded and why it reads the identity with authprovider getidentity and passes every navigation through when the app provides no sign in path or no auth provider when that call throws and for a name it does not list it is a convenience not authorization which stays with row level security the database strategy answers per table from pg_class relrowsecurity the select policies for the anonymous role and the table grant anon must hold select on the table since a policy grants nothing on its own and then row security off or at least one permissive policy granted to anon or to public the 0 role array with no condition and no restrictive policy means readable anything else means private a policy with a condition of its own counts as private even when an anonymous visitor would pass it deciding otherwise needs the expression evaluated against the data not the catalog read and an app that opens on an empty list is the failure this guards against the secret key strategy only has postgrest s openapi document and graphql only pg_graphql s introspection neither of which shows policies so they take the answer from the wizard question asked once on a new app when the provider has none or from readsneedsignin in a plan it applies to every table of the run the answer is not written into resources ts it changes where the app opens not the schema route order matters apps demo material src app app routes ts apps demo tailwind src app app routes ts resource_routes_snippet in libs cli src lib generate pages bundle ts angular matches routes in order and resource matches any single segment more specific patterns resource create resource id edit must come before resource id and resource and fixed paths such as login must come before resource or they are captured by it action flags guard the resource routes libs demo shared src lib can match resource action ts its generated copy in libs cli src lib generated pages ts resource list create show edit and delete default to enabled when omitted each resource route has a canmatch guard for a segment that is not a registered resource the guard returns false so an app route declared after the resource routes such as settings can still match for a registered resource whose action is disabled it redirects to resource_unavailable_path resource unavailable with skiplocationchange so products create with create false does not fall through to the show route with create as an id the path lives in one constant so an app can rename it if it clashes with its own routes flags control what the ui offers they are not authorization which stays with row level security signed out pages libs demo shared src lib auth session state ts guarded resources ts inject signed in resources ts url needs sign in ts resource list state ts resource create state ts resource edit state ts the layouts of both demos the rules live in the shared states not in the pages resource list state computes cancreate canedit and candelete and resource create state and resource edit state expose signedout and sessionpending the pages pidrang init writes are copied from apps demo material so a rule written once reaches the demo and every generated app signedout the identity is null or its read failed and sessionpending the identity is still unknown are separate so a signed in user who reloads a create or edit page never sees the sign in message even for a frame the write buttons and the create x menu entries are hidden in both cases because an action is only offered once the session is known and open the message is shown for signedout only the submit handler refuses on signedout alone while the session is pending the form is not rendered so there is nothing to submit the message is a state not an error role status and no error color a visitor who arrives without a session is not in a failure case the guarded resources are found by reading router config routes and children both canmatchsignedin registers its list in a weakmap whose key is the guard function it returns so the layout recovers the names without changing the resource contract or the guard signature routes loaded with loadchildren are not read the cli only generates loadcomponent routes when nothing is found the menu stays complete which is what an app without a guard needs the redirect after sign out runs in the button handler not in a router effect a session that expires without a click on sign out leaves the page displayed until the next navigation the write actions disappear as soon as the session changes and the next navigation to a guarded resource or to a create or edit page lands on the sign in message or page so the limit is accepted urlneedssignin treats any create or edit page as protected even for a resource that is not in canmatchsignedin those pages serve no purpose without a session a list page counts only when its resource is guarded so signing out from a public list leaves the visitor there the names say what they measure signedout describes the session signinlink describes the link the layout renders signinlink is null without an auth provider or without a sign in path so such an app shows no sign in control and keeps its whole menu known limit of 0 1 1 an app whose auth provider lets anonymous visitors write now hides those actions from them too because the states only know whether someone is signed in not whether a resource accepts anonymous writes 163 0 2 0 lets each resource declare the actions that need a session demo apps price and total stay number and keep no hasdefault libs demo shared src lib demo resources ts pidrang supabase supabase migrations 20260914123253_create_demo_tables sql both columns are declared numeric 10 2 not null default 0 which makes them a candidate for fieldtype numeric and hasdefault true by the rules above but demo resources ts keeps them number with no hasdefault deliberately numeric 10 2 never exceeds 8 integer digits and 2 decimal ones which a double represents exactly the precision risk numeric exists for does not apply here the three schema providers still map every postgres numeric decimal column to fieldtype numeric unconditionally because information_schema columns data_type does not carry precision or scale without a further join they do not do today so a generic undetected column is treated as unsafe by default a hand written resource which knows the real precision can make the safer call directly this is that call not an inconsistency the default 0 on both columns is a not null safety net not a value either field should be allowed to default to silently price and order total are the values these tables exist to record so neither shows the leave unchanged to use the database default hint hasdefault is reserved for a column the server not the user is expected to own such as created_at without hasdefault an untouched price or total is sent as the 0 the form shows see the payload note above which is the same value the default 0 would give the save lock keeps only running saves with a 30 second timeout libs demo shared src lib save lock ts save store ts the create and edit pages lock a record while it is saved across visits so the user cannot send a second write that could land before the first the lock lives in a root store save_store that holds only the saves still running a save removes its record when it settles a page waiting on someone else s save keeps a reference to that save s entry so it can still read the outcome after the entry left the store the entry is collected with the page a request that never answers would leave every page of its record waiting with no explanation so the provider call races a 30 second timer on timeout the record stays locked since the write may still land but every page of that record including one the user opens later shows a message saying the save may still be applied above a form that stays disabled so what the user typed is kept when the request finally answers its entry leaves the store the form comes back and the page says whether that earlier save finished or failed an edit page reads the record again after a success and keeps what was loaded after a failure the late answer never opens the next page the store therefore holds only requests in flight a request that never settles a fetch has no default timeout a custom provider may retry forever keeps its record locked until the page is reloaded which the message says the 30 seconds are a constant in the copie...
|