@payloadcms/drizzle 3.1.1-canary.c40ff01 → 3.1.1

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.
Files changed (119) hide show
  1. package/dist/count.js +1 -1
  2. package/dist/count.js.map +1 -1
  3. package/dist/countGlobalVersions.js +1 -1
  4. package/dist/countGlobalVersions.js.map +1 -1
  5. package/dist/countVersions.js +1 -1
  6. package/dist/countVersions.js.map +1 -1
  7. package/dist/create.js +1 -1
  8. package/dist/create.js.map +1 -1
  9. package/dist/createGlobal.js +1 -1
  10. package/dist/createGlobal.js.map +1 -1
  11. package/dist/createGlobalVersion.js +1 -1
  12. package/dist/createGlobalVersion.js.map +1 -1
  13. package/dist/createVersion.js +1 -1
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/deleteMany.js +1 -1
  16. package/dist/deleteMany.js.map +1 -1
  17. package/dist/deleteOne.js +3 -3
  18. package/dist/deleteOne.js.map +1 -1
  19. package/dist/deleteVersions.js +1 -1
  20. package/dist/deleteVersions.js.map +1 -1
  21. package/dist/find/buildFindManyArgs.d.ts +2 -2
  22. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  23. package/dist/find/buildFindManyArgs.js.map +1 -1
  24. package/dist/find/findMany.d.ts +2 -2
  25. package/dist/find/findMany.d.ts.map +1 -1
  26. package/dist/find/findMany.js.map +1 -1
  27. package/dist/find/traverseFields.d.ts +2 -2
  28. package/dist/find/traverseFields.d.ts.map +1 -1
  29. package/dist/find/traverseFields.js +312 -359
  30. package/dist/find/traverseFields.js.map +1 -1
  31. package/dist/find.js +1 -1
  32. package/dist/find.js.map +1 -1
  33. package/dist/findGlobal.js +1 -1
  34. package/dist/findGlobal.js.map +1 -1
  35. package/dist/findGlobalVersions.js +1 -1
  36. package/dist/findGlobalVersions.js.map +1 -1
  37. package/dist/findOne.js +1 -1
  38. package/dist/findOne.js.map +1 -1
  39. package/dist/findVersions.js +1 -1
  40. package/dist/findVersions.js.map +1 -1
  41. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts +2 -0
  42. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -0
  43. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +16 -0
  44. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +1 -0
  45. package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts +2 -0
  46. package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts.map +1 -0
  47. package/dist/postgres/createJSONQuery/formatJSONPathSegment.js +5 -0
  48. package/dist/postgres/createJSONQuery/formatJSONPathSegment.js.map +1 -0
  49. package/dist/postgres/init.js +4 -4
  50. package/dist/postgres/init.js.map +1 -1
  51. package/dist/postgres/schema/build.d.ts +2 -2
  52. package/dist/postgres/schema/build.d.ts.map +1 -1
  53. package/dist/postgres/schema/build.js.map +1 -1
  54. package/dist/postgres/schema/idToUUID.d.ts +2 -2
  55. package/dist/postgres/schema/idToUUID.d.ts.map +1 -1
  56. package/dist/postgres/schema/idToUUID.js.map +1 -1
  57. package/dist/postgres/schema/setColumnID.d.ts +2 -2
  58. package/dist/postgres/schema/setColumnID.d.ts.map +1 -1
  59. package/dist/postgres/schema/setColumnID.js +1 -3
  60. package/dist/postgres/schema/setColumnID.js.map +1 -1
  61. package/dist/postgres/schema/traverseFields.d.ts +2 -2
  62. package/dist/postgres/schema/traverseFields.d.ts.map +1 -1
  63. package/dist/postgres/schema/traverseFields.js +38 -182
  64. package/dist/postgres/schema/traverseFields.js.map +1 -1
  65. package/dist/queries/buildAndOrConditions.d.ts +2 -2
  66. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  67. package/dist/queries/buildAndOrConditions.js.map +1 -1
  68. package/dist/queries/buildOrderBy.d.ts +2 -2
  69. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  70. package/dist/queries/buildOrderBy.js.map +1 -1
  71. package/dist/queries/buildQuery.d.ts +2 -2
  72. package/dist/queries/buildQuery.d.ts.map +1 -1
  73. package/dist/queries/buildQuery.js.map +1 -1
  74. package/dist/queries/getTableColumnFromPath.d.ts +3 -3
  75. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  76. package/dist/queries/getTableColumnFromPath.js +34 -59
  77. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  78. package/dist/queries/parseParams.d.ts +2 -2
  79. package/dist/queries/parseParams.d.ts.map +1 -1
  80. package/dist/queries/parseParams.js.map +1 -1
  81. package/dist/queryDrafts.js +1 -1
  82. package/dist/queryDrafts.js.map +1 -1
  83. package/dist/transform/read/index.d.ts +2 -2
  84. package/dist/transform/read/index.d.ts.map +1 -1
  85. package/dist/transform/read/index.js.map +1 -1
  86. package/dist/transform/read/traverseFields.d.ts +2 -2
  87. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  88. package/dist/transform/read/traverseFields.js +380 -421
  89. package/dist/transform/read/traverseFields.js.map +1 -1
  90. package/dist/transform/write/array.d.ts +2 -2
  91. package/dist/transform/write/array.d.ts.map +1 -1
  92. package/dist/transform/write/array.js +1 -1
  93. package/dist/transform/write/array.js.map +1 -1
  94. package/dist/transform/write/blocks.d.ts +2 -2
  95. package/dist/transform/write/blocks.d.ts.map +1 -1
  96. package/dist/transform/write/blocks.js +1 -1
  97. package/dist/transform/write/blocks.js.map +1 -1
  98. package/dist/transform/write/index.d.ts +2 -2
  99. package/dist/transform/write/index.d.ts.map +1 -1
  100. package/dist/transform/write/index.js.map +1 -1
  101. package/dist/transform/write/traverseFields.d.ts +2 -2
  102. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  103. package/dist/transform/write/traverseFields.js +53 -171
  104. package/dist/transform/write/traverseFields.js.map +1 -1
  105. package/dist/update.js +2 -2
  106. package/dist/update.js.map +1 -1
  107. package/dist/updateGlobal.js +1 -1
  108. package/dist/updateGlobal.js.map +1 -1
  109. package/dist/updateGlobalVersion.js +1 -1
  110. package/dist/updateGlobalVersion.js.map +1 -1
  111. package/dist/updateVersion.js +1 -1
  112. package/dist/updateVersion.js.map +1 -1
  113. package/dist/upsertRow/index.d.ts.map +1 -1
  114. package/dist/upsertRow/index.js +8 -8
  115. package/dist/upsertRow/index.js.map +1 -1
  116. package/dist/upsertRow/types.d.ts +2 -2
  117. package/dist/upsertRow/types.d.ts.map +1 -1
  118. package/dist/upsertRow/types.js.map +1 -1
  119. package/package.json +4 -4
