@payloadcms/db-mongodb 3.62.0-canary.4 → 3.62.0-canary.6
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/index.d.ts.map +1 -1
 - package/dist/index.js +1 -37
 - package/dist/index.js.map +1 -1
 - package/dist/queries/buildSearchParams.d.ts +2 -2
 - package/dist/queries/buildSearchParams.d.ts.map +1 -1
 - package/dist/queries/buildSearchParams.js.map +1 -1
 - package/dist/queries/parseParams.js.map +1 -1
 - package/dist/queries/sanitizeQueryValue.d.ts +2 -2
 - package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
 - package/dist/queries/sanitizeQueryValue.js +1 -0
 - package/dist/queries/sanitizeQueryValue.js.map +1 -1
 - package/package.json +3 -3
 
    
        package/dist/index.d.ts.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,SAAS,EAET,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EAClB,MAAM,SAAS,CAAA; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
         
     | 
    
        package/dist/index.js
    CHANGED
    
    | 
         @@ -1,7 +1,5 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import fs from 'fs';
         
     | 
| 
       2 
1 
     | 
    
         
             
            import mongoose from 'mongoose';
         
     | 
| 
       3 
     | 
    
         
            -
            import  
     | 
| 
       4 
     | 
    
         
            -
            import { createDatabaseAdapter, defaultBeginTransaction } from 'payload';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload';
         
     | 
| 
       5 
3 
     | 
    
         
             
            import { connect } from './connect.js';
         
     | 
| 
       6 
4 
     | 
    
         
             
            import { count } from './count.js';
         
     | 
| 
       7 
5 
     | 
    
         
             
            import { countGlobalVersions } from './countGlobalVersions.js';
         
     | 
| 
         @@ -112,39 +110,5 @@ export function mongooseAdapter({ allowAdditionalKeys = false, allowIDOnCreate = 
     | 
|
| 
       112 
110 
     | 
    
         
             
                };
         
     | 
| 
       113 
111 
     | 
    
         
             
            }
         
     | 
| 
       114 
112 
     | 
    
         
             
            export { compatibilityOptions } from './utilities/compatibilityOptions.js';
         
     | 
| 
       115 
     | 
    
         
            -
            /**
         
     | 
| 
       116 
     | 
    
         
            -
             * Attempt to find migrations directory.
         
     | 
| 
       117 
     | 
    
         
            -
             *
         
     | 
| 
       118 
     | 
    
         
            -
             * Checks for the following directories in order:
         
     | 
| 
       119 
     | 
    
         
            -
             * - `migrationDir` argument from Payload config
         
     | 
| 
       120 
     | 
    
         
            -
             * - `src/migrations`
         
     | 
| 
       121 
     | 
    
         
            -
             * - `dist/migrations`
         
     | 
| 
       122 
     | 
    
         
            -
             * - `migrations`
         
     | 
| 
       123 
     | 
    
         
            -
             *
         
     | 
| 
       124 
     | 
    
         
            -
             * Defaults to `src/migrations`
         
     | 
| 
       125 
     | 
    
         
            -
             *
         
     | 
| 
       126 
     | 
    
         
            -
             * @param migrationDir
         
     | 
| 
       127 
     | 
    
         
            -
             * @returns
         
     | 
| 
       128 
     | 
    
         
            -
             */ function findMigrationDir(migrationDir) {
         
     | 
| 
       129 
     | 
    
         
            -
                const cwd = process.cwd();
         
     | 
| 
       130 
     | 
    
         
            -
                const srcDir = path.resolve(cwd, 'src/migrations');
         
     | 
| 
       131 
     | 
    
         
            -
                const distDir = path.resolve(cwd, 'dist/migrations');
         
     | 
| 
       132 
     | 
    
         
            -
                const relativeMigrations = path.resolve(cwd, 'migrations');
         
     | 
| 
       133 
     | 
    
         
            -
                // Use arg if provided
         
     | 
| 
       134 
     | 
    
         
            -
                if (migrationDir) {
         
     | 
| 
       135 
     | 
    
         
            -
                    return migrationDir;
         
     | 
| 
       136 
     | 
    
         
            -
                }
         
     | 
| 
       137 
     | 
    
         
            -
                // Check other common locations
         
     | 
| 
       138 
     | 
    
         
            -
                if (fs.existsSync(srcDir)) {
         
     | 
| 
       139 
     | 
    
         
            -
                    return srcDir;
         
     | 
| 
       140 
     | 
    
         
            -
                }
         
     | 
| 
       141 
     | 
    
         
            -
                if (fs.existsSync(distDir)) {
         
     | 
| 
       142 
     | 
    
         
            -
                    return distDir;
         
     | 
| 
       143 
     | 
    
         
            -
                }
         
     | 
| 
       144 
     | 
    
         
            -
                if (fs.existsSync(relativeMigrations)) {
         
     | 
| 
       145 
     | 
    
         
            -
                    return relativeMigrations;
         
     | 
| 
       146 
     | 
    
         
            -
                }
         
     | 
| 
       147 
     | 
    
         
            -
                return srcDir;
         
     | 
| 
       148 
     | 
    
         
            -
            }
         
     | 
| 
       149 
113 
     | 
    
         | 
| 
       150 
