@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
|
@@ -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
|
|
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
|