@@ -1,3 +1,3 @@
1
- import type { Field } from 'payload';
2
- export declare const idToUUID: (fields: Field[]) => Field[];
1
+ import type { FlattenedField } from 'payload';
2
+ export declare const idToUUID: (fields: FlattenedField[]) => FlattenedField[];
3
3
  //# sourceMappingURL=idToUUID.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"idToUUID.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/idToUUID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,eAAO,MAAM,QAAQ,WAAY,KAAK,EAAE,KAAG,KAAK,EAU5C,CAAA"}
1
+ {"version":3,"file":"idToUUID.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/idToUUID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,eAAO,MAAM,QAAQ,WAAY,cAAc,EAAE,KAAG,cAAc,EAU9D,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/idToUUID.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nexport const idToUUID = (fields: Field[]): Field[] =>\n fields.map((field) => {\n if ('name' in field && field.name === 'id') {\n return {\n ...field,\n name: '_uuid',\n }\n }\n\n return field\n })\n"],"names":["idToUUID","fields","map","field","name"],"mappings":"AAEA,OAAO,MAAMA,WAAW,CAACC,SACvBA,OAAOC,GAAG,CAAC,CAACC;QACV,IAAI,UAAUA,SAASA,MAAMC,IAAI,KAAK,MAAM;YAC1C,OAAO;gBACL,GAAGD,KAAK;gBACRC,MAAM;YACR;QACF;QAEA,OAAOD;IACT,GAAE"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/idToUUID.ts"],"sourcesContent":["import type { FlattenedField } from 'payload'\n\nexport const idToUUID = (fields: FlattenedField[]): FlattenedField[] =>\n fields.map((field) => {\n if ('name' in field && field.name === 'id') {\n return {\n ...field,\n name: '_uuid',\n }\n }\n\n return field\n })\n"],"names":["idToUUID","fields","map","field","name"],"mappings":"AAEA,OAAO,MAAMA,WAAW,CAACC,SACvBA,OAAOC,GAAG,CAAC,CAACC;QACV,IAAI,UAAUA,SAASA,MAAMC,IAAI,KAAK,MAAM;YAC1C,OAAO;gBACL,GAAGD,KAAK;gBACRC,MAAM;YACR;QACF;QAEA,OAAOD;IACT,GAAE"}
@@ -1,10 +1,10 @@
1
1
  import type { PgColumnBuilder } from 'drizzle-orm/pg-core';
