{"version":3,"sources":["../../../src/kv/adapters/DatabaseKVAdapter.ts"],"sourcesContent":["import type { CollectionConfig } from '../../index.js'\nimport type { Payload, PayloadRequest } from '../../types/index.js'\nimport type { KVAdapter, KVAdapterResult, KVStoreValue } from '../index.js'\n\n/** Mocked `req`, we don't need to use transactions, neither we want `createLocalReq` overhead. */\nconst req = {} as PayloadRequest\n\nexport class DatabaseKVAdapter implements KVAdapter {\n constructor(\n readonly payload: Payload,\n readonly collectionSlug: string,\n ) {}\n\n async clear(): Promise {\n await this.payload.db.deleteMany({\n collection: this.collectionSlug,\n req,\n where: {},\n })\n }\n\n async delete(key: string): Promise {\n await this.payload.db.deleteOne({\n collection: this.collectionSlug,\n req,\n where: { key: { equals: key } },\n })\n }\n\n async get(key: string): Promise {\n const doc = await this.payload.db.findOne<{\n data: T\n id: number | string\n }>({\n collection: this.collectionSlug,\n joins: false,\n req,\n select: {\n data: true,\n key: true,\n },\n where: { key: { equals: key } },\n })\n\n if (doc === null) {\n return null\n }\n\n return doc.data\n }\n\n async has(key: string): Promise {\n const { totalDocs } = await this.payload.db.count({\n collection: this.collectionSlug,\n req,\n where: { key: { equals: key } },\n })\n\n return totalDocs > 0\n }\n\n async keys(): Promise {\n const result = await this.payload.db.find<{ key: string }>({\n collection: this.collectionSlug,\n limit: 0,\n pagination: false,\n req,\n select: {\n key: true,\n },\n })\n\n return result.docs.map((each) => each.key)\n }\n\n async set(key: string, data: KVStoreValue): Promise {\n await this.payload.db.upsert({\n collection: this.collectionSlug,\n data: {\n data,\n key,\n },\n joins: false,\n req,\n select: {},\n where: { key: { equals: key } },\n })\n }\n}\n\nexport type DatabaseKVAdapterOptions = {\n /** Override options for the generated collection */\n kvCollectionOverrides?: Partial\n}\n\nexport const databaseKVAdapter = (options: DatabaseKVAdapterOptions = {}): KVAdapterResult => {\n const collectionSlug = options.kvCollectionOverrides?.slug ?? 'payload-kv'\n return {\n init: ({ payload }) => new DatabaseKVAdapter(payload, collectionSlug),\n kvCollection: {\n slug: collectionSlug,\n access: {\n create: () => false,\n delete: () => false,\n read: () => false,\n update: () => false,\n },\n admin: {\n hidden: true,\n },\n fields: [\n {\n name: 'key',\n type: 'text',\n index: true,\n required: true,\n unique: true,\n },\n {\n name: 'data',\n type: 'json',\n required: true,\n },\n ],\n lockDocuments: false,\n timestamps: false,\n ...options.kvCollectionOverrides,\n },\n }\n}\n"],"names":["req","DatabaseKVAdapter","payload","collectionSlug","clear","db","deleteMany","collection","where","delete","key","deleteOne","equals","get","doc","findOne","joins","select","data","has","totalDocs","count","keys","result","find","limit","pagination","docs","map","each","set","upsert","databaseKVAdapter","options","kvCollectionOverrides","slug","init","kvCollection","access","create","read","update","admin","hidden","fields","name","type","index","required","unique","lockDocuments","timestamps"],"mappings":"AAIA,gGAAgG,GAChG,MAAMA,MAAM,CAAC;AAEb,OAAO,MAAMC;;;IACX,YACE,AAASC,OAAgB,EACzB,AAASC,cAAsB,CAC/B;aAFSD,UAAAA;aACAC,iBAAAA;IACR;IAEH,MAAMC,QAAuB;QAC3B,MAAM,IAAI,CAACF,OAAO,CAACG,EAAE,CAACC,UAAU,CAAC;YAC/BC,YAAY,IAAI,CAACJ,cAAc;YAC/BH;YACAQ,OAAO,CAAC;QACV;IACF;IAEA,MAAMC,OAAOC,GAAW,EAAiB;QACvC,MAAM,IAAI,CAACR,OAAO,CAACG,EAAE,CAACM,SAAS,CAAC;YAC9BJ,YAAY,IAAI,CAACJ,cAAc;YAC/BH;YACAQ,OAAO;gBAAEE,KAAK;oBAAEE,QAAQF;gBAAI;YAAE;QAChC;IACF;IAEA,MAAMG,IAA4BH,GAAW,EAAqB;QAChE,MAAMI,MAAM,MAAM,IAAI,CAACZ,OAAO,CAACG,EAAE,CAACU,OAAO,CAGtC;YACDR,YAAY,IAAI,CAACJ,cAAc;YAC/Ba,OAAO;YACPhB;YACAiB,QAAQ;gBACNC,MAAM;gBACNR,KAAK;YACP;YACAF,OAAO;gBAAEE,KAAK;oBAAEE,QAAQF;gBAAI;YAAE;QAChC;QAEA,IAAII,QAAQ,MAAM;YAChB,OAAO;QACT;QAEA,OAAOA,IAAII,IAAI;IACjB;IAEA,MAAMC,IAAIT,GAAW,EAAoB;QACvC,MAAM,EAAEU,SAAS,EAAE,GAAG,MAAM,IAAI,CAAClB,OAAO,CAACG,EAAE,CAACgB,KAAK,CAAC;YAChDd,YAAY,IAAI,CAACJ,cAAc;YAC/BH;YACAQ,OAAO;gBAAEE,KAAK;oBAAEE,QAAQF;gBAAI;YAAE;QAChC;QAEA,OAAOU,YAAY;IACrB;IAEA,MAAME,OAA0B;QAC9B,MAAMC,SAAS,MAAM,IAAI,CAACrB,OAAO,CAACG,EAAE,CAACmB,IAAI,CAAkB;YACzDjB,YAAY,IAAI,CAACJ,cAAc;YAC/BsB,OAAO;YACPC,YAAY;YACZ1B;YACAiB,QAAQ;gBACNP,KAAK;YACP;QACF;QAEA,OAAOa,OAAOI,IAAI,CAACC,GAAG,CAAC,CAACC,OAASA,KAAKnB,GAAG;IAC3C;IAEA,MAAMoB,IAAIpB,GAAW,EAAEQ,IAAkB,EAAiB;QACxD,MAAM,IAAI,CAAChB,OAAO,CAACG,EAAE,CAAC0B,MAAM,CAAC;YAC3BxB,YAAY,IAAI,CAACJ,cAAc;YAC/Be,MAAM;gBACJA;gBACAR;YACF;YACAM,OAAO;YACPhB;YACAiB,QAAQ,CAAC;YACTT,OAAO;gBAAEE,KAAK;oBAAEE,QAAQF;gBAAI;YAAE;QAChC;IACF;AACF;AAOA,OAAO,MAAMsB,oBAAoB,CAACC,UAAoC,CAAC,CAAC;IACtE,MAAM9B,iBAAiB8B,QAAQC,qBAAqB,EAAEC,QAAQ;IAC9D,OAAO;QACLC,MAAM,CAAC,EAAElC,OAAO,EAAE,GAAK,IAAID,kBAAkBC,SAASC;QACtDkC,cAAc;YACZF,MAAMhC;YACNmC,QAAQ;gBACNC,QAAQ,IAAM;gBACd9B,QAAQ,IAAM;gBACd+B,MAAM,IAAM;gBACZC,QAAQ,IAAM;YAChB;YACAC,OAAO;gBACLC,QAAQ;YACV;YACAC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;oBACNC,OAAO;oBACPC,UAAU;oBACVC,QAAQ;gBACV;gBACA;oBACEJ,MAAM;oBACNC,MAAM;oBACNE,UAAU;gBACZ;aACD;YACDE,eAAe;YACfC,YAAY;YACZ,GAAGlB,QAAQC,qBAAqB;QAClC;IACF;AACF,EAAC"}