@communecter/cocolight-api-client 1.0.186 → 1.0.187

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@communecter/cocolight-api-client",
3
- "version": "1.0.186",
3
+ "version": "1.0.187",
4
4
  "description": "Client Axios simplifié pour l'API cocolight",
5
5
  "repository": {
6
6
  "type": "git",
@@ -383,8 +383,26 @@ export declare class BaseEntity<TServerData = any> {
383
383
  _isDeleted: boolean;
384
384
  /** Contexte costum porté par cette instance (null hors d'un `CostumScope`). Posé au constructeur.
385
385
  * Sens A — « quel costum définit le SCHÉMA de cet élément » : dérivé du `source.key` (provenance),
386
- * ré-affirmé à chaque `_setData`. Gouverne draft/proxy, merge de schémas, héritage aux enfants. */
386
+ * ré-affirmé à chaque `_setData` (sauf épingle, cf. `_costumCtxPinned`). Gouverne draft/proxy,
387
+ * merge de schémas, héritage aux enfants. */
387
388
  _costumCtx: CostumRuntimeContext | null;
389
+ /**
390
+ * ÉPINGLE du schéma costum (sens A) : posée par `setCostumScope(slug, {pinSchema:true})` et par
391
+ * `loadCostumScope`, elle SUSPEND la re-dérivation de `_costumCtx` depuis `source.key` dans
392
+ * `_setData` — le costum ÉPINGLÉ gouverne alors la whitelist d'écriture du draft, pas la
393
+ * provenance. Cas d'usage : un costum ANNUAIRE (ex. navigatorDesTierslieux) édite avec SON
394
+ * formulaire des fiches qui ne viennent pas de lui (`source.key` étranger, hors registre, ou
395
+ * absent) — sans l'épingle, chacun de ces cas rejetait l'édition (`[DraftProxy] Le champ "…"
396
+ * n'est pas autorisé.`) alors que la CRÉATION passait, elle, par `me.costum(slug)`. Même statut
397
+ * que `_adminScope` : un choix EXPLICITE de l'appelant, qui survit aux refresh/hydratations.
398
+ *
399
+ * PORTÉE : l'épingle ouvre l'ÉCRITURE (whitelist du draft + enveloppe `element/save`) — elle ne
400
+ * change pas qui gouverne la LECTURE ailleurs (la normalisation suit toujours la provenance) :
401
+ * un champ écrit sous le schéma de l'annuaire reste muet hors de l'annuaire (cf.
402
+ * cocolight-backend docs/28 §6b, triple déclaration). Elle ne déclenche PAS les presets de
403
+ * création du costum épinglé. @private
404
+ */
405
+ private _costumCtxPinned;
388
406
  /**
389
407
  * Scope d'ADMINISTRATION costum — sens B : « au NOM de quel costum j'agis » (`validateGroup`,
390
408
  * `addReference`/`removeReference`/`removeFromSource`, `previewImport`/`importElements`,
@@ -404,6 +422,10 @@ export declare class BaseEntity<TServerData = any> {
404
422
  combinedSchema: any;
405
423
  transforms: TransformsMap;
406
424
  removeFields: string[];
425
+ /** Constantes de schéma du build — mémorisées pour REJOUER le combinedSchema quand `_costumCtx`
426
+ * change APRÈS le build (épingle `pinSchema`) : sans rejeu, poser un scope est un no-op pour
427
+ * l'édition (le proxy relit un combinedSchema figé au chargement). */
428
+ constants: string[];
407
429
  };
408
430
  static entityTag: string;
409
431
  static entityType?: string;
@@ -1070,6 +1092,25 @@ export declare class BaseEntity<TServerData = any> {
1070
1092
  * @private
1071
1093
  */
1072
1094
  private _extractWritableFields;
1095
+ /**
1096
+ * Construit le schéma COMBINÉ de la whitelist d'écriture : schémas de requête des constantes
1097
+ * (+ VIRTUAL_SCHEMAS, $defs fusionnés) ⊕ schéma du `_costumCtx` COURANT. Extrait de
1098
+ * `_buildDraftAndProxy` pour être REJOUABLE : quand `_costumCtx` change après le build
1099
+ * (épingle `pinSchema`), la whitelist doit être reconstruite — sinon poser un scope est un
1100
+ * no-op visible pour l'édition (le proxy relit un combinedSchema figé au chargement).
1101
+ * @private
1102
+ */
1103
+ private _buildCombinedSchema;
1104
+ /**
1105
+ * ÉPINGLE le costum courant comme schéma d'ÉCRITURE (cf. `_costumCtxPinned`) et REJOUE la
1106
+ * whitelist : reconstruit le combinedSchema depuis les constantes mémorisées au build (le
1107
+ * `_costumCtx` a changé APRÈS `_buildDraftAndProxy`), puis SÈME les champs nouvellement ouverts
1108
+ * dans le draft ET dans la baseline depuis `serverData` — sans ce semis, la comparaison
1109
+ * draft/baseline les verrait tous « modifiés » (baseline `undefined`) et le save émettrait des
1110
+ * champs intouchés. Invariant vérifié par test : `hasChanges()` reste `false` juste après la pose.
1111
+ * @private
1112
+ */
1113
+ private _pinCostumSchema;
1073
1114
  /**
1074
1115
  * Construit un brouillon et un proxy à partir des données et du schéma.
1075
1116
  *
@@ -1876,10 +1917,17 @@ export declare class BaseEntity<TServerData = any> {
1876
1917
  * @param slug - Slug du costum (ex. `"equipementsSportifs974"`).
1877
1918
  * @param opts.costumId / opts.costumType - Identité de l'élément hôte, requise si le costum
1878
1919
  * n'est pas dans le registre bundlé (résolue par le front via slug/getinfo).
1920
+ * @param opts.pinSchema - ÉPINGLE le costum comme schéma d'ÉCRITURE (sens A) : la whitelist du
1921
+ * draft est REJOUÉE avec ses champs et la re-dérivation depuis `source.key` est suspendue —
1922
+ * pour ÉDITER, avec le formulaire d'un costum ANNUAIRE, une fiche qui ne vient pas de lui.
1923
+ * Défaut `false`, et ce défaut est LOAD-BEARING : `setCostumScope` est déjà appelée sur le
1924
+ * carrier de nombreux sites (import/export/validation via ensureCostumScope), où la provenance
1925
+ * doit RESTER maîtresse du schéma (contrat des sens A/B). Cf. `_costumCtxPinned`.
1879
1926
  */
1880
1927
  setCostumScope(slug: string, opts?: {
1881
1928
  costumId?: string;
1882
1929
  costumType?: string;
1930
+ pinSchema?: boolean;
1883
1931
  }): void;
1884
1932
  /**
1885
1933
  * Épingle le scope d'ADMINISTRATION (sens B) SI l'identité est complète — sinon no-op : les