@payloadcms/drizzle 3.0.0 → 3.0.1-canary.9494866
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.
- package/dist/postgres/schema/build.d.ts +40 -3
- package/dist/postgres/schema/build.d.ts.map +1 -1
- package/dist/postgres/schema/build.js +734 -2
- package/dist/postgres/schema/build.js.map +1 -1
- package/dist/postgres/schema/traverseFields.d.ts +0 -40
- package/dist/postgres/schema/traverseFields.d.ts.map +1 -1
- package/dist/postgres/schema/traverseFields.js +0 -741
- package/dist/postgres/schema/traverseFields.js.map +1 -1
- package/dist/queries/parseParams.d.ts +11 -0
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +23 -1
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/transform/write/traverseFields.d.ts +52 -1
- package/dist/transform/write/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.js +122 -2
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/package.json +4 -4
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts +0 -2
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +0 -1
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +0 -16
- package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +0 -1
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts +0 -2
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts.map +0 -1
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.js +0 -5
- package/dist/postgres/createJSONQuery/formatJSONPathSegment.js.map +0 -1
- package/dist/queries/buildAndOrConditions.d.ts +0 -16
- package/dist/queries/buildAndOrConditions.d.ts.map +0 -1
- package/dist/queries/buildAndOrConditions.js +0 -26
- package/dist/queries/buildAndOrConditions.js.map +0 -1
- package/dist/transform/write/array.d.ts +0 -31
- package/dist/transform/write/array.d.ts.map +0 -1
- package/dist/transform/write/array.js +0 -62
- package/dist/transform/write/array.js.map +0 -1
- package/dist/transform/write/blocks.d.ts +0 -30
- package/dist/transform/write/blocks.d.ts.map +0 -1
- package/dist/transform/write/blocks.js +0 -66
- package/dist/transform/write/blocks.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/postgres/schema/build.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n foreignKey,\n index,\n integer,\n numeric,\n serial,\n timestamp,\n unique,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n GenericTable,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { createIndex } from './createIndex.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseExtraConfig?: BaseExtraConfig\n buildNumbers?: boolean\n buildRelationships?: boolean\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: string\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n const result = Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n\n return result\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n _parentIdFk: foreignKey({\n name: `${localeTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n adapter.relations[`relations_${localeTableName}`] = relations(localesTable, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n result._parentID = one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n // name the relationship by what the many() relationName is\n relationName: '_locales',\n })\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [localesTable[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], {\n relationName: key,\n })\n }\n })\n\n return result\n })\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${textsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyTextField === 'index') {\n config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n config.localeParent = index(`${textsTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[textsTableName] = textsTable\n\n adapter.relations[`relations_${textsTableName}`] = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n relationName: '_texts',\n }),\n }))\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${numbersTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyNumberField === 'index') {\n config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n config.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n adapter.relations[`relations_${numbersTableName}`] = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n relationName: '_numbers',\n }),\n }))\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n const relationExtraConfig: BaseExtraConfig = {}\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`)\n\n relationExtraConfig[`${relationTo}IdFk`] = (cols) =>\n foreignKey({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,\n columns: [cols[colName]],\n foreignColumns: [adapter.tables[formattedRelationTo].id],\n }).onDelete('cascade')\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationExtraConfig[indexName] = createIndex({\n name: indexColumns,\n indexName,\n unique,\n })\n })\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, ForeignKeyBuilder | IndexBuilder> = Object.entries(\n relationExtraConfig,\n ).reduce(\n (config, [key, func]) => {\n config[key] = func(cols)\n return config\n },\n {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentFk: foreignKey({\n name: `${relationshipsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\n },\n )\n\n if (hasLocalizedRelationshipField) {\n result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)\n }\n\n return result\n },\n )\n\n adapter.tables[relationshipsTableName] = relationshipsTable\n\n adapter.relations[`relations_${relationshipsTableName}`] = relations(\n relationshipsTable,\n ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n relationName: relationTo,\n })\n })\n\n return result\n },\n )\n }\n }\n\n adapter.relations[`relations_${tableName}`] = relations(table, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [table[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: relationName || key })\n }\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable, { relationName: '_locales' })\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable, { relationName: '_texts' })\n }\n\n if (hasManyNumberField) {\n result._numbers = many(numbersTable, { relationName: '_numbers' })\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["relations","foreignKey","index","integer","numeric","serial","timestamp","unique","varchar","toSnakeCase","createTableName","buildIndexName","createIndex","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","disableNotNull","disableRelsTableUnique","disableUnique","fields","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","func","result","acc","colName","tables","size","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","many","one","references","textsTableName","order","parent","path","text","locale","orderParentIdx","parentFk","text_idx","localeParent","numbersTableName","number","numberIdx","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","indexColumns","has","push","indexName","parentIdx","pathIdx","localeIdx","relatedTableName","idColumnName","_locales","_texts","_numbers","_rels"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/postgres/schema/build.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport type { Field, TabAsField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n serial,\n text,\n timestamp,\n unique,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n GenericTable,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { createIndex } from './createIndex.js'\nimport { geometryColumn } from './geometryColumn.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseExtraConfig?: BaseExtraConfig\n buildNumbers?: boolean\n buildRelationships?: boolean\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: string\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n const result = Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n\n return result\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n _parentIdFk: foreignKey({\n name: `${localeTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n adapter.relations[`relations_${localeTableName}`] = relations(localesTable, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n result._parentID = one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n // name the relationship by what the many() relationName is\n relationName: '_locales',\n })\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [localesTable[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], {\n relationName: key,\n })\n }\n })\n\n return result\n })\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${textsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyTextField === 'index') {\n config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n config.localeParent = index(`${textsTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[textsTableName] = textsTable\n\n adapter.relations[`relations_${textsTableName}`] = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n relationName: '_texts',\n }),\n }))\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${numbersTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyNumberField === 'index') {\n config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n config.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n adapter.relations[`relations_${numbersTableName}`] = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n relationName: '_numbers',\n }),\n }))\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n const relationExtraConfig: BaseExtraConfig = {}\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`)\n\n relationExtraConfig[`${relationTo}IdFk`] = (cols) =>\n foreignKey({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,\n columns: [cols[colName]],\n foreignColumns: [adapter.tables[formattedRelationTo].id],\n }).onDelete('cascade')\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationExtraConfig[indexName] = createIndex({\n name: indexColumns,\n indexName,\n unique,\n })\n })\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, ForeignKeyBuilder | IndexBuilder> = Object.entries(\n relationExtraConfig,\n ).reduce(\n (config, [key, func]) => {\n config[key] = func(cols)\n return config\n },\n {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentFk: foreignKey({\n name: `${relationshipsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\n },\n )\n\n if (hasLocalizedRelationshipField) {\n result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)\n }\n\n return result\n },\n )\n\n adapter.tables[relationshipsTableName] = relationshipsTable\n\n adapter.relations[`relations_${relationshipsTableName}`] = relations(\n relationshipsTable,\n ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n relationName: relationTo,\n })\n })\n\n return result\n },\n )\n }\n }\n\n adapter.relations[`relations_${tableName}`] = relations(table, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [table[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: relationName || key })\n }\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable, { relationName: '_locales' })\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable, { relationName: '_texts' })\n }\n\n if (hasManyNumberField) {\n result._numbers = many(numbersTable, { relationName: '_numbers' })\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n\ntype TraverseFieldsArgs = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype TraverseFieldsResult = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: TraverseFieldsArgs): TraverseFieldsResult => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n indexName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n case 'code':\n\n case 'email':\n\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n case 'collapsible':\n\n case 'row': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (rowHasLocalizedField) {\n hasLocalizedField = true\n }\n if (rowHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (rowHasManyTextField) {\n hasManyTextField = true\n }\n if (rowHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (rowHasManyNumberField) {\n hasManyNumberField = true\n }\n if (rowHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'group':\n case 'tab': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'json':\n\n case 'richText': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'point': {\n targetTable[fieldName] = withDefault(geometryColumn(columnName), field)\n if (!adapter.extensions.postgis) {\n adapter.extensions.postgis = true\n }\n break\n }\n case 'radio':\n\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (tabHasLocalizedField) {\n hasLocalizedField = true\n }\n if (tabHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (tabHasManyTextField) {\n hasManyTextField = true\n }\n if (tabHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (tabHasManyNumberField) {\n hasManyNumberField = true\n }\n if (tabHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","serial","text","timestamp","unique","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","buildIndexName","hasLocalesTable","validateExistingBlockIsIdentical","createIndex","geometryColumn","idToUUID","parentIDColumnMap","setColumnID","withDefault","buildTable","adapter","baseColumns","baseExtraConfig","disableNotNull","disableRelsTableUnique","disableUnique","fields","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","traverseFields","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","func","result","acc","colName","tables","size","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","many","one","references","textsTableName","order","parent","path","locale","orderParentIdx","parentFk","text_idx","localeParent","numbersTableName","number","numberIdx","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","indexColumns","has","push","indexName","parentIdx","pathIdx","localeIdx","relatedTableName","idColumnName","_locales","_texts","_numbers","_rels","columnPrefix","fieldPrefix","forceLocalized","parentIDColType","field","columnName","fieldName","targetTable","targetIndexes","replace","localization","hasMany","includes","Array","isArray","constraintValue","fieldConstraints","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","_order","_orderIdx","_parentIDFk","_parentIDIdx","isLocalized","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","arrayWithLocalized","blocks","block","blockTableName","_path","_pathIdx","blockWithLocalized","process","env","NODE_ENV","tableLocales","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","extensions","postgis","enumName","enum","options","option","value","selectTableName","orderIdx","relation","add","tableNameMap","get","relatedCollectionCustomID","find","required","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab"],"mappings":"AASA,SAASA,SAAS,QAAQ,cAAa;AACvC,SACEC,OAAO,EACPC,UAAU,EACVC,KAAK,EACLC,OAAO,EACPC,KAAK,EACLC,OAAO,EACPC,gBAAgB,EAChBC,aAAa,EACbC,gBAAgB,EAChBC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,OAAO,QACF,sBAAqB;AAC5B,SAASC,oBAAoB,QAAQ,UAAS;AAC9C,SAASC,gBAAgB,EAAEC,cAAc,EAAEC,cAAc,QAAQ,iBAAgB;AACjF,OAAOC,iBAAiB,gBAAe;AAWvC,SAASC,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,gCAAgC,QAAQ,sDAAqD;AACtG,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,QAAQ,QAAQ,gBAAe;AACxC,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,WAAW,QAAQ,mBAAkB;AAwC9C,OAAO,MAAMC,aAAa,CAAC,EACzBC,OAAO,EACPC,cAAc,CAAC,CAAC,EAChBC,kBAAkB,CAAC,CAAC,EACpBC,cAAc,EACdC,yBAAyB,KAAK,EAC9BC,gBAAgB,KAAK,EACrBC,MAAM,EACNC,iBAAiB,EACjBC,oBAAoB,EACpBC,kBAAkB,EAClBC,eAAeC,qBAAqB,EACpCC,uBAAuB,EACvBC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,2BAA2B,EACtB;IACL,MAAMC,SAAS,CAACN;IAChB,MAAMD,gBAAgBC,yBAAyBE;IAC/C,MAAMK,UAA2CjB;IACjD,MAAMkB,UAAkE,CAAC;IAEzE,MAAMC,iBAAkD,CAAC;IACzD,MAAMC,iBAAyE,CAAC;IAChF,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJ,uCAAuC;IACvC,MAAMC,gBAA6BlB,qBAAqB,IAAImB;IAE5D,8CAA8C;IAC9C,MAAMC,sBAAmCf,2BAA2B,IAAIc;IAExE,IAAIE;IAEJ,oBAAoB;IACpB,MAAMC,mBAAgC,IAAIC;IAE1C,MAAMC,YAAoBlC,YAAY;QAAEG;QAASkB;QAASZ;IAAO;IAEjE,MAAM,EACJ0B,iBAAiB,EACjBC,2BAA2B,EAC3BC,yBAAyB,EACzBC,6BAA6B,EAC7BC,kBAAkB,EAClBC,gBAAgB,EACjB,GAAGC,eAAe;QACjBtC;QACAkB;QACAf;QACAC;QACAC;QACAC;QACAa;QACAC;QACAC;QACAkB,cAAc1B;QACd2B,iBAAiB3B;QACjBY;QACAI;QACArB,sBAAsBA,wBAAwBqB;QAC9CpB,oBAAoBA,sBAAsBsB;QAC1CrB;QACAiB;QACAZ;QACAC;IACF;IAEA,4DAA4D;IAC5D,MAAMyB,qBAAqB,IAAIX;IAC/B,MAAMY,wBAAwB,IAAIZ;IAElCD,iBAAiBc,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,YAAY,EAAEC,MAAM,EAAE,EAAEC;QACnE,MAAMC,MAAMJ,YAAYJ,qBAAqBC;QAC7CO,IAAIC,GAAG,CAACF,KAAK;YAAEJ;YAAME;YAAcC;QAAO;IAC5C;IAEA,IAAIjC,YAAY;QACdI,QAAQiC,SAAS,GAAGtE,UAAU,cAAc;YAC1CuE,MAAM;YACNC,WAAW;YACXC,cAAc;QAChB,GACGC,UAAU,GACVC,OAAO;QACVtC,QAAQuC,SAAS,GAAG5E,UAAU,cAAc;YAC1CuE,MAAM;YACNC,WAAW;YACXC,cAAc;QAChB,GACGC,UAAU,GACVC,OAAO;IACZ;IAEA,MAAME,QAAQ1D,QAAQ2D,QAAQ,CAACD,KAAK,CAAC7C,WAAWK,SAAS,CAAC0C;QACxD,MAAMC,cAAcC,OAAOC,OAAO,CAAC7D,iBAAiB8D,MAAM,CAAC,CAACC,QAAQ,CAACjB,KAAKkB,KAAK;YAC7ED,MAAM,CAACjB,IAAI,GAAGkB,KAAKN;YACnB,OAAOK;QACT,GAAG,CAAC;QAEJ,MAAME,SAASL,OAAOC,OAAO,CAAC5C,SAAS6C,MAAM,CAAC,CAACI,KAAK,CAACC,SAASH,KAAK;YACjEE,GAAG,CAACC,QAAQ,GAAGH,KAAKN;YACpB,OAAOQ;QACT,GAAGP;QAEH,OAAOM;IACT;IAEAnE,QAAQsE,MAAM,CAACzD,UAAU,GAAG6C;IAE5B,IAAI1B,qBAAqBS,mBAAmB8B,IAAI,EAAE;QAChD,MAAMC,kBAAkB,CAAC,EAAE3D,UAAU,EAAEb,QAAQyE,aAAa,CAAC,CAAC;QAC9DrD,eAAesD,EAAE,GAAG/F,OAAO,MAAMgG,UAAU;QAC3CvD,eAAewD,OAAO,GAAG5E,QAAQ6E,KAAK,CAACC,aAAa,CAAC,WAAWtB,OAAO;QACvEpC,eAAe2D,SAAS,GAAGnF,iBAAiB,CAACmC,UAAU,CAAC,cAAcyB,OAAO;QAE7ElC,eAAetB,QAAQ2D,QAAQ,CAACD,KAAK,CAACc,iBAAiBpD,gBAAgB,CAACwC;YACtE,OAAOE,OAAOC,OAAO,CAAC1C,gBAAgB2C,MAAM,CAC1C,CAACI,KAAK,CAACC,SAASH,KAAK;gBACnBE,GAAG,CAACC,QAAQ,GAAGH,KAAKN;gBACpB,OAAOQ;YACT,GACA;gBACEY,eAAelG,OAAO,CAAC,EAAE0F,gBAAgB,wBAAwB,CAAC,EAAES,EAAE,CACpErB,KAAKgB,OAAO,EACZhB,KAAKmB,SAAS;gBAEhBG,aAAa/G,WAAW;oBACtBgH,MAAM,CAAC,EAAEX,gBAAgB,aAAa,CAAC;oBACvCtD,SAAS;wBAAC0C,KAAKmB,SAAS;qBAAC;oBACzBK,gBAAgB;wBAAC1B,MAAMgB,EAAE;qBAAC;gBAC5B,GAAGW,QAAQ,CAAC;YACd;QAEJ;QAEArF,QAAQsE,MAAM,CAACE,gBAAgB,GAAGlD;QAElCtB,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEuG,gBAAgB,CAAC,CAAC,GAAGvG,UAAUqD,cAAc,CAAC,EAAEgE,IAAI,EAAEC,GAAG,EAAE;YACxF,MAAMpB,SAA2C,CAAC;YAElDA,OAAOY,SAAS,GAAGQ,IAAI7B,OAAO;gBAC5BpD,QAAQ;oBAACgB,aAAayD,SAAS;iBAAC;gBAChCS,YAAY;oBAAC9B,MAAMgB,EAAE;iBAAC;gBACtB,2DAA2D;gBAC3D5B,cAAc;YAChB;YAEAL,mBAAmBE,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEG,MAAM,EAAE,EAAEC;gBAC5C,IAAIJ,SAAS,OAAO;oBAClBuB,MAAM,CAACnB,IAAI,GAAGuC,IAAIvF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;wBACxCzC,QAAQ;4BAACgB,YAAY,CAAC0B,IAAI;yBAAC;wBAC3BwC,YAAY;4BAACxF,QAAQsE,MAAM,CAACvB,OAAO,CAAC2B,EAAE;yBAAC;wBACvC5B,cAAcE;oBAChB;gBACF;gBACA,IAAIJ,SAAS,QAAQ;oBACnBuB,MAAM,CAACnB,IAAI,GAAGsC,KAAKtF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;wBACzCD,cAAcE;oBAChB;gBACF;YACF;YAEA,OAAOmB;QACT;IACF;IAEA,IAAIlD,QAAQ;QACV,IAAIoB,kBAAkB;YACpB,MAAMoD,iBAAiB,CAAC,EAAE/E,cAAc,MAAM,CAAC;YAC/C,MAAMQ,UAA2C;gBAC/CwD,IAAI/F,OAAO,MAAMgG,UAAU;gBAC3Be,OAAOrH,QAAQ,SAASmF,OAAO;gBAC/BmC,QAAQ/F,iBAAiB,CAACmC,UAAU,CAAC,aAAayB,OAAO;gBACzDoC,MAAM7G,QAAQ,QAAQyE,OAAO;gBAC7B5E,MAAMG,QAAQ;YAChB;YAEA,IAAImD,2BAA2B;gBAC7BhB,QAAQ2E,MAAM,GAAG7F,QAAQ6E,KAAK,CAACC,aAAa,CAAC;YAC/C;YAEAvD,aAAavB,QAAQ2D,QAAQ,CAACD,KAAK,CAAC+B,gBAAgBvE,SAAS,CAAC0C;gBAC5D,MAAMK,SAA2D;oBAC/D6B,gBAAgB1H,MAAM,CAAC,EAAEqH,eAAe,iBAAiB,CAAC,EAAER,EAAE,CAACrB,KAAK8B,KAAK,EAAE9B,KAAK+B,MAAM;oBACtFI,UAAU5H,WAAW;wBACnBgH,MAAM,CAAC,EAAEM,eAAe,UAAU,CAAC;wBACnCvE,SAAS;4BAAC0C,KAAK+B,MAAM;yBAAC;wBACtBP,gBAAgB;4BAAC1B,MAAMgB,EAAE;yBAAC;oBAC5B,GAAGW,QAAQ,CAAC;gBACd;gBAEA,IAAIhD,qBAAqB,SAAS;oBAChC4B,OAAO+B,QAAQ,GAAG5H,MAAM,CAAC,EAAEqH,eAAe,SAAS,CAAC,EAAER,EAAE,CAACrB,KAAKhF,IAAI;gBACpE;gBAEA,IAAIsD,2BAA2B;oBAC7B+B,OAAOgC,YAAY,GAAG7H,MAAM,CAAC,EAAEqH,eAAe,cAAc,CAAC,EAAER,EAAE,CAC/DrB,KAAKiC,MAAM,EACXjC,KAAK+B,MAAM;gBAEf;gBAEA,OAAO1B;YACT;YAEAjE,QAAQsE,MAAM,CAACmB,eAAe,GAAGlE;YAEjCvB,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEwH,eAAe,CAAC,CAAC,GAAGxH,UAAUsD,YAAY,CAAC,EAAEgE,GAAG,EAAE,GAAM,CAAA;oBACrFI,QAAQJ,IAAI7B,OAAO;wBACjBpD,QAAQ;4BAACiB,WAAWoE,MAAM;yBAAC;wBAC3BH,YAAY;4BAAC9B,MAAMgB,EAAE;yBAAC;wBACtB5B,cAAc;oBAChB;gBACF,CAAA;QACF;QAEA,IAAIV,oBAAoB;YACtB,MAAM8D,mBAAmB,CAAC,EAAExF,cAAc,QAAQ,CAAC;YACnD,MAAMQ,UAA2C;gBAC/CwD,IAAI/F,OAAO,MAAMgG,UAAU;gBAC3BwB,QAAQ5H,QAAQ;gBAChBmH,OAAOrH,QAAQ,SAASmF,OAAO;gBAC/BmC,QAAQ/F,iBAAiB,CAACmC,UAAU,CAAC,aAAayB,OAAO;gBACzDoC,MAAM7G,QAAQ,QAAQyE,OAAO;YAC/B;YAEA,IAAIvB,6BAA6B;gBAC/Bf,QAAQ2E,MAAM,GAAG7F,QAAQ6E,KAAK,CAACC,aAAa,CAAC;YAC/C;YAEAtD,eAAexB,QAAQ2D,QAAQ,CAACD,KAAK,CAACwC,kBAAkBhF,SAAS,CAAC0C;gBAChE,MAAMK,SAA2D;oBAC/D6B,gBAAgB1H,MAAM,CAAC,EAAE8H,iBAAiB,iBAAiB,CAAC,EAAEjB,EAAE,CAACrB,KAAK8B,KAAK,EAAE9B,KAAK+B,MAAM;oBACxFI,UAAU5H,WAAW;wBACnBgH,MAAM,CAAC,EAAEe,iBAAiB,UAAU,CAAC;wBACrChF,SAAS;4BAAC0C,KAAK+B,MAAM;yBAAC;wBACtBP,gBAAgB;4BAAC1B,MAAMgB,EAAE;yBAAC;oBAC5B,GAAGW,QAAQ,CAAC;gBACd;gBAEA,IAAIjD,uBAAuB,SAAS;oBAClC6B,OAAOmC,SAAS,GAAGhI,MAAM,CAAC,EAAE8H,iBAAiB,WAAW,CAAC,EAAEjB,EAAE,CAACrB,KAAKuC,MAAM;gBAC3E;gBAEA,IAAIlE,6BAA6B;oBAC/BgC,OAAOgC,YAAY,GAAG7H,MAAM,CAAC,EAAE8H,iBAAiB,cAAc,CAAC,EAAEjB,EAAE,CACjErB,KAAKiC,MAAM,EACXjC,KAAK+B,MAAM;gBAEf;gBAEA,OAAO1B;YACT;YAEAjE,QAAQsE,MAAM,CAAC4B,iBAAiB,GAAG1E;YAEnCxB,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEiI,iBAAiB,CAAC,CAAC,GAAGjI,UAAUuD,cAAc,CAAC,EAAE+D,GAAG,EAAE,GAAM,CAAA;oBACzFI,QAAQJ,IAAI7B,OAAO;wBACjBpD,QAAQ;4BAACkB,aAAamE,MAAM;yBAAC;wBAC7BH,YAAY;4BAAC9B,MAAMgB,EAAE;yBAAC;wBACtB5B,cAAc;oBAChB;gBACF,CAAA;QACF;QAEA,IAAIrB,cAAc8C,IAAI,EAAE;YACtB,MAAM8B,sBAAuD;gBAC3D3B,IAAI/F,OAAO,MAAMgG,UAAU;gBAC3Be,OAAOrH,QAAQ;gBACfsH,QAAQ/F,iBAAiB,CAACmC,UAAU,CAAC,aAAayB,OAAO;gBACzDoC,MAAM7G,QAAQ,QAAQyE,OAAO;YAC/B;YAEA,IAAIrB,+BAA+B;gBACjCkE,oBAAoBR,MAAM,GAAG7F,QAAQ6E,KAAK,CAACC,aAAa,CAAC;YAC3D;YAEA,MAAMwB,sBAAuC,CAAC;YAC9C,MAAMC,yBAAyB,CAAC,EAAE1F,UAAU,EAAEb,QAAQwG,mBAAmB,CAAC,CAAC;YAE3E/E,cAAckB,OAAO,CAAC,CAAC8D;gBACrB,MAAMC,qBAAqB1G,QAAQ2G,OAAO,CAACC,WAAW,CAACH,WAAW,CAACxC,MAAM;gBACzE,MAAM4C,sBAAsBxH,gBAAgB;oBAC1CW;oBACAiE,QAAQyC;oBACRI,sBAAsB;gBACxB;gBACA,IAAIC,UAAU/G,QAAQgH,MAAM,KAAK,SAAS,SAAS;gBACnD,MAAMC,gCACJjH,QAAQ2G,OAAO,CAACC,WAAW,CAACF,mBAAmBQ,IAAI,CAAC,EAAEC;gBAExD,IAAIF,kCAAkC,UAAU;oBAC9CF,UAAU;gBACZ;gBACA,IAAIE,kCAAkC,QAAQ;oBAC5CF,UAAU;gBACZ;gBAEA,MAAM1C,UAAU,CAAC,EAAEoC,WAAW,EAAE,CAAC;gBAEjCJ,mBAAmB,CAAChC,QAAQ,GAAGzE,iBAAiB,CAACmH,QAAQ,CAAC,CAAC,EAAEF,oBAAoB,GAAG,CAAC;gBAErFP,mBAAmB,CAAC,CAAC,EAAEG,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC7C,OAC1CzF,WAAW;wBACTgH,MAAM,CAAC,EAAEoB,uBAAuB,CAAC,EAAEnH,YAAYqH,YAAY,GAAG,CAAC;wBAC/DvF,SAAS;4BAAC0C,IAAI,CAACS,QAAQ;yBAAC;wBACxBe,gBAAgB;4BAACpF,QAAQsE,MAAM,CAACuC,oBAAoB,CAACnC,EAAE;yBAAC;oBAC1D,GAAGW,QAAQ,CAAC;gBAEd,MAAM+B,eAAe;oBAAC/C;iBAAQ;gBAE9B,MAAMvF,SAAS,CAACuB,iBAAiBsB,oBAAoB0F,GAAG,CAACZ;gBAEzD,IAAI3H,QAAQ;oBACVsI,aAAaE,IAAI,CAAC;gBACpB;gBACA,IAAInF,+BAA+B;oBACjCiF,aAAaE,IAAI,CAAC;gBACpB;gBAEA,MAAMC,YAAYjI,eAAe;oBAC/B6F,MAAM,CAAC,EAAEoB,uBAAuB,CAAC,EAAEM,oBAAoB,GAAG,CAAC;oBAC3D7G;gBACF;gBAEAsG,mBAAmB,CAACiB,UAAU,GAAG9H,YAAY;oBAC3C0F,MAAMiC;oBACNG;oBACAzI;gBACF;YACF;YAEA8C,qBAAqB5B,QAAQ2D,QAAQ,CAACD,KAAK,CACzC6C,wBACAF,qBACA,CAACzC;gBACC,MAAMO,SAA2DL,OAAOC,OAAO,CAC7EuC,qBACAtC,MAAM,CACN,CAACC,QAAQ,CAACjB,KAAKkB,KAAK;oBAClBD,MAAM,CAACjB,IAAI,GAAGkB,KAAKN;oBACnB,OAAOK;gBACT,GACA;oBACEyB,OAAOtH,MAAM,CAAC,EAAEmI,uBAAuB,UAAU,CAAC,EAAEtB,EAAE,CAACrB,KAAK8B,KAAK;oBACjEK,UAAU5H,WAAW;wBACnBgH,MAAM,CAAC,EAAEoB,uBAAuB,UAAU,CAAC;wBAC3CrF,SAAS;4BAAC0C,KAAK+B,MAAM;yBAAC;wBACtBP,gBAAgB;4BAAC1B,MAAMgB,EAAE;yBAAC;oBAC5B,GAAGW,QAAQ,CAAC;oBACZmC,WAAWpJ,MAAM,CAAC,EAAEmI,uBAAuB,WAAW,CAAC,EAAEtB,EAAE,CAACrB,KAAK+B,MAAM;oBACvE8B,SAASrJ,MAAM,CAAC,EAAEmI,uBAAuB,SAAS,CAAC,EAAEtB,EAAE,CAACrB,KAAKgC,IAAI;gBACnE;gBAGF,IAAIzD,+BAA+B;oBACjCgC,OAAOuD,SAAS,GAAGtJ,MAAM,CAAC,EAAEmI,uBAAuB,WAAW,CAAC,EAAEtB,EAAE,CAACrB,KAAKiC,MAAM;gBACjF;gBAEA,OAAO1B;YACT;YAGFnE,QAAQsE,MAAM,CAACiC,uBAAuB,GAAG3E;YAEzC5B,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEsI,uBAAuB,CAAC,CAAC,GAAGtI,UACzD2D,oBACA,CAAC,EAAE2D,GAAG,EAAE;gBACN,MAAMpB,SAA2C;oBAC/CwB,QAAQJ,IAAI7B,OAAO;wBACjBpD,QAAQ;4BAACsB,mBAAmB+D,MAAM;yBAAC;wBACnCH,YAAY;4BAAC9B,MAAMgB,EAAE;yBAAC;wBACtB5B,cAAc;oBAChB;gBACF;gBAEArB,cAAckB,OAAO,CAAC,CAAC8D;oBACrB,MAAMkB,mBAAmBtI,gBAAgB;wBACvCW;wBACAiE,QAAQjE,QAAQ2G,OAAO,CAACC,WAAW,CAACH,WAAW,CAACxC,MAAM;wBACtD6C,sBAAsB;oBACxB;oBACA,MAAMc,eAAe,CAAC,EAAEnB,WAAW,EAAE,CAAC;oBACtCtC,MAAM,CAACyD,aAAa,GAAGrC,IAAIvF,QAAQsE,MAAM,CAACqD,iBAAiB,EAAE;wBAC3DrH,QAAQ;4BAACsB,kBAAkB,CAACgG,aAAa;yBAAC;wBAC1CpC,YAAY;4BAACxF,QAAQsE,MAAM,CAACqD,iBAAiB,CAACjD,EAAE;yBAAC;wBACjD5B,cAAc2D;oBAChB;gBACF;gBAEA,OAAOtC;YACT;QAEJ;IACF;IAEAnE,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAE4C,UAAU,CAAC,CAAC,GAAG5C,UAAUyF,OAAO,CAAC,EAAE4B,IAAI,EAAEC,GAAG,EAAE;QAC3E,MAAMpB,SAA2C,CAAC;QAElDzB,sBAAsBC,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEE,YAAY,EAAEC,MAAM,EAAE,EAAEC;YAC7D,IAAIJ,SAAS,OAAO;gBAClBuB,MAAM,CAACnB,IAAI,GAAGuC,IAAIvF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;oBACxCzC,QAAQ;wBAACoD,KAAK,CAACV,IAAI;qBAAC;oBACpBwC,YAAY;wBAACxF,QAAQsE,MAAM,CAACvB,OAAO,CAAC2B,EAAE;qBAAC;oBACvC5B,cAAcE;gBAChB;YACF;YACA,IAAIJ,SAAS,QAAQ;gBACnBuB,MAAM,CAACnB,IAAI,GAAGsC,KAAKtF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;oBAAED,cAAcA,gBAAgBE;gBAAI;YACjF;QACF;QAEA,IAAIhB,mBAAmB;YACrBmC,OAAO0D,QAAQ,GAAGvC,KAAKhE,cAAc;gBAAEwB,cAAc;YAAW;QAClE;QAEA,IAAIT,kBAAkB;YACpB8B,OAAO2D,MAAM,GAAGxC,KAAK/D,YAAY;gBAAEuB,cAAc;YAAS;QAC5D;QAEA,IAAIV,oBAAoB;YACtB+B,OAAO4D,QAAQ,GAAGzC,KAAK9D,cAAc;gBAAEsB,cAAc;YAAW;QAClE;QAEA,IAAIrB,cAAc8C,IAAI,IAAI3C,oBAAoB;YAC5CuC,OAAO6D,KAAK,GAAG1C,KAAK1D,oBAAoB;gBACtCkB,cAAc;YAChB;QACF;QAEA,OAAOqB;IACT;IAEA,OAAO;QACLlC;QACAC;QACAC;QACAC;QACAC;QACAR;IACF;AACF,EAAC;AAwCD,OAAO,MAAMS,iBAAiB,CAAC,EAC7BtC,OAAO,EACPiI,YAAY,EACZ/G,OAAO,EACPf,cAAc,EACdC,sBAAsB,EACtBC,gBAAgB,KAAK,EACrB6H,WAAW,EACX5H,MAAM,EACN6H,cAAc,EACdhH,OAAO,EACPC,cAAc,EACdC,cAAc,EACdkB,YAAY,EACZC,eAAe,EACff,aAAa,EACbI,gBAAgB,EAChBrB,oBAAoB,EACpBC,kBAAkB,EAClBC,aAAa,EACbiB,mBAAmB,EACnBZ,QAAQ,EACRC,2BAA2B,EACR;IACnB,MAAM8F,uBAAuB;IAC7B,IAAI9E,oBAAoB;IACxB,IAAIG,gCAAgC;IACpC,IAAIE,mBAAsC;IAC1C,IAAIH,4BAA4B;IAChC,IAAIE,qBAAwC;IAC5C,IAAIH,8BAA8B;IAElC,IAAImG,kBAA0B;IAC9B,IAAIlH,QAAQwD,EAAE,YAAYjG,eAAe;QACvC2J,kBAAkB;IACpB;IACA,IAAIlH,QAAQwD,EAAE,YAAYlG,kBAAkB;QAC1C4J,kBAAkB;IACpB;IACA,IAAIlH,QAAQwD,EAAE,YAAYhG,kBAAkB;QAC1C0J,kBAAkB;IACpB;IAEA9H,OAAOqC,OAAO,CAAC,CAAC0F;QACd,IAAI,UAAUA,SAASA,MAAMlD,IAAI,KAAK,MAAM;YAC1C;QACF;QACA,IAAIjG,eAAemJ,QAAQ;YACzB;QACF;QAEA,IAAIC;QACJ,IAAIC;QAEJ,IAAIC,cAActH;QAClB,IAAIuH,gBAAgBtH;QAEpB,IAAIlC,iBAAiBoJ,QAAQ;YAC3BC,aAAa,CAAC,EAAEL,gBAAgB,GAAG,EAAEI,MAAMlD,IAAI,CAAC,EAAE,KAAK,MAAM,MAAM,GAAG,EAAE/F,YACtEiJ,MAAMlD,IAAI,EACV,CAAC;YACHoD,YAAY,CAAC,EAAEL,aAAaQ,QAAQ,KAAK,QAAQ,GAAG,EAAEL,MAAMlD,IAAI,CAAC,CAAC;YAElE,yBAAyB;YACzB,2DAA2D;YAC3D,IACEnF,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,IAClCN,CAAAA,MAAMxF,SAAS,IAAIsF,cAAa,KACjCE,MAAMzF,IAAI,KAAK,WACfyF,MAAMzF,IAAI,KAAK,YACd,CAAA,AAAC,aAAayF,SAASA,MAAMO,OAAO,KAAK,QAAS,CAAE,CAAA,aAAaP,KAAI,CAAC,GACvE;gBACArG,oBAAoB;gBACpBwG,cAAcpH;gBACdqH,gBAAgBpH;YAClB;YAEA,IACE,AAACgH,CAAAA,MAAMvJ,MAAM,IAAIuJ,MAAMjK,KAAK,IAAI;gBAAC;gBAAgB;aAAS,CAACyK,QAAQ,CAACR,MAAMzF,IAAI,CAAA,KAC9E,CAAC;gBAAC;gBAAS;gBAAU;aAAQ,CAACiG,QAAQ,CAACR,MAAMzF,IAAI,KACjD,CAAE,CAAA,aAAayF,SAASA,MAAMO,OAAO,KAAK,IAAG,KAC7C,CAAE,CAAA,gBAAgBP,SAASS,MAAMC,OAAO,CAACV,MAAM5B,UAAU,CAAA,GACzD;gBACA,MAAM3H,SAASuB,kBAAkB,QAAQgI,MAAMvJ,MAAM;gBACrD,IAAIA,QAAQ;oBACV,MAAMkK,kBAAkB,CAAC,EAAEd,eAAe,GAAG,EAAEG,MAAMlD,IAAI,CAAC,CAAC;oBAC3D,IAAI,CAACnF,QAAQiJ,gBAAgB,EAAE,CAACvI,cAAc,EAAE;wBAC9CV,QAAQiJ,gBAAgB,CAACvI,cAAc,GAAG,CAAC;oBAC7C;oBACAV,QAAQiJ,gBAAgB,CAACvI,cAAc,CAAC,CAAC,EAAE4H,WAAW,IAAI,CAAC,CAAC,GAAGU;gBACjE;gBAEA,MAAMzB,YAAYjI,eAAe;oBAAE6F,MAAM,CAAC,EAAE5C,aAAa,CAAC,EAAE+F,WAAW,CAAC;oBAAEtI;gBAAQ;gBAElFyI,aAAa,CAAClB,UAAU,GAAG9H,YAAY;oBACrC0F,MAAMkD,MAAMxF,SAAS,GAAG;wBAAC0F;wBAAW;qBAAU,GAAGA;oBACjDhB;oBACAzI;gBACF;YACF;QACF;QAEA,OAAQuJ,MAAMzF,IAAI;YAChB,KAAK;gBAAS;oBACZ,MAAMsG,yBAAyBC,QAAQd,MAAMe,KAAK,EAAEC,cAAclJ;oBAElE,MAAMmJ,iBAAiBjK,gBAAgB;wBACrCW;wBACAiE,QAAQoE;wBACR7F,iBAAiBD;wBACjBgH,QAAQ,CAAC,EAAEhH,aAAa,CAAC,CAAC;wBAC1BuE;wBACA0C,oBAAoBzI;oBACtB;oBAEA,MAAMd,cAA+C;wBACnDwJ,QAAQpL,QAAQ,UAAUmF,OAAO;wBACjCuB,WAAWnF,iBAAiB,CAACwI,gBAAgB,CAAC,cAAc5E,OAAO;oBACrE;oBAEA,MAAMtD,kBAAmC;wBACvCwJ,WAAW,CAAC9F,OAASxF,MAAM,CAAC,EAAEkL,eAAe,UAAU,CAAC,EAAErE,EAAE,CAACrB,KAAK6F,MAAM;wBACxEE,aAAa,CAAC/F,OACZzF,WAAW;gCACTgH,MAAM,CAAC,EAAEmE,eAAe,aAAa,CAAC;gCACtCpI,SAAS;oCAAC0C,IAAI,CAAC,YAAY;iCAAC;gCAC5BwB,gBAAgB;oCAACpF,QAAQsE,MAAM,CAAC9B,gBAAgB,CAACkC,EAAE;iCAAC;4BACtD,GAAGW,QAAQ,CAAC;wBACduE,cAAc,CAAChG,OAASxF,MAAM,CAAC,EAAEkL,eAAe,cAAc,CAAC,EAAErE,EAAE,CAACrB,KAAKmB,SAAS;oBACpF;oBAEA,MAAM8E,cACJV,QAAQd,MAAMxF,SAAS,IAAI7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,KAC9D3H,+BACAmH;oBAEF,IAAI0B,aAAa;wBACf5J,YAAY2E,OAAO,GAAG5E,QAAQ6E,KAAK,CAACC,aAAa,CAAC,WAAWtB,OAAO;wBACpEtD,gBAAgB4J,UAAU,GAAG,CAAClG,OAC5BxF,MAAM,CAAC,EAAEkL,eAAe,WAAW,CAAC,EAAErE,EAAE,CAACrB,KAAKgB,OAAO;oBACzD;oBAEA,MAAM,EACJ3C,6BAA6B8H,8BAA8B,EAC3D7H,2BAA2B8H,4BAA4B,EACvD7H,+BAA+B8H,gCAAgC,EAC/D7H,oBAAoB8H,qBAAqB,EACzC7H,kBAAkB8H,mBAAmB,EACrCtI,kBAAkBuI,mBAAmB,EACtC,GAAGrK,WAAW;wBACbC;wBACAC;wBACAC;wBACAC,gBAAgB+I;wBAChB9I,wBAAwB;wBACxBC;wBACAC,QAAQD,gBAAgBV,SAAS0I,MAAM/H,MAAM,IAAI+H,MAAM/H,MAAM;wBAC7DC,mBAAmBkB;wBACnBjB;wBACAC;wBACAC;wBACAE,yBAAyBe;wBACzBd,WAAWyI;wBACXvI;wBACAC,6BAA6B6I;oBAC/B;oBAEA,IAAIE,gCAAgC;wBAClC9H,8BAA8B8H;oBAChC;oBAEA,IAAIE,kCAAkC;wBACpC9H,gCAAgC8H;oBAClC;oBAEA,IAAID,8BAA8B;wBAChC9H,4BAA4B8H;oBAC9B;oBAEA,IAAIG,qBAAqB;wBACvB,IAAI,CAAC9H,oBAAoB8H,wBAAwB,SAAS;4BACxD9H,mBAAmB8H;wBACrB;oBACF;oBACA,IAAID,uBAAuB;wBACzB,IAAI,CAAC9H,sBAAsB8H,0BAA0B,SAAS;4BAC5D9H,qBAAqB8H;wBACvB;oBACF;oBAEArI,iBAAiBqB,GAAG,CAACqF,WAAW;wBAC9B3F,MAAM;wBACN,wEAAwE;wBACxEC,WAAW;wBACXE,QAAQuG;oBACV;oBAEAtJ,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEqL,eAAe,CAAC,CAAC,GAAGrL,UACjD+B,QAAQsE,MAAM,CAACgF,eAAe,EAC9B,CAAC,EAAEhE,IAAI,EAAEC,GAAG,EAAE;wBACZ,MAAMpB,SAA2C;4BAC/CY,WAAWQ,IAAIvF,QAAQsE,MAAM,CAAC9B,gBAAgB,EAAE;gCAC9ClC,QAAQ;oCAACN,QAAQsE,MAAM,CAACgF,eAAe,CAACvE,SAAS;iCAAC;gCAClDS,YAAY;oCAACxF,QAAQsE,MAAM,CAAC9B,gBAAgB,CAACkC,EAAE;iCAAC;gCAChD5B,cAAcyF;4BAChB;wBACF;wBAEA,IAAIhJ,gBAAgB8I,MAAM/H,MAAM,GAAG;4BACjC6D,OAAO0D,QAAQ,GAAGvC,KAAKtF,QAAQsE,MAAM,CAAC,CAAC,EAAEgF,eAAe,EAAEtJ,QAAQyE,aAAa,CAAC,CAAC,CAAC,EAAE;gCAClF3B,cAAc;4BAChB;wBACF;wBAEAsH,oBAAoBzH,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEE,MAAM,EAAE,EAAEC;4BACxD,IAAIJ,SAAS,OAAO;gCAClB,MAAMyH,qBAAqBxH,YACvB,CAAC,EAAEyG,eAAe,EAAEtJ,QAAQyE,aAAa,CAAC,CAAC,GAC3C6E;gCACJnF,MAAM,CAACnB,IAAI,GAAGuC,IAAIvF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;oCACxCzC,QAAQ;wCAACN,QAAQsE,MAAM,CAAC+F,mBAAmB,CAACrH,IAAI;qCAAC;oCACjDwC,YAAY;wCAACxF,QAAQsE,MAAM,CAACvB,OAAO,CAAC2B,EAAE;qCAAC;oCACvC5B,cAAcE;gCAChB;4BACF;4BACA,IAAIJ,SAAS,QAAQ;gCACnBuB,MAAM,CAACnB,IAAI,GAAGsC,KAAKtF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;oCAAED,cAAcE;gCAAI;4BACjE;wBACF;wBAEA,OAAOmB;oBACT;oBAGF;gBACF;YACA,KAAK;gBAAU;oBACb,MAAM+E,yBAAyBC,QAAQd,MAAMe,KAAK,EAAEC,cAAclJ;oBAElEkI,MAAMiC,MAAM,CAAC3H,OAAO,CAAC,CAAC4H;wBACpB,MAAMC,iBAAiBnL,gBAAgB;4BACrCW;4BACAiE,QAAQsG;4BACR/H,iBAAiB9B;4BACjB6I,QAAQ,CAAC,EAAE7I,cAAc,QAAQ,CAAC;4BAClCoG;4BACA0C,oBAAoBzI;wBACtB;wBACA,IAAI,CAACf,QAAQsE,MAAM,CAACkG,eAAe,EAAE;4BACnC,MAAMvK,cAA+C;gCACnDwJ,QAAQpL,QAAQ,UAAUmF,OAAO;gCACjCuB,WAAWnF,iBAAiB,CAACa,mBAAmB,CAAC,cAAc+C,OAAO;gCACtEiH,OAAO7L,KAAK,SAAS4E,OAAO;4BAC9B;4BAEA,MAAMtD,kBAAmC;gCACvCwJ,WAAW,CAAC9F,OAASxF,MAAM,CAAC,EAAEoM,eAAe,UAAU,CAAC,EAAEvF,EAAE,CAACrB,KAAK6F,MAAM;gCACxEvE,aAAa,CAACtB,OACZzF,WAAW;wCACTgH,MAAM,CAAC,EAAEqF,eAAe,aAAa,CAAC;wCACtCtJ,SAAS;4CAAC0C,KAAKmB,SAAS;yCAAC;wCACzBK,gBAAgB;4CAACpF,QAAQsE,MAAM,CAAC5D,cAAc,CAACgE,EAAE;yCAAC;oCACpD,GAAGW,QAAQ,CAAC;gCACduE,cAAc,CAAChG,OAASxF,MAAM,CAAC,EAAEoM,eAAe,cAAc,CAAC,EAAEvF,EAAE,CAACrB,KAAKmB,SAAS;gCAClF2F,UAAU,CAAC9G,OAASxF,MAAM,CAAC,EAAEoM,eAAe,SAAS,CAAC,EAAEvF,EAAE,CAACrB,KAAK6G,KAAK;4BACvE;4BAEA,MAAMZ,cACJV,QAAQd,MAAMxF,SAAS,IAAI7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,KAC9D3H,+BACAmH;4BAEF,IAAI0B,aAAa;gCACf5J,YAAY2E,OAAO,GAAG5E,QAAQ6E,KAAK,CAACC,aAAa,CAAC,WAAWtB,OAAO;gCACpEtD,gBAAgB4J,UAAU,GAAG,CAAClG,OAC5BxF,MAAM,CAAC,EAAEoM,eAAe,WAAW,CAAC,EAAEvF,EAAE,CAACrB,KAAKgB,OAAO;4BACzD;4BAEA,MAAM,EACJ3C,6BAA6B8H,8BAA8B,EAC3D7H,2BAA2B8H,4BAA4B,EACvD7H,+BAA+B8H,gCAAgC,EAC/D7H,oBAAoB8H,qBAAqB,EACzC7H,kBAAkB8H,mBAAmB,EACrCtI,kBAAkBuI,mBAAmB,EACtC,GAAGrK,WAAW;gCACbC;gCACAC;gCACAC;gCACAC,gBAAgB+I;gCAChB9I,wBAAwB;gCACxBC;gCACAC,QAAQD,gBAAgBV,SAAS4K,MAAMjK,MAAM,IAAIiK,MAAMjK,MAAM;gCAC7DC,mBAAmBkB;gCACnBjB;gCACAC;gCACAC;gCACAE,yBAAyBe;gCACzBd,WAAW2J;gCACXzJ;gCACAC,6BAA6B6I;4BAC/B;4BAEA,IAAIE,gCAAgC;gCAClC9H,8BAA8B8H;4BAChC;4BAEA,IAAIE,kCAAkC;gCACpC9H,gCAAgC8H;4BAClC;4BAEA,IAAID,8BAA8B;gCAChC9H,4BAA4B8H;4BAC9B;4BAEA,IAAIG,qBAAqB;gCACvB,IAAI,CAAC9H,oBAAoB8H,wBAAwB,SAAS;oCACxD9H,mBAAmB8H;gCACrB;4BACF;4BAEA,IAAID,uBAAuB;gCACzB,IAAI,CAAC9H,sBAAsB8H,0BAA0B,SAAS;oCAC5D9H,qBAAqB8H;gCACvB;4BACF;4BAEAlK,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEuM,eAAe,CAAC,CAAC,GAAGvM,UACjD+B,QAAQsE,MAAM,CAACkG,eAAe,EAC9B,CAAC,EAAElF,IAAI,EAAEC,GAAG,EAAE;gCACZ,MAAMpB,SAA2C;oCAC/CY,WAAWQ,IAAIvF,QAAQsE,MAAM,CAAC5D,cAAc,EAAE;wCAC5CJ,QAAQ;4CAACN,QAAQsE,MAAM,CAACkG,eAAe,CAACzF,SAAS;yCAAC;wCAClDS,YAAY;4CAACxF,QAAQsE,MAAM,CAAC5D,cAAc,CAACgE,EAAE;yCAAC;wCAC9C5B,cAAc,CAAC,QAAQ,EAAEyH,MAAMrD,IAAI,CAAC,CAAC;oCACvC;gCACF;gCAEA,IAAI3H,gBAAgBgL,MAAMjK,MAAM,GAAG;oCACjC6D,OAAO0D,QAAQ,GAAGvC,KAChBtF,QAAQsE,MAAM,CAAC,CAAC,EAAEkG,eAAe,EAAExK,QAAQyE,aAAa,CAAC,CAAC,CAAC,EAC3D;wCAAE3B,cAAc;oCAAW;gCAE/B;gCAEAsH,oBAAoBzH,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEE,MAAM,EAAE,EAAEC;oCACxD,IAAIJ,SAAS,OAAO;wCAClB,MAAM+H,qBAAqB9H,YACvB,CAAC,EAAE2H,eAAe,EAAExK,QAAQyE,aAAa,CAAC,CAAC,GAC3C+F;wCACJrG,MAAM,CAACnB,IAAI,GAAGuC,IAAIvF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;4CACxCzC,QAAQ;gDAACN,QAAQsE,MAAM,CAACqG,mBAAmB,CAAC3H,IAAI;6CAAC;4CACjDwC,YAAY;gDAACxF,QAAQsE,MAAM,CAACvB,OAAO,CAAC2B,EAAE;6CAAC;4CACvC5B,cAAcE;wCAChB;oCACF;oCACA,IAAIJ,SAAS,QAAQ;wCACnBuB,MAAM,CAACnB,IAAI,GAAGsC,KAAKtF,QAAQsE,MAAM,CAACvB,OAAO,EAAE;4CAAED,cAAcE;wCAAI;oCACjE;gCACF;gCAEA,OAAOmB;4BACT;wBAEJ,OAAO,IAAIyG,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBAAgB,CAAC/J,UAAU;4BAC7DvB,iCAAiC;gCAC/B+K;gCACA1H,WAAWwF,MAAMxF,SAAS;gCAC1BnC;gCACAgD,OAAO1D,QAAQsE,MAAM,CAACkG,eAAe;gCACrCO,cAAc/K,QAAQsE,MAAM,CAAC,CAAC,EAAEkG,eAAe,EAAExK,QAAQyE,aAAa,CAAC,CAAC,CAAC;4BAC3E;wBACF;wBACA,mHAAmH;wBACnHjE,qBAAqB0C,GAAG,CAAC,CAAC,QAAQ,EAAEqH,MAAMrD,IAAI,CAAC,CAAC,EAAE;4BAChDtE,MAAM;4BACN,+CAA+C;4BAC/CC,WAAW;4BACXE,QAAQyH;wBACV;oBACF;oBAEA;gBACF;YACA,KAAK;gBAAY;oBACfhC,WAAW,CAACD,UAAU,GAAGzI,YAAY5B,QAAQoK,aAAaD;oBAC1D;gBACF;YACA,KAAK;YAEL,KAAK;YAEL,KAAK;gBAAY;oBACfG,WAAW,CAACD,UAAU,GAAGzI,YAAYf,QAAQuJ,aAAaD;oBAC1D;gBACF;YACA,KAAK;YAEL,KAAK;gBAAO;oBACV,MAAMa,yBAAyBC,QAAQd,MAAMe,KAAK,EAAEC,cAAclJ;oBAClE,MAAM,EACJ6B,mBAAmBgJ,oBAAoB,EACvC/I,6BAA6BgJ,8BAA8B,EAC3D/I,2BAA2BgJ,4BAA4B,EACvD/I,+BAA+BgJ,gCAAgC,EAC/D/I,oBAAoBgJ,qBAAqB,EACzC/I,kBAAkBgJ,mBAAmB,EACtC,GAAG/I,eAAe;wBACjBtC;wBACAiI;wBACA/G;wBACAf,gBAAgB+I;wBAChB7I;wBACA6H;wBACA5H,QAAQ+H,MAAM/H,MAAM;wBACpB6H;wBACAhH;wBACAC;wBACAC;wBACAkB;wBACAC;wBACAf;wBACAI;wBACArB;wBACAC;wBACAC;wBACAiB;wBACAZ;wBACAC;oBACF;oBAEA,IAAIgK,sBAAsB;wBACxBhJ,oBAAoB;oBACtB;oBACA,IAAImJ,kCAAkC;wBACpChJ,gCAAgC;oBAClC;oBACA,IAAIkJ,qBAAqB;wBACvBhJ,mBAAmB;oBACrB;oBACA,IAAI6I,8BAA8B;wBAChChJ,4BAA4B;oBAC9B;oBACA,IAAIkJ,uBAAuB;wBACzBhJ,qBAAqB;oBACvB;oBACA,IAAI6I,gCAAgC;wBAClChJ,8BAA8B;oBAChC;oBACA;gBACF;YAEA,KAAK;gBAAQ;oBACXuG,WAAW,CAACD,UAAU,GAAGzI,YACvBjB,UAAUyJ,YAAY;wBACpBlF,MAAM;wBACNC,WAAW;wBACXC,cAAc;oBAChB,IACA+E;oBAEF;gBACF;YAEA,KAAK;YACL,KAAK;gBAAO;oBACV,IAAI,CAAE,CAAA,UAAUA,KAAI,GAAI;wBACtB,MAAM,EACJrG,mBAAmBsJ,sBAAsB,EACzCrJ,6BAA6BsJ,gCAAgC,EAC7DrJ,2BAA2BsJ,8BAA8B,EACzDrJ,+BAA+BsJ,kCAAkC,EACjErJ,oBAAoBsJ,uBAAuB,EAC3CrJ,kBAAkBsJ,qBAAqB,EACxC,GAAGrJ,eAAe;4BACjBtC;4BACAiI;4BACA/G;4BACAf;4BACAE;4BACA6H;4BACA5H,QAAQ+H,MAAM/H,MAAM;4BACpB6H;4BACAhH;4BACAC;4BACAC;4BACAkB;4BACAC;4BACAf;4BACAI;4BACArB;4BACAC;4BACAC;4BACAiB;4BACAZ;4BACAC;wBACF;wBAEA,IAAIsK,wBAAwB;4BAC1BtJ,oBAAoB;wBACtB;wBACA,IAAIyJ,oCAAoC;4BACtCtJ,gCAAgC;wBAClC;wBACA,IAAIwJ,uBAAuB;4BACzBtJ,mBAAmB;wBACrB;wBACA,IAAImJ,gCAAgC;4BAClCtJ,4BAA4B;wBAC9B;wBACA,IAAIwJ,yBAAyB;4BAC3BtJ,qBAAqB;wBACvB;wBACA,IAAImJ,kCAAkC;4BACpCtJ,8BAA8B;wBAChC;wBACA;oBACF;oBAEA,MAAMiH,yBAAyBC,QAAQd,MAAMe,KAAK,EAAEC,cAAclJ;oBAElE,MAAM,EACJ6B,mBAAmBsJ,sBAAsB,EACzCrJ,6BAA6BsJ,gCAAgC,EAC7DrJ,2BAA2BsJ,8BAA8B,EACzDrJ,+BAA+BsJ,kCAAkC,EACjErJ,oBAAoBsJ,uBAAuB,EAC3CrJ,kBAAkBsJ,qBAAqB,EACxC,GAAGrJ,eAAe;wBACjBtC;wBACAiI,cAAc,CAAC,EAAEK,WAAW,CAAC,CAAC;wBAC9BpH;wBACAf,gBAAgB+I;wBAChB7I;wBACA6H,aAAa,CAAC,EAAEK,UAAU,CAAC,CAAC;wBAC5BjI,QAAQ+H,MAAM/H,MAAM;wBACpB6H,gBAAgBE,MAAMxF,SAAS;wBAC/B1B;wBACAC;wBACAC;wBACAkB,cAAc,CAAC,EAAEC,gBAAgB,CAAC,EAAE8F,WAAW,CAAC;wBAChD9F;wBACAf;wBACAI;wBACArB;wBACAC;wBACAC;wBACAiB;wBACAZ;wBACAC,6BAA6BA,+BAA+BqH,MAAMxF,SAAS;oBAC7E;oBAEA,IAAIyI,wBAAwB;wBAC1BtJ,oBAAoB;oBACtB;oBACA,IAAIyJ,oCAAoC;wBACtCtJ,gCAAgC;oBAClC;oBACA,IAAIwJ,uBAAuB;wBACzBtJ,mBAAmB;oBACrB;oBACA,IAAImJ,gCAAgC;wBAClCtJ,4BAA4B;oBAC9B;oBACA,IAAIwJ,yBAAyB;wBAC3BtJ,qBAAqB;oBACvB;oBACA,IAAImJ,kCAAkC;wBACpCtJ,8BAA8B;oBAChC;oBACA;gBACF;YAEA,KAAK;YAEL,KAAK;gBAAY;oBACfuG,WAAW,CAACD,UAAU,GAAGzI,YAAYxB,MAAMgK,aAAaD;oBACxD;gBACF;YAEA,KAAK;gBAAU;oBACb,IAAIA,MAAMO,OAAO,EAAE;wBACjB,MAAMiB,cACJV,QAAQd,MAAMxF,SAAS,IAAI7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,KAC9D3H,+BACAmH;wBAEF,IAAI0B,aAAa;4BACf5H,8BAA8B;wBAChC;wBAEA,IAAIoG,MAAMjK,KAAK,EAAE;4BACfgE,qBAAqB;wBACvB,OAAO,IAAI,CAACA,oBAAoB;4BAC9BA,qBAAqB;wBACvB;wBAEA,IAAIiG,MAAMvJ,MAAM,EAAE;4BAChB,MAAM,IAAIE,qBACR;wBAEJ;oBACF,OAAO;wBACLwJ,WAAW,CAACD,UAAU,GAAGzI,YAAYvB,QAAQ+J,aAAaD;oBAC5D;oBACA;gBACF;YAEA,KAAK;gBAAS;oBACZG,WAAW,CAACD,UAAU,GAAGzI,YAAYJ,eAAe4I,aAAaD;oBACjE,IAAI,CAACrI,QAAQ4L,UAAU,CAACC,OAAO,EAAE;wBAC/B7L,QAAQ4L,UAAU,CAACC,OAAO,GAAG;oBAC/B;oBACA;gBACF;YACA,KAAK;YAEL,KAAK;gBAAU;oBACb,MAAMC,WAAWzM,gBAAgB;wBAC/BW;wBACAiE,QAAQoE;wBACR7F,iBAAiBD;wBACjBgH,QAAQ,CAAC,KAAK,EAAEhH,aAAa,CAAC,CAAC;wBAC/BQ,QAAQ;wBACR+D;oBACF;oBAEA9G,QAAQ6E,KAAK,CAACiH,SAAS,GAAG9L,QAAQ2D,QAAQ,CAACoI,IAAI,CAC7CD,UACAzD,MAAM2D,OAAO,CAAC/I,GAAG,CAAC,CAACgJ;wBACjB,IAAI9M,eAAe8M,SAAS;4BAC1B,OAAOA,OAAOC,KAAK;wBACrB;wBAEA,OAAOD;oBACT;oBAGF,IAAI5D,MAAMzF,IAAI,KAAK,YAAYyF,MAAMO,OAAO,EAAE;wBAC5C,MAAMuD,kBAAkB9M,gBAAgB;4BACtCW;4BACAiE,QAAQoE;4BACR7F,iBAAiBD;4BACjBgH,QAAQ,CAAC,EAAEhH,aAAa,CAAC,CAAC;4BAC1BuE;4BACA0C,oBAAoBzI;wBACtB;wBACA,MAAMd,cAA+C;4BACnDyF,OAAOrH,QAAQ,SAASmF,OAAO;4BAC/BmC,QAAQ/F,iBAAiB,CAACwI,gBAAgB,CAAC,aAAa5E,OAAO;4BAC/D0I,OAAOlM,QAAQ6E,KAAK,CAACiH,SAAS,CAAC;wBACjC;wBAEA,MAAM5L,kBAAmC;4BACvCkM,UAAU,CAACxI,OAASxF,MAAM,CAAC,EAAE+N,gBAAgB,UAAU,CAAC,EAAElH,EAAE,CAACrB,KAAK8B,KAAK;4BACvEK,UAAU,CAACnC,OACTzF,WAAW;oCACTgH,MAAM,CAAC,EAAEgH,gBAAgB,UAAU,CAAC;oCACpCjL,SAAS;wCAAC0C,KAAK+B,MAAM;qCAAC;oCACtBP,gBAAgB;wCAACpF,QAAQsE,MAAM,CAAC9B,gBAAgB,CAACkC,EAAE;qCAAC;gCACtD,GAAGW,QAAQ,CAAC;4BACdmC,WAAW,CAAC5D,OAASxF,MAAM,CAAC,EAAE+N,gBAAgB,WAAW,CAAC,EAAElH,EAAE,CAACrB,KAAK+B,MAAM;wBAC5E;wBAEA,MAAMkE,cACJV,QAAQd,MAAMxF,SAAS,IAAI7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,KAC9D3H,+BACAmH;wBAEF,IAAI0B,aAAa;4BACf5J,YAAY4F,MAAM,GAAG7F,QAAQ6E,KAAK,CAACC,aAAa,CAAC,UAAUtB,OAAO;4BAClEtD,gBAAgBwH,SAAS,GAAG,CAAC9D,OAC3BxF,MAAM,CAAC,EAAE+N,gBAAgB,WAAW,CAAC,EAAElH,EAAE,CAACrB,KAAKiC,MAAM;wBACzD;wBAEA,IAAIwC,MAAMjK,KAAK,EAAE;4BACf8B,gBAAgBgM,KAAK,GAAG,CAACtI,OAASxF,MAAM,CAAC,EAAE+N,gBAAgB,UAAU,CAAC,EAAElH,EAAE,CAACrB,KAAKsI,KAAK;wBACvF;wBAEAnM,WAAW;4BACTC;4BACAC;4BACAC;4BACAC;4BACAE;4BACAC,QAAQ,EAAE;4BACVI;4BACAG,WAAWsL;4BACXpL;wBACF;wBAEAc,iBAAiBqB,GAAG,CAACqF,WAAW;4BAC9B3F,MAAM;4BACN,yEAAyE;4BACzEC,WAAW;4BACXE,QAAQoJ;wBACV;wBAEAnM,QAAQ/B,SAAS,CAAC,CAAC,UAAU,EAAEkO,gBAAgB,CAAC,CAAC,GAAGlO,UAClD+B,QAAQsE,MAAM,CAAC6H,gBAAgB,EAC/B,CAAC,EAAE5G,GAAG,EAAE,GAAM,CAAA;gCACZI,QAAQJ,IAAIvF,QAAQsE,MAAM,CAAC9B,gBAAgB,EAAE;oCAC3ClC,QAAQ;wCAACN,QAAQsE,MAAM,CAAC6H,gBAAgB,CAACxG,MAAM;qCAAC;oCAChDH,YAAY;wCAACxF,QAAQsE,MAAM,CAAC9B,gBAAgB,CAACkC,EAAE;qCAAC;oCAChD5B,cAAcyF;gCAChB;4BACF,CAAA;oBAEJ,OAAO;wBACLC,WAAW,CAACD,UAAU,GAAGzI,YAAYE,QAAQ6E,KAAK,CAACiH,SAAS,CAACxD,aAAaD;oBAC5E;oBACA;gBACF;YAEA,KAAK;YACL,KAAK;gBACH,IAAIS,MAAMC,OAAO,CAACV,MAAM5B,UAAU,GAAG;oBACnC4B,MAAM5B,UAAU,CAAC9D,OAAO,CAAC,CAAC0J;wBACxB5K,cAAc6K,GAAG,CAACD;wBAClB,IAAIhE,MAAMvJ,MAAM,IAAI,CAACuB,iBAAiB,CAACD,wBAAwB;4BAC7DuB,oBAAoB2K,GAAG,CAACD;wBAC1B;oBACF;gBACF,OAAO,IAAIhE,MAAMO,OAAO,EAAE;oBACxBnH,cAAc6K,GAAG,CAACjE,MAAM5B,UAAU;oBAClC,IAAI4B,MAAMvJ,MAAM,IAAI,CAACuB,iBAAiB,CAACD,wBAAwB;wBAC7DuB,oBAAoB2K,GAAG,CAACjE,MAAM5B,UAAU;oBAC1C;gBACF,OAAO;oBACL,kGAAkG;oBAClG,MAAMC,qBAAqB1G,QAAQ2G,OAAO,CAACC,WAAW,CAACyB,MAAM5B,UAAU,CAAC,CAACxC,MAAM;oBAE/E,MAAMpD,YAAYb,QAAQuM,YAAY,CAACC,GAAG,CAACpN,YAAYiJ,MAAM5B,UAAU;oBAEvE,4CAA4C;oBAC5C,IAAIM,UAAU/G,QAAQgH,MAAM,KAAK,SAAS,SAAS;oBACnD,MAAMyF,4BAA4B/F,mBAAmBpG,MAAM,CAACoM,IAAI,CAC9D,CAACrE,QAAUpJ,iBAAiBoJ,UAAUA,MAAMlD,IAAI,KAAK;oBAEvD,IAAIsH,2BAA2B7J,SAAS,UAAU;wBAChDmE,UAAU;oBACZ;oBACA,IAAI0F,2BAA2B7J,SAAS,QAAQ;wBAC9CmE,UAAU;oBACZ;oBAEA,gFAAgF;oBAChFyB,WAAW,CAACD,UAAU,GAAG3I,iBAAiB,CAACmH,QAAQ,CAAC,CAAC,EAAEuB,WAAW,GAAG,CAAC,EAAE9C,UAAU,CAChF,IAAMxF,QAAQsE,MAAM,CAACzD,UAAU,CAAC6D,EAAE,EAClC;wBAAEW,UAAU;oBAAW;oBAGzB,4BAA4B;oBAC5BxD,iBAAiBqB,GAAG,CAACqF,WAAW;wBAC9B3F,MAAM;wBACNC,WAAW7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,IAAKN,CAAAA,MAAMxF,SAAS,IAAIsF,cAAa;wBACnFpF,QAAQlC;oBACV;oBAEA,gCAAgC;oBAChC,IAAI,CAACV,kBAAkBkI,MAAMsE,QAAQ,IAAI,CAACtE,MAAMe,KAAK,EAAEC,WAAW;wBAChEb,WAAW,CAACD,UAAU,CAAC/E,OAAO;oBAChC;oBACA;gBACF;gBAEA,IACE2F,QAAQd,MAAMxF,SAAS,IAAI7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,KAC9D3H,6BACA;oBACAmB,gCAAgC;gBAClC;gBAEA;YAEF,KAAK;gBAAQ;oBACX,MAAM+G,yBAAyBC,QAAQd,MAAMe,KAAK,EAAEC,cAAclJ;oBAElE,MAAM,EACJ6B,mBAAmB4K,oBAAoB,EACvC3K,6BAA6B4K,8BAA8B,EAC3D3K,2BAA2B4K,4BAA4B,EACvD3K,+BAA+B4K,gCAAgC,EAC/D3K,oBAAoB4K,qBAAqB,EACzC3K,kBAAkB4K,mBAAmB,EACtC,GAAG3K,eAAe;wBACjBtC;wBACAiI;wBACA/G;wBACAf,gBAAgB+I;wBAChB7I;wBACA6H;wBACA5H,QAAQ+H,MAAM6E,IAAI,CAACjK,GAAG,CAAC,CAACkK,MAAS,CAAA;gCAAE,GAAGA,GAAG;gCAAEvK,MAAM;4BAAM,CAAA;wBACvDuF;wBACAhH;wBACAC;wBACAC;wBACAkB;wBACAC;wBACAf;wBACAI;wBACArB;wBACAC;wBACAC;wBACAiB;wBACAZ;wBACAC;oBACF;oBAEA,IAAI4L,sBAAsB;wBACxB5K,oBAAoB;oBACtB;oBACA,IAAI+K,kCAAkC;wBACpC5K,gCAAgC;oBAClC;oBACA,IAAI8K,qBAAqB;wBACvB5K,mBAAmB;oBACrB;oBACA,IAAIyK,8BAA8B;wBAChC5K,4BAA4B;oBAC9B;oBACA,IAAI8K,uBAAuB;wBACzB5K,qBAAqB;oBACvB;oBACA,IAAIyK,gCAAgC;wBAClC5K,8BAA8B;oBAChC;oBACA;gBACF;YACA,KAAK;gBAAQ;oBACX,IAAIoG,MAAMO,OAAO,EAAE;wBACjB,MAAMiB,cACJV,QAAQd,MAAMxF,SAAS,IAAI7C,QAAQ2G,OAAO,CAAC1C,MAAM,CAAC0E,YAAY,KAC9D3H,+BACAmH;wBAEF,IAAI0B,aAAa;4BACf3H,4BAA4B;wBAC9B;wBAEA,IAAImG,MAAMjK,KAAK,EAAE;4BACfiE,mBAAmB;wBACrB,OAAO,IAAI,CAACA,kBAAkB;4BAC5BA,mBAAmB;wBACrB;wBAEA,IAAIgG,MAAMvJ,MAAM,EAAE;4BAChB,MAAM,IAAIE,qBACR;wBAEJ;oBACF,OAAO;wBACLwJ,WAAW,CAACD,UAAU,GAAGzI,YAAYf,QAAQuJ,aAAaD;oBAC5D;oBACA;gBACF;YAEA;gBACE;QACJ;QAEA,MAAMgB,YAAYhB,MAAMe,KAAK,IAAIf,MAAMe,KAAK,CAACC,SAAS;QAEtD,IACE,CAAClJ,kBACDqI,WAAW,CAACD,UAAU,IACtB,cAAcF,SACdA,MAAMsE,QAAQ,IACd,CAACtD,WACD;YACAb,WAAW,CAACD,UAAU,CAAC/E,OAAO;QAChC;IACF;IAEA,OAAO;QACLxB;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;AACF,EAAC"}
|
|
@@ -1,42 +1,2 @@
|
|
|
1
|
-
import type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core';
|
|
2
|
-
import type { Field, TabAsField } from 'payload';
|
|
3
|
-
import type { BasePostgresAdapter, GenericColumns, RelationMap } from '../types.js';
|
|
4
|
-
type Args = {
|
|
5
|
-
adapter: BasePostgresAdapter;
|
|
6
|
-
columnPrefix?: string;
|
|
7
|
-
columns: Record<string, PgColumnBuilder>;
|
|
8
|
-
disableNotNull: boolean;
|
|
9
|
-
disableRelsTableUnique?: boolean;
|
|
10
|
-
disableUnique?: boolean;
|
|
11
|
-
fieldPrefix?: string;
|
|
12
|
-
fields: (Field | TabAsField)[];
|
|
13
|
-
forceLocalized?: boolean;
|
|
14
|
-
indexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
|
|
15
|
-
localesColumns: Record<string, PgColumnBuilder>;
|
|
16
|
-
localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
|
|
17
|
-
newTableName: string;
|
|
18
|
-
parentTableName: string;
|
|
19
|
-
relationships: Set<string>;
|
|
20
|
-
relationsToBuild: RelationMap;
|
|
21
|
-
rootRelationsToBuild?: RelationMap;
|
|
22
|
-
rootTableIDColType: string;
|
|
23
|
-
rootTableName: string;
|
|
24
|
-
uniqueRelationships: Set<string>;
|
|
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
|
-
hasLocalizedField: boolean;
|
|
34
|
-
hasLocalizedManyNumberField: boolean;
|
|
35
|
-
hasLocalizedManyTextField: boolean;
|
|
36
|
-
hasLocalizedRelationshipField: boolean;
|
|
37
|
-
hasManyNumberField: 'index' | boolean;
|
|
38
|
-
hasManyTextField: 'index' | boolean;
|
|
39
|
-
};
|
|
40
|
-
export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
|
|
41
1
|
export {};
|
|
42
2
|
//# sourceMappingURL=traverseFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":""}
|