v0.0.2-alpha.47
Pre-releaseReleased 17 packages at 0.0.2-alpha.47 in lockstep. Every package below ships at this version.
What's changed
Patch Changes
-
#404
f41a985Thanks @mobeenabdullah! - More groundwork for the upcoming field group storage migration: the rename plan is now derived from the database rather than from configuration, so a table named throughdbNameis found and left alone rather than renamed over. Nothing calls this yet, so there is no change in behaviour in this release. -
#408
1448488Thanks @mobeenabdullah! - Fixed component data teardown resolving table names case-insensitively on every database. On PostgreSQL, and on MySQL withlower_case_table_names=0, two names differing only in case are two different tables, so a registered component whose stored name differed in case from a real table could have that other table's rows deleted. Whether two spellings mean one table is now read from the server rather than assumed, including that SQLite folds ASCII case only, soÄandästay distinct tables there.Also more groundwork for the upcoming field group storage migration: the rename plan is now checked against what the database actually contains before anything runs, so a name already in use, a registry row whose storage or companion table is missing, or a half-applied rename that recorded progress cannot account for all refuse up front instead of failing partway through. That part is not called by anything yet.
-
#382
b448e6dThanks @mobeenabdullah! - Saving a translation could overwrite the original language.nextly db:syncmarks a collection as localized in a separate process from the running app, so the app could show the language switcher before its translations table existed — and a translation saved in that window wrote over the original-language values and changed the entry's URL, while reporting success.The translations table is now prepared during
db:syncand during a dev config reload, for collections, singles and field groups alike. If it is still missing, a write in a non-default language is refused with a clear message instead of overwriting anything, and the same refusal now covers singles and embedded field groups rather than only collections.Writing the default language before the table exists still goes to the main table as before. The one exception is content that was localized from the start, whose translatable values have never had a main-table column to fall back to: saving that while the translations table is missing used to fail with a database error, and now reports the same clear message as the case above.
Collections and singles that set a custom
dbNameare handled correctly here too; previously their translations table could be created against a table name that does not exist. And a database that is unreachable or refusing connections is no longer reported as a missing translations table. -
#401
1e0ef91Thanks @mobeenabdullah! - Stop a relationship from populating a row the caller may not read. A related
row belongs to another collection and carries that collection's own read
rules, but expansion selected it straight from its table and applied only
field-level redaction — so a caller refused the collection outright still
obtained its rows by populating a relationship that pointed at them.The target collection's stored read rules are now evaluated for the caller
before its rows are populated, on single reads, listings and nested hops. A
refused target reads as an absent relationship rather than an error, so one
unreadable reference does not refuse the whole parent read. -
#409
d5568ffThanks @mobeenabdullah! - Consolidate the version-history reference access checks behind a single shared media/users read gate. Internal refactor with no behavior change: the media and users label lookups previously duplicated the scope-then-RBAC check inline, and now share one audited gate so every reference-resolution path stays access-checked. -
#406
b7e334bThanks @mobeenabdullah! - Show linked entries and media by name in version history.Previewing a past version or comparing two versions now shows relationship and upload fields by name: a relationship reads as the linked entry's title, and an upload as its filename with a thumbnail, instead of a bare id. Labels are resolved through the same access checks as a normal read, so a linked document you are not allowed to read stays shown as its id rather than revealing its title, and a many-relationship still shows the links the version actually held rather than the document's current ones.
-
#410
77fb550Thanks @mobeenabdullah! - Polish version history for localized and restored content, and give the Schema Builder control over retention:- Filter version history by locale. The history panel now shows a language badge on each version and a locale filter (defaulting to all locales), so a localized document's history is legible instead of interleaved. The filter is added to both list surfaces (the REST route and the dispatcher) and hides automatically for non-localized documents.
- Show restore lineage. A version created by restoring an earlier one now displays a "Restored from vN" chip on its row and in its preview, so a rollback is visible at a glance.
- Set version retention in the Schema Builder. The versioning toggle's Advanced tab gains a retention control — keep all history, keep the default (50), or keep the last N per document — reaching parity with code-first
versions.maxPerDoc. The value persists through the builder's create/update endpoints and the committableui-schema.jsonmanifest.
Packages
@nextlyhq/adapter-drizzle@nextlyhq/adapter-mysql@nextlyhq/adapter-postgres@nextlyhq/adapter-sqlite@nextlyhq/admin@nextlyhq/admin-css@nextlyhq/blocks-engine@nextlyhq/plugin-form-builder@nextlyhq/plugin-page-builder@nextlyhq/plugin-sdk@nextlyhq/plugin-seo@nextlyhq/storage-s3@nextlyhq/storage-uploadthing@nextlyhq/storage-vercel-blob@nextlyhq/uicreate-nextly-appnextly