@payloadcms/drizzle 4.0.0-internal.e7d4ebc → 4.0.0-internal.ec73d44

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 (292) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +25 -3
  3. package/dist/count.js.map +1 -1
  4. package/dist/countVersions.d.ts.map +1 -1
  5. package/dist/countVersions.js +28 -4
  6. package/dist/countVersions.js.map +1 -1
  7. package/dist/createGlobalVersion.d.ts.map +1 -1
  8. package/dist/createGlobalVersion.js +15 -2
  9. package/dist/createGlobalVersion.js.map +1 -1
  10. package/dist/createTableName.d.ts.map +1 -1
  11. package/dist/createTableName.js +2 -7
  12. package/dist/createTableName.js.map +1 -1
  13. package/dist/createVersion.d.ts.map +1 -1
  14. package/dist/createVersion.js +12 -1
  15. package/dist/createVersion.js.map +1 -1
  16. package/dist/deleteBranchGlobal.d.ts +10 -0
  17. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  18. package/dist/deleteBranchGlobal.js +27 -0
  19. package/dist/deleteBranchGlobal.js.map +1 -0
  20. package/dist/deleteOne.d.ts.map +1 -1
  21. package/dist/deleteOne.js +18 -1
  22. package/dist/deleteOne.js.map +1 -1
  23. package/dist/exports/postgres.d.ts +3 -0
  24. package/dist/exports/postgres.d.ts.map +1 -1
  25. package/dist/exports/postgres.js +3 -0
  26. package/dist/exports/postgres.js.map +1 -1
  27. package/dist/exports/sqlite.d.ts +1 -0
  28. package/dist/exports/sqlite.d.ts.map +1 -1
  29. package/dist/exports/sqlite.js +1 -0
  30. package/dist/exports/sqlite.js.map +1 -1
  31. package/dist/find/buildFindManyArgs.d.ts +3 -2
  32. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  33. package/dist/find/buildFindManyArgs.js +2 -1
  34. package/dist/find/buildFindManyArgs.js.map +1 -1
  35. package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
  36. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  37. package/dist/find/buildPolymorphicJoinQuery.js +163 -0
  38. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  39. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  40. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  41. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  42. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  43. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  44. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  45. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  46. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  47. package/dist/find/findMany.d.ts +6 -1
  48. package/dist/find/findMany.d.ts.map +1 -1
  49. package/dist/find/findMany.js +16 -3
  50. package/dist/find/findMany.js.map +1 -1
  51. package/dist/find/traverseFields.d.ts +3 -2
  52. package/dist/find/traverseFields.d.ts.map +1 -1
  53. package/dist/find/traverseFields.js +73 -197
  54. package/dist/find/traverseFields.js.map +1 -1
  55. package/dist/find.d.ts.map +1 -1
  56. package/dist/find.js +32 -4
  57. package/dist/find.js.map +1 -1
  58. package/dist/findDistinct.d.ts.map +1 -1
  59. package/dist/findDistinct.js +107 -8
  60. package/dist/findDistinct.js.map +1 -1
  61. package/dist/findGlobal.d.ts.map +1 -1
  62. package/dist/findGlobal.js +22 -5
  63. package/dist/findGlobal.js.map +1 -1
  64. package/dist/findGlobalVersions.js +8 -3
  65. package/dist/findGlobalVersions.js.map +1 -1
  66. package/dist/findOne.d.ts +1 -1
  67. package/dist/findOne.d.ts.map +1 -1
  68. package/dist/findOne.js +30 -3
  69. package/dist/findOne.js.map +1 -1
  70. package/dist/findVersions.d.ts.map +1 -1
  71. package/dist/findVersions.js +32 -5
  72. package/dist/findVersions.js.map +1 -1
  73. package/dist/index.d.ts +6 -10
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +4 -8
  76. package/dist/index.js.map +1 -1
  77. package/dist/migrate.d.ts.map +1 -1
  78. package/dist/migrate.js +41 -15
  79. package/dist/migrate.js.map +1 -1
  80. package/dist/migrateDown.d.ts +2 -1
  81. package/dist/migrateDown.d.ts.map +1 -1
  82. package/dist/migrateDown.js +17 -4
  83. package/dist/migrateDown.js.map +1 -1
  84. package/dist/migrateFresh.d.ts +4 -2
  85. package/dist/migrateFresh.d.ts.map +1 -1
  86. package/dist/migrateFresh.js +26 -9
  87. package/dist/migrateFresh.js.map +1 -1
  88. package/dist/migrateRefresh.d.ts +2 -1
  89. package/dist/migrateRefresh.d.ts.map +1 -1
  90. package/dist/migrateRefresh.js +20 -5
  91. package/dist/migrateRefresh.js.map +1 -1
  92. package/dist/migrateReset.d.ts +2 -1
  93. package/dist/migrateReset.d.ts.map +1 -1
  94. package/dist/migrateReset.js +18 -4
  95. package/dist/migrateReset.js.map +1 -1
  96. package/dist/migrateStatus.d.ts +2 -1
  97. package/dist/migrateStatus.d.ts.map +1 -1
  98. package/dist/migrateStatus.js +11 -6
  99. package/dist/migrateStatus.js.map +1 -1
  100. package/dist/postgres/createJSONQuery/index.js +3 -3
  101. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  102. package/dist/postgres/init.d.ts.map +1 -1
  103. package/dist/postgres/init.js +6 -0
  104. package/dist/postgres/init.js.map +1 -1
  105. package/dist/postgres/insert.d.ts.map +1 -1
  106. package/dist/postgres/insert.js +4 -2
  107. package/dist/postgres/insert.js.map +1 -1
  108. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  109. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  110. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  111. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  112. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  113. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  114. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  115. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  116. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  117. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  118. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  119. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  120. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  121. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  122. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  123. package/dist/postgres/query/postgresUnaccent.js +40 -0
  124. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  125. package/dist/postgres/types.d.ts +17 -2
  126. package/dist/postgres/types.d.ts.map +1 -1
  127. package/dist/postgres/types.js.map +1 -1
  128. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  129. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  130. package/dist/queries/buildAndOrConditions.js +2 -1
  131. package/dist/queries/buildAndOrConditions.js.map +1 -1
  132. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  133. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  134. package/dist/queries/buildBranchVisibility.js +48 -0
  135. package/dist/queries/buildBranchVisibility.js.map +1 -0
  136. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  137. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  138. package/dist/queries/buildOperatorConstraint.js +63 -0
  139. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  140. package/dist/queries/buildOrderBy.d.ts +3 -2
  141. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  142. package/dist/queries/buildOrderBy.js +2 -1
  143. package/dist/queries/buildOrderBy.js.map +1 -1
  144. package/dist/queries/buildQuery.d.ts +3 -2
  145. package/dist/queries/buildQuery.d.ts.map +1 -1
  146. package/dist/queries/buildQuery.js +4 -2
  147. package/dist/queries/buildQuery.js.map +1 -1
  148. package/dist/queries/getTableColumnFromPath.d.ts +15 -5
  149. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  150. package/dist/queries/getTableColumnFromPath.js +225 -54
  151. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  152. package/dist/queries/operatorMap.d.ts +7 -3
  153. package/dist/queries/operatorMap.d.ts.map +1 -1
  154. package/dist/queries/operatorMap.js.map +1 -1
  155. package/dist/queries/parseParams.d.ts +3 -2
  156. package/dist/queries/parseParams.d.ts.map +1 -1
  157. package/dist/queries/parseParams.js +266 -11
  158. package/dist/queries/parseParams.js.map +1 -1
  159. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  160. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  161. package/dist/queries/resolveRelationshipPath.js +66 -0
  162. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  163. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  164. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  165. package/dist/queries/validateOperatorHandlers.js +30 -0
  166. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  167. package/dist/queryDrafts.d.ts.map +1 -1
  168. package/dist/queryDrafts.js +23 -4
  169. package/dist/queryDrafts.js.map +1 -1
  170. package/dist/schema/build.d.ts.map +1 -1
  171. package/dist/schema/build.js +23 -20
  172. package/dist/schema/build.js.map +1 -1
  173. package/dist/schema/traverseFields.js +5 -5
  174. package/dist/schema/traverseFields.js.map +1 -1
  175. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  176. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  177. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  178. package/dist/sqlite/createJSONQuery/index.js +6 -5
  179. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  180. package/dist/sqlite/execute.js.map +1 -1
  181. package/dist/sqlite/insert.d.ts.map +1 -1
  182. package/dist/sqlite/insert.js +9 -4
  183. package/dist/sqlite/insert.js.map +1 -1
  184. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  185. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  186. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  187. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  188. package/dist/sqlite/types.d.ts +4 -0
  189. package/dist/sqlite/types.d.ts.map +1 -1
  190. package/dist/sqlite/types.js.map +1 -1
  191. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  192. package/dist/transactions/beginTransaction.js +13 -5
  193. package/dist/transactions/beginTransaction.js.map +1 -1
  194. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  195. package/dist/transactions/commitTransaction.js +1 -5
  196. package/dist/transactions/commitTransaction.js.map +1 -1
  197. package/dist/transform/read/traverseFields.js.map +1 -1
  198. package/dist/transform/write/array.d.ts +3 -2
  199. package/dist/transform/write/array.d.ts.map +1 -1
  200. package/dist/transform/write/array.js +2 -1
  201. package/dist/transform/write/array.js.map +1 -1
  202. package/dist/transform/write/blocks.d.ts +3 -2
  203. package/dist/transform/write/blocks.d.ts.map +1 -1
  204. package/dist/transform/write/blocks.js +2 -1
  205. package/dist/transform/write/blocks.js.map +1 -1
  206. package/dist/transform/write/index.d.ts.map +1 -1
  207. package/dist/transform/write/index.js +2 -0
  208. package/dist/transform/write/index.js.map +1 -1
  209. package/dist/transform/write/traverseFields.d.ts +2 -1
  210. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  211. package/dist/transform/write/traverseFields.js +40 -20
  212. package/dist/transform/write/traverseFields.js.map +1 -1
  213. package/dist/transform/write/types.d.ts +7 -0
  214. package/dist/transform/write/types.d.ts.map +1 -1
  215. package/dist/transform/write/types.js.map +1 -1
  216. package/dist/types.d.ts +51 -2
  217. package/dist/types.d.ts.map +1 -1
  218. package/dist/types.js.map +1 -1
  219. package/dist/updateGlobal.d.ts +5 -1
  220. package/dist/updateGlobal.d.ts.map +1 -1
  221. package/dist/updateGlobal.js +96 -4
  222. package/dist/updateGlobal.js.map +1 -1
  223. package/dist/updateJobs.d.ts.map +1 -1
  224. package/dist/updateJobs.js +37 -0
  225. package/dist/updateJobs.js.map +1 -1
  226. package/dist/updateOne.d.ts.map +1 -1
  227. package/dist/updateOne.js +86 -4
  228. package/dist/updateOne.js.map +1 -1
  229. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  230. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  231. package/dist/upsertBranchGlobalChange.js +35 -0
  232. package/dist/upsertBranchGlobalChange.js.map +1 -0
  233. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  234. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  235. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  236. package/dist/upsertRow/index.d.ts +1 -1
  237. package/dist/upsertRow/index.d.ts.map +1 -1
  238. package/dist/upsertRow/index.js +156 -46
  239. package/dist/upsertRow/index.js.map +1 -1
  240. package/dist/upsertRow/types.d.ts +3 -0
  241. package/dist/upsertRow/types.d.ts.map +1 -1
  242. package/dist/upsertRow/types.js.map +1 -1
  243. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  244. package/dist/utilities/blocksToJsonMigrator.js +6 -17
  245. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  246. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  247. package/dist/utilities/buildCreateMigration.js +12 -8
  248. package/dist/utilities/buildCreateMigration.js.map +1 -1
  249. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  250. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  251. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  252. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  253. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  254. package/dist/utilities/buildForeignKeyName.js +3 -2
  255. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  256. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  257. package/dist/utilities/buildIndexName.js +3 -2
  258. package/dist/utilities/buildIndexName.js.map +1 -1
  259. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  260. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  261. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  262. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  263. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  264. package/dist/utilities/createSchemaGenerator.js +10 -12
  265. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  266. package/dist/utilities/executeSchemaHooks.js +1 -1
  267. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  268. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  269. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  270. package/dist/utilities/formatGeneratedFile.js +58 -0
  271. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  272. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  273. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  274. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  275. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  276. package/dist/utilities/getTransaction.js.map +1 -1
  277. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  278. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  279. package/dist/utilities/parseJSONPathSegment.js +17 -0
  280. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  281. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  282. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  283. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  284. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  285. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  286. package/dist/utilities/validateIdentifierLength.js +18 -0
  287. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  288. package/package.json +16 -19
  289. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  290. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  291. package/dist/utilities/isValidStringID.spec.js +0 -15
  292. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -0,0 +1,58 @@
