Lines 59-99javascript
59 // Mappa i documenti esistenti per COPPIA `tema::nome` (`keyOf`/`norm` a scope-modulo).
60 const existingMap = new Map(existingDocs.docs.map((doc) => [keyOf(doc.theme, doc.name), doc]));
61 payload.logger.info('Inizio sincronizzazione ViewModes...');
62 const toCreate = []; // mancanti → BULK insert (una sola scrittura, non N)
63 for (const viewModeRaw of viewModeDefaults) {
64 // Popola solo i themeStyles dei temi ABILITATI (config del plugin).
65 const viewMode = filterThemeStyles(viewModeRaw, enabledThemes);
66 // Tema del viewMode entrante: quello dichiarato sul singolo, altrimenti il param.
67 const vmTheme = viewMode.theme ?? theme;
68 const existingDoc = existingMap.get(keyOf(vmTheme, viewMode.name));
70 // SEED-TO-CODE, ma WRITE-ONLY-IF-DIFFERENT: se esiste (stessa coppia name+theme) lo
71 // sovrascrive con la versione da codice SOLO se differisce. Il codice è fonte di verità
72 // dei viewMode DEFINITI (package/dev change importati). Su DB stabile 0 scritture. Gli update
73 // (rari) restano uno-a-uno (mantengono hook/versioni). UI-created (nomi diversi) → intatti.
74 if (norm(existingDoc) === norm(viewMode)) {
75 continue; // identico → nessuna scrittura
77 await payload.update({
78 collection: 'view-modes',
80 data: { ...viewMode, theme: vmTheme, _status: 'published' },
81 context: { disableRevalidate: true },
LowWeak Crypto
Package source references weak cryptographic algorithms.
dist/seeders/seedViewModes.jsView on unpkg · L79 83 payload.logger.info(`♻️ ViewMode aggiornato dal codice: ${viewMode.name} [${vmTheme}]`);
86 // Non esiste → accoda per la BULK insert (published: coi drafts attivi è la versione visibile).
87 toCreate.push({ ...viewMode, theme: vmTheme, _status: 'published' });
90 // BULK CREATE dei mancanti in UNA sola operazione (driver Mongo `insertMany`) invece di N `create`.
91 // Enorme su DB fresco (~700 viewMode): 1 round-trip vs 700. Bypassa gli hook (non servono: i viewMode
92 // seedati non hanno hook rilevanti, la revalidation è già disabilitata). `payload.find` li trova
93 // regolarmente (verificato: `_status:'published'` nella collection principale).
94 if (toCreate.length) {
95 const now = new Date();
96 await payload.db.connection
97 .collection('view-modes')
98 .insertMany(toCreate.map((d) => ({ ...d, createdAt: now, updatedAt: now })));
99 payload.logger.info(`✅ Bulk-create ${toCreate.length} nuovi ViewMode (insertMany).`);