114 
     | 
    
         
             
            //# sourceMappingURL=index.js.map
         
     | 
    
        package/dist/index.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollationOptions, TransactionOptions } from 'mongodb'\nimport type { MongoMemoryReplSet } from 'mongodb-memory-server'\nimport type {\n  ClientSession,\n  Connection,\n  ConnectOptions,\n  QueryOptions,\n  SchemaOptions,\n} from 'mongoose'\nimport type {\n  BaseDatabaseAdapter,\n  CollectionSlug,\n  DatabaseAdapterObj,\n  JsonObject,\n  Migration,\n  Payload,\n  TypeWithVersion,\n  UpdateGlobalArgs,\n  UpdateGlobalVersionArgs,\n  UpdateOneArgs,\n  UpdateVersionArgs,\n} from 'payload'\n\nimport fs from 'fs'\nimport mongoose from 'mongoose'\nimport path from 'path'\nimport { createDatabaseAdapter, defaultBeginTransaction } from 'payload'\n\nimport type { CollectionModel, GlobalModel, MigrateDownArgs, MigrateUpArgs } from './types.js'\n\nimport { connect } from './connect.js'\nimport { count } from './count.js'\nimport { countGlobalVersions } from './countGlobalVersions.js'\nimport { countVersions } from './countVersions.js'\nimport { create } from './create.js'\nimport { createGlobal } from './createGlobal.js'\nimport { createGlobalVersion } from './createGlobalVersion.js'\nimport { createMigration } from './createMigration.js'\nimport { createVersion } from './createVersion.js'\nimport { deleteMany } from './deleteMany.js'\nimport { deleteOne } from './deleteOne.js'\nimport { deleteVersions } from './deleteVersions.js'\nimport { destroy } from './destroy.js'\nimport { find } from './find.js'\nimport { findDistinct } from './findDistinct.js'\nimport { findGlobal } from './findGlobal.js'\nimport { findGlobalVersions } from './findGlobalVersions.js'\nimport { findOne } from './findOne.js'\nimport { findVersions } from './findVersions.js'\nimport { init } from './init.js'\nimport { migrateFresh } from './migrateFresh.js'\nimport { queryDrafts } from './queryDrafts.js'\nimport { beginTransaction } from './transactions/beginTransaction.js'\nimport { commitTransaction } from './transactions/commitTransaction.js'\nimport { rollbackTransaction } from './transactions/rollbackTransaction.js'\nimport { updateGlobal } from './updateGlobal.js'\nimport { updateGlobalVersion } from './updateGlobalVersion.js'\nimport { updateJobs } from './updateJobs.js'\nimport { updateMany } from './updateMany.js'\nimport { updateOne } from './updateOne.js'\nimport { updateVersion } from './updateVersion.js'\nimport { upsert } from './upsert.js'\n\nexport type { MigrateDownArgs, MigrateUpArgs } from './types.js'\n\nexport interface Args {\n  /**\n   * By default, Payload strips all additional keys from MongoDB data that don't exist\n   * in the Payload schema. If you have some data that you want to include to the result\n   * but it doesn't exist in Payload, you can enable this flag\n   * @default false\n   */\n  allowAdditionalKeys?: boolean\n  /**\n   * Enable this flag if you want to thread your own ID to create operation data, for example:\n   * ```ts\n   * import { Types } from 'mongoose'\n   *\n   * const id = new Types.ObjectId().toHexString()\n   * const doc = await payload.create({ collection: 'posts', data: {id, title: \"my title\"}})\n   * assertEq(doc.id, id)\n   * ```\n   */\n  allowIDOnCreate?: boolean\n  /** Set to false to disable auto-pluralization of collection names, Defaults to true */\n  autoPluralization?: boolean\n\n  /**\n   * If enabled, collation allows for language-specific rules for string comparison.\n   * This configuration can include the following options:\n   *\n   * - `strength` (number): Comparison level (1: Primary, 2: Secondary, 3: Tertiary (default), 4: Quaternary, 5: Identical)\n   * - `caseLevel` (boolean): Include case comparison at strength level 1 or 2.\n   * - `caseFirst` (string): Sort order of case differences during tertiary level comparisons (\"upper\", \"lower\", \"off\").\n   * - `numericOrdering` (boolean): Compare numeric strings as numbers.\n   * - `alternate` (string): Consider whitespace and punctuation as base characters (\"non-ignorable\", \"shifted\").\n   * - `maxVariable` (string): Characters considered ignorable when `alternate` is \"shifted\" (\"punct\", \"space\").\n   * - `backwards` (boolean): Sort strings with diacritics from back of the string.\n   * - `normalization` (boolean): Check if text requires normalization and perform normalization.\n   *\n   * Available on MongoDB version 3.4 and up.\n   * The locale that gets passed is your current project's locale but defaults to \"en\".\n   *\n   * Example:\n   * {\n   *   strength: 3\n   * }\n   *\n   * Defaults to disabled.\n   */\n  collation?: Omit<CollationOptions, 'locale'>\n\n  collectionsSchemaOptions?: Partial<Record<CollectionSlug, SchemaOptions>>\n  /** Extra configuration options */\n  connectOptions?: {\n    /**\n     * Set false to disable $facet aggregation in non-supporting databases, Defaults to true\n     * @deprecated Payload doesn't use `$facet` anymore anywhere.\n     */\n    useFacet?: boolean\n  } & ConnectOptions\n  /**\n   * We add a secondary sort based on `createdAt` to ensure that results are always returned in the same order when sorting by a non-unique field.\n   * This is because MongoDB does not guarantee the order of results, however in very large datasets this could affect performance.\n   *\n   * Set to `true` to disable this behaviour.\n   */\n  disableFallbackSort?: boolean\n  /** Set to true to disable hinting to MongoDB to use 'id' as index. This is currently done when counting documents for pagination. Disabling this optimization might fix some problems with AWS DocumentDB. Defaults to false */\n  disableIndexHints?: boolean\n  /**\n   * Set to `true` to ensure that indexes are ready before completing connection.\n   * NOTE: not recommended for production. This can slow down the initialization of Payload.\n   */\n  ensureIndexes?: boolean\n  migrationDir?: string\n  /**\n   * typed as any to avoid dependency\n   */\n  mongoMemoryServer?: MongoMemoryReplSet\n  prodMigrations?: Migration[]\n\n  transactionOptions?: false | TransactionOptions\n\n  /** The URL to connect to MongoDB or false to start payload and prevent connecting */\n  url: false | string\n\n  /**\n   * Set to `true` to use an alternative `dropDatabase` implementation that calls `collection.deleteMany({})` on every collection instead of sending a raw `dropDatabase` command.\n   * Payload only uses `dropDatabase` for testing purposes.\n   * @default false\n   */\n  useAlternativeDropDatabase?: boolean\n  /**\n   * Set to `true` to use `BigInt` for custom ID fields of type `'number'`.\n   * Useful for databases that don't support `double` or `int32` IDs.\n   * @default false\n   */\n  useBigIntForNumberIDs?: boolean\n  /**\n   * Set to `false` to disable join aggregations (which use correlated subqueries) and instead populate join fields via multiple `find` queries.\n   * @default true\n   */\n  useJoinAggregations?: boolean\n  /**\n   * Set to `false` to disable the use of `pipeline` in the `$lookup` aggregation in sorting.\n   * @default true\n   */\n  usePipelineInSortLookup?: boolean\n}\n\nexport type MongooseAdapter = {\n  collections: {\n    [slug: string]: CollectionModel\n  }\n  connection: Connection\n  ensureIndexes: boolean\n  globals: GlobalModel\n  mongoMemoryServer: MongoMemoryReplSet\n  prodMigrations?: {\n    down: (args: MigrateDownArgs) => Promise<void>\n    name: string\n    up: (args: MigrateUpArgs) => Promise<void>\n  }[]\n  sessions: Record<number | string, ClientSession>\n  useAlternativeDropDatabase: boolean\n  useBigIntForNumberIDs: boolean\n  useJoinAggregations: boolean\n  usePipelineInSortLookup: boolean\n  versions: {\n    [slug: string]: CollectionModel\n  }\n} & Args &\n  BaseDatabaseAdapter\n\ndeclare module 'payload' {\n  export interface DatabaseAdapter\n    extends Omit<BaseDatabaseAdapter, 'sessions'>,\n      Omit<Args, 'migrationDir'> {\n    collections: {\n      [slug: string]: CollectionModel\n    }\n    connection: Connection\n    ensureIndexes: boolean\n    globals: GlobalModel\n    mongoMemoryServer: MongoMemoryReplSet\n    prodMigrations?: {\n      down: (args: MigrateDownArgs) => Promise<void>\n      name: string\n      up: (args: MigrateUpArgs) => Promise<void>\n    }[]\n    sessions: Record<number | string, ClientSession>\n    transactionOptions: TransactionOptions\n    updateGlobal: <T extends Record<string, unknown>>(\n      args: { options?: QueryOptions } & UpdateGlobalArgs<T>,\n    ) => Promise<T>\n    updateGlobalVersion: <T extends JsonObject = JsonObject>(\n      args: { options?: QueryOptions } & UpdateGlobalVersionArgs<T>,\n    ) => Promise<TypeWithVersion<T>>\n\n    updateOne: (args: { options?: QueryOptions } & UpdateOneArgs) => Promise<Document>\n    updateVersion: <T extends JsonObject = JsonObject>(\n      args: { options?: QueryOptions } & UpdateVersionArgs<T>,\n    ) => Promise<TypeWithVersion<T>>\n    useAlternativeDropDatabase: boolean\n    useBigIntForNumberIDs: boolean\n    useJoinAggregations: boolean\n    usePipelineInSortLookup: boolean\n    versions: {\n      [slug: string]: CollectionModel\n    }\n  }\n}\n\nexport function mongooseAdapter({\n  allowAdditionalKeys = false,\n  allowIDOnCreate = false,\n  autoPluralization = true,\n  collectionsSchemaOptions = {},\n  connectOptions,\n  disableFallbackSort = false,\n  disableIndexHints = false,\n  ensureIndexes = false,\n  migrationDir: migrationDirArg,\n  mongoMemoryServer,\n  prodMigrations,\n  transactionOptions = {},\n  url,\n  useAlternativeDropDatabase = false,\n  useBigIntForNumberIDs = false,\n  useJoinAggregations = true,\n  usePipelineInSortLookup = true,\n}: Args): DatabaseAdapterObj {\n  function adapter({ payload }: { payload: Payload }) {\n    const migrationDir = findMigrationDir(migrationDirArg)\n    mongoose.set('strictQuery', false)\n\n    return createDatabaseAdapter<MongooseAdapter>({\n      name: 'mongoose',\n\n      // Mongoose-specific\n      autoPluralization,\n      collections: {},\n      // @ts-expect-error initialize without a connection\n      connection: undefined,\n      connectOptions: connectOptions || {},\n      disableIndexHints,\n      ensureIndexes,\n      // @ts-expect-error don't have globals model yet\n      globals: undefined,\n      // @ts-expect-error Should not be required\n      mongoMemoryServer,\n      sessions: {},\n      transactionOptions: transactionOptions === false ? undefined : transactionOptions,\n      updateJobs,\n      updateMany,\n      url,\n      versions: {},\n      // DatabaseAdapter\n      allowAdditionalKeys,\n      allowIDOnCreate,\n      beginTransaction: transactionOptions === false ? defaultBeginTransaction() : beginTransaction,\n      collectionsSchemaOptions,\n      commitTransaction,\n      connect,\n      count,\n      countGlobalVersions,\n      countVersions,\n      create,\n      createGlobal,\n      createGlobalVersion,\n      createMigration,\n      createVersion,\n      defaultIDType: 'text',\n      deleteMany,\n      deleteOne,\n      deleteVersions,\n      destroy,\n      disableFallbackSort,\n      find,\n      findDistinct,\n      findGlobal,\n      findGlobalVersions,\n      findOne,\n      findVersions,\n      init,\n      migrateFresh,\n      migrationDir,\n      packageName: '@payloadcms/db-mongodb',\n      payload,\n      prodMigrations,\n      queryDrafts,\n      rollbackTransaction,\n      updateGlobal,\n      updateGlobalVersion,\n      updateOne,\n      updateVersion,\n      upsert,\n      useAlternativeDropDatabase,\n      useBigIntForNumberIDs,\n      useJoinAggregations,\n      usePipelineInSortLookup,\n    })\n  }\n\n  return {\n    name: 'mongoose',\n    allowIDOnCreate,\n    defaultIDType: 'text',\n    init: adapter,\n  }\n}\n\nexport { compatibilityOptions } from './utilities/compatibilityOptions.js'\n\n/**\n * Attempt to find migrations directory.\n *\n * Checks for the following directories in order:\n * - `migrationDir` argument from Payload config\n * - `src/migrations`\n * - `dist/migrations`\n * - `migrations`\n *\n * Defaults to `src/migrations`\n *\n * @param migrationDir\n * @returns\n */\nfunction findMigrationDir(migrationDir?: string): string {\n  const cwd = process.cwd()\n  const srcDir = path.resolve(cwd, 'src/migrations')\n  const distDir = path.resolve(cwd, 'dist/migrations')\n  const relativeMigrations = path.resolve(cwd, 'migrations')\n\n  // Use arg if provided\n  if (migrationDir) {\n    return migrationDir\n  }\n\n  // Check other common locations\n  if (fs.existsSync(srcDir)) {\n    return srcDir\n  }\n\n  if (fs.existsSync(distDir)) {\n    return distDir\n  }\n\n  if (fs.existsSync(relativeMigrations)) {\n    return relativeMigrations\n  }\n\n  return srcDir\n}\n"],"names":["fs","mongoose","path","createDatabaseAdapter","defaultBeginTransaction","connect","count","countGlobalVersions","countVersions","create","createGlobal","createGlobalVersion","createMigration","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","findDistinct","findGlobal","findGlobalVersions","findOne","findVersions","init","migrateFresh","queryDrafts","beginTransaction","commitTransaction","rollbackTransaction","updateGlobal","updateGlobalVersion","updateJobs","updateMany","updateOne","updateVersion","upsert","mongooseAdapter","allowAdditionalKeys","allowIDOnCreate","autoPluralization","collectionsSchemaOptions","connectOptions","disableFallbackSort","disableIndexHints","ensureIndexes","migrationDir","migrationDirArg","mongoMemoryServer","prodMigrations","transactionOptions","url","useAlternativeDropDatabase","useBigIntForNumberIDs","useJoinAggregations","usePipelineInSortLookup","adapter","payload","findMigrationDir","set","name","collections","connection","undefined","globals","sessions","versions","defaultIDType","packageName","compatibilityOptions","cwd","process","srcDir","resolve","distDir","relativeMigrations","existsSync"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollationOptions, TransactionOptions } from 'mongodb'\nimport type { MongoMemoryReplSet } from 'mongodb-memory-server'\nimport type {\n  ClientSession,\n  Connection,\n  ConnectOptions,\n  QueryOptions,\n  SchemaOptions,\n} from 'mongoose'\nimport type {\n  BaseDatabaseAdapter,\n  CollectionSlug,\n  DatabaseAdapterObj,\n  JsonObject,\n  Migration,\n  Payload,\n  TypeWithVersion,\n  UpdateGlobalArgs,\n  UpdateGlobalVersionArgs,\n  UpdateOneArgs,\n  UpdateVersionArgs,\n} from 'payload'\n\nimport mongoose from 'mongoose'\nimport { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'\n\nimport type { CollectionModel, GlobalModel, MigrateDownArgs, MigrateUpArgs } from './types.js'\n\nimport { connect } from './connect.js'\nimport { count } from './count.js'\nimport { countGlobalVersions } from './countGlobalVersions.js'\nimport { countVersions } from './countVersions.js'\nimport { create } from './create.js'\nimport { createGlobal } from './createGlobal.js'\nimport { createGlobalVersion } from './createGlobalVersion.js'\nimport { createMigration } from './createMigration.js'\nimport { createVersion } from './createVersion.js'\nimport { deleteMany } from './deleteMany.js'\nimport { deleteOne } from './deleteOne.js'\nimport { deleteVersions } from './deleteVersions.js'\nimport { destroy } from './destroy.js'\nimport { find } from './find.js'\nimport { findDistinct } from './findDistinct.js'\nimport { findGlobal } from './findGlobal.js'\nimport { findGlobalVersions } from './findGlobalVersions.js'\nimport { findOne } from './findOne.js'\nimport { findVersions } from './findVersions.js'\nimport { init } from './init.js'\nimport { migrateFresh } from './migrateFresh.js'\nimport { queryDrafts } from './queryDrafts.js'\nimport { beginTransaction } from './transactions/beginTransaction.js'\nimport { commitTransaction } from './transactions/commitTransaction.js'\nimport { rollbackTransaction } from './transactions/rollbackTransaction.js'\nimport { updateGlobal } from './updateGlobal.js'\nimport { updateGlobalVersion } from './updateGlobalVersion.js'\nimport { updateJobs } from './updateJobs.js'\nimport { updateMany } from './updateMany.js'\nimport { updateOne } from './updateOne.js'\nimport { updateVersion } from './updateVersion.js'\nimport { upsert } from './upsert.js'\n\nexport type { MigrateDownArgs, MigrateUpArgs } from './types.js'\n\nexport interface Args {\n  /**\n   * By default, Payload strips all additional keys from MongoDB data that don't exist\n   * in the Payload schema. If you have some data that you want to include to the result\n   * but it doesn't exist in Payload, you can enable this flag\n   * @default false\n   */\n  allowAdditionalKeys?: boolean\n  /**\n   * Enable this flag if you want to thread your own ID to create operation data, for example:\n   * ```ts\n   * import { Types } from 'mongoose'\n   *\n   * const id = new Types.ObjectId().toHexString()\n   * const doc = await payload.create({ collection: 'posts', data: {id, title: \"my title\"}})\n   * assertEq(doc.id, id)\n   * ```\n   */\n  allowIDOnCreate?: boolean\n  /** Set to false to disable auto-pluralization of collection names, Defaults to true */\n  autoPluralization?: boolean\n\n  /**\n   * If enabled, collation allows for language-specific rules for string comparison.\n   * This configuration can include the following options:\n   *\n   * - `strength` (number): Comparison level (1: Primary, 2: Secondary, 3: Tertiary (default), 4: Quaternary, 5: Identical)\n   * - `caseLevel` (boolean): Include case comparison at strength level 1 or 2.\n   * - `caseFirst` (string): Sort order of case differences during tertiary level comparisons (\"upper\", \"lower\", \"off\").\n   * - `numericOrdering` (boolean): Compare numeric strings as numbers.\n   * - `alternate` (string): Consider whitespace and punctuation as base characters (\"non-ignorable\", \"shifted\").\n   * - `maxVariable` (string): Characters considered ignorable when `alternate` is \"shifted\" (\"punct\", \"space\").\n   * - `backwards` (boolean): Sort strings with diacritics from back of the string.\n   * - `normalization` (boolean): Check if text requires normalization and perform normalization.\n   *\n   * Available on MongoDB version 3.4 and up.\n   * The locale that gets passed is your current project's locale but defaults to \"en\".\n   *\n   * Example:\n   * {\n   *   strength: 3\n   * }\n   *\n   * Defaults to disabled.\n   */\n  collation?: Omit<CollationOptions, 'locale'>\n\n  collectionsSchemaOptions?: Partial<Record<CollectionSlug, SchemaOptions>>\n  /** Extra configuration options */\n  connectOptions?: {\n    /**\n     * Set false to disable $facet aggregation in non-supporting databases, Defaults to true\n     * @deprecated Payload doesn't use `$facet` anymore anywhere.\n     */\n    useFacet?: boolean\n  } & ConnectOptions\n  /**\n   * We add a secondary sort based on `createdAt` to ensure that results are always returned in the same order when sorting by a non-unique field.\n   * This is because MongoDB does not guarantee the order of results, however in very large datasets this could affect performance.\n   *\n   * Set to `true` to disable this behaviour.\n   */\n  disableFallbackSort?: boolean\n  /** Set to true to disable hinting to MongoDB to use 'id' as index. This is currently done when counting documents for pagination. Disabling this optimization might fix some problems with AWS DocumentDB. Defaults to false */\n  disableIndexHints?: boolean\n  /**\n   * Set to `true` to ensure that indexes are ready before completing connection.\n   * NOTE: not recommended for production. This can slow down the initialization of Payload.\n   */\n  ensureIndexes?: boolean\n  migrationDir?: string\n  /**\n   * typed as any to avoid dependency\n   */\n  mongoMemoryServer?: MongoMemoryReplSet\n  prodMigrations?: Migration[]\n\n  transactionOptions?: false | TransactionOptions\n\n  /** The URL to connect to MongoDB or false to start payload and prevent connecting */\n  url: false | string\n\n  /**\n   * Set to `true` to use an alternative `dropDatabase` implementation that calls `collection.deleteMany({})` on every collection instead of sending a raw `dropDatabase` command.\n   * Payload only uses `dropDatabase` for testing purposes.\n   * @default false\n   */\n  useAlternativeDropDatabase?: boolean\n  /**\n   * Set to `true` to use `BigInt` for custom ID fields of type `'number'`.\n   * Useful for databases that don't support `double` or `int32` IDs.\n   * @default false\n   */\n  useBigIntForNumberIDs?: boolean\n  /**\n   * Set to `false` to disable join aggregations (which use correlated subqueries) and instead populate join fields via multiple `find` queries.\n   * @default true\n   */\n  useJoinAggregations?: boolean\n  /**\n   * Set to `false` to disable the use of `pipeline` in the `$lookup` aggregation in sorting.\n   * @default true\n   */\n  usePipelineInSortLookup?: boolean\n}\n\nexport type MongooseAdapter = {\n  collections: {\n    [slug: string]: CollectionModel\n  }\n  connection: Connection\n  ensureIndexes: boolean\n  globals: GlobalModel\n  mongoMemoryServer: MongoMemoryReplSet\n  prodMigrations?: {\n    down: (args: MigrateDownArgs) => Promise<void>\n    name: string\n    up: (args: MigrateUpArgs) => Promise<void>\n  }[]\n  sessions: Record<number | string, ClientSession>\n  useAlternativeDropDatabase: boolean\n  useBigIntForNumberIDs: boolean\n  useJoinAggregations: boolean\n  usePipelineInSortLookup: boolean\n  versions: {\n    [slug: string]: CollectionModel\n  }\n} & Args &\n  BaseDatabaseAdapter\n\ndeclare module 'payload' {\n  export interface DatabaseAdapter\n    extends Omit<BaseDatabaseAdapter, 'sessions'>,\n      Omit<Args, 'migrationDir'> {\n    collections: {\n      [slug: string]: CollectionModel\n    }\n    connection: Connection\n    ensureIndexes: boolean\n    globals: GlobalModel\n    mongoMemoryServer: MongoMemoryReplSet\n    prodMigrations?: {\n      down: (args: MigrateDownArgs) => Promise<void>\n      name: string\n      up: (args: MigrateUpArgs) => Promise<void>\n    }[]\n    sessions: Record<number | string, ClientSession>\n    transactionOptions: TransactionOptions\n    updateGlobal: <T extends Record<string, unknown>>(\n      args: { options?: QueryOptions } & UpdateGlobalArgs<T>,\n    ) => Promise<T>\n    updateGlobalVersion: <T extends JsonObject = JsonObject>(\n      args: { options?: QueryOptions } & UpdateGlobalVersionArgs<T>,\n    ) => Promise<TypeWithVersion<T>>\n\n    updateOne: (args: { options?: QueryOptions } & UpdateOneArgs) => Promise<Document>\n    updateVersion: <T extends JsonObject = JsonObject>(\n      args: { options?: QueryOptions } & UpdateVersionArgs<T>,\n    ) => Promise<TypeWithVersion<T>>\n    useAlternativeDropDatabase: boolean\n    useBigIntForNumberIDs: boolean\n    useJoinAggregations: boolean\n    usePipelineInSortLookup: boolean\n    versions: {\n      [slug: string]: CollectionModel\n    }\n  }\n}\n\nexport function mongooseAdapter({\n  allowAdditionalKeys = false,\n  allowIDOnCreate = false,\n  autoPluralization = true,\n  collectionsSchemaOptions = {},\n  connectOptions,\n  disableFallbackSort = false,\n  disableIndexHints = false,\n  ensureIndexes = false,\n  migrationDir: migrationDirArg,\n  mongoMemoryServer,\n  prodMigrations,\n  transactionOptions = {},\n  url,\n  useAlternativeDropDatabase = false,\n  useBigIntForNumberIDs = false,\n  useJoinAggregations = true,\n  usePipelineInSortLookup = true,\n}: Args): DatabaseAdapterObj {\n  function adapter({ payload }: { payload: Payload }) {\n    const migrationDir = findMigrationDir(migrationDirArg)\n    mongoose.set('strictQuery', false)\n\n    return createDatabaseAdapter<MongooseAdapter>({\n      name: 'mongoose',\n\n      // Mongoose-specific\n      autoPluralization,\n      collections: {},\n      // @ts-expect-error initialize without a connection\n      connection: undefined,\n      connectOptions: connectOptions || {},\n      disableIndexHints,\n      ensureIndexes,\n      // @ts-expect-error don't have globals model yet\n      globals: undefined,\n      // @ts-expect-error Should not be required\n      mongoMemoryServer,\n      sessions: {},\n      transactionOptions: transactionOptions === false ? undefined : transactionOptions,\n      updateJobs,\n      updateMany,\n      url,\n      versions: {},\n      // DatabaseAdapter\n      allowAdditionalKeys,\n      allowIDOnCreate,\n      beginTransaction: transactionOptions === false ? defaultBeginTransaction() : beginTransaction,\n      collectionsSchemaOptions,\n      commitTransaction,\n      connect,\n      count,\n      countGlobalVersions,\n      countVersions,\n      create,\n      createGlobal,\n      createGlobalVersion,\n      createMigration,\n      createVersion,\n      defaultIDType: 'text',\n      deleteMany,\n      deleteOne,\n      deleteVersions,\n      destroy,\n      disableFallbackSort,\n      find,\n      findDistinct,\n      findGlobal,\n      findGlobalVersions,\n      findOne,\n      findVersions,\n      init,\n      migrateFresh,\n      migrationDir,\n      packageName: '@payloadcms/db-mongodb',\n      payload,\n      prodMigrations,\n      queryDrafts,\n      rollbackTransaction,\n      updateGlobal,\n      updateGlobalVersion,\n      updateOne,\n      updateVersion,\n      upsert,\n      useAlternativeDropDatabase,\n      useBigIntForNumberIDs,\n      useJoinAggregations,\n      usePipelineInSortLookup,\n    })\n  }\n\n  return {\n    name: 'mongoose',\n    allowIDOnCreate,\n    defaultIDType: 'text',\n    init: adapter,\n  }\n}\n\nexport { compatibilityOptions } from './utilities/compatibilityOptions.js'\n"],"names":["mongoose","createDatabaseAdapter","defaultBeginTransaction","findMigrationDir","connect","count","countGlobalVersions","countVersions","create","createGlobal","createGlobalVersion","createMigration","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","findDistinct","findGlobal","findGlobalVersions","findOne","findVersions","init","migrateFresh","queryDrafts","beginTransaction","commitTransaction","rollbackTransaction","updateGlobal","updateGlobalVersion","updateJobs","updateMany","updateOne","updateVersion","upsert","mongooseAdapter","allowAdditionalKeys","allowIDOnCreate","autoPluralization","collectionsSchemaOptions","connectOptions","disableFallbackSort","disableIndexHints","ensureIndexes","migrationDir","migrationDirArg","mongoMemoryServer","prodMigrations","transactionOptions","url","useAlternativeDropDatabase","useBigIntForNumberIDs","useJoinAggregations","usePipelineInSortLookup","adapter","payload","set","name","collections","connection","undefined","globals","sessions","versions","defaultIDType","packageName","compatibilityOptions"],"mappings":"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"}
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import type { FlattenedField, Payload } from 'payload';
         
     | 
| 
      
 1 
     | 
    
         
            +
            import type { FlattenedField, Operator, Payload } from 'payload';
         
     | 
| 
       2 
2 
     | 
    
         
             
            type SearchParam = {
         
     | 
| 
       3 
3 
     | 
    
         
             
                path?: string;
         
     | 
| 
       4 
4 
     | 
    
         
             
                rawQuery?: unknown;
         
     | 
| 
         @@ -13,7 +13,7 @@ export declare function buildSearchParam({ collectionSlug, fields, globalSlug, i 
     | 
|
| 
       13 
13 
     | 
    
         
             
                globalSlug?: string;
         
     | 
| 
       14 
14 
     | 
    
         
             
                incomingPath: string;
         
     | 
| 
       15 
15 
     | 
    
         
             
                locale?: string;
         
     | 
| 
       16 
     | 
    
         
            -
                operator:  
     | 
| 
      
 16 
     | 
    
         
            +
                operator: Operator;
         
     | 
| 
       17 
17 
     | 
    
         
             
                parentIsLocalized: boolean;
         
     | 
| 
       18 
18 
     | 
    
         
             
                payload: Payload;
         
     | 
| 
       19 
19 
     | 
    
         
             
                val: unknown;
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAe,OAAO,EAAE,MAAM,SAAS,CAAA;AAc7E,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,cAAc,EACd,MAAM,EACN,UAAU,EACV,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,GAAG,GACJ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;CACb,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA0TnC"}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { FilterQuery } from 'mongoose'\nimport type { FlattenedField, Operator, PathToQuery, Payload } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { APIError, getFieldByPath, getLocalizedPaths } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { OperatorMapKey } from './operatorMap.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { isObjectID } from '../utilities/isObjectID.js'\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n  path?: string\n  rawQuery?: unknown\n  value?: unknown\n}\n\nconst subQueryOptions = {\n  lean: true,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n  collectionSlug,\n  fields,\n  globalSlug,\n  incomingPath,\n  locale,\n  operator,\n  parentIsLocalized,\n  payload,\n  val,\n}: {\n  collectionSlug?: string\n  fields: FlattenedField[]\n  globalSlug?: string\n  incomingPath: string\n  locale?: string\n  operator: string\n  parentIsLocalized: boolean\n  payload: Payload\n  val: unknown\n}): Promise<SearchParam | undefined> {\n  // Replace GraphQL nested field double underscore formatting\n  let sanitizedPath = incomingPath.replace(/__/g, '.')\n  if (sanitizedPath === 'id') {\n    sanitizedPath = '_id'\n  }\n\n  let paths: PathToQuery[] = []\n\n  let hasCustomID = false\n\n  if (sanitizedPath === '_id') {\n    const customIDFieldType = collectionSlug\n      ? payload.collections[collectionSlug]?.customIDType\n      : undefined\n\n    let idFieldType: 'number' | 'text' = 'text'\n\n    if (customIDFieldType) {\n      idFieldType = customIDFieldType\n      hasCustomID = true\n    }\n\n    paths.push({\n      collectionSlug,\n      complete: true,\n      field: {\n        name: 'id',\n        type: idFieldType,\n      } as FlattenedField,\n      parentIsLocalized: parentIsLocalized ?? false,\n      path: '_id',\n    })\n  } else {\n    paths = getLocalizedPaths({\n      collectionSlug,\n      fields,\n      globalSlug,\n      incomingPath: sanitizedPath,\n      locale,\n      parentIsLocalized,\n      payload,\n    })\n  }\n\n  if (!paths[0]) {\n    return undefined\n  }\n\n  const [{ field, path }] = paths\n  if (path) {\n    const sanitizedQueryValue = sanitizeQueryValue({\n      field,\n      hasCustomID,\n      locale,\n      operator,\n      parentIsLocalized,\n      path,\n      payload,\n      val,\n    })\n\n    if (!sanitizedQueryValue) {\n      return undefined\n    }\n\n    const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n    if (rawQuery && paths.length === 1) {\n      return { value: rawQuery }\n    }\n\n    if (!formattedOperator) {\n      return undefined\n    }\n\n    // If there are multiple collections to search through,\n    // Recursively build up a list of query constraints\n    if (paths.length > 1) {\n      // Remove top collection and reverse array\n      // to work backwards from top\n      const pathsToQuery = paths.slice(1).reverse()\n\n      let relationshipQuery: SearchParam = {\n        value: {},\n      }\n\n      for (const [i, { collectionSlug, path: subPath }] of pathsToQuery.entries()) {\n        if (!collectionSlug) {\n          throw new APIError(`Collection with the slug ${collectionSlug} was not found.`)\n        }\n\n        const { collectionConfig, Model: SubModel } = getCollection({\n          adapter: payload.db as MongooseAdapter,\n          collectionSlug,\n        })\n\n        if (i === 0) {\n          const subQuery = await SubModel.buildQuery({\n            locale,\n            payload,\n            where: {\n              [subPath]: {\n                [formattedOperator]: val,\n              },\n            },\n          })\n\n          const field = paths[0].field\n\n          const select: Record<string, boolean> = {\n            _id: true,\n          }\n\n          let joinPath: null | string = null\n\n          if (field.type === 'join') {\n            const relationshipField = getFieldByPath({\n              fields: collectionConfig.flattenedFields,\n              path: field.on,\n            })\n            if (!relationshipField) {\n              throw new APIError('Relationship field was not found')\n            }\n\n            let path = relationshipField.localizedPath\n            if (relationshipField.pathHasLocalized && payload.config.localization) {\n              path = path.replace('<locale>', locale || payload.config.localization.defaultLocale)\n            }\n            select[path] = true\n\n            joinPath = path\n          }\n\n          if (joinPath) {\n            select[joinPath] = true\n          }\n\n          const result = await SubModel.find(subQuery).lean().select(select)\n\n          const $in: unknown[] = []\n\n          result.forEach((doc: any) => {\n            if (joinPath) {\n              let ref = doc\n\n              for (const segment of joinPath.split('.')) {\n                if (typeof ref === 'object' && ref) {\n                  ref = ref[segment]\n                }\n              }\n\n              if (Array.isArray(ref)) {\n                for (const item of ref) {\n                  if (isObjectID(item)) {\n                    $in.push(item)\n                  }\n                }\n              } else if (isObjectID(ref)) {\n                $in.push(ref)\n              }\n            } else {\n              const stringID = doc._id.toString()\n              $in.push(stringID)\n\n              if (Types.ObjectId.isValid(stringID)) {\n                $in.push(doc._id)\n              }\n            }\n          })\n\n          if (pathsToQuery.length === 1) {\n            return {\n              path: joinPath ? '_id' : path,\n              value: { $in },\n            }\n          }\n\n          const nextSubPath = pathsToQuery[i + 1]?.path\n\n          if (nextSubPath) {\n            relationshipQuery = { value: { [nextSubPath]: $in } }\n          }\n\n          continue\n        }\n\n        const subQuery = relationshipQuery.value as FilterQuery<any>\n        const result = await SubModel.find(subQuery, subQueryOptions)\n\n        const $in = result.map((doc) => doc._id)\n\n        // If it is the last recursion\n        // then pass through the search param\n        if (i + 1 === pathsToQuery.length) {\n          relationshipQuery = {\n            path,\n            value: { $in },\n          }\n        } else {\n          const nextSubPath = pathsToQuery[i + 1]?.path\n          if (nextSubPath) {\n            relationshipQuery = {\n              value: {\n                [nextSubPath]: { $in },\n              },\n            }\n          }\n        }\n      }\n\n      return relationshipQuery\n    }\n\n    if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n      const operatorKey = operatorMap[formattedOperator as OperatorMapKey]\n\n      if (field.type === 'relationship' || field.type === 'upload') {\n        let hasNumberIDRelation\n        let multiIDCondition = '$or'\n        if (operatorKey === '$ne') {\n          multiIDCondition = '$and'\n        }\n\n        const result = {\n          value: {\n            [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n          },\n        }\n\n        if (typeof formattedValue === 'string') {\n          if (Types.ObjectId.isValid(formattedValue)) {\n            result.value[multiIDCondition]?.push({\n              [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n            })\n          } else {\n            ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n              (relationTo) => {\n                const isRelatedToCustomNumberID =\n                  payload.collections[relationTo]?.customIDType === 'number'\n\n                if (isRelatedToCustomNumberID) {\n                  hasNumberIDRelation = true\n                }\n              },\n            )\n\n            if (hasNumberIDRelation) {\n              result.value[multiIDCondition]?.push({\n                [path]: { [operatorKey]: parseFloat(formattedValue) },\n              })\n            }\n          }\n        }\n\n        const length = result.value[multiIDCondition]?.length\n\n        if (typeof length === 'number' && length > 1) {\n          return result\n        }\n      }\n\n      if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n        const words = formattedValue.split(' ')\n\n        const result = {\n          value: {\n            $and: words.map((word) => ({\n              [path]: {\n                $options: 'i',\n                $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n              },\n            })),\n          },\n        }\n\n        return result\n      }\n\n      if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {\n        const words = formattedValue.split(' ')\n\n        const result = {\n          value: {\n            $and: words.map((word) => ({\n              [path]: {\n                $not: {\n                  $options: 'i',\n                  $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n                },\n              },\n            })),\n          },\n        }\n\n        return result\n      }\n\n      // Some operators like 'near' need to define a full query\n      // so if there is no operator key, just return the value\n      if (!operatorKey) {\n        return {\n          path,\n          value: formattedValue,\n        }\n      }\n\n      return {\n        path,\n        value: { [operatorKey]: formattedValue },\n      }\n    }\n  }\n  return undefined\n}\n"],"names":["Types","APIError","getFieldByPath","getLocalizedPaths","validOperatorSet","getCollection","isObjectID","operatorMap","sanitizeQueryValue","subQueryOptions","lean","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","undefined","idFieldType","push","complete","field","name","type","path","sanitizedQueryValue","formattedOperator","rawQuery","formattedValue","length","value","pathsToQuery","slice","reverse","relationshipQuery","i","subPath","entries","collectionConfig","Model","SubModel","adapter","db","subQuery","buildQuery","where","select","_id","joinPath","relationshipField","flattenedFields","on","localizedPath","pathHasLocalized","config","localization","defaultLocale","result","find","$in","forEach","doc","ref","segment","split","Array","isArray","item","stringID","toString","ObjectId","isValid","nextSubPath","map","has","operatorKey","hasNumberIDRelation","multiIDCondition","relationTo","isRelatedToCustomNumberID","parseFloat","words","$and","word","$options","$regex","$not"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { FilterQuery } from 'mongoose'\nimport type { FlattenedField, Operator, PathToQuery, Payload } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { APIError, getFieldByPath, getLocalizedPaths } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { OperatorMapKey } from './operatorMap.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { isObjectID } from '../utilities/isObjectID.js'\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n  path?: string\n  rawQuery?: unknown\n  value?: unknown\n}\n\nconst subQueryOptions = {\n  lean: true,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n  collectionSlug,\n  fields,\n  globalSlug,\n  incomingPath,\n  locale,\n  operator,\n  parentIsLocalized,\n  payload,\n  val,\n}: {\n  collectionSlug?: string\n  fields: FlattenedField[]\n  globalSlug?: string\n  incomingPath: string\n  locale?: string\n  operator: Operator\n  parentIsLocalized: boolean\n  payload: Payload\n  val: unknown\n}): Promise<SearchParam | undefined> {\n  // Replace GraphQL nested field double underscore formatting\n  let sanitizedPath = incomingPath.replace(/__/g, '.')\n  if (sanitizedPath === 'id') {\n    sanitizedPath = '_id'\n  }\n\n  let paths: PathToQuery[] = []\n\n  let hasCustomID = false\n\n  if (sanitizedPath === '_id') {\n    const customIDFieldType = collectionSlug\n      ? payload.collections[collectionSlug]?.customIDType\n      : undefined\n\n    let idFieldType: 'number' | 'text' = 'text'\n\n    if (customIDFieldType) {\n      idFieldType = customIDFieldType\n      hasCustomID = true\n    }\n\n    paths.push({\n      collectionSlug,\n      complete: true,\n      field: {\n        name: 'id',\n        type: idFieldType,\n      } as FlattenedField,\n      parentIsLocalized: parentIsLocalized ?? false,\n      path: '_id',\n    })\n  } else {\n    paths = getLocalizedPaths({\n      collectionSlug,\n      fields,\n      globalSlug,\n      incomingPath: sanitizedPath,\n      locale,\n      parentIsLocalized,\n      payload,\n    })\n  }\n\n  if (!paths[0]) {\n    return undefined\n  }\n\n  const [{ field, path }] = paths\n  if (path) {\n    const sanitizedQueryValue = sanitizeQueryValue({\n      field,\n      hasCustomID,\n      locale,\n      operator,\n      parentIsLocalized,\n      path,\n      payload,\n      val,\n    })\n\n    if (!sanitizedQueryValue) {\n      return undefined\n    }\n\n    const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n    if (rawQuery && paths.length === 1) {\n      return { value: rawQuery }\n    }\n\n    if (!formattedOperator) {\n      return undefined\n    }\n\n    // If there are multiple collections to search through,\n    // Recursively build up a list of query constraints\n    if (paths.length > 1) {\n      // Remove top collection and reverse array\n      // to work backwards from top\n      const pathsToQuery = paths.slice(1).reverse()\n\n      let relationshipQuery: SearchParam = {\n        value: {},\n      }\n\n      for (const [i, { collectionSlug, path: subPath }] of pathsToQuery.entries()) {\n        if (!collectionSlug) {\n          throw new APIError(`Collection with the slug ${collectionSlug} was not found.`)\n        }\n\n        const { collectionConfig, Model: SubModel } = getCollection({\n          adapter: payload.db as MongooseAdapter,\n          collectionSlug,\n        })\n\n        if (i === 0) {\n          const subQuery = await SubModel.buildQuery({\n            locale,\n            payload,\n            where: {\n              [subPath]: {\n                [formattedOperator]: val,\n              },\n            },\n          })\n\n          const field = paths[0].field\n\n          const select: Record<string, boolean> = {\n            _id: true,\n          }\n\n          let joinPath: null | string = null\n\n          if (field.type === 'join') {\n            const relationshipField = getFieldByPath({\n              fields: collectionConfig.flattenedFields,\n              path: field.on,\n            })\n            if (!relationshipField) {\n              throw new APIError('Relationship field was not found')\n            }\n\n            let path = relationshipField.localizedPath\n            if (relationshipField.pathHasLocalized && payload.config.localization) {\n              path = path.replace('<locale>', locale || payload.config.localization.defaultLocale)\n            }\n            select[path] = true\n\n            joinPath = path\n          }\n\n          if (joinPath) {\n            select[joinPath] = true\n          }\n\n          const result = await SubModel.find(subQuery).lean().select(select)\n\n          const $in: unknown[] = []\n\n          result.forEach((doc: any) => {\n            if (joinPath) {\n              let ref = doc\n\n              for (const segment of joinPath.split('.')) {\n                if (typeof ref === 'object' && ref) {\n                  ref = ref[segment]\n                }\n              }\n\n              if (Array.isArray(ref)) {\n                for (const item of ref) {\n                  if (isObjectID(item)) {\n                    $in.push(item)\n                  }\n                }\n              } else if (isObjectID(ref)) {\n                $in.push(ref)\n              }\n            } else {\n              const stringID = doc._id.toString()\n              $in.push(stringID)\n\n              if (Types.ObjectId.isValid(stringID)) {\n                $in.push(doc._id)\n              }\n            }\n          })\n\n          if (pathsToQuery.length === 1) {\n            return {\n              path: joinPath ? '_id' : path,\n              value: { $in },\n            }\n          }\n\n          const nextSubPath = pathsToQuery[i + 1]?.path\n\n          if (nextSubPath) {\n            relationshipQuery = { value: { [nextSubPath]: $in } }\n          }\n\n          continue\n        }\n\n        const subQuery = relationshipQuery.value as FilterQuery<any>\n        const result = await SubModel.find(subQuery, subQueryOptions)\n\n        const $in = result.map((doc) => doc._id)\n\n        // If it is the last recursion\n        // then pass through the search param\n        if (i + 1 === pathsToQuery.length) {\n          relationshipQuery = {\n            path,\n            value: { $in },\n          }\n        } else {\n          const nextSubPath = pathsToQuery[i + 1]?.path\n          if (nextSubPath) {\n            relationshipQuery = {\n              value: {\n                [nextSubPath]: { $in },\n              },\n            }\n          }\n        }\n      }\n\n      return relationshipQuery\n    }\n\n    if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n      const operatorKey = operatorMap[formattedOperator as OperatorMapKey]\n\n      if (field.type === 'relationship' || field.type === 'upload') {\n        let hasNumberIDRelation\n        let multiIDCondition = '$or'\n        if (operatorKey === '$ne') {\n          multiIDCondition = '$and'\n        }\n\n        const result = {\n          value: {\n            [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n          },\n        }\n\n        if (typeof formattedValue === 'string') {\n          if (Types.ObjectId.isValid(formattedValue)) {\n            result.value[multiIDCondition]?.push({\n              [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n            })\n          } else {\n            ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n              (relationTo) => {\n                const isRelatedToCustomNumberID =\n                  payload.collections[relationTo]?.customIDType === 'number'\n\n                if (isRelatedToCustomNumberID) {\n                  hasNumberIDRelation = true\n                }\n              },\n            )\n\n            if (hasNumberIDRelation) {\n              result.value[multiIDCondition]?.push({\n                [path]: { [operatorKey]: parseFloat(formattedValue) },\n              })\n            }\n          }\n        }\n\n        const length = result.value[multiIDCondition]?.length\n\n        if (typeof length === 'number' && length > 1) {\n          return result\n        }\n      }\n\n      if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n        const words = formattedValue.split(' ')\n\n        const result = {\n          value: {\n            $and: words.map((word) => ({\n              [path]: {\n                $options: 'i',\n                $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n              },\n            })),\n          },\n        }\n\n        return result\n      }\n\n      if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {\n        const words = formattedValue.split(' ')\n\n        const result = {\n          value: {\n            $and: words.map((word) => ({\n              [path]: {\n                $not: {\n                  $options: 'i',\n                  $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n                },\n              },\n            })),\n          },\n        }\n\n        return result\n      }\n\n      // Some operators like 'near' need to define a full query\n      // so if there is no operator key, just return the value\n      if (!operatorKey) {\n        return {\n          path,\n          value: formattedValue,\n        }\n      }\n\n      return {\n        path,\n        value: { [operatorKey]: formattedValue },\n      }\n    }\n  }\n  return undefined\n}\n"],"names":["Types","APIError","getFieldByPath","getLocalizedPaths","validOperatorSet","getCollection","isObjectID","operatorMap","sanitizeQueryValue","subQueryOptions","lean","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","undefined","idFieldType","push","complete","field","name","type","path","sanitizedQueryValue","formattedOperator","rawQuery","formattedValue","length","value","pathsToQuery","slice","reverse","relationshipQuery","i","subPath","entries","collectionConfig","Model","SubModel","adapter","db","subQuery","buildQuery","where","select","_id","joinPath","relationshipField","flattenedFields","on","localizedPath","pathHasLocalized","config","localization","defaultLocale","result","find","$in","forEach","doc","ref","segment","split","Array","isArray","item","stringID","toString","ObjectId","isValid","nextSubPath","map","has","operatorKey","hasNumberIDRelation","multiIDCondition","relationTo","isRelatedToCustomNumberID","parseFloat","words","$and","word","$options","$regex","$not"],"mappings":"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"}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { FilterQuery } from 'mongoose'\nimport type { FlattenedField, Operator, Payload, Where } from 'payload'\n\nimport { deepMergeWithCombinedArrays } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildSearchParam } from './buildSearchParams.js'\n\nexport async function parseParams({\n  collectionSlug,\n  fields,\n  globalSlug,\n  locale,\n  parentIsLocalized,\n  payload,\n  where,\n}: {\n  collectionSlug?: string\n  fields: FlattenedField[]\n  globalSlug?: string\n  locale?: string\n  parentIsLocalized: boolean\n  payload: Payload\n  where: Where\n}): Promise<Record<string, unknown>> {\n  let result = {} as FilterQuery<any>\n\n  if (typeof where === 'object') {\n    // We need to determine if the whereKey is an AND, OR, or a schema path\n    for (const relationOrPath of Object.keys(where)) {\n      const condition = where[relationOrPath]\n      let conditionOperator: '$and' | '$or' | null = null\n      if (relationOrPath.toLowerCase() === 'and') {\n        conditionOperator = '$and'\n      } else if (relationOrPath.toLowerCase() === 'or') {\n        conditionOperator = '$or'\n      }\n      if (Array.isArray(condition)) {\n        const builtConditions = await buildAndOrConditions({\n          collectionSlug,\n          fields,\n          globalSlug,\n          locale,\n          parentIsLocalized,\n          payload,\n          where: condition,\n        })\n        if (builtConditions.length > 0 && conditionOperator !== null) {\n          result[conditionOperator] = builtConditions\n        }\n      } else {\n        // It's a path - and there can be multiple comparisons on a single path.\n        // For example - title like 'test' and title not equal to 'tester'\n        // So we need to loop on keys again here to handle each operator independently\n        const pathOperators = where[relationOrPath]\n        if (typeof pathOperators === 'object') {\n          const validOperators = Object.keys(pathOperators).filter((operator) =>\n            validOperatorSet.has(operator as Operator),\n          )\n\n          for (const operator of validOperators) {\n            const searchParam = await buildSearchParam({\n              collectionSlug,\n              fields,\n              globalSlug,\n              incomingPath: relationOrPath,\n              locale,\n              operator,\n              parentIsLocalized,\n              payload,\n              val: (pathOperators as Record<string, Where>)[operator],\n            })\n\n            if (searchParam?.value && searchParam?.path) {\n              if (validOperators.length > 1) {\n                if (!result.$and) {\n                  result.$and = []\n                }\n                result.$and.push({\n                  [searchParam.path]: searchParam.value,\n                })\n              } else {\n                if (result[searchParam.path]) {\n                  if (!result.$and) {\n                    result.$and = []\n                  }\n\n                  result.$and.push({ [searchParam.path]: result[searchParam.path] })\n                  result.$and.push({\n                    [searchParam.path]: searchParam.value,\n                  })\n                  delete result[searchParam.path]\n                } else {\n                  result[searchParam.path] = searchParam.value\n                }\n              }\n            } else if (typeof searchParam?.value === 'object') {\n              result = deepMergeWithCombinedArrays(result, searchParam.value ?? {}, {\n                // dont clone Types.ObjectIDs\n                clone: false,\n              })\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return result\n}\n"],"names":["deepMergeWithCombinedArrays","validOperatorSet","buildAndOrConditions","buildSearchParam","parseParams","collectionSlug","fields","globalSlug","locale","parentIsLocalized","payload","where","result","relationOrPath","Object","keys","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","length","pathOperators","validOperators","filter","operator","has","searchParam","incomingPath","val","value","path","$and","push","clone"],"mappings":"AAGA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,SAASC,gBAAgB,QAAQ,iBAAgB;AAEjD,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,gBAAgB,QAAQ,yBAAwB;AAEzD,OAAO,eAAeC,YAAY,EAChCC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,KAAK,EASN;IACC,IAAIC,SAAS,CAAC;IAEd,IAAI,OAAOD,UAAU,UAAU;QAC7B,uEAAuE;QACvE,KAAK,MAAME,kBAAkBC,OAAOC,IAAI,CAACJ,OAAQ;YAC/C,MAAMK,YAAYL,KAAK,CAACE,eAAe;YACvC,IAAII,oBAA2C;YAC/C,IAAIJ,eAAeK,WAAW,OAAO,OAAO;gBAC1CD,oBAAoB;YACtB,OAAO,IAAIJ,eAAeK,WAAW,OAAO,MAAM;gBAChDD,oBAAoB;YACtB;YACA,IAAIE,MAAMC,OAAO,CAACJ,YAAY;gBAC5B,MAAMK,kBAAkB,MAAMnB,qBAAqB;oBACjDG;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC,OAAOK;gBACT;gBACA,IAAIK,gBAAgBC,MAAM,GAAG,KAAKL,sBAAsB,MAAM;oBAC5DL,MAAM,CAACK,kBAAkB,GAAGI;gBAC9B;YACF,OAAO;gBACL,wEAAwE;gBACxE,kEAAkE;gBAClE,8EAA8E;gBAC9E,MAAME,gBAAgBZ,KAAK,CAACE,eAAe;gBAC3C,IAAI,OAAOU,kBAAkB,UAAU;oBACrC,MAAMC, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { FilterQuery } from 'mongoose'\nimport type { FlattenedField, Operator, Payload, Where } from 'payload'\n\nimport { deepMergeWithCombinedArrays } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildSearchParam } from './buildSearchParams.js'\n\nexport async function parseParams({\n  collectionSlug,\n  fields,\n  globalSlug,\n  locale,\n  parentIsLocalized,\n  payload,\n  where,\n}: {\n  collectionSlug?: string\n  fields: FlattenedField[]\n  globalSlug?: string\n  locale?: string\n  parentIsLocalized: boolean\n  payload: Payload\n  where: Where\n}): Promise<Record<string, unknown>> {\n  let result = {} as FilterQuery<any>\n\n  if (typeof where === 'object') {\n    // We need to determine if the whereKey is an AND, OR, or a schema path\n    for (const relationOrPath of Object.keys(where)) {\n      const condition = where[relationOrPath]\n      let conditionOperator: '$and' | '$or' | null = null\n      if (relationOrPath.toLowerCase() === 'and') {\n        conditionOperator = '$and'\n      } else if (relationOrPath.toLowerCase() === 'or') {\n        conditionOperator = '$or'\n      }\n      if (Array.isArray(condition)) {\n        const builtConditions = await buildAndOrConditions({\n          collectionSlug,\n          fields,\n          globalSlug,\n          locale,\n          parentIsLocalized,\n          payload,\n          where: condition,\n        })\n        if (builtConditions.length > 0 && conditionOperator !== null) {\n          result[conditionOperator] = builtConditions\n        }\n      } else {\n        // It's a path - and there can be multiple comparisons on a single path.\n        // For example - title like 'test' and title not equal to 'tester'\n        // So we need to loop on keys again here to handle each operator independently\n        const pathOperators = where[relationOrPath]\n        if (typeof pathOperators === 'object') {\n          const validOperators: Operator[] = Object.keys(pathOperators).filter((operator) =>\n            validOperatorSet.has(operator as Operator),\n          ) as Operator[]\n\n          for (const operator of validOperators) {\n            const searchParam = await buildSearchParam({\n              collectionSlug,\n              fields,\n              globalSlug,\n              incomingPath: relationOrPath,\n              locale,\n              operator,\n              parentIsLocalized,\n              payload,\n              val: (pathOperators as Record<string, Where>)[operator],\n            })\n\n            if (searchParam?.value && searchParam?.path) {\n              if (validOperators.length > 1) {\n                if (!result.$and) {\n                  result.$and = []\n                }\n                result.$and.push({\n                  [searchParam.path]: searchParam.value,\n                })\n              } else {\n                if (result[searchParam.path]) {\n                  if (!result.$and) {\n                    result.$and = []\n                  }\n\n                  result.$and.push({ [searchParam.path]: result[searchParam.path] })\n                  result.$and.push({\n                    [searchParam.path]: searchParam.value,\n                  })\n                  delete result[searchParam.path]\n                } else {\n                  result[searchParam.path] = searchParam.value\n                }\n              }\n            } else if (typeof searchParam?.value === 'object') {\n              result = deepMergeWithCombinedArrays(result, searchParam.value ?? {}, {\n                // dont clone Types.ObjectIDs\n                clone: false,\n              })\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return result\n}\n"],"names":["deepMergeWithCombinedArrays","validOperatorSet","buildAndOrConditions","buildSearchParam","parseParams","collectionSlug","fields","globalSlug","locale","parentIsLocalized","payload","where","result","relationOrPath","Object","keys","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","length","pathOperators","validOperators","filter","operator","has","searchParam","incomingPath","val","value","path","$and","push","clone"],"mappings":"AAGA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,SAASC,gBAAgB,QAAQ,iBAAgB;AAEjD,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,gBAAgB,QAAQ,yBAAwB;AAEzD,OAAO,eAAeC,YAAY,EAChCC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,KAAK,EASN;IACC,IAAIC,SAAS,CAAC;IAEd,IAAI,OAAOD,UAAU,UAAU;QAC7B,uEAAuE;QACvE,KAAK,MAAME,kBAAkBC,OAAOC,IAAI,CAACJ,OAAQ;YAC/C,MAAMK,YAAYL,KAAK,CAACE,eAAe;YACvC,IAAII,oBAA2C;YAC/C,IAAIJ,eAAeK,WAAW,OAAO,OAAO;gBAC1CD,oBAAoB;YACtB,OAAO,IAAIJ,eAAeK,WAAW,OAAO,MAAM;gBAChDD,oBAAoB;YACtB;YACA,IAAIE,MAAMC,OAAO,CAACJ,YAAY;gBAC5B,MAAMK,kBAAkB,MAAMnB,qBAAqB;oBACjDG;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC,OAAOK;gBACT;gBACA,IAAIK,gBAAgBC,MAAM,GAAG,KAAKL,sBAAsB,MAAM;oBAC5DL,MAAM,CAACK,kBAAkB,GAAGI;gBAC9B;YACF,OAAO;gBACL,wEAAwE;gBACxE,kEAAkE;gBAClE,8EAA8E;gBAC9E,MAAME,gBAAgBZ,KAAK,CAACE,eAAe;gBAC3C,IAAI,OAAOU,kBAAkB,UAAU;oBACrC,MAAMC,iBAA6BV,OAAOC,IAAI,CAACQ,eAAeE,MAAM,CAAC,CAACC,WACpEzB,iBAAiB0B,GAAG,CAACD;oBAGvB,KAAK,MAAMA,YAAYF,eAAgB;wBACrC,MAAMI,cAAc,MAAMzB,iBAAiB;4BACzCE;4BACAC;4BACAC;4BACAsB,cAAchB;4BACdL;4BACAkB;4BACAjB;4BACAC;4BACAoB,KAAK,AAACP,aAAuC,CAACG,SAAS;wBACzD;wBAEA,IAAIE,aAAaG,SAASH,aAAaI,MAAM;4BAC3C,IAAIR,eAAeF,MAAM,GAAG,GAAG;gCAC7B,IAAI,CAACV,OAAOqB,IAAI,EAAE;oCAChBrB,OAAOqB,IAAI,GAAG,EAAE;gCAClB;gCACArB,OAAOqB,IAAI,CAACC,IAAI,CAAC;oCACf,CAACN,YAAYI,IAAI,CAAC,EAAEJ,YAAYG,KAAK;gCACvC;4BACF,OAAO;gCACL,IAAInB,MAAM,CAACgB,YAAYI,IAAI,CAAC,EAAE;oCAC5B,IAAI,CAACpB,OAAOqB,IAAI,EAAE;wCAChBrB,OAAOqB,IAAI,GAAG,EAAE;oCAClB;oCAEArB,OAAOqB,IAAI,CAACC,IAAI,CAAC;wCAAE,CAACN,YAAYI,IAAI,CAAC,EAAEpB,MAAM,CAACgB,YAAYI,IAAI,CAAC;oCAAC;oCAChEpB,OAAOqB,IAAI,CAACC,IAAI,CAAC;wCACf,CAACN,YAAYI,IAAI,CAAC,EAAEJ,YAAYG,KAAK;oCACvC;oCACA,OAAOnB,MAAM,CAACgB,YAAYI,IAAI,CAAC;gCACjC,OAAO;oCACLpB,MAAM,CAACgB,YAAYI,IAAI,CAAC,GAAGJ,YAAYG,KAAK;gCAC9C;4BACF;wBACF,OAAO,IAAI,OAAOH,aAAaG,UAAU,UAAU;4BACjDnB,SAASZ,4BAA4BY,QAAQgB,YAAYG,KAAK,IAAI,CAAC,GAAG;gCACpE,6BAA6B;gCAC7BI,OAAO;4BACT;wBACF;oBACF;gBACF;YACF;QACF;IACF;IAEA,OAAOvB;AACT"}
         
     | 
| 
         @@ -1,9 +1,9 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import type { FlattenedField, Payload } from 'payload';
         
     | 
| 
      
 1 
     | 
    
         
            +
            import type { FlattenedField, Operator, Payload } from 'payload';
         
     | 
| 
       2 
2 
     | 
    
         
             
            type SanitizeQueryValueArgs = {
         
     | 
| 
       3 
3 
     | 
    
         
             
                field: FlattenedField;
         
     | 
| 
       4 
4 
     | 
    
         
             
                hasCustomID: boolean;
         
     | 
| 
       5 
5 
     | 
    
         
             
                locale?: string;
         
     | 
| 
       6 
     | 
    
         
            -
                operator:  
     | 
| 
      
 6 
     | 
    
         
            +
                operator: Operator;
         
     | 
| 
       7 
7 
     | 
    
         
             
                parentIsLocalized: boolean;
         
     | 
| 
       8 
8 
     | 
    
         
             
                path: string;
         
     | 
| 
       9 
9 
     | 
    
         
             
                payload: Payload;
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACd,OAAO,EAER,MAAM,SAAS,CAAA;AAMhB,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACd,QAAQ,EACR,OAAO,EAER,MAAM,SAAS,CAAA;AAMhB,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAoED,eAAO,MAAM,kBAAkB,qFAS5B,sBAAsB,KACrB;IACE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GACD,SAiWH,CAAA"}
         
     | 
| 
         @@ -147,6 +147,7 @@ export const sanitizeQueryValue = ({ field, hasCustomID, locale, operator, paren 
     | 
|
| 
       147 
147 
     | 
    
         
             
                                if (!hasCustomID) {
         
     | 
| 
       148 
148 
     | 
    
         
             
                                    if (Types.ObjectId.isValid(inVal)) {
         
     | 
| 
       149 
149 
     | 
    
         
             
                                        formattedValues.push(new Types.ObjectId(inVal));
         
     | 
| 
      
 150 
     | 
    
         
            +
                                        return formattedValues;
         
     | 
| 
       150 
151 
     | 
    
         
             
                                    }
         
     | 
| 
       151 
152 
     | 
    
         
             
                                }
         
     | 
| 
       152 
153 
     | 
    
         
             
                                if (field.type === 'number') {
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type {\n  FlattenedBlock,\n  FlattenedBlocksField,\n  FlattenedField,\n  Payload,\n  RelationshipField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated } from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\ntype SanitizeQueryValueArgs = {\n  field: FlattenedField\n  hasCustomID: boolean\n  locale?: string\n  operator: string\n  parentIsLocalized: boolean\n  path: string\n  payload: Payload\n  val: any\n}\n\nconst buildExistsQuery = (formattedValue: unknown, path: string, treatEmptyString = true) => {\n  if (formattedValue) {\n    return {\n      rawQuery: {\n        $and: [\n          { [path]: { $exists: true } },\n          { [path]: { $ne: null } },\n          ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n        ],\n      },\n    }\n  } else {\n    return {\n      rawQuery: {\n        $or: [\n          { [path]: { $exists: false } },\n          { [path]: { $eq: null } },\n          ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n        ],\n      },\n    }\n  }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n  field,\n  payload,\n  segments,\n}: {\n  field: FlattenedBlock | FlattenedField\n  payload: Payload\n  segments: string[]\n}): FlattenedField | undefined => {\n  if ('blocks' in field || 'blockReferences' in field) {\n    const _field: FlattenedBlocksField = field as FlattenedBlocksField\n    for (const _block of _field.blockReferences ?? _field.blocks) {\n      const block: FlattenedBlock | undefined =\n        typeof _block === 'string' ? payload.blocks[_block] : _block\n      if (block) {\n        const field = getFieldFromSegments({ field: block, payload, segments })\n        if (field) {\n          return field\n        }\n      }\n    }\n  }\n\n  if ('fields' in field) {\n    for (let i = 0; i < segments.length; i++) {\n      const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n      if (!foundField) {\n        break\n      }\n\n      if (foundField && segments.length - 1 === i) {\n        return foundField\n      }\n\n      segments.shift()\n      return getFieldFromSegments({ field: foundField, payload, segments })\n    }\n  }\n}\n\nexport const sanitizeQueryValue = ({\n  field,\n  hasCustomID,\n  locale,\n  operator,\n  parentIsLocalized,\n  path,\n  payload,\n  val,\n}: SanitizeQueryValueArgs):\n  | {\n      operator?: string\n      rawQuery?: unknown\n      val?: unknown\n    }\n  | undefined => {\n  let formattedValue = val\n  let formattedOperator = operator\n\n  if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n    const segments = path.split('.')\n    segments.shift()\n    const foundField = getFieldFromSegments({ field, payload, segments })\n\n    if (foundField) {\n      field = foundField\n    }\n  }\n\n  // Disregard invalid _ids\n  if (path === '_id') {\n    if (typeof val === 'string' && val.split(',').length === 1) {\n      if (!hasCustomID) {\n        const isValid = Types.ObjectId.isValid(val)\n\n        if (!isValid) {\n          return { operator: formattedOperator, val: undefined }\n        } else {\n          if (['in', 'not_in'].includes(operator)) {\n            formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n              (id) => new Types.ObjectId(id),\n            )\n          } else {\n            formattedValue = new Types.ObjectId(val)\n          }\n        }\n      }\n\n      if (field.type === 'number') {\n        const parsedNumber = parseFloat(val)\n\n        if (Number.isNaN(parsedNumber)) {\n          return { operator: formattedOperator, val: undefined }\n        }\n      }\n    } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n      if (typeof val === 'string') {\n        formattedValue = createArrayFromCommaDelineated(val)\n      }\n\n      if (Array.isArray(formattedValue)) {\n        formattedValue = formattedValue.reduce<unknown[]>((formattedValues, inVal) => {\n          if (!hasCustomID) {\n            if (Types.ObjectId.isValid(inVal)) {\n              formattedValues.push(new Types.ObjectId(inVal))\n            }\n          }\n\n          if (field.type === 'number') {\n            const parsedNumber = parseFloat(inVal)\n            if (!Number.isNaN(parsedNumber)) {\n              formattedValues.push(parsedNumber)\n            }\n          } else {\n            formattedValues.push(inVal)\n          }\n\n          return formattedValues\n        }, [])\n      }\n    }\n  }\n\n  // Cast incoming values as proper searchable types\n  if (field.type === 'checkbox' && typeof val === 'string') {\n    if (val.toLowerCase() === 'true') {\n      formattedValue = true\n    }\n    if (val.toLowerCase() === 'false') {\n      formattedValue = false\n    }\n  }\n\n  if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n    formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n    if (field.type === 'number' && Array.isArray(formattedValue)) {\n      formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n    }\n  }\n\n  if (field.type === 'number') {\n    if (typeof formattedValue === 'string' && operator !== 'exists') {\n      formattedValue = Number(val)\n    }\n\n    if (operator === 'exists') {\n      formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n\n      return buildExistsQuery(formattedValue, path)\n    }\n  }\n\n  if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n    formattedValue = new Date(val)\n    if (Number.isNaN(Date.parse(formattedValue))) {\n      return undefined\n    }\n  }\n\n  if (['relationship', 'upload'].includes(field.type)) {\n    if (val === 'null') {\n      formattedValue = null\n    }\n\n    // Object equality requires the value to be the first key in the object that is being queried.\n    if (\n      operator === 'equals' &&\n      formattedValue &&\n      typeof formattedValue === 'object' &&\n      formattedValue.value &&\n      formattedValue.relationTo\n    ) {\n      const { value } = formattedValue\n      const isValid = Types.ObjectId.isValid(value)\n\n      if (isValid) {\n        formattedValue.value = new Types.ObjectId(value)\n      }\n\n      let localizedPath = path\n\n      if (\n        fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n        payload.config.localization &&\n        locale\n      ) {\n        localizedPath = `${path}.${locale}`\n      }\n\n      return {\n        rawQuery: {\n          $or: [\n            {\n              [localizedPath]: {\n                $eq: {\n                  // disable auto sort\n                  /* eslint-disable */\n                  value: formattedValue.value,\n                  relationTo: formattedValue.relationTo,\n                  /* eslint-enable */\n                },\n              },\n            },\n            {\n              [localizedPath]: {\n                $eq: {\n                  relationTo: formattedValue.relationTo,\n                  value: formattedValue.value,\n                },\n              },\n            },\n          ],\n        },\n      }\n    }\n\n    const relationTo = (field as RelationshipField).relationTo\n\n    if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n      formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n        if (!inVal) {\n          return formattedValues\n        }\n\n        if (typeof relationTo === 'string' && payload.collections[relationTo]?.customIDType) {\n          if (payload.collections[relationTo].customIDType === 'number') {\n            const parsedNumber = parseFloat(inVal)\n            if (!Number.isNaN(parsedNumber)) {\n              formattedValues.push(parsedNumber)\n              return formattedValues\n            }\n          }\n\n          formattedValues.push(inVal)\n          return formattedValues\n        }\n\n        if (\n          Array.isArray(relationTo) &&\n          relationTo.some((relationTo) => !!payload.collections[relationTo]?.customIDType)\n        ) {\n          if (Types.ObjectId.isValid(inVal.toString())) {\n            formattedValues.push(new Types.ObjectId(inVal))\n          } else {\n            formattedValues.push(inVal)\n          }\n          return formattedValues\n        }\n\n        if (Types.ObjectId.isValid(inVal.toString())) {\n          formattedValues.push(new Types.ObjectId(inVal))\n        }\n\n        return formattedValues\n      }, [])\n    }\n\n    if (\n      ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n      (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n    ) {\n      if (typeof relationTo === 'string') {\n        const customIDType = payload.collections[relationTo]?.customIDType\n\n        if (customIDType) {\n          if (customIDType === 'number') {\n            formattedValue = parseFloat(val)\n\n            if (Number.isNaN(formattedValue)) {\n              return { operator: formattedOperator, val: undefined }\n            }\n          }\n        } else {\n          if (!Types.ObjectId.isValid(formattedValue)) {\n            return { operator: formattedOperator, val: undefined }\n          }\n          formattedValue = new Types.ObjectId(formattedValue)\n        }\n      } else {\n        const hasCustomIDType = relationTo.some(\n          (relationTo) => !!payload.collections[relationTo]?.customIDType,\n        )\n\n        if (hasCustomIDType) {\n          if (typeof val === 'string') {\n            const formattedNumber = Number(val)\n            formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n            formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n            if (!Number.isNaN(formattedNumber)) {\n              formattedValue.push(formattedNumber)\n            }\n          }\n        } else {\n          if (!Types.ObjectId.isValid(formattedValue)) {\n            return { operator: formattedOperator, val: undefined }\n          }\n          formattedValue = new Types.ObjectId(formattedValue)\n        }\n      }\n    }\n\n    if (\n      operator === 'all' &&\n      Array.isArray(relationTo) &&\n      path.endsWith('.value') &&\n      Array.isArray(formattedValue)\n    ) {\n      formattedValue.forEach((v, i) => {\n        if (Types.ObjectId.isValid(v)) {\n          formattedValue[i] = new Types.ObjectId(v)\n        }\n      })\n    }\n  }\n\n  // Set up specific formatting necessary by operators\n\n  if (operator === 'near') {\n    let lng\n    let lat\n    let maxDistance\n    let minDistance\n\n    if (Array.isArray(formattedValue)) {\n      ;[lng, lat, maxDistance, minDistance] = formattedValue\n    }\n\n    if (typeof formattedValue === 'string') {\n      ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n    }\n\n    if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n      formattedValue = undefined\n    } else {\n      formattedValue = {\n        $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n      }\n\n      if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n        formattedValue.$maxDistance = parseFloat(maxDistance)\n      }\n\n      if (minDistance && !Number.isNaN(Number(minDistance))) {\n        formattedValue.$minDistance = parseFloat(minDistance)\n      }\n    }\n  }\n\n  if (operator === 'within' || operator === 'intersects') {\n    formattedValue = {\n      $geometry: formattedValue,\n    }\n  }\n\n  if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n    if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n      formattedValue = {\n        $options: 'i',\n        $regex: formattedValue.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n      }\n    }\n\n    if (operator === 'exists') {\n      formattedValue = formattedValue === 'true' || formattedValue === true\n\n      // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n      return buildExistsQuery(\n        formattedValue,\n        path,\n        !['checkbox', 'relationship', 'upload'].includes(field.type),\n      )\n    }\n  }\n\n  if (\n    (path === '_id' || path === 'parent') &&\n    operator === 'like' &&\n    formattedValue.length === 24 &&\n    !hasCustomID\n  ) {\n    formattedOperator = 'equals'\n  }\n\n  if (operator === 'exists') {\n    formattedValue = formattedValue === 'true' || formattedValue === true\n\n    // Clearable fields\n    if (['relationship', 'select', 'upload'].includes(field.type)) {\n      if (formattedValue) {\n        return {\n          rawQuery: {\n            $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n          },\n        }\n      } else {\n        return {\n          rawQuery: {\n            $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n          },\n        }\n      }\n    }\n  }\n\n  return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","fieldShouldBeLocalized","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","payload","segments","_field","_block","blockReferences","blocks","block","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","parentIsLocalized","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","config","localization","collections","customIDType","some","toString","endsWith","hasCustomIDType","formattedNumber","forEach","v","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","$options","$regex","replace"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type {\n  FlattenedBlock,\n  FlattenedBlocksField,\n  FlattenedField,\n  Operator,\n  Payload,\n  RelationshipField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated } from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\ntype SanitizeQueryValueArgs = {\n  field: FlattenedField\n  hasCustomID: boolean\n  locale?: string\n  operator: Operator\n  parentIsLocalized: boolean\n  path: string\n  payload: Payload\n  val: any\n}\n\nconst buildExistsQuery = (formattedValue: unknown, path: string, treatEmptyString = true) => {\n  if (formattedValue) {\n    return {\n      rawQuery: {\n        $and: [\n          { [path]: { $exists: true } },\n          { [path]: { $ne: null } },\n          ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n        ],\n      },\n    }\n  } else {\n    return {\n      rawQuery: {\n        $or: [\n          { [path]: { $exists: false } },\n          { [path]: { $eq: null } },\n          ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n        ],\n      },\n    }\n  }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n  field,\n  payload,\n  segments,\n}: {\n  field: FlattenedBlock | FlattenedField\n  payload: Payload\n  segments: string[]\n}): FlattenedField | undefined => {\n  if ('blocks' in field || 'blockReferences' in field) {\n    const _field: FlattenedBlocksField = field as FlattenedBlocksField\n    for (const _block of _field.blockReferences ?? _field.blocks) {\n      const block: FlattenedBlock | undefined =\n        typeof _block === 'string' ? payload.blocks[_block] : _block\n      if (block) {\n        const field = getFieldFromSegments({ field: block, payload, segments })\n        if (field) {\n          return field\n        }\n      }\n    }\n  }\n\n  if ('fields' in field) {\n    for (let i = 0; i < segments.length; i++) {\n      const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n      if (!foundField) {\n        break\n      }\n\n      if (foundField && segments.length - 1 === i) {\n        return foundField\n      }\n\n      segments.shift()\n      return getFieldFromSegments({ field: foundField, payload, segments })\n    }\n  }\n}\n\nexport const sanitizeQueryValue = ({\n  field,\n  hasCustomID,\n  locale,\n  operator,\n  parentIsLocalized,\n  path,\n  payload,\n  val,\n}: SanitizeQueryValueArgs):\n  | {\n      operator?: string\n      rawQuery?: unknown\n      val?: unknown\n    }\n  | undefined => {\n  let formattedValue = val\n  let formattedOperator = operator\n\n  if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n    const segments = path.split('.')\n    segments.shift()\n    const foundField = getFieldFromSegments({ field, payload, segments })\n\n    if (foundField) {\n      field = foundField\n    }\n  }\n\n  // Disregard invalid _ids\n  if (path === '_id') {\n    if (typeof val === 'string' && val.split(',').length === 1) {\n      if (!hasCustomID) {\n        const isValid = Types.ObjectId.isValid(val)\n\n        if (!isValid) {\n          return { operator: formattedOperator, val: undefined }\n        } else {\n          if (['in', 'not_in'].includes(operator)) {\n            formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n              (id) => new Types.ObjectId(id),\n            )\n          } else {\n            formattedValue = new Types.ObjectId(val)\n          }\n        }\n      }\n\n      if (field.type === 'number') {\n        const parsedNumber = parseFloat(val)\n\n        if (Number.isNaN(parsedNumber)) {\n          return { operator: formattedOperator, val: undefined }\n        }\n      }\n    } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n      if (typeof val === 'string') {\n        formattedValue = createArrayFromCommaDelineated(val)\n      }\n\n      if (Array.isArray(formattedValue)) {\n        formattedValue = formattedValue.reduce<unknown[]>((formattedValues, inVal) => {\n          if (!hasCustomID) {\n            if (Types.ObjectId.isValid(inVal)) {\n              formattedValues.push(new Types.ObjectId(inVal))\n\n              return formattedValues\n            }\n          }\n\n          if (field.type === 'number') {\n            const parsedNumber = parseFloat(inVal)\n            if (!Number.isNaN(parsedNumber)) {\n              formattedValues.push(parsedNumber)\n            }\n          } else {\n            formattedValues.push(inVal)\n          }\n\n          return formattedValues\n        }, [])\n      }\n    }\n  }\n\n  // Cast incoming values as proper searchable types\n  if (field.type === 'checkbox' && typeof val === 'string') {\n    if (val.toLowerCase() === 'true') {\n      formattedValue = true\n    }\n    if (val.toLowerCase() === 'false') {\n      formattedValue = false\n    }\n  }\n\n  if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n    formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n    if (field.type === 'number' && Array.isArray(formattedValue)) {\n      formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n    }\n  }\n\n  if (field.type === 'number') {\n    if (typeof formattedValue === 'string' && operator !== 'exists') {\n      formattedValue = Number(val)\n    }\n\n    if (operator === 'exists') {\n      formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n\n      return buildExistsQuery(formattedValue, path)\n    }\n  }\n\n  if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n    formattedValue = new Date(val)\n    if (Number.isNaN(Date.parse(formattedValue))) {\n      return undefined\n    }\n  }\n\n  if (['relationship', 'upload'].includes(field.type)) {\n    if (val === 'null') {\n      formattedValue = null\n    }\n\n    // Object equality requires the value to be the first key in the object that is being queried.\n    if (\n      operator === 'equals' &&\n      formattedValue &&\n      typeof formattedValue === 'object' &&\n      formattedValue.value &&\n      formattedValue.relationTo\n    ) {\n      const { value } = formattedValue\n      const isValid = Types.ObjectId.isValid(value)\n\n      if (isValid) {\n        formattedValue.value = new Types.ObjectId(value)\n      }\n\n      let localizedPath = path\n\n      if (\n        fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n        payload.config.localization &&\n        locale\n      ) {\n        localizedPath = `${path}.${locale}`\n      }\n\n      return {\n        rawQuery: {\n          $or: [\n            {\n              [localizedPath]: {\n                $eq: {\n                  // disable auto sort\n                  /* eslint-disable */\n                  value: formattedValue.value,\n                  relationTo: formattedValue.relationTo,\n                  /* eslint-enable */\n                },\n              },\n            },\n            {\n              [localizedPath]: {\n                $eq: {\n                  relationTo: formattedValue.relationTo,\n                  value: formattedValue.value,\n                },\n              },\n            },\n          ],\n        },\n      }\n    }\n\n    const relationTo = (field as RelationshipField).relationTo\n\n    if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n      formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n        if (!inVal) {\n          return formattedValues\n        }\n\n        if (typeof relationTo === 'string' && payload.collections[relationTo]?.customIDType) {\n          if (payload.collections[relationTo].customIDType === 'number') {\n            const parsedNumber = parseFloat(inVal)\n            if (!Number.isNaN(parsedNumber)) {\n              formattedValues.push(parsedNumber)\n              return formattedValues\n            }\n          }\n\n          formattedValues.push(inVal)\n          return formattedValues\n        }\n\n        if (\n          Array.isArray(relationTo) &&\n          relationTo.some((relationTo) => !!payload.collections[relationTo]?.customIDType)\n        ) {\n          if (Types.ObjectId.isValid(inVal.toString())) {\n            formattedValues.push(new Types.ObjectId(inVal))\n          } else {\n            formattedValues.push(inVal)\n          }\n          return formattedValues\n        }\n\n        if (Types.ObjectId.isValid(inVal.toString())) {\n          formattedValues.push(new Types.ObjectId(inVal))\n        }\n\n        return formattedValues\n      }, [])\n    }\n\n    if (\n      ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n      (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n    ) {\n      if (typeof relationTo === 'string') {\n        const customIDType = payload.collections[relationTo]?.customIDType\n\n        if (customIDType) {\n          if (customIDType === 'number') {\n            formattedValue = parseFloat(val)\n\n            if (Number.isNaN(formattedValue)) {\n              return { operator: formattedOperator, val: undefined }\n            }\n          }\n        } else {\n          if (!Types.ObjectId.isValid(formattedValue)) {\n            return { operator: formattedOperator, val: undefined }\n          }\n          formattedValue = new Types.ObjectId(formattedValue)\n        }\n      } else {\n        const hasCustomIDType = relationTo.some(\n          (relationTo) => !!payload.collections[relationTo]?.customIDType,\n        )\n\n        if (hasCustomIDType) {\n          if (typeof val === 'string') {\n            const formattedNumber = Number(val)\n            formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n            formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n            if (!Number.isNaN(formattedNumber)) {\n              formattedValue.push(formattedNumber)\n            }\n          }\n        } else {\n          if (!Types.ObjectId.isValid(formattedValue)) {\n            return { operator: formattedOperator, val: undefined }\n          }\n          formattedValue = new Types.ObjectId(formattedValue)\n        }\n      }\n    }\n\n    if (\n      operator === 'all' &&\n      Array.isArray(relationTo) &&\n      path.endsWith('.value') &&\n      Array.isArray(formattedValue)\n    ) {\n      formattedValue.forEach((v, i) => {\n        if (Types.ObjectId.isValid(v)) {\n          formattedValue[i] = new Types.ObjectId(v)\n        }\n      })\n    }\n  }\n\n  // Set up specific formatting necessary by operators\n\n  if (operator === 'near') {\n    let lng\n    let lat\n    let maxDistance\n    let minDistance\n\n    if (Array.isArray(formattedValue)) {\n      ;[lng, lat, maxDistance, minDistance] = formattedValue\n    }\n\n    if (typeof formattedValue === 'string') {\n      ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n    }\n\n    if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n      formattedValue = undefined\n    } else {\n      formattedValue = {\n        $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n      }\n\n      if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n        formattedValue.$maxDistance = parseFloat(maxDistance)\n      }\n\n      if (minDistance && !Number.isNaN(Number(minDistance))) {\n        formattedValue.$minDistance = parseFloat(minDistance)\n      }\n    }\n  }\n\n  if (operator === 'within' || operator === 'intersects') {\n    formattedValue = {\n      $geometry: formattedValue,\n    }\n  }\n\n  if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n    if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n      formattedValue = {\n        $options: 'i',\n        $regex: formattedValue.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n      }\n    }\n\n    if (operator === 'exists') {\n      formattedValue = formattedValue === 'true' || formattedValue === true\n\n      // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n      return buildExistsQuery(\n        formattedValue,\n        path,\n        !['checkbox', 'relationship', 'upload'].includes(field.type),\n      )\n    }\n  }\n\n  if (\n    (path === '_id' || path === 'parent') &&\n    operator === 'like' &&\n    formattedValue.length === 24 &&\n    !hasCustomID\n  ) {\n    formattedOperator = 'equals'\n  }\n\n  if (operator === 'exists') {\n    formattedValue = formattedValue === 'true' || formattedValue === true\n\n    // Clearable fields\n    if (['relationship', 'select', 'upload'].includes(field.type)) {\n      if (formattedValue) {\n        return {\n          rawQuery: {\n            $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n          },\n        }\n      } else {\n        return {\n          rawQuery: {\n            $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n          },\n        }\n      }\n    }\n  }\n\n  return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","fieldShouldBeLocalized","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","payload","segments","_field","_block","blockReferences","blocks","block","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","parentIsLocalized","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","config","localization","collections","customIDType","some","toString","endsWith","hasCustomIDType","formattedNumber","forEach","v","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","$options","$regex","replace"],"mappings":"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"}
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@payloadcms/db-mongodb",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "3.62.0-canary. 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "3.62.0-canary.6",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "description": "The officially supported MongoDB database adapter for Payload",
         
     | 
| 
       5 
5 
     | 
    
         
             
              "homepage": "https://payloadcms.com",
         
     | 
| 
       6 
6 
     | 
    
         
             
              "repository": {
         
     | 
| 
         @@ -50,10 +50,10 @@ 
     | 
|
| 
       50 
50 
     | 
    
         
             
                "mongodb": "6.16.0",
         
     | 
| 
       51 
51 
     | 
    
         
             
                "mongodb-memory-server": "10.1.4",
         
     | 
| 
       52 
52 
     | 
    
         
             
                "@payloadcms/eslint-config": "3.28.0",
         
     | 
| 
       53 
     | 
    
         
            -
                "payload": "3.62.0-canary. 
     | 
| 
      
 53 
     | 
    
         
            +
                "payload": "3.62.0-canary.6"
         
     | 
| 
       54 
54 
     | 
    
         
             
              },
         
     | 
| 
       55 
55 
     | 
    
         
             
              "peerDependencies": {
         
     | 
| 
       56 
     | 
    
         
            -
                "payload": "3.62.0-canary. 
     | 
| 
      
 56 
     | 
    
         
            +
                "payload": "3.62.0-canary.6"
         
     | 
| 
       57 
57 
     | 
    
         
             
              },
         
     | 
| 
       58 
58 
     | 
    
         
             
              "scripts": {
         
     | 
| 
       59 
59 
     | 
    
         
             
                "build": "pnpm build:types && pnpm build:swc",
         
     |