Skip to content

v0.0.2-alpha.47

Pre-release
Pre-release

Choose a tag to compare

@mobeenabdullah mobeenabdullah released this 30 Jul 09:50
9b39eb7

Released 17 packages at 0.0.2-alpha.47 in lockstep. Every package below ships at this version.

What's changed

Patch Changes

  • #404 f41a985 Thanks @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 through dbName is found and left alone rather than renamed over. Nothing calls this yet, so there is no change in behaviour in this release.

  • #408 1448488 Thanks @mobeenabdullah! - Fixed component data teardown resolving table names case-insensitively on every database. On PostgreSQL, and on MySQL with lower_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 b448e6d Thanks @mobeenabdullah! - Saving a translation could overwrite the original language. nextly db:sync marks 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:sync and 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 dbName are 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 1e0ef91 Thanks @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 d5568ff Thanks @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 b7e334b Thanks @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 77fb550 Thanks @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 committable ui-schema.json manifest.

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/ui
  • create-nextly-app
  • nextly