@payloadcms/drizzle 4.0.0-internal.f05c47f → 4.0.0-internal.f15737c

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 (205) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +2 -8
  3. package/dist/count.js.map +1 -1
  4. package/dist/createGlobalVersion.d.ts.map +1 -1
  5. package/dist/createGlobalVersion.js +2 -15
  6. package/dist/createGlobalVersion.js.map +1 -1
  7. package/dist/createVersion.d.ts.map +1 -1
  8. package/dist/createVersion.js +1 -12
  9. package/dist/createVersion.js.map +1 -1
  10. package/dist/deleteOne.d.ts.map +1 -1
  11. package/dist/deleteOne.js +1 -18
  12. package/dist/deleteOne.js.map +1 -1
  13. package/dist/exports/postgres.d.ts +3 -0
  14. package/dist/exports/postgres.d.ts.map +1 -1
  15. package/dist/exports/postgres.js +3 -0
  16. package/dist/exports/postgres.js.map +1 -1
  17. package/dist/exports/sqlite.d.ts +1 -0
  18. package/dist/exports/sqlite.d.ts.map +1 -1
  19. package/dist/exports/sqlite.js +1 -0
  20. package/dist/exports/sqlite.js.map +1 -1
  21. package/dist/find/buildFindManyArgs.d.ts +2 -3
  22. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  23. package/dist/find/buildFindManyArgs.js +1 -2
  24. package/dist/find/buildFindManyArgs.js.map +1 -1
  25. package/dist/find/buildPolymorphicJoinQuery.d.ts +38 -0
  26. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  27. package/dist/find/buildPolymorphicJoinQuery.js +135 -0
  28. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  29. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  30. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  31. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  32. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  33. package/dist/find/createPolymorphicJoinWherePlan.d.ts +37 -0
  34. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  35. package/dist/find/createPolymorphicJoinWherePlan.js +191 -0
  36. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  37. package/dist/find/findMany.d.ts.map +1 -1
  38. package/dist/find/findMany.js +0 -1
  39. package/dist/find/findMany.js.map +1 -1
  40. package/dist/find/traverseFields.d.ts +2 -3
  41. package/dist/find/traverseFields.d.ts.map +1 -1
  42. package/dist/find/traverseFields.js +20 -215
  43. package/dist/find/traverseFields.js.map +1 -1
  44. package/dist/find.d.ts.map +1 -1
  45. package/dist/find.js +3 -17
  46. package/dist/find.js.map +1 -1
  47. package/dist/findGlobal.d.ts.map +1 -1
  48. package/dist/findGlobal.js +4 -16
  49. package/dist/findGlobal.js.map +1 -1
  50. package/dist/findGlobalVersions.js +3 -8
  51. package/dist/findGlobalVersions.js.map +1 -1
  52. package/dist/findOne.d.ts +1 -1
  53. package/dist/findOne.d.ts.map +1 -1
  54. package/dist/findOne.js +2 -15
  55. package/dist/findOne.js.map +1 -1
  56. package/dist/index.d.ts +4 -2
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/migrate.d.ts.map +1 -1
  61. package/dist/migrate.js +41 -15
  62. package/dist/migrate.js.map +1 -1
  63. package/dist/migrateDown.d.ts +2 -1
  64. package/dist/migrateDown.d.ts.map +1 -1
  65. package/dist/migrateDown.js +17 -4
  66. package/dist/migrateDown.js.map +1 -1
  67. package/dist/migrateFresh.d.ts +4 -2
  68. package/dist/migrateFresh.d.ts.map +1 -1
  69. package/dist/migrateFresh.js +26 -9
  70. package/dist/migrateFresh.js.map +1 -1
  71. package/dist/migrateRefresh.d.ts +2 -1
  72. package/dist/migrateRefresh.d.ts.map +1 -1
  73. package/dist/migrateRefresh.js +20 -5
  74. package/dist/migrateRefresh.js.map +1 -1
  75. package/dist/migrateReset.d.ts +2 -1
  76. package/dist/migrateReset.d.ts.map +1 -1
  77. package/dist/migrateReset.js +18 -4
  78. package/dist/migrateReset.js.map +1 -1
  79. package/dist/migrateStatus.d.ts +2 -1
  80. package/dist/migrateStatus.d.ts.map +1 -1
  81. package/dist/migrateStatus.js +11 -6
  82. package/dist/migrateStatus.js.map +1 -1
  83. package/dist/postgres/createJSONQuery/index.js +3 -3
  84. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  85. package/dist/postgres/init.d.ts.map +1 -1
  86. package/dist/postgres/init.js +6 -0
  87. package/dist/postgres/init.js.map +1 -1
  88. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  89. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  90. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  91. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  92. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  93. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  94. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  95. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  96. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  97. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  98. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  99. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  100. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  101. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  102. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  103. package/dist/postgres/query/postgresUnaccent.js +40 -0
  104. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  105. package/dist/postgres/types.d.ts +13 -2
  106. package/dist/postgres/types.d.ts.map +1 -1
  107. package/dist/postgres/types.js.map +1 -1
  108. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  109. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  110. package/dist/queries/buildOperatorConstraint.js +63 -0
  111. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  112. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  113. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  114. package/dist/queries/getTableColumnFromPath.js +59 -27
  115. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  116. package/dist/queries/operatorMap.d.ts +7 -3
  117. package/dist/queries/operatorMap.d.ts.map +1 -1
  118. package/dist/queries/operatorMap.js.map +1 -1
  119. package/dist/queries/parseParams.d.ts.map +1 -1
  120. package/dist/queries/parseParams.js +262 -10
  121. package/dist/queries/parseParams.js.map +1 -1
  122. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  123. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  124. package/dist/queries/resolveRelationshipPath.js +66 -0
  125. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  126. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  127. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  128. package/dist/queries/validateOperatorHandlers.js +30 -0
  129. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  130. package/dist/queryDrafts.d.ts.map +1 -1
  131. package/dist/queryDrafts.js +3 -10
  132. package/dist/queryDrafts.js.map +1 -1
  133. package/dist/schema/build.d.ts.map +1 -1
  134. package/dist/schema/build.js +4 -5
  135. package/dist/schema/build.js.map +1 -1
  136. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  137. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  138. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  139. package/dist/sqlite/createJSONQuery/index.js +6 -5
  140. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  141. package/dist/sqlite/insert.d.ts.map +1 -1
  142. package/dist/sqlite/insert.js +4 -1
  143. package/dist/sqlite/insert.js.map +1 -1
  144. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  145. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  146. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  147. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  148. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  149. package/dist/transform/write/traverseFields.js +8 -14
  150. package/dist/transform/write/traverseFields.js.map +1 -1
  151. package/dist/types.d.ts +50 -2
  152. package/dist/types.d.ts.map +1 -1
  153. package/dist/types.js.map +1 -1
  154. package/dist/updateGlobal.d.ts +1 -1
  155. package/dist/updateGlobal.d.ts.map +1 -1
  156. package/dist/updateGlobal.js +3 -30
  157. package/dist/updateGlobal.js.map +1 -1
  158. package/dist/updateOne.d.ts.map +1 -1
  159. package/dist/updateOne.js +43 -9
  160. package/dist/updateOne.js.map +1 -1
  161. package/dist/upsertRow/index.d.ts +1 -1
  162. package/dist/upsertRow/index.d.ts.map +1 -1
  163. package/dist/upsertRow/index.js +25 -5
  164. package/dist/upsertRow/index.js.map +1 -1
  165. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  166. package/dist/utilities/buildCreateMigration.js +12 -8
  167. package/dist/utilities/buildCreateMigration.js.map +1 -1
  168. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  169. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  170. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  171. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  172. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  173. package/dist/utilities/buildForeignKeyName.js +3 -2
  174. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  175. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  176. package/dist/utilities/buildIndexName.js +3 -2
  177. package/dist/utilities/buildIndexName.js.map +1 -1
  178. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  179. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  180. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  181. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  182. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  183. package/dist/utilities/createSchemaGenerator.js +3 -0
  184. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  185. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  186. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  187. package/dist/utilities/getSizesToVariantsRenames.js +249 -0
  188. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  189. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  190. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  191. package/dist/utilities/parseJSONPathSegment.js +17 -0
  192. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  193. package/dist/utilities/validateIdentifierLength.d.ts +5 -0
  194. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -1
  195. package/dist/utilities/validateIdentifierLength.js +4 -0
  196. package/dist/utilities/validateIdentifierLength.js.map +1 -1
  197. package/package.json +3 -3
  198. package/dist/schema/buildRawSchema.spec.js +0 -230
  199. package/dist/schema/buildRawSchema.spec.js.map +0 -1
  200. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  201. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  202. package/dist/utilities/isValidStringID.spec.js +0 -15
  203. package/dist/utilities/isValidStringID.spec.js.map +0 -1
  204. package/dist/utilities/validateIdentifierLength.spec.js +0 -19
  205. package/dist/utilities/validateIdentifierLength.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildCreateMigration.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { CreateMigration, Payload } from 'payload'\n\nimport fs from 'fs'\nimport path from 'path'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nexport const buildCreateMigration = ({\n executeMethod,\n filename,\n sanitizeStatements,\n}: {\n executeMethod: string\n filename: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): CreateMigration => {\n const dirname = path.dirname(filename)\n return async function createMigration(\n this: DrizzleAdapter,\n { file, forceAcceptWarning, migrationName, payload, skipEmpty },\n ) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n\n const { generateDrizzleJson, generateMigration, upSnapshot } = this.requireDrizzleKit()\n\n const drizzleJsonAfter = await generateDrizzleJson(this.schema)\n\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n\n const predefinedMigration = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n })\n\n imports = predefinedMigration.imports\n downSQL = predefinedMigration.downSQL\n upSQL = predefinedMigration.upSQL\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n if (typeof predefinedMigration.dynamic === 'function') {\n const dynamicResult = await predefinedMigration.dynamic({ filePath, payload })\n\n if (dynamicResult.upSQL) {\n upSQL = dynamicResult.upSQL\n }\n\n if (dynamicResult.downSQL) {\n downSQL = dynamicResult.downSQL\n }\n\n if (dynamicResult.imports) {\n imports = dynamicResult.imports\n }\n }\n\n let drizzleJsonBefore = this.defaultDrizzleSnapshot as DrizzleSnapshotJSON\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (upSnapshot && drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upSnapshot(drizzleJsonBefore)\n }\n }\n\n payload.logger.info('Starting migration: generating UP statements...')\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n\n payload.logger.info('Migration UP complete. Generating DOWN statements...')\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n\n payload.logger.info('Migration DOWN statements generation complete.')\n\n const sqlExecute = `await db.${executeMethod}(` + 'sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsUp })\n }\n if (sqlStatementsDown?.length) {\n downSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsDown })\n }\n\n if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {\n if (skipEmpty) {\n process.exit(0)\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!shouldCreateBlankMigration) {\n process.exit(0)\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n const data = getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n })\n\n const fullPath = `${filePath}.ts`\n\n // write migration\n fs.writeFileSync(fullPath, data)\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${fullPath}` })\n }\n}\n"],"names":["fs","path","getPredefinedMigration","writeMigrationIndex","prompts","getMigrationTemplate","buildCreateMigration","executeMethod","filename","sanitizeStatements","dirname","createMigration","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","predefinedMigration","timestamp","name","slice","join","fileName","filePath","dynamic","dynamicResult","drizzleJsonBefore","defaultDrizzleSnapshot","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","logger","info","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","statements","process","exit","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","data","packageName","fullPath","migrationsDir","msg"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/buildCreateMigration.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { CreateMigration } from 'payload'\n\nimport fs from 'fs'\nimport path from 'path'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nexport const buildCreateMigration = ({\n executeMethod,\n filename,\n sanitizeStatements,\n}: {\n executeMethod: string\n filename: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): CreateMigration => {\n const dirname = path.dirname(filename)\n return async function createMigration(\n this: DrizzleAdapter,\n { file, forceAcceptWarning, migrationName, payload, shouldPrompt = true, skipEmpty },\n ) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n\n const { generateDrizzleJson, generateMigration, upSnapshot } = this.requireDrizzleKit()\n\n const drizzleJsonAfter = await generateDrizzleJson(this.schema)\n\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n\n const predefinedMigration = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n })\n\n imports = predefinedMigration.imports\n downSQL = predefinedMigration.downSQL\n upSQL = predefinedMigration.upSQL\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n if (typeof predefinedMigration.dynamic === 'function') {\n const dynamicResult = await predefinedMigration.dynamic({ filePath, payload })\n\n if (dynamicResult.upSQL) {\n upSQL = dynamicResult.upSQL\n }\n\n if (dynamicResult.downSQL) {\n downSQL = dynamicResult.downSQL\n }\n\n if (dynamicResult.imports) {\n imports = dynamicResult.imports\n }\n }\n\n let drizzleJsonBefore = this.defaultDrizzleSnapshot as DrizzleSnapshotJSON\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (upSnapshot && drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upSnapshot(drizzleJsonBefore)\n }\n }\n\n payload.logger.info('Starting migration: generating UP statements...')\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n\n payload.logger.info('Migration UP complete. Generating DOWN statements...')\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n\n payload.logger.info('Migration DOWN statements generation complete.')\n\n const sqlExecute = `await db.${executeMethod}(` + 'sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsUp })\n }\n if (sqlStatementsDown?.length) {\n downSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsDown })\n }\n\n if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {\n if (skipEmpty || !shouldPrompt) {\n return { created: false }\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts({\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n })\n\n if (!shouldCreateBlankMigration) {\n return { created: false }\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n const data = getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n })\n\n const fullPath = `${filePath}.ts`\n\n // write migration\n fs.writeFileSync(fullPath, data)\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${fullPath}` })\n\n return { created: true, path: fullPath }\n }\n}\n"],"names":["fs","path","getPredefinedMigration","writeMigrationIndex","prompts","getMigrationTemplate","buildCreateMigration","executeMethod","filename","sanitizeStatements","dirname","createMigration","file","forceAcceptWarning","migrationName","payload","shouldPrompt","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","predefinedMigration","timestamp","name","slice","join","fileName","filePath","dynamic","dynamicResult","drizzleJsonBefore","defaultDrizzleSnapshot","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","logger","info","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","statements","created","confirm","shouldCreateBlankMigration","type","initial","message","writeFileSync","stringify","data","packageName","fullPath","migrationsDir","msg"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { DynamicMigrationTemplate } from 'payload';
2
+ /**
3
+ * Builds the `sizes-to-variants` predefined migration for a SQL adapter. The migration renames
4
+ * columns rather than letting drizzle-kit diff the schema (which would drop and re-add them,
5
+ * losing every stored image size).
6
+ *
7
+ * It also writes a schema snapshot: the project's previous snapshot with only these renames
8
+ * applied. The next generated migration then diffs from the renamed columns instead of dropping
9
+ * them, and still picks up every other schema change the upgrade brings. Without a previous
10
+ * snapshot (a project that has only ever used `push`) there's nothing to update, so none is written.
11
+ */
12
+ export declare const buildDynamicPredefinedSizesToVariantsMigration: ({ packageName, }: {
13
+ packageName: string;
14
+ }) => DynamicMigrationTemplate;
15
+ //# sourceMappingURL=buildDynamicPredefinedSizesToVariantsMigration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildDynamicPredefinedSizesToVariantsMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildDynamicPredefinedSizesToVariantsMigration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AA+BvD;;;;;;;;;GASG;AACH,eAAO,MAAM,8CAA8C,qBAExD;IACD,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,wBAoBH,CAAA"}
@@ -0,0 +1,110 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { readdirSync, readFileSync, writeFileSync } from 'fs';
3
+ import { findSizesToVariantsFieldCollision, getSizesToVariantsRenames } from './getSizesToVariantsRenames.js';
4
+ /**
5
+ * Builds the `sizes-to-variants` predefined migration for a SQL adapter. The migration renames
6
+ * columns rather than letting drizzle-kit diff the schema (which would drop and re-add them,
7
+ * losing every stored image size).
8
+ *
9
+ * It also writes a schema snapshot: the project's previous snapshot with only these renames
10
+ * applied. The next generated migration then diffs from the renamed columns instead of dropping
11
+ * them, and still picks up every other schema change the upgrade brings. Without a previous
12
+ * snapshot (a project that has only ever used `push`) there's nothing to update, so none is written.
13
+ */ export const buildDynamicPredefinedSizesToVariantsMigration = ({ packageName })=>{
14
+ return async ({ filePath, payload })=>{
15
+ const adapter = payload.db;
16
+ const previousSnapshot = await readLatestSnapshot({
17
+ adapter
18
+ });
19
+ if (previousSnapshot) {
20
+ const renamedSnapshot = applySizesToVariantsRenames({
21
+ plan: getSizesToVariantsRenames({
22
+ adapter,
23
+ direction: 'up'
24
+ }),
25
+ snapshot: previousSnapshot
26
+ });
27
+ writeFileSync(`${filePath}.json`, JSON.stringify(renamedSnapshot, null, 2));
28
+ }
29
+ return {
30
+ downSQL: ` await migrateSizesToVariants({ db, direction: 'down', payload })`,
31
+ imports: `import { migrateSizesToVariants } from '${packageName}/migration-utils'`,
32
+ upSQL: ` await migrateSizesToVariants({ db, payload })`
33
+ };
34
+ };
35
+ };
36
+ /** The latest snapshot in the migrations directory, upgraded to drizzle-kit's current format. */ async function readLatestSnapshot({ adapter }) {
37
+ const dir = adapter.migrationDir;
38
+ const latestSnapshotFile = readdirSync(dir).filter((file)=>file.endsWith('.json')).sort().reverse()[0];
39
+ if (!latestSnapshotFile) {
40
+ return undefined;
41
+ }
42
+ const { generateDrizzleJson, upSnapshot } = adapter.requireDrizzleKit();
43
+ const currentVersion = (await generateDrizzleJson(adapter.schema)).version;
44
+ const snapshot = JSON.parse(readFileSync(`${dir}/${latestSnapshotFile}`, 'utf8'));
45
+ return upSnapshot && snapshot.version < currentVersion ? upSnapshot(snapshot) : snapshot;
46
+ }
47
+ function applySizesToVariantsRenames({ plan, snapshot }) {
48
+ const renamed = structuredClone(snapshot);
49
+ for (const { columns, indexes, tableName } of plan){
50
+ const table = Object.values(renamed.tables).find(({ name })=>name === tableName);
51
+ if (!table) {
52
+ continue;
53
+ }
54
+ const existingColumns = new Set(Object.values(table.columns).map(({ name })=>name));
55
+ for (const { from, to } of columns){
56
+ if (existingColumns.has(from) && existingColumns.has(to)) {
57
+ throw new Error(`Cannot create the sizes-to-variants migration because snapshot table "${tableName}" contains both "${from}" and "${to}". Move or rename the existing destination data before creating this migration.`);
58
+ }
59
+ }
60
+ const fieldCollision = findSizesToVariantsFieldCollision({
61
+ columns,
62
+ existingColumns
63
+ });
64
+ if (fieldCollision) {
65
+ throw new Error(`Cannot create the sizes-to-variants migration because snapshot table "${tableName}" contains both the "${fieldCollision.from}" and "${fieldCollision.to}" fields. Move or rename the existing destination data before creating this migration.`);
66
+ }
67
+ for (const { from, to } of columns){
68
+ const column = table.columns[from];
69
+ if (column) {
70
+ if (table.columns[to]) {
71
+ throw new Error(`Cannot create the sizes-to-variants migration because snapshot table "${tableName}" contains both "${from}" and "${to}". Move or rename the existing destination data before creating this migration.`);
72
+ }
73
+ delete table.columns[from];
74
+ table.columns[to] = {
75
+ ...column,
76
+ name: to
77
+ };
78
+ }
79
+ }
80
+ for (const [key, index] of Object.entries(table.indexes ?? {})){
81
+ const indexColumns = index.columns.map((column)=>{
82
+ const name = typeof column === 'string' ? column : column.expression;
83
+ const renamedName = columns.find(({ from })=>from === name)?.to ?? name;
84
+ return typeof column === 'string' ? renamedName : {
85
+ ...column,
86
+ expression: renamedName
87
+ };
88
+ });
89
+ const indexColumnNames = indexColumns.map((column)=>typeof column === 'string' ? column : column.expression);
90
+ const target = indexes.find((planned)=>planned.columns.join(',') === indexColumnNames.join(','));
91
+ if (!target) {
92
+ continue;
93
+ }
94
+ if (key !== target.to && table.indexes?.[target.to]) {
95
+ throw new Error(`Cannot create the sizes-to-variants migration because snapshot table "${tableName}" contains both indexes "${key}" and "${target.to}". Move or rename the existing destination index before creating this migration.`);
96
+ }
97
+ delete table.indexes[key];
98
+ table.indexes[target.to] = {
99
+ ...index,
100
+ name: target.to,
101
+ columns: indexColumns
102
+ };
103
+ }
104
+ }
105
+ renamed.prevId = snapshot.id;
106
+ renamed.id = randomUUID();
107
+ return renamed;
108
+ }
109
+
110
+ //# sourceMappingURL=buildDynamicPredefinedSizesToVariantsMigration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/buildDynamicPredefinedSizesToVariantsMigration.ts"],"sourcesContent":["import type { DynamicMigrationTemplate } from 'payload'\n\nimport { randomUUID } from 'crypto'\nimport { readdirSync, readFileSync, writeFileSync } from 'fs'\n\nimport type { DrizzleAdapter } from '../types.js'\nimport type { SizesToVariantsTableRenames } from './getSizesToVariantsRenames.js'\n\nimport {\n findSizesToVariantsFieldCollision,\n getSizesToVariantsRenames,\n} from './getSizesToVariantsRenames.js'\n\ntype SnapshotIndex = {\n columns: ({ expression: string } | string)[]\n name: string\n}\n\ntype SnapshotTable = {\n columns: Record<string, { name: string }>\n indexes?: Record<string, SnapshotIndex>\n name: string\n}\n\ntype Snapshot = {\n id?: string\n prevId?: string\n tables: Record<string, SnapshotTable>\n version: string\n}\n\n/**\n * Builds the `sizes-to-variants` predefined migration for a SQL adapter. The migration renames\n * columns rather than letting drizzle-kit diff the schema (which would drop and re-add them,\n * losing every stored image size).\n *\n * It also writes a schema snapshot: the project's previous snapshot with only these renames\n * applied. The next generated migration then diffs from the renamed columns instead of dropping\n * them, and still picks up every other schema change the upgrade brings. Without a previous\n * snapshot (a project that has only ever used `push`) there's nothing to update, so none is written.\n */\nexport const buildDynamicPredefinedSizesToVariantsMigration = ({\n packageName,\n}: {\n packageName: string\n}): DynamicMigrationTemplate => {\n return async ({ filePath, payload }) => {\n const adapter = payload.db as unknown as DrizzleAdapter\n const previousSnapshot = await readLatestSnapshot({ adapter })\n\n if (previousSnapshot) {\n const renamedSnapshot = applySizesToVariantsRenames({\n plan: getSizesToVariantsRenames({ adapter, direction: 'up' }),\n snapshot: previousSnapshot,\n })\n\n writeFileSync(`${filePath}.json`, JSON.stringify(renamedSnapshot, null, 2))\n }\n\n return {\n downSQL: ` await migrateSizesToVariants({ db, direction: 'down', payload })`,\n imports: `import { migrateSizesToVariants } from '${packageName}/migration-utils'`,\n upSQL: ` await migrateSizesToVariants({ db, payload })`,\n }\n }\n}\n\n/** The latest snapshot in the migrations directory, upgraded to drizzle-kit's current format. */\nasync function readLatestSnapshot({\n adapter,\n}: {\n adapter: DrizzleAdapter\n}): Promise<Snapshot | undefined> {\n const dir = adapter.migrationDir\n const latestSnapshotFile = readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()[0]\n\n if (!latestSnapshotFile) {\n return undefined\n }\n\n const { generateDrizzleJson, upSnapshot } = adapter.requireDrizzleKit()\n const currentVersion = (await generateDrizzleJson(adapter.schema)).version\n const snapshot = JSON.parse(readFileSync(`${dir}/${latestSnapshotFile}`, 'utf8')) as Snapshot\n\n return upSnapshot && snapshot.version < currentVersion ? upSnapshot(snapshot) : snapshot\n}\n\nfunction applySizesToVariantsRenames({\n plan,\n snapshot,\n}: {\n plan: SizesToVariantsTableRenames[]\n snapshot: Snapshot\n}): Snapshot {\n const renamed: Snapshot = structuredClone(snapshot)\n\n for (const { columns, indexes, tableName } of plan) {\n const table = Object.values(renamed.tables).find(({ name }) => name === tableName)\n\n if (!table) {\n continue\n }\n\n const existingColumns = new Set(Object.values(table.columns).map(({ name }) => name))\n\n for (const { from, to } of columns) {\n if (existingColumns.has(from) && existingColumns.has(to)) {\n throw new Error(\n `Cannot create the sizes-to-variants migration because snapshot table \"${tableName}\" contains both \"${from}\" and \"${to}\". Move or rename the existing destination data before creating this migration.`,\n )\n }\n }\n\n const fieldCollision = findSizesToVariantsFieldCollision({ columns, existingColumns })\n\n if (fieldCollision) {\n throw new Error(\n `Cannot create the sizes-to-variants migration because snapshot table \"${tableName}\" contains both the \"${fieldCollision.from}\" and \"${fieldCollision.to}\" fields. Move or rename the existing destination data before creating this migration.`,\n )\n }\n\n for (const { from, to } of columns) {\n const column = table.columns[from]\n\n if (column) {\n if (table.columns[to]) {\n throw new Error(\n `Cannot create the sizes-to-variants migration because snapshot table \"${tableName}\" contains both \"${from}\" and \"${to}\". Move or rename the existing destination data before creating this migration.`,\n )\n }\n\n delete table.columns[from]\n table.columns[to] = { ...column, name: to }\n }\n }\n\n for (const [key, index] of Object.entries(table.indexes ?? {})) {\n const indexColumns = index.columns.map((column) => {\n const name = typeof column === 'string' ? column : column.expression\n const renamedName = columns.find(({ from }) => from === name)?.to ?? name\n\n return typeof column === 'string' ? renamedName : { ...column, expression: renamedName }\n })\n const indexColumnNames = indexColumns.map((column) =>\n typeof column === 'string' ? column : column.expression,\n )\n const target = indexes.find(\n (planned) => planned.columns.join(',') === indexColumnNames.join(','),\n )\n\n if (!target) {\n continue\n }\n\n if (key !== target.to && table.indexes?.[target.to]) {\n throw new Error(\n `Cannot create the sizes-to-variants migration because snapshot table \"${tableName}\" contains both indexes \"${key}\" and \"${target.to}\". Move or rename the existing destination index before creating this migration.`,\n )\n }\n\n delete table.indexes[key]\n table.indexes[target.to] = { ...index, name: target.to, columns: indexColumns }\n }\n }\n\n renamed.prevId = snapshot.id\n renamed.id = randomUUID()\n\n return renamed\n}\n"],"names":["randomUUID","readdirSync","readFileSync","writeFileSync","findSizesToVariantsFieldCollision","getSizesToVariantsRenames","buildDynamicPredefinedSizesToVariantsMigration","packageName","filePath","payload","adapter","db","previousSnapshot","readLatestSnapshot","renamedSnapshot","applySizesToVariantsRenames","plan","direction","snapshot","JSON","stringify","downSQL","imports","upSQL","dir","migrationDir","latestSnapshotFile","filter","file","endsWith","sort","reverse","undefined","generateDrizzleJson","upSnapshot","requireDrizzleKit","currentVersion","schema","version","parse","renamed","structuredClone","columns","indexes","tableName","table","Object","values","tables","find","name","existingColumns","Set","map","from","to","has","Error","fieldCollision","column","key","index","entries","indexColumns","expression","renamedName","indexColumnNames","target","planned","join","prevId","id"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildForeignKeyName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildForeignKeyName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,mBAAmB,+BAI7B;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAkBH,CAAA"}
1
+ {"version":3,"file":"buildForeignKeyName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildForeignKeyName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,mBAAmB,+BAI7B;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAkBH,CAAA"}
@@ -1,8 +1,9 @@
1
+ import { maxGeneratedIdentifierLength } from './validateIdentifierLength.js';
1
2
  export const buildForeignKeyName = ({ name, adapter, number = 0 })=>{
2
3
  let foreignKeyName = `${name}${number ? `_${number}` : ''}_fk`;
3
- if (foreignKeyName.length > 60) {
4
+ if (foreignKeyName.length > maxGeneratedIdentifierLength) {
4
5
  const suffix = `${number ? `_${number}` : ''}_fk`;
5
- foreignKeyName = `${name.slice(0, 60 - suffix.length)}${suffix}`;
6
+ foreignKeyName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`;
6
7
  }
7
8
  if (!adapter.foreignKeys.has(foreignKeyName)) {
8
9
  adapter.foreignKeys.add(foreignKeyName);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildForeignKeyName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nexport const buildForeignKeyName = ({\n name,\n adapter,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n name: string\n number?: number\n}): string => {\n let foreignKeyName = `${name}${number ? `_${number}` : ''}_fk`\n\n if (foreignKeyName.length > 60) {\n const suffix = `${number ? `_${number}` : ''}_fk`\n foreignKeyName = `${name.slice(0, 60 - suffix.length)}${suffix}`\n }\n\n if (!adapter.foreignKeys.has(foreignKeyName)) {\n adapter.foreignKeys.add(foreignKeyName)\n return foreignKeyName\n }\n\n return buildForeignKeyName({\n name,\n adapter,\n number: number + 1,\n })\n}\n"],"names":["buildForeignKeyName","name","adapter","number","foreignKeyName","length","suffix","slice","foreignKeys","has","add"],"mappings":"AAEA,OAAO,MAAMA,sBAAsB,CAAC,EAClCC,IAAI,EACJC,OAAO,EACPC,SAAS,CAAC,EAKX;IACC,IAAIC,iBAAiB,GAAGH,OAAOE,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;IAE9D,IAAIC,eAAeC,MAAM,GAAG,IAAI;QAC9B,MAAMC,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;QACjDC,iBAAiB,GAAGH,KAAKM,KAAK,CAAC,GAAG,KAAKD,OAAOD,MAAM,IAAIC,QAAQ;IAClE;IAEA,IAAI,CAACJ,QAAQM,WAAW,CAACC,GAAG,CAACL,iBAAiB;QAC5CF,QAAQM,WAAW,CAACE,GAAG,CAACN;QACxB,OAAOA;IACT;IAEA,OAAOJ,oBAAoB;QACzBC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/buildForeignKeyName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nimport { maxGeneratedIdentifierLength } from './validateIdentifierLength.js'\n\nexport const buildForeignKeyName = ({\n name,\n adapter,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n name: string\n number?: number\n}): string => {\n let foreignKeyName = `${name}${number ? `_${number}` : ''}_fk`\n\n if (foreignKeyName.length > maxGeneratedIdentifierLength) {\n const suffix = `${number ? `_${number}` : ''}_fk`\n foreignKeyName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`\n }\n\n if (!adapter.foreignKeys.has(foreignKeyName)) {\n adapter.foreignKeys.add(foreignKeyName)\n return foreignKeyName\n }\n\n return buildForeignKeyName({\n name,\n adapter,\n number: number + 1,\n })\n}\n"],"names":["maxGeneratedIdentifierLength","buildForeignKeyName","name","adapter","number","foreignKeyName","length","suffix","slice","foreignKeys","has","add"],"mappings":"AAEA,SAASA,4BAA4B,QAAQ,gCAA+B;AAE5E,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,IAAI,EACJC,OAAO,EACPC,SAAS,CAAC,EAKX;IACC,IAAIC,iBAAiB,GAAGH,OAAOE,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;IAE9D,IAAIC,eAAeC,MAAM,GAAGN,8BAA8B;QACxD,MAAMO,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;QACjDC,iBAAiB,GAAGH,KAAKM,KAAK,CAAC,GAAGR,+BAA+BO,OAAOD,MAAM,IAAIC,QAAQ;IAC5F;IAEA,IAAI,CAACJ,QAAQM,WAAW,CAACC,GAAG,CAACL,iBAAiB;QAC5CF,QAAQM,WAAW,CAACE,GAAG,CAACN;QACxB,OAAOA;IACT;IAEA,OAAOJ,oBAAoB;QACzBC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildIndexName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildIndexName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc,6CAKxB;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAmBH,CAAA"}
1
+ {"version":3,"file":"buildIndexName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildIndexName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,cAAc,6CAKxB;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAmBH,CAAA"}
@@ -1,8 +1,9 @@
1
+ import { maxGeneratedIdentifierLength } from './validateIdentifierLength.js';
1
2
  export const buildIndexName = ({ name, adapter, appendSuffix = true, number = 0 })=>{
2
3
  let indexName = `${name}${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`;
3
- if (indexName.length > 60) {
4
+ if (indexName.length > maxGeneratedIdentifierLength) {
4
5
  const suffix = `${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`;
5
- indexName = `${name.slice(0, 60 - suffix.length)}${suffix}`;
6
+ indexName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`;
6
7
  }
7
8
  if (!adapter.indexes.has(indexName) && !(indexName in adapter.rawTables)) {
8
9
  adapter.indexes.add(indexName);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildIndexName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nexport const buildIndexName = ({\n name,\n adapter,\n appendSuffix = true,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n appendSuffix?: boolean\n name: string\n number?: number\n}): string => {\n let indexName = `${name}${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n\n if (indexName.length > 60) {\n const suffix = `${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n indexName = `${name.slice(0, 60 - suffix.length)}${suffix}`\n }\n\n if (!adapter.indexes.has(indexName) && !(indexName in adapter.rawTables)) {\n adapter.indexes.add(indexName)\n return indexName\n }\n\n return buildIndexName({\n name,\n adapter,\n appendSuffix,\n number: number + 1,\n })\n}\n"],"names":["buildIndexName","name","adapter","appendSuffix","number","indexName","length","suffix","slice","indexes","has","rawTables","add"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB,CAAC,EAC7BC,IAAI,EACJC,OAAO,EACPC,eAAe,IAAI,EACnBC,SAAS,CAAC,EAMX;IACC,IAAIC,YAAY,GAAGJ,OAAOG,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;IAEnF,IAAIE,UAAUC,MAAM,GAAG,IAAI;QACzB,MAAMC,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;QAC3EE,YAAY,GAAGJ,KAAKO,KAAK,CAAC,GAAG,KAAKD,OAAOD,MAAM,IAAIC,QAAQ;IAC7D;IAEA,IAAI,CAACL,QAAQO,OAAO,CAACC,GAAG,CAACL,cAAc,CAAEA,CAAAA,aAAaH,QAAQS,SAAS,AAAD,GAAI;QACxET,QAAQO,OAAO,CAACG,GAAG,CAACP;QACpB,OAAOA;IACT;IAEA,OAAOL,eAAe;QACpBC;QACAC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/buildIndexName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nimport { maxGeneratedIdentifierLength } from './validateIdentifierLength.js'\n\nexport const buildIndexName = ({\n name,\n adapter,\n appendSuffix = true,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n appendSuffix?: boolean\n name: string\n number?: number\n}): string => {\n let indexName = `${name}${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n\n if (indexName.length > maxGeneratedIdentifierLength) {\n const suffix = `${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n indexName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`\n }\n\n if (!adapter.indexes.has(indexName) && !(indexName in adapter.rawTables)) {\n adapter.indexes.add(indexName)\n return indexName\n }\n\n return buildIndexName({\n name,\n adapter,\n appendSuffix,\n number: number + 1,\n })\n}\n"],"names":["maxGeneratedIdentifierLength","buildIndexName","name","adapter","appendSuffix","number","indexName","length","suffix","slice","indexes","has","rawTables","add"],"mappings":"AAEA,SAASA,4BAA4B,QAAQ,gCAA+B;AAE5E,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,IAAI,EACJC,OAAO,EACPC,eAAe,IAAI,EACnBC,SAAS,CAAC,EAMX;IACC,IAAIC,YAAY,GAAGJ,OAAOG,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;IAEnF,IAAIE,UAAUC,MAAM,GAAGP,8BAA8B;QACnD,MAAMQ,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;QAC3EE,YAAY,GAAGJ,KAAKO,KAAK,CAAC,GAAGT,+BAA+BQ,OAAOD,MAAM,IAAIC,QAAQ;IACvF;IAEA,IAAI,CAACL,QAAQO,OAAO,CAACC,GAAG,CAACL,cAAc,CAAEA,CAAAA,aAAaH,QAAQS,SAAS,AAAD,GAAI;QACxET,QAAQO,OAAO,CAACG,GAAG,CAACP;QACpB,OAAOA;IACT;IAEA,OAAOL,eAAe;QACpBC;QACAC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DrizzleAdapter } from '../types.js';
2
+ /**
3
+ * Warns about identifiers Postgres will silently truncate past 63 chars, and throws
4
+ * when two of them truncate to the same name (a schema Postgres can't create anyway).
5
+ *
6
+ * Base table/enum names throw during construction, so this only covers concatenated
7
+ * identifiers: companion tables, columns, and inline index/foreign key names.
8
+ */
9
+ export declare const checkTruncatedIdentifiers: ({ adapter, logWarnings, }: {
10
+ adapter: Pick<DrizzleAdapter, 'payload' | 'rawTables'>;
11
+ logWarnings: boolean;
12
+ }) => void;
13
+ //# sourceMappingURL=checkTruncatedIdentifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkTruncatedIdentifiers.d.ts","sourceRoot":"","sources":["../../src/utilities/checkTruncatedIdentifiers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAOjD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,8BAGnC;IACD,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;IACtD,WAAW,EAAE,OAAO,CAAA;CACrB,KAAG,IAgEH,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { APIError } from 'payload';
2
+ import { maxIdentifierLength } from './validateIdentifierLength.js';
3
+ const truncate = (name)=>name.length > maxIdentifierLength ? name.slice(0, maxIdentifierLength) : name;
4
+ /**
5
+ * Warns about identifiers Postgres will silently truncate past 63 chars, and throws
6
+ * when two of them truncate to the same name (a schema Postgres can't create anyway).
7
+ *
8
+ * Base table/enum names throw during construction, so this only covers concatenated
9
+ * identifiers: companion tables, columns, and inline index/foreign key names.
10
+ */ export const checkTruncatedIdentifiers = ({ adapter, logWarnings })=>{
11
+ const truncatedNames = new Set();
12
+ const collisions = new Set();
13
+ // finalName -> originalName, per namespace, to detect post-truncation collisions
14
+ const tableNames = new Map();
15
+ const indexNames = new Map();
16
+ const foreignKeyNames = new Map();
17
+ const check = (original, seen)=>{
18
+ const final = truncate(original);
19
+ const existing = seen.get(final);
20
+ if (existing !== undefined && existing !== original) {
21
+ collisions.add(`"${existing}" and "${original}" both become "${final}"`);
22
+ return;
23
+ }
24
+ seen.set(final, original);
25
+ if (final !== original) {
26
+ truncatedNames.add(original);
27
+ }
28
+ };
29
+ for(const tableName in adapter.rawTables){
30
+ const table = adapter.rawTables[tableName];
31
+ check(table.name, tableNames);
32
+ // Columns only collide with other columns in the same table.
33
+ const columnNames = new Map();
34
+ for(const columnKey in table.columns){
35
+ check(table.columns[columnKey].name, columnNames);
36
+ }
37
+ if (table.indexes) {
38
+ for(const indexKey in table.indexes){
39
+ check(table.indexes[indexKey].name, indexNames);
40
+ }
41
+ }
42
+ if (table.foreignKeys) {
43
+ for(const foreignKeyKey in table.foreignKeys){
44
+ check(table.foreignKeys[foreignKeyKey].name, foreignKeyNames);
45
+ }
46
+ }
47
+ }
48
+ if (collisions.size > 0) {
49
+ throw new APIError(`Multiple identifiers exceed Postgres's ${maxIdentifierLength}-character limit and truncate to the same name, which Postgres cannot create: ${Array.from(collisions).join('; ')}. Use the dbName property to give them shorter, distinct names.`);
50
+ }
51
+ if (logWarnings && truncatedNames.size > 0) {
52
+ adapter.payload.logger.warn(`The following identifiers exceed Postgres's ${maxIdentifierLength}-character limit and will be silently truncated, which can leave the database out of sync with your Payload schema: ${Array.from(truncatedNames).join(', ')}. Use the dbName property to shorten them.`);
53
+ }
54
+ };
55
+
56
+ //# sourceMappingURL=checkTruncatedIdentifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/checkTruncatedIdentifiers.ts"],"sourcesContent":["import { APIError } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { maxIdentifierLength } from './validateIdentifierLength.js'\n\nconst truncate = (name: string): string =>\n name.length > maxIdentifierLength ? name.slice(0, maxIdentifierLength) : name\n\n/**\n * Warns about identifiers Postgres will silently truncate past 63 chars, and throws\n * when two of them truncate to the same name (a schema Postgres can't create anyway).\n *\n * Base table/enum names throw during construction, so this only covers concatenated\n * identifiers: companion tables, columns, and inline index/foreign key names.\n */\nexport const checkTruncatedIdentifiers = ({\n adapter,\n logWarnings,\n}: {\n adapter: Pick<DrizzleAdapter, 'payload' | 'rawTables'>\n logWarnings: boolean\n}): void => {\n const truncatedNames = new Set<string>()\n const collisions = new Set<string>()\n\n // finalName -> originalName, per namespace, to detect post-truncation collisions\n const tableNames = new Map<string, string>()\n const indexNames = new Map<string, string>()\n const foreignKeyNames = new Map<string, string>()\n\n const check = (original: string, seen: Map<string, string>) => {\n const final = truncate(original)\n\n const existing = seen.get(final)\n if (existing !== undefined && existing !== original) {\n collisions.add(`\"${existing}\" and \"${original}\" both become \"${final}\"`)\n return\n }\n\n seen.set(final, original)\n\n if (final !== original) {\n truncatedNames.add(original)\n }\n }\n\n for (const tableName in adapter.rawTables) {\n const table = adapter.rawTables[tableName]\n\n check(table.name, tableNames)\n\n // Columns only collide with other columns in the same table.\n const columnNames = new Map<string, string>()\n for (const columnKey in table.columns) {\n check(table.columns[columnKey].name, columnNames)\n }\n\n if (table.indexes) {\n for (const indexKey in table.indexes) {\n check(table.indexes[indexKey].name, indexNames)\n }\n }\n\n if (table.foreignKeys) {\n for (const foreignKeyKey in table.foreignKeys) {\n check(table.foreignKeys[foreignKeyKey].name, foreignKeyNames)\n }\n }\n }\n\n if (collisions.size > 0) {\n throw new APIError(\n `Multiple identifiers exceed Postgres's ${maxIdentifierLength}-character limit and truncate to the same name, which Postgres cannot create: ${Array.from(\n collisions,\n ).join('; ')}. Use the dbName property to give them shorter, distinct names.`,\n )\n }\n\n if (logWarnings && truncatedNames.size > 0) {\n adapter.payload.logger.warn(\n `The following identifiers exceed Postgres's ${maxIdentifierLength}-character limit and will be silently truncated, which can leave the database out of sync with your Payload schema: ${Array.from(\n truncatedNames,\n ).join(', ')}. Use the dbName property to shorten them.`,\n )\n }\n}\n"],"names":["APIError","maxIdentifierLength","truncate","name","length","slice","checkTruncatedIdentifiers","adapter","logWarnings","truncatedNames","Set","collisions","tableNames","Map","indexNames","foreignKeyNames","check","original","seen","final","existing","get","undefined","add","set","tableName","rawTables","table","columnNames","columnKey","columns","indexes","indexKey","foreignKeys","foreignKeyKey","size","Array","from","join","payload","logger","warn"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,SAASC,mBAAmB,QAAQ,gCAA+B;AAEnE,MAAMC,WAAW,CAACC,OAChBA,KAAKC,MAAM,GAAGH,sBAAsBE,KAAKE,KAAK,CAAC,GAAGJ,uBAAuBE;AAE3E;;;;;;CAMC,GACD,OAAO,MAAMG,4BAA4B,CAAC,EACxCC,OAAO,EACPC,WAAW,EAIZ;IACC,MAAMC,iBAAiB,IAAIC;IAC3B,MAAMC,aAAa,IAAID;IAEvB,iFAAiF;IACjF,MAAME,aAAa,IAAIC;IACvB,MAAMC,aAAa,IAAID;IACvB,MAAME,kBAAkB,IAAIF;IAE5B,MAAMG,QAAQ,CAACC,UAAkBC;QAC/B,MAAMC,QAAQjB,SAASe;QAEvB,MAAMG,WAAWF,KAAKG,GAAG,CAACF;QAC1B,IAAIC,aAAaE,aAAaF,aAAaH,UAAU;YACnDN,WAAWY,GAAG,CAAC,CAAC,CAAC,EAAEH,SAAS,OAAO,EAAEH,SAAS,eAAe,EAAEE,MAAM,CAAC,CAAC;YACvE;QACF;QAEAD,KAAKM,GAAG,CAACL,OAAOF;QAEhB,IAAIE,UAAUF,UAAU;YACtBR,eAAec,GAAG,CAACN;QACrB;IACF;IAEA,IAAK,MAAMQ,aAAalB,QAAQmB,SAAS,CAAE;QACzC,MAAMC,QAAQpB,QAAQmB,SAAS,CAACD,UAAU;QAE1CT,MAAMW,MAAMxB,IAAI,EAAES;QAElB,6DAA6D;QAC7D,MAAMgB,cAAc,IAAIf;QACxB,IAAK,MAAMgB,aAAaF,MAAMG,OAAO,CAAE;YACrCd,MAAMW,MAAMG,OAAO,CAACD,UAAU,CAAC1B,IAAI,EAAEyB;QACvC;QAEA,IAAID,MAAMI,OAAO,EAAE;YACjB,IAAK,MAAMC,YAAYL,MAAMI,OAAO,CAAE;gBACpCf,MAAMW,MAAMI,OAAO,CAACC,SAAS,CAAC7B,IAAI,EAAEW;YACtC;QACF;QAEA,IAAIa,MAAMM,WAAW,EAAE;YACrB,IAAK,MAAMC,iBAAiBP,MAAMM,WAAW,CAAE;gBAC7CjB,MAAMW,MAAMM,WAAW,CAACC,cAAc,CAAC/B,IAAI,EAAEY;YAC/C;QACF;IACF;IAEA,IAAIJ,WAAWwB,IAAI,GAAG,GAAG;QACvB,MAAM,IAAInC,SACR,CAAC,uCAAuC,EAAEC,oBAAoB,8EAA8E,EAAEmC,MAAMC,IAAI,CACtJ1B,YACA2B,IAAI,CAAC,MAAM,+DAA+D,CAAC;IAEjF;IAEA,IAAI9B,eAAeC,eAAe0B,IAAI,GAAG,GAAG;QAC1C5B,QAAQgC,OAAO,CAACC,MAAM,CAACC,IAAI,CACzB,CAAC,4CAA4C,EAAExC,oBAAoB,oHAAoH,EAAEmC,MAAMC,IAAI,CACjM5B,gBACA6B,IAAI,CAAC,MAAM,0CAA0C,CAAC;IAE5D;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createSchemaGenerator.d.ts","sourceRoot":"","sources":["../../src/utilities/createSchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,aAAa,CAAA;AAkCxE,eAAO,MAAM,qBAAqB,4GAO/B;IACD,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,cAiTH,CAAA"}
1
+ {"version":3,"file":"createSchemaGenerator.d.ts","sourceRoot":"","sources":["../../src/utilities/createSchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,aAAa,CAAA;AAkCxE,eAAO,MAAM,qBAAqB,4GAO/B;IACD,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,cAmTH,CAAA"}
@@ -251,6 +251,9 @@ declare module '${this.packageName}' {
251
251
  if (log) {
252
252
  this.payload.logger.info(`Written ${outputFile}`);
253
253
  }
254
+ return {
255
+ outputFile
256
+ };
254
257
  };
255
258
  };
256
259
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/createSchemaGenerator.ts"],"sourcesContent":["import type { GenerateSchema } from 'payload'\n\nimport { existsSync } from 'fs'\nimport { writeFile } from 'fs/promises'\nimport path from 'path'\n\nimport type { ColumnToCodeConverter, DrizzleAdapter } from '../types.js'\n\n/**\n * @example\n * console.log(sanitizeObjectKey(\"oneTwo\")); // oneTwo\n * console.log(sanitizeObjectKey(\"one-two\")); // 'one-two'\n * console.log(sanitizeObjectKey(\"_one$Two3\")); // _one$Two3\n * console.log(sanitizeObjectKey(\"3invalid\")); // '3invalid'\n */\nconst sanitizeObjectKey = (key: string) => {\n // Regular expression for a valid identifier\n const identifierRegex = /^[a-z_$][\\w$]*$/i\n if (identifierRegex.test(key)) {\n return key\n }\n\n return `'${key}'`\n}\n\n/**\n * @example\n * (columns default-valuesID) -> columns['default-valuesID']\n * (columns defaultValues) -> columns.defaultValues\n */\nconst accessProperty = (objName: string, key: string) => {\n const sanitized = sanitizeObjectKey(key)\n\n if (sanitized.startsWith(\"'\")) {\n return `${objName}[${sanitized}]`\n }\n\n return `${objName}.${key}`\n}\n\nexport const createSchemaGenerator = ({\n columnToCodeConverter,\n corePackageSuffix,\n defaultOutputFile,\n enumImport,\n schemaImport,\n tableImport,\n}: {\n columnToCodeConverter: ColumnToCodeConverter\n corePackageSuffix: string\n defaultOutputFile?: string\n enumImport?: string\n schemaImport?: string\n tableImport: string\n}): GenerateSchema => {\n return async function generateSchema(\n this: DrizzleAdapter,\n { log = true, outputFile = defaultOutputFile, prettify = true } = {},\n ) {\n const importDeclarations: Record<string, Set<string>> = {}\n\n const tableDeclarations: string[] = []\n const enumDeclarations: string[] = []\n const relationsDeclarations: string[] = []\n\n const addImport = (from: string, name: string) => {\n if (!importDeclarations[from]) {\n importDeclarations[from] = new Set()\n }\n\n importDeclarations[from].add(name)\n }\n\n const corePackage = `${this.packageName}/drizzle/${corePackageSuffix}`\n\n let schemaDeclaration: null | string = null\n\n if (this.schemaName) {\n addImport(corePackage, schemaImport)\n schemaDeclaration = `export const db_schema = ${schemaImport}('${this.schemaName}')`\n }\n\n const enumFn = this.schemaName ? `db_schema.enum` : enumImport\n\n const enumsList: string[] = []\n const addEnum = (name: string, options: string[]) => {\n if (enumsList.some((each) => each === name)) {\n return\n }\n enumsList.push(name)\n enumDeclarations.push(\n `export const ${name} = ${enumFn}('${name}', [${options.map((option) => `'${option}'`).join(', ')}])`,\n )\n }\n\n if (this.payload.config.localization && enumImport) {\n addEnum('enum__locales', this.payload.config.localization.localeCodes)\n }\n\n const tableFn = this.schemaName ? `db_schema.table` : tableImport\n\n if (!this.schemaName) {\n addImport(corePackage, tableImport)\n }\n\n addImport(corePackage, 'index')\n addImport(corePackage, 'uniqueIndex')\n addImport(corePackage, 'foreignKey')\n\n addImport(`${this.packageName}/drizzle`, 'sql')\n addImport(`${this.packageName}/drizzle`, 'relations')\n\n const fkGraph: Record<string, Set<string>> = {}\n\n for (const tableName in this.rawTables) {\n fkGraph[tableName] = new Set()\n const table = this.rawTables[tableName]\n\n for (const colKey in table.columns) {\n const col = table.columns[colKey]\n\n if (col.reference && col.reference.table !== tableName) {\n fkGraph[tableName].add(col.reference.table)\n }\n }\n }\n\n const canReach = (from: string, target: string, visited: Set<string>): boolean => {\n if (from === target) {\n return true\n }\n\n if (visited.has(from)) {\n return false\n }\n\n visited.add(from)\n\n for (const neighbor of fkGraph[from] ?? []) {\n if (canReach(neighbor, target, visited)) {\n return true\n }\n }\n\n return false\n }\n\n const circularEdges = new Set<string>()\n\n for (const tableA in fkGraph) {\n for (const tableB of fkGraph[tableA]) {\n if (canReach(tableB, tableA, new Set())) {\n circularEdges.add(`${tableA}:${tableB}`)\n }\n }\n }\n\n for (const tableName in this.rawTables) {\n const table = this.rawTables[tableName]\n\n const extrasDeclarations: string[] = []\n\n if (table.indexes) {\n for (const key in table.indexes) {\n const index = table.indexes[key]\n let indexDeclaration = `${index.unique ? 'uniqueIndex' : 'index'}('${index.name}')`\n indexDeclaration += `.on(${typeof index.on === 'string' ? `${accessProperty('columns', index.on)}` : `${index.on.map((on) => `${accessProperty('columns', on)}`).join(', ')}`}),`\n extrasDeclarations.push(indexDeclaration)\n }\n }\n\n if (table.foreignKeys) {\n for (const key in table.foreignKeys) {\n const foreignKey = table.foreignKeys[key]\n\n let foreignKeyDeclaration = `foreignKey({\n columns: [${foreignKey.columns.map((col) => `columns['${col}']`).join(', ')}],\n foreignColumns: [${foreignKey.foreignColumns.map((col) => `${accessProperty(col.table, col.name)}`).join(', ')}],\n name: '${foreignKey.name}'\n })`\n\n if (foreignKey.onDelete) {\n foreignKeyDeclaration += `.onDelete('${foreignKey.onDelete}')`\n }\n if (foreignKey.onUpdate) {\n foreignKeyDeclaration += `.onUpdate('${foreignKey.onDelete}')`\n }\n\n foreignKeyDeclaration += ','\n\n extrasDeclarations.push(foreignKeyDeclaration)\n }\n }\n\n const tableCode = `\nexport const ${tableName} = ${tableFn}('${tableName}', {\n${Object.entries(table.columns)\n .map(\n ([key, column]) =>\n ` ${sanitizeObjectKey(key)}: ${columnToCodeConverter({\n adapter: this,\n addEnum,\n addImport,\n circularEdges,\n column,\n locales: this.payload.config.localization\n ? this.payload.config.localization.localeCodes\n : undefined,\n tableKey: tableName,\n })},`,\n )\n .join('\\n')}\n}${\n extrasDeclarations.length\n ? `, (columns) => [\n ${extrasDeclarations.join(' ')}\n]`\n : ''\n }\n)\n`\n\n tableDeclarations.push(tableCode)\n }\n\n for (const tableName in this.rawRelations) {\n const relations = this.rawRelations[tableName]\n const properties: string[] = []\n\n for (const key in relations) {\n const relation = relations[key]\n let declaration: string\n\n if (relation.type === 'one') {\n declaration = `${sanitizeObjectKey(key)}: one(${relation.to}, {\n ${relation.fields.some((field) => field.table !== tableName) ? '// @ts-expect-error Drizzle TypeScript bug for ONE relationships with a field in different table' : ''}\n fields: [${relation.fields.map((field) => `${accessProperty(field.table, field.name)}`).join(', ')}],\n references: [${relation.references.map((col) => `${accessProperty(relation.to, col)}`).join(', ')}],\n ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}\n }),`\n } else {\n declaration = `${sanitizeObjectKey(key)}: many(${relation.to}, {\n ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}\n }),`\n }\n\n properties.push(declaration)\n }\n\n // beautify / lintify relations callback output, when no many for example, don't add it\n const args = []\n\n if (Object.values(relations).some((rel) => rel.type === 'one')) {\n args.push('one')\n }\n\n if (Object.values(relations).some((rel) => rel.type === 'many')) {\n args.push('many')\n }\n\n const arg = args.length ? `{ ${args.join(', ')} }` : ''\n\n const declaration = `export const relations_${tableName} = relations(${tableName}, (${arg}) => ({\n ${properties.join('\\n ')}\n }))`\n\n relationsDeclarations.push(declaration)\n }\n\n if (enumDeclarations.length && !this.schemaName) {\n addImport(corePackage, enumImport)\n }\n\n const importDeclarationsSanitized: string[] = []\n\n for (const moduleName in importDeclarations) {\n const moduleImports = importDeclarations[moduleName]\n\n importDeclarationsSanitized.push(\n `import { ${Array.from(moduleImports).join(', ')} } from '${moduleName}'`,\n )\n }\n\n const schemaType = `\ntype DatabaseSchema = {\n ${[\n this.schemaName ? 'db_schema' : null,\n ...enumsList,\n ...Object.keys(this.rawTables),\n ...Object.keys(this.rawRelations).map((table) => `relations_${table}`),\n ]\n .filter(Boolean)\n .map((name) => `${name}: typeof ${name}`)\n .join('\\n ')}\n}\n `\n\n const finalDeclaration = `\ndeclare module '${this.packageName}' {\n export interface GeneratedDatabaseSchema {\n schema: DatabaseSchema\n }\n}\n `\n\n const warning = `\n/* tslint:disable */\n/* eslint-disable */\n/**\n * This file was automatically generated by Payload.\n * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,\n * and re-run \\`payload generate:db-schema\\` to regenerate this file.\n */\n`\n\n const importTypes = `import type {} from '${this.packageName}'`\n\n let code = [\n warning,\n importTypes,\n ...importDeclarationsSanitized,\n schemaDeclaration,\n ...enumDeclarations,\n ...tableDeclarations,\n ...relationsDeclarations,\n schemaType,\n finalDeclaration,\n ]\n .filter(Boolean)\n .join('\\n')\n\n if (!outputFile) {\n const cwd = process.cwd()\n const srcDir = path.resolve(cwd, 'src')\n\n if (existsSync(srcDir)) {\n outputFile = path.resolve(srcDir, 'payload-generated-schema.ts')\n } else {\n outputFile = path.resolve(cwd, 'payload-generated-schema.ts')\n }\n }\n\n if (prettify) {\n try {\n const prettier = await eval('import(\"prettier\")')\n const configPath = await prettier.resolveConfigFile()\n const config = configPath ? await prettier.resolveConfig(configPath) : {}\n code = await prettier.format(code, { ...config, parser: 'typescript' })\n } catch {\n /* empty */\n }\n }\n\n await writeFile(outputFile, code, 'utf-8')\n\n if (log) {\n this.payload.logger.info(`Written ${outputFile}`)\n }\n }\n}\n"],"names":["existsSync","writeFile","path","sanitizeObjectKey","key","identifierRegex","test","accessProperty","objName","sanitized","startsWith","createSchemaGenerator","columnToCodeConverter","corePackageSuffix","defaultOutputFile","enumImport","schemaImport","tableImport","generateSchema","log","outputFile","prettify","importDeclarations","tableDeclarations","enumDeclarations","relationsDeclarations","addImport","from","name","Set","add","corePackage","packageName","schemaDeclaration","schemaName","enumFn","enumsList","addEnum","options","some","each","push","map","option","join","payload","config","localization","localeCodes","tableFn","fkGraph","tableName","rawTables","table","colKey","columns","col","reference","canReach","target","visited","has","neighbor","circularEdges","tableA","tableB","extrasDeclarations","indexes","index","indexDeclaration","unique","on","foreignKeys","foreignKey","foreignKeyDeclaration","foreignColumns","onDelete","onUpdate","tableCode","Object","entries","column","adapter","locales","undefined","tableKey","length","rawRelations","relations","properties","relation","declaration","type","to","fields","field","references","relationName","args","values","rel","arg","importDeclarationsSanitized","moduleName","moduleImports","Array","schemaType","keys","filter","Boolean","finalDeclaration","warning","importTypes","code","cwd","process","srcDir","resolve","prettier","eval","configPath","resolveConfigFile","resolveConfig","format","parser","logger","info"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/createSchemaGenerator.ts"],"sourcesContent":["import type { GenerateSchema } from 'payload'\n\nimport { existsSync } from 'fs'\nimport { writeFile } from 'fs/promises'\nimport path from 'path'\n\nimport type { ColumnToCodeConverter, DrizzleAdapter } from '../types.js'\n\n/**\n * @example\n * console.log(sanitizeObjectKey(\"oneTwo\")); // oneTwo\n * console.log(sanitizeObjectKey(\"one-two\")); // 'one-two'\n * console.log(sanitizeObjectKey(\"_one$Two3\")); // _one$Two3\n * console.log(sanitizeObjectKey(\"3invalid\")); // '3invalid'\n */\nconst sanitizeObjectKey = (key: string) => {\n // Regular expression for a valid identifier\n const identifierRegex = /^[a-z_$][\\w$]*$/i\n if (identifierRegex.test(key)) {\n return key\n }\n\n return `'${key}'`\n}\n\n/**\n * @example\n * (columns default-valuesID) -> columns['default-valuesID']\n * (columns defaultValues) -> columns.defaultValues\n */\nconst accessProperty = (objName: string, key: string) => {\n const sanitized = sanitizeObjectKey(key)\n\n if (sanitized.startsWith(\"'\")) {\n return `${objName}[${sanitized}]`\n }\n\n return `${objName}.${key}`\n}\n\nexport const createSchemaGenerator = ({\n columnToCodeConverter,\n corePackageSuffix,\n defaultOutputFile,\n enumImport,\n schemaImport,\n tableImport,\n}: {\n columnToCodeConverter: ColumnToCodeConverter\n corePackageSuffix: string\n defaultOutputFile?: string\n enumImport?: string\n schemaImport?: string\n tableImport: string\n}): GenerateSchema => {\n return async function generateSchema(\n this: DrizzleAdapter,\n { log = true, outputFile = defaultOutputFile, prettify = true } = {},\n ) {\n const importDeclarations: Record<string, Set<string>> = {}\n\n const tableDeclarations: string[] = []\n const enumDeclarations: string[] = []\n const relationsDeclarations: string[] = []\n\n const addImport = (from: string, name: string) => {\n if (!importDeclarations[from]) {\n importDeclarations[from] = new Set()\n }\n\n importDeclarations[from].add(name)\n }\n\n const corePackage = `${this.packageName}/drizzle/${corePackageSuffix}`\n\n let schemaDeclaration: null | string = null\n\n if (this.schemaName) {\n addImport(corePackage, schemaImport)\n schemaDeclaration = `export const db_schema = ${schemaImport}('${this.schemaName}')`\n }\n\n const enumFn = this.schemaName ? `db_schema.enum` : enumImport\n\n const enumsList: string[] = []\n const addEnum = (name: string, options: string[]) => {\n if (enumsList.some((each) => each === name)) {\n return\n }\n enumsList.push(name)\n enumDeclarations.push(\n `export const ${name} = ${enumFn}('${name}', [${options.map((option) => `'${option}'`).join(', ')}])`,\n )\n }\n\n if (this.payload.config.localization && enumImport) {\n addEnum('enum__locales', this.payload.config.localization.localeCodes)\n }\n\n const tableFn = this.schemaName ? `db_schema.table` : tableImport\n\n if (!this.schemaName) {\n addImport(corePackage, tableImport)\n }\n\n addImport(corePackage, 'index')\n addImport(corePackage, 'uniqueIndex')\n addImport(corePackage, 'foreignKey')\n\n addImport(`${this.packageName}/drizzle`, 'sql')\n addImport(`${this.packageName}/drizzle`, 'relations')\n\n const fkGraph: Record<string, Set<string>> = {}\n\n for (const tableName in this.rawTables) {\n fkGraph[tableName] = new Set()\n const table = this.rawTables[tableName]\n\n for (const colKey in table.columns) {\n const col = table.columns[colKey]\n\n if (col.reference && col.reference.table !== tableName) {\n fkGraph[tableName].add(col.reference.table)\n }\n }\n }\n\n const canReach = (from: string, target: string, visited: Set<string>): boolean => {\n if (from === target) {\n return true\n }\n\n if (visited.has(from)) {\n return false\n }\n\n visited.add(from)\n\n for (const neighbor of fkGraph[from] ?? []) {\n if (canReach(neighbor, target, visited)) {\n return true\n }\n }\n\n return false\n }\n\n const circularEdges = new Set<string>()\n\n for (const tableA in fkGraph) {\n for (const tableB of fkGraph[tableA]) {\n if (canReach(tableB, tableA, new Set())) {\n circularEdges.add(`${tableA}:${tableB}`)\n }\n }\n }\n\n for (const tableName in this.rawTables) {\n const table = this.rawTables[tableName]\n\n const extrasDeclarations: string[] = []\n\n if (table.indexes) {\n for (const key in table.indexes) {\n const index = table.indexes[key]\n let indexDeclaration = `${index.unique ? 'uniqueIndex' : 'index'}('${index.name}')`\n indexDeclaration += `.on(${typeof index.on === 'string' ? `${accessProperty('columns', index.on)}` : `${index.on.map((on) => `${accessProperty('columns', on)}`).join(', ')}`}),`\n extrasDeclarations.push(indexDeclaration)\n }\n }\n\n if (table.foreignKeys) {\n for (const key in table.foreignKeys) {\n const foreignKey = table.foreignKeys[key]\n\n let foreignKeyDeclaration = `foreignKey({\n columns: [${foreignKey.columns.map((col) => `columns['${col}']`).join(', ')}],\n foreignColumns: [${foreignKey.foreignColumns.map((col) => `${accessProperty(col.table, col.name)}`).join(', ')}],\n name: '${foreignKey.name}'\n })`\n\n if (foreignKey.onDelete) {\n foreignKeyDeclaration += `.onDelete('${foreignKey.onDelete}')`\n }\n if (foreignKey.onUpdate) {\n foreignKeyDeclaration += `.onUpdate('${foreignKey.onDelete}')`\n }\n\n foreignKeyDeclaration += ','\n\n extrasDeclarations.push(foreignKeyDeclaration)\n }\n }\n\n const tableCode = `\nexport const ${tableName} = ${tableFn}('${tableName}', {\n${Object.entries(table.columns)\n .map(\n ([key, column]) =>\n ` ${sanitizeObjectKey(key)}: ${columnToCodeConverter({\n adapter: this,\n addEnum,\n addImport,\n circularEdges,\n column,\n locales: this.payload.config.localization\n ? this.payload.config.localization.localeCodes\n : undefined,\n tableKey: tableName,\n })},`,\n )\n .join('\\n')}\n}${\n extrasDeclarations.length\n ? `, (columns) => [\n ${extrasDeclarations.join(' ')}\n]`\n : ''\n }\n)\n`\n\n tableDeclarations.push(tableCode)\n }\n\n for (const tableName in this.rawRelations) {\n const relations = this.rawRelations[tableName]\n const properties: string[] = []\n\n for (const key in relations) {\n const relation = relations[key]\n let declaration: string\n\n if (relation.type === 'one') {\n declaration = `${sanitizeObjectKey(key)}: one(${relation.to}, {\n ${relation.fields.some((field) => field.table !== tableName) ? '// @ts-expect-error Drizzle TypeScript bug for ONE relationships with a field in different table' : ''}\n fields: [${relation.fields.map((field) => `${accessProperty(field.table, field.name)}`).join(', ')}],\n references: [${relation.references.map((col) => `${accessProperty(relation.to, col)}`).join(', ')}],\n ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}\n }),`\n } else {\n declaration = `${sanitizeObjectKey(key)}: many(${relation.to}, {\n ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}\n }),`\n }\n\n properties.push(declaration)\n }\n\n // beautify / lintify relations callback output, when no many for example, don't add it\n const args = []\n\n if (Object.values(relations).some((rel) => rel.type === 'one')) {\n args.push('one')\n }\n\n if (Object.values(relations).some((rel) => rel.type === 'many')) {\n args.push('many')\n }\n\n const arg = args.length ? `{ ${args.join(', ')} }` : ''\n\n const declaration = `export const relations_${tableName} = relations(${tableName}, (${arg}) => ({\n ${properties.join('\\n ')}\n }))`\n\n relationsDeclarations.push(declaration)\n }\n\n if (enumDeclarations.length && !this.schemaName) {\n addImport(corePackage, enumImport)\n }\n\n const importDeclarationsSanitized: string[] = []\n\n for (const moduleName in importDeclarations) {\n const moduleImports = importDeclarations[moduleName]\n\n importDeclarationsSanitized.push(\n `import { ${Array.from(moduleImports).join(', ')} } from '${moduleName}'`,\n )\n }\n\n const schemaType = `\ntype DatabaseSchema = {\n ${[\n this.schemaName ? 'db_schema' : null,\n ...enumsList,\n ...Object.keys(this.rawTables),\n ...Object.keys(this.rawRelations).map((table) => `relations_${table}`),\n ]\n .filter(Boolean)\n .map((name) => `${name}: typeof ${name}`)\n .join('\\n ')}\n}\n `\n\n const finalDeclaration = `\ndeclare module '${this.packageName}' {\n export interface GeneratedDatabaseSchema {\n schema: DatabaseSchema\n }\n}\n `\n\n const warning = `\n/* tslint:disable */\n/* eslint-disable */\n/**\n * This file was automatically generated by Payload.\n * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,\n * and re-run \\`payload generate:db-schema\\` to regenerate this file.\n */\n`\n\n const importTypes = `import type {} from '${this.packageName}'`\n\n let code = [\n warning,\n importTypes,\n ...importDeclarationsSanitized,\n schemaDeclaration,\n ...enumDeclarations,\n ...tableDeclarations,\n ...relationsDeclarations,\n schemaType,\n finalDeclaration,\n ]\n .filter(Boolean)\n .join('\\n')\n\n if (!outputFile) {\n const cwd = process.cwd()\n const srcDir = path.resolve(cwd, 'src')\n\n if (existsSync(srcDir)) {\n outputFile = path.resolve(srcDir, 'payload-generated-schema.ts')\n } else {\n outputFile = path.resolve(cwd, 'payload-generated-schema.ts')\n }\n }\n\n if (prettify) {\n try {\n const prettier = await eval('import(\"prettier\")')\n const configPath = await prettier.resolveConfigFile()\n const config = configPath ? await prettier.resolveConfig(configPath) : {}\n code = await prettier.format(code, { ...config, parser: 'typescript' })\n } catch {\n /* empty */\n }\n }\n\n await writeFile(outputFile, code, 'utf-8')\n\n if (log) {\n this.payload.logger.info(`Written ${outputFile}`)\n }\n\n return { outputFile }\n }\n}\n"],"names":["existsSync","writeFile","path","sanitizeObjectKey","key","identifierRegex","test","accessProperty","objName","sanitized","startsWith","createSchemaGenerator","columnToCodeConverter","corePackageSuffix","defaultOutputFile","enumImport","schemaImport","tableImport","generateSchema","log","outputFile","prettify","importDeclarations","tableDeclarations","enumDeclarations","relationsDeclarations","addImport","from","name","Set","add","corePackage","packageName","schemaDeclaration","schemaName","enumFn","enumsList","addEnum","options","some","each","push","map","option","join","payload","config","localization","localeCodes","tableFn","fkGraph","tableName","rawTables","table","colKey","columns","col","reference","canReach","target","visited","has","neighbor","circularEdges","tableA","tableB","extrasDeclarations","indexes","index","indexDeclaration","unique","on","foreignKeys","foreignKey","foreignKeyDeclaration","foreignColumns","onDelete","onUpdate","tableCode","Object","entries","column","adapter","locales","undefined","tableKey","length","rawRelations","relations","properties","relation","declaration","type","to","fields","field","references","relationName","args","values","rel","arg","importDeclarationsSanitized","moduleName","moduleImports","Array","schemaType","keys","filter","Boolean","finalDeclaration","warning","importTypes","code","cwd","process","srcDir","resolve","prettier","eval","configPath","resolveConfigFile","resolveConfig","format","parser","logger","info"],"mappings":"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"}
@@ -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;AAeD;;;;;;;;;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"}