Skip to content

v0.0.2-alpha.46

Pre-release
Pre-release

Choose a tag to compare

@mobeenabdullah mobeenabdullah released this 29 Jul 19:38
24874e5

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

What's changed

Patch Changes

  • #398 4b46b5c Thanks @mobeenabdullah! - Compare any two versions of a document in the admin history panel.

    From a version's preview in the history panel, you can now compare it against the previous version or the current one. The comparison lays out what changed field by field: edited text reads inline with the added and removed words highlighted, changed values show their before and after, and list items and relationships are marked as added, removed, moved, or edited. A "Changed only" toggle, on by default, hides everything that stayed the same so the real differences stand out.

    Available for both collection entries and singles on any document with versioning enabled. A comparison is always between two versions in the same locale.

  • #403 2685550 Thanks @mobeenabdullah! - Recover a version history that failed to refresh, without reopening the panel.

    When the history panel cannot refresh its list (for example after the tab regains focus following a save made elsewhere), it keeps the loaded history on screen but holds back the "Compare with current" and "Load more" actions until it can confirm the latest version. It now shows a short notice with a "Try again" button, so a transient failure can be recovered in place rather than by closing and reopening the panel.

  • #402 b85b799 Thanks @mobeenabdullah! - More groundwork for the upcoming field group storage migration: a migration run now claims a durable lock row for its duration, so a second run refuses instead of starting alongside it, and records a step only after checking the database reached the state that step intended. Nothing calls this yet, so there is no change in behaviour in this release.

  • #399 831cf74 Thanks @mobeenabdullah! - Internal groundwork for the upcoming field group storage migration: durable progress tracking, and a startup guard that refuses to serve a database whose storage state cannot be accounted for. Nothing calls this yet, so there is no change in behaviour in this release.

  • #383 5154cc2 Thanks @mobeenabdullah! - Plugin-contributed field types can now state rules about their own declaration, not just about stored values. PluginFieldType.validateOptions(field) runs on every path a declaration reaches storage by — boot, db:sync and its watcher, Schema Builder writes, the direct create/update endpoints, nextly build, migrate:create, and the HMR reload — and returns true, a message, or a list of issues naming the options at fault. Each of those sits after the field-type registry is populated; the define* calls do not, so a custom type is still refused there as an unknown field type. It reads the declaration as written, which on the Builder path means the submitted payload rather than the parsed copy, since that is what gets persisted.

    Options a plugin field type declares now survive the Schema Builder. The admin rebuilt each field from a fixed list of known properties, so a custom option was dropped on the way in and again on the way out: saving an unrelated setting erased it from a field the user never touched, and a type that requires the option would have refused every save.

    A config edit that arrives while a reload is already running is now read. Reloads still never overlap, but the one in progress may have read the file before the edit landed, so the edit was previously dropped until the next save or a restart. A config load that fails now also leaves the field-type registry as it found it, instead of leaving it empty for whatever keeps running on the previously-loaded config.

    Without it a custom type's options were accepted unread, so a declaration that no value could ever satisfy was only discovered per write, which reports a schema defect to the writer who cannot fix it. A disabled plugin's declaration checks no longer run, matching its validate.

    nextly build now runs the comprehensive config validators over singles and components, not collections alone. A single or component whose declaration was invalid previously reported a clean build and failed later at runtime.

  • #384 d2dabb9 Thanks @mobeenabdullah! - Populate relationships that point at several collections. A field declared with
    a list of targets stores its value as a { relationTo, value } pair, and
    expansion treated that pair as if it were a plain id while resolving the table
    from the field's first declared target. The resulting query bound an object
    where the driver expected a string, failed, and the failure was discarded, so
    the field came back as its raw pair at every depth with nothing logged.

    Values are now loaded from the collection each one names, on single reads,
    listings and nested hops alike, and a populated row is redacted by that
    collection's own field rules.

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