@payloadcms/drizzle 4.0.0-internal.293e026 → 4.0.0-internal.2d11d2e
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/LICENSE.md +1 -1
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +25 -3
- package/dist/count.js.map +1 -1
- package/dist/countGlobalVersions.js +8 -3
- package/dist/countGlobalVersions.js.map +1 -1
- package/dist/countVersions.d.ts.map +1 -1
- package/dist/countVersions.js +29 -4
- package/dist/countVersions.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +17 -2
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createTableName.d.ts.map +1 -1
- package/dist/createTableName.js +2 -7
- package/dist/createTableName.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +12 -1
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteBranchGlobal.d.ts +10 -0
- package/dist/deleteBranchGlobal.d.ts.map +1 -0
- package/dist/deleteBranchGlobal.js +27 -0
- package/dist/deleteBranchGlobal.js.map +1 -0
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +25 -1
- package/dist/deleteOne.js.map +1 -1
- package/dist/exports/postgres.d.ts +5 -1
- package/dist/exports/postgres.d.ts.map +1 -1
- package/dist/exports/postgres.js +5 -1
- package/dist/exports/postgres.js.map +1 -1
- package/dist/exports/sqlite.d.ts +3 -1
- package/dist/exports/sqlite.d.ts.map +1 -1
- package/dist/exports/sqlite.js +3 -1
- package/dist/exports/sqlite.js.map +1 -1
- package/dist/find/buildFindManyArgs.d.ts +3 -2
- package/dist/find/buildFindManyArgs.d.ts.map +1 -1
- package/dist/find/buildFindManyArgs.js +2 -1
- package/dist/find/buildFindManyArgs.js.map +1 -1
- package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
- package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
- package/dist/find/buildPolymorphicJoinQuery.js +163 -0
- package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
- package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
- package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
- package/dist/find/buildPolymorphicJoinWhere.js +301 -0
- package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
- package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
- package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
- package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
- package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
- package/dist/find/findMany.d.ts +6 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +16 -3
- package/dist/find/findMany.js.map +1 -1
- package/dist/find/traverseFields.d.ts +3 -2
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +82 -199
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +32 -4
- package/dist/find.js.map +1 -1
- package/dist/findDistinct.d.ts.map +1 -1
- package/dist/findDistinct.js +104 -8
- package/dist/findDistinct.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +24 -5
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.js +8 -3
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +30 -3
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +32 -5
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts +6 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -9
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +41 -15
- package/dist/migrate.js.map +1 -1
- package/dist/migrateDown.d.ts +2 -1
- package/dist/migrateDown.d.ts.map +1 -1
- package/dist/migrateDown.js +17 -4
- package/dist/migrateDown.js.map +1 -1
- package/dist/migrateFresh.d.ts +4 -2
- package/dist/migrateFresh.d.ts.map +1 -1
- package/dist/migrateFresh.js +26 -9
- package/dist/migrateFresh.js.map +1 -1
- package/dist/migrateRefresh.d.ts +2 -1
- package/dist/migrateRefresh.d.ts.map +1 -1
- package/dist/migrateRefresh.js +20 -5
- package/dist/migrateRefresh.js.map +1 -1
- package/dist/migrateReset.d.ts +2 -1
- package/dist/migrateReset.d.ts.map +1 -1
- package/dist/migrateReset.js +18 -4
- package/dist/migrateReset.js.map +1 -1
- package/dist/migrateStatus.d.ts +2 -1
- package/dist/migrateStatus.d.ts.map +1 -1
- package/dist/migrateStatus.js +11 -6
- package/dist/migrateStatus.js.map +1 -1
- package/dist/postgres/createDatabase.d.ts.map +1 -1
- package/dist/postgres/createExtensions.d.ts.map +1 -1
- package/dist/postgres/createJSONQuery/index.d.ts.map +1 -1
- package/dist/postgres/createJSONQuery/index.js +3 -3
- package/dist/postgres/createJSONQuery/index.js.map +1 -1
- package/dist/postgres/init.d.ts.map +1 -1
- package/dist/postgres/init.js +6 -0
- package/dist/postgres/init.js.map +1 -1
- package/dist/postgres/insert.d.ts.map +1 -1
- package/dist/postgres/insert.js +4 -2
- package/dist/postgres/insert.js.map +1 -1
- package/dist/postgres/predefinedMigrations/localize-status/index.d.ts +11 -0
- package/dist/postgres/predefinedMigrations/localize-status/index.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/index.js +296 -0
- package/dist/postgres/predefinedMigrations/localize-status/index.js.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts +13 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js +51 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +13 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js +54 -0
- package/dist/postgres/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
- package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.js +2 -2
- package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts.map +1 -1
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
- package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
- package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
- package/dist/postgres/query/postgresUnaccent.js +40 -0
- package/dist/postgres/query/postgresUnaccent.js.map +1 -0
- package/dist/postgres/requireDrizzleKit.d.ts +4 -0
- package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
- package/dist/postgres/requireDrizzleKit.js +16 -10
- package/dist/postgres/requireDrizzleKit.js.map +1 -1
- package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -1
- package/dist/postgres/schema/geometryColumn.d.ts +2 -2
- package/dist/postgres/schema/geometryColumn.d.ts.map +1 -1
- package/dist/postgres/types.d.ts +17 -2
- package/dist/postgres/types.d.ts.map +1 -1
- package/dist/postgres/types.js.map +1 -1
- package/dist/queries/addJoinTable.d.ts +1 -1
- package/dist/queries/addJoinTable.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.d.ts +3 -2
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +2 -1
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildBranchVisibility.d.ts +11 -0
- package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
- package/dist/queries/buildBranchVisibility.js +48 -0
- package/dist/queries/buildBranchVisibility.js.map +1 -0
- package/dist/queries/buildOperatorConstraint.d.ts +22 -0
- package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
- package/dist/queries/buildOperatorConstraint.js +63 -0
- package/dist/queries/buildOperatorConstraint.js.map +1 -0
- package/dist/queries/buildOrderBy.d.ts +3 -2
- package/dist/queries/buildOrderBy.d.ts.map +1 -1
- package/dist/queries/buildOrderBy.js +2 -1
- package/dist/queries/buildOrderBy.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +3 -2
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +4 -2
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/getTableAlias.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts +15 -5
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +226 -56
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/queries/operatorMap.d.ts +7 -3
- package/dist/queries/operatorMap.d.ts.map +1 -1
- package/dist/queries/operatorMap.js.map +1 -1
- package/dist/queries/parseParams.d.ts +3 -2
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +266 -11
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/resolveRelationshipPath.d.ts +36 -0
- package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
- package/dist/queries/resolveRelationshipPath.js +66 -0
- package/dist/queries/resolveRelationshipPath.js.map +1 -0
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/selectDistinct.d.ts.map +1 -1
- package/dist/queries/validateOperatorHandlers.d.ts +8 -0
- package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
- package/dist/queries/validateOperatorHandlers.js +30 -0
- package/dist/queries/validateOperatorHandlers.js.map +1 -0
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +27 -5
- package/dist/queryDrafts.js.map +1 -1
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +28 -20
- package/dist/schema/build.js.map +1 -1
- package/dist/schema/buildDrizzleRelations.d.ts.map +1 -1
- package/dist/schema/buildRawSchema.d.ts.map +1 -1
- package/dist/schema/idToUUID.d.ts.map +1 -1
- package/dist/schema/traverseFields.d.ts.map +1 -1
- package/dist/schema/traverseFields.js +6 -5
- package/dist/schema/traverseFields.js.map +1 -1
- package/dist/schema/withDefault.d.ts.map +1 -1
- package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
- package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
- package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
- package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
- package/dist/sqlite/createJSONQuery/index.js +6 -5
- package/dist/sqlite/createJSONQuery/index.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 +15 -0
- package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
- package/dist/sqlite/execute.js.map +1 -1
- package/dist/sqlite/insert.d.ts.map +1 -1
- package/dist/sqlite/insert.js +9 -4
- package/dist/sqlite/insert.js.map +1 -1
- package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts +28 -0
- package/dist/sqlite/predefinedMigrations/localize-status/index.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/index.js +198 -0
- package/dist/sqlite/predefinedMigrations/localize-status/index.js.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts +12 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js +24 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainCollection.js.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts +12 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js +28 -0
- package/dist/sqlite/predefinedMigrations/localize-status/migrateMainGlobal.js.map +1 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
- package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
- package/dist/sqlite/types.d.ts +4 -0
- package/dist/sqlite/types.d.ts.map +1 -1
- package/dist/sqlite/types.js.map +1 -1
- package/dist/transactions/beginTransaction.d.ts.map +1 -1
- package/dist/transactions/beginTransaction.js +13 -5
- package/dist/transactions/beginTransaction.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +1 -5
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
- package/dist/transform/read/hasManyText.d.ts.map +1 -1
- package/dist/transform/read/index.d.ts.map +1 -1
- package/dist/transform/read/relationship.d.ts.map +1 -1
- package/dist/transform/read/traverseFields.d.ts.map +1 -1
- package/dist/transform/read/traverseFields.js.map +1 -1
- package/dist/transform/write/array.d.ts +3 -2
- package/dist/transform/write/array.d.ts.map +1 -1
- package/dist/transform/write/array.js +2 -1
- package/dist/transform/write/array.js.map +1 -1
- package/dist/transform/write/blocks.d.ts +3 -2
- package/dist/transform/write/blocks.d.ts.map +1 -1
- package/dist/transform/write/blocks.js +2 -1
- package/dist/transform/write/blocks.js.map +1 -1
- package/dist/transform/write/index.d.ts.map +1 -1
- package/dist/transform/write/index.js +2 -0
- package/dist/transform/write/index.js.map +1 -1
- package/dist/transform/write/numbers.d.ts.map +1 -1
- package/dist/transform/write/relationships.d.ts.map +1 -1
- package/dist/transform/write/selects.d.ts.map +1 -1
- package/dist/transform/write/texts.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.d.ts +2 -1
- package/dist/transform/write/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.js +51 -22
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/dist/transform/write/types.d.ts +7 -0
- package/dist/transform/write/types.d.ts.map +1 -1
- package/dist/transform/write/types.js.map +1 -1
- package/dist/types.d.ts +53 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/updateGlobal.d.ts +5 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +96 -4
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateJobs.d.ts.map +1 -1
- package/dist/updateJobs.js +37 -0
- package/dist/updateJobs.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +93 -4
- package/dist/updateOne.js.map +1 -1
- package/dist/upsertBranchGlobalChange.d.ts +3 -0
- package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
- package/dist/upsertBranchGlobalChange.js +35 -0
- package/dist/upsertBranchGlobalChange.js.map +1 -0
- package/dist/upsertRow/deleteExistingArrayRows.d.ts.map +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
- package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
- package/dist/upsertRow/handleUpsertError.d.ts.map +1 -1
- package/dist/upsertRow/handleUpsertError.js +2 -1
- package/dist/upsertRow/handleUpsertError.js.map +1 -1
- package/dist/upsertRow/index.d.ts +1 -1
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +161 -48
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/upsertRow/insertArrays.d.ts.map +1 -1
- package/dist/upsertRow/insertArrays.js +2 -1
- package/dist/upsertRow/insertArrays.js.map +1 -1
- package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts.map +1 -1
- package/dist/upsertRow/types.d.ts +3 -0
- package/dist/upsertRow/types.d.ts.map +1 -1
- package/dist/upsertRow/types.js.map +1 -1
- package/dist/utilities/appendPrefixToKeys.d.ts.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
- package/dist/utilities/blocksToJsonMigrator.js +7 -18
- package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
- package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
- package/dist/utilities/buildCreateMigration.js +13 -9
- package/dist/utilities/buildCreateMigration.js.map +1 -1
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
- package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
- package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
- package/dist/utilities/buildForeignKeyName.js +3 -2
- package/dist/utilities/buildForeignKeyName.js.map +1 -1
- package/dist/utilities/buildIndexName.d.ts.map +1 -1
- package/dist/utilities/buildIndexName.js +3 -2
- package/dist/utilities/buildIndexName.js.map +1 -1
- package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
- package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
- package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
- package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
- package/dist/utilities/createBlocksMap.d.ts.map +1 -1
- package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
- package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
- package/dist/utilities/createSchemaGenerator.js +10 -12
- package/dist/utilities/createSchemaGenerator.js.map +1 -1
- package/dist/utilities/escapeSQLValue.d.ts.map +1 -1
- package/dist/utilities/executeSchemaHooks.d.ts.map +1 -1
- package/dist/utilities/executeSchemaHooks.js +1 -1
- package/dist/utilities/executeSchemaHooks.js.map +1 -1
- package/dist/utilities/extendDrizzleTable.d.ts.map +1 -1
- package/dist/utilities/formatGeneratedFile.d.ts +10 -0
- package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
- package/dist/utilities/formatGeneratedFile.js +58 -0
- package/dist/utilities/formatGeneratedFile.js.map +1 -0
- package/dist/utilities/getArrayRelationName.d.ts.map +1 -1
- package/dist/utilities/getCollectionIdType.d.ts.map +1 -1
- package/dist/utilities/getMigrationTemplate.d.ts.map +1 -1
- package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -1
- package/dist/utilities/getPrimaryDb.d.ts +1 -1
- package/dist/utilities/getPrimaryDb.d.ts.map +1 -1
- package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
- package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
- package/dist/utilities/getSizesToVariantsRenames.js +251 -0
- package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
- package/dist/utilities/getTransaction.d.ts +1 -1
- package/dist/utilities/getTransaction.d.ts.map +1 -1
- package/dist/utilities/getTransaction.js.map +1 -1
- package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
- package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -1
- package/dist/utilities/isUUIDType.d.ts.map +1 -1
- package/dist/utilities/json.d.ts.map +1 -1
- package/dist/utilities/migrationTableExists.d.ts.map +1 -1
- package/dist/utilities/parseError.d.ts.map +1 -1
- package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
- package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
- package/dist/utilities/parseJSONPathSegment.js +17 -0
- package/dist/utilities/parseJSONPathSegment.js.map +1 -0
- package/dist/utilities/pushDevSchema.d.ts.map +1 -1
- package/dist/utilities/pushDevSchema.js +1 -1
- package/dist/utilities/pushDevSchema.js.map +1 -1
- package/dist/utilities/rawConstraint.d.ts.map +1 -1
- package/dist/utilities/sanitizePathSegment.d.ts.map +1 -1
- package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
- package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
- package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
- package/dist/utilities/validateIdentifierLength.d.ts +12 -0
- package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
- package/dist/utilities/validateIdentifierLength.js +18 -0
- package/dist/utilities/validateIdentifierLength.js.map +1 -0
- package/package.json +17 -19
- package/dist/find/chainMethods.d.ts +0 -20
- package/dist/find/chainMethods.d.ts.map +0 -1
- package/dist/find/chainMethods.js +0 -16
- package/dist/find/chainMethods.js.map +0 -1
- package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
- package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
- package/dist/sqlite/requireDrizzleKit.js +0 -12
- package/dist/sqlite/requireDrizzleKit.js.map +0 -1
- package/dist/utilities/isValidStringID.spec.js +0 -15
- package/dist/utilities/isValidStringID.spec.js.map +0 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { branchChangesCollectionSlug } from 'payload';
|
|
2
|
+
import toSnakeCase from 'to-snake-case';
|
|
3
|
+
import { getPrimaryDb } from './utilities/getPrimaryDb.js';
|
|
4
|
+
import { getTransaction } from './utilities/getTransaction.js';
|
|
5
|
+
import { markWrite } from './utilities/readAfterWrite.js';
|
|
6
|
+
export const upsertBranchGlobalChange = async function upsertBranchGlobalChange({ branch, globalSlug, req }) {
|
|
7
|
+
const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug));
|
|
8
|
+
const table = this.tables[tableName];
|
|
9
|
+
const db = getPrimaryDb(this, await getTransaction(this, req));
|
|
10
|
+
const now = new Date().toISOString();
|
|
11
|
+
await this.insert({
|
|
12
|
+
db,
|
|
13
|
+
onConflictDoUpdate: {
|
|
14
|
+
set: {
|
|
15
|
+
globalSlug
|
|
16
|
+
},
|
|
17
|
+
target: [
|
|
18
|
+
table.branch,
|
|
19
|
+
table.globalSlug
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
tableName,
|
|
23
|
+
values: {
|
|
24
|
+
branch,
|
|
25
|
+
createdAt: now,
|
|
26
|
+
entityType: 'global',
|
|
27
|
+
globalSlug,
|
|
28
|
+
operation: 'update',
|
|
29
|
+
updatedAt: now
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
markWrite(this);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=upsertBranchGlobalChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/upsertBranchGlobalChange.ts"],"sourcesContent":["import type { UpsertBranchGlobalChange } from 'payload'\n\nimport { branchChangesCollectionSlug } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const upsertBranchGlobalChange: UpsertBranchGlobalChange =\n async function upsertBranchGlobalChange(this: DrizzleAdapter, { branch, globalSlug, req }) {\n const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug))\n const table = this.tables[tableName]\n const db = getPrimaryDb(this, await getTransaction(this, req))\n const now = new Date().toISOString()\n\n await this.insert({\n db,\n onConflictDoUpdate: {\n set: { globalSlug },\n target: [table.branch, table.globalSlug],\n },\n tableName,\n values: {\n branch,\n createdAt: now,\n entityType: 'global',\n globalSlug,\n operation: 'update',\n updatedAt: now,\n },\n })\n\n markWrite(this)\n }\n"],"names":["branchChangesCollectionSlug","toSnakeCase","getPrimaryDb","getTransaction","markWrite","upsertBranchGlobalChange","branch","globalSlug","req","tableName","tableNameMap","get","table","tables","db","now","Date","toISOString","insert","onConflictDoUpdate","set","target","values","createdAt","entityType","operation","updatedAt"],"mappings":"AAEA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,SAAS,QAAQ,gCAA+B;AAEzD,OAAO,MAAMC,2BACX,eAAeA,yBAA+C,EAAEC,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE;IACvF,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACV,YAAYD;IACpD,MAAMY,QAAQ,IAAI,CAACC,MAAM,CAACJ,UAAU;IACpC,MAAMK,KAAKZ,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEK;IACzD,MAAMO,MAAM,IAAIC,OAAOC,WAAW;IAElC,MAAM,IAAI,CAACC,MAAM,CAAC;QAChBJ;QACAK,oBAAoB;YAClBC,KAAK;gBAAEb;YAAW;YAClBc,QAAQ;gBAACT,MAAMN,MAAM;gBAAEM,MAAML,UAAU;aAAC;QAC1C;QACAE;QACAa,QAAQ;YACNhB;YACAiB,WAAWR;YACXS,YAAY;YACZjB;YACAkB,WAAW;YACXC,WAAWX;QACb;IACF;IAEAX,UAAU,IAAI;AAChB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteExistingArrayRows.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingArrayRows.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"deleteExistingArrayRows.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingArrayRows.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,uBAAuB,0CAKjC,IAAI,KAAG,OAAO,CAAC,IAAI,CAUrB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,oGASlC,IAAI,KAAG,OAAO,CAAC,IAAI,CAmDrB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { and, eq, inArray } from 'drizzle-orm';
|
|
2
2
|
export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName = '_locale', parentColumnName = '_parentID', parentID, pathColumnName = '_path', rows, tableName })=>{
|
|
3
|
-
const localizedPathsToDelete = new
|
|
3
|
+
const localizedPathsToDelete = new Map();
|
|
4
4
|
const pathsToDelete = new Set();
|
|
5
5
|
const table = adapter.tables[tableName];
|
|
6
6
|
rows.forEach((row)=>{
|
|
@@ -8,24 +8,29 @@ export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName =
|
|
|
8
8
|
const localeData = row[localeColumnName];
|
|
9
9
|
if (typeof path === 'string') {
|
|
10
10
|
if (typeof localeData === 'string') {
|
|
11
|
-
localizedPathsToDelete.
|
|
11
|
+
const localePaths = localizedPathsToDelete.get(localeData) ?? new Set();
|
|
12
|
+
localePaths.add(path);
|
|
13
|
+
localizedPathsToDelete.set(localeData, localePaths);
|
|
12
14
|
} else {
|
|
13
15
|
pathsToDelete.add(path);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
});
|
|
17
19
|
if (localizedPathsToDelete.size > 0) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
for (const [locale, localePaths] of localizedPathsToDelete){
|
|
21
|
+
const whereConstraints = [
|
|
22
|
+
eq(table[parentColumnName], parentID)
|
|
23
|
+
];
|
|
24
|
+
if (pathColumnName) {
|
|
25
|
+
whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)));
|
|
26
|
+
}
|
|
27
|
+
whereConstraints.push(eq(table[localeColumnName], locale));
|
|
28
|
+
await adapter.deleteWhere({
|
|
29
|
+
db,
|
|
30
|
+
tableName,
|
|
31
|
+
where: and(...whereConstraints)
|
|
32
|
+
});
|
|
23
33
|
}
|
|
24
|
-
await adapter.deleteWhere({
|
|
25
|
-
db,
|
|
26
|
-
tableName,
|
|
27
|
-
where: and(...whereConstraints)
|
|
28
|
-
});
|
|
29
34
|
}
|
|
30
35
|
if (pathsToDelete.size > 0) {
|
|
31
36
|
const whereConstraints = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Set<string
|
|
1
|
+
{"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Map<string, Set<string>>()\n const pathsToDelete = new Set<string>()\n const table = adapter.tables[tableName]\n\n rows.forEach((row) => {\n const path = row[pathColumnName]\n const localeData = row[localeColumnName]\n if (typeof path === 'string') {\n if (typeof localeData === 'string') {\n const localePaths = localizedPathsToDelete.get(localeData) ?? new Set<string>()\n\n localePaths.add(path)\n localizedPathsToDelete.set(localeData, localePaths)\n } else {\n pathsToDelete.add(path)\n }\n }\n })\n\n if (localizedPathsToDelete.size > 0) {\n for (const [locale, localePaths] of localizedPathsToDelete) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)))\n }\n\n whereConstraints.push(eq(table[localeColumnName], locale))\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n }\n\n if (pathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(pathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n}\n"],"names":["and","eq","inArray","deleteExistingRowsByPath","adapter","db","localeColumnName","parentColumnName","parentID","pathColumnName","rows","tableName","localizedPathsToDelete","Map","pathsToDelete","Set","table","tables","forEach","row","path","localeData","localePaths","get","add","set","size","locale","whereConstraints","push","Array","from","deleteWhere","where"],"mappings":"AAAA,SAASA,GAAG,EAAEC,EAAE,EAAEC,OAAO,QAAQ,cAAa;AAe9C,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,OAAO,EACPC,EAAE,EACFC,mBAAmB,SAAS,EAC5BC,mBAAmB,WAAW,EAC9BC,QAAQ,EACRC,iBAAiB,OAAO,EACxBC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,yBAAyB,IAAIC;IACnC,MAAMC,gBAAgB,IAAIC;IAC1B,MAAMC,QAAQZ,QAAQa,MAAM,CAACN,UAAU;IAEvCD,KAAKQ,OAAO,CAAC,CAACC;QACZ,MAAMC,OAAOD,GAAG,CAACV,eAAe;QAChC,MAAMY,aAAaF,GAAG,CAACb,iBAAiB;QACxC,IAAI,OAAOc,SAAS,UAAU;YAC5B,IAAI,OAAOC,eAAe,UAAU;gBAClC,MAAMC,cAAcV,uBAAuBW,GAAG,CAACF,eAAe,IAAIN;gBAElEO,YAAYE,GAAG,CAACJ;gBAChBR,uBAAuBa,GAAG,CAACJ,YAAYC;YACzC,OAAO;gBACLR,cAAcU,GAAG,CAACJ;YACpB;QACF;IACF;IAEA,IAAIR,uBAAuBc,IAAI,GAAG,GAAG;QACnC,KAAK,MAAM,CAACC,QAAQL,YAAY,IAAIV,uBAAwB;YAC1D,MAAMgB,mBAAmB;gBAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;aAAU;YAEhE,IAAIC,gBAAgB;gBAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACT;YAClE;YAEAM,iBAAiBC,IAAI,CAAC5B,GAAGe,KAAK,CAACV,iBAAiB,EAAEqB;YAElD,MAAMvB,QAAQ4B,WAAW,CAAC;gBACxB3B;gBACAM;gBACAsB,OAAOjC,OAAO4B;YAChB;QACF;IACF;IAEA,IAAId,cAAcY,IAAI,GAAG,GAAG;QAC1B,MAAME,mBAAmB;YAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACjB;QAClE;QAEA,MAAMV,QAAQ4B,WAAW,CAAC;YACxB3B;YACAM;YACAsB,OAAOjC,OAAO4B;QAChB;IACF;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleUpsertError.d.ts","sourceRoot":"","sources":["../../src/upsertRow/handleUpsertError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"handleUpsertError.d.ts","sourceRoot":"","sources":["../../src/upsertRow/handleUpsertError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,qFAQ3B,qBAAqB,KAAG,KAkE1B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/upsertRow/handleUpsertError.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { ValidationError } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\ntype HandleUpsertErrorArgs = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n error: unknown\n globalSlug?: string\n id?: number | string\n req?: Partial<PayloadRequest>\n tableName: string\n}\n\n/**\n * Handles unique constraint violation errors from PostgreSQL and SQLite,\n * converting them to Payload ValidationErrors.\n * Re-throws non-constraint errors unchanged.\n */\nexport const handleUpsertError = ({\n id,\n adapter,\n collectionSlug,\n error: caughtError,\n globalSlug,\n req,\n tableName,\n}: HandleUpsertErrorArgs): never => {\n let error: any = caughtError\n if (typeof caughtError === 'object' && caughtError !== null && 'cause' in caughtError) {\n error = caughtError.cause\n }\n\n // PostgreSQL: 23505, SQLite: SQLITE_CONSTRAINT_UNIQUE\n if (error?.code === '23505' || error?.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n let fieldName: null | string = null\n\n if (error.code === '23505') {\n // PostgreSQL - extract field name from constraint\n if (adapter.fieldConstraints?.[tableName]?.[error.constraint]) {\n fieldName = adapter.fieldConstraints[tableName][error.constraint]\n } else {\n const replacement = `${tableName}_`\n if (error.constraint?.includes(replacement)) {\n const replacedConstraint = error.constraint.replace(replacement, '')\n if (replacedConstraint && adapter.fieldConstraints[tableName]?.[replacedConstraint]) {\n fieldName = adapter.fieldConstraints[tableName][replacedConstraint]\n }\n }\n }\n\n if (!fieldName && error.detail) {\n // Extract from detail: \"Key (field)=(value) already exists.\"\n const regex = /Key \\(([^)]+)\\)=\\(([^)]+)\\)/\n const match: string[] = error.detail.match(regex)\n if (match && match[1]) {\n fieldName = match[1]\n }\n }\n } else if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n // SQLite - extract from message: \"UNIQUE constraint failed: table.field[, table.field2, ...]\"\n const regex = /UNIQUE constraint failed: ([^.]+)\\.([^.,]+)/\n const match: string[] = error.message?.match(regex)\n if (match && match[2]) {\n if (adapter.fieldConstraints[tableName]) {\n fieldName = adapter.fieldConstraints[tableName][`${match[2]}_idx`]\n }\n if (!fieldName) {\n fieldName = match[2]\n }\n }\n }\n\n throw new ValidationError(\n {\n id,\n collection: collectionSlug,\n errors: [\n {\n message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',\n path: fieldName,\n },\n ],\n global: globalSlug,\n req,\n },\n req?.t,\n )\n }\n\n // Re-throw non-constraint errors\n throw caughtError\n}\n"],"names":["ValidationError","handleUpsertError","id","adapter","collectionSlug","error","caughtError","globalSlug","req","tableName","cause","code","fieldName","fieldConstraints","constraint","replacement","includes","replacedConstraint","replace","detail","regex","match","message","collection","errors","t","path","global"],"mappings":"AAEA,SAASA,eAAe,QAAQ,UAAS;AAczC;;;;CAIC,GACD,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,EAAE,EACFC,OAAO,EACPC,cAAc,EACdC,OAAOC,WAAW,EAClBC,UAAU,EACVC,GAAG,EACHC,SAAS,EACa;IACtB,IAAIJ,QAAaC;IACjB,IAAI,OAAOA,gBAAgB,YAAYA,gBAAgB,QAAQ,WAAWA,aAAa;QACrFD,QAAQC,YAAYI,KAAK;IAC3B;IAEA,sDAAsD;IACtD,IAAIL,OAAOM,SAAS,WAAWN,OAAOM,SAAS,4BAA4B;QACzE,IAAIC,YAA2B;QAE/B,IAAIP,MAAMM,IAAI,KAAK,SAAS;YAC1B,kDAAkD;YAClD,IAAIR,QAAQU,gBAAgB,EAAE,CAACJ,UAAU,EAAE,CAACJ,MAAMS,UAAU,CAAC,EAAE;gBAC7DF,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACJ,MAAMS,UAAU,CAAC;YACnE,OAAO;gBACL,MAAMC,cAAc,GAAGN,UAAU,CAAC,CAAC;gBACnC,IAAIJ,MAAMS,UAAU,EAAEE,SAASD,cAAc;oBAC3C,MAAME,qBAAqBZ,MAAMS,UAAU,CAACI,OAAO,CAACH,aAAa;oBACjE,IAAIE,sBAAsBd,QAAQU,gBAAgB,CAACJ,UAAU,EAAE,CAACQ,mBAAmB,EAAE;wBACnFL,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACQ,mBAAmB;oBACrE;gBACF;YACF;YAEA,IAAI,CAACL,aAAaP,MAAMc,MAAM,EAAE;gBAC9B,6DAA6D;gBAC7D,MAAMC,QAAQ;gBACd,MAAMC,QAAkBhB,MAAMc,MAAM,CAACE,KAAK,CAACD;gBAC3C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;oBACrBT,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF,OAAO,IAAIhB,MAAMM,IAAI,KAAK,4BAA4B;YACpD,8FAA8F;YAC9F,MAAMS,QAAQ;YACd,MAAMC,QAAkBhB,MAAMiB,OAAO,EAAED,MAAMD;YAC7C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;gBACrB,IAAIlB,QAAQU,gBAAgB,CAACJ,UAAU,EAAE;oBACvCG,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAAC,GAAGY,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE;gBACA,IAAI,CAACT,WAAW;oBACdA,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF;QAEA,MAAM,IAAIrB,gBACR;YACEE;YACAqB,YAAYnB;YACZoB,QAAQ;gBACN;oBACEF,SAASd,KAAKiB,IAAIjB,IAAIiB,CAAC,CAAC,6BAA6B;oBACrDC,MAAMd;
|
|
1
|
+
{"version":3,"sources":["../../src/upsertRow/handleUpsertError.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { ValidationError } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\ntype HandleUpsertErrorArgs = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n error: unknown\n globalSlug?: string\n id?: number | string\n req?: Partial<PayloadRequest>\n tableName: string\n}\n\n/**\n * Handles unique constraint violation errors from PostgreSQL and SQLite,\n * converting them to Payload ValidationErrors.\n * Re-throws non-constraint errors unchanged.\n */\nexport const handleUpsertError = ({\n id,\n adapter,\n collectionSlug,\n error: caughtError,\n globalSlug,\n req,\n tableName,\n}: HandleUpsertErrorArgs): never => {\n let error: any = caughtError\n if (typeof caughtError === 'object' && caughtError !== null && 'cause' in caughtError) {\n error = caughtError.cause\n }\n\n // PostgreSQL: 23505, SQLite: SQLITE_CONSTRAINT_UNIQUE\n if (error?.code === '23505' || error?.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n let fieldName: null | string = null\n\n if (error.code === '23505') {\n // PostgreSQL - extract field name from constraint\n if (adapter.fieldConstraints?.[tableName]?.[error.constraint]) {\n fieldName = adapter.fieldConstraints[tableName][error.constraint]\n } else {\n const replacement = `${tableName}_`\n if (error.constraint?.includes(replacement)) {\n const replacedConstraint = error.constraint.replace(replacement, '')\n if (replacedConstraint && adapter.fieldConstraints[tableName]?.[replacedConstraint]) {\n fieldName = adapter.fieldConstraints[tableName][replacedConstraint]\n }\n }\n }\n\n if (!fieldName && error.detail) {\n // Extract from detail: \"Key (field)=(value) already exists.\"\n const regex = /Key \\(([^)]+)\\)=\\(([^)]+)\\)/\n const match: string[] = error.detail.match(regex)\n if (match && match[1]) {\n fieldName = match[1]\n }\n }\n } else if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n // SQLite - extract from message: \"UNIQUE constraint failed: table.field[, table.field2, ...]\"\n const regex = /UNIQUE constraint failed: ([^.]+)\\.([^.,]+)/\n const match: string[] = error.message?.match(regex)\n if (match && match[2]) {\n if (adapter.fieldConstraints[tableName]) {\n fieldName = adapter.fieldConstraints[tableName][`${match[2]}_idx`]\n }\n if (!fieldName) {\n fieldName = match[2]\n }\n }\n }\n\n throw new ValidationError(\n {\n id,\n collection: collectionSlug,\n errors: [\n {\n message: req?.t ? req.t('error:valueMustBeUnique') : 'Value must be unique',\n path: fieldName,\n tableName,\n },\n ],\n global: globalSlug,\n req,\n },\n req?.t,\n )\n }\n\n // Re-throw non-constraint errors\n throw caughtError\n}\n"],"names":["ValidationError","handleUpsertError","id","adapter","collectionSlug","error","caughtError","globalSlug","req","tableName","cause","code","fieldName","fieldConstraints","constraint","replacement","includes","replacedConstraint","replace","detail","regex","match","message","collection","errors","t","path","global"],"mappings":"AAEA,SAASA,eAAe,QAAQ,UAAS;AAczC;;;;CAIC,GACD,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,EAAE,EACFC,OAAO,EACPC,cAAc,EACdC,OAAOC,WAAW,EAClBC,UAAU,EACVC,GAAG,EACHC,SAAS,EACa;IACtB,IAAIJ,QAAaC;IACjB,IAAI,OAAOA,gBAAgB,YAAYA,gBAAgB,QAAQ,WAAWA,aAAa;QACrFD,QAAQC,YAAYI,KAAK;IAC3B;IAEA,sDAAsD;IACtD,IAAIL,OAAOM,SAAS,WAAWN,OAAOM,SAAS,4BAA4B;QACzE,IAAIC,YAA2B;QAE/B,IAAIP,MAAMM,IAAI,KAAK,SAAS;YAC1B,kDAAkD;YAClD,IAAIR,QAAQU,gBAAgB,EAAE,CAACJ,UAAU,EAAE,CAACJ,MAAMS,UAAU,CAAC,EAAE;gBAC7DF,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACJ,MAAMS,UAAU,CAAC;YACnE,OAAO;gBACL,MAAMC,cAAc,GAAGN,UAAU,CAAC,CAAC;gBACnC,IAAIJ,MAAMS,UAAU,EAAEE,SAASD,cAAc;oBAC3C,MAAME,qBAAqBZ,MAAMS,UAAU,CAACI,OAAO,CAACH,aAAa;oBACjE,IAAIE,sBAAsBd,QAAQU,gBAAgB,CAACJ,UAAU,EAAE,CAACQ,mBAAmB,EAAE;wBACnFL,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAACQ,mBAAmB;oBACrE;gBACF;YACF;YAEA,IAAI,CAACL,aAAaP,MAAMc,MAAM,EAAE;gBAC9B,6DAA6D;gBAC7D,MAAMC,QAAQ;gBACd,MAAMC,QAAkBhB,MAAMc,MAAM,CAACE,KAAK,CAACD;gBAC3C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;oBACrBT,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF,OAAO,IAAIhB,MAAMM,IAAI,KAAK,4BAA4B;YACpD,8FAA8F;YAC9F,MAAMS,QAAQ;YACd,MAAMC,QAAkBhB,MAAMiB,OAAO,EAAED,MAAMD;YAC7C,IAAIC,SAASA,KAAK,CAAC,EAAE,EAAE;gBACrB,IAAIlB,QAAQU,gBAAgB,CAACJ,UAAU,EAAE;oBACvCG,YAAYT,QAAQU,gBAAgB,CAACJ,UAAU,CAAC,GAAGY,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE;gBACA,IAAI,CAACT,WAAW;oBACdA,YAAYS,KAAK,CAAC,EAAE;gBACtB;YACF;QACF;QAEA,MAAM,IAAIrB,gBACR;YACEE;YACAqB,YAAYnB;YACZoB,QAAQ;gBACN;oBACEF,SAASd,KAAKiB,IAAIjB,IAAIiB,CAAC,CAAC,6BAA6B;oBACrDC,MAAMd;oBACNH;gBACF;aACD;YACDkB,QAAQpB;YACRC;QACF,GACAA,KAAKiB;IAET;IAEA,iCAAiC;IACjC,MAAMnB;AACR,EAAC"}
|
|
@@ -7,5 +7,5 @@ import type { Args } from './types.js';
|
|
|
7
7
|
*
|
|
8
8
|
* adapter function replaces the entire row and does not support partial updates.
|
|
9
9
|
*/
|
|
10
|
-
export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertTarget, where, }: Args) => Promise<T>;
|
|
10
|
+
export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertConflictData, upsertTarget, where, }: Args) => Promise<null | T>;
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;
|
|
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;AAqBtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,mMAsB3E,IAAI,KAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CA01BzB,CAAA"}
|
package/dist/upsertRow/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { and, desc, eq, isNull, or } from 'drizzle-orm';
|
|
2
|
+
import { branchField, MAIN_BRANCH } from 'payload';
|
|
2
3
|
import { buildFindManyArgs } from '../find/buildFindManyArgs.js';
|
|
3
4
|
import { transform } from '../transform/read/index.js';
|
|
4
5
|
import { transformForWrite } from '../transform/write/index.js';
|
|
@@ -17,7 +18,7 @@ import { shouldUseOptimizedUpsertRow } from './shouldUseOptimizedUpsertRow.js';
|
|
|
17
18
|
*/ export const upsertRow = async ({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, // TODO:
|
|
18
19
|
// When we support joins for write operations (create/update) - pass collectionSlug to the buildFindManyArgs
|
|
19
20
|
// Make a new argument in upsertRow.ts and pass the slug from every operation.
|
|
20
|
-
customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertTarget, where })=>{
|
|
21
|
+
customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, upsertConflictData, upsertTarget, where })=>{
|
|
21
22
|
if (operation === 'create' && !data.createdAt) {
|
|
22
23
|
data.createdAt = new Date().toISOString();
|
|
23
24
|
}
|
|
@@ -40,6 +41,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
40
41
|
const { row } = transformedForWrite;
|
|
41
42
|
const { arraysToPush } = transformedForWrite;
|
|
42
43
|
const drizzle = db;
|
|
44
|
+
const updateWhere = where ? and(eq(adapter.tables[tableName].id, id), where) : eq(adapter.tables[tableName].id, id);
|
|
43
45
|
// First, handle $push arrays
|
|
44
46
|
if (arraysToPush && Object.keys(arraysToPush)?.length) {
|
|
45
47
|
await insertArrays({
|
|
@@ -65,7 +67,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
65
67
|
if (hasDataToUpdate) {
|
|
66
68
|
// Only update row if there is something to update.
|
|
67
69
|
// Example: if the data only consists of a single $push, calling insertArrays is enough - we don't need to update the row.
|
|
68
|
-
await drizzle.update(adapter.tables[tableName]).set(row).where(
|
|
70
|
+
await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere);
|
|
69
71
|
}
|
|
70
72
|
return ignoreResult === 'idOnly' ? {
|
|
71
73
|
id
|
|
@@ -83,8 +85,11 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
83
85
|
const hasOnlyColumns = Object.keys(findManyArgs.columns || {}).length > 0;
|
|
84
86
|
if (!hasDataToUpdate) {
|
|
85
87
|
// Nothing to update => just fetch current row and return
|
|
86
|
-
findManyArgs.where =
|
|
88
|
+
findManyArgs.where = updateWhere;
|
|
87
89
|
const doc = await db.query[tableName].findFirst(findManyArgs);
|
|
90
|
+
if (!doc) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
88
93
|
return transform({
|
|
89
94
|
adapter,
|
|
90
95
|
config: adapter.payload.config,
|
|
@@ -105,7 +110,10 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
112
|
}
|
|
108
|
-
const docs = await drizzle.update(adapter.tables[tableName]).set(row).where(
|
|
113
|
+
const docs = await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere).returning(Object.keys(selectedFields).length ? selectedFields : undefined);
|
|
114
|
+
if (!docs[0]) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
109
117
|
return transform({
|
|
110
118
|
adapter,
|
|
111
119
|
config: adapter.payload.config,
|
|
@@ -116,7 +124,13 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
116
124
|
});
|
|
117
125
|
}
|
|
118
126
|
// DB Update that needs the result, potentially with joins => need to update first, then find. returning() does not work with joins.
|
|
119
|
-
await drizzle.update(adapter.tables[tableName]).set(row).where(
|
|
127
|
+
const docs = await drizzle.update(adapter.tables[tableName]).set(row).where(updateWhere).returning({
|
|
128
|
+
id: adapter.tables[tableName].id
|
|
129
|
+
});
|
|
130
|
+
if (!docs[0]) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
insertedRow = docs[0];
|
|
120
134
|
findManyArgs.where = eq(adapter.tables[tableName].id, insertedRow.id);
|
|
121
135
|
const doc = await db.query[tableName].findFirst(findManyArgs);
|
|
122
136
|
return transform({
|
|
@@ -149,6 +163,16 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
149
163
|
path,
|
|
150
164
|
tableName
|
|
151
165
|
});
|
|
166
|
+
const conflictWrite = upsertConflictData ? transformForWrite({
|
|
167
|
+
adapter,
|
|
168
|
+
data: upsertConflictData,
|
|
169
|
+
enableAtomicWrites: false,
|
|
170
|
+
fields,
|
|
171
|
+
path,
|
|
172
|
+
tableName
|
|
173
|
+
}) : rowToInsert;
|
|
174
|
+
let nestedWrite = rowToInsert;
|
|
175
|
+
let isUpdatingAfterInsertConflict = false;
|
|
152
176
|
if (customID) {
|
|
153
177
|
rowToInsert.row.id = customID;
|
|
154
178
|
}
|
|
@@ -157,27 +181,70 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
157
181
|
if (operation === 'update') {
|
|
158
182
|
const target = upsertTarget || adapter.tables[tableName].id;
|
|
159
183
|
// Check if we only have relationship operations and no main row data to update
|
|
160
|
-
// Exclude timestamp-only updates when we only have relationship operations
|
|
184
|
+
// Exclude timestamp-only updates when we only have relationship operations.
|
|
185
|
+
// Localized field updates live in the `_locales` table, so the main row may only
|
|
186
|
+
// contain timestamps — in that case the parent row's `updatedAt` must still bump.
|
|
161
187
|
const rowKeys = Object.keys(rowToInsert.row);
|
|
162
|
-
const
|
|
188
|
+
const hasLocalizedData = Object.keys(rowToInsert.locales).length > 0;
|
|
189
|
+
const hasMainRowData = rowKeys.length > 0 && (hasLocalizedData || !rowKeys.every((key)=>key === 'updatedAt' || key === 'createdAt'));
|
|
163
190
|
if (hasMainRowData) {
|
|
164
191
|
if (id) {
|
|
165
192
|
rowToInsert.row.id = id;
|
|
166
193
|
[insertedRow] = await adapter.insert({
|
|
167
194
|
db,
|
|
168
|
-
onConflictDoUpdate: {
|
|
169
|
-
set:
|
|
195
|
+
onConflictDoUpdate: where ? {
|
|
196
|
+
set: conflictWrite.row,
|
|
197
|
+
target,
|
|
198
|
+
where
|
|
199
|
+
} : {
|
|
200
|
+
set: conflictWrite.row,
|
|
170
201
|
target
|
|
171
202
|
},
|
|
172
203
|
tableName,
|
|
173
204
|
values: rowToInsert.row
|
|
174
205
|
});
|
|
206
|
+
} else if (upsertConflictData && upsertTarget) {
|
|
207
|
+
// The parent conflict is atomic. Child-table replacements are serialized only
|
|
208
|
+
// when the caller's transaction spans this complete upsert.
|
|
209
|
+
const targetKey = Object.entries(adapter.tables[tableName]).find(([, column])=>column === target)?.[0];
|
|
210
|
+
const targetValue = targetKey ? rowToInsert.row[targetKey] : undefined;
|
|
211
|
+
if (!targetKey || typeof targetValue === 'undefined') {
|
|
212
|
+
throw new Error(`Could not resolve the upsert target value for table "${tableName}".`);
|
|
213
|
+
}
|
|
214
|
+
for(let attempt = 0; attempt < 10; attempt++){
|
|
215
|
+
;
|
|
216
|
+
[insertedRow] = await adapter.insert({
|
|
217
|
+
db,
|
|
218
|
+
onConflictDoNothing: {
|
|
219
|
+
target
|
|
220
|
+
},
|
|
221
|
+
tableName,
|
|
222
|
+
values: rowToInsert.row
|
|
223
|
+
});
|
|
224
|
+
if (insertedRow) {
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
const updateWhere = where ? and(eq(target, targetValue), where) : eq(target, targetValue);
|
|
228
|
+
const updatedRows = await db.update(adapter.tables[tableName]).set(conflictWrite.row).where(updateWhere).returning();
|
|
229
|
+
if (updatedRows[0]) {
|
|
230
|
+
insertedRow = updatedRows[0];
|
|
231
|
+
nestedWrite = conflictWrite;
|
|
232
|
+
isUpdatingAfterInsertConflict = true;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
if (where) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (!insertedRow) {
|
|
240
|
+
throw new Error(`Could not upsert a stable row in table "${tableName}".`);
|
|
241
|
+
}
|
|
175
242
|
} else {
|
|
176
243
|
;
|
|
177
244
|
[insertedRow] = await adapter.insert({
|
|
178
245
|
db,
|
|
179
246
|
onConflictDoUpdate: {
|
|
180
|
-
set:
|
|
247
|
+
set: conflictWrite.row,
|
|
181
248
|
target,
|
|
182
249
|
where
|
|
183
250
|
},
|
|
@@ -185,6 +252,9 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
185
252
|
values: rowToInsert.row
|
|
186
253
|
});
|
|
187
254
|
}
|
|
255
|
+
if (!insertedRow) {
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
188
258
|
} else {
|
|
189
259
|
// No main row data to update, just use the existing ID
|
|
190
260
|
insertedRow = {
|
|
@@ -208,39 +278,44 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
208
278
|
const numbersToInsert = [];
|
|
209
279
|
const blocksToInsert = {};
|
|
210
280
|
const selectsToInsert = {};
|
|
281
|
+
const localeTableName = `${tableName}${adapter.localesSuffix}`;
|
|
282
|
+
const shouldStampLocaleBranch = Boolean(adapter.rawTables[localeTableName]?.columns[branchField]);
|
|
211
283
|
// If there are locale rows with data, add the parent and locale to each
|
|
212
|
-
if (Object.keys(
|
|
213
|
-
Object.entries(
|
|
284
|
+
if (Object.keys(nestedWrite.locales).length > 0) {
|
|
285
|
+
Object.entries(nestedWrite.locales).forEach(([locale, localeRow])=>{
|
|
214
286
|
localeRow._parentID = insertedRow.id;
|
|
215
287
|
localeRow._locale = locale;
|
|
288
|
+
if (shouldStampLocaleBranch) {
|
|
289
|
+
localeRow[branchField] = insertedRow[branchField] ?? data[branchField] ?? MAIN_BRANCH;
|
|
290
|
+
}
|
|
216
291
|
localesToInsert.push(localeRow);
|
|
217
292
|
});
|
|
218
293
|
}
|
|
219
294
|
// If there are relationships, add parent to each
|
|
220
|
-
if (
|
|
221
|
-
|
|
295
|
+
if (nestedWrite.relationships.length > 0) {
|
|
296
|
+
nestedWrite.relationships.forEach((relation)=>{
|
|
222
297
|
relation.parent = insertedRow.id;
|
|
223
298
|
relationsToInsert.push(relation);
|
|
224
299
|
});
|
|
225
300
|
}
|
|
226
301
|
// If there are texts, add parent to each
|
|
227
|
-
if (
|
|
228
|
-
|
|
302
|
+
if (nestedWrite.texts.length > 0) {
|
|
303
|
+
nestedWrite.texts.forEach((textRow)=>{
|
|
229
304
|
textRow.parent = insertedRow.id;
|
|
230
305
|
textsToInsert.push(textRow);
|
|
231
306
|
});
|
|
232
307
|
}
|
|
233
308
|
// If there are numbers, add parent to each
|
|
234
|
-
if (
|
|
235
|
-
|
|
309
|
+
if (nestedWrite.numbers.length > 0) {
|
|
310
|
+
nestedWrite.numbers.forEach((numberRow)=>{
|
|
236
311
|
numberRow.parent = insertedRow.id;
|
|
237
312
|
numbersToInsert.push(numberRow);
|
|
238
313
|
});
|
|
239
314
|
}
|
|
240
315
|
// If there are selects, add parent to each, and then
|
|
241
316
|
// store by table name and rows
|
|
242
|
-
if (Object.keys(
|
|
243
|
-
Object.entries(
|
|
317
|
+
if (Object.keys(nestedWrite.selects).length > 0) {
|
|
318
|
+
Object.entries(nestedWrite.selects).forEach(([selectTableName, selectRows])=>{
|
|
244
319
|
selectsToInsert[selectTableName] = [];
|
|
245
320
|
selectRows.forEach((row)=>{
|
|
246
321
|
if (typeof row.parent === 'undefined') {
|
|
@@ -252,8 +327,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
252
327
|
}
|
|
253
328
|
// If there are blocks, add parent to each, and then
|
|
254
329
|
// store by table name and rows
|
|
255
|
-
Object.keys(
|
|
256
|
-
|
|
330
|
+
Object.keys(nestedWrite.blocks).forEach((tableName)=>{
|
|
331
|
+
nestedWrite.blocks[tableName].forEach((blockRow)=>{
|
|
257
332
|
blockRow.row._parentID = insertedRow.id;
|
|
258
333
|
if (!blocksToInsert[tableName]) {
|
|
259
334
|
blocksToInsert[tableName] = [];
|
|
@@ -268,20 +343,36 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
268
343
|
// INSERT LOCALES
|
|
269
344
|
// //////////////////////////////////
|
|
270
345
|
if (localesToInsert.length > 0) {
|
|
271
|
-
const localeTableName = `${tableName}${adapter.localesSuffix}`;
|
|
272
346
|
const localeTable = adapter.tables[`${tableName}${adapter.localesSuffix}`];
|
|
273
|
-
if (operation === 'update') {
|
|
274
|
-
|
|
347
|
+
if (operation === 'update' && isUpdatingAfterInsertConflict) {
|
|
348
|
+
for (const localeRow of localesToInsert){
|
|
349
|
+
await adapter.insert({
|
|
350
|
+
db,
|
|
351
|
+
onConflictDoUpdate: {
|
|
352
|
+
set: localeRow,
|
|
353
|
+
target: [
|
|
354
|
+
localeTable._locale,
|
|
355
|
+
localeTable._parentID
|
|
356
|
+
]
|
|
357
|
+
},
|
|
358
|
+
tableName: localeTableName,
|
|
359
|
+
values: localeRow
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
} else {
|
|
363
|
+
if (operation === 'update') {
|
|
364
|
+
await adapter.deleteWhere({
|
|
365
|
+
db,
|
|
366
|
+
tableName: localeTableName,
|
|
367
|
+
where: eq(localeTable._parentID, insertedRow.id)
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
await adapter.insert({
|
|
275
371
|
db,
|
|
276
372
|
tableName: localeTableName,
|
|
277
|
-
|
|
373
|
+
values: localesToInsert
|
|
278
374
|
});
|
|
279
375
|
}
|
|
280
|
-
await adapter.insert({
|
|
281
|
-
db,
|
|
282
|
-
tableName: localeTableName,
|
|
283
|
-
values: localesToInsert
|
|
284
|
-
});
|
|
285
376
|
}
|
|
286
377
|
// //////////////////////////////////
|
|
287
378
|
// INSERT RELATIONSHIPS
|
|
@@ -289,7 +380,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
289
380
|
const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
|
|
290
381
|
if (operation === 'update') {
|
|
291
382
|
// Filter out specific item deletions (those with itemToRemove) from general path deletions
|
|
292
|
-
const generalRelationshipDeletes =
|
|
383
|
+
const generalRelationshipDeletes = nestedWrite.relationshipsToDelete.filter((rel)=>!('itemToRemove' in rel));
|
|
293
384
|
await deleteExistingRowsByPath({
|
|
294
385
|
adapter,
|
|
295
386
|
db,
|
|
@@ -314,9 +405,9 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
314
405
|
// //////////////////////////////////
|
|
315
406
|
// HANDLE RELATIONSHIP $push OPERATIONS
|
|
316
407
|
// //////////////////////////////////
|
|
317
|
-
if (
|
|
408
|
+
if (nestedWrite.relationshipsToAppend.length > 0) {
|
|
318
409
|
// Prepare all relationships for batch insert (order will be set after max query)
|
|
319
|
-
const relationshipsToInsert =
|
|
410
|
+
const relationshipsToInsert = nestedWrite.relationshipsToAppend.map((rel)=>{
|
|
320
411
|
const parentId = id || insertedRow.id;
|
|
321
412
|
const row = {
|
|
322
413
|
parent: parentId,
|
|
@@ -414,10 +505,10 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
414
505
|
// //////////////////////////////////
|
|
415
506
|
// HANDLE RELATIONSHIP $remove OPERATIONS
|
|
416
507
|
// //////////////////////////////////
|
|
417
|
-
if (
|
|
508
|
+
if (nestedWrite.relationshipsToDelete.some((rel)=>'itemToRemove' in rel)) {
|
|
418
509
|
const relationshipTable = adapter.tables[relationshipsTableName];
|
|
419
510
|
if (relationshipTable) {
|
|
420
|
-
for (const relToDelete of
|
|
511
|
+
for (const relToDelete of nestedWrite.relationshipsToDelete){
|
|
421
512
|
if ('itemToRemove' in relToDelete && relToDelete.itemToRemove) {
|
|
422
513
|
const item = relToDelete.itemToRemove;
|
|
423
514
|
const parentId = id || insertedRow.id;
|
|
@@ -471,7 +562,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
471
562
|
pathColumnName: 'path',
|
|
472
563
|
rows: [
|
|
473
564
|
...textsToInsert,
|
|
474
|
-
...
|
|
565
|
+
...nestedWrite.textsToDelete
|
|
475
566
|
],
|
|
476
567
|
tableName: textsTableName
|
|
477
568
|
});
|
|
@@ -497,7 +588,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
497
588
|
pathColumnName: 'path',
|
|
498
589
|
rows: [
|
|
499
590
|
...numbersToInsert,
|
|
500
|
-
...
|
|
591
|
+
...nestedWrite.numbersToDelete
|
|
501
592
|
],
|
|
502
593
|
tableName: numbersTableName
|
|
503
594
|
});
|
|
@@ -514,7 +605,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
514
605
|
// //////////////////////////////////
|
|
515
606
|
const insertedBlockRows = {};
|
|
516
607
|
if (operation === 'update') {
|
|
517
|
-
for (const tableName of
|
|
608
|
+
for (const tableName of nestedWrite.blocksToDelete){
|
|
518
609
|
const blockTable = adapter.tables[tableName];
|
|
519
610
|
await adapter.deleteWhere({
|
|
520
611
|
db,
|
|
@@ -570,7 +661,7 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
570
661
|
// INSERT ARRAYS RECURSIVELY
|
|
571
662
|
// //////////////////////////////////
|
|
572
663
|
if (operation === 'update') {
|
|
573
|
-
for (const arrayTableName of Object.keys(
|
|
664
|
+
for (const arrayTableName of Object.keys(nestedWrite.arrays)){
|
|
574
665
|
await deleteExistingArrayRows({
|
|
575
666
|
adapter,
|
|
576
667
|
db,
|
|
@@ -582,8 +673,8 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
582
673
|
await insertArrays({
|
|
583
674
|
adapter,
|
|
584
675
|
arrays: [
|
|
585
|
-
|
|
586
|
-
|
|
676
|
+
nestedWrite.arrays,
|
|
677
|
+
nestedWrite.arraysToPush
|
|
587
678
|
],
|
|
588
679
|
db,
|
|
589
680
|
parentRows: [
|
|
@@ -595,14 +686,36 @@ customID, joinQuery: _joinQuery, operation, path = '', req, select, tableName, u
|
|
|
595
686
|
// //////////////////////////////////
|
|
596
687
|
// INSERT hasMany SELECTS
|
|
597
688
|
// //////////////////////////////////
|
|
598
|
-
|
|
689
|
+
const selectTableNames = new Set([
|
|
690
|
+
...Object.keys(nestedWrite.selectsToDelete),
|
|
691
|
+
...Object.keys(selectsToInsert)
|
|
692
|
+
]);
|
|
693
|
+
for (const selectTableName of selectTableNames){
|
|
694
|
+
const tableRows = selectsToInsert[selectTableName] ?? [];
|
|
599
695
|
const selectTable = adapter.tables[selectTableName];
|
|
600
696
|
if (operation === 'update') {
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
697
|
+
for (const selectToDelete of nestedWrite.selectsToDelete[selectTableName] ?? []){
|
|
698
|
+
let selectParent = selectToDelete.parent ?? insertedRow.id;
|
|
699
|
+
if ((typeof selectParent === 'number' || typeof selectParent === 'string') && selectParent in arraysBlocksUUIDMap) {
|
|
700
|
+
selectParent = arraysBlocksUUIDMap[selectParent];
|
|
701
|
+
}
|
|
702
|
+
const deleteConstraints = [
|
|
703
|
+
eq(selectTable.parent, selectParent)
|
|
704
|
+
];
|
|
705
|
+
if (typeof selectToDelete.locale === 'string') {
|
|
706
|
+
if (!selectTable.locale) {
|
|
707
|
+
throw new Error(`Could not limit the select replacement for table "${selectTableName}" to locale "${selectToDelete.locale}".`);
|
|
708
|
+
}
|
|
709
|
+
deleteConstraints.push(eq(selectTable.locale, selectToDelete.locale));
|
|
710
|
+
} else if (selectTable.locale) {
|
|
711
|
+
deleteConstraints.push(isNull(selectTable.locale));
|
|
712
|
+
}
|
|
713
|
+
await adapter.deleteWhere({
|
|
714
|
+
db,
|
|
715
|
+
tableName: selectTableName,
|
|
716
|
+
where: and(...deleteConstraints)
|
|
717
|
+
});
|
|
718
|
+
}
|
|
606
719
|
}
|
|
607
720
|
if (Object.keys(arraysBlocksUUIDMap).length > 0) {
|
|
608
721
|
tableRows.forEach((row)=>{
|