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