diff --git a/packages/drizzle/src/utilities/appendPrefixToKeys.ts b/packages/drizzle/src/utilities/appendPrefixToKeys.ts index 6e8d52a463..fa3c3d717c 100644 --- a/packages/drizzle/src/utilities/appendPrefixToKeys.ts +++ b/packages/drizzle/src/utilities/appendPrefixToKeys.ts @@ -1,5 +1,5 @@ export const appendPrefixToObjectKeys = (obj: Record, prefix: string): T => - Object.entries(obj).reduce((res, [key, val]) => { + Object.entries(obj).reduce((res: any, [key, val]) => { res[`${prefix}_${key}`] = val return res }, {} as T) diff --git a/packages/drizzle/src/utilities/buildCreateMigration.ts b/packages/drizzle/src/utilities/buildCreateMigration.ts index 2b287470ac..e59e083247 100644 --- a/packages/drizzle/src/utilities/buildCreateMigration.ts +++ b/packages/drizzle/src/utilities/buildCreateMigration.ts @@ -34,11 +34,11 @@ export const buildCreateMigration = ({ const drizzleJsonAfter = await generateDrizzleJson(this.schema) const [yyymmdd, hhmmss] = new Date().toISOString().split('T') - const formattedDate = yyymmdd.replace(/\D/g, '') - const formattedTime = hhmmss.split('.')[0].replace(/\D/g, '') - let imports: string = '' - let downSQL: string - let upSQL: string + const formattedDate = yyymmdd?.replace(/\D/g, '') + const formattedTime = hhmmss?.split('.')[0]?.replace(/\D/g, '') + let imports: string | undefined = '' + let downSQL: string | undefined + let upSQL: string | undefined ;({ downSQL, imports, upSQL } = await getPredefinedMigration({ dirname, file, diff --git a/packages/drizzle/src/utilities/createBlocksMap.ts b/packages/drizzle/src/utilities/createBlocksMap.ts index 727cddc120..2ebb4c3e9b 100644 --- a/packages/drizzle/src/utilities/createBlocksMap.ts +++ b/packages/drizzle/src/utilities/createBlocksMap.ts @@ -9,7 +9,11 @@ export const createBlocksMap = (data: Record): BlocksMap => { if (key.startsWith('_blocks_') && Array.isArray(rows)) { let blockType = key.replace('_blocks_', '') const parsed = blockType.split('_') - if (parsed.length === 2 && Number.isInteger(Number(parsed[1]))) { + if ( + parsed.length === 2 && + Number.isInteger(Number(parsed[1])) && + typeof parsed[0] === 'string' + ) { blockType = parsed[0] } @@ -20,7 +24,7 @@ export const createBlocksMap = (data: Record): BlocksMap => { } row.blockType = blockType - blocksMap[row._path].push(row) + blocksMap[row._path]?.push(row) delete row._path } @@ -30,7 +34,7 @@ export const createBlocksMap = (data: Record): BlocksMap => { } }) - Object.entries(blocksMap).reduce((sortedBlocksMap, [path, blocks]) => { + Object.entries(blocksMap).reduce((sortedBlocksMap: any, [path, blocks]) => { sortedBlocksMap[path] = blocks.sort((a, b) => { if (typeof a._order === 'number' && typeof b._order === 'number') { return a._order - b._order diff --git a/packages/drizzle/src/utilities/createSchemaGenerator.ts b/packages/drizzle/src/utilities/createSchemaGenerator.ts index b979460b26..c1477c104a 100644 --- a/packages/drizzle/src/utilities/createSchemaGenerator.ts +++ b/packages/drizzle/src/utilities/createSchemaGenerator.ts @@ -75,7 +75,7 @@ export const createSchemaGenerator = ({ let schemaDeclaration: null | string = null - if (this.schemaName) { + if (this.schemaName && schemaImport) { addImport(corePackage, schemaImport) schemaDeclaration = `export const db_schema = ${schemaImport}('${this.schemaName}')` } @@ -113,11 +113,18 @@ export const createSchemaGenerator = ({ for (const tableName in this.rawTables) { const table = this.rawTables[tableName] + if (!table) { + continue + } + const extrasDeclarations: string[] = [] if (table.indexes) { for (const key in table.indexes) { const index = table.indexes[key] + if (!index) { + continue + } let indexDeclaration = `${sanitizeObjectKey(key)}: ${index.unique ? 'uniqueIndex' : 'index'}('${index.name}')` indexDeclaration += `.on(${typeof index.on === 'string' ? `${accessProperty('columns', index.on)}` : `${index.on.map((on) => `${accessProperty('columns', on)}`).join(', ')}`}),` extrasDeclarations.push(indexDeclaration) @@ -127,7 +134,9 @@ export const createSchemaGenerator = ({ if (table.foreignKeys) { for (const key in table.foreignKeys) { const foreignKey = table.foreignKeys[key] - + if (!foreignKey) { + continue + } let foreignKeyDeclaration = `${sanitizeObjectKey(key)}: foreignKey({ columns: [${foreignKey.columns.map((col) => `columns['${col}']`).join(', ')}], foreignColumns: [${foreignKey.foreignColumns.map((col) => `${accessProperty(col.table, col.name)}`).join(', ')}], @@ -179,10 +188,16 @@ ${Object.entries(table.columns) for (const tableName in this.rawRelations) { const relations = this.rawRelations[tableName] + if (!relations) { + continue + } const properties: string[] = [] for (const key in relations) { const relation = relations[key] + if (!relation) { + continue + } let declaration: string if (relation.type === 'one') { @@ -221,7 +236,7 @@ ${Object.entries(table.columns) relationsDeclarations.push(declaration) } - if (enumDeclarations.length && !this.schemaName) { + if (enumDeclarations.length && !this.schemaName && enumImport) { addImport(corePackage, enumImport) } @@ -229,6 +244,9 @@ ${Object.entries(table.columns) for (const moduleName in importDeclarations) { const moduleImports = importDeclarations[moduleName] + if (!moduleImports) { + continue + } importDeclarationsSanitized.push( `import { ${Array.from(moduleImports).join(', ')} } from '${moduleName}'`, diff --git a/packages/drizzle/src/utilities/extendDrizzleTable.ts b/packages/drizzle/src/utilities/extendDrizzleTable.ts index dc0ac59978..3fa8d830c5 100644 --- a/packages/drizzle/src/utilities/extendDrizzleTable.ts +++ b/packages/drizzle/src/utilities/extendDrizzleTable.ts @@ -26,7 +26,9 @@ type Args = { /** * Extends the passed table with additional columns / extra config */ -export const extendDrizzleTable = ({ columns, extraConfig, table }: Args): void => { +export const extendDrizzleTable = ({ columns, extraConfig, table: tableFromArgs }: Args): void => { + // hard drizzle types + const table: any = tableFromArgs const InlineForeignKeys = Object.getOwnPropertySymbols(table).find((symbol) => { return symbol.description?.includes('InlineForeignKeys') }) @@ -53,7 +55,7 @@ export const extendDrizzleTable = ({ columns, extraConfig, table }: Args): void if (extraConfig) { const originalExtraConfigBuilder = table[DrizzleSymbol.ExtraConfigBuilder] - table[DrizzleSymbol.ExtraConfigBuilder] = (t) => { + table[DrizzleSymbol.ExtraConfigBuilder] = (t: any) => { return { ...originalExtraConfigBuilder(t), ...extraConfig(t), diff --git a/packages/drizzle/src/utilities/getMigrationTemplate.ts b/packages/drizzle/src/utilities/getMigrationTemplate.ts index 3b1b05be36..79f30d1df5 100644 --- a/packages/drizzle/src/utilities/getMigrationTemplate.ts +++ b/packages/drizzle/src/utilities/getMigrationTemplate.ts @@ -14,10 +14,10 @@ export const getMigrationTemplate = ({ }: MigrationTemplateArgs): string => `import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}' ${imports ? `${imports}\n` : ''} export async function up({ db, payload, req }: MigrateUpArgs): Promise { -${indent(upSQL)} +${upSQL ? indent(upSQL) : ''} } export async function down({ db, payload, req }: MigrateDownArgs): Promise { -${indent(downSQL)} +${downSQL ? indent(downSQL) : ''} } ` diff --git a/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts b/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts index 7395c46ab9..d9b5b96888 100644 --- a/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts +++ b/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts @@ -1,9 +1,9 @@ import type { Table } from 'drizzle-orm' export const getNameFromDrizzleTable = (table: Table): string => { - const symbol = Object.getOwnPropertySymbols(table).find((symb) => - symb.description.includes('Name'), + const symbol = Object.getOwnPropertySymbols(table).find( + (symb) => symb && symb.description?.includes('Name'), ) - return table[symbol] + return (table as any)[symbol!] } diff --git a/packages/drizzle/src/utilities/hasLocalesTable.ts b/packages/drizzle/src/utilities/hasLocalesTable.ts index 80f39cdc40..94e7f903ca 100644 --- a/packages/drizzle/src/utilities/hasLocalesTable.ts +++ b/packages/drizzle/src/utilities/hasLocalesTable.ts @@ -4,7 +4,7 @@ import { fieldAffectsData, fieldHasSubFields, fieldShouldBeLocalized } from 'pay export const hasLocalesTable = ({ fields, - parentIsLocalized, + parentIsLocalized = false, }: { fields: Field[] /** diff --git a/packages/drizzle/src/utilities/isPolymorphicRelationship.ts b/packages/drizzle/src/utilities/isPolymorphicRelationship.ts index 42b51bb90e..f16437911b 100644 --- a/packages/drizzle/src/utilities/isPolymorphicRelationship.ts +++ b/packages/drizzle/src/utilities/isPolymorphicRelationship.ts @@ -6,11 +6,11 @@ export const isPolymorphicRelationship = ( relationTo: CollectionSlug value: number | string } => { - return ( + return Boolean( value && - typeof value === 'object' && - 'relationTo' in value && - typeof value.relationTo === 'string' && - 'value' in value + typeof value === 'object' && + 'relationTo' in value && + typeof value.relationTo === 'string' && + 'value' in value, ) } diff --git a/packages/drizzle/src/utilities/migrationTableExists.ts b/packages/drizzle/src/utilities/migrationTableExists.ts index bbc397a637..a283e87151 100644 --- a/packages/drizzle/src/utilities/migrationTableExists.ts +++ b/packages/drizzle/src/utilities/migrationTableExists.ts @@ -31,5 +31,5 @@ export const migrationTableExists = async ( const [row] = result.rows - return row && typeof row === 'object' && 'exists' in row && !!row.exists + return Boolean(row && typeof row === 'object' && 'exists' in row && !!row.exists) } diff --git a/packages/drizzle/src/utilities/pushDevSchema.ts b/packages/drizzle/src/utilities/pushDevSchema.ts index 0406846e23..d3f28d6533 100644 --- a/packages/drizzle/src/utilities/pushDevSchema.ts +++ b/packages/drizzle/src/utilities/pushDevSchema.ts @@ -35,14 +35,14 @@ export const pushDevSchema = async (adapter: DrizzleAdapter) => { return } else { - previousSchema.localeCodes = localeCodes + previousSchema.localeCodes = localeCodes || null previousSchema.rawTables = adapter.rawTables } } const { pushSchema } = adapter.requireDrizzleKit() - const { extensions = {}, tablesFilter } = adapter as BasePostgresAdapter + const { extensions = {}, tablesFilter } = adapter as unknown as BasePostgresAdapter // This will prompt if clarifications are needed for Drizzle to push new schema const { apply, hasDataLoss, warnings } = await pushSchema( diff --git a/packages/drizzle/src/utilities/rawConstraint.ts b/packages/drizzle/src/utilities/rawConstraint.ts index f47ceed9c0..56d031c774 100644 --- a/packages/drizzle/src/utilities/rawConstraint.ts +++ b/packages/drizzle/src/utilities/rawConstraint.ts @@ -9,5 +9,7 @@ export const rawConstraint = (value: unknown) => ({ }) export const isRawConstraint = (value: unknown): value is ReturnType => { - return value && typeof value === 'object' && 'type' in value && value.type === RawConstraintSymbol + return Boolean( + value && typeof value === 'object' && 'type' in value && value.type === RawConstraintSymbol, + ) } diff --git a/packages/drizzle/src/utilities/validateExistingBlockIsIdentical.ts b/packages/drizzle/src/utilities/validateExistingBlockIsIdentical.ts index 60969c608d..a8ff6d7c9a 100644 --- a/packages/drizzle/src/utilities/validateExistingBlockIsIdentical.ts +++ b/packages/drizzle/src/utilities/validateExistingBlockIsIdentical.ts @@ -27,7 +27,7 @@ const getFlattenedFieldNames = (args: { prefix?: string }): { localized?: boolean; name: string }[] => { const { fields, parentIsLocalized, prefix = '' } = args - return fields.reduce((fieldsToUse, field) => { + return fields.reduce<{ localized?: boolean; name: string }[]>((fieldsToUse, field) => { let fieldPrefix = prefix if ( @@ -43,7 +43,8 @@ const getFlattenedFieldNames = (args: { ...fieldsToUse, ...getFlattenedFieldNames({ fields: field.fields, - parentIsLocalized: parentIsLocalized || ('localized' in field && field.localized), + parentIsLocalized: + (parentIsLocalized || ('localized' in field && field.localized)) ?? false, prefix: fieldPrefix, }), ] @@ -52,7 +53,7 @@ const getFlattenedFieldNames = (args: { if (field.type === 'tabs') { return [ ...fieldsToUse, - ...field.tabs.reduce((tabFields, tab) => { + ...field.tabs.reduce<{ localized?: boolean; name: string }[]>((tabFields, tab) => { fieldPrefix = 'name' in tab ? `${prefix}_${tab.name}` : prefix return [ ...tabFields, @@ -60,7 +61,7 @@ const getFlattenedFieldNames = (args: { ? [{ ...tab, type: 'tab' }] : getFlattenedFieldNames({ fields: tab.fields, - parentIsLocalized: parentIsLocalized || tab.localized, + parentIsLocalized: (parentIsLocalized || tab.localized) ?? false, prefix: fieldPrefix, })), ] @@ -119,13 +120,13 @@ export const validateExistingBlockIsIdentical = ({ export const InternalBlockTableNameIndex = Symbol('InternalBlockTableNameIndex') export const setInternalBlockIndex = (block: FlattenedBlock, index: number) => { - block[InternalBlockTableNameIndex] = index + ;(block as any)[InternalBlockTableNameIndex] = index } export const resolveBlockTableName = (block: FlattenedBlock, originalTableName: string) => { - if (!block[InternalBlockTableNameIndex]) { + if (!(block as any)[InternalBlockTableNameIndex]) { return originalTableName } - return `${originalTableName}_${block[InternalBlockTableNameIndex]}` + return `${originalTableName}_${(block as any)[InternalBlockTableNameIndex]}` }