2
- import { type Field } from 'payload';
2
+ import type { FlattenedField } from 'payload';
3
3
  import type { BasePostgresAdapter, IDType } from '../types.js';
4
4
  type Args = {
5
5
  adapter: BasePostgresAdapter;
6
6
  columns: Record<string, PgColumnBuilder>;
7
- fields: Field[];
7
+ fields: FlattenedField[];
8
8
  };
9
9
  export declare const setColumnID: ({ adapter, columns, fields }: Args) => IDType;
10
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"setColumnID.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/setColumnID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAG1D,OAAO,EAAE,KAAK,KAAK,EAAyB,MAAM,SAAS,CAAA;AAG3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAE9D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AACD,eAAO,MAAM,WAAW,iCAAkC,IAAI,KAAG,MAuBhE,CAAA"}
1
+ {"version":3,"file":"setColumnID.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/setColumnID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAE9D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,CAAA;AACD,eAAO,MAAM,WAAW,iCAAkC,IAAI,KAAG,MAqBhE,CAAA"}
@@ -1,8 +1,6 @@
1
1
  import { numeric, serial, uuid, varchar } from 'drizzle-orm/pg-core';
2
- import { flattenTopLevelFields } from 'payload';
3
- import { fieldAffectsData } from 'payload/shared';
4
2
  export const setColumnID = ({ adapter, columns, fields })=>{
5
- const idField = flattenTopLevelFields(fields).find((field)=>fieldAffectsData(field) && field.name === 'id');
3
+ const idField = fields.find((field)=>field.name === 'id');
6
4
  if (idField) {
7
5
  if (idField.type === 'number') {
8
6
  columns.id = numeric('id').primaryKey();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/setColumnID.ts"],"sourcesContent":["import type { PgColumnBuilder } from 'drizzle-orm/pg-core'\n\nimport { numeric, serial, uuid, varchar } from 'drizzle-orm/pg-core'\nimport { type Field, flattenTopLevelFields } from 'payload'\nimport { fieldAffectsData } from 'payload/shared'\n\nimport type { BasePostgresAdapter, IDType } from '../types.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columns: Record<string, PgColumnBuilder>\n fields: Field[]\n}\nexport const setColumnID = ({ adapter, columns, fields }: Args): IDType => {\n const idField = flattenTopLevelFields(fields).find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (idField) {\n if (idField.type === 'number') {\n columns.id = numeric('id').primaryKey()\n return 'numeric'\n }\n\n if (idField.type === 'text') {\n columns.id = varchar('id').primaryKey()\n return 'varchar'\n }\n }\n\n if (adapter.idType === 'uuid') {\n columns.id = uuid('id').defaultRandom().primaryKey()\n return 'uuid'\n }\n\n columns.id = serial('id').primaryKey()\n return 'integer'\n}\n"],"names":["numeric","serial","uuid","varchar","flattenTopLevelFields","fieldAffectsData","setColumnID","adapter","columns","fields","idField","find","field","name","type","id","primaryKey","idType","defaultRandom"],"mappings":"AAEA,SAASA,OAAO,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,QAAQ,sBAAqB;AACpE,SAAqBC,qBAAqB,QAAQ,UAAS;AAC3D,SAASC,gBAAgB,QAAQ,iBAAgB;AASjD,OAAO,MAAMC,cAAc,CAAC,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,EAAQ;IAC5D,MAAMC,UAAUN,sBAAsBK,QAAQE,IAAI,CAChD,CAACC,QAAUP,iBAAiBO,UAAUA,MAAMC,IAAI,KAAK;IAEvD,IAAIH,SAAS;QACX,IAAIA,QAAQI,IAAI,KAAK,UAAU;YAC7BN,QAAQO,EAAE,GAAGf,QAAQ,MAAMgB,UAAU;YACrC,OAAO;QACT;QAEA,IAAIN,QAAQI,IAAI,KAAK,QAAQ;YAC3BN,QAAQO,EAAE,GAAGZ,QAAQ,MAAMa,UAAU;YACrC,OAAO;QACT;IACF;IAEA,IAAIT,QAAQU,MAAM,KAAK,QAAQ;QAC7BT,QAAQO,EAAE,GAAGb,KAAK,MAAMgB,aAAa,GAAGF,UAAU;QAClD,OAAO;IACT;IAEAR,QAAQO,EAAE,GAAGd,OAAO,MAAMe,UAAU;IACpC,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/setColumnID.ts"],"sourcesContent":["import type { PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { FlattenedField } from 'payload'\n\nimport { numeric, serial, uuid, varchar } from 'drizzle-orm/pg-core'\n\nimport type { BasePostgresAdapter, IDType } from '../types.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columns: Record<string, PgColumnBuilder>\n fields: FlattenedField[]\n}\nexport const setColumnID = ({ adapter, columns, fields }: Args): IDType => {\n const idField = fields.find((field) => field.name === 'id')\n if (idField) {\n if (idField.type === 'number') {\n columns.id = numeric('id').primaryKey()\n return 'numeric'\n }\n\n if (idField.type === 'text') {\n columns.id = varchar('id').primaryKey()\n return 'varchar'\n }\n }\n\n if (adapter.idType === 'uuid') {\n columns.id = uuid('id').defaultRandom().primaryKey()\n return 'uuid'\n }\n\n columns.id = serial('id').primaryKey()\n return 'integer'\n}\n"],"names":["numeric","serial","uuid","varchar","setColumnID","adapter","columns","fields","idField","find","field","name","type","id","primaryKey","idType","defaultRandom"],"mappings":"AAGA,SAASA,OAAO,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,QAAQ,sBAAqB;AASpE,OAAO,MAAMC,cAAc,CAAC,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,EAAQ;IAC5D,MAAMC,UAAUD,OAAOE,IAAI,CAAC,CAACC,QAAUA,MAAMC,IAAI,KAAK;IACtD,IAAIH,SAAS;QACX,IAAIA,QAAQI,IAAI,KAAK,UAAU;YAC7BN,QAAQO,EAAE,GAAGb,QAAQ,MAAMc,UAAU;YACrC,OAAO;QACT;QAEA,IAAIN,QAAQI,IAAI,KAAK,QAAQ;YAC3BN,QAAQO,EAAE,GAAGV,QAAQ,MAAMW,UAAU;YACrC,OAAO;QACT;IACF;IAEA,IAAIT,QAAQU,MAAM,KAAK,QAAQ;QAC7BT,QAAQO,EAAE,GAAGX,KAAK,MAAMc,aAAa,GAAGF,UAAU;QAClD,OAAO;IACT;IAEAR,QAAQO,EAAE,GAAGZ,OAAO,MAAMa,UAAU;IACpC,OAAO;AACT,EAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core';
2
- import type { Field, TabAsField } from 'payload';
2
+ import type { FlattenedField } from 'payload';
3
3
  import type { BasePostgresAdapter, GenericColumns, RelationMap } from '../types.js';
4
4
  type Args = {
5
5
  adapter: BasePostgresAdapter;
@@ -9,7 +9,7 @@ type Args = {
9
9
  disableRelsTableUnique?: boolean;
10
10
  disableUnique?: boolean;
11
11
  fieldPrefix?: string;
12
- fields: (Field | TabAsField)[];
12
+ fields: FlattenedField[];
13
13
  forceLocalized?: boolean;
14
14
  indexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
15
15
  localesColumns: Record<string, PgColumnBuilder>;
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAkB,UAAU,EAAE,MAAM,SAAS,CAAA;AAsBhE,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAapB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,kWAuBxB,IAAI,KAAG,MA21BT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAqB7C,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAapB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,kWAuBxB,IAAI,KAAG,MAkrBT,CAAA"}
@@ -38,49 +38,45 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
38
38
  if (fieldIsVirtual(field)) {
39
39
  return;
40
40
  }
41
- let columnName;
42
- let fieldName;
43
41
  let targetTable = columns;
44
42
  let targetIndexes = indexes;
45
- if (fieldAffectsData(field)) {
46
- columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(field.name)}`;
47
- fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`;
48
- // If field is localized,
49
- // add the column to the locale table instead of main table
50
- if (adapter.payload.config.localization && (field.localized || forceLocalized) && field.type !== 'array' && field.type !== 'blocks' && ('hasMany' in field && field.hasMany !== true || !('hasMany' in field))) {
51
- hasLocalizedField = true;
52
- targetTable = localesColumns;
53
- targetIndexes = localesIndexes;
54
- }
55
- if ((field.unique || field.index || [
56
- 'relationship',
57
- 'upload'
58
- ].includes(field.type)) && ![
59
- 'array',
60
- 'blocks',
61
- 'group'
62
- ].includes(field.type) && !('hasMany' in field && field.hasMany === true) && !('relationTo' in field && Array.isArray(field.relationTo))) {
63
- const unique = disableUnique !== true && field.unique;
64
- if (unique) {
65
- const constraintValue = `${fieldPrefix || ''}${field.name}`;
66
- if (!adapter.fieldConstraints?.[rootTableName]) {
67
- adapter.fieldConstraints[rootTableName] = {};
68
- }
69
- adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue;
43
+ const columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(field.name)}`;
44
+ const fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`;
45
+ // If field is localized,
46
+ // add the column to the locale table instead of main table
47
+ if (adapter.payload.config.localization && (field.localized || forceLocalized) && field.type !== 'array' && field.type !== 'blocks' && ('hasMany' in field && field.hasMany !== true || !('hasMany' in field))) {
48
+ hasLocalizedField = true;
49
+ targetTable = localesColumns;
50
+ targetIndexes = localesIndexes;
51
+ }
52
+ if ((field.unique || field.index || [
53
+ 'relationship',
54
+ 'upload'
55
+ ].includes(field.type)) && ![
56
+ 'array',
57
+ 'blocks',
58
+ 'group'
59
+ ].includes(field.type) && !('hasMany' in field && field.hasMany === true) && !('relationTo' in field && Array.isArray(field.relationTo))) {
60
+ const unique = disableUnique !== true && field.unique;
61
+ if (unique) {
62
+ const constraintValue = `${fieldPrefix || ''}${field.name}`;
63
+ if (!adapter.fieldConstraints?.[rootTableName]) {
64
+ adapter.fieldConstraints[rootTableName] = {};
70
65
  }
71
- const indexName = buildIndexName({
72
- name: `${newTableName}_${columnName}`,
73
- adapter
74
- });
75
- targetIndexes[indexName] = createIndex({
76
- name: field.localized ? [
77
- fieldName,
78
- '_locale'
79
- ] : fieldName,
80
- indexName,
81
- unique
82
- });
66
+ adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue;
83
67
  }
68
+ const indexName = buildIndexName({
69
+ name: `${newTableName}_${columnName}`,
70
+ adapter
71
+ });
72
+ targetIndexes[indexName] = createIndex({
73
+ name: field.localized ? [
74
+ fieldName,
75
+ '_locale'
76
+ ] : fieldName,
77
+ indexName,
78
+ unique
79
+ });
84
80
  }
85
81
  switch(field.type){
86
82
  case 'array':
@@ -123,7 +119,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
123
119
  disableNotNull: disableNotNullFromHere,
124
120
  disableRelsTableUnique: true,
125
121
  disableUnique,
126
- fields: disableUnique ? idToUUID(field.fields) : field.fields,
122
+ fields: disableUnique ? idToUUID(field.flattenedFields) : field.flattenedFields,
127
123
  rootRelationships: relationships,
128
124
  rootRelationsToBuild,
129
125
  rootTableIDColType,
@@ -242,7 +238,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
242
238
  disableNotNull: disableNotNullFromHere,
243
239
  disableRelsTableUnique: true,
244
240
  disableUnique,
245
- fields: disableUnique ? idToUUID(block.fields) : block.fields,
241
+ fields: disableUnique ? idToUUID(block.flattenedFields) : block.flattenedFields,
246
242
  rootRelationships: relationships,
247
243
  rootRelationsToBuild,
248
244
  rootTableIDColType,
@@ -340,53 +336,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
340
336
  targetTable[fieldName] = withDefault(varchar(columnName), field);
341
337
  break;
342
338
  }
343
- case 'collapsible':
344
- case 'row':
345
- {
346
- const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
347
- const { hasLocalizedField: rowHasLocalizedField, hasLocalizedManyNumberField: rowHasLocalizedManyNumberField, hasLocalizedManyTextField: rowHasLocalizedManyTextField, hasLocalizedRelationshipField: rowHasLocalizedRelationshipField, hasManyNumberField: rowHasManyNumberField, hasManyTextField: rowHasManyTextField } = traverseFields({
348
- adapter,
349
- columnPrefix,
350
- columns,
351
- disableNotNull: disableNotNullFromHere,
352
- disableUnique,
353
- fieldPrefix,
354
- fields: field.fields,
355
- forceLocalized,
356
- indexes,
357
- localesColumns,
358
- localesIndexes,
359
- newTableName,
360
- parentTableName,
361
- relationships,
362
- relationsToBuild,
363
- rootRelationsToBuild,
364
- rootTableIDColType,
365
- rootTableName,
366
- uniqueRelationships,
367
- versions,
368
- withinLocalizedArrayOrBlock
369
- });
370
- if (rowHasLocalizedField) {
371
- hasLocalizedField = true;
372
- }
373
- if (rowHasLocalizedRelationshipField) {
374
- hasLocalizedRelationshipField = true;
375
- }
376
- if (rowHasManyTextField) {
377
- hasManyTextField = true;
378
- }
379
- if (rowHasLocalizedManyTextField) {
380
- hasLocalizedManyTextField = true;
381
- }
382
- if (rowHasManyNumberField) {
383
- hasManyNumberField = true;
384
- }
385
- if (rowHasLocalizedManyNumberField) {
386
- hasLocalizedManyNumberField = true;
387
- }
388
- break;
389
- }
390
339
  case 'date':
391
340
  {
392
341
  targetTable[fieldName] = withDefault(timestamp(columnName, {
@@ -399,50 +348,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
399
348
  case 'group':
400
349
  case 'tab':
401
350
  {
402
- if (!('name' in field)) {
403
- const { hasLocalizedField: groupHasLocalizedField, hasLocalizedManyNumberField: groupHasLocalizedManyNumberField, hasLocalizedManyTextField: groupHasLocalizedManyTextField, hasLocalizedRelationshipField: groupHasLocalizedRelationshipField, hasManyNumberField: groupHasManyNumberField, hasManyTextField: groupHasManyTextField } = traverseFields({
404
- adapter,
405
- columnPrefix,
406
- columns,
407
- disableNotNull,
408
- disableUnique,
409
- fieldPrefix,
410
- fields: field.fields,
411
- forceLocalized,
412
- indexes,
413
- localesColumns,
414
- localesIndexes,
415
- newTableName,
416
- parentTableName,
417
- relationships,
418
- relationsToBuild,
419
- rootRelationsToBuild,
420
- rootTableIDColType,
421
- rootTableName,
422
- uniqueRelationships,
423
- versions,
424
- withinLocalizedArrayOrBlock
425
- });
426
- if (groupHasLocalizedField) {
427
- hasLocalizedField = true;
428
- }
429
- if (groupHasLocalizedRelationshipField) {
430
- hasLocalizedRelationshipField = true;
431
- }
432
- if (groupHasManyTextField) {
433
- hasManyTextField = true;
434
- }
435
- if (groupHasLocalizedManyTextField) {
436
- hasLocalizedManyTextField = true;
437
- }
438
- if (groupHasManyNumberField) {
439
- hasManyNumberField = true;
440
- }
441
- if (groupHasLocalizedManyNumberField) {
442
- hasLocalizedManyNumberField = true;
443
- }
444
- break;
445
- }
446
351
  const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
447
352
  const { hasLocalizedField: groupHasLocalizedField, hasLocalizedManyNumberField: groupHasLocalizedManyNumberField, hasLocalizedManyTextField: groupHasLocalizedManyTextField, hasLocalizedRelationshipField: groupHasLocalizedRelationshipField, hasManyNumberField: groupHasManyNumberField, hasManyTextField: groupHasManyTextField } = traverseFields({
448
353
  adapter,
@@ -451,7 +356,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
451
356
  disableNotNull: disableNotNullFromHere,
452
357
  disableUnique,
453
358
  fieldPrefix: `${fieldName}.`,
454
- fields: field.fields,
359
+ fields: field.flattenedFields,
455
360
  forceLocalized: field.localized,
456
361
  indexes,
457
362
  localesColumns,
@@ -653,55 +558,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
653
558
  hasLocalizedRelationshipField = true;
654
559
  }
655
560
  break;
656
- case 'tabs':
657
- {
658
- const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
659
- const { hasLocalizedField: tabHasLocalizedField, hasLocalizedManyNumberField: tabHasLocalizedManyNumberField, hasLocalizedManyTextField: tabHasLocalizedManyTextField, hasLocalizedRelationshipField: tabHasLocalizedRelationshipField, hasManyNumberField: tabHasManyNumberField, hasManyTextField: tabHasManyTextField } = traverseFields({
660
- adapter,
661
- columnPrefix,
662
- columns,
663
- disableNotNull: disableNotNullFromHere,
664
- disableUnique,
665
- fieldPrefix,
666
- fields: field.tabs.map((tab)=>({
667
- ...tab,
668
- type: 'tab'
669
- })),
670
- forceLocalized,
671
- indexes,
672
- localesColumns,
673
- localesIndexes,
674
- newTableName,
675
- parentTableName,
676
- relationships,
677
- relationsToBuild,
678
- rootRelationsToBuild,
679
- rootTableIDColType,
680
- rootTableName,
681
- uniqueRelationships,
682
- versions,
683
- withinLocalizedArrayOrBlock
684
- });
685
- if (tabHasLocalizedField) {
686
- hasLocalizedField = true;
687
- }
688
- if (tabHasLocalizedRelationshipField) {
689
- hasLocalizedRelationshipField = true;
690
- }
691
- if (tabHasManyTextField) {
692
- hasManyTextField = true;
693
- }
694
- if (tabHasLocalizedManyTextField) {
695
- hasLocalizedManyTextField = true;
696
- }
697
- if (tabHasManyNumberField) {
698
- hasManyNumberField = true;
699
- }
700
- if (tabHasLocalizedManyNumberField) {
701
- hasLocalizedManyNumberField = true;
702
- }
703
- break;
704
- }
705
561
  case 'text':
706
562
  {
707
563
  if (field.hasMany) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/traverseFields.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins, TabAsField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n geometry,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { geometryColumn } from './geometryColumn.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n indexName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n case 'code':\n\n case 'email':\n\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n case 'collapsible':\n\n case 'row': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (rowHasLocalizedField) {\n hasLocalizedField = true\n }\n if (rowHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (rowHasManyTextField) {\n hasManyTextField = true\n }\n if (rowHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (rowHasManyNumberField) {\n hasManyNumberField = true\n }\n if (rowHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'group':\n case 'tab': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'json':\n\n case 'richText': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'point': {\n targetTable[fieldName] = withDefault(geometryColumn(columnName), field)\n if (!adapter.extensions.postgis) {\n adapter.extensions.postgis = true\n }\n break\n }\n case 'radio':\n\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (tabHasLocalizedField) {\n hasLocalizedField = true\n }\n if (tabHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (tabHasManyTextField) {\n hasManyTextField = true\n }\n if (tabHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (tabHasManyNumberField) {\n hasManyNumberField = true\n }\n if (tabHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","buildIndexName","hasLocalesTable","validateExistingBlockIsIdentical","buildTable","createIndex","geometryColumn","idToUUID","parentIDColumnMap","withDefault","traverseFields","adapter","columnPrefix","columns","disableNotNull","disableRelsTableUnique","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","uniqueRelationships","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","columnName","fieldName","targetTable","targetIndexes","replace","payload","config","localization","localized","type","hasMany","unique","includes","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","baseColumns","_order","notNull","_parentID","baseExtraConfig","_orderIdx","cols","on","_parentIDFk","foreignColumns","tables","onDelete","_parentIDIdx","isLocalized","_locale","enums","enum__locales","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","rootRelationships","rootUniqueRelationships","tableName","set","target","many","one","result","references","relationName","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","mode","precision","withTimezone","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","extensions","postgis","enumName","pgSchema","enum","options","map","option","value","selectTableName","order","parent","orderIdx","parentFk","parentIdx","locale","localeIdx","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/traverseFields.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { FlattenedField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { geometryColumn } from './geometryColumn.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: FlattenedField[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let targetTable = columns\n let targetIndexes = indexes\n\n const columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n const fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n indexName,\n unique,\n })\n }\n\n switch (field.type) {\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.flattenedFields) : field.flattenedFields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.flattenedFields) : block.flattenedFields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'code':\n case 'email':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'group':\n case 'tab': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.flattenedFields,\n forceLocalized: field.localized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'json':\n case 'richText': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'point': {\n targetTable[fieldName] = withDefault(geometryColumn(columnName), field)\n if (!adapter.extensions.postgis) {\n adapter.extensions.postgis = true\n }\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","buildIndexName","hasLocalesTable","validateExistingBlockIsIdentical","buildTable","createIndex","geometryColumn","idToUUID","parentIDColumnMap","withDefault","traverseFields","adapter","columnPrefix","columns","disableNotNull","disableRelsTableUnique","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","uniqueRelationships","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","targetTable","targetIndexes","columnName","fieldName","replace","payload","config","localization","localized","type","hasMany","unique","includes","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","baseColumns","_order","notNull","_parentID","baseExtraConfig","_orderIdx","cols","on","_parentIDFk","foreignColumns","tables","onDelete","_parentIDIdx","isLocalized","_locale","enums","enum__locales","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","flattenedFields","rootRelationships","rootUniqueRelationships","tableName","set","target","many","one","result","references","relationName","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","mode","precision","withTimezone","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","extensions","postgis","enumName","pgSchema","enum","options","map","option","value","selectTableName","order","parent","orderIdx","parentFk","parentIdx","locale","localeIdx","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required"],"mappings":"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"}