@payloadcms/drizzle 3.53.0 → 3.54.0-internal.84621da
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.
|
@@ -410,6 +410,18 @@ export const traverseFields = ({ adapter, arrays, baseTableName, blocks, blocksT
|
|
|
410
410
|
}
|
|
411
411
|
valuesToTransform.forEach(({ localeKey, ref, value })=>{
|
|
412
412
|
let formattedValue = value;
|
|
413
|
+
if (field.type === 'date') {
|
|
414
|
+
if (fieldName === 'updatedAt' && !formattedValue) {
|
|
415
|
+
// let the db handle this
|
|
416
|
+
formattedValue = new Date().toISOString();
|
|
417
|
+
} else {
|
|
418
|
+
if (typeof value === 'number' && !Number.isNaN(value)) {
|
|
419
|
+
formattedValue = new Date(value).toISOString();
|
|
420
|
+
} else if (value instanceof Date) {
|
|
421
|
+
formattedValue = value.toISOString();
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
413
425
|
if (typeof value !== 'undefined') {
|
|
414
426
|
if (value && field.type === 'point' && adapter.name !== 'sqlite') {
|
|
415
427
|
formattedValue = sql`ST_GeomFromGeoJSON(${JSON.stringify(value)})`;
|
|
@@ -423,17 +435,6 @@ export const traverseFields = ({ adapter, arrays, baseTableName, blocks, blocksT
|
|
|
423
435
|
}
|
|
424
436
|
formattedValue = sql.raw(`${columnName} + ${value.$inc}`);
|
|
425
437
|
}
|
|
426
|
-
if (field.type === 'date') {
|
|
427
|
-
if (typeof value === 'number' && !Number.isNaN(value)) {
|
|
428
|
-
formattedValue = new Date(value).toISOString();
|
|
429
|
-
} else if (value instanceof Date) {
|
|
430
|
-
formattedValue = value.toISOString();
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
if (field.type === 'date' && fieldName === 'updatedAt') {
|
|
435
|
-
// let the db handle this
|
|
436
|
-
formattedValue = new Date().toISOString();
|
|
437
438
|
}
|
|
438
439
|
if (typeof formattedValue !== 'undefined') {
|
|
439
440
|
if (localeKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/transform/write/traverseFields.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\nimport { APIError, type FlattenedField } from 'payload'\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type {\n ArrayRowToInsert,\n BlockRowToInsert,\n NumberToDelete,\n RelationshipToDelete,\n TextToDelete,\n} from './types.js'\n\nimport { isArrayOfRows } from '../../utilities/isArrayOfRows.js'\nimport { resolveBlockTableName } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { transformArray } from './array.js'\nimport { transformBlocks } from './blocks.js'\nimport { transformNumbers } from './numbers.js'\nimport { transformRelationship } from './relationships.js'\nimport { transformSelects } from './selects.js'\nimport { transformTexts } from './texts.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }\n /**\n * This is the name of the base table\n */\n baseTableName: string\n blocks: {\n [blockType: string]: BlockRowToInsert[]\n }\n blocksToDelete: Set<string>\n /**\n * A snake-case field prefix, representing prior fields\n * Ex: my_group_my_named_tab_\n */\n columnPrefix: string\n data: Record<string, unknown>\n enableAtomicWrites?: boolean\n existingLocales?: Record<string, unknown>[]\n /**\n * A prefix that will retain camel-case formatting, representing prior fields\n * Ex: myGroup_myNamedTab_\n */\n fieldPrefix: string\n fields: FlattenedField[]\n forcedLocale?: string\n /**\n * Tracks whether the current traversion context is from array or block.\n */\n insideArrayOrBlock?: boolean\n locales: {\n [locale: string]: Record<string, unknown>\n }\n numbers: Record<string, unknown>[]\n numbersToDelete: NumberToDelete[]\n parentIsLocalized: boolean\n /**\n * This is the name of the parent table\n */\n parentTableName: string\n path: string\n relationships: Record<string, unknown>[]\n relationshipsToDelete: RelationshipToDelete[]\n row: Record<string, unknown>\n selects: {\n [tableName: string]: Record<string, unknown>[]\n }\n texts: Record<string, unknown>[]\n textsToDelete: TextToDelete[]\n /**\n * Set to a locale code if this set of fields is traversed within a\n * localized array or block field\n */\n withinArrayOrBlockLocale?: string\n}\n\nexport const traverseFields = ({\n adapter,\n arrays,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix,\n data,\n enableAtomicWrites,\n existingLocales,\n fieldPrefix,\n fields,\n forcedLocale,\n insideArrayOrBlock = false,\n locales,\n numbers,\n numbersToDelete,\n parentIsLocalized,\n parentTableName,\n path,\n relationships,\n relationshipsToDelete,\n row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n}: Args) => {\n if (row._uuid) {\n data._uuid = row._uuid\n }\n\n fields.forEach((field) => {\n let columnName = ''\n let fieldName = ''\n let fieldData: unknown\n\n if (fieldIsVirtual(field)) {\n return\n }\n\n columnName = `${columnPrefix || ''}${toSnakeCase(field.name)}`\n fieldName = `${fieldPrefix || ''}${field.name}`\n fieldData = data[field.name]\n\n const isLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n if (field.type === 'array') {\n const arrayTableName = adapter.tableNameMap.get(`${parentTableName}_${columnName}`)\n\n if (!arrays[arrayTableName]) {\n arrays[arrayTableName] = []\n }\n\n if (isLocalized) {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n const newRows = transformArray({\n adapter,\n arrayTableName,\n baseTableName,\n blocks,\n blocksToDelete,\n data: localeData,\n field,\n locale: localeKey,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale: localeKey,\n })\n\n arrays[arrayTableName] = arrays[arrayTableName].concat(newRows)\n }\n })\n }\n } else {\n const newRows = transformArray({\n adapter,\n arrayTableName,\n baseTableName,\n blocks,\n blocksToDelete,\n data: data[field.name],\n field,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n\n arrays[arrayTableName] = arrays[arrayTableName].concat(newRows)\n }\n\n return\n }\n\n if (field.type === 'blocks' && !adapter.blocksAsJSON) {\n ;(field.blockReferences ?? field.blocks).forEach((block) => {\n const matchedBlock =\n typeof block === 'string'\n ? adapter.payload.config.blocks.find((each) => each.slug === block)\n : block\n\n blocksToDelete.add(\n resolveBlockTableName(\n matchedBlock,\n adapter.tableNameMap.get(`${baseTableName}_blocks_${toSnakeCase(matchedBlock.slug)}`),\n ),\n )\n })\n\n if (isLocalized) {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n transformBlocks({\n adapter,\n baseTableName,\n blocks,\n blocksToDelete,\n data: localeData,\n field,\n locale: localeKey,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale: localeKey,\n })\n }\n })\n }\n } else if (isArrayOfRows(fieldData)) {\n transformBlocks({\n adapter,\n baseTableName,\n blocks,\n blocksToDelete,\n data: fieldData,\n field,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n }\n\n return\n }\n\n if (field.type === 'group' || field.type === 'tab') {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n if (isLocalized) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n // preserve array ID if there is\n localeData._uuid = data.id || data._uuid\n\n traverseFields({\n adapter,\n arrays,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix: `${columnName}_`,\n data: localeData as Record<string, unknown>,\n enableAtomicWrites,\n existingLocales,\n fieldPrefix: `${fieldName}_`,\n fields: field.flattenedFields,\n forcedLocale: localeKey,\n insideArrayOrBlock,\n locales,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName,\n path: `${path || ''}${field.name}.`,\n relationships,\n relationshipsToDelete,\n row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale: localeKey,\n })\n })\n } else {\n // preserve array ID if there is\n const groupData = data[field.name] as Record<string, unknown>\n groupData._uuid = data.id || data._uuid\n\n traverseFields({\n adapter,\n arrays,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix: `${columnName}_`,\n data: groupData,\n existingLocales,\n fieldPrefix: `${fieldName}_`,\n fields: field.flattenedFields,\n insideArrayOrBlock,\n locales,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName,\n path: `${path || ''}${field.name}.`,\n relationships,\n relationshipsToDelete,\n row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n }\n }\n\n return\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n const relationshipPath = `${path || ''}${field.name}`\n\n if (\n isLocalized &&\n (Array.isArray(field.relationTo) || ('hasMany' in field && field.hasMany))\n ) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (localeData === null) {\n relationshipsToDelete.push({\n locale: localeKey,\n path: relationshipPath,\n })\n return\n }\n\n transformRelationship({\n baseRow: {\n locale: localeKey,\n path: relationshipPath,\n },\n data: localeData,\n field,\n relationships,\n })\n })\n }\n return\n } else if (Array.isArray(field.relationTo) || ('hasMany' in field && field.hasMany)) {\n if (fieldData === null || (Array.isArray(fieldData) && fieldData.length === 0)) {\n relationshipsToDelete.push({ path: relationshipPath })\n return\n }\n\n transformRelationship({\n baseRow: {\n locale: withinArrayOrBlockLocale,\n path: relationshipPath,\n },\n data: fieldData,\n field,\n relationships,\n })\n return\n } else {\n if (\n !isLocalized &&\n fieldData &&\n typeof fieldData === 'object' &&\n 'id' in fieldData &&\n fieldData?.id\n ) {\n fieldData = fieldData.id\n } else if (isLocalized) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (typeof localeData === 'object') {\n if (localeData && 'id' in localeData && localeData?.id) {\n fieldData[localeKey] = localeData.id\n }\n } else {\n fieldData[localeKey] = localeData\n }\n })\n }\n }\n }\n }\n\n if (field.type === 'text' && field.hasMany) {\n const textPath = `${path || ''}${field.name}`\n\n if (isLocalized) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n if (!localeData.length) {\n textsToDelete.push({ locale: localeKey, path: textPath })\n return\n }\n\n transformTexts({\n baseRow: {\n locale: localeKey,\n path: textPath,\n },\n data: localeData,\n texts,\n })\n }\n })\n }\n } else if (Array.isArray(fieldData)) {\n if (!fieldData.length) {\n textsToDelete.push({ locale: withinArrayOrBlockLocale, path: textPath })\n return\n }\n\n transformTexts({\n baseRow: {\n locale: withinArrayOrBlockLocale,\n path: textPath,\n },\n data: fieldData,\n texts,\n })\n }\n\n return\n }\n\n if (field.type === 'number' && field.hasMany) {\n const numberPath = `${path || ''}${field.name}`\n\n if (isLocalized) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n if (!localeData.length) {\n numbersToDelete.push({ locale: localeKey, path: numberPath })\n return\n }\n\n transformNumbers({\n baseRow: {\n locale: localeKey,\n path: numberPath,\n },\n data: localeData,\n numbers,\n })\n }\n })\n }\n } else if (Array.isArray(fieldData)) {\n if (!fieldData.length) {\n numbersToDelete.push({ locale: withinArrayOrBlockLocale, path: numberPath })\n return\n }\n\n transformNumbers({\n baseRow: {\n locale: withinArrayOrBlockLocale,\n path: numberPath,\n },\n data: fieldData,\n numbers,\n })\n }\n\n return\n }\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = adapter.tableNameMap.get(`${parentTableName}_${columnName}`)\n if (!selects[selectTableName]) {\n selects[selectTableName] = []\n }\n\n if (isLocalized) {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n const newRows = transformSelects({\n id: insideArrayOrBlock ? data._uuid || data.id : undefined,\n data: localeData,\n locale: localeKey,\n })\n\n selects[selectTableName] = selects[selectTableName].concat(newRows)\n }\n })\n }\n } else if (Array.isArray(data[field.name])) {\n const newRows = transformSelects({\n id: insideArrayOrBlock ? data._uuid || data.id : undefined,\n data: data[field.name],\n locale: withinArrayOrBlockLocale,\n })\n\n selects[selectTableName] = selects[selectTableName].concat(newRows)\n }\n\n return\n }\n\n const valuesToTransform: { localeKey?: string; ref: unknown; value: unknown }[] = []\n\n if (isLocalized) {\n if (typeof fieldData === 'object' && fieldData !== null) {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (!locales[localeKey]) {\n locales[localeKey] = {}\n }\n\n valuesToTransform.push({\n localeKey,\n ref: locales,\n value: localeData,\n })\n })\n }\n } else {\n let ref = row\n\n if (forcedLocale) {\n if (!locales[forcedLocale]) {\n locales[forcedLocale] = {}\n }\n ref = locales[forcedLocale]\n }\n\n valuesToTransform.push({ ref, value: fieldData })\n }\n\n valuesToTransform.forEach(({ localeKey, ref, value }) => {\n let formattedValue = value\n\n if (typeof value !== 'undefined') {\n if (value && field.type === 'point' && adapter.name !== 'sqlite') {\n formattedValue = sql`ST_GeomFromGeoJSON(${JSON.stringify(value)})`\n }\n\n if (field.type === 'text' && value && typeof value !== 'string') {\n formattedValue = JSON.stringify(value)\n }\n\n if (\n field.type === 'number' &&\n value &&\n typeof value === 'object' &&\n '$inc' in value &&\n typeof value.$inc === 'number'\n ) {\n if (!enableAtomicWrites) {\n throw new APIError(\n 'The passed data must not contain any nested fields for atomic writes',\n )\n }\n\n formattedValue = sql.raw(`${columnName} + ${value.$inc}`)\n }\n\n if (field.type === 'date') {\n if (typeof value === 'number' && !Number.isNaN(value)) {\n formattedValue = new Date(value).toISOString()\n } else if (value instanceof Date) {\n formattedValue = value.toISOString()\n }\n }\n }\n\n if (field.type === 'date' && fieldName === 'updatedAt') {\n // let the db handle this\n formattedValue = new Date().toISOString()\n }\n\n if (typeof formattedValue !== 'undefined') {\n if (localeKey) {\n ref[localeKey][fieldName] = formattedValue\n } else {\n ref[fieldName] = formattedValue\n }\n }\n })\n })\n}\n"],"names":["sql","APIError","fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","isArrayOfRows","resolveBlockTableName","transformArray","transformBlocks","transformNumbers","transformRelationship","transformSelects","transformTexts","traverseFields","adapter","arrays","baseTableName","blocks","blocksToDelete","columnPrefix","data","enableAtomicWrites","existingLocales","fieldPrefix","fields","forcedLocale","insideArrayOrBlock","locales","numbers","numbersToDelete","parentIsLocalized","parentTableName","path","relationships","relationshipsToDelete","row","selects","texts","textsToDelete","withinArrayOrBlockLocale","_uuid","forEach","field","columnName","fieldName","fieldData","name","isLocalized","type","arrayTableName","tableNameMap","get","Object","entries","localeKey","localeData","Array","isArray","newRows","locale","localized","concat","blocksAsJSON","blockReferences","block","matchedBlock","payload","config","find","each","slug","add","id","flattenedFields","groupData","relationshipPath","relationTo","hasMany","push","baseRow","length","textPath","numberPath","selectTableName","undefined","valuesToTransform","ref","value","formattedValue","JSON","stringify","$inc","raw","Number","isNaN","Date","toISOString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/transform/write/traverseFields.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\nimport { APIError, type FlattenedField } from 'payload'\nimport { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type {\n ArrayRowToInsert,\n BlockRowToInsert,\n NumberToDelete,\n RelationshipToDelete,\n TextToDelete,\n} from './types.js'\n\nimport { isArrayOfRows } from '../../utilities/isArrayOfRows.js'\nimport { resolveBlockTableName } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { transformArray } from './array.js'\nimport { transformBlocks } from './blocks.js'\nimport { transformNumbers } from './numbers.js'\nimport { transformRelationship } from './relationships.js'\nimport { transformSelects } from './selects.js'\nimport { transformTexts } from './texts.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }\n /**\n * This is the name of the base table\n */\n baseTableName: string\n blocks: {\n [blockType: string]: BlockRowToInsert[]\n }\n blocksToDelete: Set<string>\n /**\n * A snake-case field prefix, representing prior fields\n * Ex: my_group_my_named_tab_\n */\n columnPrefix: string\n data: Record<string, unknown>\n enableAtomicWrites?: boolean\n existingLocales?: Record<string, unknown>[]\n /**\n * A prefix that will retain camel-case formatting, representing prior fields\n * Ex: myGroup_myNamedTab_\n */\n fieldPrefix: string\n fields: FlattenedField[]\n forcedLocale?: string\n /**\n * Tracks whether the current traversion context is from array or block.\n */\n insideArrayOrBlock?: boolean\n locales: {\n [locale: string]: Record<string, unknown>\n }\n numbers: Record<string, unknown>[]\n numbersToDelete: NumberToDelete[]\n parentIsLocalized: boolean\n /**\n * This is the name of the parent table\n */\n parentTableName: string\n path: string\n relationships: Record<string, unknown>[]\n relationshipsToDelete: RelationshipToDelete[]\n row: Record<string, unknown>\n selects: {\n [tableName: string]: Record<string, unknown>[]\n }\n texts: Record<string, unknown>[]\n textsToDelete: TextToDelete[]\n /**\n * Set to a locale code if this set of fields is traversed within a\n * localized array or block field\n */\n withinArrayOrBlockLocale?: string\n}\n\nexport const traverseFields = ({\n adapter,\n arrays,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix,\n data,\n enableAtomicWrites,\n existingLocales,\n fieldPrefix,\n fields,\n forcedLocale,\n insideArrayOrBlock = false,\n locales,\n numbers,\n numbersToDelete,\n parentIsLocalized,\n parentTableName,\n path,\n relationships,\n relationshipsToDelete,\n row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n}: Args) => {\n if (row._uuid) {\n data._uuid = row._uuid\n }\n\n fields.forEach((field) => {\n let columnName = ''\n let fieldName = ''\n let fieldData: unknown\n\n if (fieldIsVirtual(field)) {\n return\n }\n\n columnName = `${columnPrefix || ''}${toSnakeCase(field.name)}`\n fieldName = `${fieldPrefix || ''}${field.name}`\n fieldData = data[field.name]\n\n const isLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n if (field.type === 'array') {\n const arrayTableName = adapter.tableNameMap.get(`${parentTableName}_${columnName}`)\n\n if (!arrays[arrayTableName]) {\n arrays[arrayTableName] = []\n }\n\n if (isLocalized) {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n const newRows = transformArray({\n adapter,\n arrayTableName,\n baseTableName,\n blocks,\n blocksToDelete,\n data: localeData,\n field,\n locale: localeKey,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale: localeKey,\n })\n\n arrays[arrayTableName] = arrays[arrayTableName].concat(newRows)\n }\n })\n }\n } else {\n const newRows = transformArray({\n adapter,\n arrayTableName,\n baseTableName,\n blocks,\n blocksToDelete,\n data: data[field.name],\n field,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n\n arrays[arrayTableName] = arrays[arrayTableName].concat(newRows)\n }\n\n return\n }\n\n if (field.type === 'blocks' && !adapter.blocksAsJSON) {\n ;(field.blockReferences ?? field.blocks).forEach((block) => {\n const matchedBlock =\n typeof block === 'string'\n ? adapter.payload.config.blocks.find((each) => each.slug === block)\n : block\n\n blocksToDelete.add(\n resolveBlockTableName(\n matchedBlock,\n adapter.tableNameMap.get(`${baseTableName}_blocks_${toSnakeCase(matchedBlock.slug)}`),\n ),\n )\n })\n\n if (isLocalized) {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n transformBlocks({\n adapter,\n baseTableName,\n blocks,\n blocksToDelete,\n data: localeData,\n field,\n locale: localeKey,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale: localeKey,\n })\n }\n })\n }\n } else if (isArrayOfRows(fieldData)) {\n transformBlocks({\n adapter,\n baseTableName,\n blocks,\n blocksToDelete,\n data: fieldData,\n field,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n path,\n relationships,\n relationshipsToDelete,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n }\n\n return\n }\n\n if (field.type === 'group' || field.type === 'tab') {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n if (isLocalized) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n // preserve array ID if there is\n localeData._uuid = data.id || data._uuid\n\n traverseFields({\n adapter,\n arrays,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix: `${columnName}_`,\n data: localeData as Record<string, unknown>,\n enableAtomicWrites,\n existingLocales,\n fieldPrefix: `${fieldName}_`,\n fields: field.flattenedFields,\n forcedLocale: localeKey,\n insideArrayOrBlock,\n locales,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName,\n path: `${path || ''}${field.name}.`,\n relationships,\n relationshipsToDelete,\n row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale: localeKey,\n })\n })\n } else {\n // preserve array ID if there is\n const groupData = data[field.name] as Record<string, unknown>\n groupData._uuid = data.id || data._uuid\n\n traverseFields({\n adapter,\n arrays,\n baseTableName,\n blocks,\n blocksToDelete,\n columnPrefix: `${columnName}_`,\n data: groupData,\n existingLocales,\n fieldPrefix: `${fieldName}_`,\n fields: field.flattenedFields,\n insideArrayOrBlock,\n locales,\n numbers,\n numbersToDelete,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName,\n path: `${path || ''}${field.name}.`,\n relationships,\n relationshipsToDelete,\n row,\n selects,\n texts,\n textsToDelete,\n withinArrayOrBlockLocale,\n })\n }\n }\n\n return\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n const relationshipPath = `${path || ''}${field.name}`\n\n if (\n isLocalized &&\n (Array.isArray(field.relationTo) || ('hasMany' in field && field.hasMany))\n ) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (localeData === null) {\n relationshipsToDelete.push({\n locale: localeKey,\n path: relationshipPath,\n })\n return\n }\n\n transformRelationship({\n baseRow: {\n locale: localeKey,\n path: relationshipPath,\n },\n data: localeData,\n field,\n relationships,\n })\n })\n }\n return\n } else if (Array.isArray(field.relationTo) || ('hasMany' in field && field.hasMany)) {\n if (fieldData === null || (Array.isArray(fieldData) && fieldData.length === 0)) {\n relationshipsToDelete.push({ path: relationshipPath })\n return\n }\n\n transformRelationship({\n baseRow: {\n locale: withinArrayOrBlockLocale,\n path: relationshipPath,\n },\n data: fieldData,\n field,\n relationships,\n })\n return\n } else {\n if (\n !isLocalized &&\n fieldData &&\n typeof fieldData === 'object' &&\n 'id' in fieldData &&\n fieldData?.id\n ) {\n fieldData = fieldData.id\n } else if (isLocalized) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (typeof localeData === 'object') {\n if (localeData && 'id' in localeData && localeData?.id) {\n fieldData[localeKey] = localeData.id\n }\n } else {\n fieldData[localeKey] = localeData\n }\n })\n }\n }\n }\n }\n\n if (field.type === 'text' && field.hasMany) {\n const textPath = `${path || ''}${field.name}`\n\n if (isLocalized) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n if (!localeData.length) {\n textsToDelete.push({ locale: localeKey, path: textPath })\n return\n }\n\n transformTexts({\n baseRow: {\n locale: localeKey,\n path: textPath,\n },\n data: localeData,\n texts,\n })\n }\n })\n }\n } else if (Array.isArray(fieldData)) {\n if (!fieldData.length) {\n textsToDelete.push({ locale: withinArrayOrBlockLocale, path: textPath })\n return\n }\n\n transformTexts({\n baseRow: {\n locale: withinArrayOrBlockLocale,\n path: textPath,\n },\n data: fieldData,\n texts,\n })\n }\n\n return\n }\n\n if (field.type === 'number' && field.hasMany) {\n const numberPath = `${path || ''}${field.name}`\n\n if (isLocalized) {\n if (typeof fieldData === 'object') {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n if (!localeData.length) {\n numbersToDelete.push({ locale: localeKey, path: numberPath })\n return\n }\n\n transformNumbers({\n baseRow: {\n locale: localeKey,\n path: numberPath,\n },\n data: localeData,\n numbers,\n })\n }\n })\n }\n } else if (Array.isArray(fieldData)) {\n if (!fieldData.length) {\n numbersToDelete.push({ locale: withinArrayOrBlockLocale, path: numberPath })\n return\n }\n\n transformNumbers({\n baseRow: {\n locale: withinArrayOrBlockLocale,\n path: numberPath,\n },\n data: fieldData,\n numbers,\n })\n }\n\n return\n }\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = adapter.tableNameMap.get(`${parentTableName}_${columnName}`)\n if (!selects[selectTableName]) {\n selects[selectTableName] = []\n }\n\n if (isLocalized) {\n if (typeof data[field.name] === 'object' && data[field.name] !== null) {\n Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {\n if (Array.isArray(localeData)) {\n const newRows = transformSelects({\n id: insideArrayOrBlock ? data._uuid || data.id : undefined,\n data: localeData,\n locale: localeKey,\n })\n\n selects[selectTableName] = selects[selectTableName].concat(newRows)\n }\n })\n }\n } else if (Array.isArray(data[field.name])) {\n const newRows = transformSelects({\n id: insideArrayOrBlock ? data._uuid || data.id : undefined,\n data: data[field.name],\n locale: withinArrayOrBlockLocale,\n })\n\n selects[selectTableName] = selects[selectTableName].concat(newRows)\n }\n\n return\n }\n\n const valuesToTransform: { localeKey?: string; ref: unknown; value: unknown }[] = []\n\n if (isLocalized) {\n if (typeof fieldData === 'object' && fieldData !== null) {\n Object.entries(fieldData).forEach(([localeKey, localeData]) => {\n if (!locales[localeKey]) {\n locales[localeKey] = {}\n }\n\n valuesToTransform.push({\n localeKey,\n ref: locales,\n value: localeData,\n })\n })\n }\n } else {\n let ref = row\n\n if (forcedLocale) {\n if (!locales[forcedLocale]) {\n locales[forcedLocale] = {}\n }\n ref = locales[forcedLocale]\n }\n\n valuesToTransform.push({ ref, value: fieldData })\n }\n\n valuesToTransform.forEach(({ localeKey, ref, value }) => {\n let formattedValue = value\n\n if (field.type === 'date') {\n if (fieldName === 'updatedAt' && !formattedValue) {\n // let the db handle this\n formattedValue = new Date().toISOString()\n } else {\n if (typeof value === 'number' && !Number.isNaN(value)) {\n formattedValue = new Date(value).toISOString()\n } else if (value instanceof Date) {\n formattedValue = value.toISOString()\n }\n }\n }\n\n if (typeof value !== 'undefined') {\n if (value && field.type === 'point' && adapter.name !== 'sqlite') {\n formattedValue = sql`ST_GeomFromGeoJSON(${JSON.stringify(value)})`\n }\n\n if (field.type === 'text' && value && typeof value !== 'string') {\n formattedValue = JSON.stringify(value)\n }\n\n if (\n field.type === 'number' &&\n value &&\n typeof value === 'object' &&\n '$inc' in value &&\n typeof value.$inc === 'number'\n ) {\n if (!enableAtomicWrites) {\n throw new APIError(\n 'The passed data must not contain any nested fields for atomic writes',\n )\n }\n\n formattedValue = sql.raw(`${columnName} + ${value.$inc}`)\n }\n }\n\n if (typeof formattedValue !== 'undefined') {\n if (localeKey) {\n ref[localeKey][fieldName] = formattedValue\n } else {\n ref[fieldName] = formattedValue\n }\n }\n })\n })\n}\n"],"names":["sql","APIError","fieldIsVirtual","fieldShouldBeLocalized","toSnakeCase","isArrayOfRows","resolveBlockTableName","transformArray","transformBlocks","transformNumbers","transformRelationship","transformSelects","transformTexts","traverseFields","adapter","arrays","baseTableName","blocks","blocksToDelete","columnPrefix","data","enableAtomicWrites","existingLocales","fieldPrefix","fields","forcedLocale","insideArrayOrBlock","locales","numbers","numbersToDelete","parentIsLocalized","parentTableName","path","relationships","relationshipsToDelete","row","selects","texts","textsToDelete","withinArrayOrBlockLocale","_uuid","forEach","field","columnName","fieldName","fieldData","name","isLocalized","type","arrayTableName","tableNameMap","get","Object","entries","localeKey","localeData","Array","isArray","newRows","locale","localized","concat","blocksAsJSON","blockReferences","block","matchedBlock","payload","config","find","each","slug","add","id","flattenedFields","groupData","relationshipPath","relationTo","hasMany","push","baseRow","length","textPath","numberPath","selectTableName","undefined","valuesToTransform","ref","value","formattedValue","Date","toISOString","Number","isNaN","JSON","stringify","$inc","raw"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAMzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAUtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,yIAkB3E,IAAI,KAAG,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAMzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAUtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,yIAkB3E,IAAI,KAAG,OAAO,CAAC,CAAC,CAqiBlB,CAAA"}
|
package/dist/upsertRow/index.js
CHANGED
|
@@ -17,6 +17,9 @@ import { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js';
|
|
|
17
17
|
// When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs
|
|
18
18
|
// Make a new argument in upsertRow.ts and pass the slug from every operation.
|
|
19
19
|
joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertTarget, where })=>{
|
|
20
|
+
if (operation === 'create' && !data.createdAt) {
|
|
21
|
+
data.createdAt = new Date().toISOString();
|
|
22
|
+
}
|
|
20
23
|
let insertedRow = {
|
|
21
24
|
id
|
|
22
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/upsertRow/index.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SelectedFields } from 'drizzle-orm/sqlite-core'\nimport type { TypeWithID } from 'payload'\n\nimport { eq } from 'drizzle-orm'\nimport { ValidationError } from 'payload'\n\nimport type { BlockRowToInsert } from '../transform/write/types.js'\nimport type { Args } from './types.js'\n\nimport { buildFindManyArgs } from '../find/buildFindManyArgs.js'\nimport { transform } from '../transform/read/index.js'\nimport { transformForWrite } from '../transform/write/index.js'\nimport { deleteExistingArrayRows } from './deleteExistingArrayRows.js'\nimport { deleteExistingRowsByPath } from './deleteExistingRowsByPath.js'\nimport { insertArrays } from './insertArrays.js'\nimport { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js'\n\n/**\n * If `id` is provided, it will update the row with that ID.\n * If `where` is provided, it will update the row that matches the `where`\n * If neither `id` nor `where` is provided, it will create a new row.\n *\n * adapter function replaces the entire row and does not support partial updates.\n */\nexport const upsertRow = async <T extends Record<string, unknown> | TypeWithID>({\n id,\n adapter,\n data,\n db,\n fields,\n ignoreResult,\n // TODO:\n // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs\n // Make a new argument in upsertRow.ts and pass the slug from every operation.\n joinQuery: _joinQuery,\n operation,\n path = '',\n req,\n select,\n tableName,\n upsertTarget,\n where,\n}: Args): Promise<T> => {\n let insertedRow: Record<string, unknown> = { id }\n if (id && shouldUseOptimizedUpsertRow({ data, fields })) {\n const { row } = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: true,\n fields,\n tableName,\n })\n\n const drizzle = db as LibSQLDatabase\n\n if (ignoreResult) {\n await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n return ignoreResult === 'idOnly' ? ({ id } as T) : null\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n const findManyKeysLength = Object.keys(findManyArgs).length\n const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0\n\n if (findManyKeysLength === 0 || hasOnlyColumns) {\n // Optimization - No need for joins => can simply use returning(). This is optimal for very simple collections\n // without complex fields that live in separate tables like blocks, arrays, relationships, etc.\n\n const selectedFields: SelectedFields = {}\n if (hasOnlyColumns) {\n for (const [column, enabled] of Object.entries(findManyArgs.columns)) {\n if (enabled) {\n selectedFields[column] = adapter.tables[tableName][column]\n }\n }\n }\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n .returning(Object.keys(selectedFields).length ? selectedFields : undefined)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: docs[0],\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.\n\n await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n }\n // Split out the incoming data into the corresponding:\n // base row, locales, relationships, blocks, and arrays\n const rowToInsert = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n\n // First, we insert the main row\n try {\n if (operation === 'update') {\n const target = upsertTarget || adapter.tables[tableName].id\n\n if (id) {\n rowToInsert.row.id = id\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target },\n tableName,\n values: rowToInsert.row,\n })\n } else {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target, where },\n tableName,\n values: rowToInsert.row,\n })\n }\n } else {\n if (adapter.allowIDOnCreate && data.id) {\n rowToInsert.row.id = data.id\n }\n ;[insertedRow] = await adapter.insert({\n db,\n tableName,\n values: rowToInsert.row,\n })\n }\n\n const localesToInsert: Record<string, unknown>[] = []\n const relationsToInsert: Record<string, unknown>[] = []\n const textsToInsert: Record<string, unknown>[] = []\n const numbersToInsert: Record<string, unknown>[] = []\n const blocksToInsert: { [blockType: string]: BlockRowToInsert[] } = {}\n const selectsToInsert: { [selectTableName: string]: Record<string, unknown>[] } = {}\n\n // If there are locale rows with data, add the parent and locale to each\n if (Object.keys(rowToInsert.locales).length > 0) {\n Object.entries(rowToInsert.locales).forEach(([locale, localeRow]) => {\n localeRow._parentID = insertedRow.id\n localeRow._locale = locale\n localesToInsert.push(localeRow)\n })\n }\n\n // If there are relationships, add parent to each\n if (rowToInsert.relationships.length > 0) {\n rowToInsert.relationships.forEach((relation) => {\n relation.parent = insertedRow.id\n relationsToInsert.push(relation)\n })\n }\n\n // If there are texts, add parent to each\n if (rowToInsert.texts.length > 0) {\n rowToInsert.texts.forEach((textRow) => {\n textRow.parent = insertedRow.id\n textsToInsert.push(textRow)\n })\n }\n\n // If there are numbers, add parent to each\n if (rowToInsert.numbers.length > 0) {\n rowToInsert.numbers.forEach((numberRow) => {\n numberRow.parent = insertedRow.id\n numbersToInsert.push(numberRow)\n })\n }\n\n // If there are selects, add parent to each, and then\n // store by table name and rows\n if (Object.keys(rowToInsert.selects).length > 0) {\n Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows]) => {\n selectsToInsert[selectTableName] = []\n\n selectRows.forEach((row) => {\n if (typeof row.parent === 'undefined') {\n row.parent = insertedRow.id\n }\n\n selectsToInsert[selectTableName].push(row)\n })\n })\n }\n\n // If there are blocks, add parent to each, and then\n // store by table name and rows\n Object.keys(rowToInsert.blocks).forEach((tableName) => {\n rowToInsert.blocks[tableName].forEach((blockRow) => {\n blockRow.row._parentID = insertedRow.id\n if (!blocksToInsert[tableName]) {\n blocksToInsert[tableName] = []\n }\n if (blockRow.row.uuid) {\n delete blockRow.row.uuid\n }\n blocksToInsert[tableName].push(blockRow)\n })\n })\n\n // //////////////////////////////////\n // INSERT LOCALES\n // //////////////////////////////////\n\n if (localesToInsert.length > 0) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`]\n\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: localeTableName,\n where: eq(localeTable._parentID, insertedRow.id),\n })\n }\n\n await adapter.insert({\n db,\n tableName: localeTableName,\n values: localesToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT RELATIONSHIPS\n // //////////////////////////////////\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...relationsToInsert, ...rowToInsert.relationshipsToDelete],\n tableName: relationshipsTableName,\n })\n }\n\n if (relationsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany TEXTS\n // //////////////////////////////////\n\n const textsTableName = `${tableName}_texts`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...textsToInsert, ...rowToInsert.textsToDelete],\n tableName: textsTableName,\n })\n }\n\n if (textsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: textsTableName,\n values: textsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany NUMBERS\n // //////////////////////////////////\n\n const numbersTableName = `${tableName}_numbers`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...numbersToInsert, ...rowToInsert.numbersToDelete],\n tableName: numbersTableName,\n })\n }\n\n if (numbersToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: numbersTableName,\n values: numbersToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT BLOCKS\n // //////////////////////////////////\n\n const insertedBlockRows: Record<string, Record<string, unknown>[]> = {}\n\n if (operation === 'update') {\n for (const tableName of rowToInsert.blocksToDelete) {\n const blockTable = adapter.tables[tableName]\n await adapter.deleteWhere({\n db,\n tableName,\n where: eq(blockTable._parentID, insertedRow.id),\n })\n }\n }\n\n // When versions are enabled, adapter is used to track mapping between blocks/arrays ObjectID to their numeric generated representation, then we use it for nested to arrays/blocks select hasMany in versions.\n const arraysBlocksUUIDMap: Record<string, number | string> = {}\n\n for (const [tableName, blockRows] of Object.entries(blocksToInsert)) {\n insertedBlockRows[tableName] = await adapter.insert({\n db,\n tableName,\n values: blockRows.map(({ row }) => row),\n })\n\n insertedBlockRows[tableName].forEach((row, i) => {\n blockRows[i].row = row\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n arraysBlocksUUIDMap[row._uuid] = row.id\n }\n })\n\n const blockLocaleIndexMap: number[] = []\n\n const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => {\n if (Object.entries(blockRow.locales).length > 0) {\n Object.entries(blockRow.locales).forEach(([blockLocale, blockLocaleData]) => {\n if (Object.keys(blockLocaleData).length > 0) {\n blockLocaleData._parentID = blockRow.row.id\n blockLocaleData._locale = blockLocale\n acc.push(blockLocaleData)\n blockLocaleIndexMap.push(i)\n }\n })\n }\n\n return acc\n }, [])\n\n if (blockLocaleRowsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: blockLocaleRowsToInsert,\n })\n }\n\n await insertArrays({\n adapter,\n arrays: blockRows.map(({ arrays }) => arrays),\n db,\n parentRows: insertedBlockRows[tableName],\n uuidMap: arraysBlocksUUIDMap,\n })\n }\n\n // //////////////////////////////////\n // INSERT ARRAYS RECURSIVELY\n // //////////////////////////////////\n\n if (operation === 'update') {\n for (const arrayTableName of Object.keys(rowToInsert.arrays)) {\n await deleteExistingArrayRows({\n adapter,\n db,\n parentID: insertedRow.id,\n tableName: arrayTableName,\n })\n }\n }\n\n await insertArrays({\n adapter,\n arrays: [rowToInsert.arrays],\n db,\n parentRows: [insertedRow],\n uuidMap: arraysBlocksUUIDMap,\n })\n\n // //////////////////////////////////\n // INSERT hasMany SELECTS\n // //////////////////////////////////\n\n for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)) {\n const selectTable = adapter.tables[selectTableName]\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: selectTableName,\n where: eq(selectTable.parent, insertedRow.id),\n })\n }\n\n if (Object.keys(arraysBlocksUUIDMap).length > 0) {\n tableRows.forEach((row: any) => {\n if (row.parent in arraysBlocksUUIDMap) {\n row.parent = arraysBlocksUUIDMap[row.parent]\n }\n })\n }\n\n if (tableRows.length) {\n await adapter.insert({\n db,\n tableName: selectTableName,\n values: tableRows,\n })\n }\n }\n\n // //////////////////////////////////\n // Error Handling\n // //////////////////////////////////\n } catch (caughtError) {\n // Unique constraint violation error\n // '23505' is the code for PostgreSQL, and 'SQLITE_CONSTRAINT_UNIQUE' is for SQLite\n\n let error = caughtError\n if (typeof caughtError === 'object' && 'cause' in caughtError) {\n error = caughtError.cause\n }\n\n if (error.code === '23505' || error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n let fieldName: null | string = null\n // We need to try and find the right constraint for the field but if we can't we fallback to a generic message\n if (error.code === '23505') {\n // For PostgreSQL, we can try to extract the field name from the error constraint\n if (adapter.fieldConstraints?.[tableName]?.[error.constraint]) {\n fieldName = adapter.fieldConstraints[tableName]?.[error.constraint]\n } else {\n const replacement = `${tableName}_`\n\n if (error.constraint.includes(replacement)) {\n const replacedConstraint = error.constraint.replace(replacement, '')\n\n if (replacedConstraint && adapter.fieldConstraints[tableName]?.[replacedConstraint]) {\n fieldName = adapter.fieldConstraints[tableName][replacedConstraint]\n }\n }\n }\n\n if (!fieldName) {\n // Last case scenario we extract the key and value from the detail on the error\n const detail = error.detail\n const regex = /Key \\(([^)]+)\\)=\\(([^)]+)\\)/\n const match: string[] = detail.match(regex)\n\n if (match && match[1]) {\n const key = match[1]\n\n fieldName = key\n }\n }\n } else if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n /**\n * For SQLite, we can try to extract the field name from the error message\n * The message typically looks like:\n * \"UNIQUE constraint failed: table_name.field_name\"\n */\n const regex = /UNIQUE constraint failed: ([^.]+)\\.([^.]+)/\n const match: string[] = error.message.match(regex)\n\n if (match && match[2]) {\n if (adapter.fieldConstraints[tableName]) {\n fieldName = adapter.fieldConstraints[tableName][`${match[2]}_idx`]\n }\n\n if (!fieldName) {\n fieldName = match[2]\n }\n }\n }\n\n throw new ValidationError(\n {\n id,\n errors: [\n {\n message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',\n path: fieldName,\n },\n ],\n req,\n },\n req?.t,\n )\n } else {\n throw error\n }\n }\n\n if (ignoreResult === 'idOnly') {\n return { id: insertedRow.id } as T\n }\n\n if (ignoreResult) {\n return data as T\n }\n\n // //////////////////////////////////\n // RETRIEVE NEWLY UPDATED ROW\n // //////////////////////////////////\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n // //////////////////////////////////\n // TRANSFORM DATA\n // //////////////////////////////////\n\n const result = transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n\n return result\n}\n"],"names":["eq","ValidationError","buildFindManyArgs","transform","transformForWrite","deleteExistingArrayRows","deleteExistingRowsByPath","insertArrays","shouldUseOptimizedUpsertRow","upsertRow","id","adapter","data","db","fields","ignoreResult","joinQuery","_joinQuery","operation","path","req","select","tableName","upsertTarget","where","insertedRow","row","enableAtomicWrites","drizzle","update","tables","set","findManyArgs","depth","findManyKeysLength","Object","keys","length","hasOnlyColumns","columns","selectedFields","column","enabled","entries","docs","returning","undefined","config","payload","doc","query","findFirst","rowToInsert","target","insert","onConflictDoUpdate","values","allowIDOnCreate","localesToInsert","relationsToInsert","textsToInsert","numbersToInsert","blocksToInsert","selectsToInsert","locales","forEach","locale","localeRow","_parentID","_locale","push","relationships","relation","parent","texts","textRow","numbers","numberRow","selects","selectTableName","selectRows","blocks","blockRow","uuid","localeTableName","localesSuffix","localeTable","deleteWhere","relationshipsTableName","relationshipsSuffix","localeColumnName","parentColumnName","parentID","pathColumnName","rows","relationshipsToDelete","textsTableName","textsToDelete","numbersTableName","numbersToDelete","insertedBlockRows","blocksToDelete","blockTable","arraysBlocksUUIDMap","blockRows","map","i","_uuid","blockLocaleIndexMap","blockLocaleRowsToInsert","reduce","acc","blockLocale","blockLocaleData","arrays","parentRows","uuidMap","arrayTableName","tableRows","selectTable","caughtError","error","cause","code","fieldName","fieldConstraints","constraint","replacement","includes","replacedConstraint","replace","detail","regex","match","key","message","errors","t","result"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/upsertRow/index.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { SelectedFields } from 'drizzle-orm/sqlite-core'\nimport type { TypeWithID } from 'payload'\n\nimport { eq } from 'drizzle-orm'\nimport { ValidationError } from 'payload'\n\nimport type { BlockRowToInsert } from '../transform/write/types.js'\nimport type { Args } from './types.js'\n\nimport { buildFindManyArgs } from '../find/buildFindManyArgs.js'\nimport { transform } from '../transform/read/index.js'\nimport { transformForWrite } from '../transform/write/index.js'\nimport { deleteExistingArrayRows } from './deleteExistingArrayRows.js'\nimport { deleteExistingRowsByPath } from './deleteExistingRowsByPath.js'\nimport { insertArrays } from './insertArrays.js'\nimport { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js'\n\n/**\n * If `id` is provided, it will update the row with that ID.\n * If `where` is provided, it will update the row that matches the `where`\n * If neither `id` nor `where` is provided, it will create a new row.\n *\n * adapter function replaces the entire row and does not support partial updates.\n */\nexport const upsertRow = async <T extends Record<string, unknown> | TypeWithID>({\n id,\n adapter,\n data,\n db,\n fields,\n ignoreResult,\n // TODO:\n // When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs\n // Make a new argument in upsertRow.ts and pass the slug from every operation.\n joinQuery: _joinQuery,\n operation,\n path = '',\n req,\n select,\n tableName,\n upsertTarget,\n where,\n}: Args): Promise<T> => {\n if (operation === 'create' && !data.createdAt) {\n data.createdAt = new Date().toISOString()\n }\n\n let insertedRow: Record<string, unknown> = { id }\n if (id && shouldUseOptimizedUpsertRow({ data, fields })) {\n const { row } = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: true,\n fields,\n tableName,\n })\n\n const drizzle = db as LibSQLDatabase\n\n if (ignoreResult) {\n await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n return ignoreResult === 'idOnly' ? ({ id } as T) : null\n }\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n const findManyKeysLength = Object.keys(findManyArgs).length\n const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0\n\n if (findManyKeysLength === 0 || hasOnlyColumns) {\n // Optimization - No need for joins => can simply use returning(). This is optimal for very simple collections\n // without complex fields that live in separate tables like blocks, arrays, relationships, etc.\n\n const selectedFields: SelectedFields = {}\n if (hasOnlyColumns) {\n for (const [column, enabled] of Object.entries(findManyArgs.columns)) {\n if (enabled) {\n selectedFields[column] = adapter.tables[tableName][column]\n }\n }\n }\n\n const docs = await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n .returning(Object.keys(selectedFields).length ? selectedFields : undefined)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: docs[0],\n fields,\n joinQuery: false,\n tableName,\n })\n }\n\n // DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.\n\n await drizzle\n .update(adapter.tables[tableName])\n .set(row)\n .where(eq(adapter.tables[tableName].id, id))\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n return transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n }\n // Split out the incoming data into the corresponding:\n // base row, locales, relationships, blocks, and arrays\n const rowToInsert = transformForWrite({\n adapter,\n data,\n enableAtomicWrites: false,\n fields,\n path,\n tableName,\n })\n\n // First, we insert the main row\n try {\n if (operation === 'update') {\n const target = upsertTarget || adapter.tables[tableName].id\n\n if (id) {\n rowToInsert.row.id = id\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target },\n tableName,\n values: rowToInsert.row,\n })\n } else {\n ;[insertedRow] = await adapter.insert({\n db,\n onConflictDoUpdate: { set: rowToInsert.row, target, where },\n tableName,\n values: rowToInsert.row,\n })\n }\n } else {\n if (adapter.allowIDOnCreate && data.id) {\n rowToInsert.row.id = data.id\n }\n ;[insertedRow] = await adapter.insert({\n db,\n tableName,\n values: rowToInsert.row,\n })\n }\n\n const localesToInsert: Record<string, unknown>[] = []\n const relationsToInsert: Record<string, unknown>[] = []\n const textsToInsert: Record<string, unknown>[] = []\n const numbersToInsert: Record<string, unknown>[] = []\n const blocksToInsert: { [blockType: string]: BlockRowToInsert[] } = {}\n const selectsToInsert: { [selectTableName: string]: Record<string, unknown>[] } = {}\n\n // If there are locale rows with data, add the parent and locale to each\n if (Object.keys(rowToInsert.locales).length > 0) {\n Object.entries(rowToInsert.locales).forEach(([locale, localeRow]) => {\n localeRow._parentID = insertedRow.id\n localeRow._locale = locale\n localesToInsert.push(localeRow)\n })\n }\n\n // If there are relationships, add parent to each\n if (rowToInsert.relationships.length > 0) {\n rowToInsert.relationships.forEach((relation) => {\n relation.parent = insertedRow.id\n relationsToInsert.push(relation)\n })\n }\n\n // If there are texts, add parent to each\n if (rowToInsert.texts.length > 0) {\n rowToInsert.texts.forEach((textRow) => {\n textRow.parent = insertedRow.id\n textsToInsert.push(textRow)\n })\n }\n\n // If there are numbers, add parent to each\n if (rowToInsert.numbers.length > 0) {\n rowToInsert.numbers.forEach((numberRow) => {\n numberRow.parent = insertedRow.id\n numbersToInsert.push(numberRow)\n })\n }\n\n // If there are selects, add parent to each, and then\n // store by table name and rows\n if (Object.keys(rowToInsert.selects).length > 0) {\n Object.entries(rowToInsert.selects).forEach(([selectTableName, selectRows]) => {\n selectsToInsert[selectTableName] = []\n\n selectRows.forEach((row) => {\n if (typeof row.parent === 'undefined') {\n row.parent = insertedRow.id\n }\n\n selectsToInsert[selectTableName].push(row)\n })\n })\n }\n\n // If there are blocks, add parent to each, and then\n // store by table name and rows\n Object.keys(rowToInsert.blocks).forEach((tableName) => {\n rowToInsert.blocks[tableName].forEach((blockRow) => {\n blockRow.row._parentID = insertedRow.id\n if (!blocksToInsert[tableName]) {\n blocksToInsert[tableName] = []\n }\n if (blockRow.row.uuid) {\n delete blockRow.row.uuid\n }\n blocksToInsert[tableName].push(blockRow)\n })\n })\n\n // //////////////////////////////////\n // INSERT LOCALES\n // //////////////////////////////////\n\n if (localesToInsert.length > 0) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`]\n\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: localeTableName,\n where: eq(localeTable._parentID, insertedRow.id),\n })\n }\n\n await adapter.insert({\n db,\n tableName: localeTableName,\n values: localesToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT RELATIONSHIPS\n // //////////////////////////////////\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...relationsToInsert, ...rowToInsert.relationshipsToDelete],\n tableName: relationshipsTableName,\n })\n }\n\n if (relationsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: relationshipsTableName,\n values: relationsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany TEXTS\n // //////////////////////////////////\n\n const textsTableName = `${tableName}_texts`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...textsToInsert, ...rowToInsert.textsToDelete],\n tableName: textsTableName,\n })\n }\n\n if (textsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: textsTableName,\n values: textsToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT hasMany NUMBERS\n // //////////////////////////////////\n\n const numbersTableName = `${tableName}_numbers`\n\n if (operation === 'update') {\n await deleteExistingRowsByPath({\n adapter,\n db,\n localeColumnName: 'locale',\n parentColumnName: 'parent',\n parentID: insertedRow.id,\n pathColumnName: 'path',\n rows: [...numbersToInsert, ...rowToInsert.numbersToDelete],\n tableName: numbersTableName,\n })\n }\n\n if (numbersToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: numbersTableName,\n values: numbersToInsert,\n })\n }\n\n // //////////////////////////////////\n // INSERT BLOCKS\n // //////////////////////////////////\n\n const insertedBlockRows: Record<string, Record<string, unknown>[]> = {}\n\n if (operation === 'update') {\n for (const tableName of rowToInsert.blocksToDelete) {\n const blockTable = adapter.tables[tableName]\n await adapter.deleteWhere({\n db,\n tableName,\n where: eq(blockTable._parentID, insertedRow.id),\n })\n }\n }\n\n // When versions are enabled, adapter is used to track mapping between blocks/arrays ObjectID to their numeric generated representation, then we use it for nested to arrays/blocks select hasMany in versions.\n const arraysBlocksUUIDMap: Record<string, number | string> = {}\n\n for (const [tableName, blockRows] of Object.entries(blocksToInsert)) {\n insertedBlockRows[tableName] = await adapter.insert({\n db,\n tableName,\n values: blockRows.map(({ row }) => row),\n })\n\n insertedBlockRows[tableName].forEach((row, i) => {\n blockRows[i].row = row\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n arraysBlocksUUIDMap[row._uuid] = row.id\n }\n })\n\n const blockLocaleIndexMap: number[] = []\n\n const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => {\n if (Object.entries(blockRow.locales).length > 0) {\n Object.entries(blockRow.locales).forEach(([blockLocale, blockLocaleData]) => {\n if (Object.keys(blockLocaleData).length > 0) {\n blockLocaleData._parentID = blockRow.row.id\n blockLocaleData._locale = blockLocale\n acc.push(blockLocaleData)\n blockLocaleIndexMap.push(i)\n }\n })\n }\n\n return acc\n }, [])\n\n if (blockLocaleRowsToInsert.length > 0) {\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: blockLocaleRowsToInsert,\n })\n }\n\n await insertArrays({\n adapter,\n arrays: blockRows.map(({ arrays }) => arrays),\n db,\n parentRows: insertedBlockRows[tableName],\n uuidMap: arraysBlocksUUIDMap,\n })\n }\n\n // //////////////////////////////////\n // INSERT ARRAYS RECURSIVELY\n // //////////////////////////////////\n\n if (operation === 'update') {\n for (const arrayTableName of Object.keys(rowToInsert.arrays)) {\n await deleteExistingArrayRows({\n adapter,\n db,\n parentID: insertedRow.id,\n tableName: arrayTableName,\n })\n }\n }\n\n await insertArrays({\n adapter,\n arrays: [rowToInsert.arrays],\n db,\n parentRows: [insertedRow],\n uuidMap: arraysBlocksUUIDMap,\n })\n\n // //////////////////////////////////\n // INSERT hasMany SELECTS\n // //////////////////////////////////\n\n for (const [selectTableName, tableRows] of Object.entries(selectsToInsert)) {\n const selectTable = adapter.tables[selectTableName]\n if (operation === 'update') {\n await adapter.deleteWhere({\n db,\n tableName: selectTableName,\n where: eq(selectTable.parent, insertedRow.id),\n })\n }\n\n if (Object.keys(arraysBlocksUUIDMap).length > 0) {\n tableRows.forEach((row: any) => {\n if (row.parent in arraysBlocksUUIDMap) {\n row.parent = arraysBlocksUUIDMap[row.parent]\n }\n })\n }\n\n if (tableRows.length) {\n await adapter.insert({\n db,\n tableName: selectTableName,\n values: tableRows,\n })\n }\n }\n\n // //////////////////////////////////\n // Error Handling\n // //////////////////////////////////\n } catch (caughtError) {\n // Unique constraint violation error\n // '23505' is the code for PostgreSQL, and 'SQLITE_CONSTRAINT_UNIQUE' is for SQLite\n\n let error = caughtError\n if (typeof caughtError === 'object' && 'cause' in caughtError) {\n error = caughtError.cause\n }\n\n if (error.code === '23505' || error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n let fieldName: null | string = null\n // We need to try and find the right constraint for the field but if we can't we fallback to a generic message\n if (error.code === '23505') {\n // For PostgreSQL, we can try to extract the field name from the error constraint\n if (adapter.fieldConstraints?.[tableName]?.[error.constraint]) {\n fieldName = adapter.fieldConstraints[tableName]?.[error.constraint]\n } else {\n const replacement = `${tableName}_`\n\n if (error.constraint.includes(replacement)) {\n const replacedConstraint = error.constraint.replace(replacement, '')\n\n if (replacedConstraint && adapter.fieldConstraints[tableName]?.[replacedConstraint]) {\n fieldName = adapter.fieldConstraints[tableName][replacedConstraint]\n }\n }\n }\n\n if (!fieldName) {\n // Last case scenario we extract the key and value from the detail on the error\n const detail = error.detail\n const regex = /Key \\(([^)]+)\\)=\\(([^)]+)\\)/\n const match: string[] = detail.match(regex)\n\n if (match && match[1]) {\n const key = match[1]\n\n fieldName = key\n }\n }\n } else if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n /**\n * For SQLite, we can try to extract the field name from the error message\n * The message typically looks like:\n * \"UNIQUE constraint failed: table_name.field_name\"\n */\n const regex = /UNIQUE constraint failed: ([^.]+)\\.([^.]+)/\n const match: string[] = error.message.match(regex)\n\n if (match && match[2]) {\n if (adapter.fieldConstraints[tableName]) {\n fieldName = adapter.fieldConstraints[tableName][`${match[2]}_idx`]\n }\n\n if (!fieldName) {\n fieldName = match[2]\n }\n }\n }\n\n throw new ValidationError(\n {\n id,\n errors: [\n {\n message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',\n path: fieldName,\n },\n ],\n req,\n },\n req?.t,\n )\n } else {\n throw error\n }\n }\n\n if (ignoreResult === 'idOnly') {\n return { id: insertedRow.id } as T\n }\n\n if (ignoreResult) {\n return data as T\n }\n\n // //////////////////////////////////\n // RETRIEVE NEWLY UPDATED ROW\n // //////////////////////////////////\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n depth: 0,\n fields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id)\n\n const doc = await db.query[tableName].findFirst(findManyArgs)\n\n // //////////////////////////////////\n // TRANSFORM DATA\n // //////////////////////////////////\n\n const result = transform<T>({\n adapter,\n config: adapter.payload.config,\n data: doc,\n fields,\n joinQuery: false,\n tableName,\n })\n\n return result\n}\n"],"names":["eq","ValidationError","buildFindManyArgs","transform","transformForWrite","deleteExistingArrayRows","deleteExistingRowsByPath","insertArrays","shouldUseOptimizedUpsertRow","upsertRow","id","adapter","data","db","fields","ignoreResult","joinQuery","_joinQuery","operation","path","req","select","tableName","upsertTarget","where","createdAt","Date","toISOString","insertedRow","row","enableAtomicWrites","drizzle","update","tables","set","findManyArgs","depth","findManyKeysLength","Object","keys","length","hasOnlyColumns","columns","selectedFields","column","enabled","entries","docs","returning","undefined","config","payload","doc","query","findFirst","rowToInsert","target","insert","onConflictDoUpdate","values","allowIDOnCreate","localesToInsert","relationsToInsert","textsToInsert","numbersToInsert","blocksToInsert","selectsToInsert","locales","forEach","locale","localeRow","_parentID","_locale","push","relationships","relation","parent","texts","textRow","numbers","numberRow","selects","selectTableName","selectRows","blocks","blockRow","uuid","localeTableName","localesSuffix","localeTable","deleteWhere","relationshipsTableName","relationshipsSuffix","localeColumnName","parentColumnName","parentID","pathColumnName","rows","relationshipsToDelete","textsTableName","textsToDelete","numbersTableName","numbersToDelete","insertedBlockRows","blocksToDelete","blockTable","arraysBlocksUUIDMap","blockRows","map","i","_uuid","blockLocaleIndexMap","blockLocaleRowsToInsert","reduce","acc","blockLocale","blockLocaleData","arrays","parentRows","uuidMap","arrayTableName","tableRows","selectTable","caughtError","error","cause","code","fieldName","fieldConstraints","constraint","replacement","includes","replacedConstraint","replace","detail","regex","match","key","message","errors","t","result"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/drizzle",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.54.0-internal.84621da",
|
|
4
4
|
"description": "A library of shared functions used by different payload database adapters",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -54,11 +54,11 @@
|
|
|
54
54
|
"@libsql/client": "0.14.0",
|
|
55
55
|
"@types/pg": "8.10.2",
|
|
56
56
|
"@types/to-snake-case": "1.0.0",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
57
|
+
"@payloadcms/eslint-config": "3.28.0",
|
|
58
|
+
"payload": "3.54.0-internal.84621da"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
|
-
"payload": "3.
|
|
61
|
+
"payload": "3.54.0-internal.84621da"
|
|
62
62
|
},
|
|
63
63
|
"scripts": {
|
|
64
64
|
"build": "pnpm build:swc && pnpm build:types",
|