Aller au contenu

Mise à niveau de 0.14 vers 0.17

Les versions 0.15 et 0.16 ajoutent et corrigent des fonctionnalités ; aucune n’introduit de rupture. Tout ce qui figure dans cette partie est arrivé avec la version 0.17.0.

Sous les versions 0.x, le numéro mineur correspond aux changements cassants — ^0.16.0 résout >=0.16.0 <0.17.0 — donc rien de tout cela n’atteindra un projet tant que vous ne passerez pas délibérément à la version 0.17.

Et @rebasepro/admin-types devient @rebasepro/cms-types. « Admin » désignait deux choses à la fois : l’ensemble du panneau d’administration et sa partie dédiée à la gestion de contenu.

import { RebaseAdmin } from "@rebasepro/admin";
import { defineCollection } from "@rebasepro/admin-types";
import { RebaseCMS } from "@rebasepro/cms";
import { defineCollection } from "@rebasepro/cms-types";

Remplacez le spécificateur et RebaseAdmin par RebaseCMS. Il n’y a pas d’alias : un shim maintiendrait les deux significations de « admin », ce qui est précisément le problème corrigé. Les anciens packages s’arrêtent à 0.16.0 sur npm et ne recevront plus rien après cela, donc ^0.16.0 continue d’être résolu au lieu de casser — il cesse simplement d’évoluer.

Vos fichiers de collection ne changent pas. La clé admin: reste délibérément intacte, tout comme AdminCollection*, ADMIN_COLLECTION_KEYS, le rôle d’authentification admin et /api/admin — ceux-ci désignant autre chose que le produit CMS.

La valeur du mode du panneau a évolué avec le package ("content" → "cms"). Elle est conservée par navigateur et migre lors de la lecture, de sorte qu’un navigateur existant continue de fonctionner.

15. Les ressources sont déclarées, et non configurées

Section intitulée « 15. Les ressources sont déclarées, et non configurées »

dataSources et storageSources ont disparu de RebaseBackendConfig. Déclarez-les plutôt dans rebase.json et dans le package de configuration.

Un bundle compilé avant cela ne démarrera pas sur un runtime actuel. Recompilez-le :

rebase build

rebase eject infra a également disparu, tout comme rebase.infra.json et l’indirection {"$env": "..."}. Les ressources se lient à partir de l’environnement selon la convention <BASE>__<KEY>, ce que chaque déploiement utilisait déjà.

Utilisez admin.display.title — la même chaîne de caractères fonctionne ici.

admin: {
titleProperty: "name"
display: { title: "name" }
}

Cela peut bloquer un projet démarré aujourd’hui, et c’est le but recherché : le silence aurait signifié que le titre repasserait discrètement à la valeur dérivée sans que rien n’explique pourquoi.

Et userId n’est plus accepté nulle part comme syntaxe d’identité — c’est désormais uid partout.

export default defineCron({ schedule: "0 3 * * *", async handler({ client }) {
await client.dataAsAdmin.collection("orders").find();
export default defineCron({ schedule: "0 3 * * *", async handler({ rebase }) {
await rebase.dataAsAdmin.collection("orders").find();
} });

Le flag --legacy sur build et start s’appelle désormais --workspace. Le mode est toujours pris en charge, non retiré, et l’ancien nom laissait penser le contraire.

rebase build --legacy
rebase build --workspace

Il est conseillé de vérifier vos scripts et votre CI avec grep : arg s’exécute de manière permissive sur ces deux commandes, de sorte que l’ancienne syntaxe est ignorée plutôt que rejetée — le build réussit et utilise silencieusement l’autre mode.

Rupture uniquement pour le code qui implémente EmailService : une méthode send retournant Promise<void> ne le satisfait plus. Les appelants ne sont pas affectés — ils peuvent ignorer le résultat — et le hook auth.email.sendEmail reste permissif, de sorte qu’un fournisseur existant async () => {} fonctionne toujours et ne signale simplement rien.