@payloadcms/drizzle 3.11.0 → 3.11.1-canary.053fca8

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 (58) hide show
  1. package/dist/find/traverseFields.d.ts.map +1 -1
  2. package/dist/find/traverseFields.js +19 -4
  3. package/dist/find/traverseFields.js.map +1 -1
  4. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  5. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  6. package/dist/queries/buildAndOrConditions.js +2 -1
  7. package/dist/queries/buildAndOrConditions.js.map +1 -1
  8. package/dist/queries/buildOrderBy.d.ts +3 -1
  9. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  10. package/dist/queries/buildOrderBy.js +3 -2
  11. package/dist/queries/buildOrderBy.js.map +1 -1
  12. package/dist/queries/buildQuery.d.ts +3 -2
  13. package/dist/queries/buildQuery.d.ts.map +1 -1
  14. package/dist/queries/buildQuery.js +3 -1
  15. package/dist/queries/buildQuery.js.map +1 -1
  16. package/dist/queries/parseParams.d.ts +3 -2
  17. package/dist/queries/parseParams.d.ts.map +1 -1
  18. package/dist/queries/parseParams.js +9 -5
  19. package/dist/queries/parseParams.js.map +1 -1
  20. package/dist/schema/buildRawSchema.d.ts.map +1 -1
  21. package/dist/schema/buildRawSchema.js +1 -0
  22. package/dist/schema/buildRawSchema.js.map +1 -1
  23. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  24. package/dist/utilities/pushDevSchema.js +21 -0
  25. package/dist/utilities/pushDevSchema.js.map +1 -1
  26. package/package.json +4 -4
  27. package/dist/postgres/createMigration.d.ts +0 -3
  28. package/dist/postgres/createMigration.d.ts.map +0 -1
  29. package/dist/postgres/createMigration.js +0 -91
  30. package/dist/postgres/createMigration.js.map +0 -1
  31. package/dist/postgres/getMigrationTemplate.d.ts +0 -4
  32. package/dist/postgres/getMigrationTemplate.d.ts.map +0 -1
  33. package/dist/postgres/getMigrationTemplate.js +0 -13
  34. package/dist/postgres/getMigrationTemplate.js.map +0 -1
  35. package/dist/postgres/schema/build.d.ts +0 -42
  36. package/dist/postgres/schema/build.d.ts.map +0 -1
  37. package/dist/postgres/schema/build.js +0 -404
  38. package/dist/postgres/schema/build.js.map +0 -1
  39. package/dist/postgres/schema/createIndex.d.ts +0 -11
  40. package/dist/postgres/schema/createIndex.d.ts.map +0 -1
  41. package/dist/postgres/schema/createIndex.js +0 -20
  42. package/dist/postgres/schema/createIndex.js.map +0 -1
  43. package/dist/postgres/schema/idToUUID.d.ts +0 -3
  44. package/dist/postgres/schema/idToUUID.d.ts.map +0 -1
  45. package/dist/postgres/schema/idToUUID.js +0 -11
  46. package/dist/postgres/schema/idToUUID.js.map +0 -1
  47. package/dist/postgres/schema/parentIDColumnMap.d.ts +0 -4
  48. package/dist/postgres/schema/parentIDColumnMap.d.ts.map +0 -1
  49. package/dist/postgres/schema/parentIDColumnMap.js +0 -9
  50. package/dist/postgres/schema/parentIDColumnMap.js.map +0 -1
  51. package/dist/postgres/schema/traverseFields.d.ts +0 -42
  52. package/dist/postgres/schema/traverseFields.d.ts.map +0 -1
  53. package/dist/postgres/schema/traverseFields.js +0 -599
  54. package/dist/postgres/schema/traverseFields.js.map +0 -1
  55. package/dist/postgres/schema/withDefault.d.ts +0 -4
  56. package/dist/postgres/schema/withDefault.d.ts.map +0 -1
  57. package/dist/postgres/schema/withDefault.js +0 -15
  58. package/dist/postgres/schema/withDefault.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { FlattenedField, Operator, Where } from 'payload'\n\nimport { and, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { QueryError } from 'payload'\nimport { validOperators } from 'payload/shared'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n selectLocale,\n tableName,\n where,\n}: Args): SQL {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: typeof and | typeof or\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = and\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = or\n }\n if (Array.isArray(condition)) {\n const builtConditions = buildAndOrConditions({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n selectLocale,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = conditionOperator(...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (let operator of Object.keys(pathOperators)) {\n if (validOperators.includes(operator as Operator)) {\n const val = where[relationOrPath][operator]\n\n const {\n columnName,\n columns,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n selectLocale,\n tableName,\n value: val,\n })\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(adapter.operators.like(constraintTable[col], value))\n } else {\n constraints.push(adapter.operators.equals(constraintTable[col], value))\n }\n })\n\n if (\n ['json', 'richText'].includes(field.type) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n if (adapter.name === 'postgres') {\n const constraint = adapter.createJSONQuery({\n column: rawColumn || table[columnName],\n operator,\n pathSegments,\n value: val,\n })\n\n constraints.push(sql.raw(constraint))\n break\n }\n\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n // use the table name from the nearest join to handle blocks, arrays, etc. or use the tableName arg\n const jsonTable =\n joins.length === 0\n ? tableName\n : joins[joins.length - 1].table[\n Object.getOwnPropertySymbols(joins[joins.length - 1].table)[0]\n ]\n const jsonQuery = adapter.createJSONQuery({\n operator,\n pathSegments: segments,\n table: jsonTable,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = adapter.convertPathToJSONTraversal(pathSegments)\n const operatorKeys: Record<string, { operator: string; wildcard: string }> = {\n contains: { operator: 'like', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null', wildcard: '' },\n in: { operator: 'in', wildcard: '' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n not_in: { operator: 'not in', wildcard: '' },\n }\n\n let formattedValue = val\n if (adapter.name === 'sqlite' && operator === 'equals' && !isNaN(val)) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n formattedValue = `(${val.map((v) => `${v}`).join(',')})`\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${val}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n constraints.push(\n sql.raw(\n `${table[columnName].name}${jsonQuery} ${operatorKeys[operator].operator} ${formattedValue}`,\n ),\n )\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (\n operator === 'like' &&\n (field.type === 'number' || table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val\n .split(' ')\n .map((word) => adapter.operators.like(table[columnName], `%${word}%`)),\n ),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n columns,\n field,\n isUUID: table?.[columnName] instanceof PgUUID,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const {\n columns: queryColumns,\n operator: queryOperator,\n value: queryValue,\n } = sanitizedQueryValue\n\n // Handle polymorphic relationships by value\n if (queryColumns) {\n if (!queryColumns.length) {\n break\n }\n\n let wrapOperator = or\n\n if (queryValue === null && ['equals', 'not_equals'].includes(operator)) {\n if (operator === 'equals') {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn }) =>\n operator === 'equals' ? isNull(rawColumn) : isNotNull(rawColumn),\n ),\n ),\n )\n break\n }\n\n if (['not_equals', 'not_in'].includes(operator)) {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn, value }) =>\n adapter.operators[queryOperator](rawColumn, value),\n ),\n ),\n )\n\n break\n }\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(rawColumn || table[columnName]),\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ne<any>(rawColumn || table[columnName], queryValue),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n operator === 'not_in'\n ) {\n constraints.push(\n sql`(${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL)`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(rawColumn || table[columnName]))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(rawColumn || table[columnName]))\n break\n }\n\n if (field.type === 'point' && adapter.name === 'postgres') {\n switch (operator) {\n case 'intersects': {\n constraints.push(\n sql`ST_Intersects(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n case 'near': {\n const [lng, lat, maxDistance, minDistance] = queryValue as number[]\n\n let constraint = sql`ST_DWithin(ST_Transform(${table[columnName]}, 3857), ST_Transform(ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326), 3857), ${maxDistance})`\n if (typeof minDistance === 'number' && !Number.isNaN(minDistance)) {\n constraint = sql`${constraint} AND ST_Distance(ST_Transform(${table[columnName]}, 3857), ST_Transform(ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326), 3857)) >= ${minDistance}`\n }\n constraints.push(constraint)\n break\n }\n\n case 'within': {\n constraints.push(\n sql`ST_Within(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n default:\n break\n }\n break\n }\n\n constraints.push(\n adapter.operators[queryOperator](rawColumn || table[columnName], queryValue),\n )\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n"],"names":["and","isNotNull","isNull","ne","notInArray","or","sql","PgUUID","QueryError","validOperators","buildAndOrConditions","getTableColumnFromPath","sanitizeQueryValue","parseParams","adapter","fields","joins","locale","selectFields","selectLocale","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","includes","val","columnName","columns","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","forEach","col","constraintTable","indexOf","push","operators","like","equals","type","name","constraint","createJSONQuery","column","raw","segments","slice","unshift","jsonTable","getOwnPropertySymbols","jsonQuery","treatAsArray","treatRootAsArray","convertPathToJSONTraversal","operatorKeys","contains","wildcard","exists","in","not_equals","not_in","formattedValue","isNaN","map","v","join","path","columnType","word","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator","JSON","stringify","lng","lat","maxDistance","minDistance","Number"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Operator, Where } from 'payload'\n\nimport { and, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\nimport { QueryError } from 'payload'\nimport { validOperators } from 'payload/shared'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale: string\n selectFields: Record<string, GenericColumn>\n selectLocale?: boolean\n tableName: string\n where: Where\n}\n\nexport function parseParams({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n selectFields,\n selectLocale,\n tableName,\n where,\n}: Args): SQL {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: typeof and | typeof or\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = and\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = or\n }\n if (Array.isArray(condition)) {\n const builtConditions = buildAndOrConditions({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n selectFields,\n selectLocale,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = conditionOperator(...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (let operator of Object.keys(pathOperators)) {\n if (validOperators.includes(operator as Operator)) {\n const val = where[relationOrPath][operator]\n\n const {\n columnName,\n columns,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n aliasTable,\n collectionPath: relationOrPath,\n fields,\n joins,\n locale,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n selectLocale,\n tableName,\n value: val,\n })\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(adapter.operators.like(constraintTable[col], value))\n } else {\n constraints.push(adapter.operators.equals(constraintTable[col], value))\n }\n })\n\n if (\n ['json', 'richText'].includes(field.type) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n if (adapter.name === 'postgres') {\n const constraint = adapter.createJSONQuery({\n column: rawColumn || table[columnName],\n operator,\n pathSegments,\n value: val,\n })\n\n constraints.push(sql.raw(constraint))\n break\n }\n\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n // use the table name from the nearest join to handle blocks, arrays, etc. or use the tableName arg\n const jsonTable =\n joins.length === 0\n ? tableName\n : joins[joins.length - 1].table[\n Object.getOwnPropertySymbols(joins[joins.length - 1].table)[0]\n ]\n const jsonQuery = adapter.createJSONQuery({\n operator,\n pathSegments: segments,\n table: jsonTable,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = adapter.convertPathToJSONTraversal(pathSegments)\n const operatorKeys: Record<string, { operator: string; wildcard: string }> = {\n contains: { operator: 'like', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null', wildcard: '' },\n in: { operator: 'in', wildcard: '' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n not_in: { operator: 'not in', wildcard: '' },\n }\n\n let formattedValue = val\n if (adapter.name === 'sqlite' && operator === 'equals' && !isNaN(val)) {\n formattedValue = val\n } else if (['in', 'not_in'].includes(operator) && Array.isArray(val)) {\n formattedValue = `(${val.map((v) => `${v}`).join(',')})`\n } else {\n formattedValue = `'${operatorKeys[operator].wildcard}${val}${operatorKeys[operator].wildcard}'`\n }\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n constraints.push(\n sql.raw(\n `${table[columnName].name}${jsonQuery} ${operatorKeys[operator].operator} ${formattedValue}`,\n ),\n )\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (\n operator === 'like' &&\n (field.type === 'number' || table[columnName].columnType === 'PgUUID')\n ) {\n operator = 'equals'\n }\n\n if (operator === 'like') {\n constraints.push(\n and(\n ...val\n .split(' ')\n .map((word) => adapter.operators.like(table[columnName], `%${word}%`)),\n ),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n columns,\n field,\n isUUID: table?.[columnName] instanceof PgUUID,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const {\n columns: queryColumns,\n operator: queryOperator,\n value: queryValue,\n } = sanitizedQueryValue\n\n // Handle polymorphic relationships by value\n if (queryColumns) {\n if (!queryColumns.length) {\n break\n }\n\n let wrapOperator = or\n\n if (queryValue === null && ['equals', 'not_equals'].includes(operator)) {\n if (operator === 'equals') {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn }) =>\n operator === 'equals' ? isNull(rawColumn) : isNotNull(rawColumn),\n ),\n ),\n )\n break\n }\n\n if (['not_equals', 'not_in'].includes(operator)) {\n wrapOperator = and\n }\n\n constraints.push(\n wrapOperator(\n ...queryColumns.map(({ rawColumn, value }) =>\n adapter.operators[queryOperator](rawColumn, value),\n ),\n ),\n )\n\n break\n }\n\n const resolvedColumn =\n rawColumn ||\n (aliasTable && tableName === getNameFromDrizzleTable(table)\n ? aliasTable[columnName]\n : table[columnName])\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(resolvedColumn),\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ne<any>(resolvedColumn, queryValue),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n operator === 'not_in'\n ) {\n constraints.push(\n sql`(${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL)`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(resolvedColumn))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(resolvedColumn))\n break\n }\n\n if (field.type === 'point' && adapter.name === 'postgres') {\n switch (operator) {\n case 'intersects': {\n constraints.push(\n sql`ST_Intersects(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n case 'near': {\n const [lng, lat, maxDistance, minDistance] = queryValue as number[]\n\n let constraint = sql`ST_DWithin(ST_Transform(${table[columnName]}, 3857), ST_Transform(ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326), 3857), ${maxDistance})`\n if (typeof minDistance === 'number' && !Number.isNaN(minDistance)) {\n constraint = sql`${constraint} AND ST_Distance(ST_Transform(${table[columnName]}, 3857), ST_Transform(ST_SetSRID(ST_MakePoint(${lng}, ${lat}), 4326), 3857)) >= ${minDistance}`\n }\n constraints.push(constraint)\n break\n }\n\n case 'within': {\n constraints.push(\n sql`ST_Within(${table[columnName]}, ST_GeomFromGeoJSON(${JSON.stringify(queryValue)}))`,\n )\n break\n }\n\n default:\n break\n }\n break\n }\n\n constraints.push(adapter.operators[queryOperator](resolvedColumn, queryValue))\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n"],"names":["and","isNotNull","isNull","ne","notInArray","or","sql","PgUUID","QueryError","validOperators","getNameFromDrizzleTable","buildAndOrConditions","getTableColumnFromPath","sanitizeQueryValue","parseParams","adapter","aliasTable","fields","joins","locale","selectFields","selectLocale","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","includes","val","columnName","columns","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","forEach","col","constraintTable","indexOf","push","operators","like","equals","type","name","constraint","createJSONQuery","column","raw","segments","slice","unshift","jsonTable","getOwnPropertySymbols","jsonQuery","treatAsArray","treatRootAsArray","convertPathToJSONTraversal","operatorKeys","contains","wildcard","exists","in","not_equals","not_in","formattedValue","isNaN","map","v","join","path","columnType","word","sanitizedQueryValue","isUUID","queryColumns","queryOperator","queryValue","wrapOperator","resolvedColumn","JSON","stringify","lng","lat","maxDistance","minDistance","Number"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildRawSchema.d.ts","sourceRoot":"","sources":["../../src/schema/buildRawSchema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAY,WAAW,EAAE,MAAM,aAAa,CAAA;AAKxE;;GAEG;AACH,eAAO,MAAM,cAAc,8BAGxB;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,WAAW,CAAA;CACzB,SAsGA,CAAA"}
1
+ {"version":3,"file":"buildRawSchema.d.ts","sourceRoot":"","sources":["../../src/schema/buildRawSchema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAY,WAAW,EAAE,MAAM,aAAa,CAAA;AAKxE;;GAEG;AACH,eAAO,MAAM,cAAc,8BAGxB;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,WAAW,CAAA;CACzB,SAwGA,CAAA"}
@@ -5,6 +5,7 @@ import { buildTable } from './build.js';
5
5
  /**
6
6
  * Builds abstract Payload SQL schema
7
7
  */ export const buildRawSchema = ({ adapter, setColumnID })=>{
8
+ adapter.indexes = new Set();
8
9
  adapter.payload.config.collections.forEach((collection)=>{
9
10
  createTableName({
10
11
  adapter,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/buildRawSchema.ts"],"sourcesContent":["import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, RawIndex, SetColumnID } from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildTable } from './build.js'\n\n/**\n * Builds abstract Payload SQL schema\n */\nexport const buildRawSchema = ({\n adapter,\n setColumnID,\n}: {\n adapter: DrizzleAdapter\n setColumnID: SetColumnID\n}) => {\n adapter.payload.config.collections.forEach((collection) => {\n createTableName({\n adapter,\n config: collection,\n })\n\n if (collection.versions) {\n createTableName({\n adapter,\n config: collection,\n versions: true,\n versionsCustomName: true,\n })\n }\n })\n\n adapter.payload.config.collections.forEach((collection) => {\n const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug))\n const config = adapter.payload.config\n\n const baseIndexes: Record<string, RawIndex> = {}\n\n if (collection.upload.filenameCompoundIndex) {\n const indexName = `${tableName}_filename_compound_idx`\n\n baseIndexes.filename_compound_index = {\n name: indexName,\n on: collection.upload.filenameCompoundIndex.map((f) => f),\n unique: true,\n }\n }\n\n buildTable({\n adapter,\n disableNotNull: !!collection?.versions?.drafts,\n disableUnique: false,\n fields: collection.flattenedFields,\n setColumnID,\n tableName,\n timestamps: collection.timestamps,\n versions: false,\n })\n\n if (collection.versions) {\n const versionsTableName = adapter.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${adapter.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(config, collection, true)\n\n buildTable({\n adapter,\n disableNotNull: !!collection.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n setColumnID,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n adapter.payload.config.globals.forEach((global) => {\n const tableName = createTableName({\n adapter,\n config: global,\n })\n\n buildTable({\n adapter,\n disableNotNull: !!global?.versions?.drafts,\n disableUnique: false,\n fields: global.flattenedFields,\n setColumnID,\n tableName,\n timestamps: false,\n versions: false,\n })\n\n if (global.versions) {\n const versionsTableName = createTableName({\n adapter,\n config: global,\n versions: true,\n versionsCustomName: true,\n })\n const config = adapter.payload.config\n const versionFields = buildVersionGlobalFields(config, global, true)\n\n buildTable({\n adapter,\n disableNotNull: !!global.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n setColumnID,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","createTableName","buildTable","buildRawSchema","adapter","setColumnID","payload","config","collections","forEach","collection","versions","versionsCustomName","tableName","tableNameMap","get","slug","baseIndexes","upload","filenameCompoundIndex","indexName","filename_compound_index","name","on","map","f","unique","disableNotNull","drafts","disableUnique","fields","flattenedFields","timestamps","versionsTableName","versionsSuffix","versionFields","globals","global"],"mappings":"AAAA,SAASA,4BAA4B,EAAEC,wBAAwB,QAAQ,UAAS;AAChF,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,UAAU,QAAQ,aAAY;AAEvC;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,OAAO,EACPC,WAAW,EAIZ;IACCD,QAAQE,OAAO,CAACC,MAAM,CAACC,WAAW,CAACC,OAAO,CAAC,CAACC;QAC1CT,gBAAgB;YACdG;YACAG,QAAQG;QACV;QAEA,IAAIA,WAAWC,QAAQ,EAAE;YACvBV,gBAAgB;gBACdG;gBACAG,QAAQG;gBACRC,UAAU;gBACVC,oBAAoB;YACtB;QACF;IACF;IAEAR,QAAQE,OAAO,CAACC,MAAM,CAACC,WAAW,CAACC,OAAO,CAAC,CAACC;QAC1C,MAAMG,YAAYT,QAAQU,YAAY,CAACC,GAAG,CAACf,YAAYU,WAAWM,IAAI;QACtE,MAAMT,SAASH,QAAQE,OAAO,CAACC,MAAM;QAErC,MAAMU,cAAwC,CAAC;QAE/C,IAAIP,WAAWQ,MAAM,CAACC,qBAAqB,EAAE;YAC3C,MAAMC,YAAY,GAAGP,UAAU,sBAAsB,CAAC;YAEtDI,YAAYI,uBAAuB,GAAG;gBACpCC,MAAMF;gBACNG,IAAIb,WAAWQ,MAAM,CAACC,qBAAqB,CAACK,GAAG,CAAC,CAACC,IAAMA;gBACvDC,QAAQ;YACV;QACF;QAEAxB,WAAW;YACTE;YACAuB,gBAAgB,CAAC,CAACjB,YAAYC,UAAUiB;YACxCC,eAAe;YACfC,QAAQpB,WAAWqB,eAAe;YAClC1B;YACAQ;YACAmB,YAAYtB,WAAWsB,UAAU;YACjCrB,UAAU;QACZ;QAEA,IAAID,WAAWC,QAAQ,EAAE;YACvB,MAAMsB,oBAAoB7B,QAAQU,YAAY,CAACC,GAAG,CAChD,CAAC,CAAC,EAAEf,YAAYU,WAAWM,IAAI,IAAIZ,QAAQ8B,cAAc,EAAE;YAE7D,MAAMC,gBAAgBrC,6BAA6BS,QAAQG,YAAY;YAEvER,WAAW;gBACTE;gBACAuB,gBAAgB,CAAC,CAACjB,WAAWC,QAAQ,EAAEiB;gBACvCC,eAAe;gBACfC,QAAQK;gBACR9B;gBACAQ,WAAWoB;gBACXD,YAAY;gBACZrB,UAAU;YACZ;QACF;IACF;IAEAP,QAAQE,OAAO,CAACC,MAAM,CAAC6B,OAAO,CAAC3B,OAAO,CAAC,CAAC4B;QACtC,MAAMxB,YAAYZ,gBAAgB;YAChCG;YACAG,QAAQ8B;QACV;QAEAnC,WAAW;YACTE;YACAuB,gBAAgB,CAAC,CAACU,QAAQ1B,UAAUiB;YACpCC,eAAe;YACfC,QAAQO,OAAON,eAAe;YAC9B1B;YACAQ;YACAmB,YAAY;YACZrB,UAAU;QACZ;QAEA,IAAI0B,OAAO1B,QAAQ,EAAE;YACnB,MAAMsB,oBAAoBhC,gBAAgB;gBACxCG;gBACAG,QAAQ8B;gBACR1B,UAAU;gBACVC,oBAAoB;YACtB;YACA,MAAML,SAASH,QAAQE,OAAO,CAACC,MAAM;YACrC,MAAM4B,gBAAgBpC,yBAAyBQ,QAAQ8B,QAAQ;YAE/DnC,WAAW;gBACTE;gBACAuB,gBAAgB,CAAC,CAACU,OAAO1B,QAAQ,EAAEiB;gBACnCC,eAAe;gBACfC,QAAQK;gBACR9B;gBACAQ,WAAWoB;gBACXD,YAAY;gBACZrB,UAAU;YACZ;QACF;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/schema/buildRawSchema.ts"],"sourcesContent":["import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, RawIndex, SetColumnID } from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildTable } from './build.js'\n\n/**\n * Builds abstract Payload SQL schema\n */\nexport const buildRawSchema = ({\n adapter,\n setColumnID,\n}: {\n adapter: DrizzleAdapter\n setColumnID: SetColumnID\n}) => {\n adapter.indexes = new Set()\n\n adapter.payload.config.collections.forEach((collection) => {\n createTableName({\n adapter,\n config: collection,\n })\n\n if (collection.versions) {\n createTableName({\n adapter,\n config: collection,\n versions: true,\n versionsCustomName: true,\n })\n }\n })\n\n adapter.payload.config.collections.forEach((collection) => {\n const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug))\n const config = adapter.payload.config\n\n const baseIndexes: Record<string, RawIndex> = {}\n\n if (collection.upload.filenameCompoundIndex) {\n const indexName = `${tableName}_filename_compound_idx`\n\n baseIndexes.filename_compound_index = {\n name: indexName,\n on: collection.upload.filenameCompoundIndex.map((f) => f),\n unique: true,\n }\n }\n\n buildTable({\n adapter,\n disableNotNull: !!collection?.versions?.drafts,\n disableUnique: false,\n fields: collection.flattenedFields,\n setColumnID,\n tableName,\n timestamps: collection.timestamps,\n versions: false,\n })\n\n if (collection.versions) {\n const versionsTableName = adapter.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${adapter.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(config, collection, true)\n\n buildTable({\n adapter,\n disableNotNull: !!collection.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n setColumnID,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n adapter.payload.config.globals.forEach((global) => {\n const tableName = createTableName({\n adapter,\n config: global,\n })\n\n buildTable({\n adapter,\n disableNotNull: !!global?.versions?.drafts,\n disableUnique: false,\n fields: global.flattenedFields,\n setColumnID,\n tableName,\n timestamps: false,\n versions: false,\n })\n\n if (global.versions) {\n const versionsTableName = createTableName({\n adapter,\n config: global,\n versions: true,\n versionsCustomName: true,\n })\n const config = adapter.payload.config\n const versionFields = buildVersionGlobalFields(config, global, true)\n\n buildTable({\n adapter,\n disableNotNull: !!global.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n setColumnID,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","createTableName","buildTable","buildRawSchema","adapter","setColumnID","indexes","Set","payload","config","collections","forEach","collection","versions","versionsCustomName","tableName","tableNameMap","get","slug","baseIndexes","upload","filenameCompoundIndex","indexName","filename_compound_index","name","on","map","f","unique","disableNotNull","drafts","disableUnique","fields","flattenedFields","timestamps","versionsTableName","versionsSuffix","versionFields","globals","global"],"mappings":"AAAA,SAASA,4BAA4B,EAAEC,wBAAwB,QAAQ,UAAS;AAChF,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,UAAU,QAAQ,aAAY;AAEvC;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,OAAO,EACPC,WAAW,EAIZ;IACCD,QAAQE,OAAO,GAAG,IAAIC;IAEtBH,QAAQI,OAAO,CAACC,MAAM,CAACC,WAAW,CAACC,OAAO,CAAC,CAACC;QAC1CX,gBAAgB;YACdG;YACAK,QAAQG;QACV;QAEA,IAAIA,WAAWC,QAAQ,EAAE;YACvBZ,gBAAgB;gBACdG;gBACAK,QAAQG;gBACRC,UAAU;gBACVC,oBAAoB;YACtB;QACF;IACF;IAEAV,QAAQI,OAAO,CAACC,MAAM,CAACC,WAAW,CAACC,OAAO,CAAC,CAACC;QAC1C,MAAMG,YAAYX,QAAQY,YAAY,CAACC,GAAG,CAACjB,YAAYY,WAAWM,IAAI;QACtE,MAAMT,SAASL,QAAQI,OAAO,CAACC,MAAM;QAErC,MAAMU,cAAwC,CAAC;QAE/C,IAAIP,WAAWQ,MAAM,CAACC,qBAAqB,EAAE;YAC3C,MAAMC,YAAY,GAAGP,UAAU,sBAAsB,CAAC;YAEtDI,YAAYI,uBAAuB,GAAG;gBACpCC,MAAMF;gBACNG,IAAIb,WAAWQ,MAAM,CAACC,qBAAqB,CAACK,GAAG,CAAC,CAACC,IAAMA;gBACvDC,QAAQ;YACV;QACF;QAEA1B,WAAW;YACTE;YACAyB,gBAAgB,CAAC,CAACjB,YAAYC,UAAUiB;YACxCC,eAAe;YACfC,QAAQpB,WAAWqB,eAAe;YAClC5B;YACAU;YACAmB,YAAYtB,WAAWsB,UAAU;YACjCrB,UAAU;QACZ;QAEA,IAAID,WAAWC,QAAQ,EAAE;YACvB,MAAMsB,oBAAoB/B,QAAQY,YAAY,CAACC,GAAG,CAChD,CAAC,CAAC,EAAEjB,YAAYY,WAAWM,IAAI,IAAId,QAAQgC,cAAc,EAAE;YAE7D,MAAMC,gBAAgBvC,6BAA6BW,QAAQG,YAAY;YAEvEV,WAAW;gBACTE;gBACAyB,gBAAgB,CAAC,CAACjB,WAAWC,QAAQ,EAAEiB;gBACvCC,eAAe;gBACfC,QAAQK;gBACRhC;gBACAU,WAAWoB;gBACXD,YAAY;gBACZrB,UAAU;YACZ;QACF;IACF;IAEAT,QAAQI,OAAO,CAACC,MAAM,CAAC6B,OAAO,CAAC3B,OAAO,CAAC,CAAC4B;QACtC,MAAMxB,YAAYd,gBAAgB;YAChCG;YACAK,QAAQ8B;QACV;QAEArC,WAAW;YACTE;YACAyB,gBAAgB,CAAC,CAACU,QAAQ1B,UAAUiB;YACpCC,eAAe;YACfC,QAAQO,OAAON,eAAe;YAC9B5B;YACAU;YACAmB,YAAY;YACZrB,UAAU;QACZ;QAEA,IAAI0B,OAAO1B,QAAQ,EAAE;YACnB,MAAMsB,oBAAoBlC,gBAAgB;gBACxCG;gBACAK,QAAQ8B;gBACR1B,UAAU;gBACVC,oBAAoB;YACtB;YACA,MAAML,SAASL,QAAQI,OAAO,CAACC,MAAM;YACrC,MAAM4B,gBAAgBtC,yBAAyBU,QAAQ8B,QAAQ;YAE/DrC,WAAW;gBACTE;gBACAyB,gBAAgB,CAAC,CAACU,OAAO1B,QAAQ,EAAEiB;gBACnCC,eAAe;gBACfC,QAAQK;gBACRhC;gBACAU,WAAWoB;gBACXD,YAAY;gBACZrB,UAAU;YACZ;QACF;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pushDevSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/pushDevSchema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,aAAa,CAAA;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,YAAmB,cAAc,kBAwE1D,CAAA"}
1
+ {"version":3,"file":"pushDevSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/pushDevSchema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAA;AAUvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,YAAmB,cAAc,kBA6F1D,CAAA"}
@@ -1,10 +1,31 @@
1
+ import { deepStrictEqual } from 'assert';
1
2
  import prompts from 'prompts';
3
+ const previousSchema = {
4
+ localeCodes: null,
5
+ rawTables: null
6
+ };
2
7
  /**
3
8
  * Pushes the development schema to the database using Drizzle.
4
9
  *
5
10
  * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.
6
11
  * @returns {Promise<void>} - A promise that resolves once the schema push is complete.
7
12
  */ export const pushDevSchema = async (adapter)=>{
13
+ if (process.env.PAYLOAD_FORCE_DRIZZLE_PUSH !== 'true') {
14
+ const localeCodes = adapter.payload.config.localization && adapter.payload.config.localization.localeCodes;
15
+ try {
16
+ deepStrictEqual(previousSchema, {
17
+ localeCodes,
18
+ rawTables: adapter.rawTables
19
+ });
20
+ if (adapter.logger) {
21
+ adapter.payload.logger.info('No changes detected in schema, skipping schema push.');
22
+ }
23
+ return;
24
+ } catch {
25
+ previousSchema.localeCodes = localeCodes;
26
+ previousSchema.rawTables = adapter.rawTables;
27
+ }
28
+ }
8
29
  const { pushSchema } = adapter.requireDrizzleKit();
9
30
  const { extensions = {}, tablesFilter } = adapter;
10
31
  // This will prompt if clarifications are needed for Drizzle to push new schema
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/pushDevSchema.ts"],"sourcesContent":["import prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from '../postgres/types.js'\nimport type { DrizzleAdapter, PostgresDB } from '../types.js'\n\n/**\n * Pushes the development schema to the database using Drizzle.\n *\n * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.\n * @returns {Promise<void>} - A promise that resolves once the schema push is complete.\n */\nexport const pushDevSchema = async (adapter: DrizzleAdapter) => {\n const { pushSchema } = adapter.requireDrizzleKit()\n\n const { extensions = {}, tablesFilter } = adapter as BasePostgresAdapter\n\n // This will prompt if clarifications are needed for Drizzle to push new schema\n const { apply, hasDataLoss, warnings } = await pushSchema(\n adapter.schema,\n adapter.drizzle,\n adapter.schemaName ? [adapter.schemaName] : undefined,\n tablesFilter,\n // Drizzle extensionsFilter supports only postgis for now\n // https://github.com/drizzle-team/drizzle-orm/blob/83daf2d5cf023112de878bc2249ee2c41a2a5b1b/drizzle-kit/src/cli/validations/cli.ts#L26\n extensions.postgis ? ['postgis'] : undefined,\n )\n\n if (warnings.length) {\n let message = `Warnings detected during schema push: \\n\\n${warnings.join('\\n')}\\n\\n`\n\n if (hasDataLoss) {\n message += `DATA LOSS WARNING: Possible data loss detected if schema is pushed.\\n\\n`\n }\n\n message += `Accept warnings and push schema to database?`\n\n const { confirm: acceptWarnings } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message,\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n // Exit if user does not accept warnings.\n // Q: Is this the right type of exit for this interaction?\n if (!acceptWarnings) {\n process.exit(0)\n }\n }\n\n await apply()\n const migrationsTable = adapter.schemaName\n ? `\"${adapter.schemaName}\".\"payload_migrations\"`\n : '\"payload_migrations\"'\n\n const drizzle = adapter.drizzle as PostgresDB\n\n const result = await adapter.execute({\n drizzle,\n raw: `SELECT * FROM ${migrationsTable} WHERE batch = '-1'`,\n })\n\n const devPush = result.rows\n\n if (!devPush.length) {\n // Use drizzle for insert so $defaultFn's are called\n await drizzle.insert(adapter.tables.payload_migrations).values({\n name: 'dev',\n batch: -1,\n })\n } else {\n await adapter.execute({\n drizzle,\n raw: `UPDATE ${migrationsTable} SET updated_at = CURRENT_TIMESTAMP WHERE batch = '-1'`,\n })\n }\n}\n"],"names":["prompts","pushDevSchema","adapter","pushSchema","requireDrizzleKit","extensions","tablesFilter","apply","hasDataLoss","warnings","schema","drizzle","schemaName","undefined","postgis","length","message","join","confirm","acceptWarnings","name","type","initial","onCancel","process","exit","migrationsTable","result","execute","raw","devPush","rows","insert","tables","payload_migrations","values","batch"],"mappings":"AAAA,OAAOA,aAAa,UAAS;AAK7B;;;;;CAKC,GACD,OAAO,MAAMC,gBAAgB,OAAOC;IAClC,MAAM,EAAEC,UAAU,EAAE,GAAGD,QAAQE,iBAAiB;IAEhD,MAAM,EAAEC,aAAa,CAAC,CAAC,EAAEC,YAAY,EAAE,GAAGJ;IAE1C,+EAA+E;IAC/E,MAAM,EAAEK,KAAK,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAG,MAAMN,WAC7CD,QAAQQ,MAAM,EACdR,QAAQS,OAAO,EACfT,QAAQU,UAAU,GAAG;QAACV,QAAQU,UAAU;KAAC,GAAGC,WAC5CP,cACA,yDAAyD;IACzD,uIAAuI;IACvID,WAAWS,OAAO,GAAG;QAAC;KAAU,GAAGD;IAGrC,IAAIJ,SAASM,MAAM,EAAE;QACnB,IAAIC,UAAU,CAAC,0CAA0C,EAAEP,SAASQ,IAAI,CAAC,MAAM,IAAI,CAAC;QAEpF,IAAIT,aAAa;YACfQ,WAAW,CAAC,uEAAuE,CAAC;QACtF;QAEAA,WAAW,CAAC,4CAA4C,CAAC;QAEzD,MAAM,EAAEE,SAASC,cAAc,EAAE,GAAG,MAAMnB,QACxC;YACEoB,MAAM;YACNC,MAAM;YACNC,SAAS;YACTN;QACF,GACA;YACEO,UAAU;gBACRC,QAAQC,IAAI,CAAC;YACf;QACF;QAGF,yCAAyC;QACzC,0DAA0D;QAC1D,IAAI,CAACN,gBAAgB;YACnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAEA,MAAMlB;IACN,MAAMmB,kBAAkBxB,QAAQU,UAAU,GACtC,CAAC,CAAC,EAAEV,QAAQU,UAAU,CAAC,sBAAsB,CAAC,GAC9C;IAEJ,MAAMD,UAAUT,QAAQS,OAAO;IAE/B,MAAMgB,SAAS,MAAMzB,QAAQ0B,OAAO,CAAC;QACnCjB;QACAkB,KAAK,CAAC,cAAc,EAAEH,gBAAgB,mBAAmB,CAAC;IAC5D;IAEA,MAAMI,UAAUH,OAAOI,IAAI;IAE3B,IAAI,CAACD,QAAQf,MAAM,EAAE;QACnB,oDAAoD;QACpD,MAAMJ,QAAQqB,MAAM,CAAC9B,QAAQ+B,MAAM,CAACC,kBAAkB,EAAEC,MAAM,CAAC;YAC7Df,MAAM;YACNgB,OAAO,CAAC;QACV;IACF,OAAO;QACL,MAAMlC,QAAQ0B,OAAO,CAAC;YACpBjB;YACAkB,KAAK,CAAC,OAAO,EAAEH,gBAAgB,sDAAsD,CAAC;QACxF;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/pushDevSchema.ts"],"sourcesContent":["import { deepStrictEqual } from 'assert'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from '../postgres/types.js'\nimport type { DrizzleAdapter, PostgresDB, RawTable } from '../types.js'\n\nconst previousSchema: {\n localeCodes: null | string[]\n rawTables: null | Record<string, RawTable>\n} = {\n localeCodes: null,\n rawTables: null,\n}\n\n/**\n * Pushes the development schema to the database using Drizzle.\n *\n * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.\n * @returns {Promise<void>} - A promise that resolves once the schema push is complete.\n */\nexport const pushDevSchema = async (adapter: DrizzleAdapter) => {\n if (process.env.PAYLOAD_FORCE_DRIZZLE_PUSH !== 'true') {\n const localeCodes =\n adapter.payload.config.localization && adapter.payload.config.localization.localeCodes\n\n try {\n deepStrictEqual(previousSchema, {\n localeCodes,\n rawTables: adapter.rawTables,\n })\n\n if (adapter.logger) {\n adapter.payload.logger.info('No changes detected in schema, skipping schema push.')\n }\n\n return\n } catch {\n previousSchema.localeCodes = localeCodes\n previousSchema.rawTables = adapter.rawTables\n }\n }\n\n const { pushSchema } = adapter.requireDrizzleKit()\n\n const { extensions = {}, tablesFilter } = adapter as BasePostgresAdapter\n\n // This will prompt if clarifications are needed for Drizzle to push new schema\n const { apply, hasDataLoss, warnings } = await pushSchema(\n adapter.schema,\n adapter.drizzle,\n adapter.schemaName ? [adapter.schemaName] : undefined,\n tablesFilter,\n // Drizzle extensionsFilter supports only postgis for now\n // https://github.com/drizzle-team/drizzle-orm/blob/83daf2d5cf023112de878bc2249ee2c41a2a5b1b/drizzle-kit/src/cli/validations/cli.ts#L26\n extensions.postgis ? ['postgis'] : undefined,\n )\n\n if (warnings.length) {\n let message = `Warnings detected during schema push: \\n\\n${warnings.join('\\n')}\\n\\n`\n\n if (hasDataLoss) {\n message += `DATA LOSS WARNING: Possible data loss detected if schema is pushed.\\n\\n`\n }\n\n message += `Accept warnings and push schema to database?`\n\n const { confirm: acceptWarnings } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message,\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n // Exit if user does not accept warnings.\n // Q: Is this the right type of exit for this interaction?\n if (!acceptWarnings) {\n process.exit(0)\n }\n }\n\n await apply()\n const migrationsTable = adapter.schemaName\n ? `\"${adapter.schemaName}\".\"payload_migrations\"`\n : '\"payload_migrations\"'\n\n const drizzle = adapter.drizzle as PostgresDB\n\n const result = await adapter.execute({\n drizzle,\n raw: `SELECT * FROM ${migrationsTable} WHERE batch = '-1'`,\n })\n\n const devPush = result.rows\n\n if (!devPush.length) {\n // Use drizzle for insert so $defaultFn's are called\n await drizzle.insert(adapter.tables.payload_migrations).values({\n name: 'dev',\n batch: -1,\n })\n } else {\n await adapter.execute({\n drizzle,\n raw: `UPDATE ${migrationsTable} SET updated_at = CURRENT_TIMESTAMP WHERE batch = '-1'`,\n })\n }\n}\n"],"names":["deepStrictEqual","prompts","previousSchema","localeCodes","rawTables","pushDevSchema","adapter","process","env","PAYLOAD_FORCE_DRIZZLE_PUSH","payload","config","localization","logger","info","pushSchema","requireDrizzleKit","extensions","tablesFilter","apply","hasDataLoss","warnings","schema","drizzle","schemaName","undefined","postgis","length","message","join","confirm","acceptWarnings","name","type","initial","onCancel","exit","migrationsTable","result","execute","raw","devPush","rows","insert","tables","payload_migrations","values","batch"],"mappings":"AAAA,SAASA,eAAe,QAAQ,SAAQ;AACxC,OAAOC,aAAa,UAAS;AAK7B,MAAMC,iBAGF;IACFC,aAAa;IACbC,WAAW;AACb;AAEA;;;;;CAKC,GACD,OAAO,MAAMC,gBAAgB,OAAOC;IAClC,IAAIC,QAAQC,GAAG,CAACC,0BAA0B,KAAK,QAAQ;QACrD,MAAMN,cACJG,QAAQI,OAAO,CAACC,MAAM,CAACC,YAAY,IAAIN,QAAQI,OAAO,CAACC,MAAM,CAACC,YAAY,CAACT,WAAW;QAExF,IAAI;YACFH,gBAAgBE,gBAAgB;gBAC9BC;gBACAC,WAAWE,QAAQF,SAAS;YAC9B;YAEA,IAAIE,QAAQO,MAAM,EAAE;gBAClBP,QAAQI,OAAO,CAACG,MAAM,CAACC,IAAI,CAAC;YAC9B;YAEA;QACF,EAAE,OAAM;YACNZ,eAAeC,WAAW,GAAGA;YAC7BD,eAAeE,SAAS,GAAGE,QAAQF,SAAS;QAC9C;IACF;IAEA,MAAM,EAAEW,UAAU,EAAE,GAAGT,QAAQU,iBAAiB;IAEhD,MAAM,EAAEC,aAAa,CAAC,CAAC,EAAEC,YAAY,EAAE,GAAGZ;IAE1C,+EAA+E;IAC/E,MAAM,EAAEa,KAAK,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAG,MAAMN,WAC7CT,QAAQgB,MAAM,EACdhB,QAAQiB,OAAO,EACfjB,QAAQkB,UAAU,GAAG;QAAClB,QAAQkB,UAAU;KAAC,GAAGC,WAC5CP,cACA,yDAAyD;IACzD,uIAAuI;IACvID,WAAWS,OAAO,GAAG;QAAC;KAAU,GAAGD;IAGrC,IAAIJ,SAASM,MAAM,EAAE;QACnB,IAAIC,UAAU,CAAC,0CAA0C,EAAEP,SAASQ,IAAI,CAAC,MAAM,IAAI,CAAC;QAEpF,IAAIT,aAAa;YACfQ,WAAW,CAAC,uEAAuE,CAAC;QACtF;QAEAA,WAAW,CAAC,4CAA4C,CAAC;QAEzD,MAAM,EAAEE,SAASC,cAAc,EAAE,GAAG,MAAM9B,QACxC;YACE+B,MAAM;YACNC,MAAM;YACNC,SAAS;YACTN;QACF,GACA;YACEO,UAAU;gBACR5B,QAAQ6B,IAAI,CAAC;YACf;QACF;QAGF,yCAAyC;QACzC,0DAA0D;QAC1D,IAAI,CAACL,gBAAgB;YACnBxB,QAAQ6B,IAAI,CAAC;QACf;IACF;IAEA,MAAMjB;IACN,MAAMkB,kBAAkB/B,QAAQkB,UAAU,GACtC,CAAC,CAAC,EAAElB,QAAQkB,UAAU,CAAC,sBAAsB,CAAC,GAC9C;IAEJ,MAAMD,UAAUjB,QAAQiB,OAAO;IAE/B,MAAMe,SAAS,MAAMhC,QAAQiC,OAAO,CAAC;QACnChB;QACAiB,KAAK,CAAC,cAAc,EAAEH,gBAAgB,mBAAmB,CAAC;IAC5D;IAEA,MAAMI,UAAUH,OAAOI,IAAI;IAE3B,IAAI,CAACD,QAAQd,MAAM,EAAE;QACnB,oDAAoD;QACpD,MAAMJ,QAAQoB,MAAM,CAACrC,QAAQsC,MAAM,CAACC,kBAAkB,EAAEC,MAAM,CAAC;YAC7Dd,MAAM;YACNe,OAAO,CAAC;QACV;IACF,OAAO;QACL,MAAMzC,QAAQiC,OAAO,CAAC;YACpBhB;YACAiB,KAAK,CAAC,OAAO,EAAEH,gBAAgB,sDAAsD,CAAC;QACxF;IACF;AACF,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/drizzle",
3
- "version": "3.11.0",
3
+ "version": "3.11.1-canary.053fca8",
4
4
  "description": "A library of shared functions used by different payload database adapters",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -52,17 +52,17 @@
52
52
  "@libsql/client": "0.14.0",
53
53
  "@types/pg": "8.10.2",
54
54
  "@types/to-snake-case": "1.0.0",
55
- "payload": "3.11.0",
55
+ "payload": "3.11.1-canary.053fca8",
56
56
  "@payloadcms/eslint-config": "3.9.0"
57
57
  },
58
58
  "peerDependencies": {
59
- "payload": "3.11.0"
59
+ "payload": "3.11.1-canary.053fca8"
60
60
  },
61
61
  "scripts": {
62
62
  "build": "pnpm build:swc && pnpm build:types",
63
63
  "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
64
64
  "build:types": "tsc --emitDeclarationOnly --outDir dist",
65
- "clean": "rimraf {dist,*.tsbuildinfo}",
65
+ "clean": "rimraf -g {dist,*.tsbuildinfo}",
66
66
  "lint": "eslint .",
67
67
  "lint:fix": "eslint . --fix"
68
68
  }
@@ -1,3 +0,0 @@
1
- import type { CreateMigration } from 'payload';
2
- export declare const createMigration: CreateMigration;
3
- //# sourceMappingURL=createMigration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMigration.d.ts","sourceRoot":"","sources":["../../src/postgres/createMigration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAc9C,eAAO,MAAM,eAAe,EAAE,eA2G7B,CAAA"}
@@ -1,91 +0,0 @@
1
- import fs from 'fs';
2
- import { createRequire } from 'module';
3
- import { getPredefinedMigration, writeMigrationIndex } from 'payload';
4
- import prompts from 'prompts';
5
- import { defaultDrizzleSnapshot } from './defaultSnapshot.js';
6
- import { getMigrationTemplate } from './getMigrationTemplate.js';
7
- const require = createRequire(import.meta.url);
8
- export const createMigration = async function createMigration({ dirname, file, forceAcceptWarning, migrationName, payload, skipEmpty }) {
9
- const dir = payload.db.migrationDir;
10
- if (!fs.existsSync(dir)) {
11
- fs.mkdirSync(dir);
12
- }
13
- const { generateDrizzleJson, generateMigration, upPgSnapshot } = require('drizzle-kit/api');
14
- const drizzleJsonAfter = generateDrizzleJson(this.schema);
15
- const [yyymmdd, hhmmss] = new Date().toISOString().split('T');
16
- const formattedDate = yyymmdd.replace(/\D/g, '');
17
- const formattedTime = hhmmss.split('.')[0].replace(/\D/g, '');
18
- let imports = '';
19
- let downSQL;
20
- let upSQL;
21
- ({ downSQL, imports, upSQL } = await getPredefinedMigration({
22
- dirname,
23
- file,
24
- migrationName,
25
- payload
26
- }));
27
- const timestamp = `${formattedDate}_${formattedTime}`;
28
- const name = migrationName || file?.split('/').slice(2).join('/');
29
- const fileName = `${timestamp}${name ? `_${name.replace(/\W/g, '_')}` : ''}`;
30
- const filePath = `${dir}/${fileName}`;
31
- let drizzleJsonBefore = defaultDrizzleSnapshot;
32
- if (this.schemaName) {
33
- drizzleJsonBefore.schemas = {
34
- [this.schemaName]: this.schemaName
35
- };
36
- }
37
- if (!upSQL) {
38
- // Get latest migration snapshot
39
- const latestSnapshot = fs.readdirSync(dir).filter((file)=>file.endsWith('.json')).sort().reverse()?.[0];
40
- if (latestSnapshot) {
41
- drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'));
42
- if (drizzleJsonBefore.version < drizzleJsonAfter.version) {
43
- drizzleJsonBefore = upPgSnapshot(drizzleJsonBefore);
44
- }
45
- }
46
- const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter);
47
- const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore);
48
- const sqlExecute = 'await payload.db.drizzle.execute(sql`';
49
- if (sqlStatementsUp?.length) {
50
- upSQL = `${sqlExecute}\n ${sqlStatementsUp?.join('\n')}\`)`;
51
- }
52
- if (sqlStatementsDown?.length) {
53
- downSQL = `${sqlExecute}\n ${sqlStatementsDown?.join('\n')}\`)`;
54
- }
55
- if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {
56
- if (skipEmpty) {
57
- process.exit(0);
58
- }
59
- const { confirm: shouldCreateBlankMigration } = await prompts({
60
- name: 'confirm',
61
- type: 'confirm',
62
- initial: false,
63
- message: 'No schema changes detected. Would you like to create a blank migration file?'
64
- }, {
65
- onCancel: ()=>{
66
- process.exit(0);
67
- }
68
- });
69
- if (!shouldCreateBlankMigration) {
70
- process.exit(0);
71
- }
72
- }
73
- // write schema
74
- fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2));
75
- }
76
- // write migration
77
- fs.writeFileSync(`${filePath}.ts`, getMigrationTemplate({
78
- downSQL: downSQL || ` // Migration code`,
79
- imports,
80
- packageName: payload.db.packageName,
81
- upSQL: upSQL || ` // Migration code`
82
- }));
83
- writeMigrationIndex({
84
- migrationsDir: payload.db.migrationDir
85
- });
86
- payload.logger.info({
87
- msg: `Migration created at ${filePath}.ts`
88
- });
89
- };
90
-
91
- //# sourceMappingURL=createMigration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/postgres/createMigration.ts"],"sourcesContent":["import type { CreateMigration } from 'payload'\n\nimport fs from 'fs'\nimport { createRequire } from 'module'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { defaultDrizzleSnapshot } from './defaultSnapshot.js'\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nconst require = createRequire(import.meta.url)\n\nexport const createMigration: CreateMigration = async function createMigration(\n this: BasePostgresAdapter,\n { dirname, file, forceAcceptWarning, migrationName, payload, skipEmpty },\n) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n const { generateDrizzleJson, generateMigration, upPgSnapshot } = require('drizzle-kit/api')\n const drizzleJsonAfter = generateDrizzleJson(this.schema)\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 ;({ downSQL, imports, upSQL } = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n }))\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 let drizzleJsonBefore = defaultDrizzleSnapshot\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 (drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upPgSnapshot(drizzleJsonBefore)\n }\n }\n\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n const sqlExecute = 'await payload.db.drizzle.execute(sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = `${sqlExecute}\\n ${sqlStatementsUp?.join('\\n')}\\`)`\n }\n if (sqlStatementsDown?.length) {\n downSQL = `${sqlExecute}\\n ${sqlStatementsDown?.join('\\n')}\\`)`\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 // write migration\n fs.writeFileSync(\n `${filePath}.ts`,\n getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n }),\n )\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${filePath}.ts` })\n}\n"],"names":["fs","createRequire","getPredefinedMigration","writeMigrationIndex","prompts","defaultDrizzleSnapshot","getMigrationTemplate","require","url","createMigration","dirname","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upPgSnapshot","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","timestamp","name","slice","join","fileName","filePath","drizzleJsonBefore","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","process","exit","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","packageName","migrationsDir","logger","info","msg"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { MigrationTemplateArgs } from 'payload';
2
- export declare const indent: (text: string) => string;
3
- export declare const getMigrationTemplate: ({ downSQL, imports, packageName, upSQL, }: MigrationTemplateArgs) => string;
4
- //# sourceMappingURL=getMigrationTemplate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getMigrationTemplate.d.ts","sourceRoot":"","sources":["../../src/postgres/getMigrationTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,eAAO,MAAM,MAAM,SAAU,MAAM,WAIpB,CAAA;AAEf,eAAO,MAAM,oBAAoB,8CAK9B,qBAAqB,KAAG,MAS1B,CAAA"}
@@ -1,13 +0,0 @@
1
- export const indent = (text)=>text.split('\n').map((line)=>` ${line}`).join('\n');
2
- export const getMigrationTemplate = ({ downSQL, imports, packageName, upSQL })=>`import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}'
3
- ${imports ? `${imports}\n` : ''}
4
- export async function up({ payload, req }: MigrateUpArgs): Promise<void> {
5
- ${indent(upSQL)}
6
- }
7
-
8
- export async function down({ payload, req }: MigrateDownArgs): Promise<void> {
9
- ${indent(downSQL)}
10
- }
11
- `;
12
-
13
- //# sourceMappingURL=getMigrationTemplate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/postgres/getMigrationTemplate.ts"],"sourcesContent":["import type { MigrationTemplateArgs } from 'payload'\n\nexport const indent = (text: string) =>\n text\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n')\n\nexport const getMigrationTemplate = ({\n downSQL,\n imports,\n packageName,\n upSQL,\n}: MigrationTemplateArgs): string => `import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}'\n${imports ? `${imports}\\n` : ''}\nexport async function up({ payload, req }: MigrateUpArgs): Promise<void> {\n${indent(upSQL)}\n}\n\nexport async function down({ payload, req }: MigrateDownArgs): Promise<void> {\n${indent(downSQL)}\n}\n`\n"],"names":["indent","text","split","map","line","join","getMigrationTemplate","downSQL","imports","packageName","upSQL"],"mappings":"AAEA,OAAO,MAAMA,SAAS,CAACC,OACrBA,KACGC,KAAK,CAAC,MACNC,GAAG,CAAC,CAACC,OAAS,CAAC,EAAE,EAAEA,MAAM,EACzBC,IAAI,CAAC,MAAK;AAEf,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,OAAO,EACPC,OAAO,EACPC,WAAW,EACXC,KAAK,EACiB,GAAa,CAAC,qDAAqD,EAAED,YAAY;AACzG,EAAED,UAAU,GAAGA,QAAQ,EAAE,CAAC,GAAG,GAAG;;AAEhC,EAAER,OAAOU,OAAO;;;;AAIhB,EAAEV,OAAOO,SAAS;;AAElB,CAAC,CAAA"}
@@ -1,42 +0,0 @@
1
- import type { PgColumnBuilder } from 'drizzle-orm/pg-core';
2
- import type { FlattenedField } from 'payload';
3
- import type { BaseExtraConfig, BasePostgresAdapter, RelationMap } from '../types.js';
4
- type Args = {
5
- adapter: BasePostgresAdapter;
6
- baseColumns?: Record<string, PgColumnBuilder>;
7
- /**
8
- * After table is created, run these functions to add extra config to the table
9
- * ie. indexes, multiple columns, etc
10
- */
11
- baseExtraConfig?: BaseExtraConfig;
12
- buildNumbers?: boolean;
13
- buildRelationships?: boolean;
14
- disableNotNull: boolean;
15
- disableRelsTableUnique?: boolean;
16
- disableUnique: boolean;
17
- fields: FlattenedField[];
18
- rootRelationships?: Set<string>;
19
- rootRelationsToBuild?: RelationMap;
20
- rootTableIDColType?: string;
21
- rootTableName?: string;
22
- rootUniqueRelationships?: Set<string>;
23
- tableName: string;
24
- timestamps?: boolean;
25
- versions: boolean;
26
- /**
27
- * Tracks whether or not this table is built
28
- * from the result of a localized array or block field at some point
29
- */
30
- withinLocalizedArrayOrBlock?: boolean;
31
- };
32
- type Result = {
33
- hasLocalizedManyNumberField: boolean;
34
- hasLocalizedManyTextField: boolean;
35
- hasLocalizedRelationshipField: boolean;
36
- hasManyNumberField: 'index' | boolean;
37
- hasManyTextField: 'index' | boolean;
38
- relationsToBuild: RelationMap;
39
- };
40
- export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, disableNotNull, disableRelsTableUnique, disableUnique, fields, rootRelationships, rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, rootUniqueRelationships, tableName, timestamps, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
41
- export {};
42
- //# sourceMappingURL=build.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAe7C,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EAInB,WAAW,EACZ,MAAM,aAAa,CAAA;AASpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;IACnC,gBAAgB,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,UAAU,wSAiBpB,IAAI,KAAG,MA4aT,CAAA"}