1
+ import { execFile } from 'child_process';
2
+ import { readFile, writeFile } from 'fs/promises';
3
+ import { createRequire } from 'module';
4
+ import path from 'path';
5
+ import { dynamicImport } from 'payload';
6
+ import { promisify } from 'util';
7
+ const execFileAsync = promisify(execFile);
8
+ /**
9
+ * Formats a generated file in place with the project's formatter and formatter config: oxfmt if
10
+ * it's installed, otherwise Prettier. Logs an error if neither can format the file.
11
+ */ export async function formatGeneratedFile({ filePath, logger }) {
12
+ let formatError;
13
+ // oxfmt's `format()` API doesn't discover config files, so run the project's oxfmt CLI instead
14
+ let oxfmtBinPath;
15
+ try {
16
+ const projectRequire = createRequire(path.join(process.cwd(), 'package.json'));
17
+ const packageJSONPath = projectRequire.resolve('oxfmt/package.json');
18
+ const { bin } = projectRequire(packageJSONPath);
19
+ oxfmtBinPath = path.join(path.dirname(packageJSONPath), bin.oxfmt);
20
+ } catch {
21
+ // oxfmt isn't installed
22
+ }
23
+ if (oxfmtBinPath) {
24
+ try {
25
+ await execFileAsync(process.execPath, // Loading `oxfmt.config.ts` relies on Node's type stripping, which `NODE_OPTIONS` may disable
26
+ [
27
+ '--experimental-strip-types',
28
+ oxfmtBinPath,
29
+ '--no-error-on-unmatched-pattern',
30
+ filePath
31
+ ], {
32
+ cwd: process.cwd()
33
+ });
34
+ return;
35
+ } catch (err) {
36
+ formatError = err;
37
+ }
38
+ }
39
+ try {
40
+ const prettier = await dynamicImport('prettier');
41
+ const configPath = await prettier.resolveConfigFile();
42
+ const config = configPath ? await prettier.resolveConfig(configPath) : {};
43
+ const code = await readFile(filePath, 'utf-8');
44
+ await writeFile(filePath, await prettier.format(code, {
45
+ ...config,
46
+ parser: 'typescript'
47
+ }));
48
+ return;
49
+ } catch (err) {
50
+ formatError ??= err;
51
+ }
52
+ logger.error({
53
+ err: formatError,
54
+ msg: `Could not format ${filePath} with oxfmt or Prettier`
55
+ });
56
+ }
57
+
58
+ //# sourceMappingURL=formatGeneratedFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/formatGeneratedFile.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport { execFile } from 'child_process'\nimport { readFile, writeFile } from 'fs/promises'\nimport { createRequire } from 'module'\nimport path from 'path'\nimport { dynamicImport } from 'payload'\nimport { promisify } from 'util'\n\n/**\n * The subset of Prettier's API used here. Prettier isn't a dependency, so its types aren't available.\n */\ntype Prettier = {\n format: (source: string, options: Record<string, unknown>) => Promise<string>\n resolveConfig: (filePath: string) => Promise<null | Record<string, unknown>>\n resolveConfigFile: () => Promise<null | string>\n}\n\nconst execFileAsync = promisify(execFile)\n\n/**\n * Formats a generated file in place with the project's formatter and formatter config: oxfmt if\n * it's installed, otherwise Prettier. Logs an error if neither can format the file.\n */\nexport async function formatGeneratedFile({\n filePath,\n logger,\n}: {\n filePath: string\n logger: Payload['logger']\n}): Promise<void> {\n let formatError: unknown\n\n // oxfmt's `format()` API doesn't discover config files, so run the project's oxfmt CLI instead\n let oxfmtBinPath: string | undefined\n try {\n const projectRequire = createRequire(path.join(process.cwd(), 'package.json'))\n const packageJSONPath = projectRequire.resolve('oxfmt/package.json')\n const { bin } = projectRequire(packageJSONPath) as { bin: { oxfmt: string } }\n oxfmtBinPath = path.join(path.dirname(packageJSONPath), bin.oxfmt)\n } catch {\n // oxfmt isn't installed\n }\n\n if (oxfmtBinPath) {\n try {\n await execFileAsync(\n process.execPath,\n // Loading `oxfmt.config.ts` relies on Node's type stripping, which `NODE_OPTIONS` may disable\n ['--experimental-strip-types', oxfmtBinPath, '--no-error-on-unmatched-pattern', filePath],\n { cwd: process.cwd() },\n )\n return\n } catch (err) {\n formatError = err\n }\n }\n\n try {\n const prettier = await dynamicImport<Prettier>('prettier')\n const configPath = await prettier.resolveConfigFile()\n const config = configPath ? await prettier.resolveConfig(configPath) : {}\n const code = await readFile(filePath, 'utf-8')\n await writeFile(filePath, await prettier.format(code, { ...config, parser: 'typescript' }))\n return\n } catch (err) {\n formatError ??= err\n }\n\n logger.error({ err: formatError, msg: `Could not format ${filePath} with oxfmt or Prettier` })\n}\n"],"names":["execFile","readFile","writeFile","createRequire","path","dynamicImport","promisify","execFileAsync","formatGeneratedFile","filePath","logger","formatError","oxfmtBinPath","projectRequire","join","process","cwd","packageJSONPath","resolve","bin","dirname","oxfmt","execPath","err","prettier","configPath","resolveConfigFile","config","resolveConfig","code","format","parser","error","msg"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,gBAAe;AACxC,SAASC,QAAQ,EAAEC,SAAS,QAAQ,cAAa;AACjD,SAASC,aAAa,QAAQ,SAAQ;AACtC,OAAOC,UAAU,OAAM;AACvB,SAASC,aAAa,QAAQ,UAAS;AACvC,SAASC,SAAS,QAAQ,OAAM;AAWhC,MAAMC,gBAAgBD,UAAUN;AAEhC;;;CAGC,GACD,OAAO,eAAeQ,oBAAoB,EACxCC,QAAQ,EACRC,MAAM,EAIP;IACC,IAAIC;IAEJ,+FAA+F;IAC/F,IAAIC;IACJ,IAAI;QACF,MAAMC,iBAAiBV,cAAcC,KAAKU,IAAI,CAACC,QAAQC,GAAG,IAAI;QAC9D,MAAMC,kBAAkBJ,eAAeK,OAAO,CAAC;QAC/C,MAAM,EAAEC,GAAG,EAAE,GAAGN,eAAeI;QAC/BL,eAAeR,KAAKU,IAAI,CAACV,KAAKgB,OAAO,CAACH,kBAAkBE,IAAIE,KAAK;IACnE,EAAE,OAAM;IACN,wBAAwB;IAC1B;IAEA,IAAIT,cAAc;QAChB,IAAI;YACF,MAAML,cACJQ,QAAQO,QAAQ,EAChB,8FAA8F;YAC9F;gBAAC;gBAA8BV;gBAAc;gBAAmCH;aAAS,EACzF;gBAAEO,KAAKD,QAAQC,GAAG;YAAG;YAEvB;QACF,EAAE,OAAOO,KAAK;YACZZ,cAAcY;QAChB;IACF;IAEA,IAAI;QACF,MAAMC,WAAW,MAAMnB,cAAwB;QAC/C,MAAMoB,aAAa,MAAMD,SAASE,iBAAiB;QACnD,MAAMC,SAASF,aAAa,MAAMD,SAASI,aAAa,CAACH,cAAc,CAAC;QACxE,MAAMI,OAAO,MAAM5B,SAASQ,UAAU;QACtC,MAAMP,UAAUO,UAAU,MAAMe,SAASM,MAAM,CAACD,MAAM;YAAE,GAAGF,MAAM;YAAEI,QAAQ;QAAa;QACxF;IACF,EAAE,OAAOR,KAAK;QACZZ,gBAAgBY;IAClB;IAEAb,OAAOsB,KAAK,CAAC;QAAET,KAAKZ;QAAasB,KAAK,CAAC,iBAAiB,EAAExB,SAAS,uBAAuB,CAAC;IAAC;AAC9F"}
@@ -0,0 +1,54 @@
1
+ import type { DrizzleAdapter } from '../types.js';
2
+ export type SizesToVariantsDirection = 'down' | 'up';
3
+ export type SizesToVariantsColumnRename = {
4
+ from: string;
5
+ to: string;
6
+ };
7
+ export type SizesToVariantsIndexRename = {
8
+ /** Columns the index covers, named as they are after the column renames. */
9
+ columns: string[];
10
+ /** The index name to rename from on `down`. The generated legacy name is resolved on `up`. */
11
+ from?: string;
12
+ /** Base used to verify a generated legacy index name, including a possible numeric suffix. */
13
+ legacyNameBase?: string;
14
+ to: string;
15
+ unique: boolean;
16
+ };
17
+ export type SizesToVariantsTableRenames = {
18
+ columns: SizesToVariantsColumnRename[];
19
+ indexes: SizesToVariantsIndexRename[];
20
+ tableName: string;
21
+ };
22
+ export declare function findSizesToVariantsFieldCollision({ columns, existingColumns, }: {
23
+ columns: SizesToVariantsColumnRename[];
24
+ existingColumns: Set<string>;
25
+ }): {
26
+ from: string;
27
+ to: string;
28
+ } | undefined;
29
+ export declare function assertNoSizesToVariantsColumnCollisions({ columns, existingColumns, tableName, }: {
30
+ columns: SizesToVariantsColumnRename[];
31
+ existingColumns: Set<string>;
32
+ tableName: string;
33
+ }): void;
34
+ /**
35
+ * Plans the column and index renames that move every upload collection's stored image sizes
36
+ * between the legacy `sizes` group and `variants`. Reads the current (`variants`) schema the
37
+ * adapter built from the config, so it covers each collection's main and versions tables without
38
+ * re-deriving Payload's column naming.
39
+ *
40
+ * Index names come from the schema on `up`, and on `down` are rebuilt the way `buildIndexName`
41
+ * named them before the rename. The runner still has to locate the verified generated legacy name
42
+ * on `up`, since it may have a numeric suffix that keeps the name unique.
43
+ */
44
+ export declare function getSizesToVariantsRenames({ adapter, direction, }: {
45
+ adapter: DrizzleAdapter;
46
+ direction: SizesToVariantsDirection;
47
+ }): SizesToVariantsTableRenames[];
48
+ /** Mirrors `buildIndexName` for an index that didn't collide, without registering the name. */
49
+ export declare function isGeneratedLegacyIndexName({ indexName, legacyNameBase, }: {
50
+ indexName: string;
51
+ legacyNameBase: string;
52
+ }): boolean;
53
+ export declare function buildGeneratedLegacyIndexName(name: string, number?: number): string;
54
+ //# sourceMappingURL=getSizesToVariantsRenames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSizesToVariantsRenames.d.ts","sourceRoot":"","sources":["../../src/utilities/getSizesToVariantsRenames.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAA;AAIrE,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAAA;AAEpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,2BAA2B,EAAE,CAAA;IACtC,OAAO,EAAE,0BAA0B,EAAE,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAAgB,iCAAiC,CAAC,EAChD,OAAO,EACP,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,2BAA2B,EAAE,CAAA;IACtC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC7B,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA2B3C;AAED,wBAAgB,uCAAuC,CAAC,EACtD,OAAO,EACP,eAAe,EACf,SAAS,GACV,EAAE;IACD,OAAO,EAAE,2BAA2B,EAAE,CAAA;IACtC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,IAAI,CAgBP;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,SAAS,GACV,EAAE;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,SAAS,EAAE,wBAAwB,CAAA;CACpC,GAAG,2BAA2B,EAAE,CAwEhC;AA6ID,+FAA+F;AAC/F,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,EACT,cAAc,GACf,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB,GAAG,OAAO,CAQV;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAO9E"}
@@ -0,0 +1,251 @@
1
+ import toSnakeCase from 'to-snake-case';
2
+ import { maxGeneratedIdentifierLength } from './validateIdentifierLength.js';
3
+ export function findSizesToVariantsFieldCollision({ columns, existingColumns }) {
4
+ const firstRename = columns[0];
5
+ if (!firstRename) {
6
+ return undefined;
7
+ }
8
+ const fromField = getSizesToVariantsField({
9
+ columnName: firstRename.from
10
+ });
11
+ const toField = getSizesToVariantsField({
12
+ columnName: firstRename.to
13
+ });
14
+ if (!fromField || !toField) {
15
+ return undefined;
16
+ }
17
+ const hasSourceField = [
18
+ ...existingColumns
19
+ ].some((column)=>isSizesToVariantsFieldColumn({
20
+ column,
21
+ field: fromField
22
+ }));
23
+ const plannedDestinationColumns = new Set(columns.map(({ to })=>to));
24
+ const hasUnexpectedDestinationField = [
25
+ ...existingColumns
26
+ ].some((column)=>isSizesToVariantsFieldColumn({
27
+ column,
28
+ field: toField
29
+ }) && !plannedDestinationColumns.has(column));
30
+ return hasSourceField && hasUnexpectedDestinationField ? {
31
+ from: fromField.fieldPath,
32
+ to: toField.fieldPath
33
+ } : undefined;
34
+ }
35
+ export function assertNoSizesToVariantsColumnCollisions({ columns, existingColumns, tableName }) {
36
+ for (const { from, to } of columns){
37
+ if (existingColumns.has(from) && existingColumns.has(to)) {
38
+ throw new Error(`Cannot run the sizes-to-variants migration because table "${tableName}" contains both "${from}" and "${to}". Move or rename the existing destination data before running this migration.`);
39
+ }
40
+ }
41
+ const fieldCollision = findSizesToVariantsFieldCollision({
42
+ columns,
43
+ existingColumns
44
+ });
45
+ if (fieldCollision) {
46
+ throw new Error(`Cannot run the sizes-to-variants migration because table "${tableName}" contains both the "${fieldCollision.from}" and "${fieldCollision.to}" fields. Move or rename the existing destination data before running this migration.`);
47
+ }
48
+ }
49
+ const columnPrefixes = [
50
+ {
51
+ current: 'variants_',
52
+ legacy: 'sizes_'
53
+ },
54
+ {
55
+ current: 'version_variants_',
56
+ legacy: 'version_sizes_'
57
+ }
58
+ ];
59
+ const generatedVariantMetadataFieldNames = [
60
+ '_objectKey',
61
+ 'filename',
62
+ 'filesize',
63
+ 'height',
64
+ 'mimeType',
65
+ 'prefix',
66
+ 'url',
67
+ 'width'
68
+ ];
69
+ /**
70
+ * Plans the column and index renames that move every upload collection's stored image sizes
71
+ * between the legacy `sizes` group and `variants`. Reads the current (`variants`) schema the
72
+ * adapter built from the config, so it covers each collection's main and versions tables without
73
+ * re-deriving Payload's column naming.
74
+ *
75
+ * Index names come from the schema on `up`, and on `down` are rebuilt the way `buildIndexName`
76
+ * named them before the rename. The runner still has to locate the verified generated legacy name
77
+ * on `up`, since it may have a numeric suffix that keeps the name unique.
78
+ */ export function getSizesToVariantsRenames({ adapter, direction }) {
79
+ const plan = [];
80
+ for (const collection of adapter.payload.config.collections){
81
+ if (!collection.upload) {
82
+ continue;
83
+ }
84
+ const upload = typeof collection.upload === 'object' ? collection.upload : undefined;
85
+ const generatedVariantColumnKeys = new Set((upload?.variants ?? []).flatMap(({ name })=>generatedVariantMetadataFieldNames.flatMap((metadataFieldName)=>[
86
+ `variants_${name}_${metadataFieldName}`,
87
+ `version_variants_${name}_${metadataFieldName}`
88
+ ])));
89
+ if (generatedVariantColumnKeys.size === 0) {
90
+ continue;
91
+ }
92
+ const tableNames = [
93
+ adapter.tableNameMap.get(toSnakeCase(collection.slug))
94
+ ];
95
+ if (collection.versions) {
96
+ tableNames.push(adapter.tableNameMap.get(`_${toSnakeCase(collection.slug)}${adapter.versionsSuffix}`));
97
+ }
98
+ for (const tableName of tableNames){
99
+ const rawTable = tableName ? adapter.rawTables[tableName] : undefined;
100
+ if (!tableName || !rawTable) {
101
+ continue;
102
+ }
103
+ const columns = [];
104
+ for (const [columnKey, { name }] of Object.entries(rawTable.columns)){
105
+ if (!generatedVariantColumnKeys.has(columnKey)) {
106
+ continue;
107
+ }
108
+ const prefix = columnPrefixes.find(({ current })=>name.startsWith(current));
109
+ if (!prefix) {
110
+ continue;
111
+ }
112
+ const legacyName = `${prefix.legacy}${name.slice(prefix.current.length)}`;
113
+ columns.push(direction === 'up' ? {
114
+ from: legacyName,
115
+ to: name
116
+ } : {
117
+ from: name,
118
+ to: legacyName
119
+ });
120
+ }
121
+ if (columns.length === 0) {
122
+ continue;
123
+ }
124
+ const indexes = Object.values(rawTable.indexes ?? {}).map((index)=>planIndexRename({
125
+ columns,
126
+ direction,
127
+ index,
128
+ rawColumns: rawTable.columns,
129
+ tableName
130
+ })).filter((index)=>Boolean(index));
131
+ plan.push({
132
+ columns,
133
+ indexes,
134
+ tableName
135
+ });
136
+ }
137
+ }
138
+ return plan;
139
+ }
140
+ function getSizesToVariantsField({ columnName }) {
141
+ if (columnName === 'version_sizes' || columnName.startsWith('version_sizes_')) {
142
+ return {
143
+ columnName: 'version_sizes',
144
+ columnPrefix: 'version_sizes_',
145
+ fieldPath: 'version.sizes'
146
+ };
147
+ }
148
+ if (columnName === 'version_variants' || columnName.startsWith('version_variants_')) {
149
+ return {
150
+ columnName: 'version_variants',
151
+ columnPrefix: 'version_variants_',
152
+ fieldPath: 'version.variants'
153
+ };
154
+ }
155
+ if (columnName === 'sizes' || columnName.startsWith('sizes_')) {
156
+ return {
157
+ columnName: 'sizes',
158
+ columnPrefix: 'sizes_',
159
+ fieldPath: 'sizes'
160
+ };
161
+ }
162
+ if (columnName === 'variants' || columnName.startsWith('variants_')) {
163
+ return {
164
+ columnName: 'variants',
165
+ columnPrefix: 'variants_',
166
+ fieldPath: 'variants'
167
+ };
168
+ }
169
+ return undefined;
170
+ }
171
+ function isSizesToVariantsFieldColumn({ column, field }) {
172
+ return column === field.columnName || column.startsWith(field.columnPrefix);
173
+ }
174
+ function planIndexRename({ columns, direction, index, rawColumns, tableName }) {
175
+ // `on` holds the column's schema key (e.g. `variants_heroLarge_filename`), not its database name.
176
+ const currentColumns = [
177
+ index.on
178
+ ].flat().map((key)=>rawColumns[key]?.name ?? key);
179
+ const renamedColumns = currentColumns.map((column)=>columns.find((rename)=>(direction === 'up' ? rename.to : rename.from) === column));
180
+ if (renamedColumns.every((rename)=>!rename)) {
181
+ return undefined;
182
+ }
183
+ const unique = Boolean(index.unique);
184
+ if (direction === 'up') {
185
+ const legacyColumns = currentColumns.map((column, i)=>renamedColumns[i]?.from ?? column);
186
+ return {
187
+ columns: currentColumns,
188
+ legacyNameBase: getLegacyIndexNameBase({
189
+ currentColumns,
190
+ indexName: index.name,
191
+ legacyColumns,
192
+ tableName
193
+ }),
194
+ to: index.name,
195
+ unique
196
+ };
197
+ }
198
+ const legacyColumns = currentColumns.map((column, i)=>renamedColumns[i]?.to ?? column);
199
+ const legacyNameBase = getLegacyIndexNameBase({
200
+ currentColumns,
201
+ indexName: index.name,
202
+ legacyColumns,
203
+ tableName
204
+ });
205
+ return {
206
+ columns: legacyColumns,
207
+ from: index.name,
208
+ legacyNameBase,
209
+ to: buildGeneratedLegacyIndexName(legacyNameBase),
210
+ unique
211
+ };
212
+ }
213
+ function getLegacyIndexNameBase({ currentColumns, indexName, legacyColumns, tableName }) {
214
+ const currentColumn = currentColumns.length === 1 ? currentColumns[0] : undefined;
215
+ const legacyColumn = legacyColumns.length === 1 ? legacyColumns[0] : undefined;
216
+ const currentFieldPath = currentColumn ? getGeneratedVariantFieldPath(currentColumn) : undefined;
217
+ const legacyFieldPath = legacyColumn ? getGeneratedVariantFieldPath(legacyColumn) : undefined;
218
+ if (currentColumn && currentFieldPath && legacyColumn && legacyFieldPath) {
219
+ const currentFieldIndexNameBase = `${tableName}_${currentFieldPath}_${currentColumn}`;
220
+ if (isGeneratedLegacyIndexName({
221
+ indexName,
222
+ legacyNameBase: currentFieldIndexNameBase
223
+ })) {
224
+ return `${tableName}_${legacyFieldPath}_${legacyColumn}`;
225
+ }
226
+ }
227
+ return legacyColumns.join('_');
228
+ }
229
+ function getGeneratedVariantFieldPath(columnName) {
230
+ for (const metadataFieldName of generatedVariantMetadataFieldNames){
231
+ const metadataColumnSuffix = `_${toSnakeCase(metadataFieldName)}`;
232
+ if (columnName.endsWith(metadataColumnSuffix)) {
233
+ return columnName.slice(0, -metadataColumnSuffix.length);
234
+ }
235
+ }
236
+ return undefined;
237
+ }
238
+ /** Mirrors `buildIndexName` for an index that didn't collide, without registering the name. */ export function isGeneratedLegacyIndexName({ indexName, legacyNameBase }) {
239
+ const suffixMatch = indexName.match(/(?:_(\d+))?_idx$/);
240
+ if (!suffixMatch) {
241
+ return false;
242
+ }
243
+ return indexName === buildGeneratedLegacyIndexName(legacyNameBase, Number(suffixMatch[1] ?? 0));
244
+ }
245
+ export function buildGeneratedLegacyIndexName(name, number = 0) {
246
+ const suffix = `${number ? `_${number}` : ''}_idx`;
247
+ const indexName = `${name}${suffix}`;
248
+ return indexName.length > maxGeneratedIdentifierLength ? `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}` : indexName;
249
+ }
250
+
251
+ //# sourceMappingURL=getSizesToVariantsRenames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/getSizesToVariantsRenames.ts"],"sourcesContent":["import toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, RawIndex, RawTable } from '../types.js'\n\nimport { maxGeneratedIdentifierLength } from './validateIdentifierLength.js'\n\nexport type SizesToVariantsDirection = 'down' | 'up'\n\nexport type SizesToVariantsColumnRename = {\n from: string\n to: string\n}\n\nexport type SizesToVariantsIndexRename = {\n /** Columns the index covers, named as they are after the column renames. */\n columns: string[]\n /** The index name to rename from on `down`. The generated legacy name is resolved on `up`. */\n from?: string\n /** Base used to verify a generated legacy index name, including a possible numeric suffix. */\n legacyNameBase?: string\n to: string\n unique: boolean\n}\n\nexport type SizesToVariantsTableRenames = {\n columns: SizesToVariantsColumnRename[]\n indexes: SizesToVariantsIndexRename[]\n tableName: string\n}\n\nexport function findSizesToVariantsFieldCollision({\n columns,\n existingColumns,\n}: {\n columns: SizesToVariantsColumnRename[]\n existingColumns: Set<string>\n}): { from: string; to: string } | undefined {\n const firstRename = columns[0]\n\n if (!firstRename) {\n return undefined\n }\n\n const fromField = getSizesToVariantsField({ columnName: firstRename.from })\n const toField = getSizesToVariantsField({ columnName: firstRename.to })\n\n if (!fromField || !toField) {\n return undefined\n }\n\n const hasSourceField = [...existingColumns].some((column) =>\n isSizesToVariantsFieldColumn({ column, field: fromField }),\n )\n const plannedDestinationColumns = new Set(columns.map(({ to }) => to))\n const hasUnexpectedDestinationField = [...existingColumns].some(\n (column) =>\n isSizesToVariantsFieldColumn({ column, field: toField }) &&\n !plannedDestinationColumns.has(column),\n )\n\n return hasSourceField && hasUnexpectedDestinationField\n ? { from: fromField.fieldPath, to: toField.fieldPath }\n : undefined\n}\n\nexport function assertNoSizesToVariantsColumnCollisions({\n columns,\n existingColumns,\n tableName,\n}: {\n columns: SizesToVariantsColumnRename[]\n existingColumns: Set<string>\n tableName: string\n}): void {\n for (const { from, to } of columns) {\n if (existingColumns.has(from) && existingColumns.has(to)) {\n throw new Error(\n `Cannot run the sizes-to-variants migration because table \"${tableName}\" contains both \"${from}\" and \"${to}\". Move or rename the existing destination data before running this migration.`,\n )\n }\n }\n\n const fieldCollision = findSizesToVariantsFieldCollision({ columns, existingColumns })\n\n if (fieldCollision) {\n throw new Error(\n `Cannot run the sizes-to-variants migration because table \"${tableName}\" contains both the \"${fieldCollision.from}\" and \"${fieldCollision.to}\" fields. Move or rename the existing destination data before running this migration.`,\n )\n }\n}\n\nconst columnPrefixes = [\n { current: 'variants_', legacy: 'sizes_' },\n { current: 'version_variants_', legacy: 'version_sizes_' },\n]\nconst generatedVariantMetadataFieldNames = [\n '_objectKey',\n 'filename',\n 'filesize',\n 'height',\n 'mimeType',\n 'prefix',\n 'url',\n 'width',\n]\n\n/**\n * Plans the column and index renames that move every upload collection's stored image sizes\n * between the legacy `sizes` group and `variants`. Reads the current (`variants`) schema the\n * adapter built from the config, so it covers each collection's main and versions tables without\n * re-deriving Payload's column naming.\n *\n * Index names come from the schema on `up`, and on `down` are rebuilt the way `buildIndexName`\n * named them before the rename. The runner still has to locate the verified generated legacy name\n * on `up`, since it may have a numeric suffix that keeps the name unique.\n */\nexport function getSizesToVariantsRenames({\n adapter,\n direction,\n}: {\n adapter: DrizzleAdapter\n direction: SizesToVariantsDirection\n}): SizesToVariantsTableRenames[] {\n const plan: SizesToVariantsTableRenames[] = []\n\n for (const collection of adapter.payload.config.collections) {\n if (!collection.upload) {\n continue\n }\n\n const upload = typeof collection.upload === 'object' ? collection.upload : undefined\n const generatedVariantColumnKeys = new Set(\n (upload?.variants ?? []).flatMap(({ name }) =>\n generatedVariantMetadataFieldNames.flatMap((metadataFieldName) => [\n `variants_${name}_${metadataFieldName}`,\n `version_variants_${name}_${metadataFieldName}`,\n ]),\n ),\n )\n\n if (generatedVariantColumnKeys.size === 0) {\n continue\n }\n\n const tableNames = [adapter.tableNameMap.get(toSnakeCase(collection.slug))]\n\n if (collection.versions) {\n tableNames.push(\n adapter.tableNameMap.get(`_${toSnakeCase(collection.slug)}${adapter.versionsSuffix}`),\n )\n }\n\n for (const tableName of tableNames) {\n const rawTable = tableName ? adapter.rawTables[tableName] : undefined\n\n if (!tableName || !rawTable) {\n continue\n }\n\n const columns: SizesToVariantsColumnRename[] = []\n\n for (const [columnKey, { name }] of Object.entries(rawTable.columns)) {\n if (!generatedVariantColumnKeys.has(columnKey)) {\n continue\n }\n\n const prefix = columnPrefixes.find(({ current }) => name.startsWith(current))\n\n if (!prefix) {\n continue\n }\n\n const legacyName = `${prefix.legacy}${name.slice(prefix.current.length)}`\n\n columns.push(\n direction === 'up' ? { from: legacyName, to: name } : { from: name, to: legacyName },\n )\n }\n\n if (columns.length === 0) {\n continue\n }\n\n const indexes = Object.values(rawTable.indexes ?? {})\n .map((index) =>\n planIndexRename({ columns, direction, index, rawColumns: rawTable.columns, tableName }),\n )\n .filter((index): index is SizesToVariantsIndexRename => Boolean(index))\n\n plan.push({ columns, indexes, tableName })\n }\n }\n\n return plan\n}\n\nfunction getSizesToVariantsField({\n columnName,\n}: {\n columnName: string\n}): { columnName: string; columnPrefix: string; fieldPath: string } | undefined {\n if (columnName === 'version_sizes' || columnName.startsWith('version_sizes_')) {\n return {\n columnName: 'version_sizes',\n columnPrefix: 'version_sizes_',\n fieldPath: 'version.sizes',\n }\n }\n\n if (columnName === 'version_variants' || columnName.startsWith('version_variants_')) {\n return {\n columnName: 'version_variants',\n columnPrefix: 'version_variants_',\n fieldPath: 'version.variants',\n }\n }\n\n if (columnName === 'sizes' || columnName.startsWith('sizes_')) {\n return { columnName: 'sizes', columnPrefix: 'sizes_', fieldPath: 'sizes' }\n }\n\n if (columnName === 'variants' || columnName.startsWith('variants_')) {\n return { columnName: 'variants', columnPrefix: 'variants_', fieldPath: 'variants' }\n }\n\n return undefined\n}\n\nfunction isSizesToVariantsFieldColumn({\n column,\n field,\n}: {\n column: string\n field: { columnName: string; columnPrefix: string }\n}): boolean {\n return column === field.columnName || column.startsWith(field.columnPrefix)\n}\n\nfunction planIndexRename({\n columns,\n direction,\n index,\n rawColumns,\n tableName,\n}: {\n columns: SizesToVariantsColumnRename[]\n direction: SizesToVariantsDirection\n index: RawIndex\n rawColumns: RawTable['columns']\n tableName: string\n}): SizesToVariantsIndexRename | undefined {\n // `on` holds the column's schema key (e.g. `variants_heroLarge_filename`), not its database name.\n const currentColumns = [index.on].flat().map((key) => rawColumns[key]?.name ?? key)\n const renamedColumns = currentColumns.map((column) =>\n columns.find((rename) => (direction === 'up' ? rename.to : rename.from) === column),\n )\n\n if (renamedColumns.every((rename) => !rename)) {\n return undefined\n }\n\n const unique = Boolean(index.unique)\n\n if (direction === 'up') {\n const legacyColumns = currentColumns.map((column, i) => renamedColumns[i]?.from ?? column)\n\n return {\n columns: currentColumns,\n legacyNameBase: getLegacyIndexNameBase({\n currentColumns,\n indexName: index.name,\n legacyColumns,\n tableName,\n }),\n to: index.name,\n unique,\n }\n }\n\n const legacyColumns = currentColumns.map((column, i) => renamedColumns[i]?.to ?? column)\n const legacyNameBase = getLegacyIndexNameBase({\n currentColumns,\n indexName: index.name,\n legacyColumns,\n tableName,\n })\n\n return {\n columns: legacyColumns,\n from: index.name,\n legacyNameBase,\n to: buildGeneratedLegacyIndexName(legacyNameBase),\n unique,\n }\n}\n\nfunction getLegacyIndexNameBase({\n currentColumns,\n indexName,\n legacyColumns,\n tableName,\n}: {\n currentColumns: string[]\n indexName: string\n legacyColumns: string[]\n tableName: string\n}): string {\n const currentColumn = currentColumns.length === 1 ? currentColumns[0] : undefined\n const legacyColumn = legacyColumns.length === 1 ? legacyColumns[0] : undefined\n const currentFieldPath = currentColumn ? getGeneratedVariantFieldPath(currentColumn) : undefined\n const legacyFieldPath = legacyColumn ? getGeneratedVariantFieldPath(legacyColumn) : undefined\n\n if (currentColumn && currentFieldPath && legacyColumn && legacyFieldPath) {\n const currentFieldIndexNameBase = `${tableName}_${currentFieldPath}_${currentColumn}`\n\n if (isGeneratedLegacyIndexName({ indexName, legacyNameBase: currentFieldIndexNameBase })) {\n return `${tableName}_${legacyFieldPath}_${legacyColumn}`\n }\n }\n\n return legacyColumns.join('_')\n}\n\nfunction getGeneratedVariantFieldPath(columnName: string): string | undefined {\n for (const metadataFieldName of generatedVariantMetadataFieldNames) {\n const metadataColumnSuffix = `_${toSnakeCase(metadataFieldName)}`\n\n if (columnName.endsWith(metadataColumnSuffix)) {\n return columnName.slice(0, -metadataColumnSuffix.length)\n }\n }\n\n return undefined\n}\n\n/** Mirrors `buildIndexName` for an index that didn't collide, without registering the name. */\nexport function isGeneratedLegacyIndexName({\n indexName,\n legacyNameBase,\n}: {\n indexName: string\n legacyNameBase: string\n}): boolean {\n const suffixMatch = indexName.match(/(?:_(\\d+))?_idx$/)\n\n if (!suffixMatch) {\n return false\n }\n\n return indexName === buildGeneratedLegacyIndexName(legacyNameBase, Number(suffixMatch[1] ?? 0))\n}\n\nexport function buildGeneratedLegacyIndexName(name: string, number = 0): string {\n const suffix = `${number ? `_${number}` : ''}_idx`\n const indexName = `${name}${suffix}`\n\n return indexName.length > maxGeneratedIdentifierLength\n ? `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`\n : indexName\n}\n"],"names":["toSnakeCase","maxGeneratedIdentifierLength","findSizesToVariantsFieldCollision","columns","existingColumns","firstRename","undefined","fromField","getSizesToVariantsField","columnName","from","toField","to","hasSourceField","some","column","isSizesToVariantsFieldColumn","field","plannedDestinationColumns","Set","map","hasUnexpectedDestinationField","has","fieldPath","assertNoSizesToVariantsColumnCollisions","tableName","Error","fieldCollision","columnPrefixes","current","legacy","generatedVariantMetadataFieldNames","getSizesToVariantsRenames","adapter","direction","plan","collection","payload","config","collections","upload","generatedVariantColumnKeys","variants","flatMap","name","metadataFieldName","size","tableNames","tableNameMap","get","slug","versions","push","versionsSuffix","rawTable","rawTables","columnKey","Object","entries","prefix","find","startsWith","legacyName","slice","length","indexes","values","index","planIndexRename","rawColumns","filter","Boolean","columnPrefix","currentColumns","on","flat","key","renamedColumns","rename","every","unique","legacyColumns","i","legacyNameBase","getLegacyIndexNameBase","indexName","buildGeneratedLegacyIndexName","currentColumn","legacyColumn","currentFieldPath","getGeneratedVariantFieldPath","legacyFieldPath","currentFieldIndexNameBase","isGeneratedLegacyIndexName","join","metadataColumnSuffix","endsWith","suffixMatch","match","Number","number","suffix"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/getTransaction.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { shouldReadFromPrimary } from './readAfterWrite.js'\n\n/**\n * Returns current db transaction instance from req or adapter.drizzle itself\n *\n * If a transaction session doesn't exist (e.g., it was already committed/rolled back),\n * falls back to the default adapter.drizzle instance to prevent errors.\n *\n * When read replicas are configured and a write happened recently, returns the\n * unwrapped primary to avoid replication-lag stale reads.\n */\nexport const getTransaction = async <T extends DrizzleAdapter = DrizzleAdapter>(\n adapter: T,\n req?: Partial<PayloadRequest>,\n): Promise<T['drizzle']> => {\n if (!req?.transactionID) {\n if (shouldReadFromPrimary(adapter)) {\n return adapter.primaryDrizzle as T['drizzle']\n }\n return adapter.drizzle\n }\n\n return (adapter.sessions[await req.transactionID]?.db as T['drizzle']) || adapter.drizzle\n}\n"],"names":["shouldReadFromPrimary","getTransaction","adapter","req","transactionID","primaryDrizzle","drizzle","sessions","db"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,sBAAqB;AAE3D;;;;;;;;CAQC,GACD,OAAO,MAAMC,iBAAiB,OAC5BC,SACAC;IAEA,IAAI,CAACA,KAAKC,eAAe;QACvB,IAAIJ,sBAAsBE,UAAU;YAClC,OAAOA,QAAQG,cAAc;QAC/B;QACA,OAAOH,QAAQI,OAAO;IACxB;IAEA,OAAO,AAACJ,QAAQK,QAAQ,CAAC,MAAMJ,IAAIC,aAAa,CAAC,EAAEI,MAAuBN,QAAQI,OAAO;AAC3F,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/getTransaction.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { shouldReadFromPrimary } from './readAfterWrite.js'\n\n/**\n * Returns current db transaction instance from req or adapter.drizzle itself\n *\n * If a transaction session doesn't exist (e.g., it was already committed/rolled back),\n * falls back to the default adapter.drizzle instance to prevent errors.\n *\n * When read replicas are configured and a write happened recently, returns the\n * unwrapped primary to avoid replication-lag stale reads.\n */\nexport const getTransaction = async <T extends DrizzleAdapter = DrizzleAdapter>(\n adapter: T,\n req?: Partial<PayloadRequest>,\n): Promise<T['drizzle']> => {\n if (!req?.transactionID) {\n if (shouldReadFromPrimary(adapter)) {\n return adapter.primaryDrizzle\n }\n return adapter.drizzle\n }\n\n return (adapter.sessions[await req.transactionID]?.db as T['drizzle']) || adapter.drizzle\n}\n"],"names":["shouldReadFromPrimary","getTransaction","adapter","req","transactionID","primaryDrizzle","drizzle","sessions","db"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,sBAAqB;AAE3D;;;;;;;;CAQC,GACD,OAAO,MAAMC,iBAAiB,OAC5BC,SACAC;IAEA,IAAI,CAACA,KAAKC,eAAe;QACvB,IAAIJ,sBAAsBE,UAAU;YAClC,OAAOA,QAAQG,cAAc;QAC/B;QACA,OAAOH,QAAQI,OAAO;IACxB;IAEA,OAAO,AAACJ,QAAQK,QAAQ,CAAC,MAAMJ,IAAIC,aAAa,CAAC,EAAEI,MAAuBN,QAAQI,OAAO;AAC3F,EAAC"}
@@ -0,0 +1,9 @@
1
+ export type JSONPathSegment = {
2
+ type: 'arrayIndex';
3
+ value: string;
4
+ } | {
5
+ type: 'objectKey';
6
+ value: string;
7
+ };
8
+ export declare const parseJSONPathSegment: (segment: string) => JSONPathSegment;
9
+ //# sourceMappingURL=parseJSONPathSegment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseJSONPathSegment.d.ts","sourceRoot":"","sources":["../../src/utilities/parseJSONPathSegment.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAIL,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,eActD,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { sanitizePathSegment } from './sanitizePathSegment.js';
2
+ const ARRAY_INDEX_REGEX = /^\d+$/;
3
+ export const parseJSONPathSegment = (segment)=>{
4
+ const sanitizedSegment = sanitizePathSegment(segment);
5
+ if (ARRAY_INDEX_REGEX.test(sanitizedSegment)) {
6
+ return {
7
+ type: 'arrayIndex',
8
+ value: sanitizedSegment
9
+ };
10
+ }
11
+ return {
12
+ type: 'objectKey',
13
+ value: sanitizedSegment
14
+ };
15
+ };
16
+
17
+ //# sourceMappingURL=parseJSONPathSegment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/parseJSONPathSegment.ts"],"sourcesContent":["import { sanitizePathSegment } from './sanitizePathSegment.js'\n\nexport type JSONPathSegment =\n | {\n type: 'arrayIndex'\n value: string\n }\n | {\n type: 'objectKey'\n value: string\n }\n\nconst ARRAY_INDEX_REGEX = /^\\d+$/\n\nexport const parseJSONPathSegment = (segment: string): JSONPathSegment => {\n const sanitizedSegment = sanitizePathSegment(segment)\n\n if (ARRAY_INDEX_REGEX.test(sanitizedSegment)) {\n return {\n type: 'arrayIndex',\n value: sanitizedSegment,\n }\n }\n\n return {\n type: 'objectKey',\n value: sanitizedSegment,\n }\n}\n"],"names":["sanitizePathSegment","ARRAY_INDEX_REGEX","parseJSONPathSegment","segment","sanitizedSegment","test","type","value"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,2BAA0B;AAY9D,MAAMC,oBAAoB;AAE1B,OAAO,MAAMC,uBAAuB,CAACC;IACnC,MAAMC,mBAAmBJ,oBAAoBG;IAE7C,IAAIF,kBAAkBI,IAAI,CAACD,mBAAmB;QAC5C,OAAO;YACLE,MAAM;YACNC,OAAOH;QACT;IACF;IAEA,OAAO;QACLE,MAAM;QACNC,OAAOH;IACT;AACF,EAAC"}
@@ -3,11 +3,7 @@ import type { RawTable } from '../types.js';
3
3
  type Args = {
4
4
  block: Block;
5
5
  localized: boolean;
6
- /**
7
- * @todo make required in v4.0. Usually you'd wanna pass this in
8
- */
9
- parentIsLocalized?: boolean;
10
- rootTableName: string;
6
+ parentIsLocalized: boolean;
11
7
  table: RawTable;
12
8
  tableLocales?: RawTable;
13
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/utilities/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,cAAc,EAAE,MAAM,SAAS,CAAA;AAS3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,QAAQ,CAAA;IACf,YAAY,CAAC,EAAE,QAAQ,CAAA;CACxB,CAAA;AA+DD;;GAEG;AACH,eAAO,MAAM,gCAAgC,kEAM1C,IAAI,KAAG,OAwBT,CAAA;AAED,eAAO,MAAM,2BAA2B,eAAwC,CAAA;AAChF,eAAO,MAAM,qBAAqB,UAAW,cAAc,SAAS,MAAM,SAEzE,CAAA;AAED,eAAO,MAAM,qBAAqB,UAAW,cAAc,qBAAqB,MAAM,WAMrF,CAAA"}
1
+ {"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/utilities/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,cAAc,EAAE,MAAM,SAAS,CAAA;AAS3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,KAAK,EAAE,QAAQ,CAAA;IACf,YAAY,CAAC,EAAE,QAAQ,CAAA;CACxB,CAAA;AA+DD;;GAEG;AACH,eAAO,MAAM,gCAAgC,kEAM1C,IAAI,KAAG,OAwBT,CAAA;AAED,eAAO,MAAM,2BAA2B,eAAwC,CAAA;AAChF,eAAO,MAAM,qBAAqB,UAAW,cAAc,SAAS,MAAM,SAEzE,CAAA;AAED,eAAO,MAAM,qBAAqB,UAAW,cAAc,qBAAqB,MAAM,WAMrF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/validateExistingBlockIsIdentical.ts"],"sourcesContent":["import type { Block, Field, FlattenedBlock } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nimport type { RawTable } from '../types.js'\n\ntype Args = {\n block: Block\n localized: boolean\n /**\n * @todo make required in v4.0. Usually you'd wanna pass this in\n */\n parentIsLocalized?: boolean\n rootTableName: string\n table: RawTable\n tableLocales?: RawTable\n}\n\nconst getFlattenedFieldNames = (args: {\n fields: Field[]\n parentIsLocalized: boolean\n prefix?: string\n}): { localized?: boolean; name: string }[] => {\n const { fields, parentIsLocalized, prefix = '' } = args\n return fields.reduce((fieldsToUse, field) => {\n let fieldPrefix = prefix\n\n if (\n ['array', 'blocks', 'relationship', 'upload'].includes(field.type) ||\n ('hasMany' in field && field.hasMany === true)\n ) {\n return fieldsToUse\n }\n\n if (fieldHasSubFields(field)) {\n fieldPrefix = 'name' in field ? `${prefix}${field.name}_` : prefix\n return [\n ...fieldsToUse,\n ...getFlattenedFieldNames({\n fields: field.fields,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n prefix: fieldPrefix,\n }),\n ]\n }\n\n if (field.type === 'tabs') {\n return [\n ...fieldsToUse,\n ...field.tabs.reduce((tabFields, tab) => {\n fieldPrefix = 'name' in tab ? `${prefix}_${tab.name}` : prefix\n return [\n ...tabFields,\n ...(tabHasName(tab)\n ? [{ ...tab, type: 'tab' }]\n : getFlattenedFieldNames({\n fields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n prefix: fieldPrefix,\n })),\n ]\n }, []),\n ]\n }\n\n if (fieldAffectsData(field)) {\n return [\n ...fieldsToUse,\n {\n name: `${fieldPrefix}${field.name}`,\n localized: fieldShouldBeLocalized({ field, parentIsLocalized }),\n },\n ]\n }\n\n return fieldsToUse\n }, [])\n}\n\n/**\n * returns true if all the fields in a block are identical to the existing table\n */\nexport const validateExistingBlockIsIdentical = ({\n block,\n localized,\n parentIsLocalized,\n table,\n tableLocales,\n}: Args): boolean => {\n const fieldNames = getFlattenedFieldNames({\n fields: block.fields,\n parentIsLocalized: parentIsLocalized || localized,\n })\n\n const missingField =\n // ensure every field from the config is in the matching table\n fieldNames.find(({ name, localized }) => {\n const fieldTable = localized && tableLocales ? tableLocales : table\n return Object.keys(fieldTable.columns).indexOf(name) === -1\n }) ||\n // ensure every table column is matched for every field from the config\n Object.keys(table).find((fieldName) => {\n if (!['_locale', '_order', '_parentID', '_path', '_uuid'].includes(fieldName)) {\n return fieldNames.findIndex((field) => field.name) === -1\n }\n })\n\n if (missingField) {\n return false\n }\n\n return Boolean(localized) === Boolean(table.columns._locale)\n}\n\nexport const InternalBlockTableNameIndex = Symbol('InternalBlockTableNameIndex')\nexport const setInternalBlockIndex = (block: FlattenedBlock, index: number) => {\n block[InternalBlockTableNameIndex] = index\n}\n\nexport const resolveBlockTableName = (block: FlattenedBlock, originalTableName: string) => {\n if (!block[InternalBlockTableNameIndex]) {\n return originalTableName\n }\n\n return `${originalTableName}_${block[InternalBlockTableNameIndex]}`\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","tabHasName","getFlattenedFieldNames","args","fields","parentIsLocalized","prefix","reduce","fieldsToUse","field","fieldPrefix","includes","type","hasMany","name","localized","tabs","tabFields","tab","validateExistingBlockIsIdentical","block","table","tableLocales","fieldNames","missingField","find","fieldTable","Object","keys","columns","indexOf","fieldName","findIndex","Boolean","_locale","InternalBlockTableNameIndex","Symbol","setInternalBlockIndex","index","resolveBlockTableName","originalTableName"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,UAAU,QACL,iBAAgB;AAgBvB,MAAMC,yBAAyB,CAACC;IAK9B,MAAM,EAAEC,MAAM,EAAEC,iBAAiB,EAAEC,SAAS,EAAE,EAAE,GAAGH;IACnD,OAAOC,OAAOG,MAAM,CAAC,CAACC,aAAaC;QACjC,IAAIC,cAAcJ;QAElB,IACE;YAAC;YAAS;YAAU;YAAgB;SAAS,CAACK,QAAQ,CAACF,MAAMG,IAAI,KAChE,aAAaH,SAASA,MAAMI,OAAO,KAAK,MACzC;YACA,OAAOL;QACT;QAEA,IAAIT,kBAAkBU,QAAQ;YAC5BC,cAAc,UAAUD,QAAQ,GAAGH,SAASG,MAAMK,IAAI,CAAC,CAAC,CAAC,GAAGR;YAC5D,OAAO;mBACFE;mBACAN,uBAAuB;oBACxBE,QAAQK,MAAML,MAAM;oBACpBC,mBAAmBA,qBAAsB,eAAeI,SAASA,MAAMM,SAAS;oBAChFT,QAAQI;gBACV;aACD;QACH;QAEA,IAAID,MAAMG,IAAI,KAAK,QAAQ;YACzB,OAAO;mBACFJ;mBACAC,MAAMO,IAAI,CAACT,MAAM,CAAC,CAACU,WAAWC;oBAC/BR,cAAc,UAAUQ,MAAM,GAAGZ,OAAO,CAAC,EAAEY,IAAIJ,IAAI,EAAE,GAAGR;oBACxD,OAAO;2BACFW;2BACChB,WAAWiB,OACX;4BAAC;gCAAE,GAAGA,GAAG;gCAAEN,MAAM;4BAAM;yBAAE,GACzBV,uBAAuB;4BACrBE,QAAQc,IAAId,MAAM;4BAClBC,mBAAmBA,qBAAqBa,IAAIH,SAAS;4BACrDT,QAAQI;wBACV;qBACL;gBACH,GAAG,EAAE;aACN;QACH;QAEA,IAAIZ,iBAAiBW,QAAQ;YAC3B,OAAO;mBACFD;gBACH;oBACEM,MAAM,GAAGJ,cAAcD,MAAMK,IAAI,EAAE;oBACnCC,WAAWf,uBAAuB;wBAAES;wBAAOJ;oBAAkB;gBAC/D;aACD;QACH;QAEA,OAAOG;IACT,GAAG,EAAE;AACP;AAEA;;CAEC,GACD,OAAO,MAAMW,mCAAmC,CAAC,EAC/CC,KAAK,EACLL,SAAS,EACTV,iBAAiB,EACjBgB,KAAK,EACLC,YAAY,EACP;IACL,MAAMC,aAAarB,uBAAuB;QACxCE,QAAQgB,MAAMhB,MAAM;QACpBC,mBAAmBA,qBAAqBU;IAC1C;IAEA,MAAMS,eACJ,8DAA8D;IAC9DD,WAAWE,IAAI,CAAC,CAAC,EAAEX,IAAI,EAAEC,SAAS,EAAE;QAClC,MAAMW,aAAaX,aAAaO,eAAeA,eAAeD;QAC9D,OAAOM,OAAOC,IAAI,CAACF,WAAWG,OAAO,EAAEC,OAAO,CAAChB,UAAU,CAAC;IAC5D,MACA,uEAAuE;IACvEa,OAAOC,IAAI,CAACP,OAAOI,IAAI,CAAC,CAACM;QACvB,IAAI,CAAC;YAAC;YAAW;YAAU;YAAa;YAAS;SAAQ,CAACpB,QAAQ,CAACoB,YAAY;YAC7E,OAAOR,WAAWS,SAAS,CAAC,CAACvB,QAAUA,MAAMK,IAAI,MAAM,CAAC;QAC1D;IACF;IAEF,IAAIU,cAAc;QAChB,OAAO;IACT;IAEA,OAAOS,QAAQlB,eAAekB,QAAQZ,MAAMQ,OAAO,CAACK,OAAO;AAC7D,EAAC;AAED,OAAO,MAAMC,8BAA8BC,OAAO,+BAA8B;AAChF,OAAO,MAAMC,wBAAwB,CAACjB,OAAuBkB;IAC3DlB,KAAK,CAACe,4BAA4B,GAAGG;AACvC,EAAC;AAED,OAAO,MAAMC,wBAAwB,CAACnB,OAAuBoB;IAC3D,IAAI,CAACpB,KAAK,CAACe,4BAA4B,EAAE;QACvC,OAAOK;IACT;IAEA,OAAO,GAAGA,kBAAkB,CAAC,EAAEpB,KAAK,CAACe,4BAA4B,EAAE;AACrE,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/validateExistingBlockIsIdentical.ts"],"sourcesContent":["import type { Block, Field, FlattenedBlock } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nimport type { RawTable } from '../types.js'\n\ntype Args = {\n block: Block\n localized: boolean\n parentIsLocalized: boolean\n table: RawTable\n tableLocales?: RawTable\n}\n\nconst getFlattenedFieldNames = (args: {\n fields: Field[]\n parentIsLocalized: boolean\n prefix?: string\n}): { localized?: boolean; name: string }[] => {\n const { fields, parentIsLocalized, prefix = '' } = args\n return fields.reduce((fieldsToUse, field) => {\n let fieldPrefix = prefix\n\n if (\n ['array', 'blocks', 'relationship', 'upload'].includes(field.type) ||\n ('hasMany' in field && field.hasMany === true)\n ) {\n return fieldsToUse\n }\n\n if (fieldHasSubFields(field)) {\n fieldPrefix = 'name' in field ? `${prefix}${field.name}_` : prefix\n return [\n ...fieldsToUse,\n ...getFlattenedFieldNames({\n fields: field.fields,\n parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized),\n prefix: fieldPrefix,\n }),\n ]\n }\n\n if (field.type === 'tabs') {\n return [\n ...fieldsToUse,\n ...field.tabs.reduce((tabFields, tab) => {\n fieldPrefix = 'name' in tab ? `${prefix}_${tab.name}` : prefix\n return [\n ...tabFields,\n ...(tabHasName(tab)\n ? [{ ...tab, type: 'tab' }]\n : getFlattenedFieldNames({\n fields: tab.fields,\n parentIsLocalized: parentIsLocalized || tab.localized,\n prefix: fieldPrefix,\n })),\n ]\n }, []),\n ]\n }\n\n if (fieldAffectsData(field)) {\n return [\n ...fieldsToUse,\n {\n name: `${fieldPrefix}${field.name}`,\n localized: fieldShouldBeLocalized({ field, parentIsLocalized }),\n },\n ]\n }\n\n return fieldsToUse\n }, [])\n}\n\n/**\n * returns true if all the fields in a block are identical to the existing table\n */\nexport const validateExistingBlockIsIdentical = ({\n block,\n localized,\n parentIsLocalized,\n table,\n tableLocales,\n}: Args): boolean => {\n const fieldNames = getFlattenedFieldNames({\n fields: block.fields,\n parentIsLocalized: parentIsLocalized || localized,\n })\n\n const missingField =\n // ensure every field from the config is in the matching table\n fieldNames.find(({ name, localized }) => {\n const fieldTable = localized && tableLocales ? tableLocales : table\n return Object.keys(fieldTable.columns).indexOf(name) === -1\n }) ||\n // ensure every table column is matched for every field from the config\n Object.keys(table).find((fieldName) => {\n if (!['_locale', '_order', '_parentID', '_path', '_uuid'].includes(fieldName)) {\n return fieldNames.findIndex((field) => field.name) === -1\n }\n })\n\n if (missingField) {\n return false\n }\n\n return Boolean(localized) === Boolean(table.columns._locale)\n}\n\nexport const InternalBlockTableNameIndex = Symbol('InternalBlockTableNameIndex')\nexport const setInternalBlockIndex = (block: FlattenedBlock, index: number) => {\n block[InternalBlockTableNameIndex] = index\n}\n\nexport const resolveBlockTableName = (block: FlattenedBlock, originalTableName: string) => {\n if (!block[InternalBlockTableNameIndex]) {\n return originalTableName\n }\n\n return `${originalTableName}_${block[InternalBlockTableNameIndex]}`\n}\n"],"names":["fieldAffectsData","fieldHasSubFields","fieldShouldBeLocalized","tabHasName","getFlattenedFieldNames","args","fields","parentIsLocalized","prefix","reduce","fieldsToUse","field","fieldPrefix","includes","type","hasMany","name","localized","tabs","tabFields","tab","validateExistingBlockIsIdentical","block","table","tableLocales","fieldNames","missingField","find","fieldTable","Object","keys","columns","indexOf","fieldName","findIndex","Boolean","_locale","InternalBlockTableNameIndex","Symbol","setInternalBlockIndex","index","resolveBlockTableName","originalTableName"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Postgres max identifier length (NAMEDATALEN - 1). */
2
+ export declare const maxIdentifierLength = 63;
3
+ /**
4
+ * Cap for builder-generated identifiers (`buildIndexName`/`buildForeignKeyName`). Sits
5
+ * below `maxIdentifierLength` to leave headroom for the appended `_idx`/`_fk`/`_N` suffixes.
6
+ */
7
+ export declare const maxGeneratedIdentifierLength: number;
8
+ /**
9
+ * Throws if a table or enum identifier exceeds the Postgres 63-char limit.
10
+ */
11
+ export declare const validateIdentifierLength: (name: string) => string;
12
+ //# sourceMappingURL=validateIdentifierLength.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateIdentifierLength.d.ts","sourceRoot":"","sources":["../../src/utilities/validateIdentifierLength.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAA0B,CAAA;AAEnE;;GAEG;AACH,eAAO,MAAM,wBAAwB,SAAU,MAAM,KAAG,MAUvD,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { APIError } from 'payload';
2
+ /** Postgres max identifier length (NAMEDATALEN - 1). */ export const maxIdentifierLength = 63;
3
+ /**
4
+ * Cap for builder-generated identifiers (`buildIndexName`/`buildForeignKeyName`). Sits
5
+ * below `maxIdentifierLength` to leave headroom for the appended `_idx`/`_fk`/`_N` suffixes.
6
+ */ export const maxGeneratedIdentifierLength = maxIdentifierLength - 3;
7
+ /**
8
+ * Throws if a table or enum identifier exceeds the Postgres 63-char limit.
9
+ */ export const validateIdentifierLength = (name)=>{
10
+ if (name.length > maxIdentifierLength) {
11
+ throw new APIError(`Exceeded max identifier length for table or enum name of ${maxIdentifierLength} characters. Invalid name: ${name}.
12
+ Tip: You can use the dbName property to reduce the table name length.
13
+ `);
14
+ }
15
+ return name;
16
+ };
17
+
18
+ //# sourceMappingURL=validateIdentifierLength.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/validateIdentifierLength.ts"],"sourcesContent":["import { APIError } from 'payload'\n\n/** Postgres max identifier length (NAMEDATALEN - 1). */\nexport const maxIdentifierLength = 63\n\n/**\n * Cap for builder-generated identifiers (`buildIndexName`/`buildForeignKeyName`). Sits\n * below `maxIdentifierLength` to leave headroom for the appended `_idx`/`_fk`/`_N` suffixes.\n */\nexport const maxGeneratedIdentifierLength = maxIdentifierLength - 3\n\n/**\n * Throws if a table or enum identifier exceeds the Postgres 63-char limit.\n */\nexport const validateIdentifierLength = (name: string): string => {\n if (name.length > maxIdentifierLength) {\n throw new APIError(\n `Exceeded max identifier length for table or enum name of ${maxIdentifierLength} characters. Invalid name: ${name}.\nTip: You can use the dbName property to reduce the table name length.\n `,\n )\n }\n\n return name\n}\n"],"names":["APIError","maxIdentifierLength","maxGeneratedIdentifierLength","validateIdentifierLength","name","length"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAElC,sDAAsD,GACtD,OAAO,MAAMC,sBAAsB,GAAE;AAErC;;;CAGC,GACD,OAAO,MAAMC,+BAA+BD,sBAAsB,EAAC;AAEnE;;CAEC,GACD,OAAO,MAAME,2BAA2B,CAACC;IACvC,IAAIA,KAAKC,MAAM,GAAGJ,qBAAqB;QACrC,MAAM,IAAID,SACR,CAAC,yDAAyD,EAAEC,oBAAoB,2BAA2B,EAAEG,KAAK;;MAElH,CAAC;IAEL;IAEA,OAAOA;AACT,EAAC"}