import { Logger } from '@stackbit/types'; import * as ContentStoreTypes from '../types'; export function pluralize(str: string, count: number) { return count === 1 ? str : `${str}s`; } function encodeIdentifier(options: { srcType?: string; srcProjectId?: string; srcDocumentId?: string; locale?: string }) { const { srcType, srcProjectId, srcDocumentId, locale } = options; const localeSuffix = locale ? `:${locale}` : ''; return `(${srcType || ''}${srcProjectId ? `:${srcProjectId}` : ''}${srcDocumentId ? `:${srcDocumentId}` : ''}${localeSuffix})`; } export function logCreateDocument(options: { userLogger: Logger; srcType: string; srcProjectId: string; modelName: string; object?: Record; locale?: string; }) { const { userLogger, srcType, srcProjectId, modelName, locale } = options; userLogger.info(`Create document for ${modelName} ${encodeIdentifier({ srcType, srcProjectId, locale })}`); } export function logDocumentEvent( event: string, options: { userLogger: Logger; srcType: string; srcProjectId: string; srcDocumentId: string; locale?: string } ) { const { userLogger, srcType, srcProjectId, srcDocumentId, locale } = options; userLogger.info(`${event} document ${encodeIdentifier({ srcType, srcProjectId, srcDocumentId, locale })}`); } export function logDocumentsEvent( event: string, options: { userLogger: Logger; objects: { srcType: string; srcProjectId: string; srcObjectId: string }[]; locale?: string; } ) { const { userLogger, objects, locale } = options; const objectCount = objects.length; const objectPlural = pluralize('item', objectCount); userLogger.info( `${event} ${objectCount} ${objectPlural}: ${objects.map((object) => object.srcObjectId).join(', ')} ${objects .map((object) => encodeIdentifier({ srcType: object.srcType, srcProjectId: object.srcProjectId, locale })) .join(', ')}` ); } export function logUpdateDocument(options: { userLogger: Logger; srcType: string; srcProjectId: string; srcDocumentId: string; updateOperations: ContentStoreTypes.UpdateOperation[]; locale?: string; }) { const { userLogger, srcType, srcProjectId, srcDocumentId, updateOperations, locale } = options; const updates = updateOperations.map((update) => `${update.opType.toUpperCase()} ${update.fieldPath.join('.')}`).join(', '); userLogger.info(`Update document ${updates} ${encodeIdentifier({ srcType, srcProjectId, srcDocumentId, locale })}`); } export function logUpdateAsset(options: { userLogger: Logger; srcType: string; srcProjectId: string; srcAssetId: string; updateOperations: ContentStoreTypes.UpdateOperation[]; locale?: string; }) { const { userLogger, srcType, srcProjectId, srcAssetId, updateOperations, locale } = options; const updates = updateOperations.map((update) => `${update.opType.toUpperCase()} ${update.fieldPath.join('.')}`).join(', '); userLogger.info(`Update asset ${updates} ${encodeIdentifier({ srcType, srcProjectId, srcDocumentId: srcAssetId, locale })}`); } export function logDuplicateDocument(options: { userLogger: Logger; srcType: string; srcProjectId: string; srcDocumentId: string; object?: Record; locale?: string; }) { const { userLogger, srcType, srcProjectId, srcDocumentId, locale } = options; userLogger.info(`Duplicate document ${encodeIdentifier({ srcType, srcProjectId, srcDocumentId, locale })}`); } export function logUploadAssets(options: { userLogger: Logger; srcType: string; srcProjectId: string; assets: ContentStoreTypes.UploadAssetData[]; locale?: string; }) { const { userLogger, srcType, srcProjectId, locale } = options; userLogger.info(`Upload asset ${encodeIdentifier({ srcType, srcProjectId, locale })}`); }