@payloadcms/drizzle 4.0.0-internal.e7d4ebc → 4.0.0-internal.f05c47f
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/count.d.ts.map +1 -1
- package/dist/count.js +8 -2
- package/dist/count.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +15 -2
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createTableName.d.ts.map +1 -1
- package/dist/createTableName.js +2 -7
- package/dist/createTableName.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +12 -1
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +18 -1
- package/dist/deleteOne.js.map +1 -1
- package/dist/find/buildFindManyArgs.d.ts +3 -2
- package/dist/find/buildFindManyArgs.d.ts.map +1 -1
- package/dist/find/buildFindManyArgs.js +2 -1
- package/dist/find/buildFindManyArgs.js.map +1 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +1 -0
- package/dist/find/findMany.js.map +1 -1
- package/dist/find/traverseFields.d.ts +3 -2
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +25 -2
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +17 -3
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +16 -4
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.js +8 -3
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +15 -2
- package/dist/findOne.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +10 -3
- package/dist/queryDrafts.js.map +1 -1
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +5 -4
- package/dist/schema/build.js.map +1 -1
- package/dist/schema/buildRawSchema.spec.js +230 -0
- package/dist/schema/buildRawSchema.spec.js.map +1 -0
- package/dist/schema/traverseFields.js +5 -5
- package/dist/schema/traverseFields.js.map +1 -1
- package/dist/updateGlobal.d.ts +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +30 -3
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateJobs.d.ts.map +1 -1
- package/dist/updateJobs.js +37 -0
- package/dist/updateJobs.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +8 -2
- package/dist/updateOne.js.map +1 -1
- package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
- package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
- package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
- package/dist/utilities/validateIdentifierLength.d.ts +7 -0
- package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
- package/dist/utilities/validateIdentifierLength.js +14 -0
- package/dist/utilities/validateIdentifierLength.js.map +1 -0
- package/dist/utilities/validateIdentifierLength.spec.js +19 -0
- package/dist/utilities/validateIdentifierLength.spec.js.map +1 -0
- package/package.json +3 -3
package/dist/count.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../src/count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../src/count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,SAAS,CAAA;AAU/D,eAAO,MAAM,KAAK,EAAE,KA+BnB,CAAA"}
|
package/dist/count.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { resolveBranchQuery } from 'payload';
|
|
1
2
|
import toSnakeCase from 'to-snake-case';
|
|
2
3
|
import { buildQuery } from './queries/buildQuery.js';
|
|
3
4
|
import { getTransaction } from './utilities/getTransaction.js';
|
|
4
|
-
export const count = async function count({ collection, locale, req, where: whereArg }) {
|
|
5
|
+
export const count = async function count({ branch, collection, locale, req, where: whereArg }) {
|
|
5
6
|
const collectionConfig = this.payload.collections[collection].config;
|
|
6
7
|
const tableName = this.tableNameMap.get(toSnakeCase(collectionConfig.slug));
|
|
7
8
|
const { joins, where } = buildQuery({
|
|
@@ -9,7 +10,12 @@ export const count = async function count({ collection, locale, req, where: wher
|
|
|
9
10
|
fields: collectionConfig.flattenedFields,
|
|
10
11
|
locale,
|
|
11
12
|
tableName,
|
|
12
|
-
where:
|
|
13
|
+
where: await resolveBranchQuery({
|
|
14
|
+
branch,
|
|
15
|
+
collectionSlug: collectionConfig.slug,
|
|
16
|
+
req,
|
|
17
|
+
where: whereArg
|
|
18
|
+
})
|
|
13
19
|
});
|
|
14
20
|
const db = await getTransaction(this, req);
|
|
15
21
|
const countResult = await this.countDistinct({
|
package/dist/count.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/count.ts"],"sourcesContent":["import type { Count, SanitizedCollectionConfig } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport const count: Count = async function count(\n this: DrizzleAdapter,\n { collection, locale, req, where: whereArg },\n) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n\n const tableName = this.tableNameMap.get(toSnakeCase(collectionConfig.slug))\n\n const { joins, where } = buildQuery({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n locale,\n tableName,\n where: whereArg,\n })\n\n const db = await getTransaction(this, req)\n\n const countResult = await this.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n return { totalDocs: countResult }\n}\n"],"names":["toSnakeCase","buildQuery","getTransaction","count","collection","locale","req","where","whereArg","collectionConfig","payload","collections","config","tableName","tableNameMap","get","slug","joins","adapter","fields","flattenedFields","db","countResult","countDistinct","totalDocs"],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"sources":["../src/count.ts"],"sourcesContent":["import type { Count, SanitizedCollectionConfig } from 'payload'\n\nimport { resolveBranchQuery } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport const count: Count = async function count(\n this: DrizzleAdapter,\n { branch, collection, locale, req, where: whereArg },\n) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n\n const tableName = this.tableNameMap.get(toSnakeCase(collectionConfig.slug))\n\n const { joins, where } = buildQuery({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n locale,\n tableName,\n where: await resolveBranchQuery({\n branch,\n collectionSlug: collectionConfig.slug,\n req,\n where: whereArg,\n }),\n })\n\n const db = await getTransaction(this, req)\n\n const countResult = await this.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n return { totalDocs: countResult }\n}\n"],"names":["resolveBranchQuery","toSnakeCase","buildQuery","getTransaction","count","branch","collection","locale","req","where","whereArg","collectionConfig","payload","collections","config","tableName","tableNameMap","get","slug","joins","adapter","fields","flattenedFields","collectionSlug","db","countResult","countDistinct","totalDocs"],"mappings":"AAEA,SAASA,kBAAkB,QAAQ,UAAS;AAC5C,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,MAAMC,QAAe,eAAeA,MAEzC,EAAEC,MAAM,EAAEC,UAAU,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAOC,QAAQ,EAAE;IAEpD,MAAMC,mBAA8C,IAAI,CAACC,OAAO,CAACC,WAAW,CAACP,WAAW,CAACQ,MAAM;IAE/F,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAAChB,YAAYU,iBAAiBO,IAAI;IAEzE,MAAM,EAAEC,KAAK,EAAEV,KAAK,EAAE,GAAGP,WAAW;QAClCkB,SAAS,IAAI;QACbC,QAAQV,iBAAiBW,eAAe;QACxCf;QACAQ;QACAN,OAAO,MAAMT,mBAAmB;YAC9BK;YACAkB,gBAAgBZ,iBAAiBO,IAAI;YACrCV;YACAC,OAAOC;QACT;IACF;IAEA,MAAMc,KAAK,MAAMrB,eAAe,IAAI,EAAEK;IAEtC,MAAMiB,cAAc,MAAM,IAAI,CAACC,aAAa,CAAC;QAC3CF;QACAL;QACAJ;QACAN;IACF;IAEA,OAAO;QAAEkB,WAAWF;IAAY;AAClC,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createGlobalVersion.d.ts","sourceRoot":"","sources":["../src/createGlobalVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACzE,IAAI,EAAE,cAAc,EACpB,EACE,QAAQ,EACR,SAAS,EACT,UAAU,EACV,eAAe,EACf,GAAG,EACH,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,uBAAuB,GACzB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"createGlobalVersion.d.ts","sourceRoot":"","sources":["../src/createGlobalVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACzE,IAAI,EAAE,cAAc,EACpB,EACE,QAAQ,EACR,SAAS,EACT,UAAU,EACV,eAAe,EACf,GAAG,EACH,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,uBAAuB,GACzB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA2D7B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sql } from 'drizzle-orm';
|
|
2
|
-
import { buildVersionGlobalFields } from 'payload';
|
|
2
|
+
import { buildVersionGlobalFields, MAIN_BRANCH, resolveBranch } from 'payload';
|
|
3
3
|
import { hasDraftsEnabled } from 'payload/shared';
|
|
4
4
|
import toSnakeCase from 'to-snake-case';
|
|
5
5
|
import { upsertRow } from './upsertRow/index.js';
|
|
@@ -9,12 +9,17 @@ export async function createGlobalVersion({ autosave, createdAt, globalSlug, pub
|
|
|
9
9
|
const global = this.payload.globals.config.find(({ slug })=>slug === globalSlug);
|
|
10
10
|
const tableName = this.tableNameMap.get(`_${toSnakeCase(global.slug)}${this.versionsSuffix}`);
|
|
11
11
|
const db = getPrimaryDb(this, await getTransaction(this, req));
|
|
12
|
+
const isBranchable = Boolean(req?.payload?.config?.branching?.branchableGlobals?.has(globalSlug));
|
|
13
|
+
const versionBranch = isBranchable ? resolveBranch(req) : MAIN_BRANCH;
|
|
12
14
|
const result = await upsertRow({
|
|
13
15
|
adapter: this,
|
|
14
16
|
data: {
|
|
15
17
|
autosave,
|
|
16
18
|
createdAt,
|
|
17
19
|
latest: true,
|
|
20
|
+
...isBranchable ? {
|
|
21
|
+
_branch: versionBranch
|
|
22
|
+
} : {},
|
|
18
23
|
publishedLocale,
|
|
19
24
|
snapshot,
|
|
20
25
|
updatedAt,
|
|
@@ -31,9 +36,17 @@ export async function createGlobalVersion({ autosave, createdAt, globalSlug, pub
|
|
|
31
36
|
});
|
|
32
37
|
const table = this.tables[tableName];
|
|
33
38
|
if (hasDraftsEnabled(global)) {
|
|
39
|
+
// Scoped by `_branch` when the global is branchable. Global versions have no
|
|
40
|
+
// `parent` to separate streams by — every version of a global shares one —
|
|
41
|
+
// so an unscoped clear would wipe main's latest flag from a branch.
|
|
34
42
|
await this.execute({
|
|
35
43
|
db,
|
|
36
|
-
sql: sql`
|
|
44
|
+
sql: isBranchable ? sql`
|
|
45
|
+
UPDATE ${table}
|
|
46
|
+
SET latest = false
|
|
47
|
+
WHERE ${table.id} != ${result.id}
|
|
48
|
+
AND ${table._branch} = ${versionBranch};
|
|
49
|
+
` : sql`
|
|
37
50
|
UPDATE ${table}
|
|
38
51
|
SET latest = false
|
|
39
52
|
WHERE ${table.id} != ${result.id};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/createGlobalVersion.ts"],"sourcesContent":["import type { CreateGlobalVersionArgs, JsonObject, TypeWithVersion } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport { buildVersionGlobalFields } from 'payload'\nimport { hasDraftsEnabled } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport async function createGlobalVersion<T extends JsonObject = JsonObject>(\n this: DrizzleAdapter,\n {\n autosave,\n createdAt,\n globalSlug,\n publishedLocale,\n req,\n returning,\n select,\n snapshot,\n updatedAt,\n versionData,\n }: CreateGlobalVersionArgs,\n): Promise<TypeWithVersion<T>> {\n const global = this.payload.globals.config.find(({ slug }) => slug === globalSlug)\n\n const tableName = this.tableNameMap.get(`_${toSnakeCase(global.slug)}${this.versionsSuffix}`)\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const result = await upsertRow<TypeWithVersion<T>>({\n adapter: this,\n data: {\n autosave,\n createdAt,\n latest: true,\n publishedLocale,\n snapshot,\n updatedAt,\n version: versionData,\n },\n db,\n fields: buildVersionGlobalFields(this.payload.config, global, true),\n globalSlug,\n ignoreResult: returning === false ? 'idOnly' : false,\n operation: 'create',\n req,\n select,\n tableName,\n })\n\n const table = this.tables[tableName]\n if (hasDraftsEnabled(global)) {\n await this.execute({\n db,\n sql: sql`\n UPDATE ${table}\n SET latest = false\n WHERE ${table.id} != ${result.id};\n `,\n })\n }\n\n if (returning === false) {\n return null\n }\n\n return result\n}\n"],"names":["sql","buildVersionGlobalFields","hasDraftsEnabled","toSnakeCase","upsertRow","getPrimaryDb","getTransaction","createGlobalVersion","autosave","createdAt","globalSlug","publishedLocale","req","returning","select","snapshot","updatedAt","versionData","global","payload","globals","config","find","slug","tableName","tableNameMap","get","versionsSuffix","db","result","adapter","data","latest","version","fields","ignoreResult","operation","table","tables","execute","id"],"mappings":"AAEA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,wBAAwB,QAAQ,UAAS;
|
|
1
|
+
{"version":3,"sources":["../src/createGlobalVersion.ts"],"sourcesContent":["import type { CreateGlobalVersionArgs, JsonObject, TypeWithVersion } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport { buildVersionGlobalFields, MAIN_BRANCH, resolveBranch } from 'payload'\nimport { hasDraftsEnabled } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport async function createGlobalVersion<T extends JsonObject = JsonObject>(\n this: DrizzleAdapter,\n {\n autosave,\n createdAt,\n globalSlug,\n publishedLocale,\n req,\n returning,\n select,\n snapshot,\n updatedAt,\n versionData,\n }: CreateGlobalVersionArgs,\n): Promise<TypeWithVersion<T>> {\n const global = this.payload.globals.config.find(({ slug }) => slug === globalSlug)\n\n const tableName = this.tableNameMap.get(`_${toSnakeCase(global.slug)}${this.versionsSuffix}`)\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const isBranchable = Boolean(req?.payload?.config?.branching?.branchableGlobals?.has(globalSlug))\n const versionBranch = isBranchable ? resolveBranch(req as never) : MAIN_BRANCH\n\n const result = await upsertRow<TypeWithVersion<T>>({\n adapter: this,\n data: {\n autosave,\n createdAt,\n latest: true,\n ...(isBranchable ? { _branch: versionBranch } : {}),\n publishedLocale,\n snapshot,\n updatedAt,\n version: versionData,\n },\n db,\n fields: buildVersionGlobalFields(this.payload.config, global, true),\n globalSlug,\n ignoreResult: returning === false ? 'idOnly' : false,\n operation: 'create',\n req,\n select,\n tableName,\n })\n\n const table = this.tables[tableName]\n if (hasDraftsEnabled(global)) {\n // Scoped by `_branch` when the global is branchable. Global versions have no\n // `parent` to separate streams by — every version of a global shares one —\n // so an unscoped clear would wipe main's latest flag from a branch.\n await this.execute({\n db,\n sql: isBranchable\n ? sql`\n UPDATE ${table}\n SET latest = false\n WHERE ${table.id} != ${result.id}\n AND ${table._branch} = ${versionBranch};\n `\n : sql`\n UPDATE ${table}\n SET latest = false\n WHERE ${table.id} != ${result.id};\n `,\n })\n }\n\n if (returning === false) {\n return null\n }\n\n return result\n}\n"],"names":["sql","buildVersionGlobalFields","MAIN_BRANCH","resolveBranch","hasDraftsEnabled","toSnakeCase","upsertRow","getPrimaryDb","getTransaction","createGlobalVersion","autosave","createdAt","globalSlug","publishedLocale","req","returning","select","snapshot","updatedAt","versionData","global","payload","globals","config","find","slug","tableName","tableNameMap","get","versionsSuffix","db","isBranchable","Boolean","branching","branchableGlobals","has","versionBranch","result","adapter","data","latest","_branch","version","fields","ignoreResult","operation","table","tables","execute","id"],"mappings":"AAEA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,wBAAwB,EAAEC,WAAW,EAAEC,aAAa,QAAQ,UAAS;AAC9E,SAASC,gBAAgB,QAAQ,iBAAgB;AACjD,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,eAAeC,oBAEpB,EACEC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,eAAe,EACfC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,QAAQ,EACRC,SAAS,EACTC,WAAW,EACa;IAE1B,MAAMC,SAAS,IAAI,CAACC,OAAO,CAACC,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASb;IAEvE,MAAMc,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAAC,CAAC,CAAC,EAAEvB,YAAYe,OAAOK,IAAI,IAAI,IAAI,CAACI,cAAc,EAAE;IAE5F,MAAMC,KAAKvB,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEM;IAEzD,MAAMiB,eAAeC,QAAQlB,KAAKO,SAASE,QAAQU,WAAWC,mBAAmBC,IAAIvB;IACrF,MAAMwB,gBAAgBL,eAAe5B,cAAcW,OAAgBZ;IAEnE,MAAMmC,SAAS,MAAM/B,UAA8B;QACjDgC,SAAS,IAAI;QACbC,MAAM;YACJ7B;YACAC;YACA6B,QAAQ;YACR,GAAIT,eAAe;gBAAEU,SAASL;YAAc,IAAI,CAAC,CAAC;YAClDvB;YACAI;YACAC;YACAwB,SAASvB;QACX;QACAW;QACAa,QAAQ1C,yBAAyB,IAAI,CAACoB,OAAO,CAACE,MAAM,EAAEH,QAAQ;QAC9DR;QACAgC,cAAc7B,cAAc,QAAQ,WAAW;QAC/C8B,WAAW;QACX/B;QACAE;QACAU;IACF;IAEA,MAAMoB,QAAQ,IAAI,CAACC,MAAM,CAACrB,UAAU;IACpC,IAAItB,iBAAiBgB,SAAS;QAC5B,6EAA6E;QAC7E,2EAA2E;QAC3E,oEAAoE;QACpE,MAAM,IAAI,CAAC4B,OAAO,CAAC;YACjBlB;YACA9B,KAAK+B,eACD/B,GAAG,CAAC;iBACG,EAAE8C,MAAM;;gBAET,EAAEA,MAAMG,EAAE,CAAC,IAAI,EAAEZ,OAAOY,EAAE,CAAC;gBAC3B,EAAEH,MAAML,OAAO,CAAC,GAAG,EAAEL,cAAc;QAC3C,CAAC,GACCpC,GAAG,CAAC;iBACG,EAAE8C,MAAM;;gBAET,EAAEA,MAAMG,EAAE,CAAC,IAAI,EAAEZ,OAAOY,EAAE,CAAC;QACnC,CAAC;QACL;IACF;IAEA,IAAIlC,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,OAAOsB;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTableName.d.ts","sourceRoot":"","sources":["../src/createTableName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"createTableName.d.ts","sourceRoot":"","sources":["../src/createTableName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAI/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAIhD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,gBAAgB,CAAC,CAAA;IAChE,8CAA8C;IAC9C,MAAM,EAAE;QACN,MAAM,CAAC,EAAE,gBAAgB,CAAA;QACzB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uHAAuH;IACvH,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC9B,uFAAuF;IACvF,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,mIAAmI;IACnI,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mHAAmH;IACnH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,sIAUzB,IAAI,KAAG,MAmCT,CAAA"}
|
package/dist/createTableName.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { APIError } from 'payload';
|
|
2
1
|
import toSnakeCase from 'to-snake-case';
|
|
2
|
+
import { validateIdentifierLength } from './utilities/validateIdentifierLength.js';
|
|
3
3
|
/**
|
|
4
4
|
* Used to name database enums and tables
|
|
5
5
|
* Returns the table or enum name for a given entity
|
|
@@ -26,12 +26,7 @@ import toSnakeCase from 'to-snake-case';
|
|
|
26
26
|
if (!throwValidationError) {
|
|
27
27
|
return result;
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
throw new APIError(`Exceeded max identifier length for table or enum name of 63 characters. Invalid name: ${result}.
|
|
31
|
-
Tip: You can use the dbName property to reduce the table name length.
|
|
32
|
-
`);
|
|
33
|
-
}
|
|
34
|
-
return result;
|
|
29
|
+
return validateIdentifierLength(result);
|
|
35
30
|
};
|
|
36
31
|
|
|
37
32
|
//# sourceMappingURL=createTableName.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/createTableName.ts"],"sourcesContent":["import type { DBIdentifierName } from 'payload'\n\nimport
|
|
1
|
+
{"version":3,"sources":["../src/createTableName.ts"],"sourcesContent":["import type { DBIdentifierName } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { validateIdentifierLength } from './utilities/validateIdentifierLength.js'\n\ntype Args = {\n adapter: Pick<DrizzleAdapter, 'tableNameMap' | 'versionsSuffix'>\n /** The collection, global or field config **/\n config: {\n dbName?: DBIdentifierName\n enumName?: DBIdentifierName\n name?: string\n slug?: string\n }\n /** For nested tables passed for the user custom dbName functions to handle their own iterations */\n parentTableName?: string\n /** For sub tables (array for example) this needs to include the parentTableName */\n prefix?: string\n /** For tables based on fields that could have both enumName and dbName (ie: select with hasMany), default: 'dbName' */\n target?: 'dbName' | 'enumName'\n /** Throws error if true for postgres when table and enum names exceed 63 characters */\n throwValidationError?: boolean\n /** Adds the versions suffix to the default table name - should only be used on the base collection to avoid duplicate suffixing */\n versions?: boolean\n /** Adds the versions suffix to custom dbName only - this is used while creating blocks / selects / arrays / etc */\n versionsCustomName?: boolean\n}\n\n/**\n * Used to name database enums and tables\n * Returns the table or enum name for a given entity\n */\nexport const createTableName = ({\n adapter,\n config: { name, slug },\n config,\n parentTableName,\n prefix = '',\n target = 'dbName',\n throwValidationError = false,\n versions = false,\n versionsCustomName = false,\n}: Args): string => {\n let customNameDefinition = config[target]\n\n let defaultTableName = `${prefix}${toSnakeCase(name ?? slug)}`\n\n if (versions) {\n defaultTableName = `_${defaultTableName}${adapter.versionsSuffix}`\n }\n\n let customTableNameResult: string\n\n if (!customNameDefinition && target === 'enumName') {\n customNameDefinition = config['dbName']\n }\n\n if (customNameDefinition) {\n customTableNameResult =\n typeof customNameDefinition === 'function'\n ? customNameDefinition({ tableName: parentTableName })\n : customNameDefinition\n\n if (versionsCustomName) {\n customTableNameResult = `_${customTableNameResult}${adapter.versionsSuffix}`\n }\n }\n\n const result = customTableNameResult || defaultTableName\n\n adapter.tableNameMap.set(defaultTableName, result)\n\n if (!throwValidationError) {\n return result\n }\n\n return validateIdentifierLength(result)\n}\n"],"names":["toSnakeCase","validateIdentifierLength","createTableName","adapter","config","name","slug","parentTableName","prefix","target","throwValidationError","versions","versionsCustomName","customNameDefinition","defaultTableName","versionsSuffix","customTableNameResult","tableName","result","tableNameMap","set"],"mappings":"AAEA,OAAOA,iBAAiB,gBAAe;AAIvC,SAASC,wBAAwB,QAAQ,0CAAyC;AAyBlF;;;CAGC,GACD,OAAO,MAAMC,kBAAkB,CAAC,EAC9BC,OAAO,EACPC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,EAAE,EACtBF,MAAM,EACNG,eAAe,EACfC,SAAS,EAAE,EACXC,SAAS,QAAQ,EACjBC,uBAAuB,KAAK,EAC5BC,WAAW,KAAK,EAChBC,qBAAqB,KAAK,EACrB;IACL,IAAIC,uBAAuBT,MAAM,CAACK,OAAO;IAEzC,IAAIK,mBAAmB,GAAGN,SAASR,YAAYK,QAAQC,OAAO;IAE9D,IAAIK,UAAU;QACZG,mBAAmB,CAAC,CAAC,EAAEA,mBAAmBX,QAAQY,cAAc,EAAE;IACpE;IAEA,IAAIC;IAEJ,IAAI,CAACH,wBAAwBJ,WAAW,YAAY;QAClDI,uBAAuBT,MAAM,CAAC,SAAS;IACzC;IAEA,IAAIS,sBAAsB;QACxBG,wBACE,OAAOH,yBAAyB,aAC5BA,qBAAqB;YAAEI,WAAWV;QAAgB,KAClDM;QAEN,IAAID,oBAAoB;YACtBI,wBAAwB,CAAC,CAAC,EAAEA,wBAAwBb,QAAQY,cAAc,EAAE;QAC9E;IACF;IAEA,MAAMG,SAASF,yBAAyBF;IAExCX,QAAQgB,YAAY,CAACC,GAAG,CAACN,kBAAkBI;IAE3C,IAAI,CAACR,sBAAsB;QACzB,OAAOQ;IACT;IAEA,OAAOjB,yBAAyBiB;AAClC,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createVersion.d.ts","sourceRoot":"","sources":["../src/createVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAO7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,wBAAsB,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACnE,IAAI,EAAE,cAAc,EACpB,EACE,QAAQ,EACR,cAAc,EACd,SAAS,EACT,MAAM,EACN,eAAe,EACf,GAAG,EACH,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"createVersion.d.ts","sourceRoot":"","sources":["../src/createVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAO7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,wBAAsB,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACnE,IAAI,EAAE,cAAc,EACpB,EACE,QAAQ,EACR,cAAc,EACd,SAAS,EACT,MAAM,EACN,eAAe,EACf,GAAG,EACH,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA6E7B"}
|
package/dist/createVersion.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sql } from 'drizzle-orm';
|
|
2
|
-
import { buildVersionCollectionFields } from 'payload';
|
|
2
|
+
import { buildVersionCollectionFields, resolveBranchVersionParent } from 'payload';
|
|
3
3
|
import { hasDraftsEnabled } from 'payload/shared';
|
|
4
4
|
import toSnakeCase from 'to-snake-case';
|
|
5
5
|
import { upsertRow } from './upsertRow/index.js';
|
|
@@ -14,6 +14,13 @@ export async function createVersion({ autosave, collectionSlug, createdAt, paren
|
|
|
14
14
|
}
|
|
15
15
|
const defaultTableName = toSnakeCase(collection.slug);
|
|
16
16
|
const tableName = this.tableNameMap.get(`_${defaultTableName}${this.versionsSuffix}`);
|
|
17
|
+
const branched = await resolveBranchVersionParent({
|
|
18
|
+
collectionSlug,
|
|
19
|
+
parent,
|
|
20
|
+
req,
|
|
21
|
+
versionData: versionData
|
|
22
|
+
});
|
|
23
|
+
parent = branched.parent;
|
|
17
24
|
const version = {
|
|
18
25
|
...versionData
|
|
19
26
|
};
|
|
@@ -25,6 +32,10 @@ export async function createVersion({ autosave, collectionSlug, createdAt, paren
|
|
|
25
32
|
createdAt,
|
|
26
33
|
latest: true,
|
|
27
34
|
parent,
|
|
35
|
+
...branched.versionData._branch ? {
|
|
36
|
+
_branch: branched.versionData._branch,
|
|
37
|
+
_branchParent: branched.versionData._branchParent
|
|
38
|
+
} : {},
|
|
28
39
|
publishedLocale,
|
|
29
40
|
snapshot,
|
|
30
41
|
updatedAt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/createVersion.ts"],"sourcesContent":["import type { CreateVersionArgs, JsonObject, TypeWithVersion } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport { buildVersionCollectionFields } from 'payload'\nimport { hasDraftsEnabled } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport async function createVersion<T extends JsonObject = JsonObject>(\n this: DrizzleAdapter,\n {\n autosave,\n collectionSlug,\n createdAt,\n parent,\n publishedLocale,\n req,\n returning,\n select,\n snapshot,\n updatedAt,\n versionData,\n }: CreateVersionArgs<T>,\n): Promise<TypeWithVersion<T>> {\n const collection = this.payload.collections[collectionSlug].config\n if (collection.versions.drafts) {\n if (typeof select === 'object') {\n select.updatedAt = true\n }\n }\n\n const defaultTableName = toSnakeCase(collection.slug)\n const tableName = this.tableNameMap.get(`_${defaultTableName}${this.versionsSuffix}`)\n\n const version = { ...versionData }\n if (version.id) {\n delete version.id\n }\n\n const data: Record<string, unknown> = {\n autosave,\n createdAt,\n latest: true,\n parent,\n publishedLocale,\n snapshot,\n updatedAt,\n version,\n }\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const result = await upsertRow<TypeWithVersion<T>>({\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: buildVersionCollectionFields(this.payload.config, collection, true),\n ignoreResult: returning === false ? 'idOnly' : undefined,\n operation: 'create',\n req,\n select,\n tableName,\n })\n\n const table = this.tables[tableName]\n\n if (hasDraftsEnabled(collection)) {\n await this.execute({\n db,\n sql: sql`\n UPDATE ${table}\n SET latest = false\n WHERE ${table.id} != ${result.id}\n AND ${table.parent} = ${parent}\n AND ${table.updatedAt} < ${result.updatedAt || updatedAt}\n `,\n })\n }\n\n if (returning === false) {\n return null\n }\n\n return result\n}\n"],"names":["sql","buildVersionCollectionFields","hasDraftsEnabled","toSnakeCase","upsertRow","getPrimaryDb","getTransaction","createVersion","autosave","collectionSlug","createdAt","parent","publishedLocale","req","returning","select","snapshot","updatedAt","versionData","collection","payload","collections","config","versions","drafts","defaultTableName","slug","tableName","tableNameMap","get","versionsSuffix","version","id","data","latest","db","result","adapter","fields","ignoreResult","undefined","operation","table","tables","execute"],"mappings":"AAEA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,4BAA4B,QAAQ,UAAS;
|
|
1
|
+
{"version":3,"sources":["../src/createVersion.ts"],"sourcesContent":["import type { CreateVersionArgs, JsonObject, TypeWithVersion } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport { buildVersionCollectionFields, resolveBranchVersionParent } from 'payload'\nimport { hasDraftsEnabled } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport async function createVersion<T extends JsonObject = JsonObject>(\n this: DrizzleAdapter,\n {\n autosave,\n collectionSlug,\n createdAt,\n parent,\n publishedLocale,\n req,\n returning,\n select,\n snapshot,\n updatedAt,\n versionData,\n }: CreateVersionArgs<T>,\n): Promise<TypeWithVersion<T>> {\n const collection = this.payload.collections[collectionSlug].config\n if (collection.versions.drafts) {\n if (typeof select === 'object') {\n select.updatedAt = true\n }\n }\n\n const defaultTableName = toSnakeCase(collection.slug)\n const tableName = this.tableNameMap.get(`_${defaultTableName}${this.versionsSuffix}`)\n\n const branched = await resolveBranchVersionParent({\n collectionSlug,\n parent,\n req,\n versionData: versionData as Record<string, unknown>,\n })\n\n parent = branched.parent\n\n const version = { ...versionData }\n if (version.id) {\n delete version.id\n }\n\n const data: Record<string, unknown> = {\n autosave,\n createdAt,\n latest: true,\n parent,\n ...(branched.versionData._branch\n ? {\n _branch: branched.versionData._branch,\n _branchParent: branched.versionData._branchParent,\n }\n : {}),\n publishedLocale,\n snapshot,\n updatedAt,\n version,\n }\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const result = await upsertRow<TypeWithVersion<T>>({\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: buildVersionCollectionFields(this.payload.config, collection, true),\n ignoreResult: returning === false ? 'idOnly' : undefined,\n operation: 'create',\n req,\n select,\n tableName,\n })\n\n const table = this.tables[tableName]\n\n if (hasDraftsEnabled(collection)) {\n await this.execute({\n db,\n sql: sql`\n UPDATE ${table}\n SET latest = false\n WHERE ${table.id} != ${result.id}\n AND ${table.parent} = ${parent}\n AND ${table.updatedAt} < ${result.updatedAt || updatedAt}\n `,\n })\n }\n\n if (returning === false) {\n return null\n }\n\n return result\n}\n"],"names":["sql","buildVersionCollectionFields","resolveBranchVersionParent","hasDraftsEnabled","toSnakeCase","upsertRow","getPrimaryDb","getTransaction","createVersion","autosave","collectionSlug","createdAt","parent","publishedLocale","req","returning","select","snapshot","updatedAt","versionData","collection","payload","collections","config","versions","drafts","defaultTableName","slug","tableName","tableNameMap","get","versionsSuffix","branched","version","id","data","latest","_branch","_branchParent","db","result","adapter","fields","ignoreResult","undefined","operation","table","tables","execute"],"mappings":"AAEA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,4BAA4B,EAAEC,0BAA0B,QAAQ,UAAS;AAClF,SAASC,gBAAgB,QAAQ,iBAAgB;AACjD,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,eAAeC,cAEpB,EACEC,QAAQ,EACRC,cAAc,EACdC,SAAS,EACTC,MAAM,EACNC,eAAe,EACfC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,QAAQ,EACRC,SAAS,EACTC,WAAW,EACU;IAEvB,MAAMC,aAAa,IAAI,CAACC,OAAO,CAACC,WAAW,CAACZ,eAAe,CAACa,MAAM;IAClE,IAAIH,WAAWI,QAAQ,CAACC,MAAM,EAAE;QAC9B,IAAI,OAAOT,WAAW,UAAU;YAC9BA,OAAOE,SAAS,GAAG;QACrB;IACF;IAEA,MAAMQ,mBAAmBtB,YAAYgB,WAAWO,IAAI;IACpD,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAAC,CAAC,CAAC,EAAEJ,mBAAmB,IAAI,CAACK,cAAc,EAAE;IAEpF,MAAMC,WAAW,MAAM9B,2BAA2B;QAChDQ;QACAE;QACAE;QACAK,aAAaA;IACf;IAEAP,SAASoB,SAASpB,MAAM;IAExB,MAAMqB,UAAU;QAAE,GAAGd,WAAW;IAAC;IACjC,IAAIc,QAAQC,EAAE,EAAE;QACd,OAAOD,QAAQC,EAAE;IACnB;IAEA,MAAMC,OAAgC;QACpC1B;QACAE;QACAyB,QAAQ;QACRxB;QACA,GAAIoB,SAASb,WAAW,CAACkB,OAAO,GAC5B;YACEA,SAASL,SAASb,WAAW,CAACkB,OAAO;YACrCC,eAAeN,SAASb,WAAW,CAACmB,aAAa;QACnD,IACA,CAAC,CAAC;QACNzB;QACAI;QACAC;QACAe;IACF;IAEA,MAAMM,KAAKjC,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEO;IAEzD,MAAM0B,SAAS,MAAMnC,UAA8B;QACjDoC,SAAS,IAAI;QACb/B;QACAyB;QACAI;QACAG,QAAQzC,6BAA6B,IAAI,CAACoB,OAAO,CAACE,MAAM,EAAEH,YAAY;QACtEuB,cAAc5B,cAAc,QAAQ,WAAW6B;QAC/CC,WAAW;QACX/B;QACAE;QACAY;IACF;IAEA,MAAMkB,QAAQ,IAAI,CAACC,MAAM,CAACnB,UAAU;IAEpC,IAAIzB,iBAAiBiB,aAAa;QAChC,MAAM,IAAI,CAAC4B,OAAO,CAAC;YACjBT;YACAvC,KAAKA,GAAG,CAAC;eACA,EAAE8C,MAAM;;cAET,EAAEA,MAAMZ,EAAE,CAAC,IAAI,EAAEM,OAAON,EAAE,CAAC;cAC3B,EAAEY,MAAMlC,MAAM,CAAC,GAAG,EAAEA,OAAO;cAC3B,EAAEkC,MAAM5B,SAAS,CAAC,GAAG,EAAEsB,OAAOtB,SAAS,IAAIA,UAAU;MAC7D,CAAC;QACH;IACF;IAEA,IAAIH,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,OAAOyB;AACT"}
|
package/dist/deleteOne.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteOne.d.ts","sourceRoot":"","sources":["../src/deleteOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"deleteOne.d.ts","sourceRoot":"","sources":["../src/deleteOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAgBxC,eAAO,MAAM,SAAS,EAAE,SAyFvB,CAAA"}
|
package/dist/deleteOne.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { eq } from 'drizzle-orm';
|
|
2
|
+
import { resolveBranchDelete } from 'payload';
|
|
2
3
|
import toSnakeCase from 'to-snake-case';
|
|
3
4
|
import { buildFindManyArgs } from './find/buildFindManyArgs.js';
|
|
4
5
|
import { buildQuery } from './queries/buildQuery.js';
|
|
@@ -7,9 +8,25 @@ import { transform } from './transform/read/index.js';
|
|
|
7
8
|
import { getPrimaryDb } from './utilities/getPrimaryDb.js';
|
|
8
9
|
import { getTransaction } from './utilities/getTransaction.js';
|
|
9
10
|
import { markWrite } from './utilities/readAfterWrite.js';
|
|
10
|
-
export const deleteOne = async function deleteOne({ collection: collectionSlug, req, returning, select, where: whereArg }) {
|
|
11
|
+
export const deleteOne = async function deleteOne({ branch, collection: collectionSlug, req, returning, select, where: whereArg }) {
|
|
11
12
|
const collection = this.payload.collections[collectionSlug].config;
|
|
12
13
|
const tableName = this.tableNameMap.get(toSnakeCase(collection.slug));
|
|
14
|
+
const branchDelete = await resolveBranchDelete({
|
|
15
|
+
branch,
|
|
16
|
+
collectionSlug,
|
|
17
|
+
req,
|
|
18
|
+
where: whereArg
|
|
19
|
+
});
|
|
20
|
+
if (branchDelete.tombstoned) {
|
|
21
|
+
return returning === false ? null : branchDelete.doc;
|
|
22
|
+
}
|
|
23
|
+
if (branchDelete.deleteRowID !== undefined) {
|
|
24
|
+
whereArg = {
|
|
25
|
+
id: {
|
|
26
|
+
equals: branchDelete.deleteRowID
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
13
30
|
let docToDelete;
|
|
14
31
|
const { joins, selectFields, where } = buildQuery({
|
|
15
32
|
adapter: this,
|
package/dist/deleteOne.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/deleteOne.ts"],"sourcesContent":["import type { DeleteOne } from 'payload'\n\nimport { eq } from 'drizzle-orm'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildFindManyArgs } from './find/buildFindManyArgs.js'\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const deleteOne: DeleteOne = async function deleteOne(\n this: DrizzleAdapter,\n { collection: collectionSlug, req, returning, select, where: whereArg },\n) {\n const collection = this.payload.collections[collectionSlug].config\n\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n let docToDelete: Record<string, unknown>\n\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale: req?.locale,\n tableName,\n where: whereArg,\n })\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n docToDelete = await db.query[tableName].findFirst({\n where: eq(this.tables[tableName].id, selectDistinctResult[0].id),\n })\n } else {\n const findManyArgs = buildFindManyArgs({\n adapter: this,\n depth: 0,\n fields: collection.flattenedFields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = where\n\n docToDelete = await db.query[tableName].findFirst(findManyArgs)\n }\n\n if (!docToDelete) {\n return null\n }\n\n const result =\n returning === false\n ? null\n : transform({\n adapter: this,\n config: this.payload.config,\n data: docToDelete,\n fields: collection.flattenedFields,\n joinQuery: false,\n tableName,\n })\n\n await this.deleteWhere({\n db,\n tableName,\n where: eq(this.tables[tableName].id, docToDelete.id),\n })\n\n markWrite(this)\n\n return result\n}\n"],"names":["eq","toSnakeCase","buildFindManyArgs","buildQuery","selectDistinct","transform","getPrimaryDb","getTransaction","markWrite","deleteOne","collection","collectionSlug","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","docToDelete","joins","selectFields","adapter","fields","flattenedFields","locale","db","selectDistinctResult","query","limit","
|
|
1
|
+
{"version":3,"sources":["../src/deleteOne.ts"],"sourcesContent":["import type { DeleteOne } from 'payload'\n\nimport { eq } from 'drizzle-orm'\nimport { resolveBranchDelete } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildFindManyArgs } from './find/buildFindManyArgs.js'\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const deleteOne: DeleteOne = async function deleteOne(\n this: DrizzleAdapter,\n { branch, collection: collectionSlug, req, returning, select, where: whereArg },\n) {\n const collection = this.payload.collections[collectionSlug].config\n\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n const branchDelete = await resolveBranchDelete({\n branch,\n collectionSlug,\n req,\n where: whereArg,\n })\n\n if (branchDelete.tombstoned) {\n return returning === false ? null : (branchDelete.doc as any)\n }\n\n if (branchDelete.deleteRowID !== undefined) {\n whereArg = { id: { equals: branchDelete.deleteRowID } }\n }\n\n let docToDelete: Record<string, unknown>\n\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale: req?.locale,\n tableName,\n where: whereArg,\n })\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n docToDelete = await db.query[tableName].findFirst({\n where: eq(this.tables[tableName].id, selectDistinctResult[0].id),\n })\n } else {\n const findManyArgs = buildFindManyArgs({\n adapter: this,\n depth: 0,\n fields: collection.flattenedFields,\n joinQuery: false,\n select,\n tableName,\n })\n\n findManyArgs.where = where\n\n docToDelete = await db.query[tableName].findFirst(findManyArgs)\n }\n\n if (!docToDelete) {\n return null\n }\n\n const result =\n returning === false\n ? null\n : transform({\n adapter: this,\n config: this.payload.config,\n data: docToDelete,\n fields: collection.flattenedFields,\n joinQuery: false,\n tableName,\n })\n\n await this.deleteWhere({\n db,\n tableName,\n where: eq(this.tables[tableName].id, docToDelete.id),\n })\n\n markWrite(this)\n\n return result\n}\n"],"names":["eq","resolveBranchDelete","toSnakeCase","buildFindManyArgs","buildQuery","selectDistinct","transform","getPrimaryDb","getTransaction","markWrite","deleteOne","branch","collection","collectionSlug","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","branchDelete","tombstoned","doc","deleteRowID","undefined","id","equals","docToDelete","joins","selectFields","adapter","fields","flattenedFields","locale","db","selectDistinctResult","query","limit","findFirst","tables","findManyArgs","depth","joinQuery","result","data","deleteWhere"],"mappings":"AAEA,SAASA,EAAE,QAAQ,cAAa;AAChC,SAASC,mBAAmB,QAAQ,UAAS;AAC7C,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,SAAS,QAAQ,4BAA2B;AACrD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,SAAS,QAAQ,gCAA+B;AAEzD,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EAAEC,MAAM,EAAEC,YAAYC,cAAc,EAAEC,GAAG,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAOC,QAAQ,EAAE;IAE/E,MAAMN,aAAa,IAAI,CAACO,OAAO,CAACC,WAAW,CAACP,eAAe,CAACQ,MAAM;IAElE,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACtB,YAAYU,WAAWa,IAAI;IAEnE,MAAMC,eAAe,MAAMzB,oBAAoB;QAC7CU;QACAE;QACAC;QACAG,OAAOC;IACT;IAEA,IAAIQ,aAAaC,UAAU,EAAE;QAC3B,OAAOZ,cAAc,QAAQ,OAAQW,aAAaE,GAAG;IACvD;IAEA,IAAIF,aAAaG,WAAW,KAAKC,WAAW;QAC1CZ,WAAW;YAAEa,IAAI;gBAAEC,QAAQN,aAAaG,WAAW;YAAC;QAAE;IACxD;IAEA,IAAII;IAEJ,MAAM,EAAEC,KAAK,EAAEC,YAAY,EAAElB,KAAK,EAAE,GAAGb,WAAW;QAChDgC,SAAS,IAAI;QACbC,QAAQzB,WAAW0B,eAAe;QAClCC,QAAQzB,KAAKyB;QACbjB;QACAL,OAAOC;IACT;IAEA,MAAMsB,KAAKjC,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEM;IAEzD,MAAM2B,uBAAuB,MAAMpC,eAAe;QAChD+B,SAAS,IAAI;QACbI;QACAN;QACAQ,OAAO,CAAC,EAAEA,KAAK,EAAE,GAAKA,MAAMC,KAAK,CAAC;QAClCR;QACAb;QACAL;IACF;IAEA,IAAIwB,sBAAsB,CAAC,EAAE,EAAEV,IAAI;QACjCE,cAAc,MAAMO,GAAGE,KAAK,CAACpB,UAAU,CAACsB,SAAS,CAAC;YAChD3B,OAAOjB,GAAG,IAAI,CAAC6C,MAAM,CAACvB,UAAU,CAACS,EAAE,EAAEU,oBAAoB,CAAC,EAAE,CAACV,EAAE;QACjE;IACF,OAAO;QACL,MAAMe,eAAe3C,kBAAkB;YACrCiC,SAAS,IAAI;YACbW,OAAO;YACPV,QAAQzB,WAAW0B,eAAe;YAClCU,WAAW;YACXhC;YACAM;QACF;QAEAwB,aAAa7B,KAAK,GAAGA;QAErBgB,cAAc,MAAMO,GAAGE,KAAK,CAACpB,UAAU,CAACsB,SAAS,CAACE;IACpD;IAEA,IAAI,CAACb,aAAa;QAChB,OAAO;IACT;IAEA,MAAMgB,SACJlC,cAAc,QACV,OACAT,UAAU;QACR8B,SAAS,IAAI;QACbf,QAAQ,IAAI,CAACF,OAAO,CAACE,MAAM;QAC3B6B,MAAMjB;QACNI,QAAQzB,WAAW0B,eAAe;QAClCU,WAAW;QACX1B;IACF;IAEN,MAAM,IAAI,CAAC6B,WAAW,CAAC;QACrBX;QACAlB;QACAL,OAAOjB,GAAG,IAAI,CAAC6C,MAAM,CAACvB,UAAU,CAACS,EAAE,EAAEE,YAAYF,EAAE;IACrD;IAEAtB,UAAU,IAAI;IAEd,OAAOwC;AACT,EAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DBQueryConfig } from 'drizzle-orm';
|
|
2
|
-
import type { FlattenedField, JoinQuery, SelectType } from 'payload';
|
|
2
|
+
import type { FlattenedField, JoinQuery, PayloadRequest, SelectType } from 'payload';
|
|
3
3
|
import type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js';
|
|
4
4
|
type BuildFindQueryArgs = {
|
|
5
5
|
adapter: DrizzleAdapter;
|
|
@@ -13,6 +13,7 @@ type BuildFindQueryArgs = {
|
|
|
13
13
|
*/
|
|
14
14
|
joins?: BuildQueryJoinAliases;
|
|
15
15
|
locale?: string;
|
|
16
|
+
req?: Partial<PayloadRequest>;
|
|
16
17
|
select?: SelectType;
|
|
17
18
|
tableName: string;
|
|
18
19
|
versions?: boolean;
|
|
@@ -22,6 +23,6 @@ export type Result = {
|
|
|
22
23
|
_locales?: DBQueryConfig<'many', true, any, any>;
|
|
23
24
|
} & DBQueryConfig<'many', true, any, any>;
|
|
24
25
|
} & DBQueryConfig<'many', true, any, any>;
|
|
25
|
-
export declare const buildFindManyArgs: ({ adapter, collectionSlug, depth, draftsEnabled, fields, joinQuery, joins, locale, select, tableName, versions, }: BuildFindQueryArgs) => Result;
|
|
26
|
+
export declare const buildFindManyArgs: ({ adapter, collectionSlug, depth, draftsEnabled, fields, joinQuery, joins, locale, req, select, tableName, versions, }: BuildFindQueryArgs) => Result;
|
|
26
27
|
export {};
|
|
27
28
|
//# sourceMappingURL=buildFindManyArgs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildFindManyArgs.d.ts","sourceRoot":"","sources":["../../src/find/buildFindManyArgs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"buildFindManyArgs.d.ts","sourceRoot":"","sources":["../../src/find/buildFindManyArgs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIxE,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;KACjD,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAC1C,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAIzC,eAAO,MAAM,iBAAiB,2HAa3B,kBAAkB,KAAG,MAmGvB,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { getSelectMode } from 'payload/shared';
|
|
|
2
2
|
import { traverseFields } from './traverseFields.js';
|
|
3
3
|
// Generate the Drizzle query for findMany based on
|
|
4
4
|
// a collection field structure
|
|
5
|
-
export const buildFindManyArgs = ({ adapter, collectionSlug, depth, draftsEnabled, fields, joinQuery, joins = [], locale, select, tableName, versions })=>{
|
|
5
|
+
export const buildFindManyArgs = ({ adapter, collectionSlug, depth, draftsEnabled, fields, joinQuery, joins = [], locale, req, select, tableName, versions })=>{
|
|
6
6
|
const result = {
|
|
7
7
|
extras: {},
|
|
8
8
|
with: {}
|
|
@@ -40,6 +40,7 @@ export const buildFindManyArgs = ({ adapter, collectionSlug, depth, draftsEnable
|
|
|
40
40
|
joins,
|
|
41
41
|
locale,
|
|
42
42
|
path: '',
|
|
43
|
+
req,
|
|
43
44
|
select,
|
|
44
45
|
selectMode: select ? getSelectMode(select) : undefined,
|
|
45
46
|
tablePath: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/find/buildFindManyArgs.ts"],"sourcesContent":["import type { DBQueryConfig } from 'drizzle-orm'\nimport type { FlattenedField, JoinQuery, SelectType } from 'payload'\n\nimport { getSelectMode } from 'payload/shared'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\n\nimport { traverseFields } from './traverseFields.js'\n\ntype BuildFindQueryArgs = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n depth: number\n draftsEnabled?: boolean\n fields: FlattenedField[]\n joinQuery?: JoinQuery\n /**\n * The joins array will be mutated by pushing any joins needed for the where queries of join field joins\n */\n joins?: BuildQueryJoinAliases\n locale?: string\n select?: SelectType\n tableName: string\n versions?: boolean\n}\n\nexport type Result = {\n with?: {\n _locales?: DBQueryConfig<'many', true, any, any>\n } & DBQueryConfig<'many', true, any, any>\n} & DBQueryConfig<'many', true, any, any>\n\n// Generate the Drizzle query for findMany based on\n// a collection field structure\nexport const buildFindManyArgs = ({\n adapter,\n collectionSlug,\n depth,\n draftsEnabled,\n fields,\n joinQuery,\n joins = [],\n locale,\n select,\n tableName,\n versions,\n}: BuildFindQueryArgs): Result => {\n const result: Result = {\n extras: {},\n with: {},\n }\n\n if (select) {\n result.columns = {\n id: true,\n }\n }\n\n const _locales: Result = {\n columns: select\n ? { _locale: true }\n : {\n id: false,\n _parentID: false,\n },\n extras: {},\n with: {},\n }\n\n const withTabledFields = select\n ? {}\n : {\n numbers: true,\n rels: true,\n texts: true,\n }\n\n traverseFields({\n _locales,\n adapter,\n collectionSlug,\n currentArgs: result,\n currentTableName: tableName,\n depth,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n path: '',\n select,\n selectMode: select ? getSelectMode(select) : undefined,\n tablePath: '',\n topLevelArgs: result,\n topLevelTableName: tableName,\n versions,\n withTabledFields,\n })\n\n if (adapter.tables[`${tableName}_texts`] && withTabledFields.texts) {\n result.with._texts = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}_numbers`] && withTabledFields.numbers) {\n result.with._numbers = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.relationshipsSuffix}`] && withTabledFields.rels) {\n result.with._rels = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (\n adapter.tables[`${tableName}${adapter.localesSuffix}`] &&\n (!select || Object.keys(_locales.columns).length > 1)\n ) {\n result.with._locales = _locales\n }\n\n // Delete properties that are empty\n for (const key of Object.keys(result)) {\n if (!Object.keys(result[key]).length) {\n delete result[key]\n }\n }\n\n return result\n}\n"],"names":["getSelectMode","traverseFields","buildFindManyArgs","adapter","collectionSlug","depth","draftsEnabled","fields","joinQuery","joins","locale","select","tableName","versions","result","extras","with","columns","id","_locales","_locale","_parentID","withTabledFields","numbers","rels","texts","currentArgs","currentTableName","path","selectMode","undefined","tablePath","topLevelArgs","topLevelTableName","tables","_texts","parent","orderBy","order","asc","ASC","_numbers","relationshipsSuffix","_rels","localesSuffix","Object","keys","length","key"],"mappings":"AAGA,SAASA,aAAa,QAAQ,iBAAgB;AAI9C,SAASC,cAAc,QAAQ,sBAAqB;
|
|
1
|
+
{"version":3,"sources":["../../src/find/buildFindManyArgs.ts"],"sourcesContent":["import type { DBQueryConfig } from 'drizzle-orm'\nimport type { FlattenedField, JoinQuery, PayloadRequest, SelectType } from 'payload'\n\nimport { getSelectMode } from 'payload/shared'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\n\nimport { traverseFields } from './traverseFields.js'\n\ntype BuildFindQueryArgs = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n depth: number\n draftsEnabled?: boolean\n fields: FlattenedField[]\n joinQuery?: JoinQuery\n /**\n * The joins array will be mutated by pushing any joins needed for the where queries of join field joins\n */\n joins?: BuildQueryJoinAliases\n locale?: string\n req?: Partial<PayloadRequest>\n select?: SelectType\n tableName: string\n versions?: boolean\n}\n\nexport type Result = {\n with?: {\n _locales?: DBQueryConfig<'many', true, any, any>\n } & DBQueryConfig<'many', true, any, any>\n} & DBQueryConfig<'many', true, any, any>\n\n// Generate the Drizzle query for findMany based on\n// a collection field structure\nexport const buildFindManyArgs = ({\n adapter,\n collectionSlug,\n depth,\n draftsEnabled,\n fields,\n joinQuery,\n joins = [],\n locale,\n req,\n select,\n tableName,\n versions,\n}: BuildFindQueryArgs): Result => {\n const result: Result = {\n extras: {},\n with: {},\n }\n\n if (select) {\n result.columns = {\n id: true,\n }\n }\n\n const _locales: Result = {\n columns: select\n ? { _locale: true }\n : {\n id: false,\n _parentID: false,\n },\n extras: {},\n with: {},\n }\n\n const withTabledFields = select\n ? {}\n : {\n numbers: true,\n rels: true,\n texts: true,\n }\n\n traverseFields({\n _locales,\n adapter,\n collectionSlug,\n currentArgs: result,\n currentTableName: tableName,\n depth,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n path: '',\n req,\n select,\n selectMode: select ? getSelectMode(select) : undefined,\n tablePath: '',\n topLevelArgs: result,\n topLevelTableName: tableName,\n versions,\n withTabledFields,\n })\n\n if (adapter.tables[`${tableName}_texts`] && withTabledFields.texts) {\n result.with._texts = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}_numbers`] && withTabledFields.numbers) {\n result.with._numbers = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.relationshipsSuffix}`] && withTabledFields.rels) {\n result.with._rels = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (\n adapter.tables[`${tableName}${adapter.localesSuffix}`] &&\n (!select || Object.keys(_locales.columns).length > 1)\n ) {\n result.with._locales = _locales\n }\n\n // Delete properties that are empty\n for (const key of Object.keys(result)) {\n if (!Object.keys(result[key]).length) {\n delete result[key]\n }\n }\n\n return result\n}\n"],"names":["getSelectMode","traverseFields","buildFindManyArgs","adapter","collectionSlug","depth","draftsEnabled","fields","joinQuery","joins","locale","req","select","tableName","versions","result","extras","with","columns","id","_locales","_locale","_parentID","withTabledFields","numbers","rels","texts","currentArgs","currentTableName","path","selectMode","undefined","tablePath","topLevelArgs","topLevelTableName","tables","_texts","parent","orderBy","order","asc","ASC","_numbers","relationshipsSuffix","_rels","localesSuffix","Object","keys","length","key"],"mappings":"AAGA,SAASA,aAAa,QAAQ,iBAAgB;AAI9C,SAASC,cAAc,QAAQ,sBAAqB;AA0BpD,mDAAmD;AACnD,+BAA+B;AAC/B,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,OAAO,EACPC,cAAc,EACdC,KAAK,EACLC,aAAa,EACbC,MAAM,EACNC,SAAS,EACTC,QAAQ,EAAE,EACVC,MAAM,EACNC,GAAG,EACHC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACW;IACnB,MAAMC,SAAiB;QACrBC,QAAQ,CAAC;QACTC,MAAM,CAAC;IACT;IAEA,IAAIL,QAAQ;QACVG,OAAOG,OAAO,GAAG;YACfC,IAAI;QACN;IACF;IAEA,MAAMC,WAAmB;QACvBF,SAASN,SACL;YAAES,SAAS;QAAK,IAChB;YACEF,IAAI;YACJG,WAAW;QACb;QACJN,QAAQ,CAAC;QACTC,MAAM,CAAC;IACT;IAEA,MAAMM,mBAAmBX,SACrB,CAAC,IACD;QACEY,SAAS;QACTC,MAAM;QACNC,OAAO;IACT;IAEJzB,eAAe;QACbmB;QACAjB;QACAC;QACAuB,aAAaZ;QACba,kBAAkBf;QAClBR;QACAC;QACAC;QACAC;QACAC;QACAC;QACAmB,MAAM;QACNlB;QACAC;QACAkB,YAAYlB,SAASZ,cAAcY,UAAUmB;QAC7CC,WAAW;QACXC,cAAclB;QACdmB,mBAAmBrB;QACnBC;QACAS;IACF;IAEA,IAAIpB,QAAQgC,MAAM,CAAC,GAAGtB,UAAU,MAAM,CAAC,CAAC,IAAIU,iBAAiBG,KAAK,EAAE;QAClEX,OAAOE,IAAI,CAACmB,MAAM,GAAG;YACnBlB,SAAS;gBACPC,IAAI;gBACJkB,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIpC,QAAQgC,MAAM,CAAC,GAAGtB,UAAU,QAAQ,CAAC,CAAC,IAAIU,iBAAiBC,OAAO,EAAE;QACtET,OAAOE,IAAI,CAACyB,QAAQ,GAAG;YACrBxB,SAAS;gBACPC,IAAI;gBACJkB,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIpC,QAAQgC,MAAM,CAAC,GAAGtB,YAAYV,QAAQwC,mBAAmB,EAAE,CAAC,IAAIpB,iBAAiBE,IAAI,EAAE;QACzFV,OAAOE,IAAI,CAAC2B,KAAK,GAAG;YAClB1B,SAAS;gBACPC,IAAI;gBACJkB,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IACEpC,QAAQgC,MAAM,CAAC,GAAGtB,YAAYV,QAAQ0C,aAAa,EAAE,CAAC,IACrD,CAAA,CAACjC,UAAUkC,OAAOC,IAAI,CAAC3B,SAASF,OAAO,EAAE8B,MAAM,GAAG,CAAA,GACnD;QACAjC,OAAOE,IAAI,CAACG,QAAQ,GAAGA;IACzB;IAEA,mCAAmC;IACnC,KAAK,MAAM6B,OAAOH,OAAOC,IAAI,CAAChC,QAAS;QACrC,IAAI,CAAC+B,OAAOC,IAAI,CAAChC,MAAM,CAACkC,IAAI,EAAED,MAAM,EAAE;YACpC,OAAOjC,MAAM,CAACkC,IAAI;QACpB;IACF;IAEA,OAAOlC;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AASjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,8KAgBlB,IAAI;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AASjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,8KAgBlB,IAAI;;;;;;;;;;;EAyMN,CAAA"}
|
package/dist/find/findMany.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { asc, desc, inArray, max, min } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (!column || column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const db = await getTransaction(adapter, req)\n\n const oneToManyJoinedTableNames = new Set(\n joins.filter((j) => j.isOneToMany).map((j) => getNameFromDrizzleTable(j.table)),\n )\n\n const hasSortOnOneToMany =\n oneToManyJoinedTableNames.size > 0 &&\n orderBy?.some(({ column }) =>\n oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table)),\n )\n\n let selectDistinctResult: { id: number | string }[] | undefined\n\n // avoid duplicate results by using a group query instead of select distinct when there is a sort on a one-to-many joined table\n if (hasSortOnOneToMany) {\n const mainTable = adapter.tables[tableName]\n let groupQuery = (db as any).select({ id: mainTable.id }).from(mainTable).$dynamic()\n\n if (where) {\n groupQuery = groupQuery.where(where)\n }\n\n joins.forEach(({ type, condition, table }) => {\n groupQuery = groupQuery[type ?? 'leftJoin'](table, condition)\n })\n\n groupQuery = groupQuery.groupBy(mainTable.id)\n\n groupQuery = groupQuery.orderBy(() =>\n orderBy.map(({ column, order }) => {\n if (oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table))) {\n return order === asc ? asc(min(column)) : desc(max(column))\n }\n return order(column)\n }),\n )\n\n selectDistinctResult = await groupQuery.offset(offset).limit(limit)\n } else {\n selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n }\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["asc","desc","inArray","max","min","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","sort","tableName","versions","where","whereArg","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","table","db","oneToManyJoinedTableNames","Set","filter","j","isOneToMany","map","hasSortOnOneToMany","size","has","selectDistinctResult","mainTable","tables","groupQuery","id","from","$dynamic","forEach","type","condition","groupBy","order","query","length","docs","nextPage","prevPage","i","Object","keys","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { asc, desc, inArray, max, min } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n req,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (!column || column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const db = await getTransaction(adapter, req)\n\n const oneToManyJoinedTableNames = new Set(\n joins.filter((j) => j.isOneToMany).map((j) => getNameFromDrizzleTable(j.table)),\n )\n\n const hasSortOnOneToMany =\n oneToManyJoinedTableNames.size > 0 &&\n orderBy?.some(({ column }) =>\n oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table)),\n )\n\n let selectDistinctResult: { id: number | string }[] | undefined\n\n // avoid duplicate results by using a group query instead of select distinct when there is a sort on a one-to-many joined table\n if (hasSortOnOneToMany) {\n const mainTable = adapter.tables[tableName]\n let groupQuery = (db as any).select({ id: mainTable.id }).from(mainTable).$dynamic()\n\n if (where) {\n groupQuery = groupQuery.where(where)\n }\n\n joins.forEach(({ type, condition, table }) => {\n groupQuery = groupQuery[type ?? 'leftJoin'](table, condition)\n })\n\n groupQuery = groupQuery.groupBy(mainTable.id)\n\n groupQuery = groupQuery.orderBy(() =>\n orderBy.map(({ column, order }) => {\n if (oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table))) {\n return order === asc ? asc(min(column)) : desc(max(column))\n }\n return order(column)\n }),\n )\n\n selectDistinctResult = await groupQuery.offset(offset).limit(limit)\n } else {\n selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n }\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["asc","desc","inArray","max","min","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","sort","tableName","versions","where","whereArg","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","table","db","oneToManyJoinedTableNames","Set","filter","j","isOneToMany","map","hasSortOnOneToMany","size","has","selectDistinctResult","mainTable","tables","groupQuery","id","from","$dynamic","forEach","type","condition","groupBy","order","query","length","docs","nextPage","prevPage","i","Object","keys","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FlattenedField, JoinQuery, PayloadRequest, SelectMode, SelectType } from 'payload';
|
|
2
2
|
import type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js';
|
|
3
3
|
import type { Result } from './buildFindManyArgs.js';
|
|
4
4
|
type TraverseFieldArgs = {
|
|
@@ -16,6 +16,7 @@ type TraverseFieldArgs = {
|
|
|
16
16
|
locale?: string;
|
|
17
17
|
parentIsLocalized?: boolean;
|
|
18
18
|
path: string;
|
|
19
|
+
req?: Partial<PayloadRequest>;
|
|
19
20
|
select?: SelectType;
|
|
20
21
|
selectAllOnCurrentLevel?: boolean;
|
|
21
22
|
selectMode?: SelectMode;
|
|
@@ -29,6 +30,6 @@ type TraverseFieldArgs = {
|
|
|
29
30
|
texts?: boolean;
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
|
-
export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery, joins, locale, parentIsLocalized, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
|
|
33
|
+
export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery, joins, locale, parentIsLocalized, path, req, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
|
|
33
34
|
export {};
|
|
34
35
|
//# sourceMappingURL=traverseFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EAEX,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAA;AACvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA6EpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,sSAwBxB,iBAAiB,4BAyzBnB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { and, asc, count, desc, eq, getTableName, or, sql } from 'drizzle-orm';
|
|
2
|
-
import { appendVersionToQueryKey, buildVersionCollectionFields, combineQueries, getFieldByPath, getQueryDraftsSort } from 'payload';
|
|
2
|
+
import { appendVersionToQueryKey, buildVersionCollectionFields, combineQueries, getBranchPredicateSync, getFieldByPath, getQueryDraftsSort } from 'payload';
|
|
3
3
|
import { fieldIsVirtual, fieldShouldBeLocalized, hasDraftsEnabled } from 'payload/shared';
|
|
4
4
|
import toSnakeCase from 'to-snake-case';
|
|
5
5
|
import { buildQuery } from '../queries/buildQuery.js';
|
|
@@ -69,7 +69,7 @@ const buildSQLWhere = (where, alias)=>{
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
-
export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery = {}, joins, locale, parentIsLocalized = false, path, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields })=>{
|
|
72
|
+
export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery = {}, joins, locale, parentIsLocalized = false, path, req, select, selectAllOnCurrentLevel = false, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields })=>{
|
|
73
73
|
fields.forEach((field)=>{
|
|
74
74
|
if (fieldIsVirtual(field)) {
|
|
75
75
|
return;
|
|
@@ -472,6 +472,20 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
472
472
|
]
|
|
473
473
|
};
|
|
474
474
|
}
|
|
475
|
+
// A join subquery must carry the same branch predicate as the
|
|
476
|
+
// top-level read, or a branch would see main's related documents.
|
|
477
|
+
const joinBranchPredicate = getBranchPredicateSync({
|
|
478
|
+
collectionSlug: field.collection,
|
|
479
|
+
req
|
|
480
|
+
});
|
|
481
|
+
if (joinBranchPredicate) {
|
|
482
|
+
joinQueryWhere = {
|
|
483
|
+
and: [
|
|
484
|
+
joinQueryWhere,
|
|
485
|
+
joinBranchPredicate
|
|
486
|
+
]
|
|
487
|
+
};
|
|
488
|
+
}
|
|
475
489
|
if (useDrafts) {
|
|
476
490
|
joinQueryWhere = combineQueries(appendVersionToQueryKey(joinQueryWhere), {
|
|
477
491
|
latest: {
|
|
@@ -511,6 +525,15 @@ export const traverseFields = ({ _locales, adapter, collectionSlug, currentArgs,
|
|
|
511
525
|
if (useDrafts) {
|
|
512
526
|
selectFields.parent = newAliasTable.parent;
|
|
513
527
|
}
|
|
528
|
+
// Surface the canonical document ID rather than the shadow row's own
|
|
529
|
+
// primary key, so join results address documents the same way every
|
|
530
|
+
// other read does.
|
|
531
|
+
if (joinBranchPredicate && newAliasTable._branchDocID) {
|
|
532
|
+
// `selectFields` is typed as a column map, but Drizzle accepts an
|
|
533
|
+
// aliased expression in the same position — as the sibling
|
|
534
|
+
// `sql\`...\`.as()` assignments above already rely on.
|
|
535
|
+
selectFields.id = sql`COALESCE(${newAliasTable._branchDocID}, ${newAliasTable.id})`.as('id');
|
|
536
|
+
}
|
|
514
537
|
let query = db.select(selectFields).from(newAliasTable).where(subQueryWhere).orderBy(()=>orderBy.map(({ column, order })=>order(column))).$dynamic();
|
|
515
538
|
joins.forEach(({ type, condition, table })=>{
|
|
516
539
|
query = query[type ?? 'leftJoin'](table, condition);
|