@payloadcms/drizzle 3.92.1 → 3.94.0-internal.78c6d86
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/dist/exports/postgres.d.ts +1 -1
- package/dist/exports/postgres.d.ts.map +1 -1
- package/dist/exports/postgres.js +1 -1
- package/dist/exports/postgres.js.map +1 -1
- package/dist/exports/sqlite.d.ts +1 -0
- package/dist/exports/sqlite.d.ts.map +1 -1
- package/dist/exports/sqlite.js +1 -0
- package/dist/exports/sqlite.js.map +1 -1
- package/dist/postgres/requireDrizzleKit.d.ts +4 -0
- package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
- package/dist/postgres/requireDrizzleKit.js +15 -10
- package/dist/postgres/requireDrizzleKit.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +9 -1
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +47 -2
- package/dist/schema/build.js.map +1 -1
- package/dist/schema/buildRawSchema.spec.js +96 -9
- package/dist/schema/buildRawSchema.spec.js.map +1 -1
- package/dist/schema/traverseFields.d.ts.map +1 -1
- package/dist/schema/traverseFields.js +57 -14
- package/dist/schema/traverseFields.js.map +1 -1
- package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
- package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
- package/dist/sqlite/createRequireDrizzleKit.js +28 -0
- package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
- package/dist/sqlite/createRequireDrizzleKit.spec.js +61 -0
- package/dist/sqlite/createRequireDrizzleKit.spec.js.map +1 -0
- package/dist/sqlite/drizzleKitTooling.spec.js +92 -0
- package/dist/sqlite/drizzleKitTooling.spec.js.map +1 -0
- package/dist/sqlite/requireDrizzleKit.d.ts +1 -2
- package/dist/sqlite/requireDrizzleKit.d.ts.map +1 -1
- package/dist/sqlite/requireDrizzleKit.js +4 -10
- package/dist/sqlite/requireDrizzleKit.js.map +1 -1
- package/dist/transform/getBlockFromField.d.ts +8 -0
- package/dist/transform/getBlockFromField.d.ts.map +1 -0
- package/dist/transform/getBlockFromField.js +6 -0
- package/dist/transform/getBlockFromField.js.map +1 -0
- package/dist/transform/read/traverseFields.d.ts.map +1 -1
- package/dist/transform/read/traverseFields.js +12 -3
- package/dist/transform/read/traverseFields.js.map +1 -1
- package/dist/transform/write/blocks.d.ts.map +1 -1
- package/dist/transform/write/blocks.js +6 -1
- package/dist/transform/write/blocks.js.map +1 -1
- package/dist/transform/write/traverseFields.js +1 -1
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/traverseFields.ts"],"sourcesContent":["import type { FlattenedField } from 'payload'\n\nimport { InvalidConfiguration } from 'payload'\nimport {\n fieldAffectsData,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n optionIsObject,\n} from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { getArrayRelationName } from '../utilities/getArrayRelationName.js'\nimport { hasLocalesTable } from '../utilities/hasLocalesTable.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport {\n InternalBlockTableNameIndex,\n setInternalBlockIndex,\n validateExistingBlockIsIdentical,\n} from '../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { idToUUID } from './idToUUID.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n blocksTableNameMap: Record<string, number>\n columnPrefix?: string\n columns: Record<string, RawColumn>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: FlattenedField[]\n forceLocalized?: boolean\n indexes: Record<string, RawIndex>\n localesColumns: Record<string, RawColumn>\n localesIndexes: Record<string, RawIndex>\n newTableName: string\n parentIsLocalized: boolean\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: IDType\n rootTableName: string\n setColumnID: SetColumnID\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n blocksTableNameMap,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentIsLocalized,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n\n const idColumn = columns.id\n\n if (idColumn && ['numeric', 'text', 'uuid', 'varchar'].includes(idColumn.type)) {\n parentIDColType = idColumn.type as IDType\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let targetTable = columns\n let targetIndexes = indexes\n\n const columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n const fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (isFieldLocalized || forceLocalized) &&\n field.type !== 'array' &&\n (field.type !== 'blocks' || adapter.blocksAsJSON) &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = {\n name: indexName,\n on: isFieldLocalized ? [fieldName, '_locale'] : fieldName,\n unique,\n }\n }\n\n switch (field.type) {\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, RawColumn> = {\n _order: {\n name: '_order',\n type: 'integer',\n notNull: true,\n },\n _parentID: {\n name: '_parent_id',\n type: parentIDColType,\n notNull: true,\n },\n }\n\n const baseIndexes: Record<string, RawIndex> = {\n _orderIdx: {\n name: `${arrayTableName}_order_idx`,\n on: ['_order'],\n },\n _parentIDIdx: {\n name: `${arrayTableName}_parent_id_idx`,\n on: '_parentID',\n },\n }\n\n const baseForeignKeys: Record<string, RawForeignKey> = {\n _parentIDFk: {\n name: `${arrayTableName}_parent_id_fk`,\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: parentTableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n baseIndexes._localeIdx = {\n name: `${arrayTableName}_locale_idx`,\n on: '_locale',\n }\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseForeignKeys,\n baseIndexes,\n blocksTableNameMap,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.flattenedFields) : field.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n setColumnID,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n const relationName = getArrayRelationName({\n field,\n path: fieldName,\n tableName: arrayTableName,\n })\n\n relationsToBuild.set(relationName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n const arrayRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: arrayTableName,\n },\n ],\n references: ['id'],\n relationName,\n to: parentTableName,\n },\n }\n\n if (\n hasLocalesTable({\n fields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n })\n ) {\n arrayRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: `${arrayTableName}${adapter.localesSuffix}`,\n }\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n\n arrayRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: arrayWithLocalized,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n\n if (type === 'many') {\n arrayRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n\n adapter.rawRelations[arrayTableName] = arrayRelations\n\n break\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'jsonb',\n },\n field,\n )\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n ;(field.blockReferences ?? field.blocks).forEach((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n let blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const isLocalizedBlockTable =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n if (typeof blocksTableNameMap[blockTableName] === 'undefined') {\n blocksTableNameMap[blockTableName] = 1\n } else if (\n !adapter.rawTables[blockTableName] ||\n !validateExistingBlockIsIdentical({\n block,\n localized: isLocalizedBlockTable,\n parentIsLocalized,\n table: adapter.rawTables[blockTableName],\n tableLocales: adapter.rawTables[`${blockTableName}${adapter.localesSuffix}`],\n })\n ) {\n blocksTableNameMap[blockTableName]++\n setInternalBlockIndex(block, blocksTableNameMap[blockTableName])\n blockTableName = `${blockTableName}_${blocksTableNameMap[blockTableName]}`\n }\n let relationName = `_blocks_${block.slug}`\n if (typeof block[InternalBlockTableNameIndex] !== 'undefined') {\n relationName = `_blocks_${block.slug}_${block[InternalBlockTableNameIndex]}`\n }\n\n if (!adapter.rawTables[blockTableName]) {\n const baseColumns: Record<string, RawColumn> = {\n _order: {\n name: '_order',\n type: 'integer',\n notNull: true,\n },\n _parentID: {\n name: '_parent_id',\n type: rootTableIDColType,\n notNull: true,\n },\n _path: {\n name: '_path',\n type: 'text',\n notNull: true,\n },\n }\n\n const baseIndexes: Record<string, RawIndex> = {\n _orderIdx: {\n name: `${blockTableName}_order_idx`,\n on: '_order',\n },\n _parentIDIdx: {\n name: `${blockTableName}_parent_id_idx`,\n on: ['_parentID'],\n },\n _pathIdx: {\n name: `${blockTableName}_path_idx`,\n on: '_path',\n },\n }\n\n const baseForeignKeys: Record<string, RawForeignKey> = {\n _parentIdFk: {\n name: `${blockTableName}_parent_id_fk`,\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: rootTableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n if (isLocalizedBlockTable) {\n baseColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n baseIndexes._localeIdx = {\n name: `${blockTableName}_locale_idx`,\n on: '_locale',\n }\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseForeignKeys,\n baseIndexes,\n blocksTableNameMap,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.flattenedFields) : block.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n setColumnID,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalizedBlockTable,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n const blockRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: blockTableName,\n },\n ],\n references: ['id'],\n relationName,\n to: rootTableName,\n },\n }\n\n if (\n hasLocalesTable({\n fields: block.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n })\n ) {\n blockRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: `${blockTableName}${adapter.localesSuffix}`,\n }\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n\n blockRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: blockWithLocalized,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n\n if (type === 'many') {\n blockRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n\n adapter.rawRelations[blockTableName] = blockRelations\n }\n\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(relationName, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n case 'checkbox': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'boolean',\n },\n field,\n )\n\n break\n }\n\n case 'code':\n case 'email':\n case 'textarea': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'varchar',\n },\n field,\n )\n\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'timestamp',\n mode: 'string',\n precision: 3,\n withTimezone: true,\n },\n field,\n )\n\n break\n }\n\n case 'group':\n case 'tab': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n blocksTableNameMap,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.flattenedFields,\n forceLocalized: isFieldLocalized || Boolean(forceLocalized),\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || isFieldLocalized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'json':\n case 'richText': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'jsonb',\n },\n field,\n )\n\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'numeric',\n },\n field,\n )\n }\n\n break\n }\n\n case 'point': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'geometry',\n },\n field,\n )\n\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n const options = field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n })\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, RawColumn> = {\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: parentIDColType,\n notNull: true,\n },\n value: {\n name: 'value',\n type: 'enum',\n enumName: createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n }),\n options,\n },\n }\n\n const baseIndexes: Record<string, RawIndex> = {\n orderIdx: {\n name: `${selectTableName}_order_idx`,\n on: 'order',\n },\n parentIdx: {\n name: `${selectTableName}_parent_idx`,\n on: 'parent',\n },\n }\n\n const baseForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: `${selectTableName}_parent_fk`,\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: parentTableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n baseIndexes.localeIdx = {\n name: `${selectTableName}_locale_idx`,\n on: 'locale',\n }\n }\n\n if (field.index) {\n baseIndexes.value = {\n name: `${selectTableName}_value_idx`,\n on: 'value',\n }\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseForeignKeys,\n baseIndexes,\n blocksTableNameMap,\n disableNotNull,\n disableUnique,\n fields: [],\n parentIsLocalized: parentIsLocalized || field.localized,\n rootTableName,\n setColumnID,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.rawRelations[selectTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: selectTableName,\n },\n ],\n references: ['id'],\n relationName: fieldName,\n to: parentTableName,\n },\n }\n } else {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'enum',\n enumName,\n options,\n },\n field,\n )\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType: IDType = isUUIDType(adapter.idType) ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = {\n name: `${columnName}_id`,\n type: colType,\n reference: {\n name: 'id',\n onDelete: 'set null',\n table: tableName,\n },\n }\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (isFieldLocalized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull = true\n }\n break\n }\n\n if (\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'varchar',\n },\n field,\n )\n }\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull = true\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["InvalidConfiguration","fieldAffectsData","fieldIsVirtual","fieldShouldBeLocalized","optionIsObject","toSnakeCase","createTableName","buildIndexName","getArrayRelationName","hasLocalesTable","isUUIDType","InternalBlockTableNameIndex","setInternalBlockIndex","validateExistingBlockIsIdentical","buildTable","idToUUID","withDefault","traverseFields","adapter","blocksTableNameMap","columnPrefix","columns","disableNotNull","disableRelsTableUnique","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentIsLocalized","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","setColumnID","uniqueRelationships","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","idColumn","id","includes","type","forEach","field","name","targetTable","targetIndexes","columnName","fieldName","replace","isFieldLocalized","payload","config","localization","blocksAsJSON","hasMany","unique","index","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","on","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","baseColumns","_order","notNull","_parentID","baseIndexes","_orderIdx","_parentIDIdx","baseForeignKeys","_parentIDFk","foreignColumns","table","onDelete","isLocalized","_locale","locale","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","flattenedFields","localized","rootRelationships","rootUniqueRelationships","tableName","relationName","path","set","target","arrayRelations","references","to","_locales","localesSuffix","key","arrayWithLocalized","rawRelations","blockReferences","blocks","_block","block","blockTableName","isLocalizedBlockTable","rawTables","tableLocales","slug","_path","_pathIdx","_parentIdFk","blockRelations","blockWithLocalized","mode","precision","withTimezone","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","enumName","options","map","option","value","selectTableName","order","parent","orderIdx","parentIdx","parentFk","localeIdx","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","reference","required"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/schema/traverseFields.ts"],"sourcesContent":["import type { FlattenedField } from 'payload'\n\nimport { InvalidConfiguration } from 'payload'\nimport {\n fieldAffectsData,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n optionIsObject,\n} from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildForeignKeyName } from '../utilities/buildForeignKeyName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { getArrayRelationName } from '../utilities/getArrayRelationName.js'\nimport { hasLocalesTable } from '../utilities/hasLocalesTable.js'\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport {\n InternalBlockTableNameIndex,\n setInternalBlockIndex,\n validateExistingBlockIsIdentical,\n} from '../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { idToUUID } from './idToUUID.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n blocksTableNameMap: Record<string, number>\n columnPrefix?: string\n columns: Record<string, RawColumn>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: FlattenedField[]\n forceLocalized?: boolean\n indexes: Record<string, RawIndex>\n localesColumns: Record<string, RawColumn>\n localesIndexes: Record<string, RawIndex>\n newTableName: string\n parentIsLocalized: boolean\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: IDType\n rootTableName: string\n setColumnID: SetColumnID\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n blocksTableNameMap,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentIsLocalized,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n\n const idColumn = columns.id\n\n if (idColumn && ['numeric', 'text', 'uuid', 'varchar'].includes(idColumn.type)) {\n parentIDColType = idColumn.type as IDType\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let targetTable = columns\n let targetIndexes = indexes\n\n const columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n const fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n const isFieldLocalized = fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (isFieldLocalized || forceLocalized) &&\n field.type !== 'array' &&\n (field.type !== 'blocks' || adapter.blocksAsJSON) &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = {\n name: indexName,\n on: isFieldLocalized ? [fieldName, '_locale'] : fieldName,\n unique,\n }\n }\n\n switch (field.type) {\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, RawColumn> = {\n _order: {\n name: '_order',\n type: 'integer',\n notNull: true,\n },\n _parentID: {\n name: '_parent_id',\n type: parentIDColType,\n notNull: true,\n },\n }\n\n const baseIndexes: Record<string, RawIndex> = {\n _orderIdx: {\n name: buildIndexName({ name: `${arrayTableName}_order`, adapter }),\n on: ['_order'],\n },\n _parentIDIdx: {\n name: buildIndexName({ name: `${arrayTableName}_parent_id`, adapter }),\n on: '_parentID',\n },\n }\n\n const baseForeignKeys: Record<string, RawForeignKey> = {\n _parentIDFk: {\n name: buildForeignKeyName({ name: `${arrayTableName}_parent_id`, adapter }),\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: parentTableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n baseIndexes._localeIdx = {\n name: buildIndexName({ name: `${arrayTableName}_locale`, adapter }),\n on: '_locale',\n }\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseForeignKeys,\n baseIndexes,\n blocksTableNameMap,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.flattenedFields) : field.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n setColumnID,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n const relationName = getArrayRelationName({\n field,\n path: fieldName,\n tableName: arrayTableName,\n })\n\n relationsToBuild.set(relationName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n const arrayRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: arrayTableName,\n },\n ],\n references: ['id'],\n relationName,\n to: parentTableName,\n },\n }\n\n if (\n hasLocalesTable({\n fields: field.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n })\n ) {\n arrayRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: `${arrayTableName}${adapter.localesSuffix}`,\n }\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n\n arrayRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: arrayWithLocalized,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n\n if (type === 'many') {\n arrayRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n\n adapter.rawRelations[arrayTableName] = arrayRelations\n\n break\n }\n case 'blocks': {\n if (adapter.blocksAsJSON) {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'jsonb',\n },\n field,\n )\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n ;(field.blockReferences ?? field.blocks).forEach((_block) => {\n const block = typeof _block === 'string' ? adapter.payload.blocks[_block] : _block\n\n let blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const isLocalizedBlockTable =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n if (typeof blocksTableNameMap[blockTableName] === 'undefined') {\n blocksTableNameMap[blockTableName] = 1\n } else if (\n !adapter.rawTables[blockTableName] ||\n !validateExistingBlockIsIdentical({\n block,\n localized: isLocalizedBlockTable,\n parentIsLocalized,\n table: adapter.rawTables[blockTableName],\n tableLocales: adapter.rawTables[`${blockTableName}${adapter.localesSuffix}`],\n })\n ) {\n blocksTableNameMap[blockTableName]++\n setInternalBlockIndex(block, blocksTableNameMap[blockTableName])\n blockTableName = `${blockTableName}_${blocksTableNameMap[blockTableName]}`\n }\n let relationName = `_blocks_${block.slug}`\n if (typeof block[InternalBlockTableNameIndex] !== 'undefined') {\n relationName = `_blocks_${block.slug}_${block[InternalBlockTableNameIndex]}`\n }\n\n if (!adapter.rawTables[blockTableName]) {\n const baseColumns: Record<string, RawColumn> = {\n _order: {\n name: '_order',\n type: 'integer',\n notNull: true,\n },\n _parentID: {\n name: '_parent_id',\n type: rootTableIDColType,\n notNull: true,\n },\n _path: {\n name: '_path',\n type: 'text',\n notNull: true,\n },\n }\n\n const baseIndexes: Record<string, RawIndex> = {\n _orderIdx: {\n name: buildIndexName({ name: `${blockTableName}_order`, adapter }),\n on: '_order',\n },\n _parentIDIdx: {\n name: buildIndexName({ name: `${blockTableName}_parent_id`, adapter }),\n on: ['_parentID'],\n },\n _pathIdx: {\n name: buildIndexName({ name: `${blockTableName}_path`, adapter }),\n on: '_path',\n },\n }\n\n const baseForeignKeys: Record<string, RawForeignKey> = {\n _parentIdFk: {\n name: buildForeignKeyName({ name: `${blockTableName}_parent_id`, adapter }),\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: rootTableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n if (isLocalizedBlockTable) {\n baseColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n baseIndexes._localeIdx = {\n name: buildIndexName({ name: `${blockTableName}_locale`, adapter }),\n on: '_locale',\n }\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseForeignKeys,\n baseIndexes,\n blocksTableNameMap,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.flattenedFields) : block.flattenedFields,\n parentIsLocalized: parentIsLocalized || field.localized,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n setColumnID,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalizedBlockTable,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n const blockRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: blockTableName,\n },\n ],\n references: ['id'],\n relationName,\n to: rootTableName,\n },\n }\n\n if (\n hasLocalesTable({\n fields: block.fields,\n parentIsLocalized: parentIsLocalized || field.localized,\n })\n ) {\n blockRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: `${blockTableName}${adapter.localesSuffix}`,\n }\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n\n blockRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: blockWithLocalized,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n\n if (type === 'many') {\n blockRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n\n adapter.rawRelations[blockTableName] = blockRelations\n }\n\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(relationName, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n case 'checkbox': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'boolean',\n },\n field,\n )\n\n break\n }\n\n case 'code':\n case 'email':\n case 'textarea': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'varchar',\n },\n field,\n )\n\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'timestamp',\n mode: 'string',\n precision: 3,\n withTimezone: true,\n },\n field,\n )\n\n break\n }\n\n case 'group':\n case 'tab': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n blocksTableNameMap,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.flattenedFields,\n forceLocalized: isFieldLocalized || Boolean(forceLocalized),\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n setColumnID,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || isFieldLocalized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'json':\n case 'richText': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'jsonb',\n },\n field,\n )\n\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'numeric',\n },\n field,\n )\n }\n\n break\n }\n\n case 'point': {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'geometry',\n },\n field,\n )\n\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n const options = field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n })\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, RawColumn> = {\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: parentIDColType,\n notNull: true,\n },\n value: {\n name: 'value',\n type: 'enum',\n enumName: createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n }),\n options,\n },\n }\n\n const baseIndexes: Record<string, RawIndex> = {\n orderIdx: {\n name: buildIndexName({ name: `${selectTableName}_order`, adapter }),\n on: 'order',\n },\n parentIdx: {\n name: buildIndexName({ name: `${selectTableName}_parent`, adapter }),\n on: 'parent',\n },\n }\n\n const baseForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: buildForeignKeyName({ name: `${selectTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: parentTableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\n\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n baseIndexes.localeIdx = {\n name: buildIndexName({ name: `${selectTableName}_locale`, adapter }),\n on: 'locale',\n }\n }\n\n if (field.index) {\n baseIndexes.value = {\n name: buildIndexName({ name: `${selectTableName}_value`, adapter }),\n on: 'value',\n }\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseForeignKeys,\n baseIndexes,\n blocksTableNameMap,\n disableNotNull,\n disableUnique,\n fields: [],\n parentIsLocalized: parentIsLocalized || field.localized,\n rootTableName,\n setColumnID,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.rawRelations[selectTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: selectTableName,\n },\n ],\n references: ['id'],\n relationName: fieldName,\n to: parentTableName,\n },\n }\n } else {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'enum',\n enumName,\n options,\n },\n field,\n )\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType: IDType = isUUIDType(adapter.idType) ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = {\n name: `${columnName}_id`,\n type: colType,\n reference: {\n name: 'id',\n onDelete: 'set null',\n table: tableName,\n },\n }\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (isFieldLocalized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull = true\n }\n break\n }\n\n if (\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(isFieldLocalized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(\n {\n name: columnName,\n type: 'varchar',\n },\n field,\n )\n }\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull = true\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["InvalidConfiguration","fieldAffectsData","fieldIsVirtual","fieldShouldBeLocalized","optionIsObject","toSnakeCase","createTableName","buildForeignKeyName","buildIndexName","getArrayRelationName","hasLocalesTable","isUUIDType","InternalBlockTableNameIndex","setInternalBlockIndex","validateExistingBlockIsIdentical","buildTable","idToUUID","withDefault","traverseFields","adapter","blocksTableNameMap","columnPrefix","columns","disableNotNull","disableRelsTableUnique","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentIsLocalized","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","setColumnID","uniqueRelationships","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","idColumn","id","includes","type","forEach","field","name","targetTable","targetIndexes","columnName","fieldName","replace","isFieldLocalized","payload","config","localization","blocksAsJSON","hasMany","unique","index","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","on","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","baseColumns","_order","notNull","_parentID","baseIndexes","_orderIdx","_parentIDIdx","baseForeignKeys","_parentIDFk","foreignColumns","table","onDelete","isLocalized","_locale","locale","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","flattenedFields","localized","rootRelationships","rootUniqueRelationships","tableName","relationName","path","set","target","arrayRelations","references","to","_locales","localesSuffix","key","arrayWithLocalized","rawRelations","blockReferences","blocks","_block","block","blockTableName","isLocalizedBlockTable","rawTables","tableLocales","slug","_path","_pathIdx","_parentIdFk","blockRelations","blockWithLocalized","mode","precision","withTimezone","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","enumName","options","map","option","value","selectTableName","order","parent","orderIdx","parentIdx","parentFk","localeIdx","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","reference","required"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RequireDrizzleKit } from '../types.js';
|
|
2
|
+
export declare const createRequireDrizzleKit: ({ from, }: {
|
|
3
|
+
/** Module URL of the adapter that owns the drizzle-kit dependency. */
|
|
4
|
+
from: string;
|
|
5
|
+
}) => RequireDrizzleKit;
|
|
6
|
+
//# sourceMappingURL=createRequireDrizzleKit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRequireDrizzleKit.d.ts","sourceRoot":"","sources":["../../src/sqlite/createRequireDrizzleKit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,eAAO,MAAM,uBAAuB,cAEjC;IACD,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAA;CACb,KAAG,iBA4BH,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import nodeModule from 'node:module';
|
|
2
|
+
import { dynamicImport } from 'payload';
|
|
3
|
+
export const createRequireDrizzleKit = ({ from })=>{
|
|
4
|
+
const load = ()=>{
|
|
5
|
+
// Preserve Node's loader instead of Webpack's createRequire transform.
|
|
6
|
+
const require = nodeModule.createRequire(from);
|
|
7
|
+
return dynamicImport(require.resolve('drizzle-kit/api'));
|
|
8
|
+
};
|
|
9
|
+
// Keep the 3.x loader synchronous; SQLite tooling methods already return promises.
|
|
10
|
+
return ()=>({
|
|
11
|
+
generateDrizzleJson: async (...args)=>{
|
|
12
|
+
const { generateSQLiteDrizzleJson } = await load();
|
|
13
|
+
return generateSQLiteDrizzleJson(...args);
|
|
14
|
+
},
|
|
15
|
+
generateMigration: async (...args)=>{
|
|
16
|
+
const { generateSQLiteMigration } = await load();
|
|
17
|
+
return generateSQLiteMigration(...args);
|
|
18
|
+
},
|
|
19
|
+
pushSchema: async (...args)=>{
|
|
20
|
+
const { pushSQLiteSchema } = await load();
|
|
21
|
+
// Drizzle Kit bundles separate ORM types; this loader is used by SQLite adapters.
|
|
22
|
+
const pushSchema = pushSQLiteSchema;
|
|
23
|
+
return pushSchema(...args);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=createRequireDrizzleKit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/sqlite/createRequireDrizzleKit.ts"],"sourcesContent":["import type * as DrizzleKit from 'drizzle-kit/api'\n\nimport nodeModule from 'node:module'\nimport { dynamicImport } from 'payload'\n\nimport type { RequireDrizzleKit } from '../types.js'\n\nexport const createRequireDrizzleKit = ({\n from,\n}: {\n /** Module URL of the adapter that owns the drizzle-kit dependency. */\n from: string\n}): RequireDrizzleKit => {\n const load = () => {\n // Preserve Node's loader instead of Webpack's createRequire transform.\n const require = nodeModule.createRequire(from)\n\n return dynamicImport<typeof DrizzleKit>(require.resolve('drizzle-kit/api'))\n }\n\n // Keep the 3.x loader synchronous; SQLite tooling methods already return promises.\n return () => ({\n generateDrizzleJson: async (...args) => {\n const { generateSQLiteDrizzleJson } = await load()\n\n return generateSQLiteDrizzleJson(...args)\n },\n generateMigration: async (...args) => {\n const { generateSQLiteMigration } = await load()\n\n return generateSQLiteMigration(...args)\n },\n pushSchema: async (...args) => {\n const { pushSQLiteSchema } = await load()\n // Drizzle Kit bundles separate ORM types; this loader is used by SQLite adapters.\n const pushSchema = pushSQLiteSchema as unknown as ReturnType<RequireDrizzleKit>['pushSchema']\n\n return pushSchema(...args)\n },\n })\n}\n"],"names":["nodeModule","dynamicImport","createRequireDrizzleKit","from","load","require","createRequire","resolve","generateDrizzleJson","args","generateSQLiteDrizzleJson","generateMigration","generateSQLiteMigration","pushSchema","pushSQLiteSchema"],"mappings":"AAEA,OAAOA,gBAAgB,cAAa;AACpC,SAASC,aAAa,QAAQ,UAAS;AAIvC,OAAO,MAAMC,0BAA0B,CAAC,EACtCC,IAAI,EAIL;IACC,MAAMC,OAAO;QACX,uEAAuE;QACvE,MAAMC,UAAUL,WAAWM,aAAa,CAACH;QAEzC,OAAOF,cAAiCI,QAAQE,OAAO,CAAC;IAC1D;IAEA,mFAAmF;IACnF,OAAO,IAAO,CAAA;YACZC,qBAAqB,OAAO,GAAGC;gBAC7B,MAAM,EAAEC,yBAAyB,EAAE,GAAG,MAAMN;gBAE5C,OAAOM,6BAA6BD;YACtC;YACAE,mBAAmB,OAAO,GAAGF;gBAC3B,MAAM,EAAEG,uBAAuB,EAAE,GAAG,MAAMR;gBAE1C,OAAOQ,2BAA2BH;YACpC;YACAI,YAAY,OAAO,GAAGJ;gBACpB,MAAM,EAAEK,gBAAgB,EAAE,GAAG,MAAMV;gBACnC,kFAAkF;gBAClF,MAAMS,aAAaC;gBAEnB,OAAOD,cAAcJ;YACvB;QACF,CAAA;AACF,EAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import nodeModule from 'node:module';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
7
|
+
import { createRequireDrizzleKit } from './createRequireDrizzleKit.js';
|
|
8
|
+
const directories = [];
|
|
9
|
+
afterEach(()=>{
|
|
10
|
+
const require = nodeModule.createRequire(import.meta.url);
|
|
11
|
+
for (const directory of directories.splice(0)){
|
|
12
|
+
for (const filename of Object.keys(require.cache)){
|
|
13
|
+
if (filename.startsWith(`${directory}${path.sep}`)) {
|
|
14
|
+
delete require.cache[filename];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
rmSync(directory, {
|
|
18
|
+
force: true,
|
|
19
|
+
recursive: true
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
describe('createRequireDrizzleKit', ()=>{
|
|
24
|
+
it('should lazily resolve tooling from each owning adapter', async ()=>{
|
|
25
|
+
for(let index = 0; index < 2; index++){
|
|
26
|
+
const directory = createDirectory();
|
|
27
|
+
const load = createRequireDrizzleKit({
|
|
28
|
+
from: pathToFileURL(path.join(directory, 'adapter.js')).href
|
|
29
|
+
});
|
|
30
|
+
const tooling = load();
|
|
31
|
+
await expect(tooling.generateDrizzleJson({})).rejects.toThrow(/drizzle-kit/);
|
|
32
|
+
installTooling({
|
|
33
|
+
directory
|
|
34
|
+
});
|
|
35
|
+
expect(await tooling.generateDrizzleJson({})).toEqual({
|
|
36
|
+
dialect: 'sqlite',
|
|
37
|
+
source: directory
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
function createDirectory() {
|
|
43
|
+
const directory = realpathSync(mkdtempSync(path.join(tmpdir(), 'payload-kit-loader-')));
|
|
44
|
+
directories.push(directory);
|
|
45
|
+
return directory;
|
|
46
|
+
}
|
|
47
|
+
function installTooling({ directory }) {
|
|
48
|
+
const packageDirectory = path.join(directory, 'node_modules', 'drizzle-kit');
|
|
49
|
+
mkdirSync(packageDirectory, {
|
|
50
|
+
recursive: true
|
|
51
|
+
});
|
|
52
|
+
writeFileSync(path.join(packageDirectory, 'package.json'), JSON.stringify({
|
|
53
|
+
exports: {
|
|
54
|
+
'./api': './api.cjs'
|
|
55
|
+
},
|
|
56
|
+
name: 'drizzle-kit'
|
|
57
|
+
}));
|
|
58
|
+
writeFileSync(path.join(packageDirectory, 'api.cjs'), `exports.generateSQLiteDrizzleJson = () => ({ dialect: 'sqlite', source: ${JSON.stringify(directory)} })`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=createRequireDrizzleKit.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/sqlite/createRequireDrizzleKit.spec.ts"],"sourcesContent":["import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs'\nimport nodeModule from 'node:module'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { afterEach, describe, expect, it } from 'vitest'\n\nimport { createRequireDrizzleKit } from './createRequireDrizzleKit.js'\n\nconst directories: string[] = []\n\nafterEach(() => {\n const require = nodeModule.createRequire(import.meta.url)\n\n for (const directory of directories.splice(0)) {\n for (const filename of Object.keys(require.cache)) {\n if (filename.startsWith(`${directory}${path.sep}`)) {\n delete require.cache[filename]\n }\n }\n rmSync(directory, { force: true, recursive: true })\n }\n})\n\ndescribe('createRequireDrizzleKit', () => {\n it('should lazily resolve tooling from each owning adapter', async () => {\n for (let index = 0; index < 2; index++) {\n const directory = createDirectory()\n const load = createRequireDrizzleKit({\n from: pathToFileURL(path.join(directory, 'adapter.js')).href,\n })\n\n const tooling = load()\n\n await expect(tooling.generateDrizzleJson({})).rejects.toThrow(/drizzle-kit/)\n installTooling({ directory })\n\n expect(await tooling.generateDrizzleJson({})).toEqual({\n dialect: 'sqlite',\n source: directory,\n })\n }\n })\n})\n\nfunction createDirectory() {\n const directory = realpathSync(mkdtempSync(path.join(tmpdir(), 'payload-kit-loader-')))\n\n directories.push(directory)\n return directory\n}\n\nfunction installTooling({ directory }: { directory: string }) {\n const packageDirectory = path.join(directory, 'node_modules', 'drizzle-kit')\n\n mkdirSync(packageDirectory, { recursive: true })\n writeFileSync(\n path.join(packageDirectory, 'package.json'),\n JSON.stringify({ exports: { './api': './api.cjs' }, name: 'drizzle-kit' }),\n )\n writeFileSync(\n path.join(packageDirectory, 'api.cjs'),\n `exports.generateSQLiteDrizzleJson = () => ({ dialect: 'sqlite', source: ${JSON.stringify(directory)} })`,\n )\n}\n"],"names":["mkdirSync","mkdtempSync","realpathSync","rmSync","writeFileSync","nodeModule","tmpdir","path","pathToFileURL","afterEach","describe","expect","it","createRequireDrizzleKit","directories","require","createRequire","url","directory","splice","filename","Object","keys","cache","startsWith","sep","force","recursive","index","createDirectory","load","from","join","href","tooling","generateDrizzleJson","rejects","toThrow","installTooling","toEqual","dialect","source","push","packageDirectory","JSON","stringify","exports","name"],"mappings":"AAAA,SAASA,SAAS,EAAEC,WAAW,EAAEC,YAAY,EAAEC,MAAM,EAAEC,aAAa,QAAQ,UAAS;AACrF,OAAOC,gBAAgB,cAAa;AACpC,SAASC,MAAM,QAAQ,UAAS;AAChC,OAAOC,UAAU,YAAW;AAC5B,SAASC,aAAa,QAAQ,WAAU;AACxC,SAASC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAExD,SAASC,uBAAuB,QAAQ,+BAA8B;AAEtE,MAAMC,cAAwB,EAAE;AAEhCL,UAAU;IACR,MAAMM,UAAUV,WAAWW,aAAa,CAAC,YAAYC,GAAG;IAExD,KAAK,MAAMC,aAAaJ,YAAYK,MAAM,CAAC,GAAI;QAC7C,KAAK,MAAMC,YAAYC,OAAOC,IAAI,CAACP,QAAQQ,KAAK,EAAG;YACjD,IAAIH,SAASI,UAAU,CAAC,GAAGN,YAAYX,KAAKkB,GAAG,EAAE,GAAG;gBAClD,OAAOV,QAAQQ,KAAK,CAACH,SAAS;YAChC;QACF;QACAjB,OAAOe,WAAW;YAAEQ,OAAO;YAAMC,WAAW;QAAK;IACnD;AACF;AAEAjB,SAAS,2BAA2B;IAClCE,GAAG,0DAA0D;QAC3D,IAAK,IAAIgB,QAAQ,GAAGA,QAAQ,GAAGA,QAAS;YACtC,MAAMV,YAAYW;YAClB,MAAMC,OAAOjB,wBAAwB;gBACnCkB,MAAMvB,cAAcD,KAAKyB,IAAI,CAACd,WAAW,eAAee,IAAI;YAC9D;YAEA,MAAMC,UAAUJ;YAEhB,MAAMnB,OAAOuB,QAAQC,mBAAmB,CAAC,CAAC,IAAIC,OAAO,CAACC,OAAO,CAAC;YAC9DC,eAAe;gBAAEpB;YAAU;YAE3BP,OAAO,MAAMuB,QAAQC,mBAAmB,CAAC,CAAC,IAAII,OAAO,CAAC;gBACpDC,SAAS;gBACTC,QAAQvB;YACV;QACF;IACF;AACF;AAEA,SAASW;IACP,MAAMX,YAAYhB,aAAaD,YAAYM,KAAKyB,IAAI,CAAC1B,UAAU;IAE/DQ,YAAY4B,IAAI,CAACxB;IACjB,OAAOA;AACT;AAEA,SAASoB,eAAe,EAAEpB,SAAS,EAAyB;IAC1D,MAAMyB,mBAAmBpC,KAAKyB,IAAI,CAACd,WAAW,gBAAgB;IAE9DlB,UAAU2C,kBAAkB;QAAEhB,WAAW;IAAK;IAC9CvB,cACEG,KAAKyB,IAAI,CAACW,kBAAkB,iBAC5BC,KAAKC,SAAS,CAAC;QAAEC,SAAS;YAAE,SAAS;QAAY;QAAGC,MAAM;IAAc;IAE1E3C,cACEG,KAAKyB,IAAI,CAACW,kBAAkB,YAC5B,CAAC,wEAAwE,EAAEC,KAAKC,SAAS,CAAC3B,WAAW,GAAG,CAAC;AAE7G"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { build } from 'esbuild';
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
7
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
8
|
+
const workspaceDirectory = fileURLToPath(new URL('../../../../', import.meta.url));
|
|
9
|
+
const temporaryDirectories = [];
|
|
10
|
+
afterEach(()=>{
|
|
11
|
+
for (const directory of temporaryDirectories.splice(0)){
|
|
12
|
+
rmSync(directory, {
|
|
13
|
+
force: true,
|
|
14
|
+
recursive: true
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
describe('Drizzle Kit tooling in Node', ()=>{
|
|
19
|
+
it.each([
|
|
20
|
+
'db-sqlite',
|
|
21
|
+
'db-postgres'
|
|
22
|
+
])('should resolve real tooling from %s outside Vitest and generate schema changes', async (adapter)=>{
|
|
23
|
+
const directory = mkdtempSync(path.join(tmpdir(), 'payload-drizzle-tooling-'));
|
|
24
|
+
temporaryDirectories.push(directory);
|
|
25
|
+
const isSQLite = adapter === 'db-sqlite';
|
|
26
|
+
// Exercise the real loader outside Vitest.
|
|
27
|
+
await build({
|
|
28
|
+
alias: {
|
|
29
|
+
payload: path.join(workspaceDirectory, 'packages/payload/src/utilities/dynamicImport.ts')
|
|
30
|
+
},
|
|
31
|
+
bundle: true,
|
|
32
|
+
entryPoints: [
|
|
33
|
+
path.join(workspaceDirectory, isSQLite ? 'packages/drizzle/src/sqlite/createRequireDrizzleKit.ts' : 'packages/drizzle/src/postgres/requireDrizzleKit.ts')
|
|
34
|
+
],
|
|
35
|
+
format: 'esm',
|
|
36
|
+
logLevel: 'silent',
|
|
37
|
+
outfile: path.join(directory, 'tooling.mjs'),
|
|
38
|
+
platform: 'node'
|
|
39
|
+
});
|
|
40
|
+
const from = pathToFileURL(path.join(workspaceDirectory, 'packages', adapter, 'src/index.ts')).href;
|
|
41
|
+
const script = path.join(directory, 'check.mjs');
|
|
42
|
+
writeFileSync(script, `
|
|
43
|
+
import assert from 'node:assert/strict'
|
|
44
|
+
import { createRequire } from 'node:module'
|
|
45
|
+
import { createRequireDrizzleKit } from './tooling.mjs'
|
|
46
|
+
const require = createRequire(${JSON.stringify(from)})
|
|
47
|
+
assert.equal(process.env.VITEST, undefined)
|
|
48
|
+
const tooling = createRequireDrizzleKit({ from: ${JSON.stringify(from)} })()
|
|
49
|
+
${isSQLite ? "const { sqliteTable, integer } = require('drizzle-orm/sqlite-core')" : "const { pgTable, integer: pgInteger } = require('drizzle-orm/pg-core')"}
|
|
50
|
+
const schema = ${isSQLite ? "{ probe: sqliteTable('probe', { id: integer('id').primaryKey() }) }" : "{ probe: pgTable('probe', { id: pgInteger('id').primaryKey() }) }"}
|
|
51
|
+
const beforeResult = tooling.generateDrizzleJson({})
|
|
52
|
+
if (!${isSQLite}) {
|
|
53
|
+
assert.equal(beforeResult instanceof Promise, false)
|
|
54
|
+
const upgraded = tooling.upSnapshot({ ...beforeResult, version: '6' })
|
|
55
|
+
assert.equal(upgraded.version, '7')
|
|
56
|
+
}
|
|
57
|
+
const before = await beforeResult
|
|
58
|
+
const after = await tooling.generateDrizzleJson(schema)
|
|
59
|
+
const statements = await tooling.generateMigration(before, after)
|
|
60
|
+
assert.ok(statements.some(sql => sql.includes('CREATE TABLE')))
|
|
61
|
+
if (${isSQLite}) {
|
|
62
|
+
const { createClient } = require('@libsql/client')
|
|
63
|
+
const { drizzle } = require('drizzle-orm/libsql')
|
|
64
|
+
const client = createClient({ url: 'file::memory:' })
|
|
65
|
+
try {
|
|
66
|
+
const pushed = await tooling.pushSchema(schema, drizzle(client))
|
|
67
|
+
await pushed.apply()
|
|
68
|
+
await client.execute('INSERT INTO probe (id) VALUES (42)')
|
|
69
|
+
const result = await client.execute('SELECT id FROM probe')
|
|
70
|
+
assert.equal(result.rows[0].id, 42)
|
|
71
|
+
} finally {
|
|
72
|
+
client.close()
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
console.log('schema tooling passed')
|
|
76
|
+
`);
|
|
77
|
+
const env = {
|
|
78
|
+
...process.env
|
|
79
|
+
};
|
|
80
|
+
delete env.VITEST;
|
|
81
|
+
const output = execFileSync(process.execPath, [
|
|
82
|
+
script
|
|
83
|
+
], {
|
|
84
|
+
encoding: 'utf8',
|
|
85
|
+
env,
|
|
86
|
+
timeout: 30_000
|
|
87
|
+
});
|
|
88
|
+
expect(output).toContain('schema tooling passed');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=drizzleKitTooling.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/sqlite/drizzleKitTooling.spec.ts"],"sourcesContent":["import { build } from 'esbuild'\nimport { execFileSync } from 'node:child_process'\nimport { mkdtempSync, rmSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { afterEach, describe, expect, it } from 'vitest'\n\nconst workspaceDirectory = fileURLToPath(new URL('../../../../', import.meta.url))\nconst temporaryDirectories: string[] = []\n\nafterEach(() => {\n for (const directory of temporaryDirectories.splice(0)) {\n rmSync(directory, { force: true, recursive: true })\n }\n})\n\ndescribe('Drizzle Kit tooling in Node', () => {\n it.each(['db-sqlite', 'db-postgres'])(\n 'should resolve real tooling from %s outside Vitest and generate schema changes',\n async (adapter) => {\n const directory = mkdtempSync(path.join(tmpdir(), 'payload-drizzle-tooling-'))\n temporaryDirectories.push(directory)\n\n const isSQLite = adapter === 'db-sqlite'\n\n // Exercise the real loader outside Vitest.\n await build({\n alias: {\n payload: path.join(workspaceDirectory, 'packages/payload/src/utilities/dynamicImport.ts'),\n },\n bundle: true,\n entryPoints: [\n path.join(\n workspaceDirectory,\n isSQLite\n ? 'packages/drizzle/src/sqlite/createRequireDrizzleKit.ts'\n : 'packages/drizzle/src/postgres/requireDrizzleKit.ts',\n ),\n ],\n format: 'esm',\n logLevel: 'silent',\n outfile: path.join(directory, 'tooling.mjs'),\n platform: 'node',\n })\n\n const from = pathToFileURL(\n path.join(workspaceDirectory, 'packages', adapter, 'src/index.ts'),\n ).href\n const script = path.join(directory, 'check.mjs')\n\n writeFileSync(\n script,\n `\nimport assert from 'node:assert/strict'\nimport { createRequire } from 'node:module'\nimport { createRequireDrizzleKit } from './tooling.mjs'\nconst require = createRequire(${JSON.stringify(from)})\nassert.equal(process.env.VITEST, undefined)\nconst tooling = createRequireDrizzleKit({ from: ${JSON.stringify(from)} })()\n${\n isSQLite\n ? \"const { sqliteTable, integer } = require('drizzle-orm/sqlite-core')\"\n : \"const { pgTable, integer: pgInteger } = require('drizzle-orm/pg-core')\"\n}\nconst schema = ${\n isSQLite\n ? \"{ probe: sqliteTable('probe', { id: integer('id').primaryKey() }) }\"\n : \"{ probe: pgTable('probe', { id: pgInteger('id').primaryKey() }) }\"\n }\nconst beforeResult = tooling.generateDrizzleJson({})\nif (!${isSQLite}) {\n assert.equal(beforeResult instanceof Promise, false)\n const upgraded = tooling.upSnapshot({ ...beforeResult, version: '6' })\n assert.equal(upgraded.version, '7')\n}\nconst before = await beforeResult\nconst after = await tooling.generateDrizzleJson(schema)\nconst statements = await tooling.generateMigration(before, after)\nassert.ok(statements.some(sql => sql.includes('CREATE TABLE')))\nif (${isSQLite}) {\nconst { createClient } = require('@libsql/client')\nconst { drizzle } = require('drizzle-orm/libsql')\nconst client = createClient({ url: 'file::memory:' })\ntry {\n const pushed = await tooling.pushSchema(schema, drizzle(client))\n await pushed.apply()\n await client.execute('INSERT INTO probe (id) VALUES (42)')\n const result = await client.execute('SELECT id FROM probe')\n assert.equal(result.rows[0].id, 42)\n} finally {\n client.close()\n}\n}\nconsole.log('schema tooling passed')\n`,\n )\n\n const env = { ...process.env }\n delete env.VITEST\n\n const output = execFileSync(process.execPath, [script], {\n encoding: 'utf8',\n env,\n timeout: 30_000,\n })\n\n expect(output).toContain('schema tooling passed')\n },\n )\n})\n"],"names":["build","execFileSync","mkdtempSync","rmSync","writeFileSync","tmpdir","path","fileURLToPath","pathToFileURL","afterEach","describe","expect","it","workspaceDirectory","URL","url","temporaryDirectories","directory","splice","force","recursive","each","adapter","join","push","isSQLite","alias","payload","bundle","entryPoints","format","logLevel","outfile","platform","from","href","script","JSON","stringify","env","process","VITEST","output","execPath","encoding","timeout","toContain"],"mappings":"AAAA,SAASA,KAAK,QAAQ,UAAS;AAC/B,SAASC,YAAY,QAAQ,qBAAoB;AACjD,SAASC,WAAW,EAAEC,MAAM,EAAEC,aAAa,QAAQ,UAAS;AAC5D,SAASC,MAAM,QAAQ,UAAS;AAChC,OAAOC,UAAU,YAAW;AAC5B,SAASC,aAAa,EAAEC,aAAa,QAAQ,WAAU;AACvD,SAASC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAExD,MAAMC,qBAAqBN,cAAc,IAAIO,IAAI,gBAAgB,YAAYC,GAAG;AAChF,MAAMC,uBAAiC,EAAE;AAEzCP,UAAU;IACR,KAAK,MAAMQ,aAAaD,qBAAqBE,MAAM,CAAC,GAAI;QACtDf,OAAOc,WAAW;YAAEE,OAAO;YAAMC,WAAW;QAAK;IACnD;AACF;AAEAV,SAAS,+BAA+B;IACtCE,GAAGS,IAAI,CAAC;QAAC;QAAa;KAAc,EAClC,kFACA,OAAOC;QACL,MAAML,YAAYf,YAAYI,KAAKiB,IAAI,CAAClB,UAAU;QAClDW,qBAAqBQ,IAAI,CAACP;QAE1B,MAAMQ,WAAWH,YAAY;QAE7B,2CAA2C;QAC3C,MAAMtB,MAAM;YACV0B,OAAO;gBACLC,SAASrB,KAAKiB,IAAI,CAACV,oBAAoB;YACzC;YACAe,QAAQ;YACRC,aAAa;gBACXvB,KAAKiB,IAAI,CACPV,oBACAY,WACI,2DACA;aAEP;YACDK,QAAQ;YACRC,UAAU;YACVC,SAAS1B,KAAKiB,IAAI,CAACN,WAAW;YAC9BgB,UAAU;QACZ;QAEA,MAAMC,OAAO1B,cACXF,KAAKiB,IAAI,CAACV,oBAAoB,YAAYS,SAAS,iBACnDa,IAAI;QACN,MAAMC,SAAS9B,KAAKiB,IAAI,CAACN,WAAW;QAEpCb,cACEgC,QACA,CAAC;;;;8BAIqB,EAAEC,KAAKC,SAAS,CAACJ,MAAM;;gDAEL,EAAEG,KAAKC,SAAS,CAACJ,MAAM;AACvE,EACET,WACI,wEACA,yEACL;eACc,EACLA,WACI,wEACA,oEACL;;KAEJ,EAAEA,SAAS;;;;;;;;;IASZ,EAAEA,SAAS;;;;;;;;;;;;;;;AAef,CAAC;QAGK,MAAMc,MAAM;YAAE,GAAGC,QAAQD,GAAG;QAAC;QAC7B,OAAOA,IAAIE,MAAM;QAEjB,MAAMC,SAASzC,aAAauC,QAAQG,QAAQ,EAAE;YAACP;SAAO,EAAE;YACtDQ,UAAU;YACVL;YACAM,SAAS;QACX;QAEAlC,OAAO+B,QAAQI,SAAS,CAAC;IAC3B;AAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireDrizzleKit.d.ts","sourceRoot":"","sources":["../../src/sqlite/requireDrizzleKit.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"requireDrizzleKit.d.ts","sourceRoot":"","sources":["../../src/sqlite/requireDrizzleKit.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yCAAqD,CAAA"}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return {
|
|
6
|
-
generateDrizzleJson: generateSQLiteDrizzleJson,
|
|
7
|
-
generateMigration: generateSQLiteMigration,
|
|
8
|
-
pushSchema: pushSQLiteSchema
|
|
9
|
-
};
|
|
10
|
-
};
|
|
1
|
+
import { createRequireDrizzleKit } from './createRequireDrizzleKit.js';
|
|
2
|
+
export const requireDrizzleKit = createRequireDrizzleKit({
|
|
3
|
+
from: import.meta.url
|
|
4
|
+
});
|
|
11
5
|
|
|
12
6
|
//# sourceMappingURL=requireDrizzleKit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sqlite/requireDrizzleKit.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../src/sqlite/requireDrizzleKit.ts"],"sourcesContent":["import { createRequireDrizzleKit } from './createRequireDrizzleKit.js'\n\nexport const requireDrizzleKit = createRequireDrizzleKit({ from: import.meta.url })\n"],"names":["createRequireDrizzleKit","requireDrizzleKit","from","url"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,+BAA8B;AAEtE,OAAO,MAAMC,oBAAoBD,wBAAwB;IAAEE,MAAM,YAAYC,GAAG;AAAC,GAAE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FlattenedBlock, FlattenedBlocksField } from 'payload';
|
|
2
|
+
import type { DrizzleAdapter } from '../types.js';
|
|
3
|
+
export declare const getBlockFromField: ({ adapter, blockType, field, }: {
|
|
4
|
+
adapter: DrizzleAdapter;
|
|
5
|
+
blockType: string;
|
|
6
|
+
field: FlattenedBlocksField;
|
|
7
|
+
}) => FlattenedBlock | undefined;
|
|
8
|
+
//# sourceMappingURL=getBlockFromField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBlockFromField.d.ts","sourceRoot":"","sources":["../../src/transform/getBlockFromField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,iBAAiB,mCAI3B;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,oBAAoB,CAAA;CAC5B,KAAG,cAAc,GAAG,SAMpB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const getBlockFromField = ({ adapter, blockType, field })=>{
|
|
2
|
+
const block = (field.blockReferences ?? field.blocks).find((block)=>typeof block === 'string' ? block === blockType : block.slug === blockType);
|
|
3
|
+
return typeof block === 'string' ? adapter.payload.blocks[block] : block;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=getBlockFromField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/transform/getBlockFromField.ts"],"sourcesContent":["import type { FlattenedBlock, FlattenedBlocksField } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nexport const getBlockFromField = ({\n adapter,\n blockType,\n field,\n}: {\n adapter: DrizzleAdapter\n blockType: string\n field: FlattenedBlocksField\n}): FlattenedBlock | undefined => {\n const block = (field.blockReferences ?? field.blocks).find((block) =>\n typeof block === 'string' ? block === blockType : block.slug === blockType,\n )\n\n return typeof block === 'string' ? adapter.payload.blocks[block] : block\n}\n"],"names":["getBlockFromField","adapter","blockType","field","block","blockReferences","blocks","find","slug","payload"],"mappings":"AAIA,OAAO,MAAMA,oBAAoB,CAAC,EAChCC,OAAO,EACPC,SAAS,EACTC,KAAK,EAKN;IACC,MAAMC,QAAQ,AAACD,CAAAA,MAAME,eAAe,IAAIF,MAAMG,MAAM,AAAD,EAAGC,IAAI,CAAC,CAACH,QAC1D,OAAOA,UAAU,WAAWA,UAAUF,YAAYE,MAAMI,IAAI,KAAKN;IAGnE,OAAO,OAAOE,UAAU,WAAWH,QAAQQ,OAAO,CAACH,MAAM,CAACF,MAAM,GAAGA;AACrE,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAKzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AASnE,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClD,iBAAiB,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACxD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAChD,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAID,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,6NAmB7D,kBAAkB,KAAG,CAknBvB,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { fieldIsVirtual, fieldShouldBeLocalized } from 'payload/shared';
|
|
|
2
2
|
import toSnakeCase from 'to-snake-case';
|
|
3
3
|
import { getArrayRelationName } from '../../utilities/getArrayRelationName.js';
|
|
4
4
|
import { resolveBlockTableName } from '../../utilities/validateExistingBlockIsIdentical.js';
|
|
5
|
+
import { getBlockFromField } from '../getBlockFromField.js';
|
|
5
6
|
import { transformHasManyNumber } from './hasManyNumber.js';
|
|
6
7
|
import { transformHasManyText } from './hasManyText.js';
|
|
7
8
|
import { transformRelationship } from './relationship.js';
|
|
@@ -132,9 +133,13 @@ export const traverseFields = ({ adapter, blocks, config, currentTableName, data
|
|
|
132
133
|
});
|
|
133
134
|
Object.entries(result[field.name]).forEach(([locale, localizedBlocks])=>{
|
|
134
135
|
result[field.name][locale] = localizedBlocks.map((row)=>{
|
|
135
|
-
const block =
|
|
136
|
-
|
|
136
|
+
const block = getBlockFromField({
|
|
137
|
+
adapter,
|
|
138
|
+
blockType: row.blockType,
|
|
139
|
+
field
|
|
140
|
+
});
|
|
137
141
|
if (block) {
|
|
142
|
+
const tableName = resolveBlockTableName(block, adapter.tableNameMap.get(`${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`));
|
|
138
143
|
const blockResult = traverseFields({
|
|
139
144
|
adapter,
|
|
140
145
|
blocks,
|
|
@@ -184,7 +189,11 @@ export const traverseFields = ({ adapter, blocks, config, currentTableName, data
|
|
|
184
189
|
if (typeof row.blockType !== 'string') {
|
|
185
190
|
return acc;
|
|
186
191
|
}
|
|
187
|
-
const block =
|
|
192
|
+
const block = getBlockFromField({
|
|
193
|
+
adapter,
|
|
194
|
+
blockType: row.blockType,
|
|
195
|
+
field
|
|
196
|
+
});
|
|
188
197
|
if (block) {
|
|
189
198
|
if (!withinArrayOrBlockLocale || withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale) {
|
|
190
199
|
if (row._locale) {
|