rake-db 2.8.21 → 2.8.23

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/tableMethods.ts","../src/errors.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createView.ts","../src/migration/migration.ts","../src/migration/manageMigratedVersions.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/pull/dbStructure.ts","../src/pull/structureToAst.ts","../src/pull/astToMigration.ts","../src/pull/pull.ts","../src/commands/recurrent.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n columnTypes as defaultColumnTypes,\n DbResult,\n DefaultColumnTypes,\n EnumColumn,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport { ColumnTypesBase, getCallerFilePath, singleQuote } from 'orchid-core';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\nimport prompts from 'prompts';\nimport { TableQuery } from './migration/createTable';\n\ntype Db = DbResult<DefaultColumnTypes>;\n\ntype BaseTable<CT extends ColumnTypesBase> = {\n name: string;\n filePath: string;\n nowSQL?: string;\n\n new (): {\n columnTypes: CT;\n snakeCase?: boolean;\n };\n};\n\nexport type InputRakeDbConfig<CT extends ColumnTypesBase> = Partial<\n Omit<RakeDbConfig<CT>, 'columnTypes'>\n> &\n (\n | {\n columnTypes?: CT | ((t: DefaultColumnTypes) => CT);\n }\n | {\n baseTable?: BaseTable<CT>;\n }\n );\n\nexport type RakeDbConfig<CT extends ColumnTypesBase = DefaultColumnTypes> = {\n columnTypes: CT;\n basePath: string;\n dbScript: string;\n migrationsPath: string;\n recurrentPath: string;\n migrationsTable: string;\n snakeCase: boolean;\n commands: Record<\n string,\n (\n options: AdapterOptions[],\n config: RakeDbConfig<CT>,\n args: string[],\n ) => Promise<void>\n >;\n import(path: string): Promise<void>;\n noPrimaryKey?: NoPrimaryKeyOption;\n baseTable?: BaseTable<CT>;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n beforeMigrate?(db: Db): Promise<void>;\n afterMigrate?(db: Db): Promise<void>;\n beforeRollback?(db: Db): Promise<void>;\n afterRollback?(db: Db): Promise<void>;\n} & QueryLogOptions;\n\nexport type AppCodeUpdaterParams = {\n options: AdapterOptions;\n basePath: string;\n cache: object;\n logger: QueryLogOptions['logger'];\n baseTable: { filePath: string; name: string };\n};\n\nexport type AppCodeUpdater = {\n process(params: AppCodeUpdaterParams & { ast: RakeDbAst }): Promise<void>;\n afterAll(params: AppCodeUpdaterParams): Promise<void>;\n};\n\nexport const migrationConfigDefaults: Omit<\n RakeDbConfig,\n 'basePath' | 'dbScript' | 'columnTypes' | 'recurrentPath'\n> = {\n migrationsPath: path.join('src', 'db', 'migrations'),\n migrationsTable: 'schemaMigrations',\n snakeCase: false,\n commands: {},\n import: (path: string) => {\n return import(path).catch((err) => {\n if (err.code === 'ERR_UNKNOWN_FILE_EXTENSION') {\n require(path);\n } else {\n throw err;\n }\n });\n },\n log: true,\n logger: console,\n useCodeUpdater: true,\n};\n\nexport const processRakeDbConfig = <CT extends ColumnTypesBase>(\n config: InputRakeDbConfig<CT>,\n): RakeDbConfig<CT> => {\n const result = { ...migrationConfigDefaults, ...config } as RakeDbConfig<CT>;\n if (!result.recurrentPath)\n result.recurrentPath = path.join(result.migrationsPath, 'recurrent');\n\n if (\n config.appCodeUpdater &&\n (!('baseTable' in config) || !config.baseTable)\n ) {\n throw new Error(\n '`baseTable` option is required in `rakeDb` for `appCodeUpdater`',\n );\n }\n\n if (!result.log) {\n delete result.logger;\n }\n\n if (!result.basePath || !result.dbScript) {\n const filePath = getCallerFilePath();\n if (!filePath) {\n throw new Error(\n 'Failed to determine path to db script. Please set basePath option of rakeDb',\n );\n }\n\n result.basePath = path.dirname(filePath);\n result.dbScript = path.basename(filePath);\n }\n\n if (!path.isAbsolute(result.migrationsPath)) {\n result.migrationsPath = path.resolve(\n result.basePath,\n result.migrationsPath,\n );\n }\n\n if (!path.isAbsolute(result.recurrentPath)) {\n result.recurrentPath = path.resolve(result.basePath, result.recurrentPath);\n }\n\n if ('baseTable' in config) {\n const proto = config.baseTable?.prototype;\n result.columnTypes = proto.columnTypes || defaultColumnTypes;\n if (proto.snakeCase) result.snakeCase = true;\n } else {\n result.columnTypes = (('columnTypes' in config &&\n (typeof config.columnTypes === 'function'\n ? config.columnTypes(defaultColumnTypes)\n : config.columnTypes)) ||\n defaultColumnTypes) as CT;\n }\n\n return result as RakeDbConfig<CT>;\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n create?: boolean,\n): Promise<AdapterOptions | undefined> => {\n const confirm = await prompts([\n {\n message: `Would you like to share admin credentials to ${\n create ? 'create' : 'drop'\n } a database`,\n type: 'confirm',\n name: 'confirm',\n initial: true,\n },\n ]);\n\n if (!confirm.confirm) {\n return;\n }\n\n const values = await prompts([\n {\n message: 'Enter admin user:',\n type: 'text',\n name: 'user',\n initial: 'postgres',\n min: 1,\n },\n {\n message: 'Enter admin password:',\n type: 'password',\n name: 'password',\n },\n ]);\n\n return setAdapterOptions(options, {\n ...values,\n password: values.password || undefined,\n });\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: Pick<RakeDbConfig, 'migrationsTable' | 'logger'>,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteWithSchema({\n name: config.migrationsTable,\n })} ( version TEXT NOT NULL )`,\n );\n config.logger?.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n config.logger?.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files.filter((file) => path.basename(file).includes('.'))).map(\n (file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.resolve(migrationsPath, file),\n version: timestampMatch[1],\n };\n },\n );\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteWithSchema = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return schema ? `\"${schema}\".\"${name}\"` : `\"${name}\"`;\n};\n\nexport const getSchemaAndTableFromName = (\n name: string,\n): [string | undefined, string] => {\n const index = name.indexOf('.');\n return index !== -1\n ? [name.slice(0, index), name.slice(index + 1)]\n : [undefined, name];\n};\n\nexport const quoteSchemaTable = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return singleQuote(schema ? `${schema}.${name}` : name);\n};\n\nexport const makePopulateEnumQuery = (item: EnumColumn): TableQuery => {\n const [schema, name] = getSchemaAndTableFromName(item.enumName);\n return {\n text: `SELECT unnest(enum_range(NULL::${quoteWithSchema({\n schema,\n name,\n })}))::text`,\n then(result) {\n // populate empty options array with values from db\n item.options.push(...result.rows.map(([value]) => value));\n },\n };\n};\n","import { Migration } from './migration';\nimport { ColumnTypesBase } from 'orchid-core';\n\nlet currentChanges: ChangeCallback[] = [];\n\nexport type ChangeCallback<CT extends ColumnTypesBase = ColumnTypesBase> = (\n db: Migration<CT>,\n up: boolean,\n) => Promise<void>;\n\nexport const clearChanges = () => {\n currentChanges = [];\n};\n\nexport const getCurrentChanges = () => currentChanges;\nexport const pushChange = (fn: ChangeCallback) => currentChanges.push(fn);\n","import { ColumnType, ForeignKeyTable, getRaw, quote, TableData } from 'pqb';\nimport { isRaw, RawExpression, Sql, toArray, toSnakeCase } from 'orchid-core';\nimport { ColumnComment } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinColumns,\n quoteWithSchema,\n} from '../common';\n\nexport const columnTypeToSql = (item: ColumnType) => {\n return item.data.isOfCustomType ? `\"${item.toSQL()}\"` : item.toSQL();\n};\n\nexport const getColumnName = (\n item: { data: { name?: string } },\n key: string,\n snakeCase: boolean | undefined,\n) => {\n return item.data.name || (snakeCase ? toSnakeCase(key) : key);\n};\n\nexport const columnToSql = (\n name: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n snakeCase: boolean | undefined,\n): string => {\n const line = [`\"${name}\" ${columnTypeToSql(item)}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.data.identity) {\n line.push(identityToSql(item.data.identity));\n }\n\n if (item.data.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.data.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.check) {\n line.push(checkToSql(item.data.check, values));\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKeys } = item.data;\n if (foreignKeys) {\n for (const foreignKey of foreignKeys) {\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(\n referencesToSql(\n {\n columns: foreignKey.columns,\n fnOrTable: 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n foreignColumns: foreignKey.columns,\n options: foreignKey,\n },\n snakeCase,\n ),\n );\n }\n }\n\n return line.join(' ');\n};\n\nexport const identityToSql = (identity: TableData.Identity) => {\n const options = sequenceOptionsToSql(identity);\n return `GENERATED ${identity.always ? 'ALWAYS' : 'BY DEFAULT'} AS IDENTITY${\n options ? ` (${options})` : ''\n }`;\n};\n\nconst sequenceOptionsToSql = (item: TableData.SequenceOptions) => {\n const line: string[] = [];\n if (item.dataType) line.push(`AS ${item.dataType}`);\n if (item.incrementBy !== undefined)\n line.push(`INCREMENT BY ${item.incrementBy}`);\n if (item.min !== undefined) line.push(`MINVALUE ${item.min}`);\n if (item.max !== undefined) line.push(`MAXVALUE ${item.max}`);\n if (item.startWith !== undefined) line.push(`START WITH ${item.startWith}`);\n if (item.cache !== undefined) line.push(`CACHE ${item.cache}`);\n if (item.cycle) line.push(`CYCLE`);\n if (item.ownedBy) {\n const [schema, table] = getSchemaAndTableFromName(item.ownedBy);\n line.push(`OWNED BY ${quoteWithSchema({ schema, name: table })}`);\n }\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n name: string,\n item: ColumnType,\n) => {\n if (item.data.indexes) {\n indexes.push(\n ...item.data.indexes.map((index) => ({\n columns: [{ ...index, column: name }],\n options: index,\n })),\n );\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n name: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: name, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n): [string | undefined, string] => {\n if (typeof fnOrTable === 'string') {\n return getSchemaAndTableFromName(fnOrTable);\n }\n\n const item = new (fnOrTable())();\n return [item.schema, item.table];\n};\n\nexport const getConstraintName = (\n table: string,\n constraint: TableData.Constraint,\n) => {\n if (constraint.references)\n return `${table}_${constraint.references.columns.join('_')}_fkey`;\n if (constraint.check) return `${table}_check`;\n return `${table}_constraint`;\n};\n\nexport const constraintToSql = (\n { name }: { schema?: string; name: string },\n up: boolean,\n constraint: TableData.Constraint,\n values: unknown[],\n snakeCase: boolean | undefined,\n) => {\n const constraintName = constraint.name || getConstraintName(name, constraint);\n\n if (!up) {\n const { dropMode } = constraint;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const sql = [`CONSTRAINT \"${constraintName}\"`];\n\n if (constraint.references) {\n sql.push(foreignKeyToSql(constraint.references, snakeCase));\n }\n\n if (constraint.check) {\n sql.push(checkToSql(constraint.check, values));\n }\n\n return sql.join(' ');\n};\n\nconst checkToSql = (check: RawExpression, values: unknown[]) => {\n return `CHECK (${getRaw(check, values)})`;\n};\n\nconst foreignKeyToSql = (item: TableData.References, snakeCase?: boolean) => {\n return `FOREIGN KEY (${joinColumns(item.columns)}) ${referencesToSql(\n item,\n snakeCase,\n )}`;\n};\n\nexport const referencesToSql = (\n references: TableData.References,\n snakeCase: boolean | undefined,\n) => {\n const [schema, table] = getForeignKeyTable(references.fnOrTable);\n\n const sql: string[] = [\n `REFERENCES ${quoteWithSchema({ schema, name: table })}(${joinColumns(\n snakeCase\n ? references.foreignColumns.map(toSnakeCase)\n : references.foreignColumns,\n )})`,\n ];\n\n const { options } = references;\n if (options?.match) {\n sql.push(`MATCH ${options?.match.toUpperCase()}`);\n }\n\n if (options?.onDelete) {\n sql.push(`ON DELETE ${options?.onDelete.toUpperCase()}`);\n }\n\n if (options?.onUpdate) {\n sql.push(`ON UPDATE ${options?.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const getIndexName = (\n table: string,\n columns: TableData.Index['columns'],\n) => {\n return `${table}_${columns\n .map((it) =>\n 'column' in it\n ? it.column\n : it.expression.match(/\\w+/g)?.join('_') || 'expression',\n )\n .join('_')}_idx`;\n};\n\nexport const indexesToQuery = (\n up: boolean,\n { schema, name }: { schema?: string; name: string },\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName = options.name || getIndexName(name, columns);\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteWithSchema({ schema, name })}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n 'column' in column ? `\"${column.column}\"` : `(${column.expression})`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.opclass) {\n columnSql.push(column.opclass);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.nullsNotDistinct) {\n sql.push(`NULLS NOT DISTINCT`);\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n schemaTable: { schema?: string; name: string },\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteWithSchema(\n schemaTable,\n )}.\"${column}\" IS ${quote(comment)}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n","import { EnumColumn } from 'pqb';\n\nexport const tableMethods = {\n enum(name: string) {\n // empty array will be filled during the migration by querying db\n return new EnumColumn(name, [] as unknown as [string, ...string[]]);\n },\n};\n","export class RakeDbError extends Error {}\n\nexport class NoPrimaryKey extends RakeDbError {}\n","import {\n ColumnsShape,\n Db,\n EnumColumn,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n QueryArraysResult,\n quote,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n MigrationBase,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n getColumnName,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { tableMethods } from './tableMethods';\nimport { NoPrimaryKey } from '../errors';\nimport { ColumnTypesBase, snakeCaseKey } from 'orchid-core';\n\nexport type TableQuery = {\n text: string;\n values?: unknown[];\n then?(result: QueryArraysResult): void;\n};\n\nexport type CreateTableResult<\n Table extends string,\n Shape extends ColumnsShape,\n> = {\n table: Db<Table, Shape>;\n};\n\nexport const createTable = async <\n CT extends ColumnTypesBase,\n Table extends string,\n Shape extends ColumnsShape,\n>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: Table,\n options: TableOptions,\n fn: ColumnsShapeCallback<CT, Shape>,\n): Promise<CreateTableResult<Table, Shape>> => {\n const snakeCase =\n 'snakeCase' in options ? options.snakeCase : migration.options.snakeCase;\n\n const types = Object.assign(\n Object.create(migration.columnTypes),\n tableMethods,\n );\n types[snakeCaseKey] = snakeCase;\n\n const shape = getColumnTypes(types, fn, migration.options.baseTable?.nowSQL);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast, snakeCase);\n for (const { then, ...query } of queries) {\n const result = await migration.adapter.arrays(query);\n then?.(result);\n }\n\n migration.migratedAsts.push(ast);\n\n let table: Db<Table, Shape> | undefined;\n\n return {\n get table(): Db<Table, Shape> {\n return (table ??= (migration as unknown as Migration)(tableName, shape, {\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : undefined,\n snakeCase: options.snakeCase,\n }) as unknown as Db<Table, Shape>);\n },\n };\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n const column = shape[key];\n if (column.data.isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const { primaryKey } = tableData;\n const [schema, table] = getSchemaAndTableFromName(tableName);\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n schema,\n name: table,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].data.isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const error = new NoPrimaryKey(\n `Table ${ast.name} has no primary key.\\nYou can suppress this error by setting { noPrimaryKey: true } after a table name.`,\n );\n if (ast.noPrimaryKey === 'error') {\n throw error;\n } else {\n console.warn(error.message);\n }\n }\n }\n};\n\nconst astToQueries = (\n ast: RakeDbAst.Table,\n snakeCase?: boolean,\n): TableQuery[] => {\n const queries: TableQuery[] = [];\n const { shape } = ast;\n\n for (const key in shape) {\n const item = shape[key];\n if (!(item instanceof EnumColumn)) continue;\n\n queries.push(makePopulateEnumQuery(item));\n }\n\n if (ast.action === 'drop') {\n queries.push({\n text: `DROP TABLE ${quoteWithSchema(ast)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n });\n return queries;\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in shape) {\n const item = shape[key];\n const name = getColumnName(item, key, snakeCase);\n addColumnIndex(indexes, name, item);\n addColumnComment(comments, name, item);\n lines.push(\n `\\n ${columnToSql(name, item, values, !!ast.primaryKey, snakeCase)}`,\n );\n }\n\n if (ast.primaryKey) {\n lines.push(\n `\\n ${primaryKeyToSql({\n options: ast.primaryKey.options,\n columns: ast.primaryKey.columns.map((key) =>\n getColumnName(shape[key], key, snakeCase),\n ),\n })}`,\n );\n }\n\n ast.constraints?.forEach((item) => {\n lines.push(\n `\\n ${constraintToSql(\n ast,\n true,\n {\n ...item,\n references: item.references\n ? {\n ...item.references,\n columns: item.references.columns.map((column) =>\n getColumnName(shape[column], column, snakeCase),\n ),\n }\n : undefined,\n },\n values,\n snakeCase,\n )}`,\n );\n });\n\n indexes.push(\n ...(ast.indexes?.map((index) => ({\n ...index,\n columns: index.columns.map((item) => ({\n ...item,\n ...('column' in item\n ? {\n column: getColumnName(shape[item.column], item.column, snakeCase),\n }\n : {}),\n })),\n })) || []),\n );\n\n queries.push(\n {\n text: `CREATE TABLE ${quoteWithSchema(ast)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast, indexes),\n ...commentsToQuery(ast, comments),\n );\n\n if (ast.comment) {\n queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n });\n }\n\n return queries;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n TableData,\n quote,\n getRaw,\n EnumColumn,\n UnknownColumn,\n columnTypes,\n} from 'pqb';\nimport {\n EmptyObject,\n emptyObject,\n RawExpression,\n isRaw,\n ColumnTypesBase,\n snakeCaseKey,\n toSnakeCase,\n deepCompare,\n consumeColumnName,\n} from 'orchid-core';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n MigrationBase,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n getColumnName,\n identityToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { tableMethods } from './tableMethods';\nimport { TableQuery } from './createTable';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: {},\n drop: {},\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...(a.indexes || []), ...(b.indexes || [])];\n a.constraints = [...(a.constraints || []), ...(b.constraints || [])];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return addOrDrop('add', item, options);\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = function (item, options) {\n if (item instanceof ColumnType) {\n return addOrDrop('drop', item, options);\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n} as typeof add;\n\nconst addOrDrop = (\n type: 'add' | 'drop',\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem => {\n const name = consumeColumnName();\n if (name) {\n item.data.name = name;\n }\n\n if (item instanceof UnknownColumn) {\n const empty = columnTypeToColumnChange({\n type: 'change',\n from: {},\n to: {},\n });\n const add = columnTypeToColumnChange({\n type: 'change',\n from: {},\n to: {\n check: item.data.check,\n },\n });\n\n return {\n type: 'change',\n from: type === 'add' ? empty : add,\n to: type === 'add' ? add : empty,\n ...options,\n };\n }\n\n return {\n type,\n item,\n dropMode: options?.dropMode,\n };\n};\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKeys = item.data.foreignKeys;\n if (foreignKeys?.some((it) => 'fn' in it)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.data.isNullable,\n primaryKey: item.data.isPrimaryKey,\n ...item.data,\n foreignKeys: foreignKeys as RakeDbAst.ColumnChange['foreignKeys'],\n };\n }\n\n return item.to;\n};\n\nconst nameKey = Symbol('name');\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n ...tableMethods,\n name(this: ColumnTypesBase, name: string) {\n const types = Object.create(columnTypes.name.call(this, name));\n types[nameKey] = name;\n return types;\n },\n add,\n drop,\n change(\n this: ColumnTypesBase,\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n name: (this as { [nameKey]?: string })[nameKey],\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger<CT extends ColumnTypesBase> =\n MigrationColumnTypes<CT> & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n): Promise<void> => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(migration.columnTypes) as TableChanger<CT>;\n Object.assign(tableChanger, tableChangeMethods);\n\n const snakeCase =\n 'snakeCase' in options ? options.snakeCase : migration.options.snakeCase;\n\n (tableChanger as { [snakeCaseKey]?: boolean })[snakeCaseKey] = snakeCase;\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast, snakeCase);\n for (const query of queries) {\n const result = await migration.adapter.arrays(query);\n query.then?.(result);\n }\n\n migration.migratedAsts.push(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n const [schema, table] = getSchemaAndTableFromName(name);\n\n return {\n type: 'changeTable',\n schema,\n name: table,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (\n ast: RakeDbAst.ChangeTable,\n snakeCase?: boolean,\n): TableQuery[] => {\n const queries: TableQuery[] = [];\n\n if (ast.comment !== undefined) {\n queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = {\n columns: [],\n };\n\n const dropPrimaryKeys: PrimaryKeys = {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if ('item' in item) {\n const { item: column } = item;\n if (column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(column));\n }\n }\n\n if (item.type === 'add') {\n if (item.item.data.isPrimaryKey) {\n addPrimaryKeys.columns.push(getColumnName(item.item, key, snakeCase));\n }\n } else if (item.type === 'drop') {\n if (item.item.data.isPrimaryKey) {\n dropPrimaryKeys.columns.push(getColumnName(item.item, key, snakeCase));\n }\n } else if (item.type === 'change') {\n if (item.from.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.from.column));\n }\n\n if (item.to.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.to.column));\n }\n\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(\n item.from.column\n ? getColumnName(item.from.column, key, snakeCase)\n : snakeCase\n ? toSnakeCase(key)\n : key,\n );\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(\n item.to.column\n ? getColumnName(item.to.column, key, snakeCase)\n : snakeCase\n ? toSnakeCase(key)\n : key,\n );\n addPrimaryKeys.change = true;\n }\n }\n }\n\n if (ast.add.primaryKey) {\n addPrimaryKeys.options = ast.add.primaryKey.options;\n addPrimaryKeys.columns.push(...ast.add.primaryKey.columns);\n }\n\n if (ast.drop.primaryKey) {\n dropPrimaryKeys.options = ast.drop.primaryKey.options;\n dropPrimaryKeys.columns.push(...ast.drop.primaryKey.columns);\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes = mapIndexesForSnakeCase(ast.add.indexes, snakeCase);\n\n const dropIndexes = mapIndexesForSnakeCase(ast.drop.indexes, snakeCase);\n\n const addConstraints = mapConstraintsToSnakeCase(\n ast.add.constraints,\n snakeCase,\n );\n\n const dropConstraints = mapConstraintsToSnakeCase(\n ast.drop.constraints,\n snakeCase,\n );\n\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n const column = item.item;\n const name = getColumnName(column, key, snakeCase);\n addColumnIndex(addIndexes, name, column);\n addColumnComment(comments, name, column);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n name,\n column,\n values,\n addPrimaryKeys.columns.length > 1,\n snakeCase,\n )}`,\n );\n } else if (item.type === 'drop') {\n const name = getColumnName(item.item, key, snakeCase);\n addColumnIndex(dropIndexes, name, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${name}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n const name = getChangeColumnName(item, key, snakeCase);\n\n if (to.type && (from.type !== to.type || from.collate !== to.collate)) {\n const type =\n !to.column || to.column.data.isOfCustomType\n ? `\"${to.type}\"`\n : to.type;\n\n alterTable.push(\n `ALTER COLUMN \"${name}\" TYPE ${type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (\n typeof from.identity !== typeof to.identity ||\n !deepCompare(from.identity, to.identity)\n ) {\n alterTable.push(\n `ALTER COLUMN \"${name}\" ${\n to.identity ? `ADD ${identityToSql(to.identity)}` : `DROP IDENTITY`\n }`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${name}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${name}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${name}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n if (from.check !== to.check) {\n const checkName = `${ast.name}_${name}_check`;\n if (from.check) {\n alterTable.push(`DROP CONSTRAINT \"${checkName}\"`);\n }\n if (to.check) {\n alterTable.push(\n `ADD CONSTRAINT \"${checkName}\"\\n CHECK (${getRaw(\n to.check,\n values,\n )})`,\n );\n }\n }\n\n const foreignKeysLen = Math.max(\n from.foreignKeys?.length || 0,\n to.foreignKeys?.length || 0,\n );\n for (let i = 0; i < foreignKeysLen; i++) {\n const fromFkey = from.foreignKeys?.[i];\n const toFkey = to.foreignKeys?.[i];\n\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropConstraints.push({\n name: fromFkey.name,\n dropMode: fromFkey.dropMode,\n references: {\n columns: [name],\n fnOrTable: fromFkey.table,\n foreignColumns: snakeCase\n ? fromFkey.columns.map(toSnakeCase)\n : fromFkey.columns,\n options: fromFkey,\n },\n });\n }\n\n if (toFkey) {\n addConstraints.push({\n name: toFkey.name,\n dropMode: toFkey.dropMode,\n references: {\n columns: [name],\n fnOrTable: toFkey.table,\n foreignColumns: snakeCase\n ? toFkey.columns.map(toSnakeCase)\n : toFkey.columns,\n options: toFkey,\n },\n });\n }\n }\n }\n\n const indexesLen = Math.max(\n from.indexes?.length || 0,\n to.indexes?.length || 0,\n );\n for (let i = 0; i < indexesLen; i++) {\n const fromIndex = from.indexes?.[i];\n const toIndex = to.indexes?.[i];\n\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.opclass !== toIndex.opclass ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: name,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: name,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: name, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(\n `RENAME COLUMN \"${snakeCase ? toSnakeCase(key) : key}\" TO \"${\n snakeCase ? toSnakeCase(item.name) : item.name\n }\"`,\n );\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropConstraints.map(\n (foreignKey) =>\n `\\n DROP ${constraintToSql(ast, false, foreignKey, values, snakeCase)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(\n `ADD ${primaryKeyToSql(\n snakeCase\n ? {\n options: addPrimaryKeys.options,\n columns: addPrimaryKeys.columns.map(toSnakeCase),\n }\n : addPrimaryKeys,\n )}`,\n );\n }\n\n alterTable.push(\n ...addConstraints.map(\n (foreignKey) =>\n `\\n ADD ${constraintToSql(ast, true, foreignKey, values, snakeCase)}`,\n ),\n );\n\n if (alterTable.length) {\n queries.push({\n text:\n `ALTER TABLE ${quoteWithSchema(ast)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n queries.push(...indexesToQuery(false, ast, dropIndexes));\n queries.push(...indexesToQuery(true, ast, addIndexes));\n queries.push(...commentsToQuery(ast, comments));\n\n return queries;\n};\n\nconst getChangeColumnName = (\n change: RakeDbAst.ChangeTableItem.Change,\n key: string,\n snakeCase?: boolean,\n) => {\n return (\n change.name ||\n (change.to.column\n ? getColumnName(change.to.column, key, snakeCase)\n : snakeCase\n ? toSnakeCase(key)\n : key)\n );\n};\n\nconst mapIndexesForSnakeCase = (\n indexes?: TableData.Index[],\n snakeCase?: boolean,\n): TableData.Index[] => {\n return (\n indexes?.map((index) => ({\n options: index.options,\n columns: snakeCase\n ? index.columns.map((item) =>\n 'column' in item\n ? { ...item, column: toSnakeCase(item.column) }\n : item,\n )\n : index.columns,\n })) || []\n );\n};\n\nconst mapConstraintsToSnakeCase = (\n foreignKeys?: TableData.Constraint[],\n snakeCase?: boolean,\n): TableData.Constraint[] => {\n return (\n foreignKeys?.map((item) => ({\n ...item,\n references: item.references\n ? snakeCase\n ? {\n ...item.references,\n columns: item.references.columns.map(toSnakeCase),\n }\n : item.references\n : undefined,\n })) || []\n );\n};\n","import { MigrationBase } from './migration';\nimport {\n ColumnTypesBase,\n raw,\n RawExpression,\n singleQuote,\n Sql,\n} from 'orchid-core';\nimport { RakeDbAst } from '../ast';\nimport { getRaw } from 'pqb';\n\nexport const createView = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n): Promise<void> => {\n const ast = makeAst(up, name, options, sql);\n const query = astToQuery(ast);\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n): RakeDbAst.View => {\n if (typeof sql === 'string') {\n sql = raw(sql);\n }\n\n return {\n type: 'view',\n action: up ? 'create' : 'drop',\n name,\n shape: {},\n sql,\n options,\n };\n};\n\nconst astToQuery = (ast: RakeDbAst.View): Sql => {\n const values: unknown[] = [];\n const sql: string[] = [];\n const { options } = ast;\n\n if (ast.action === 'create') {\n sql.push('CREATE');\n\n if (options?.createOrReplace) sql.push('OR REPLACE');\n if (options?.temporary) sql.push('TEMPORARY');\n if (options?.recursive) sql.push('RECURSIVE');\n\n sql.push(`VIEW \"${ast.name}\"`);\n\n if (options?.columns) {\n sql.push(\n `(${options.columns.map((column) => `\"${column}\"`).join(', ')})`,\n );\n }\n\n if (options?.with) {\n const list: string[] = [];\n if (options.with.checkOption)\n list.push(`check_option = ${singleQuote(options.with.checkOption)}`);\n if (options.with.securityBarrier) list.push(`security_barrier = true`);\n if (options.with.securityInvoker) list.push(`security_invoker = true`);\n sql.push(`WITH ( ${list.join(', ')} )`);\n }\n\n sql.push(`AS (${getRaw(ast.sql, values)})`);\n } else {\n sql.push('DROP VIEW');\n\n if (options?.dropIfExists) sql.push(`IF EXISTS`);\n\n sql.push(`\"${ast.name}\"`);\n\n if (options?.dropMode) sql.push(options.dropMode);\n }\n\n return {\n text: sql.join(' '),\n values,\n };\n};\n","import {\n ColumnsShape,\n ColumnType,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n QueryLogObject,\n TransactionAdapter,\n TextColumn,\n createDb,\n DbResult,\n EnumColumn,\n quote,\n getRaw,\n Adapter,\n DefaultColumnTypes,\n} from 'pqb';\nimport {\n ColumnTypesBase,\n emptyObject,\n MaybeArray,\n QueryInput,\n raw,\n RawExpression,\n singleQuote,\n Sql,\n} from 'orchid-core';\nimport { createTable, CreateTableResult } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport {\n RakeDbConfig,\n quoteWithSchema,\n getSchemaAndTableFromName,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { columnTypeToSql } from './migrationUtils';\nimport { createView } from './createView';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n snakeCase?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes<CT extends ColumnTypesBase> = Omit<\n CT,\n 'text' | 'string' | 'enum'\n> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n citext: TextColumnCreator;\n enum: (name: string) => EnumColumn;\n};\n\nexport type ColumnsShapeCallback<\n CT extends ColumnTypesBase,\n Shape extends ColumnsShape = ColumnsShape,\n> = (t: MigrationColumnTypes<CT> & { raw: typeof raw }) => Shape;\n\nexport type ChangeTableOptions = {\n snakeCase?: boolean;\n comment?: string | [string, string] | null;\n};\n\nexport type ChangeTableCallback<CT extends ColumnTypesBase> = (\n t: TableChanger<CT>,\n) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type SilentQueries = {\n // query without logging\n silentQuery: Adapter['query'];\n silentArrays: Adapter['arrays'];\n};\n\nexport type Migration<CT extends ColumnTypesBase = DefaultColumnTypes> =\n DbResult<CT> &\n MigrationBase<CT> & {\n adapter: SilentQueries;\n };\n\ntype ConstraintArg = {\n name?: string;\n references?: [\n columns: [string, ...string[]],\n table: string,\n foreignColumn: [string, ...string[]],\n options: Omit<ForeignKeyOptions, 'name' | 'dropMode'>,\n ];\n check?: RawExpression;\n dropMode?: DropMode;\n};\n\nexport const createMigrationInterface = <CT extends ColumnTypesBase>(\n tx: TransactionAdapter,\n up: boolean,\n config: RakeDbConfig<CT>,\n): Migration => {\n const adapter = new TransactionAdapter(tx, tx.client, tx.types);\n const { query, arrays } = adapter;\n const log = logParamToLogObject(config.logger || console, config.log);\n\n adapter.query = ((q, types) => {\n return wrapWithLog(log, q, () => query.call(adapter, q, types));\n }) as typeof adapter.query;\n\n adapter.arrays = ((q, types) => {\n return wrapWithLog(log, q, () => arrays.call(adapter, q, types));\n }) as typeof adapter.arrays;\n\n Object.assign(adapter, { silentQuery: query, silentArrays: arrays });\n\n const db = createDb({\n adapter,\n columnTypes: config.columnTypes,\n }) as unknown as Migration;\n\n const { prototype: proto } = MigrationBase;\n for (const key of Object.getOwnPropertyNames(proto)) {\n (db as unknown as Record<string, unknown>)[key] =\n proto[key as keyof typeof proto];\n }\n\n db.migratedAsts = [];\n\n return Object.assign(db, {\n adapter,\n log,\n up,\n options: config,\n });\n};\n\nexport class MigrationBase<CT extends ColumnTypesBase> {\n public adapter!: TransactionAdapter;\n public log?: QueryLogObject;\n public up!: boolean;\n public options!: RakeDbConfig;\n public migratedAsts!: RakeDbAst[];\n public columnTypes!: CT;\n\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n options: TableOptions,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n cbOrOptions: ColumnsShapeCallback<CT, Shape> | TableOptions,\n cb?: ColumnsShapeCallback<CT, Shape>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n options: TableOptions,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n cbOrOptions: ColumnsShapeCallback<CT, Shape> | TableOptions,\n cb?: ColumnsShapeCallback<CT, Shape>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback<CT>): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback<CT> | ChangeTableOptions,\n cb?: ChangeTableCallback<CT>,\n ): Promise<void> {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const [fromSchema, f] = getSchemaAndTableFromName(this.up ? from : to);\n const [toSchema, t] = getSchemaAndTableFromName(this.up ? to : from);\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n fromSchema,\n from: f,\n toSchema,\n to: t,\n };\n\n await this.adapter.query(\n `ALTER TABLE ${quoteWithSchema({\n schema: ast.fromSchema,\n name: ast.from,\n })} RENAME TO ${quoteWithSchema({\n schema: ast.toSchema,\n name: ast.to,\n })}`,\n );\n\n this.migratedAsts.push(ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes<CT>) => ColumnType,\n ): Promise<void> {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes<CT>) => ColumnType,\n ): Promise<void> {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ): Promise<void> {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ): Promise<void> {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ): Promise<void> {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ): Promise<void> {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ): Promise<void> {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ): Promise<void> {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n addCheck(tableName: string, check: RawExpression): Promise<void> {\n return addCheck(this, this.up, tableName, check);\n }\n\n dropCheck(tableName: string, check: RawExpression): Promise<void> {\n return addCheck(this, !this.up, tableName, check);\n }\n\n addConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, this.up, tableName, constraint);\n }\n\n dropConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, !this.up, tableName, constraint);\n }\n\n renameColumn(tableName: string, from: string, to: string): Promise<void> {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string): Promise<void> {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string): Promise<void> {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'> = {},\n ): Promise<void> {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: Omit<\n RakeDbAst.Extension,\n 'type' | 'action' | 'name' | 'values'\n > = {},\n ): Promise<void> {\n return createExtension(this, !this.up, name, options);\n }\n\n createEnum(\n name: string,\n values: [string, ...string[]],\n options?: Omit<\n RakeDbAst.Enum,\n 'type' | 'action' | 'name' | 'values' | 'schema'\n >,\n ): Promise<void> {\n return createEnum(this, this.up, name, values, options);\n }\n\n dropEnum(\n name: string,\n values: [string, ...string[]],\n options?: Omit<\n RakeDbAst.Enum,\n 'type' | 'action' | 'name' | 'values' | 'schema'\n >,\n ): Promise<void> {\n return createEnum(this, !this.up, name, values, options);\n }\n\n createDomain(\n name: string,\n fn: (t: CT) => ColumnType,\n options?: Omit<\n RakeDbAst.Domain,\n 'type' | 'action' | 'schema' | 'name' | 'baseType'\n >,\n ): Promise<void> {\n return createDomain(this, this.up, name, fn, options);\n }\n\n dropDomain(\n name: string,\n fn: (t: CT) => ColumnType,\n options?: Omit<\n RakeDbAst.Domain,\n 'type' | 'action' | 'schema' | 'name' | 'baseType'\n >,\n ): Promise<void> {\n return createDomain(this, !this.up, name, fn, options);\n }\n\n createView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n ): Promise<void>;\n createView(name: string, sql: string | RawExpression): Promise<void>;\n createView(name: string, ...args: unknown[]): Promise<void> {\n const [options, sql] = args.length === 2 ? args : [emptyObject, args[0]];\n\n return createView(\n this,\n this.up,\n name,\n options as RakeDbAst.ViewOptions,\n sql as string | RawExpression,\n );\n }\n\n dropView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n ): Promise<void>;\n dropView(name: string, sql: string | RawExpression): Promise<void>;\n dropView(name: string, ...args: unknown[]): Promise<void> {\n const [options, sql] = args.length === 2 ? args : [emptyObject, args[0]];\n\n return createView(\n this,\n !this.up,\n name,\n options as RakeDbAst.ViewOptions,\n sql as string | RawExpression,\n );\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes<CT>) => ColumnType,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst addCheck = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n check: RawExpression,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.check(check)),\n }));\n};\n\nconst addConstraint = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n constraint: ConstraintArg,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.constraint(constraint)),\n }));\n};\n\nconst createSchema = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n): Promise<void> => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.adapter.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n migration.migratedAsts.push(ast);\n};\n\nconst createExtension = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n options: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'>,\n): Promise<void> => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.dropIfExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } \"${ast.name}\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst createEnum = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n values: [string, ...string[]],\n options: Omit<\n RakeDbAst.Enum,\n 'type' | 'action' | 'name' | 'values' | 'schema'\n > = {},\n): Promise<void> => {\n const [schema, enumName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Enum = {\n type: 'enum',\n action: up ? 'create' : 'drop',\n schema,\n name: enumName,\n values,\n ...options,\n };\n\n let query;\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE TYPE ${quotedName} AS ENUM (${values\n .map(quote)\n .join(', ')})`;\n } else {\n query = `DROP TYPE${ast.dropIfExists ? ' IF EXISTS' : ''} ${quotedName}${\n ast.cascade ? ' CASCADE' : ''\n }`;\n }\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst createDomain = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n fn: (t: CT) => ColumnType,\n options?: Omit<\n RakeDbAst.Domain,\n 'type' | 'action' | 'schema' | 'name' | 'baseType'\n >,\n): Promise<void> => {\n const [schema, domainName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Domain = {\n type: 'domain',\n action: up ? 'create' : 'drop',\n schema,\n name: domainName,\n baseType: fn(migration.columnTypes),\n ...options,\n };\n\n let query;\n const values: unknown[] = [];\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE DOMAIN ${quotedName} AS ${columnTypeToSql(ast.baseType)}${\n ast.collation\n ? `\nCOLLATION ${singleQuote(ast.collation)}`\n : ''\n }${\n ast.default\n ? `\nDEFAULT ${getRaw(ast.default, values)}`\n : ''\n }${ast.notNull || ast.check ? '\\n' : ''}${[\n ast.notNull && 'NOT NULL',\n ast.check && `CHECK ${getRaw(ast.check, values)}`,\n ]\n .filter(Boolean)\n .join(' ')}`;\n } else {\n query = `DROP DOMAIN ${quotedName}${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.adapter.query({\n text: query,\n values,\n });\n\n migration.migratedAsts.push(ast);\n};\n\nconst queryExists = <CT extends ColumnTypesBase>(\n db: MigrationBase<CT>,\n sql: { text: string; values: unknown[] },\n): Promise<boolean> => {\n return db.adapter.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import { Adapter } from 'pqb';\nimport {\n createSchemaMigrations,\n quoteWithSchema,\n RakeDbConfig,\n} from '../common';\nimport { SilentQueries } from './migration';\nimport { ColumnTypesBase } from 'orchid-core';\n\nexport const saveMigratedVersion = async <CT extends ColumnTypesBase>(\n db: SilentQueries,\n version: string,\n config: RakeDbConfig<CT>,\n): Promise<void> => {\n await db.silentArrays(\n `INSERT INTO ${quoteWithSchema({\n name: config.migrationsTable,\n })} VALUES ('${version}')`,\n );\n};\n\nexport const removeMigratedVersion = async <CT extends ColumnTypesBase>(\n db: SilentQueries,\n version: string,\n config: RakeDbConfig<CT>,\n) => {\n await db.silentArrays(\n `DELETE FROM ${quoteWithSchema({\n name: config.migrationsTable,\n })} WHERE version = '${version}'`,\n );\n};\n\nexport const getMigratedVersionsMap = async <CT extends ColumnTypesBase>(\n db: Adapter,\n config: RakeDbConfig<CT>,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT *\n FROM ${quoteWithSchema({ name: config.migrationsTable })}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n","import {\n Adapter,\n AdapterOptions,\n createDb,\n DbResult,\n DefaultColumnTypes,\n} from 'pqb';\nimport {\n ColumnTypesBase,\n emptyArray,\n MaybeArray,\n pathToLog,\n toArray,\n} from 'orchid-core';\nimport { getMigrationFiles, MigrationFile, RakeDbConfig } from '../common';\nimport {\n ChangeCallback,\n clearChanges,\n getCurrentChanges,\n} from '../migration/change';\nimport { createMigrationInterface } from '../migration/migration';\nimport * as url from 'url';\nimport {\n getMigratedVersionsMap,\n removeMigratedVersion,\n saveMigratedVersion,\n} from '../migration/manageMigratedVersions';\n\nconst getDb = (adapter: Adapter) => createDb({ adapter });\n\nexport const migrateOrRollback = async <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[],\n up: boolean,\n): Promise<void> => {\n config = { ...config };\n const files = await getMigrationFiles(config, up);\n\n let count = up ? Infinity : 1;\n let argI = 0;\n const num = args[0] === 'all' ? Infinity : parseInt(args[0]);\n if (!isNaN(num)) {\n argI++;\n count = num;\n }\n\n const arg = args[argI];\n if (arg === '--code') {\n config.useCodeUpdater = args[argI + 1] !== 'false';\n }\n\n if (!config.useCodeUpdater) delete config.appCodeUpdater;\n\n const appCodeUpdaterCache = {};\n\n for (const opts of toArray(options)) {\n const adapter = new Adapter(opts);\n let db: DbResult<DefaultColumnTypes> | undefined;\n\n if (up) {\n await config.beforeMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.beforeRollback?.((db ??= getDb(adapter)));\n }\n\n const migratedVersions = await getMigratedVersionsMap(adapter, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(\n adapter,\n up,\n file,\n config,\n opts,\n appCodeUpdaterCache,\n );\n\n config.logger?.log(\n `${up ? 'Migrated' : 'Rolled back'} ${pathToLog(file.path)}`,\n );\n }\n\n if (up) {\n await config.afterMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.afterRollback?.((db ??= getDb(adapter)));\n }\n } finally {\n await config.appCodeUpdater?.afterAll({\n options: opts,\n basePath: config.basePath,\n cache: appCodeUpdaterCache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n\n await adapter.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\nexport const changeCache: Record<string, ChangeCallback[] | undefined> = {};\n\nconst begin = {\n text: 'BEGIN',\n values: emptyArray,\n};\n\nconst processMigration = async <CT extends ColumnTypesBase>(\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig<CT>,\n options: AdapterOptions,\n appCodeUpdaterCache: object,\n) => {\n const asts = await db.transaction(begin, async (tx) => {\n clearChanges();\n\n let changes = changeCache[file.path];\n if (!changes) {\n try {\n await config.import(file.path);\n } catch (err) {\n // throw if unknown error\n if ((err as { code: string }).code !== 'ERR_UNSUPPORTED_ESM_URL_SCHEME')\n throw err;\n\n // this error happens on windows in ESM mode, try import transformed url\n await config.import(url.pathToFileURL(file.path).pathname);\n }\n changes = getCurrentChanges();\n changeCache[file.path] = changes;\n }\n\n const db = createMigrationInterface(tx, up, config);\n\n for (const fn of up ? changes : changes.reverse()) {\n await fn(db, up);\n }\n\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db.adapter,\n file.version,\n config,\n );\n\n return db.migratedAsts;\n });\n\n for (const ast of asts) {\n await config.appCodeUpdater?.process({\n ast,\n options,\n basePath: config.basePath,\n cache: appCodeUpdaterCache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n }\n};\n\nexport const migrate = <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = [],\n): Promise<void> => migrateOrRollback(options, config, args, true);\n\nexport const rollback = <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = [],\n): Promise<void> => migrateOrRollback(options, config, args, false);\n\nexport const redo = async <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = [],\n): Promise<void> => {\n await migrateOrRollback(options, config, args, false);\n await migrateOrRollback(options, config, args, true);\n};\n","import { Adapter, AdapterOptions } from 'pqb';\nimport { ColumnTypesBase, MaybeArray, toArray } from 'orchid-core';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<\n 'ok' | 'already' | 'forbidden' | 'ssl required' | { error: unknown }\n> => {\n const db = new Adapter(options);\n\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n\n if (\n typeof err.message === 'string' &&\n err.message.includes('sslmode=require')\n ) {\n return 'ssl required';\n }\n\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (\n err.code === '42501' ||\n (typeof err.message === 'string' &&\n err.message.includes('password authentication failed'))\n ) {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: Pick<RakeDbConfig, 'migrationsTable' | 'logger'>,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n create?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n config.logger?.log(args.successMessage(params));\n } else if (result === 'already') {\n config.logger?.log(args.alreadyMessage(params));\n } else if (result === 'ssl required') {\n config.logger?.log(\n 'SSL is required: append ?ssl=true to the database url string',\n );\n return;\n } else if (result === 'forbidden') {\n let message = `Permission denied to ${\n args.create ? 'create' : 'drop'\n } database.`;\n\n const host = adminOptions.databaseURL\n ? new URL(adminOptions.databaseURL).hostname\n : adminOptions.host;\n\n const isLocal = host === 'localhost';\n if (!isLocal) {\n message += `\\nDon't use this command for database service providers, only for a local db.`;\n }\n\n config.logger?.log(message);\n\n const updatedOptions = await setAdminCredentialsToOptions(\n options,\n args.create,\n );\n if (!updatedOptions) return;\n\n await createOrDrop(options, updatedOptions, config, args);\n return;\n } else {\n throw result.error;\n }\n\n if (!args.create) return;\n\n const db = new Adapter(options);\n\n const { schema } = db;\n if (schema) {\n db.schema = undefined;\n try {\n await db.query(`CREATE SCHEMA \"${schema}\"`);\n config.logger?.log(`Created schema ${schema}`);\n } catch (err) {\n if ((err as { code: string }).code === '42P06') {\n config.logger?.log(`Schema ${schema} already exists`);\n } else {\n throw err;\n }\n }\n db.schema = schema;\n }\n\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async <CT extends ColumnTypesBase>(\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n create: true,\n });\n }\n};\n\nexport const dropDb = async <CT extends ColumnTypesBase>(\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async <CT extends ColumnTypesBase>(\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n) => {\n await dropDb(arg, config);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\nimport { ColumnTypesBase, getImportPath, pathToLog } from 'orchid-core';\n\nexport const writeMigrationFile = async <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n version: string,\n name: string,\n content: (importPath: string, name: string) => string,\n) => {\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(config.migrationsPath, `${version}_${name}.ts`);\n const importPath = getImportPath(\n filePath,\n path.join(config.basePath, config.dbScript),\n );\n\n await writeFile(filePath, content(importPath, name));\n config.logger?.log(`Created ${pathToLog(filePath)}`);\n};\n\nexport const generate = async <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n [name]: string[],\n): Promise<void> => {\n if (!name) throw new Error('Migration name is missing');\n\n const version = makeFileTimeStamp();\n await writeMigrationFile(config, version, name, makeContent);\n};\n\nexport const makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (importPath: string, name: string): string => {\n let content = `import { change } from '${importPath}';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({\\n \\n }));`;\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({\\n \\n }));`;\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({\\n \\n }));`;\n }\n }\n\n return content + '\\n});\\n';\n};\n","import { Adapter } from 'pqb';\n\nexport namespace DbStructure {\n export type Table = {\n schemaName: string;\n name: string;\n comment?: string;\n columns: Column[];\n };\n\n export type View = {\n schemaName: string;\n name: string;\n isRecursive: boolean;\n with?: string[]; // ['check_option=LOCAL', 'security_barrier=true']\n columns: Column[];\n sql: string;\n };\n\n export type Procedure = {\n schemaName: string;\n name: string;\n returnSet: boolean;\n returnType: string;\n kind: string;\n isTrigger: boolean;\n types: string[];\n argTypes: string[];\n argModes: ('i' | 'o')[];\n argNames?: string[];\n };\n\n export type Column = {\n schemaName: string;\n tableName: string;\n name: string;\n typeSchema: string;\n type: string;\n isArray: boolean;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n default?: string;\n isNullable: boolean;\n collation?: string;\n compression?: 'p' | 'l'; // p for pglz, l for lz4\n comment?: string;\n identity?: {\n always: boolean;\n start?: number;\n increment?: number;\n min?: number;\n max?: number;\n cache?: number;\n cycle?: boolean;\n };\n };\n\n export type Index = {\n schemaName: string;\n tableName: string;\n name: string;\n using: string;\n isUnique: boolean;\n columns: (({ column: string } | { expression: string }) & {\n collate?: string;\n opclass?: string;\n order?: string;\n })[];\n include?: string[];\n nullsNotDistinct?: boolean;\n with?: string;\n tablespace?: string;\n where?: string;\n };\n\n // a = no action, r = restrict, c = cascade, n = set null, d = set default\n type ForeignKeyAction = 'a' | 'r' | 'c' | 'n' | 'd';\n\n export type Constraint = {\n schemaName: string;\n tableName: string;\n name: string;\n primaryKey?: string[];\n references?: References;\n check?: Check;\n };\n\n export type References = {\n foreignSchema: string;\n foreignTable: string;\n columns: string[];\n foreignColumns: string[];\n match: 'f' | 'p' | 's'; // FULL | PARTIAL | SIMPLE\n onUpdate: ForeignKeyAction;\n onDelete: ForeignKeyAction;\n };\n\n export type Check = {\n columns?: string[];\n expression: string;\n };\n\n export type Trigger = {\n schemaName: string;\n tableName: string;\n triggerSchema: string;\n name: string;\n events: string[];\n activation: string;\n condition?: string;\n definition: string;\n };\n\n export type Extension = {\n schemaName: string;\n name: string;\n version?: string;\n };\n\n export type Enum = {\n schemaName: string;\n name: string;\n values: [string, ...string[]];\n };\n\n export type Domain = {\n schemaName: string;\n name: string;\n type: string;\n typeSchema: string;\n isArray: boolean;\n notNull: boolean;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n collation?: string;\n default?: string;\n check?: string;\n };\n}\n\nconst filterSchema = (table: string) =>\n `${table} !~ '^pg_' AND ${table} != 'information_schema'`;\n\nconst jsonAgg = (sql: string, as: string) =>\n `(SELECT coalesce(json_agg(t.*), '[]') FROM (${sql}) t) AS \"${as}\"`;\n\nconst columnsSql = ({\n schema,\n table,\n join = '',\n where,\n}: {\n schema: string;\n table: string;\n join?: string;\n where: string;\n}) => `SELECT\n ${schema}.nspname AS \"schemaName\",\n ${table}.relname AS \"tableName\",\n a.attname AS \"name\",\n COALESCE(et.typname, t.typname) AS \"type\",\n tn.nspname AS \"typeSchema\",\n et.typname IS NOT NULL AS \"isArray\",\n information_schema._pg_char_max_length(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"maxChars\",\n information_schema._pg_numeric_precision(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"numericPrecision\",\n information_schema._pg_numeric_scale(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"numericScale\",\n information_schema._pg_datetime_precision(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"datetimePrecision\",\n CAST(\n CASE WHEN a.attgenerated = ''\n THEN pg_get_expr(ad.adbin, ad.adrelid)\n END AS information_schema.character_data\n ) AS \"default\",\n NOT (a.attnotnull OR (t.typtype = 'd' AND t.typnotnull)) AS \"isNullable\",\n co.collname AS \"collation\",\n NULLIF(a.attcompression, '') AS compression,\n pgd.description AS \"comment\",\n (\n CASE WHEN a.attidentity IN ('a', 'd') THEN (\n json_build_object(\n 'always',\n a.attidentity = 'a',\n 'start',\n seq.seqstart,\n 'increment',\n seq.seqincrement,\n 'min',\n nullif(seq.seqmin, 1),\n 'max',\n nullif(seq.seqmax, (\n CASE COALESCE(et.typname, t.typname)\n WHEN 'int2' THEN 32767\n WHEN 'int4' THEN 2147483647\n WHEN 'int8' THEN 9223372036854775807\n ELSE NULL\n END\n )),\n 'cache',\n seq.seqcache,\n 'cycle',\n seq.seqcycle\n )\n ) END\n ) \"identity\"\nFROM pg_attribute a\n${join}\nLEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum\nJOIN pg_type t ON a.atttypid = t.oid\nLEFT JOIN pg_type et ON t.typelem = et.oid\nJOIN pg_namespace tn ON tn.oid = t.typnamespace\nLEFT JOIN (pg_collation co JOIN pg_namespace nco ON (co.collnamespace = nco.oid))\n ON a.attcollation = co.oid AND (nco.nspname, co.collname) <> ('pg_catalog', 'default')\nLEFT JOIN pg_catalog.pg_description pgd\n ON pgd.objoid = a.attrelid\n AND pgd.objsubid = a.attnum\nLEFT JOIN (pg_depend dep JOIN pg_sequence seq ON (dep.classid = 'pg_class'::regclass AND dep.objid = seq.seqrelid AND dep.deptype = 'i'))\n ON (dep.refclassid = 'pg_class'::regclass AND dep.refobjid = ${table}.oid AND dep.refobjsubid = a.attnum)\nWHERE a.attnum > 0\n AND NOT a.attisdropped\n AND ${where}\nORDER BY a.attnum`;\n\nconst schemasSql = `SELECT coalesce(json_agg(nspname ORDER BY nspname), '[]')\nFROM pg_catalog.pg_namespace n\nWHERE ${filterSchema('nspname')}`;\n\nconst tablesSql = `SELECT\n nspname AS \"schemaName\",\n relname AS \"name\",\n obj_description(c.oid) AS comment,\n (SELECT coalesce(json_agg(t), '[]') FROM (${columnsSql({\n schema: 'n',\n table: 'c',\n where: 'a.attrelid = c.oid',\n })}) t) AS \"columns\"\nFROM pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = relnamespace\nWHERE relkind = 'r'\n AND ${filterSchema('nspname')}\nORDER BY relname`;\n\nconst viewsSql = `SELECT\n nc.nspname AS \"schemaName\",\n c.relname AS \"name\",\n right(substring(r.ev_action from ':hasRecursive \\w'), 1)::bool AS \"isRecursive\",\n array_to_json(c.reloptions) AS \"with\",\n (SELECT coalesce(json_agg(t), '[]') FROM (${columnsSql({\n schema: 'nc',\n table: 'c',\n where: 'a.attrelid = c.oid',\n })}) t) AS \"columns\",\n pg_get_viewdef(c.oid) AS \"sql\"\nFROM pg_namespace nc\nJOIN pg_class c\n ON nc.oid = c.relnamespace\n AND c.relkind = 'v'\n AND c.relpersistence != 't'\nJOIN pg_rewrite r ON r.ev_class = c.oid\nWHERE ${filterSchema('nc.nspname')}\nORDER BY c.relname`;\n\n// procedures\n// `SELECT\n// n.nspname AS \"schemaName\",\n// proname AS name,\n// proretset AS \"returnSet\",\n// (\n// SELECT typname FROM pg_type WHERE oid = prorettype\n// ) AS \"returnType\",\n// prokind AS \"kind\",\n// coalesce((\n// SELECT true FROM information_schema.triggers\n// WHERE n.nspname = trigger_schema AND trigger_name = proname\n// LIMIT 1\n// ), false) AS \"isTrigger\",\n// coalesce((\n// SELECT json_agg(pg_type.typname)\n// FROM unnest(coalesce(proallargtypes, proargtypes)) typeId\n// JOIN pg_type ON pg_type.oid = typeId\n// ), '[]') AS \"types\",\n// coalesce(to_json(proallargtypes::int[]), to_json(proargtypes::int[])) AS \"argTypes\",\n// coalesce(to_json(proargmodes), '[]') AS \"argModes\",\n// to_json(proargnames) AS \"argNames\"\n// FROM pg_proc p\n// JOIN pg_namespace n ON p.pronamespace = n.oid\n// WHERE ${filterSchema('n.nspname')}`\n\nconst sql = `SELECT (${schemasSql}) AS \"schemas\", ${jsonAgg(\n tablesSql,\n 'tables',\n)}, ${jsonAgg(viewsSql, 'views')}`;\n\ntype Structure = {\n schemas: string[];\n tables: DbStructure.Table[];\n views: DbStructure.View[];\n};\n\nexport class DbStructure {\n constructor(private db: Adapter) {}\n\n async getStructure(): Promise<Structure> {\n const {\n rows: [structure],\n } = await this.db.query<Structure>(sql);\n return structure;\n }\n\n async getIndexes() {\n const { rows } = await this.db.query<DbStructure.Index>(\n `SELECT\n n.nspname \"schemaName\",\n t.relname \"tableName\",\n ic.relname \"name\",\n am.amname AS \"using\",\n i.indisunique \"isUnique\",\n (\n SELECT json_agg(\n (\n CASE WHEN t.e = 0\n THEN jsonb_build_object('expression', pg_get_indexdef(i.indexrelid, t.i::int4, false))\n ELSE jsonb_build_object('column', (\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = t.e\n )\n ))\n END\n ) || (\n CASE WHEN i.indcollation[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE (\n SELECT (\n CASE WHEN collname = 'default'\n THEN '{}'::jsonb\n ELSE jsonb_build_object('collate', collname)\n END\n )\n FROM pg_catalog.pg_collation\n WHERE oid = i.indcollation[t.i - 1]\n )\n END\n ) || (\n SELECT\n CASE WHEN opcdefault AND attoptions IS NULL\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'opclass', opcname || COALESCE('(' || array_to_string(attoptions, ', ') || ')', '')\n )\n END\n FROM pg_opclass\n LEFT JOIN pg_attribute\n ON attrelid = i.indexrelid\n AND attnum = t.i\n WHERE oid = i.indclass[t.i - 1]\n ) || (\n CASE WHEN i.indoption[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'order',\n CASE\n WHEN i.indoption[t.i - 1] = 1 THEN 'DESC NULLS LAST'\n WHEN i.indoption[t.i - 1] = 2 THEN 'ASC NULLS FIRST'\n WHEN i.indoption[t.i - 1] = 3 THEN 'DESC'\n ELSE NULL\n END\n )\n END\n )\n )\n FROM unnest(i.indkey[:indnkeyatts - 1]) WITH ORDINALITY AS t(e, i)\n ) \"columns\",\n (\n SELECT json_agg(\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = j.e\n )\n )\n FROM unnest(i.indkey[indnkeyatts:]) AS j(e)\n ) AS \"include\",\n (to_jsonb(i.*)->'indnullsnotdistinct')::bool AS \"nullsNotDistinct\",\n NULLIF(pg_catalog.array_to_string(\n ic.reloptions || array(SELECT 'toast.' || x FROM pg_catalog.unnest(tc.reloptions) x),\n ', '\n ), '') AS \"with\",\n (\n SELECT tablespace\n FROM pg_indexes\n WHERE schemaname = n.nspname\n AND indexname = ic.relname\n ) AS tablespace,\n pg_get_expr(i.indpred, i.indrelid) AS \"where\"\nFROM pg_index i\nJOIN pg_class t ON t.oid = i.indrelid\nJOIN pg_namespace n ON n.oid = t.relnamespace\nJOIN pg_class ic ON ic.oid = i.indexrelid\nJOIN pg_am am ON am.oid = ic.relam\nLEFT JOIN pg_catalog.pg_class tc ON (ic.reltoastrelid = tc.oid)\nWHERE ${filterSchema('n.nspname')}\n AND NOT i.indisprimary\nORDER BY ic.relname`,\n );\n return rows;\n }\n\n async getConstraints() {\n const { rows } = await this.db.query<DbStructure.Constraint>(\n `SELECT\n s.nspname AS \"schemaName\",\n t.relname AS \"tableName\",\n c.conname AS \"name\",\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.constraint_column_usage ccu\n WHERE contype = 'p'\n AND ccu.constraint_name = c.conname\n AND ccu.table_schema = s.nspname\n ) AS \"primaryKey\",\n (\n SELECT\n json_build_object(\n 'foreignSchema',\n fs.nspname,\n 'foreignTable',\n ft.relname,\n 'columns',\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.key_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ),\n 'foreignColumns',\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.constraint_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ),\n 'match',\n c.confmatchtype,\n 'onUpdate',\n c.confupdtype,\n 'onDelete',\n c.confdeltype\n )\n FROM pg_class ft\n JOIN pg_catalog.pg_namespace fs ON fs.oid = ft.relnamespace\n JOIN pg_catalog.pg_namespace cs ON cs.oid = c.connamespace\n WHERE contype = 'f' AND ft.oid = confrelid\n ) AS \"references\",\n (\n SELECT\n CASE conbin IS NULL\n WHEN false THEN\n json_build_object(\n 'columns',\n json_agg(ccu.column_name),\n 'expression',\n pg_get_expr(conbin, conrelid)\n )\n END\n FROM information_schema.constraint_column_usage ccu\n WHERE conbin IS NOT NULL\n AND ccu.constraint_name = c.conname\n AND ccu.table_schema = s.nspname\n ) AS \"check\"\nFROM pg_catalog.pg_constraint c\nJOIN pg_class t ON t.oid = conrelid\nJOIN pg_catalog.pg_namespace s\n ON s.oid = t.relnamespace\n AND contype IN ('p', 'f', 'c')\n AND ${filterSchema('s.nspname')}\nORDER BY c.conname`,\n );\n return rows;\n }\n\n async getTriggers() {\n const { rows } = await this.db.query<DbStructure.Trigger>(\n `SELECT event_object_schema AS \"schemaName\",\n event_object_table AS \"tableName\",\n trigger_schema AS \"triggerSchema\",\n trigger_name AS name,\n json_agg(event_manipulation) AS events,\n action_timing AS activation,\n action_condition AS condition,\n action_statement AS definition\nFROM information_schema.triggers\nWHERE ${filterSchema('event_object_schema')}\nGROUP BY event_object_schema, event_object_table, trigger_schema, trigger_name, action_timing, action_condition, action_statement\nORDER BY trigger_name`,\n );\n return rows;\n }\n\n async getExtensions() {\n const { rows } = await this.db.query<DbStructure.Extension>(\n `SELECT\n nspname AS \"schemaName\",\n extname AS \"name\",\n extversion AS version\nFROM pg_extension\nJOIN pg_catalog.pg_namespace n ON n.oid = extnamespace\n AND ${filterSchema('n.nspname')}`,\n );\n return rows;\n }\n\n async getEnums() {\n const { rows } = await this.db.query<DbStructure.Enum>(\n `SELECT\n n.nspname as \"schemaName\",\n t.typname as name,\n json_agg(e.enumlabel) as values\nFROM pg_type t\nJOIN pg_enum e ON t.oid = e.enumtypid\nJOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\nWHERE ${filterSchema('n.nspname')}\nGROUP BY n.nspname, t.typname`,\n );\n return rows;\n }\n\n async getDomains() {\n const { rows } = await this.db.query<DbStructure.Domain>(`SELECT\n n.nspname AS \"schemaName\",\n d.typname AS \"name\",\n t.typname AS \"type\",\n s.nspname AS \"typeSchema\",\n d.typnotnull AS \"notNull\",\n d.typcategory = 'A' AS \"isArray\",\n character_maximum_length AS \"maxChars\",\n numeric_precision AS \"numericPrecision\",\n numeric_scale AS \"numericScale\",\n datetime_precision AS \"dateTimePrecision\",\n collation_name AS \"collation\",\n domain_default AS \"default\",\n pg_get_expr(conbin, conrelid) AS \"expression\"\nFROM pg_catalog.pg_type d\nJOIN pg_catalog.pg_namespace n ON n.oid = d.typnamespace\nJOIN information_schema.domains i\n ON i.domain_schema = nspname\n AND i.domain_name = d.typname\nJOIN pg_catalog.pg_type t\n ON (\n CASE WHEN d.typcategory = 'A'\n THEN t.typarray\n ELSE t.oid\n END\n ) = d.typbasetype\nJOIN pg_catalog.pg_namespace s ON s.oid = t.typnamespace\nLEFT JOIN pg_catalog.pg_constraint c ON c.contypid = d.oid\nWHERE d.typtype = 'd' AND ${filterSchema('n.nspname')}`);\n\n return rows;\n }\n}\n","import { DbStructure } from './dbStructure';\nimport { RakeDbAst } from '../ast';\nimport {\n ArrayColumn,\n ColumnFromDbParams,\n columnsByType,\n ColumnsShape,\n ColumnType,\n CustomTypeColumn,\n DomainColumn,\n EnumColumn,\n ForeignKeyAction,\n ForeignKeyMatch,\n ForeignKeyOptions,\n getConstraintKind,\n instantiateColumn,\n simplifyColumnDefault,\n TableData,\n} from 'pqb';\nimport { raw, singleQuote, toCamelCase, toSnakeCase } from 'orchid-core';\nimport { getConstraintName, getIndexName } from '../migration/migrationUtils';\n\nconst matchMap: Record<string, undefined | ForeignKeyMatch> = {\n s: undefined,\n f: 'FULL',\n p: 'PARTIAL',\n};\n\nconst fkeyActionMap: Record<string, undefined | ForeignKeyAction> = {\n a: undefined, // default\n r: 'RESTRICT',\n c: 'CASCADE',\n n: 'SET NULL',\n d: 'SET DEFAULT',\n};\n\ntype Data = {\n schemas: string[];\n tables: DbStructure.Table[];\n views: DbStructure.View[];\n constraints: DbStructure.Constraint[];\n indexes: DbStructure.Index[];\n extensions: DbStructure.Extension[];\n enums: DbStructure.Enum[];\n domains: DbStructure.Domain[];\n};\n\ntype Domains = Record<string, ColumnType>;\n\ntype PendingTables = Record<\n string,\n { table: DbStructure.Table; dependsOn: Set<string> }\n>;\n\nexport type StructureToAstCtx = {\n snakeCase?: boolean;\n unsupportedTypes: Record<string, string[]>;\n currentSchema: string;\n};\n\nexport const structureToAst = async (\n ctx: StructureToAstCtx,\n db: DbStructure,\n): Promise<RakeDbAst[]> => {\n const ast: RakeDbAst[] = [];\n\n const data = await getData(db);\n\n for (const name of data.schemas) {\n if (name === 'public') continue;\n\n ast.push({\n type: 'schema',\n action: 'create',\n name,\n });\n }\n\n const pendingTables: PendingTables = {};\n for (const table of data.tables) {\n const key = `${table.schemaName}.${table.name}`;\n const dependsOn = new Set<string>();\n\n for (const fk of data.constraints) {\n const { references } = fk;\n if (\n !references ||\n fk.schemaName !== table.schemaName ||\n fk.tableName !== table.name\n )\n continue;\n\n const otherKey = `${references.foreignSchema}.${references.foreignTable}`;\n if (otherKey !== key) {\n dependsOn.add(otherKey);\n }\n }\n\n pendingTables[key] = { table, dependsOn };\n }\n\n const domains: Domains = {};\n for (const it of data.domains) {\n domains[`${it.schemaName}.${it.name}`] = getColumn(ctx, data, domains, {\n schemaName: it.schemaName,\n name: it.name,\n type: it.type,\n typeSchema: it.typeSchema,\n isArray: it.isArray,\n isSerial: false,\n });\n }\n\n for (const key in pendingTables) {\n const { table, dependsOn } = pendingTables[key];\n if (!dependsOn.size) {\n pushTableAst(ctx, ast, data, domains, table, pendingTables);\n }\n }\n\n const outerConstraints: [DbStructure.Constraint, DbStructure.Table][] = [];\n\n for (const it of data.extensions) {\n ast.push({\n type: 'extension',\n action: 'create',\n name: it.name,\n schema: it.schemaName === ctx.currentSchema ? undefined : it.schemaName,\n version: it.version,\n });\n }\n\n for (const it of data.enums) {\n ast.push({\n type: 'enum',\n action: 'create',\n name: it.name,\n schema: it.schemaName === ctx.currentSchema ? undefined : it.schemaName,\n values: it.values,\n });\n }\n\n for (const it of data.domains) {\n ast.push({\n type: 'domain',\n action: 'create',\n schema: it.schemaName === ctx.currentSchema ? undefined : it.schemaName,\n name: it.name,\n baseType: domains[`${it.schemaName}.${it.name}`],\n notNull: it.notNull,\n collation: it.collation,\n default: simplifyColumnDefault(it.default),\n check: it.check ? raw(it.check) : undefined,\n });\n }\n\n for (const key in pendingTables) {\n const innerConstraints: DbStructure.Constraint[] = [];\n const { table } = pendingTables[key];\n\n for (const fkey of data.constraints) {\n if (fkey.schemaName !== table.schemaName || fkey.tableName !== table.name)\n continue;\n\n const otherKey =\n fkey.references &&\n `${fkey.references.foreignSchema}.${fkey.references.foreignTable}`;\n\n if (!otherKey || !pendingTables[otherKey] || otherKey === key) {\n innerConstraints.push(fkey);\n } else {\n outerConstraints.push([fkey, table]);\n }\n }\n\n pushTableAst(\n ctx,\n ast,\n data,\n domains,\n table,\n pendingTables,\n innerConstraints,\n );\n }\n\n for (const [fkey, table] of outerConstraints) {\n ast.push({\n ...constraintToAst(ctx, fkey),\n type: 'constraint',\n action: 'create',\n tableSchema:\n table.schemaName === ctx.currentSchema ? undefined : table.schemaName,\n tableName: fkey.tableName,\n });\n }\n\n for (const view of data.views) {\n ast.push(viewToAst(ctx, data, domains, view));\n }\n\n return ast;\n};\n\nconst getData = async (db: DbStructure): Promise<Data> => {\n const [\n { schemas, tables, views },\n constraints,\n indexes,\n extensions,\n enums,\n domains,\n ] = await Promise.all([\n db.getStructure(),\n db.getConstraints(),\n db.getIndexes(),\n db.getExtensions(),\n db.getEnums(),\n db.getDomains(),\n ]);\n\n return {\n schemas,\n tables,\n views,\n constraints,\n indexes,\n extensions,\n enums,\n domains,\n };\n};\n\nconst makeBelongsToTable =\n (schema: string | undefined, table: string) =>\n (item: { schemaName: string; tableName: string }) =>\n item.schemaName === schema && item.tableName === table;\n\nconst getIsSerial = (item: DbStructure.Column) => {\n if (item.type === 'int2' || item.type === 'int4' || item.type === 'int8') {\n const { default: def, schemaName, tableName, name } = item;\n const seq = `${tableName}_${name}_seq`;\n if (\n def &&\n (def === `nextval(${singleQuote(`${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".\"${seq}\"`)}::regclass)`)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst getColumn = (\n ctx: StructureToAstCtx,\n data: Data,\n domains: Domains,\n {\n schemaName,\n tableName,\n name,\n type,\n typeSchema,\n isArray,\n isSerial,\n ...params\n }: {\n schemaName: string;\n tableName?: string;\n name: string;\n type: string;\n typeSchema: string;\n isArray: boolean;\n isSerial: boolean;\n } & ColumnFromDbParams,\n) => {\n let column: ColumnType;\n\n const klass = columnsByType[getColumnType(type, isSerial)];\n if (klass) {\n column = instantiateColumn(klass, params);\n } else {\n const domainColumn = domains[`${typeSchema}.${type}`];\n if (domainColumn) {\n column = new DomainColumn(type).as(domainColumn);\n } else {\n const enumType = data.enums.find(\n (item) => item.name === type && item.schemaName === typeSchema,\n );\n if (enumType) {\n column = new EnumColumn(type, enumType.values);\n } else {\n column = new CustomTypeColumn(type);\n\n (ctx.unsupportedTypes[type] ??= []).push(\n `${schemaName}${tableName ? `.${tableName}` : ''}.${name}`,\n );\n }\n }\n }\n\n return isArray ? new ArrayColumn(column) : column;\n};\n\nconst getColumnType = (type: string, isSerial: boolean) => {\n if (!isSerial) return type;\n\n return type === 'int2'\n ? 'smallserial'\n : type === 'int4'\n ? 'serial'\n : 'bigserial';\n};\n\nconst pushTableAst = (\n ctx: StructureToAstCtx,\n ast: RakeDbAst[],\n data: Data,\n domains: Domains,\n table: DbStructure.Table,\n pendingTables: PendingTables,\n innerConstraints = data.constraints,\n) => {\n const { schemaName, name: tableName, columns } = table;\n\n const key = `${schemaName}.${table.name}`;\n delete pendingTables[key];\n\n if (tableName === 'schemaMigrations') return;\n\n const belongsToTable = makeBelongsToTable(schemaName, tableName);\n\n let primaryKey: { columns: string[]; name?: string } | undefined;\n for (const item of data.constraints) {\n if (belongsToTable(item) && item.primaryKey)\n primaryKey = { columns: item.primaryKey, name: item.name };\n }\n\n const tableIndexes = data.indexes.filter(belongsToTable);\n\n const tableConstraints = innerConstraints.reduce<TableData.Constraint[]>(\n (acc, item) => {\n const { references, check } = item;\n if (\n belongsToTable(item) &&\n (references || (check && !isColumnCheck(item)))\n ) {\n const constraint: TableData.Constraint = {\n references: references\n ? {\n columns: references.columns,\n fnOrTable: getReferencesTable(ctx, references),\n foreignColumns: references.foreignColumns,\n options: {\n match: matchMap[references.match],\n onUpdate: fkeyActionMap[references.onUpdate],\n onDelete: fkeyActionMap[references.onDelete],\n },\n }\n : undefined,\n check: check ? raw(check.expression) : undefined,\n };\n\n const name =\n item.name && item.name !== getConstraintName(tableName, constraint)\n ? item.name\n : undefined;\n\n if (name) {\n constraint.name = name;\n if (constraint.references?.options) {\n constraint.references.options.name = name;\n }\n }\n\n acc.push(constraint);\n }\n return acc;\n },\n [],\n );\n\n const columnChecks = innerConstraints.reduce<Record<string, string>>(\n (acc, item) => {\n if (belongsToTable(item) && isColumnCheck(item)) {\n acc[item.check.columns[0]] = item.check.expression;\n }\n return acc;\n },\n {},\n );\n\n const shape = makeColumnsShape(\n ctx,\n data,\n domains,\n tableName,\n columns,\n primaryKey,\n tableIndexes,\n tableConstraints,\n columnChecks,\n );\n\n ast.push({\n type: 'table',\n action: 'create',\n schema: schemaName === ctx.currentSchema ? undefined : schemaName,\n comment: table.comment,\n name: tableName,\n shape,\n noPrimaryKey: primaryKey ? 'error' : 'ignore',\n primaryKey:\n primaryKey && primaryKey.columns.length > 1\n ? {\n columns: primaryKey.columns,\n options:\n primaryKey.name === `${tableName}_pkey`\n ? undefined\n : { name: primaryKey.name },\n }\n : undefined,\n indexes: tableIndexes\n .filter(\n (index) =>\n index.columns.length > 1 ||\n index.columns.some((it) => 'expression' in it),\n )\n .map((index) => ({\n columns: index.columns.map((it) => ({\n ...('column' in it\n ? { column: it.column }\n : { expression: it.expression }),\n collate: it.collate,\n opclass: it.opclass,\n order: it.order,\n })),\n options: {\n name:\n index.name !== getIndexName(tableName, index.columns)\n ? index.name\n : undefined,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n nullsNotDistinct: index.nullsNotDistinct,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n },\n })),\n constraints: tableConstraints.filter(\n (it) => getConstraintKind(it) === 'constraint' || !isColumnFkey(it),\n ),\n });\n\n for (const otherKey in pendingTables) {\n const item = pendingTables[otherKey];\n if (item.dependsOn.delete(key) && item.dependsOn.size === 0) {\n pushTableAst(ctx, ast, data, domains, item.table, pendingTables);\n }\n }\n};\n\nconst constraintToAst = (\n ctx: StructureToAstCtx,\n item: DbStructure.Constraint,\n): TableData.Constraint => {\n const result: TableData.Constraint = {};\n\n const { references, check } = item;\n\n if (references) {\n const options: ForeignKeyOptions = {};\n result.references = {\n columns: references.columns,\n fnOrTable: getReferencesTable(ctx, references),\n foreignColumns: references.foreignColumns,\n options,\n };\n\n const match = matchMap[references.match];\n if (match) options.match = match;\n\n const onUpdate = fkeyActionMap[references.onUpdate];\n if (onUpdate) options.onUpdate = onUpdate;\n\n const onDelete = fkeyActionMap[references.onDelete];\n if (onDelete) options.onDelete = onDelete;\n }\n\n if (check) {\n result.check = raw(check.expression);\n }\n\n if (item.name && item.name !== getConstraintName(item.tableName, result)) {\n result.name = item.name;\n if (result.references?.options) {\n result.references.options.name = item.name;\n }\n }\n\n return result;\n};\n\nconst getReferencesTable = (\n ctx: StructureToAstCtx,\n references: DbStructure.References,\n) => {\n return references.foreignSchema !== ctx.currentSchema\n ? `${references.foreignSchema}.${references.foreignTable}`\n : references.foreignTable;\n};\n\nconst isColumnCheck = (\n it: DbStructure.Constraint,\n): it is DbStructure.Constraint & {\n check: DbStructure.Check & { columns: string[] };\n} => {\n return !it.references && it.check?.columns?.length === 1;\n};\n\nconst isColumnFkey = (\n it: TableData.Constraint,\n): it is TableData.Constraint & { references: TableData.References } => {\n return !it.check && it.references?.columns.length === 1;\n};\n\nconst viewToAst = (\n ctx: StructureToAstCtx,\n data: Data,\n domains: Domains,\n view: DbStructure.View,\n): RakeDbAst.View => {\n const shape = makeColumnsShape(ctx, data, domains, view.name, view.columns);\n\n const options: RakeDbAst.ViewOptions = {};\n if (view.isRecursive) options.recursive = true;\n\n if (view.with) {\n const withOptions: Record<string, unknown> = {};\n options.with = withOptions;\n for (const pair of view.with) {\n const [key, value] = pair.split('=');\n withOptions[toCamelCase(key) as 'checkOption'] =\n value === 'true' ? true : value === 'false' ? false : value;\n }\n }\n\n return {\n type: 'view',\n action: 'create',\n schema: view.schemaName === ctx.currentSchema ? undefined : view.schemaName,\n name: view.name,\n shape,\n sql: raw(view.sql),\n options,\n };\n};\n\nconst makeColumnsShape = (\n ctx: StructureToAstCtx,\n data: Data,\n domains: Domains,\n tableName: string,\n columns: DbStructure.Column[],\n primaryKey?: { columns: string[]; name?: string },\n indexes?: DbStructure.Index[],\n constraints?: TableData.Constraint[],\n checks?: Record<string, string>,\n): ColumnsShape => {\n const shape: ColumnsShape = {};\n\n for (let item of columns) {\n const isSerial = getIsSerial(item);\n if (isSerial) {\n item = { ...item, default: undefined };\n }\n\n let column = getColumn(ctx, data, domains, {\n ...item,\n type: item.type,\n isArray: item.isArray,\n isSerial,\n });\n\n if (item.identity) {\n column.data.identity = item.identity;\n if (!item.identity.always) delete column.data.identity?.always;\n }\n\n if (\n primaryKey?.columns?.length === 1 &&\n primaryKey?.columns[0] === item.name\n ) {\n column = column.primaryKey();\n }\n\n if (indexes) {\n const columnIndexes = indexes.filter(\n (it) =>\n it.columns.length === 1 &&\n 'column' in it.columns[0] &&\n it.columns[0].column === item.name,\n );\n for (const index of columnIndexes) {\n const options = index.columns[0];\n column = column.index({\n collate: options.collate,\n opclass: options.opclass,\n order: options.order,\n name:\n index.name !== getIndexName(tableName, index.columns)\n ? index.name\n : undefined,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n nullsNotDistinct: index.nullsNotDistinct,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n });\n }\n }\n\n if (constraints) {\n for (const it of constraints) {\n if (!isColumnFkey(it) || it.references.columns[0] !== item.name)\n continue;\n\n column = column.foreignKey(\n it.references.fnOrTable as string,\n it.references.foreignColumns[0],\n it.references.options,\n );\n }\n }\n\n const check = checks?.[item.name];\n if (check) {\n column.data.check = raw(check);\n }\n\n const camelCaseName = toCamelCase(item.name);\n\n if (ctx.snakeCase) {\n const snakeCaseName = toSnakeCase(camelCaseName);\n\n if (snakeCaseName !== item.name) column.data.name = item.name;\n } else if (camelCaseName !== item.name) {\n column.data.name = item.name;\n }\n\n shape[camelCaseName] = column;\n }\n\n return shape;\n};\n","import { RakeDbAst } from '../ast';\nimport {\n ColumnType,\n referencesArgsToCode,\n constraintToCode,\n indexToCode,\n primaryKeyToCode,\n getConstraintKind,\n constraintPropsToCode,\n TimestampTZColumn,\n TimestampColumn,\n} from 'pqb';\nimport {\n addCode,\n backtickQuote,\n Code,\n codeToString,\n ColumnTypesBase,\n isRaw,\n quoteObjectKey,\n rawToCode,\n singleQuote,\n} from 'orchid-core';\nimport { quoteSchemaTable, RakeDbConfig } from '../common';\n\nexport const astToMigration = <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n ast: RakeDbAst[],\n): ((importPath: string) => string) | undefined => {\n const first: Code[] = [];\n const tablesAndViews: Code[] = [];\n const constraints: Code[] = [];\n for (const item of ast) {\n if (item.type === 'schema' && item.action === 'create') {\n first.push(createSchema(item));\n } else if (item.type === 'extension' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createExtension(item));\n } else if (item.type === 'enum' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(createEnum(item));\n } else if (item.type === 'domain' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createDomain(item));\n } else if (item.type === 'table' && item.action === 'create') {\n tablesAndViews.push(createTable(config, item));\n } else if (item.type === 'view' && item.action === 'create') {\n tablesAndViews.push(createView(item));\n } else if (item.type === 'constraint') {\n if (constraints.length) constraints.push([]);\n constraints.push(...createConstraint(item));\n }\n }\n\n if (!first.length && !tablesAndViews.length && !constraints.length) return;\n\n let code = '';\n\n if (first.length) {\n code += `\nchange(async (db) => {\n${codeToString(first, ' ', ' ')}\n});\n`;\n }\n\n if (tablesAndViews.length) {\n for (const table of tablesAndViews) {\n code += `\nchange(async (db) => {\n${codeToString(table, ' ', ' ')}\n});\n`;\n }\n }\n\n if (constraints.length) {\n code += `\nchange(async (db) => {\n${codeToString(constraints, ' ', ' ')}\n});\n`;\n }\n\n return (importPath) => `import { change } from '${importPath}';\\n${code}`;\n};\n\nconst createSchema = (ast: RakeDbAst.Schema) => {\n return `await db.createSchema(${singleQuote(ast.name)});`;\n};\n\nconst createExtension = (ast: RakeDbAst.Extension): Code[] => {\n const code: Code[] = [`await db.createExtension(${singleQuote(ast.name)}`];\n if (ast.schema || ast.version) {\n addCode(code, ', {');\n if (ast.schema) {\n code.push([`schema: ${singleQuote(ast.schema)},`]);\n }\n if (ast.version) {\n code.push([`version: ${singleQuote(ast.version)},`]);\n }\n addCode(code, '}');\n }\n addCode(code, ');');\n return code;\n};\n\nconst createEnum = (ast: RakeDbAst.Enum) => {\n return `await db.createEnum(${quoteSchemaTable(ast)}, [${ast.values\n .map(singleQuote)\n .join(', ')}]);`;\n};\n\nconst createDomain = (ast: RakeDbAst.Domain) => {\n const code: Code[] = [\n `await db.createDomain(${quoteSchemaTable(\n ast,\n )}, (t) => ${ast.baseType.toCode('t')}`,\n ];\n\n if (ast.notNull || ast.collation || ast.default || ast.check) {\n const props: Code[] = [];\n if (ast.notNull) props.push(`notNull: true,`);\n if (ast.collation) props.push(`collation: ${singleQuote(ast.collation)},`);\n if (ast.default) props.push(`default: ${rawToCode('db', ast.default)},`);\n if (ast.check) props.push(`check: ${rawToCode('db', ast.check)},`);\n\n addCode(code, ', {');\n code.push(props);\n addCode(code, '}');\n }\n\n addCode(code, ');');\n return code;\n};\n\nconst createTable = <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n ast: RakeDbAst.Table,\n) => {\n const code: Code[] = [];\n addCode(code, `await db.createTable(${quoteSchemaTable(ast)}, (t) => ({`);\n\n const timestamps = getTimestampsInfo(config, ast, TimestampTZColumn);\n const timestampsNoTZ = getTimestampsInfo(config, ast, TimestampTZColumn);\n const hasAnyTimestamps =\n timestamps.hasTimestamps || timestampsNoTZ.hasTimestamps;\n const hasAnyCamelCaseTimestamps =\n timestamps.camelCaseTimestamps || timestampsNoTZ.camelCaseTimestamps;\n\n for (const key in ast.shape) {\n if (hasAnyTimestamps && (key === 'createdAt' || key === 'updatedAt'))\n continue;\n\n const line: Code[] = [`${quoteObjectKey(key)}: `];\n for (const part of ast.shape[key].toCode('t', true)) {\n addCode(line, part);\n }\n addCode(line, ',');\n code.push(line);\n }\n\n if (hasAnyTimestamps) {\n const key = timestamps.hasTimestamps ? 'timestamps' : 'timestampsNoTZ';\n\n code.push([\n `...t.${\n hasAnyCamelCaseTimestamps || config.snakeCase ? key : `${key}SnakeCase`\n }(),`,\n ]);\n }\n\n if (ast.primaryKey) {\n code.push([primaryKeyToCode(ast.primaryKey, 't')]);\n }\n\n if (ast.indexes) {\n for (const index of ast.indexes) {\n code.push(indexToCode(index, 't'));\n }\n }\n\n if (ast.constraints) {\n for (const constraint of ast.constraints) {\n code.push(constraintToCode(constraint, 't'));\n }\n }\n\n addCode(code, '}));');\n\n return code;\n};\n\nconst isTimestamp = (\n column: ColumnType | undefined,\n type: typeof TimestampTZColumn<number> | typeof TimestampColumn<number>,\n) => {\n if (!column) return false;\n\n const { default: def } = column.data;\n return (\n column instanceof type &&\n !column.data.isNullable &&\n def &&\n typeof def === 'object' &&\n isRaw(def) &&\n def.__raw === 'now()'\n );\n};\n\nconst getTimestampsInfo = <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n ast: RakeDbAst.Table,\n type: typeof TimestampTZColumn<number> | typeof TimestampColumn<number>,\n) => {\n let hasTimestamps =\n isTimestamp(ast.shape.createdAt, type) &&\n isTimestamp(ast.shape.updatedAt, type);\n\n const camelCaseTimestamps =\n !config.snakeCase &&\n hasTimestamps &&\n !ast.shape.createdAt?.data.name &&\n !ast.shape.updatedAt?.data.name;\n\n const snakeCaseTimestamps =\n hasTimestamps &&\n !camelCaseTimestamps &&\n ((!config.snakeCase &&\n ast.shape.createdAt?.data.name === 'created_at' &&\n ast.shape.updatedAt?.data.name === 'updated_at') ||\n (config.snakeCase &&\n !ast.shape.createdAt?.data.name &&\n !ast.shape.updatedAt?.data.name));\n\n if (!camelCaseTimestamps && !snakeCaseTimestamps) {\n hasTimestamps = false;\n }\n\n return {\n hasTimestamps,\n camelCaseTimestamps,\n snakeCaseTimestamps,\n };\n};\n\nconst createConstraint = (item: RakeDbAst.Constraint): Code => {\n const kind = getConstraintKind(item);\n const table = quoteSchemaTable({\n schema: item.tableSchema,\n name: item.tableName,\n });\n\n if (kind === 'foreignKey' && item.references) {\n return [\n `await db.addForeignKey(`,\n [`${table},`, ...referencesArgsToCode(item.references, item.name)],\n ');',\n ];\n }\n\n if (kind === 'check' && item.check) {\n return [`await db.addCheck(${table}, ${rawToCode('t', item.check)});`];\n }\n\n return [\n `await db.addConstraint(${table}, {`,\n constraintPropsToCode('t', item),\n '});',\n ];\n};\n\nconst createView = (ast: RakeDbAst.View) => {\n const code: Code[] = [`await db.createView(${quoteSchemaTable(ast)}`];\n\n const options: Code[] = [];\n if (ast.options.recursive) options.push('recursive: true,');\n\n const w = ast.options.with;\n if (w?.checkOption) options.push(`checkOption: '${w.checkOption}',`);\n if (w?.securityBarrier)\n options.push(`securityBarrier: ${w.securityBarrier},`);\n if (w?.securityInvoker)\n options.push(`securityInvoker: ${w.securityInvoker},`);\n\n if (options.length) {\n addCode(code, ', {');\n code.push(options, '}');\n }\n\n addCode(code, ', ');\n\n if (!ast.sql.__values) {\n addCode(code, backtickQuote(ast.sql.__raw));\n } else {\n addCode(code, rawToCode('db', ast.sql));\n }\n\n addCode(code, ');');\n return code;\n};\n","import { RakeDbConfig } from '../common';\nimport { Adapter, AdapterOptions } from 'pqb';\nimport { DbStructure } from './dbStructure';\nimport { structureToAst, StructureToAstCtx } from './structureToAst';\nimport { astToMigration } from './astToMigration';\nimport { makeFileTimeStamp, writeMigrationFile } from '../commands/generate';\nimport { saveMigratedVersion } from '../migration/manageMigratedVersions';\nimport { ColumnTypesBase } from 'orchid-core';\n\nexport const pullDbStructure = async <CT extends ColumnTypesBase>(\n options: AdapterOptions,\n config: RakeDbConfig<CT>,\n): Promise<void> => {\n const adapter = new Adapter(options);\n const currentSchema = adapter.schema || 'public';\n const db = new DbStructure(adapter);\n\n const ctx: StructureToAstCtx = {\n unsupportedTypes: {},\n snakeCase: config.snakeCase,\n currentSchema,\n };\n\n const ast = await structureToAst(ctx, db);\n await adapter.close();\n\n const result = astToMigration(config, ast);\n if (!result) return;\n\n const version = makeFileTimeStamp();\n await writeMigrationFile(config, version, 'pull', result);\n\n const silentQueries = Object.assign(adapter, {\n silentQuery: adapter.query,\n silentArrays: adapter.arrays,\n });\n await saveMigratedVersion(silentQueries, version, config);\n\n const cache = {};\n for (const item of ast) {\n await config?.appCodeUpdater?.process({\n ast: item,\n options,\n basePath: config.basePath,\n cache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n }\n\n await config?.appCodeUpdater?.afterAll({\n options,\n basePath: config.basePath,\n cache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n\n const unsupportedEntries = Object.entries(ctx.unsupportedTypes);\n const len = unsupportedEntries.length;\n if (len) {\n let count = 0;\n config.logger?.warn(\n `Found unsupported types:\\n${unsupportedEntries\n .map(([type, columns]) => {\n count += columns.length;\n return `- ${type} is used for column${\n columns.length > 1 ? 's' : ''\n } ${columns.join(', ')}`;\n })\n .join('\\n')}\\nAppend \\`as\\` method manually to ${\n count > 1 ? 'these' : 'this'\n } column${count > 1 ? 's' : ''} to treat ${\n count > 1 ? 'them' : 'it'\n } as other column type`,\n );\n }\n\n config.logger?.log('Database pulled successfully');\n adapter.close();\n};\n","import { ColumnTypesBase, MaybeArray, toArray } from 'orchid-core';\nimport { Adapter, AdapterOptions, createDb, DbResult } from 'pqb';\nimport { RakeDbConfig } from '../common';\nimport { join } from 'path';\nimport { readdir, stat, readFile } from 'fs/promises';\n\nexport const runRecurrentMigrations = async <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n): Promise<void> => {\n let dbs: DbResult<ColumnTypesBase>[] | undefined;\n let files = 0;\n\n await readdirRecursive(config.recurrentPath, async (path) => {\n files++;\n\n // init dbs lazily\n dbs ??= toArray(options).map((opts) =>\n createDb({ adapter: new Adapter(opts) }),\n );\n\n const sql = await readFile(path, 'utf-8');\n await Promise.all(\n dbs.map(async (db) => {\n await db.adapter.arrays(sql);\n }),\n );\n });\n\n if (dbs) {\n await Promise.all(dbs.map((db) => db.close()));\n\n if (files > 0) {\n config.logger?.log(\n `Applied ${files} recurrent migration file${files > 1 ? 's' : ''}`,\n );\n }\n }\n};\n\nconst readdirRecursive = async (\n dirPath: string,\n cb: (path: string) => Promise<void>,\n) => {\n const list = await readdir(dirPath).catch((err) => {\n if (err.code !== 'ENOENT') throw err;\n return;\n });\n\n if (!list) return;\n\n await Promise.all(\n list.map(async (item) => {\n const path = join(dirPath, item);\n const info = await stat(path);\n if (info.isDirectory()) {\n await readdirRecursive(path, cb);\n } else if (info.isFile() && path.endsWith('.sql')) {\n await cb(path);\n }\n }),\n );\n};\n","import { AdapterOptions, DefaultColumnTypes } from 'pqb';\nimport { ColumnTypesBase, MaybeArray, toArray } from 'orchid-core';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, redo, rollback } from './commands/migrateOrRollback';\nimport { InputRakeDbConfig, processRakeDbConfig, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\nimport { pullDbStructure } from './pull/pull';\nimport { RakeDbError } from './errors';\nimport { ChangeCallback, pushChange } from './migration/change';\nimport { runRecurrentMigrations } from './commands/recurrent';\n\nexport const rakeDb = <CT extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n partialConfig: InputRakeDbConfig<CT> = {},\n args: string[] = process.argv.slice(2),\n): ((fn: ChangeCallback<CT>) => void) & { promise: Promise<void> } => {\n const config = processRakeDbConfig(partialConfig);\n const promise = runCommand(options, config, args);\n\n return Object.assign(\n (fn: ChangeCallback<CT>) => {\n pushChange(fn as unknown as ChangeCallback);\n },\n {\n promise,\n },\n );\n};\n\nconst runCommand = async <CT extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = process.argv.slice(2),\n): Promise<void> => {\n const arg = args[0]?.split(':')[0];\n\n try {\n if (arg === 'create') {\n await createDb(options, config);\n } else if (arg === 'drop') {\n await dropDb(options, config);\n } else if (arg === 'reset') {\n await resetDb(options, config);\n } else if (arg === 'up' || arg === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (arg === 'down' || arg === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (arg === 'redo') {\n await redo(options, config, args.slice(1));\n } else if (arg === 'new') {\n await generate(config, args.slice(1));\n } else if (arg === 'pull') {\n await pullDbStructure(toArray(options)[0], config);\n } else if (config.commands[arg]) {\n await config.commands[arg](toArray(options), config, args.slice(1));\n } else if (arg !== 'rec' && arg !== 'recurrent') {\n config.logger?.log(help);\n }\n\n if (\n arg === 'migrate' ||\n arg === 'rec' ||\n arg === 'recurrent' ||\n arg === 'redo'\n ) {\n await runRecurrentMigrations(options, config);\n }\n } catch (err) {\n if (err instanceof RakeDbError) {\n config.logger?.error(err.message);\n process.exit(1);\n }\n throw err;\n }\n};\n\nconst help = `Usage: rake-db [command] [arguments]\n\nSee documentation at:\nhttps://orchid-orm.netlify.app/guide/migration-commands.html\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n new create new migration file, see below\n migrate migrate pending migrations, run recurrent\n up migrate pending migrations, don't run recurrent\n rollback or down rollback the last migrated\n redo rollback and migrate, run recurrent\n rec or recurrent run recurrent migrations\n no or unknown command prints this message\n \nMigrate arguments:\n no arguments run all pending migrations\n number run specific number of pending migrations\n\nRollback arguments:\n no arguments rollback one last applied migration\n number rollback specific number of applied migrations\n all rollback all applied migrations\n\nMigrate and rollback common arguments:\n --code run code updater, overrides \\`useCodeUpdater\\` option\n --code false do not run code updater\n`;\n"],"names":["path","__spreadValues","getCallerFilePath","defaultColumnTypes","__spreadProps","readdir","singleQuote","toSnakeCase","quote","isRaw","getRaw","toArray","EnumColumn","createTable","snakeCaseKey","getColumnTypes","getTableData","makeAst","astToQueries","__objRest","ColumnType","emptyObject","resetTableData","consumeColumnName","UnknownColumn","add","columnTypes","changeTableData","deepCompare","createView","raw","TransactionAdapter","logParamToLogObject","createDb","createSchema","createExtension","createEnum","createDomain","Adapter","pathToLog","emptyArray","url","db","mkdir","getImportPath","writeFile","sql","simplifyColumnDefault","_a","_b","columnsByType","instantiateColumn","DomainColumn","CustomTypeColumn","ArrayColumn","getConstraintKind","toCamelCase","codeToString","addCode","rawToCode","TimestampTZColumn","quoteObjectKey","primaryKeyToCode","indexToCode","constraintToCode","referencesArgsToCode","constraintPropsToCode","backtickQuote","readFile","join","stat"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFO,MAAM,uBAGT,GAAA;AAAA,EACF,cAAgB,EAAA,IAAA,CAAK,IAAK,CAAA,KAAA,EAAO,MAAM,YAAY,CAAA;AAAA,EACnD,eAAiB,EAAA,kBAAA;AAAA,EACjB,SAAW,EAAA,KAAA;AAAA,EACX,UAAU,EAAC;AAAA,EACX,MAAA,EAAQ,CAACA,KAAiB,KAAA;AACxB,IAAA,OAAO,OAAOA,KAAAA,CAAAA,CAAM,KAAM,CAAA,CAAC,GAAQ,KAAA;AACjC,MAAI,IAAA,GAAA,CAAI,SAAS,4BAA8B,EAAA;AAC7C,QAAA,OAAA,CAAQA,KAAI,CAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAM,MAAA,GAAA,CAAA;AAAA,OACR;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EACA,GAAK,EAAA,IAAA;AAAA,EACL,MAAQ,EAAA,OAAA;AAAA,EACR,cAAgB,EAAA,IAAA;AAClB,CAAA,CAAA;AAEa,MAAA,mBAAA,GAAsB,CACjC,MACqB,KAAA;AA1GvB,EAAA,IAAA,EAAA,CAAA;AA2GE,EAAM,MAAA,MAAA,GAASC,sCAAK,uBAA4B,CAAA,EAAA,MAAA,CAAA,CAAA;AAChD,EAAA,IAAI,CAAC,MAAO,CAAA,aAAA;AACV,IAAA,MAAA,CAAO,aAAgB,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,gBAAgB,WAAW,CAAA,CAAA;AAErE,EAAA,IACE,OAAO,cACN,KAAA,EAAE,eAAe,MAAW,CAAA,IAAA,CAAC,OAAO,SACrC,CAAA,EAAA;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,iEAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,CAAC,OAAO,GAAK,EAAA;AACf,IAAA,OAAO,MAAO,CAAA,MAAA,CAAA;AAAA,GAChB;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,QAAY,IAAA,CAAC,OAAO,QAAU,EAAA;AACxC,IAAA,MAAM,WAAWC,4BAAkB,EAAA,CAAA;AACnC,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,6EAAA;AAAA,OACF,CAAA;AAAA,KACF;AAEA,IAAO,MAAA,CAAA,QAAA,GAAW,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AACvC,IAAO,MAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAAA,GAC1C;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,UAAW,CAAA,MAAA,CAAO,cAAc,CAAG,EAAA;AAC3C,IAAA,MAAA,CAAO,iBAAiB,IAAK,CAAA,OAAA;AAAA,MAC3B,MAAO,CAAA,QAAA;AAAA,MACP,MAAO,CAAA,cAAA;AAAA,KACT,CAAA;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,UAAW,CAAA,MAAA,CAAO,aAAa,CAAG,EAAA;AAC1C,IAAA,MAAA,CAAO,gBAAgB,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,QAAA,EAAU,OAAO,aAAa,CAAA,CAAA;AAAA,GAC3E;AAEA,EAAA,IAAI,eAAe,MAAQ,EAAA;AACzB,IAAM,MAAA,KAAA,GAAA,CAAQ,EAAO,GAAA,MAAA,CAAA,SAAA,KAAP,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA;AAChC,IAAO,MAAA,CAAA,WAAA,GAAc,MAAM,WAAe,IAAAC,eAAA,CAAA;AAC1C,IAAA,IAAI,KAAM,CAAA,SAAA;AAAW,MAAA,MAAA,CAAO,SAAY,GAAA,IAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAA,MAAA,CAAO,WAAgB,GAAA,aAAA,IAAiB,MACrC,KAAA,OAAO,MAAO,CAAA,WAAA,KAAgB,UAC3B,GAAA,MAAA,CAAO,WAAY,CAAAA,eAAkB,CACrC,GAAA,MAAA,CAAO,WACX,CAAA,IAAAA,eAAA,CAAA;AAAA,GACJ;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,6BAAA,GAAgC,CAC3C,OACuC,KAAA;AACvC,EAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,IAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AACvC,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,GAAA,CAAI,QAAS,CAAA,KAAA,CAAM,CAAC,CAAA;AAAA,MAC9B,MAAM,GAAI,CAAA,QAAA;AAAA,KACZ,CAAA;AAAA,GACK,MAAA;AACL,IAAO,OAAA;AAAA,MACL,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,MAAM,OAAQ,CAAA,IAAA;AAAA,KAChB,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEa,MAAA,iBAAA,GAAoB,CAC/B,OAAA,EACA,GACmB,KAAA;AACnB,EAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,IAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAEvC,IAAA,IAAI,cAAc,GAAK,EAAA;AACrB,MAAI,GAAA,CAAA,QAAA,GAAW,IAAI,GAAI,CAAA,QAAA,CAAA,CAAA,CAAA;AAAA,KACzB;AAEA,IAAI,IAAA,GAAA,CAAI,SAAS,KAAW,CAAA,EAAA;AAC1B,MAAA,GAAA,CAAI,WAAW,GAAI,CAAA,IAAA,CAAA;AAAA,KACrB;AAEA,IAAI,IAAA,GAAA,CAAI,aAAa,KAAW,CAAA,EAAA;AAC9B,MAAA,GAAA,CAAI,WAAW,GAAI,CAAA,QAAA,CAAA;AAAA,KACrB;AAEA,IAAA,OAAOC,qCAAK,OAAL,CAAA,EAAA,EAAc,WAAa,EAAA,GAAA,CAAI,UAAW,EAAA,CAAA,CAAA;AAAA,GAC5C,MAAA;AACL,IAAA,OAAOH,sCACF,OACA,CAAA,EAAA,GAAA,CAAA,CAAA;AAAA,GAEP;AACF,CAAA,CAAA;AAEa,MAAA,4BAAA,GAA+B,OAC1C,OAAA,EACA,MACwC,KAAA;AACxC,EAAM,MAAA,OAAA,GAAU,MAAM,OAAQ,CAAA;AAAA,IAC5B;AAAA,MACE,OAAA,EAAS,CACP,6CAAA,EAAA,MAAA,GAAS,QAAW,GAAA,MAAA,CAAA,WAAA,CAAA;AAAA,MAEtB,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,OAAS,EAAA,IAAA;AAAA,KACX;AAAA,GACD,CAAA,CAAA;AAED,EAAI,IAAA,CAAC,QAAQ,OAAS,EAAA;AACpB,IAAA,OAAA;AAAA,GACF;AAEA,EAAM,MAAA,MAAA,GAAS,MAAM,OAAQ,CAAA;AAAA,IAC3B;AAAA,MACE,OAAS,EAAA,mBAAA;AAAA,MACT,IAAM,EAAA,MAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,UAAA;AAAA,MACT,GAAK,EAAA,CAAA;AAAA,KACP;AAAA,IACA;AAAA,MACE,OAAS,EAAA,uBAAA;AAAA,MACT,IAAM,EAAA,UAAA;AAAA,MACN,IAAM,EAAA,UAAA;AAAA,KACR;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,iBAAA,CAAkB,OAAS,EAAAG,eAAA,CAAAH,gBAAA,CAAA,EAAA,EAC7B,MAD6B,CAAA,EAAA;AAAA,IAEhC,QAAA,EAAU,OAAO,QAAY,IAAA,KAAA,CAAA;AAAA,GAC9B,CAAA,CAAA,CAAA;AACH,CAAA,CAAA;AAEa,MAAA,sBAAA,GAAyB,OACpC,EAAA,EACA,MACG,KAAA;AA1PL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA2PE,EAAI,IAAA;AACF,IAAA,MAAM,EAAG,CAAA,KAAA;AAAA,MACP,gBAAgB,eAAgB,CAAA;AAAA,QAC9B,MAAM,MAAO,CAAA,eAAA;AAAA,OACd,CAAA,CAAA,0BAAA,CAAA;AAAA,KACH,CAAA;AACA,IAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,GAAI,CAAA,wBAAA,CAAA,CAAA;AAAA,WACZ,GAAP,EAAA;AACA,IAAK,IAAA,GAAA,CAAgC,SAAS,OAAS,EAAA;AACrD,MAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,GAAI,CAAA,uBAAA,CAAA,CAAA;AAAA,KACd,MAAA;AACL,MAAM,MAAA,GAAA,CAAA;AAAA,KACR;AAAA,GACF;AACF,CAAA,CAAA;AAEa,MAAA,mBAAA,GAAsB,CACjC,KACgC,KAAA;AAChC,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,gBAAgB,CAAA,CAAA;AAC3C,EAAA,IAAI,UAAU,CAAI,CAAA,EAAA;AAChB,IAAM,MAAA,SAAA,GACJ,KAAM,CAAA,KAAK,CAAM,KAAA,GAAA,IAAO,MAAM,KAAK,CAAA,KAAM,GAAM,GAAA,KAAA,GAAQ,CAAI,GAAA,KAAA,CAAA;AAC7D,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA;AAClC,IAAA,OAAO,CAAC,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,KAAK,CAAG,EAAA,IAAA,CAAK,CAAC,CAAA,CAAE,WAAY,EAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GAC/D,MAAA;AACL,IAAA,OAAO,CAAC,KAAK,CAAA,CAAA;AAAA,GACf;AACF,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,CACzB,KACA,EAAA,KAAA,EACA,MACuB,KAAA;AACvB,EAAI,IAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC9B,EAAA,IAAI,KAAU,KAAA,CAAA,CAAA;AAAI,IAAA,OAAA;AAElB,EAAA,IAAI,MAAM,KAAK,CAAA,KAAM,GAAO,IAAA,KAAA,CAAM,KAAK,CAAM,KAAA,GAAA;AAAK,IAAA,KAAA,EAAA,CAAA;AAClD,EAAS,KAAA,IAAA,MAAA,CAAA;AAET,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAK,CAAK,IAAA,GAAA,IAAO,MAAM,KAAK,CAAA,KAAM,GAAM,GAAA,KAAA,GAAQ,CAAI,GAAA,KAAA,CAAA;AACxE,EAAM,MAAA,IAAA,GAAO,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAC9B,EAAA,OAAO,KAAK,CAAC,CAAA,CAAE,aAAgB,GAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAC7C,CAAA,CAAA;AAEa,MAAA,cAAA,GAAiB,CAAC,KAAsC,KAAA;AACnE,EAAO,OAAA,kBAAA,CAAmB,KAAO,EAAA,qBAAA,EAAuB,CAAC,CAAA,CAAA;AAC3D,CAAA,CAAA;AAEa,MAAA,gBAAA,GAAmB,CAAC,KAAsC,KAAA;AACrE,EAAO,OAAA,kBAAA,CAAmB,KAAO,EAAA,2BAAA,EAA6B,CAAC,CAAA,CAAA;AACjE,CAAA,CAAA;AAOa,MAAA,iBAAA,GAAoB,OAC/B,MAAA,EACA,EAC6B,KAAA;AAC7B,EAAM,MAAA,EAAE,gBAAmB,GAAA,MAAA,CAAA;AAE3B,EAAI,IAAA,KAAA,CAAA;AACJ,EAAI,IAAA;AACF,IAAQ,KAAA,GAAA,MAAMI,iBAAQ,cAAc,CAAA,CAAA;AAAA,WAC7B,CAAP,EAAA;AACA,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAEA,EAAM,MAAA,IAAA,GAAO,KAAK,OAAU,GAAA,QAAA,CAAA;AAC5B,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,QAAS,CAAA,IAAI,CAAE,CAAA,QAAA,CAAS,GAAG,CAAC,CAAC,CAAE,CAAA,GAAA;AAAA,IACrE,CAAC,IAAS,KAAA;AACR,MAAA,IAAI,CAAC,IAAA,CAAK,QAAS,CAAA,KAAK,CAAG,EAAA;AACzB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAyD,sDAAA,EAAA,IAAA,CAAA,CAAA;AAAA,SAC3D,CAAA;AAAA,OACF;AAEA,MAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,KAAA,CAAM,aAAa,CAAA,CAAA;AAC/C,MAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAoE,iEAAA,EAAA,IAAA,CAAA,CAAA;AAAA,SACtE,CAAA;AAAA,OACF;AAEA,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,IAAA,CAAK,OAAQ,CAAA,cAAA,EAAgB,IAAI,CAAA;AAAA,QACvC,OAAA,EAAS,eAAe,CAAC,CAAA;AAAA,OAC3B,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEO,MAAM,OAAU,GAAA,CAAC,GAAkB,KAAA,GAAA,CAAI,IAAK,EAAA,CAAA;AAEtC,MAAA,QAAA,GAAW,CAAC,GAAA,KAAkB,GAAI,CAAA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAO,KAAA,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA,GAAK,CAAE,CAAA,CAAA;AAWjE,MAAA,WAAA,GAAc,CAAC,OAAsB,KAAA;AAChD,EAAO,OAAA,OAAA,CAAQ,IAAI,CAAC,MAAA,KAAW,IAAI,MAAS,CAAA,CAAA,CAAA,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA;AACzD,CAAA,CAAA;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,MAAA;AAAA,EACA,IAAA;AACF,CAGM,KAAA;AACJ,EAAA,OAAO,MAAS,GAAA,CAAA,CAAA,EAAI,MAAY,CAAA,GAAA,EAAA,IAAA,CAAA,CAAA,CAAA,GAAU,CAAI,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAChD,CAAA,CAAA;AAEa,MAAA,yBAAA,GAA4B,CACvC,IACiC,KAAA;AACjC,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC9B,EAAA,OAAO,UAAU,CACb,CAAA,GAAA,CAAC,IAAK,CAAA,KAAA,CAAM,GAAG,KAAK,CAAA,EAAG,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAC,CAAC,CAC5C,GAAA,CAAC,QAAW,IAAI,CAAA,CAAA;AACtB,CAAA,CAAA;AAEO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,MAAA;AAAA,EACA,IAAA;AACF,CAGM,KAAA;AACJ,EAAA,OAAOC,sBAAY,CAAA,MAAA,GAAS,CAAG,EAAA,MAAA,CAAA,CAAA,EAAU,SAAS,IAAI,CAAA,CAAA;AACxD,CAAA,CAAA;AAEa,MAAA,qBAAA,GAAwB,CAAC,IAAiC,KAAA;AACrE,EAAA,MAAM,CAAC,MAAQ,EAAA,IAAI,CAAI,GAAA,yBAAA,CAA0B,KAAK,QAAQ,CAAA,CAAA;AAC9D,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,kCAAkC,eAAgB,CAAA;AAAA,MACtD,MAAA;AAAA,MACA,IAAA;AAAA,KACD,CAAA,CAAA,QAAA,CAAA;AAAA,IACD,KAAK,MAAQ,EAAA;AAEX,MAAK,IAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAC,KAAK,CAAM,KAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAC1D;AAAA,GACF,CAAA;AACF,CAAA;;AClZA,IAAI,iBAAmC,EAAC,CAAA;AAOjC,MAAM,eAAe,MAAM;AAChC,EAAA,cAAA,GAAiB,EAAC,CAAA;AACpB,CAAA,CAAA;AAEO,MAAM,oBAAoB,MAAM,cAAA,CAAA;AAChC,MAAM,UAAa,GAAA,CAAC,EAAuB,KAAA,cAAA,CAAe,KAAK,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;ACN3D,MAAA,eAAA,GAAkB,CAAC,IAAqB,KAAA;AACnD,EAAO,OAAA,IAAA,CAAK,KAAK,cAAiB,GAAA,CAAA,CAAA,EAAI,KAAK,KAAM,EAAA,CAAA,CAAA,CAAA,GAAO,KAAK,KAAM,EAAA,CAAA;AACrE,CAAA,CAAA;AAEO,MAAM,aAAgB,GAAA,CAC3B,IACA,EAAA,GAAA,EACA,SACG,KAAA;AACH,EAAA,OAAO,KAAK,IAAK,CAAA,IAAA,KAAS,SAAY,GAAAC,sBAAA,CAAY,GAAG,CAAI,GAAA,GAAA,CAAA,CAAA;AAC3D,CAAA,CAAA;AAEO,MAAM,cAAc,CACzB,IAAA,EACA,IACA,EAAA,MAAA,EACA,wBACA,SACW,KAAA;AACX,EAAA,MAAM,OAAO,CAAC,CAAA,CAAA,EAAI,IAAS,CAAA,EAAA,EAAA,eAAA,CAAgB,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAElD,EAAI,IAAA,IAAA,CAAK,KAAK,WAAa,EAAA;AACzB,IAAA,IAAA,CAAK,IAAK,CAAA,CAAA,YAAA,EAAe,IAAK,CAAA,IAAA,CAAK,WAAa,CAAA,CAAA,CAAA,CAAA;AAAA,GAClD;AAEA,EAAI,IAAA,IAAA,CAAK,KAAK,OAAS,EAAA;AACrB,IAAA,IAAA,CAAK,KAAK,CAAW,QAAA,EAAAC,SAAA,CAAM,IAAK,CAAA,IAAA,CAAK,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GACjD;AAEA,EAAI,IAAA,IAAA,CAAK,KAAK,QAAU,EAAA;AACtB,IAAA,IAAA,CAAK,IAAK,CAAA,aAAA,CAAc,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAAA,GAC7C;AAEA,EAAA,IAAI,IAAK,CAAA,IAAA,CAAK,YAAgB,IAAA,CAAC,sBAAwB,EAAA;AACrD,IAAA,IAAA,CAAK,KAAK,aAAa,CAAA,CAAA;AAAA,GACd,MAAA,IAAA,CAAC,IAAK,CAAA,IAAA,CAAK,UAAY,EAAA;AAChC,IAAA,IAAA,CAAK,KAAK,UAAU,CAAA,CAAA;AAAA,GACtB;AAEA,EAAI,IAAA,IAAA,CAAK,KAAK,KAAO,EAAA;AACnB,IAAA,IAAA,CAAK,KAAK,UAAW,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,EAAO,MAAM,CAAC,CAAA,CAAA;AAAA,GAC/C;AAEA,EAAI,IAAA,IAAA,CAAK,IAAK,CAAA,OAAA,KAAY,KAAW,CAAA,EAAA;AACnC,IAAA,IACE,OAAO,IAAA,CAAK,IAAK,CAAA,OAAA,KAAY,QAC7B,IAAA,IAAA,CAAK,IAAK,CAAA,OAAA,IACVC,gBAAM,CAAA,IAAA,CAAK,IAAK,CAAA,OAAO,CACvB,EAAA;AACA,MAAA,IAAA,CAAK,KAAK,CAAW,QAAA,EAAAC,UAAA,CAAO,KAAK,IAAK,CAAA,OAAA,EAAS,MAAM,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,KACnD,MAAA;AACL,MAAA,IAAA,CAAK,KAAK,CAAW,QAAA,EAAAF,SAAA,CAAM,IAAK,CAAA,IAAA,CAAK,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,KACjD;AAAA,GACF;AAEA,EAAM,MAAA,EAAE,WAAY,EAAA,GAAI,IAAK,CAAA,IAAA,CAAA;AAC7B,EAAA,IAAI,WAAa,EAAA;AACf,IAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AACpC,MAAA,IAAI,WAAW,IAAM,EAAA;AACnB,QAAK,IAAA,CAAA,IAAA,CAAK,CAAe,YAAA,EAAA,UAAA,CAAW,IAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAC7C;AAEA,MAAK,IAAA,CAAA,IAAA;AAAA,QACH,eAAA;AAAA,UACE;AAAA,YACE,SAAS,UAAW,CAAA,OAAA;AAAA,YACpB,SAAW,EAAA,IAAA,IAAQ,UAAa,GAAA,UAAA,CAAW,KAAK,UAAW,CAAA,KAAA;AAAA,YAC3D,gBAAgB,UAAW,CAAA,OAAA;AAAA,YAC3B,OAAS,EAAA,UAAA;AAAA,WACX;AAAA,UACA,SAAA;AAAA,SACF;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA;AACtB,CAAA,CAAA;AAEa,MAAA,aAAA,GAAgB,CAAC,QAAiC,KAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,qBAAqB,QAAQ,CAAA,CAAA;AAC7C,EAAA,OAAO,aAAa,QAAS,CAAA,MAAA,GAAS,WAAW,YAC/C,CAAA,YAAA,EAAA,OAAA,GAAU,KAAK,OAAa,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAEhC,CAAA,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,IAAoC,KAAA;AAChE,EAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,EAAA,IAAI,IAAK,CAAA,QAAA;AAAU,IAAK,IAAA,CAAA,IAAA,CAAK,CAAM,GAAA,EAAA,IAAA,CAAK,QAAU,CAAA,CAAA,CAAA,CAAA;AAClD,EAAA,IAAI,KAAK,WAAgB,KAAA,KAAA,CAAA;AACvB,IAAK,IAAA,CAAA,IAAA,CAAK,CAAgB,aAAA,EAAA,IAAA,CAAK,WAAa,CAAA,CAAA,CAAA,CAAA;AAC9C,EAAA,IAAI,KAAK,GAAQ,KAAA,KAAA,CAAA;AAAW,IAAK,IAAA,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,IAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA;AAC5D,EAAA,IAAI,KAAK,GAAQ,KAAA,KAAA,CAAA;AAAW,IAAK,IAAA,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,IAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA;AAC5D,EAAA,IAAI,KAAK,SAAc,KAAA,KAAA,CAAA;AAAW,IAAK,IAAA,CAAA,IAAA,CAAK,CAAc,WAAA,EAAA,IAAA,CAAK,SAAW,CAAA,CAAA,CAAA,CAAA;AAC1E,EAAA,IAAI,KAAK,KAAU,KAAA,KAAA,CAAA;AAAW,IAAK,IAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,IAAA,CAAK,KAAO,CAAA,CAAA,CAAA,CAAA;AAC7D,EAAA,IAAI,IAAK,CAAA,KAAA;AAAO,IAAA,IAAA,CAAK,KAAK,CAAO,KAAA,CAAA,CAAA,CAAA;AACjC,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAA,MAAM,CAAC,MAAQ,EAAA,KAAK,CAAI,GAAA,yBAAA,CAA0B,KAAK,OAAO,CAAA,CAAA;AAC9D,IAAK,IAAA,CAAA,IAAA,CAAK,YAAY,eAAgB,CAAA,EAAE,QAAQ,IAAM,EAAA,KAAA,EAAO,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GAClE;AACA,EAAO,OAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA;AACtB,CAAA,CAAA;AAEO,MAAM,cAAiB,GAAA,CAC5B,OACA,EAAA,IAAA,EACA,IACG,KAAA;AACH,EAAI,IAAA,IAAA,CAAK,KAAK,OAAS,EAAA;AACrB,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,GAAG,IAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,CAAC,KAAW,MAAA;AAAA,QACnC,SAAS,CAACJ,eAAA,CAAAH,gBAAA,CAAA,EAAA,EAAK,QAAL,EAAY,MAAA,EAAQ,MAAM,CAAA,CAAA;AAAA,QACpC,OAAS,EAAA,KAAA;AAAA,OACT,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEO,MAAM,gBAAmB,GAAA,CAC9B,QACA,EAAA,IAAA,EACA,IACG,KAAA;AACH,EAAI,IAAA,IAAA,CAAK,KAAK,OAAS,EAAA;AACrB,IAAS,QAAA,CAAA,IAAA,CAAK,EAAE,MAAQ,EAAA,IAAA,EAAM,SAAS,IAAK,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,GAC5D;AACF,CAAA,CAAA;AAEa,MAAA,kBAAA,GAAqB,CAChC,SACiC,KAAA;AACjC,EAAI,IAAA,OAAO,cAAc,QAAU,EAAA;AACjC,IAAA,OAAO,0BAA0B,SAAS,CAAA,CAAA;AAAA,GAC5C;AAEA,EAAM,MAAA,IAAA,GAAO,KAAK,SAAA,EAAa,GAAA,CAAA;AAC/B,EAAA,OAAO,CAAC,IAAA,CAAK,MAAQ,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AACjC,CAAA,CAAA;AAEa,MAAA,iBAAA,GAAoB,CAC/B,KAAA,EACA,UACG,KAAA;AACH,EAAA,IAAI,UAAW,CAAA,UAAA;AACb,IAAA,OAAO,GAAG,KAAS,CAAA,CAAA,EAAA,UAAA,CAAW,UAAW,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAA,KAAA,CAAA,CAAA;AAC3D,EAAA,IAAI,UAAW,CAAA,KAAA;AAAO,IAAA,OAAO,CAAG,EAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AAChC,EAAA,OAAO,CAAG,EAAA,KAAA,CAAA,WAAA,CAAA,CAAA;AACZ,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,EAAE,IAAA,IACF,EACA,EAAA,UAAA,EACA,QACA,SACG,KAAA;AACH,EAAA,MAAM,cAAiB,GAAA,UAAA,CAAW,IAAQ,IAAA,iBAAA,CAAkB,MAAM,UAAU,CAAA,CAAA;AAE5E,EAAA,IAAI,CAAC,EAAI,EAAA;AACP,IAAM,MAAA,EAAE,UAAa,GAAA,UAAA,CAAA;AACrB,IAAA,OAAO,CAAe,YAAA,EAAA,cAAA,CAAA,CAAA,EAAkB,QAAW,GAAA,CAAA,CAAA,EAAI,QAAa,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GACtE;AAEA,EAAM,MAAA,GAAA,GAAM,CAAC,CAAA,YAAA,EAAe,cAAiB,CAAA,CAAA,CAAA,CAAA,CAAA;AAE7C,EAAA,IAAI,WAAW,UAAY,EAAA;AACzB,IAAA,GAAA,CAAI,IAAK,CAAA,eAAA,CAAgB,UAAW,CAAA,UAAA,EAAY,SAAS,CAAC,CAAA,CAAA;AAAA,GAC5D;AAEA,EAAA,IAAI,WAAW,KAAO,EAAA;AACpB,IAAA,GAAA,CAAI,IAAK,CAAA,UAAA,CAAW,UAAW,CAAA,KAAA,EAAO,MAAM,CAAC,CAAA,CAAA;AAAA,GAC/C;AAEA,EAAO,OAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AACrB,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,KAAA,EAAsB,MAAsB,KAAA;AAC9D,EAAO,OAAA,CAAA,OAAA,EAAUS,UAAO,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA;AACvC,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAA4B,SAAwB,KAAA;AAC3E,EAAA,OAAO,CAAgB,aAAA,EAAA,WAAA,CAAY,IAAK,CAAA,OAAO,CAAM,CAAA,EAAA,EAAA,eAAA;AAAA,IACnD,IAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,UAAA,EACA,SACG,KAAA;AACH,EAAA,MAAM,CAAC,MAAQ,EAAA,KAAK,CAAI,GAAA,kBAAA,CAAmB,WAAW,SAAS,CAAA,CAAA;AAE/D,EAAA,MAAM,GAAgB,GAAA;AAAA,IACpB,cAAc,eAAgB,CAAA,EAAE,QAAQ,IAAM,EAAA,KAAA,EAAO,CAAK,CAAA,CAAA,EAAA,WAAA;AAAA,MACxD,YACI,UAAW,CAAA,cAAA,CAAe,GAAI,CAAAH,sBAAW,IACzC,UAAW,CAAA,cAAA;AAAA,KACjB,CAAA,CAAA,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,EAAE,SAAY,GAAA,UAAA,CAAA;AACpB,EAAA,IAAI,mCAAS,KAAO,EAAA;AAClB,IAAA,GAAA,CAAI,IAAK,CAAA,CAAA,MAAA,EAAS,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAM,WAAe,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAClD;AAEA,EAAA,IAAI,mCAAS,QAAU,EAAA;AACrB,IAAA,GAAA,CAAI,IAAK,CAAA,CAAA,UAAA,EAAa,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA,CAAS,WAAe,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACzD;AAEA,EAAA,IAAI,mCAAS,QAAU,EAAA;AACrB,IAAA,GAAA,CAAI,IAAK,CAAA,CAAA,UAAA,EAAa,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA,CAAS,WAAe,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACzD;AAEA,EAAO,OAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AACrB,CAAA,CAAA;AAEa,MAAA,YAAA,GAAe,CAC1B,KAAA,EACA,OACG,KAAA;AACH,EAAO,OAAA,CAAA,EAAG,SAAS,OAChB,CAAA,GAAA;AAAA,IAAI,CAAC,EAAI,KAAA;AAvOd,MAAA,IAAA,EAAA,CAAA;AAwOM,MAAY,OAAA,QAAA,IAAA,EAAA,GACR,EAAG,CAAA,MAAA,GAAA,CAAA,CACH,EAAG,GAAA,EAAA,CAAA,UAAA,CAAW,MAAM,MAAM,CAAA,KAA1B,IAA6B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,GAAQ,CAAA,KAAA,YAAA,CAAA;AAAA,KAAA;AAAA,GAChD,CACC,KAAK,GAAG,CAAA,CAAA,IAAA,CAAA,CAAA;AACb,CAAA,CAAA;AAEO,MAAM,iBAAiB,CAC5B,EAAA,EACA,EAAE,MAAQ,EAAA,IAAA,IACV,OACU,KAAA;AACV,EAAA,OAAO,QAAQ,GAAI,CAAA,CAAC,EAAE,OAAA,EAAS,SAAc,KAAA;AAC3C,IAAA,MAAM,SAAY,GAAA,OAAA,CAAQ,IAAQ,IAAA,YAAA,CAAa,MAAM,OAAO,CAAA,CAAA;AAE5D,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAO,OAAA;AAAA,QACL,MAAM,CAAe,YAAA,EAAA,SAAA,CAAA,CAAA,EACnB,QAAQ,QAAW,GAAA,CAAA,CAAA,EAAI,QAAQ,QAAa,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,QAE9C,QAAQ,EAAC;AAAA,OACX,CAAA;AAAA,KACF;AAEA,IAAA,MAAM,SAAoB,EAAC,CAAA;AAE3B,IAAM,MAAA,GAAA,GAAgB,CAAC,QAAQ,CAAA,CAAA;AAE/B,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAA,GAAA,CAAI,KAAK,QAAQ,CAAA,CAAA;AAAA,KACnB;AAEA,IAAI,GAAA,CAAA,IAAA,CAAK,UAAU,SAAiB,CAAA,KAAA,EAAA,eAAA,CAAgB,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAG,CAAA,CAAA,CAAA,CAAA;AAEvE,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAI,GAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,MAAM,aAAuB,EAAC,CAAA;AAE9B,IAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,MAAA,MAAM,SAAsB,GAAA;AAAA,QAC1B,YAAY,MAAS,GAAA,CAAA,CAAA,EAAI,MAAO,CAAA,MAAA,CAAA,CAAA,CAAA,GAAY,IAAI,MAAO,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,OACzD,CAAA;AAEA,MAAA,IAAI,OAAO,OAAS,EAAA;AAClB,QAAU,SAAA,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,MAAA,CAAO,OAAU,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAC9C;AAEA,MAAA,IAAI,OAAO,OAAS,EAAA;AAClB,QAAU,SAAA,CAAA,IAAA,CAAK,OAAO,OAAO,CAAA,CAAA;AAAA,OAC/B;AAEA,MAAA,IAAI,OAAO,KAAO,EAAA;AAChB,QAAU,SAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAAA,OAC7B;AAEA,MAAA,UAAA,CAAW,IAAK,CAAA,SAAA,CAAU,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA;AAAA,KACpC,CAAA,CAAA;AAED,IAAA,GAAA,CAAI,IAAK,CAAA,CAAA,CAAA,EAAI,UAAW,CAAA,IAAA,CAAK,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAErC,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAI,GAAA,CAAA,IAAA;AAAA,QACF,CAAY,SAAA,EAAAI,kBAAA,CAAQ,OAAQ,CAAA,OAAO,CAChC,CAAA,GAAA,CAAI,CAAC,MAAA,KAAW,CAAI,CAAA,EAAA,MAAA,CAAA,CAAA,CAAS,CAC7B,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,OACd,CAAA;AAAA,KACF;AAEA,IAAA,IAAI,QAAQ,gBAAkB,EAAA;AAC5B,MAAA,GAAA,CAAI,KAAK,CAAoB,kBAAA,CAAA,CAAA,CAAA;AAAA,KAC/B;AAEA,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAI,GAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,OAAA,CAAQ,IAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,MAAI,GAAA,CAAA,IAAA,CAAK,CAAc,WAAA,EAAA,OAAA,CAAQ,UAAY,CAAA,CAAA,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAI,GAAA,CAAA,IAAA;AAAA,QACF,SACE,OAAO,OAAA,CAAQ,KAAU,KAAA,QAAA,IACzB,QAAQ,KACR,IAAAF,gBAAA,CAAM,OAAQ,CAAA,KAAK,IACfC,UAAO,CAAA,OAAA,CAAQ,KAAO,EAAA,MAAM,IAC5B,OAAQ,CAAA,KAAA,CAAA,CAAA;AAAA,OAEhB,CAAA;AAAA,KACF;AAEA,IAAA,OAAO,EAAE,IAAM,EAAA,GAAA,CAAI,IAAK,CAAA,GAAG,GAAG,MAAO,EAAA,CAAA;AAAA,GACtC,CAAA,CAAA;AACH,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,WAAA,EACA,QACU,KAAA;AACV,EAAA,OAAO,SAAS,GAAI,CAAA,CAAC,EAAE,MAAA,EAAQ,SAAe,MAAA;AAAA,IAC5C,MAAM,CAAqB,kBAAA,EAAA,eAAA;AAAA,MACzB,WAAA;AAAA,KACF,CAAA,EAAA,EAAM,MAAc,CAAA,KAAA,EAAAF,SAAA,CAAM,OAAO,CAAA,CAAA,CAAA;AAAA,IACjC,QAAQ,EAAC;AAAA,GACT,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,UACG,KAAA;AAxVL,EAAA,IAAA,EAAA,CAAA;AAyVE,EAAM,MAAA,IAAA,GAAA,CAAO,EAAW,GAAA,UAAA,CAAA,OAAA,KAAX,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA;AACjC,EAAA,OAAO,CAAG,EAAA,IAAA,GAAO,CAAe,YAAA,EAAA,IAAA,CAAA,EAAA,CAAA,GAAW,EAAkB,CAAA,aAAA,EAAA,WAAA;AAAA,IAC3D,UAAW,CAAA,OAAA;AAAA,GACb,CAAA,CAAA,CAAA,CAAA;AACF,CAAA;;AC3VO,MAAM,YAAe,GAAA;AAAA,EAC1B,KAAK,IAAc,EAAA;AAEjB,IAAA,OAAO,IAAII,cAAA,CAAW,IAAM,EAAA,EAAsC,CAAA,CAAA;AAAA,GACpE;AACF,CAAA;;ACPO,MAAM,oBAAoB,KAAM,CAAA;AAAC,CAAA;AAEjC,MAAM,qBAAqB,WAAY,CAAA;AAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiDxC,MAAMC,gBAAc,OAKzB,SAAA,EACA,EACA,EAAA,SAAA,EACA,SACA,EAC6C,KAAA;AA7D/C,EAAA,IAAA,EAAA,CAAA;AA8DE,EAAA,MAAM,YACJ,WAAe,IAAA,OAAA,GAAU,OAAQ,CAAA,SAAA,GAAY,UAAU,OAAQ,CAAA,SAAA,CAAA;AAEjE,EAAA,MAAM,QAAQ,MAAO,CAAA,MAAA;AAAA,IACnB,MAAA,CAAO,MAAO,CAAA,SAAA,CAAU,WAAW,CAAA;AAAA,IACnC,YAAA;AAAA,GACF,CAAA;AACA,EAAA,KAAA,CAAMC,uBAAY,CAAI,GAAA,SAAA,CAAA;AAEtB,EAAM,MAAA,KAAA,GAAQC,mBAAe,KAAO,EAAA,EAAA,EAAA,CAAI,eAAU,OAAQ,CAAA,SAAA,KAAlB,mBAA6B,MAAM,CAAA,CAAA;AAC3E,EAAA,MAAM,YAAYC,gBAAa,EAAA,CAAA;AAC/B,EAAA,MAAM,GAAM,GAAAC,SAAA;AAAA,IACV,EAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAU,OAAQ,CAAA,YAAA;AAAA,GACpB,CAAA;AAEA,EAAA,kBAAA,CAAmB,GAAG,CAAA,CAAA;AAEtB,EAAM,MAAA,OAAA,GAAUC,cAAa,CAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AAC3C,EAAA,KAAA,MAAW,MAAsB,OAAS,EAAA;AAArC,IAAA,MAAA,EAAA,GAAA,EAAA,EAAQ,EArFf,IAAA,EAAA,GAqFO,EAAiB,EAAA,KAAA,GAAAC,WAAA,CAAjB,IAAiB,CAAT,MAAA,CAAA,CAAA,CAAA;AACX,IAAA,MAAM,MAAS,GAAA,MAAM,SAAU,CAAA,OAAA,CAAQ,OAAO,KAAK,CAAA,CAAA;AACnD,IAAO,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAA,CAAA;AAAA,GACT;AAEA,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AAE/B,EAAI,IAAA,KAAA,CAAA;AAEJ,EAAO,OAAA;AAAA,IACL,IAAI,KAA0B,GAAA;AAC5B,MAAQ,OAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAA,KAAA,GAAW,SAAmC,CAAA,SAAA,EAAW,KAAO,EAAA;AAAA,QACtE,YAAA,EAAc,OAAQ,CAAA,YAAA,GAAe,QAAW,GAAA,KAAA,CAAA;AAAA,QAChD,WAAW,OAAQ,CAAA,SAAA;AAAA,OACpB,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAMF,YAAU,CACd,EAAA,EACA,WACA,KACA,EAAA,SAAA,EACA,SACA,YACoB,KAAA;AACpB,EAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,EAAA,KAAA,MAAW,OAAO,KAAO,EAAA;AACvB,IAAM,MAAA,MAAA,GAAS,MAAM,GAAG,CAAA,CAAA;AACxB,IAAI,IAAA,MAAA,CAAO,KAAK,YAAc,EAAA;AAC5B,MAAA,UAAA,CAAW,KAAK,GAAG,CAAA,CAAA;AAAA,KACrB;AAAA,GACF;AAEA,EAAM,MAAA,EAAE,YAAe,GAAA,SAAA,CAAA;AACvB,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAI,0BAA0B,SAAS,CAAA,CAAA;AAE3D,EAAO,OAAAb,eAAA,CAAAH,gBAAA,CAAAG,eAAA,CAAAH,gBAAA,CAAA;AAAA,IACL,IAAM,EAAA,OAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,MAAA;AAAA,IACA,IAAM,EAAA,KAAA;AAAA,IACN,KAAA;AAAA,GAAA,EACG,SANE,CAAA,EAAA;AAAA,IAOL,UAAA,EACE,WAAW,MAAU,IAAA,CAAA,GACjB,aACA,UACA,GAAAG,eAAA,CAAAH,gBAAA,CAAA,EAAA,EAAK,aAAL,EAAiB,OAAA,EAAS,CAAC,GAAG,UAAA,EAAY,GAAG,UAAW,CAAA,OAAO,GAC/D,CAAA,GAAA,EAAE,SAAS,UAAW,EAAA;AAAA,GAAA,CAAA,EACzB,OAbE,CAAA,EAAA;AAAA,IAcL,YAAc,EAAA,OAAA,CAAQ,YAAe,GAAA,QAAA,GAAW,YAAgB,IAAA,OAAA;AAAA,GAClE,CAAA,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,CAAC,GAAyB,KAAA;AA7IrD,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA8IE,EAAI,IAAA,GAAA,CAAI,iBAAiB,QAAU,EAAA;AACjC,IAAA,IAAI,gBAAgB,CAAC,EAAA,CAAC,eAAI,UAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,YAAhB,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAC/C,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAW,KAAA,MAAA,GAAA,IAAO,IAAI,KAAO,EAAA;AAC3B,QAAA,IAAI,GAAI,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,KAAK,YAAc,EAAA;AACpC,UAAgB,aAAA,GAAA,IAAA,CAAA;AAChB,UAAA,MAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA,MAAM,QAAQ,IAAI,YAAA;AAAA,QAChB,SAAS,GAAI,CAAA,IAAA,CAAA;AAAA,iFAAA,CAAA;AAAA,OACf,CAAA;AACA,MAAI,IAAA,GAAA,CAAI,iBAAiB,OAAS,EAAA;AAChC,QAAM,MAAA,KAAA,CAAA;AAAA,OACD,MAAA;AACL,QAAQ,OAAA,CAAA,IAAA,CAAK,MAAM,OAAO,CAAA,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAMiB,cAAA,GAAe,CACnB,GAAA,EACA,SACiB,KAAA;AAzKnB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA0KE,EAAA,MAAM,UAAwB,EAAC,CAAA;AAC/B,EAAM,MAAA,EAAE,OAAU,GAAA,GAAA,CAAA;AAElB,EAAA,KAAA,MAAW,OAAO,KAAO,EAAA;AACvB,IAAM,MAAA,IAAA,GAAO,MAAM,GAAG,CAAA,CAAA;AACtB,IAAA,IAAI,EAAE,IAAgB,YAAAN,cAAA,CAAA;AAAa,MAAA,SAAA;AAEnC,IAAQ,OAAA,CAAA,IAAA,CAAK,qBAAsB,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,GAC1C;AAEA,EAAI,IAAA,GAAA,CAAI,WAAW,MAAQ,EAAA;AACzB,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,IAAA,EAAM,cAAc,eAAgB,CAAA,GAAG,IACrC,GAAI,CAAA,QAAA,GAAW,CAAI,CAAA,EAAA,GAAA,CAAI,QAAa,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,KAEvC,CAAA,CAAA;AACD,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,QAAkB,EAAC,CAAA;AACzB,EAAA,MAAM,SAAoB,EAAC,CAAA;AAC3B,EAAA,MAAM,UAA6B,EAAC,CAAA;AACpC,EAAA,MAAM,WAA4B,EAAC,CAAA;AAEnC,EAAA,KAAA,MAAW,OAAO,KAAO,EAAA;AACvB,IAAM,MAAA,IAAA,GAAO,MAAM,GAAG,CAAA,CAAA;AACtB,IAAA,MAAM,IAAO,GAAA,aAAA,CAAc,IAAM,EAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AAC/C,IAAe,cAAA,CAAA,OAAA,EAAS,MAAM,IAAI,CAAA,CAAA;AAClC,IAAiB,gBAAA,CAAA,QAAA,EAAU,MAAM,IAAI,CAAA,CAAA;AACrC,IAAM,KAAA,CAAA,IAAA;AAAA,MACJ,CAAA;AAAA,EAAO,EAAA,WAAA,CAAY,MAAM,IAAM,EAAA,MAAA,EAAQ,CAAC,CAAC,GAAA,CAAI,YAAY,SAAS,CAAA,CAAA,CAAA;AAAA,KACpE,CAAA;AAAA,GACF;AAEA,EAAA,IAAI,IAAI,UAAY,EAAA;AAClB,IAAM,KAAA,CAAA,IAAA;AAAA,MACJ,CAAA;AAAA,EAAA,EAAO,eAAgB,CAAA;AAAA,QACrB,OAAA,EAAS,IAAI,UAAW,CAAA,OAAA;AAAA,QACxB,OAAA,EAAS,GAAI,CAAA,UAAA,CAAW,OAAQ,CAAA,GAAA;AAAA,UAAI,CAAC,GACnC,KAAA,aAAA,CAAc,MAAM,GAAG,CAAA,EAAG,KAAK,SAAS,CAAA;AAAA,SAC1C;AAAA,OACD,CAAA,CAAA,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAEA,EAAA,CAAA,EAAA,GAAA,GAAA,CAAI,WAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,OAAQ,CAAA,CAAC,IAAS,KAAA;AACjC,IAAM,KAAA,CAAA,IAAA;AAAA,MACJ,CAAA;AAAA,EAAO,EAAA,eAAA;AAAA,QACL,GAAA;AAAA,QACA,IAAA;AAAA,QACAR,qCACK,IADL,CAAA,EAAA;AAAA,UAEE,UAAY,EAAA,IAAA,CAAK,UACb,GAAAA,eAAA,CAAAH,gBAAA,CAAA,EAAA,EACK,KAAK,UADV,CAAA,EAAA;AAAA,YAEE,OAAA,EAAS,IAAK,CAAA,UAAA,CAAW,OAAQ,CAAA,GAAA;AAAA,cAAI,CAAC,MACpC,KAAA,aAAA,CAAc,MAAM,MAAM,CAAA,EAAG,QAAQ,SAAS,CAAA;AAAA,aAChD;AAAA,WAEF,CAAA,GAAA,KAAA,CAAA;AAAA,SACN,CAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEA,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN,GAAA,CAAA,CAAI,SAAI,OAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,IAAI,CAAC,KAAA,KAAWG,qCAC5B,KAD4B,CAAA,EAAA;AAAA,MAE/B,OAAA,EAAS,MAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAU,KAAAH,gBAAA,CAAAA,gBAAA,CAAA,EAAA,EACjC,IACC,CAAA,EAAA,QAAA,IAAY,IACZ,GAAA;AAAA,QACE,MAAA,EAAQ,cAAc,KAAM,CAAA,IAAA,CAAK,MAAM,CAAG,EAAA,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,OAClE,GACA,EACJ,CAAA,CAAA;AAAA,YACG,EAAC;AAAA,GACV,CAAA;AAEA,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN;AAAA,MACE,MAAM,CAAgB,aAAA,EAAA,eAAA,CAAgB,GAAG,CAAM,CAAA,EAAA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA,CAAA;AAAA,CAAA,CAAA;AAAA,MAC7D,MAAA;AAAA,KACF;AAAA,IACA,GAAG,cAAA,CAAe,IAAM,EAAA,GAAA,EAAK,OAAO,CAAA;AAAA,IACpC,GAAG,eAAgB,CAAA,GAAA,EAAK,QAAQ,CAAA;AAAA,GAClC,CAAA;AAEA,EAAA,IAAI,IAAI,OAAS,EAAA;AACf,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,MAAM,CAAoB,iBAAA,EAAA,eAAA,CAAgB,GAAG,CAAQ,CAAA,IAAA,EAAAO,SAAA,CAAM,IAAI,OAAO,CAAA,CAAA,CAAA;AAAA,KACvE,CAAA,CAAA;AAAA,GACH;AAEA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;;;;;;;;;;;;;;;;;;;;;ACxNA,MAAM,qBAAqB,OAAwB;AAAA,EACjD,KAAK,EAAC;AAAA,EACN,MAAM,EAAC;AACT,CAAA,CAAA,CAAA;AAEA,IAAI,kBAAkB,kBAAmB,EAAA,CAAA;AAEzC,MAAM,uBAAuB,MAAM;AACjC,EAAA,eAAA,GAAkB,kBAAmB,EAAA,CAAA;AACvC,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,CAAA,EAAc,CAAiB,KAAA;AACrD,EAAA,IAAI,EAAE,UAAY,EAAA;AAChB,IAAI,IAAA,CAAC,EAAE,UAAY,EAAA;AACjB,MAAA,CAAA,CAAE,aAAa,CAAE,CAAA,UAAA,CAAA;AAAA,KACZ,MAAA;AACL,MAAA,CAAA,CAAE,UAAa,GAAA;AAAA,QACb,OAAA,EAAS,CAAC,GAAG,CAAA,CAAE,WAAW,OAAS,EAAA,GAAG,CAAE,CAAA,UAAA,CAAW,OAAO,CAAA;AAAA,QAC1D,SAASP,gBAAK,CAAAA,gBAAA,CAAA,EAAA,EAAA,CAAA,CAAE,UAAW,CAAA,OAAA,CAAA,EAAY,EAAE,UAAW,CAAA,OAAA,CAAA;AAAA,OACtD,CAAA;AAAA,KACF;AAAA,GACF;AACA,EAAE,CAAA,CAAA,OAAA,GAAU,CAAC,GAAI,CAAE,CAAA,OAAA,IAAW,EAAC,EAAI,GAAI,CAAA,CAAE,OAAW,IAAA,EAAG,CAAA,CAAA;AACvD,EAAE,CAAA,CAAA,WAAA,GAAc,CAAC,GAAI,CAAE,CAAA,WAAA,IAAe,EAAC,EAAI,GAAI,CAAA,CAAE,WAAe,IAAA,EAAG,CAAA,CAAA;AACrE,CAAA,CAAA;AAWA,SAAS,GAAA,CACP,MACA,OAImD,EAAA;AACnD,EAAA,IAAI,gBAAgBmB,cAAY,EAAA;AAC9B,IAAO,OAAA,SAAA,CAAU,KAAO,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACvC,MAAA,IAAW,SAASC,sBAAa,EAAA;AAC/B,IAAe,cAAA,CAAA,eAAA,CAAgB,GAAK,EAAAL,gBAAA,EAAc,CAAA,CAAA;AAClD,IAAeM,kBAAA,EAAA,CAAA;AACf,IAAO,OAAAD,sBAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAA,MAAM,SAA2D,EAAC,CAAA;AAClE,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,MAAA,MAAA,CAAO,GAAG,CAAI,GAAA;AAAA,QACZ,IAAM,EAAA,KAAA;AAAA,QACN,IAAA,EAAO,KAAoC,GAAG,CAAA;AAAA,QAC9C,UAAU,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA;AAAA,OACrB,CAAA;AAAA,KACF;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEA,MAAM,IAAA,GAAO,SAAU,IAAA,EAAM,OAAS,EAAA;AACpC,EAAA,IAAI,gBAAgBD,cAAY,EAAA;AAC9B,IAAO,OAAA,SAAA,CAAU,MAAQ,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACxC,MAAA,IAAW,SAASC,sBAAa,EAAA;AAC/B,IAAe,cAAA,CAAA,eAAA,CAAgB,IAAM,EAAAL,gBAAA,EAAc,CAAA,CAAA;AACnD,IAAeM,kBAAA,EAAA,CAAA;AACf,IAAO,OAAAD,sBAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAA,MAAM,SAA2D,EAAC,CAAA;AAClE,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,MAAA,MAAA,CAAO,GAAG,CAAI,GAAA;AAAA,QACZ,IAAM,EAAA,MAAA;AAAA,QACN,IAAA,EAAO,KAAoC,GAAG,CAAA;AAAA,QAC9C,UAAU,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA;AAAA,OACrB,CAAA;AAAA,KACF;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,MAAM,SAAY,GAAA,CAChB,IACA,EAAA,IAAA,EACA,OAC8B,KAAA;AAC9B,EAAA,MAAM,OAAOE,4BAAkB,EAAA,CAAA;AAC/B,EAAA,IAAI,IAAM,EAAA;AACR,IAAA,IAAA,CAAK,KAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GACnB;AAEA,EAAA,IAAI,gBAAgBC,iBAAe,EAAA;AACjC,IAAA,MAAM,QAAQ,wBAAyB,CAAA;AAAA,MACrC,IAAM,EAAA,QAAA;AAAA,MACN,MAAM,EAAC;AAAA,MACP,IAAI,EAAC;AAAA,KACN,CAAA,CAAA;AACD,IAAA,MAAMC,OAAM,wBAAyB,CAAA;AAAA,MACnC,IAAM,EAAA,QAAA;AAAA,MACN,MAAM,EAAC;AAAA,MACP,EAAI,EAAA;AAAA,QACF,KAAA,EAAO,KAAK,IAAK,CAAA,KAAA;AAAA,OACnB;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAAxB,gBAAA,CAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,IAAA,EAAM,IAAS,KAAA,KAAA,GAAQ,KAAQwB,GAAAA,IAAAA;AAAA,MAC/B,EAAA,EAAI,IAAS,KAAA,KAAA,GAAQA,IAAM,GAAA,KAAA;AAAA,KACxB,EAAA,OAAA,CAAA,CAAA;AAAA,GAEP;AAEA,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAU,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA;AAAA,GACrB,CAAA;AACF,CAAA,CAAA;AASA,MAAM,wBAAA,GAA2B,CAC/B,IAC2B,KAAA;AAC3B,EAAA,IAAI,gBAAgBL,cAAY,EAAA;AAC9B,IAAM,MAAA,WAAA,GAAc,KAAK,IAAK,CAAA,WAAA,CAAA;AAC9B,IAAA,IAAI,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAK,CAAC,EAAA,KAAO,QAAQ,EAAK,CAAA,EAAA;AACzC,MAAM,MAAA,IAAI,MAAM,oDAAoD,CAAA,CAAA;AAAA,KACtE;AAEA,IAAO,OAAAhB,eAAA,CAAAH,gBAAA,CAAA;AAAA,MACL,MAAQ,EAAA,IAAA;AAAA,MACR,IAAA,EAAM,KAAK,KAAM,EAAA;AAAA,MACjB,QAAA,EAAU,KAAK,IAAK,CAAA,UAAA;AAAA,MACpB,UAAA,EAAY,KAAK,IAAK,CAAA,YAAA;AAAA,KAAA,EACnB,KAAK,IALH,CAAA,EAAA;AAAA,MAML,WAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACF;AAEA,EAAA,OAAO,IAAK,CAAA,EAAA,CAAA;AACd,CAAA,CAAA;AAEA,MAAM,OAAA,GAAU,OAAO,MAAM,CAAA,CAAA;AAG7B,MAAM,kBAAA,GAAqBG,qCACtB,YADsB,CAAA,EAAA;AAAA,EAEzB,KAA4B,IAAc,EAAA;AACxC,IAAM,MAAA,KAAA,GAAQ,OAAO,MAAO,CAAAsB,eAAA,CAAY,KAAK,IAAK,CAAA,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AAC7D,IAAA,KAAA,CAAM,OAAO,CAAI,GAAA,IAAA,CAAA;AACjB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,CAEE,IACA,EAAA,EAAA,EACA,OACQ,EAAA;AACR,IAAO,OAAAzB,gBAAA,CAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,IAAA,EAAO,KAAgC,OAAO,CAAA;AAAA,MAC9C,IAAA,EAAM,yBAAyB,IAAI,CAAA;AAAA,MACnC,EAAA,EAAI,yBAAyB,EAAE,CAAA;AAAA,KAC5B,EAAA,OAAA,CAAA,CAAA;AAAA,GAEP;AAAA,EACA,QAAQ,KAAwC,EAAA;AAC9C,IAAA,OAAO,EAAE,IAAA,EAAM,QAAU,EAAA,IAAA,EAAM,EAAE,OAAA,EAAS,IAAK,EAAA,EAAG,EAAI,EAAA,EAAE,OAAS,EAAA,KAAA,EAAQ,EAAA,CAAA;AAAA,GAC3E;AAAA,EACA,QAAmB,GAAA;AACjB,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,IAAA,EAAM,EAAE,QAAA,EAAU,KAAM,EAAA;AAAA,MACxB,EAAA,EAAI,EAAE,QAAA,EAAU,IAAK,EAAA;AAAA,KACvB,CAAA;AAAA,GACF;AAAA,EACA,WAAsB,GAAA;AACpB,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,IAAA,EAAM,EAAE,QAAA,EAAU,IAAK,EAAA;AAAA,MACvB,EAAA,EAAI,EAAE,QAAA,EAAU,KAAM,EAAA;AAAA,KACxB,CAAA;AAAA,GACF;AAAA,EACA,QAAQ,OAAgC,EAAA;AACtC,IAAO,OAAA,EAAE,IAAM,EAAA,QAAA,EAAU,IAAM,EAAA,EAAE,OAAS,EAAA,IAAA,EAAQ,EAAA,EAAA,EAAI,EAAE,OAAA,EAAU,EAAA,CAAA;AAAA,GACpE;AAAA,EACA,OAAO,IAAgD,EAAA;AACrD,IAAO,OAAA,EAAE,IAAM,EAAA,QAAA,EAAU,IAAK,EAAA,CAAA;AAAA,GAChC;AACF,CAAA,CAAA,CAAA;AAaO,MAAM,cAAc,OACzB,SAAA,EACA,EACA,EAAA,SAAA,EACA,SACA,EACkB,KAAA;AA5QpB,EAAA,IAAA,EAAA,CAAA;AA6QE,EAAeqB,kBAAA,EAAA,CAAA;AACf,EAAqB,oBAAA,EAAA,CAAA;AAErB,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,MAAO,CAAA,SAAA,CAAU,WAAW,CAAA,CAAA;AACxD,EAAO,MAAA,CAAA,MAAA,CAAO,cAAc,kBAAkB,CAAA,CAAA;AAE9C,EAAA,MAAM,YACJ,WAAe,IAAA,OAAA,GAAU,OAAQ,CAAA,SAAA,GAAY,UAAU,OAAQ,CAAA,SAAA,CAAA;AAEjE,EAAC,YAAA,CAA8CR,uBAAY,CAAI,GAAA,SAAA,CAAA;AAE/D,EAAM,MAAA,UAAA,GAAA,CAAa,EAAK,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA,CAAA,KAAiB,EAAC,CAAA;AAE1C,EAAA,MAAM,MAAMG,SAAQ,CAAA,EAAA,EAAI,SAAW,EAAA,UAAA,EAAY,iBAAiB,OAAO,CAAA,CAAA;AAEvE,EAAM,MAAA,OAAA,GAAU,YAAa,CAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AAC3C,EAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,IAAA,MAAM,MAAS,GAAA,MAAM,SAAU,CAAA,OAAA,CAAQ,OAAO,KAAK,CAAA,CAAA;AACnD,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,SAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA,MAAA,CAAA,CAAA;AAAA,GACf;AAEA,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAMA,YAAU,CACd,EAAA,EACA,IACA,EAAA,UAAA,EACAU,kBACA,OAC0B,KAAA;AAC1B,EAAM,MAAA,EAAE,SAAY,GAAA,OAAA,CAAA;AAEpB,EAAA,MAAM,QAAmD,EAAC,CAAA;AAC1D,EAAA,KAAA,MAAW,OAAO,UAAY,EAAA;AAC5B,IAAM,MAAA,IAAA,GAAO,WAAW,GAAG,CAAA,CAAA;AAC3B,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,KAAA,CAAM,GAAG,CAAA,GACP,IAAK,CAAA,IAAA,KAAS,QAAY,IAAA,IAAA,CAAK,OAC3B,GAAAvB,eAAA,CAAAH,gBAAA,CAAA,EAAA,EAAK,IAAL,CAAA,EAAA,EAAW,KAAO,EAAA,IAAA,CAAK,SACvB,CAAA,GAAA,IAAA,CAAA;AAAA,OACD,MAAA;AACL,QAAI,IAAA,IAAA,CAAK,SAAS,QAAU,EAAA;AAC1B,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA,GAAIG,qCAAK,IAAL,CAAA,EAAA,EAAW,MAAM,GAAI,EAAA,CAAA,CAAA;AAAA,SACnC,MAAA;AACL,UAAA,KAAA,CAAM,GAAG,CAAA,GACP,IAAK,CAAA,IAAA,KAAS,QACVA,eAAK,CAAAH,gBAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,QACjB,CAAA,GAAA,IAAA,CAAK,IAAS,KAAA,MAAA,GACdG,qCAAK,IAAL,CAAA,EAAA,EAAW,IAAM,EAAA,KAAA,MACjB,IAAK,CAAA,IAAA,KAAS,QACd,GAAAA,eAAA,CAAAH,gBAAA,CAAA,EAAA,EAAK,OAAL,EAAW,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,IAAI,IAAK,CAAA,IAAA,EAAM,KAAO,EAAA,IAAA,CAAK,WACrD,CAAA,GAAA,IAAA,CAAA;AAAA,SACR;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAI,0BAA0B,IAAI,CAAA,CAAA;AAEtD,EAAO,OAAAA,gBAAA,CAAA;AAAA,IACL,IAAM,EAAA,aAAA;AAAA,IACN,MAAA;AAAA,IACA,IAAM,EAAA,KAAA;AAAA,IACN,SAAS,OACL,GAAA,EAAA,GACE,MAAM,OAAQ,CAAA,OAAO,IACnB,OAAQ,CAAA,CAAC,CACT,GAAA,OAAA,GACF,MAAM,OAAQ,CAAA,OAAO,IACrB,OAAQ,CAAA,CAAC,IACT,IACF,GAAA,KAAA,CAAA;AAAA,IACJ,KAAA;AAAA,GACI,EAAA,EAAA,GACA0B,mBACA,EAAE,GAAA,EAAKA,iBAAgB,IAAM,EAAA,IAAA,EAAMA,iBAAgB,GAAI,EAAA,CAAA,CAAA;AAE/D,CAAA,CAAA;AAQA,MAAM,YAAA,GAAe,CACnB,GAAA,EACA,SACiB,KAAA;AAvWnB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAwWE,EAAA,MAAM,UAAwB,EAAC,CAAA;AAE/B,EAAI,IAAA,GAAA,CAAI,YAAY,KAAW,CAAA,EAAA;AAC7B,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,MAAM,CAAoB,iBAAA,EAAA,eAAA,CAAgB,GAAG,CAAQ,CAAA,IAAA,EAAAnB,SAAA,CAAM,IAAI,OAAO,CAAA,CAAA,CAAA;AAAA,KACvE,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,cAA8B,GAAA;AAAA,IAClC,SAAS,EAAC;AAAA,GACZ,CAAA;AAEA,EAAA,MAAM,eAA+B,GAAA;AAAA,IACnC,SAAS,EAAC;AAAA,GACZ,CAAA;AAEA,EAAW,KAAA,MAAA,GAAA,IAAO,IAAI,KAAO,EAAA;AAC3B,IAAM,MAAA,IAAA,GAAO,GAAI,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAE1B,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAM,MAAA,EAAE,IAAM,EAAA,MAAA,EAAW,GAAA,IAAA,CAAA;AACzB,MAAA,IAAI,kBAAkBI,cAAY,EAAA;AAChC,QAAQ,OAAA,CAAA,IAAA,CAAK,qBAAsB,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,OAC5C;AAAA,KACF;AAEA,IAAI,IAAA,IAAA,CAAK,SAAS,KAAO,EAAA;AACvB,MAAI,IAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,YAAc,EAAA;AAC/B,QAAA,cAAA,CAAe,QAAQ,IAAK,CAAA,aAAA,CAAc,KAAK,IAAM,EAAA,GAAA,EAAK,SAAS,CAAC,CAAA,CAAA;AAAA,OACtE;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,MAAQ,EAAA;AAC/B,MAAI,IAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,YAAc,EAAA;AAC/B,QAAA,eAAA,CAAgB,QAAQ,IAAK,CAAA,aAAA,CAAc,KAAK,IAAM,EAAA,GAAA,EAAK,SAAS,CAAC,CAAA,CAAA;AAAA,OACvE;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,QAAU,EAAA;AACjC,MAAI,IAAA,IAAA,CAAK,IAAK,CAAA,MAAA,YAAkBA,cAAY,EAAA;AAC1C,QAAA,OAAA,CAAQ,IAAK,CAAA,qBAAA,CAAsB,IAAK,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,OACtD;AAEA,MAAI,IAAA,IAAA,CAAK,EAAG,CAAA,MAAA,YAAkBA,cAAY,EAAA;AACxC,QAAA,OAAA,CAAQ,IAAK,CAAA,qBAAA,CAAsB,IAAK,CAAA,EAAA,CAAG,MAAM,CAAC,CAAA,CAAA;AAAA,OACpD;AAEA,MAAI,IAAA,IAAA,CAAK,KAAK,UAAY,EAAA;AACxB,QAAA,eAAA,CAAgB,OAAQ,CAAA,IAAA;AAAA,UACtB,IAAK,CAAA,IAAA,CAAK,MACN,GAAA,aAAA,CAAc,IAAK,CAAA,IAAA,CAAK,MAAQ,EAAA,GAAA,EAAK,SAAS,CAAA,GAC9C,SACA,GAAAL,sBAAA,CAAY,GAAG,CACf,GAAA,GAAA;AAAA,SACN,CAAA;AACA,QAAA,eAAA,CAAgB,MAAS,GAAA,IAAA,CAAA;AAAA,OAC3B;AAEA,MAAI,IAAA,IAAA,CAAK,GAAG,UAAY,EAAA;AACtB,QAAA,cAAA,CAAe,OAAQ,CAAA,IAAA;AAAA,UACrB,IAAK,CAAA,EAAA,CAAG,MACJ,GAAA,aAAA,CAAc,IAAK,CAAA,EAAA,CAAG,MAAQ,EAAA,GAAA,EAAK,SAAS,CAAA,GAC5C,SACA,GAAAA,sBAAA,CAAY,GAAG,CACf,GAAA,GAAA;AAAA,SACN,CAAA;AACA,QAAA,cAAA,CAAe,MAAS,GAAA,IAAA,CAAA;AAAA,OAC1B;AAAA,KACF;AAAA,GACF;AAEA,EAAI,IAAA,GAAA,CAAI,IAAI,UAAY,EAAA;AACtB,IAAe,cAAA,CAAA,OAAA,GAAU,GAAI,CAAA,GAAA,CAAI,UAAW,CAAA,OAAA,CAAA;AAC5C,IAAA,cAAA,CAAe,QAAQ,IAAK,CAAA,GAAG,GAAI,CAAA,GAAA,CAAI,WAAW,OAAO,CAAA,CAAA;AAAA,GAC3D;AAEA,EAAI,IAAA,GAAA,CAAI,KAAK,UAAY,EAAA;AACvB,IAAgB,eAAA,CAAA,OAAA,GAAU,GAAI,CAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAA;AAC9C,IAAA,eAAA,CAAgB,QAAQ,IAAK,CAAA,GAAG,GAAI,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA,CAAA;AAAA,GAC7D;AAEA,EAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,EAAA,MAAM,SAAoB,EAAC,CAAA;AAC3B,EAAA,MAAM,UAAa,GAAA,sBAAA,CAAuB,GAAI,CAAA,GAAA,CAAI,SAAS,SAAS,CAAA,CAAA;AAEpE,EAAA,MAAM,WAAc,GAAA,sBAAA,CAAuB,GAAI,CAAA,IAAA,CAAK,SAAS,SAAS,CAAA,CAAA;AAEtE,EAAA,MAAM,cAAiB,GAAA,yBAAA;AAAA,IACrB,IAAI,GAAI,CAAA,WAAA;AAAA,IACR,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,eAAkB,GAAA,yBAAA;AAAA,IACtB,IAAI,IAAK,CAAA,WAAA;AAAA,IACT,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,WAA4B,EAAC,CAAA;AAEnC,EAAW,KAAA,MAAA,GAAA,IAAO,IAAI,KAAO,EAAA;AAC3B,IAAM,MAAA,IAAA,GAAO,GAAI,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAE1B,IAAI,IAAA,IAAA,CAAK,SAAS,KAAO,EAAA;AACvB,MAAA,MAAM,SAAS,IAAK,CAAA,IAAA,CAAA;AACpB,MAAA,MAAM,IAAO,GAAA,aAAA,CAAc,MAAQ,EAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AACjD,MAAe,cAAA,CAAA,UAAA,EAAY,MAAM,MAAM,CAAA,CAAA;AACvC,MAAiB,gBAAA,CAAA,QAAA,EAAU,MAAM,MAAM,CAAA,CAAA;AAEvC,MAAW,UAAA,CAAA,IAAA;AAAA,QACT,CAAc,WAAA,EAAA,WAAA;AAAA,UACZ,IAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA,cAAA,CAAe,QAAQ,MAAS,GAAA,CAAA;AAAA,UAChC,SAAA;AAAA,SACF,CAAA,CAAA;AAAA,OACF,CAAA;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,MAAQ,EAAA;AAC/B,MAAA,MAAM,IAAO,GAAA,aAAA,CAAc,IAAK,CAAA,IAAA,EAAM,KAAK,SAAS,CAAA,CAAA;AACpD,MAAe,cAAA,CAAA,WAAA,EAAa,IAAM,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAE3C,MAAW,UAAA,CAAA,IAAA;AAAA,QACT,gBAAgB,IAAQ,CAAA,CAAA,EAAA,IAAA,CAAK,QAAW,GAAA,CAAA,CAAA,EAAI,KAAK,QAAa,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,OAChE,CAAA;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,QAAU,EAAA;AACjC,MAAM,MAAA,EAAE,IAAM,EAAA,EAAA,EAAO,GAAA,IAAA,CAAA;AACrB,MAAA,MAAM,IAAO,GAAA,mBAAA,CAAoB,IAAM,EAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AAErD,MAAI,IAAA,EAAA,CAAG,SAAS,IAAK,CAAA,IAAA,KAAS,GAAG,IAAQ,IAAA,IAAA,CAAK,OAAY,KAAA,EAAA,CAAG,OAAU,CAAA,EAAA;AACrE,QAAM,MAAA,IAAA,GACJ,CAAC,EAAA,CAAG,MAAU,IAAA,EAAA,CAAG,MAAO,CAAA,IAAA,CAAK,cACzB,GAAA,CAAA,CAAA,EAAI,EAAG,CAAA,IAAA,CAAA,CAAA,CAAA,GACP,EAAG,CAAA,IAAA,CAAA;AAET,QAAW,UAAA,CAAA,IAAA;AAAA,UACT,iBAAiB,IAAc,CAAA,OAAA,EAAA,IAAA,CAAA,EAC7B,GAAG,OAAU,GAAA,CAAA,SAAA,EAAYC,UAAM,EAAG,CAAA,OAAO,CAAM,CAAA,CAAA,GAAA,EAAA,CAAA,EAC9C,KAAK,KAAQ,GAAA,CAAA,OAAA,EAAUE,WAAO,IAAK,CAAA,KAAA,EAAO,MAAM,CAAM,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,SAC3D,CAAA;AAAA,OACF;AAEA,MAAA,IACE,OAAO,IAAA,CAAK,QAAa,KAAA,OAAO,EAAG,CAAA,QAAA,IACnC,CAACkB,sBAAA,CAAY,IAAK,CAAA,QAAA,EAAU,EAAG,CAAA,QAAQ,CACvC,EAAA;AACA,QAAW,UAAA,CAAA,IAAA;AAAA,UACT,CAAA,cAAA,EAAiB,SACf,EAAG,CAAA,QAAA,GAAW,OAAO,aAAc,CAAA,EAAA,CAAG,QAAQ,CAAM,CAAA,CAAA,GAAA,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,SAExD,CAAA;AAAA,OACF;AAEA,MAAI,IAAA,IAAA,CAAK,OAAY,KAAA,EAAA,CAAG,OAAS,EAAA;AAC/B,QAAA,MAAM,QACJ,OAAO,EAAA,CAAG,YAAY,QAAY,IAAA,EAAA,CAAG,WAAWnB,gBAAM,CAAA,EAAA,CAAG,OAAO,CAAA,GAC5DC,WAAO,EAAG,CAAA,OAAA,EAAS,MAAM,CACzB,GAAAF,SAAA,CAAM,GAAG,OAAO,CAAA,CAAA;AAEtB,QAAA,MAAM,IACJ,GAAA,KAAA,KAAU,KAAY,CAAA,GAAA,cAAA,GAAiB,CAAe,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAExD,QAAW,UAAA,CAAA,IAAA,CAAK,CAAiB,cAAA,EAAA,IAAA,CAAA,EAAA,EAAS,IAAM,CAAA,CAAA,CAAA,CAAA;AAAA,OAClD;AAEA,MAAI,IAAA,IAAA,CAAK,QAAa,KAAA,EAAA,CAAG,QAAU,EAAA;AACjC,QAAW,UAAA,CAAA,IAAA;AAAA,UACT,CAAiB,cAAA,EAAA,IAAA,CAAA,EAAA,EAAS,EAAG,CAAA,QAAA,GAAW,MAAS,GAAA,KAAA,CAAA,SAAA,CAAA;AAAA,SACnD,CAAA;AAAA,OACF;AAEA,MAAI,IAAA,IAAA,CAAK,WAAgB,KAAA,EAAA,CAAG,WAAa,EAAA;AACvC,QAAW,UAAA,CAAA,IAAA;AAAA,UACT,CAAA,cAAA,EAAiB,IACf,CAAA,kBAAA,EAAA,EAAA,CAAG,WAAe,IAAA,SAAA,CAAA,CAAA;AAAA,SAEtB,CAAA;AAAA,OACF;AAEA,MAAI,IAAA,IAAA,CAAK,KAAU,KAAA,EAAA,CAAG,KAAO,EAAA;AAC3B,QAAM,MAAA,SAAA,GAAY,CAAG,EAAA,GAAA,CAAI,IAAQ,CAAA,CAAA,EAAA,IAAA,CAAA,MAAA,CAAA,CAAA;AACjC,QAAA,IAAI,KAAK,KAAO,EAAA;AACd,UAAW,UAAA,CAAA,IAAA,CAAK,oBAAoB,SAAY,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,SAClD;AACA,QAAA,IAAI,GAAG,KAAO,EAAA;AACZ,UAAW,UAAA,CAAA,IAAA;AAAA,YACT,CAAmB,gBAAA,EAAA,SAAA,CAAA;AAAA,WAA0B,EAAAE,UAAA;AAAA,cAC3C,EAAG,CAAA,KAAA;AAAA,cACH,MAAA;AAAA,aACF,CAAA,CAAA,CAAA;AAAA,WACF,CAAA;AAAA,SACF;AAAA,OACF;AAEA,MAAA,MAAM,iBAAiB,IAAK,CAAA,GAAA;AAAA,QAC1B,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,MAAU,KAAA,CAAA;AAAA,QAC5B,CAAA,CAAA,EAAA,GAAA,EAAA,CAAG,WAAH,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,MAAU,KAAA,CAAA;AAAA,OAC5B,CAAA;AACA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,EAAgB,CAAK,EAAA,EAAA;AACvC,QAAM,MAAA,QAAA,GAAA,CAAW,EAAK,GAAA,IAAA,CAAA,WAAA,KAAL,IAAmB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AACpC,QAAM,MAAA,MAAA,GAAA,CAAS,EAAG,GAAA,EAAA,CAAA,WAAA,KAAH,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAEhC,QAAA,IAAA,CACG,YAAY,MACZ,MAAA,CAAC,QACA,IAAA,CAAC,UACD,QAAS,CAAA,IAAA,KAAS,MAAO,CAAA,IAAA,IACzB,SAAS,KAAU,KAAA,MAAA,CAAO,SAC1B,QAAS,CAAA,QAAA,KAAa,OAAO,QAC7B,IAAA,QAAA,CAAS,QAAa,KAAA,MAAA,CAAO,YAC7B,QAAS,CAAA,QAAA,KAAa,OAAO,QAC7B,IAAA,QAAA,CAAS,UAAU,MAAO,CAAA,KAAA,IAC1B,QAAS,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,KAAM,OAAO,OAAQ,CAAA,IAAA,CAAK,GAAG,CACxD,CAAA,EAAA;AACA,UAAA,IAAI,QAAU,EAAA;AACZ,YAAA,eAAA,CAAgB,IAAK,CAAA;AAAA,cACnB,MAAM,QAAS,CAAA,IAAA;AAAA,cACf,UAAU,QAAS,CAAA,QAAA;AAAA,cACnB,UAAY,EAAA;AAAA,gBACV,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,gBACd,WAAW,QAAS,CAAA,KAAA;AAAA,gBACpB,gBAAgB,SACZ,GAAA,QAAA,CAAS,QAAQ,GAAI,CAAAH,sBAAW,IAChC,QAAS,CAAA,OAAA;AAAA,gBACb,OAAS,EAAA,QAAA;AAAA,eACX;AAAA,aACD,CAAA,CAAA;AAAA,WACH;AAEA,UAAA,IAAI,MAAQ,EAAA;AACV,YAAA,cAAA,CAAe,IAAK,CAAA;AAAA,cAClB,MAAM,MAAO,CAAA,IAAA;AAAA,cACb,UAAU,MAAO,CAAA,QAAA;AAAA,cACjB,UAAY,EAAA;AAAA,gBACV,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,gBACd,WAAW,MAAO,CAAA,KAAA;AAAA,gBAClB,gBAAgB,SACZ,GAAA,MAAA,CAAO,QAAQ,GAAI,CAAAA,sBAAW,IAC9B,MAAO,CAAA,OAAA;AAAA,gBACX,OAAS,EAAA,MAAA;AAAA,eACX;AAAA,aACD,CAAA,CAAA;AAAA,WACH;AAAA,SACF;AAAA,OACF;AAEA,MAAA,MAAM,aAAa,IAAK,CAAA,GAAA;AAAA,QACtB,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,MAAU,KAAA,CAAA;AAAA,QACxB,CAAA,CAAA,EAAA,GAAA,EAAA,CAAG,OAAH,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,MAAU,KAAA,CAAA;AAAA,OACxB,CAAA;AACA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,EAAY,CAAK,EAAA,EAAA;AACnC,QAAM,MAAA,SAAA,GAAA,CAAY,EAAK,GAAA,IAAA,CAAA,OAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AACjC,QAAM,MAAA,OAAA,GAAA,CAAU,EAAG,GAAA,EAAA,CAAA,OAAA,KAAH,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAE7B,QAAA,IAAA,CACG,SAAa,IAAA,OAAA,MACb,CAAC,SAAA,IACA,CAAC,OACD,IAAA,SAAA,CAAU,OAAY,KAAA,OAAA,CAAQ,OAC9B,IAAA,SAAA,CAAU,OAAY,KAAA,OAAA,CAAQ,WAC9B,SAAU,CAAA,KAAA,KAAU,OAAQ,CAAA,KAAA,IAC5B,SAAU,CAAA,IAAA,KAAS,OAAQ,CAAA,IAAA,IAC3B,UAAU,MAAW,KAAA,OAAA,CAAQ,MAC7B,IAAA,SAAA,CAAU,KAAU,KAAA,OAAA,CAAQ,KAC5B,IAAA,SAAA,CAAU,YAAY,OAAQ,CAAA,OAAA,IAC7B,KAAM,CAAA,OAAA,CAAQ,SAAU,CAAA,OAAO,CAC9B,IAAA,KAAA,CAAM,QAAQ,OAAQ,CAAA,OAAO,CAC7B,IAAA,SAAA,CAAU,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA,KAAM,QAAQ,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA,IAC1D,SAAU,CAAA,IAAA,KAAS,OAAQ,CAAA,IAAA,IAC3B,UAAU,UAAe,KAAA,OAAA,CAAQ,UACjC,IAAA,SAAA,CAAU,UAAU,OAAQ,CAAA,KAAA,IAC5B,SAAU,CAAA,QAAA,KAAa,QAAQ,QACjC,CAAA,EAAA;AACA,UAAA,IAAI,SAAW,EAAA;AACb,YAAA,WAAA,CAAY,IAAK,CAAA;AAAA,cACf,OAAS,EAAA;AAAA,gBACPN,gBAAA,CAAA;AAAA,kBACE,MAAQ,EAAA,IAAA;AAAA,iBACL,EAAA,SAAA,CAAA;AAAA,eAEP;AAAA,cACA,OAAS,EAAA,SAAA;AAAA,aACV,CAAA,CAAA;AAAA,WACH;AAEA,UAAA,IAAI,OAAS,EAAA;AACX,YAAA,UAAA,CAAW,IAAK,CAAA;AAAA,cACd,OAAS,EAAA;AAAA,gBACPA,gBAAA,CAAA;AAAA,kBACE,MAAQ,EAAA,IAAA;AAAA,iBACL,EAAA,OAAA,CAAA;AAAA,eAEP;AAAA,cACA,OAAS,EAAA,OAAA;AAAA,aACV,CAAA,CAAA;AAAA,WACH;AAAA,SACF;AAAA,OACF;AAEA,MAAI,IAAA,IAAA,CAAK,OAAY,KAAA,EAAA,CAAG,OAAS,EAAA;AAC/B,QAAS,QAAA,CAAA,IAAA,CAAK,EAAE,MAAQ,EAAA,IAAA,EAAM,SAAS,EAAG,CAAA,OAAA,IAAW,MAAM,CAAA,CAAA;AAAA,OAC7D;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,QAAU,EAAA;AACjC,MAAW,UAAA,CAAA,IAAA;AAAA,QACT,CAAA,eAAA,EAAkB,SAAY,GAAAM,sBAAA,CAAY,GAAG,CAAA,GAAI,GAC/C,CAAA,MAAA,EAAA,SAAA,GAAYA,sBAAY,CAAA,IAAA,CAAK,IAAI,CAAA,GAAI,IAAK,CAAA,IAAA,CAAA,CAAA,CAAA;AAAA,OAE9C,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,MAAM,oBAA8B,EAAC,CAAA;AAErC,EACE,IAAA,GAAA,CAAI,KAAK,UACT,IAAA,eAAA,CAAgB,UAChB,eAAgB,CAAA,OAAA,CAAQ,SAAS,CACjC,EAAA;AACA,IAAA,MAAM,SAAO,EAAgB,GAAA,eAAA,CAAA,OAAA,KAAhB,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,KAAQ,GAAG,GAAI,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AACrD,IAAkB,iBAAA,CAAA,IAAA,CAAK,oBAAoB,IAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACpD;AAEA,EAAkB,iBAAA,CAAA,IAAA;AAAA,IAChB,GAAG,eAAgB,CAAA,GAAA;AAAA,MACjB,CAAC,UACC,KAAA,CAAA;AAAA,MAAA,EAAW,eAAgB,CAAA,GAAA,EAAK,KAAO,EAAA,UAAA,EAAY,QAAQ,SAAS,CAAA,CAAA,CAAA;AAAA,KACxE;AAAA,GACF,CAAA;AAEA,EAAW,UAAA,CAAA,OAAA,CAAQ,GAAG,iBAAiB,CAAA,CAAA;AAEvC,EACE,IAAA,GAAA,CAAI,IAAI,UACR,IAAA,cAAA,CAAe,UACf,cAAe,CAAA,OAAA,CAAQ,SAAS,CAChC,EAAA;AACA,IAAW,UAAA,CAAA,IAAA;AAAA,MACT,CAAO,IAAA,EAAA,eAAA;AAAA,QACL,SACI,GAAA;AAAA,UACE,SAAS,cAAe,CAAA,OAAA;AAAA,UACxB,OAAS,EAAA,cAAA,CAAe,OAAQ,CAAA,GAAA,CAAIA,sBAAW,CAAA;AAAA,SAEjD,GAAA,cAAA;AAAA,OACN,CAAA,CAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAW,UAAA,CAAA,IAAA;AAAA,IACT,GAAG,cAAe,CAAA,GAAA;AAAA,MAChB,CAAC,UACC,KAAA,CAAA;AAAA,KAAA,EAAU,eAAgB,CAAA,GAAA,EAAK,IAAM,EAAA,UAAA,EAAY,QAAQ,SAAS,CAAA,CAAA,CAAA;AAAA,KACtE;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,IAAA,EACE,CAAe,YAAA,EAAA,eAAA,CAAgB,GAAG,CAAA,CAAA;AAAA,EAC3B,EAAA,UAAA,CAAW,KAAK,OAAO,CAAA,CAAA,CAAA;AAAA,MAChC,MAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,OAAA,CAAQ,KAAK,GAAG,cAAA,CAAe,KAAO,EAAA,GAAA,EAAK,WAAW,CAAC,CAAA,CAAA;AACvD,EAAA,OAAA,CAAQ,KAAK,GAAG,cAAA,CAAe,IAAM,EAAA,GAAA,EAAK,UAAU,CAAC,CAAA,CAAA;AACrD,EAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,eAAgB,CAAA,GAAA,EAAK,QAAQ,CAAC,CAAA,CAAA;AAE9C,EAAO,OAAA,OAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAC1B,MACA,EAAA,GAAA,EACA,SACG,KAAA;AACH,EAAA,OACE,MAAO,CAAA,IAAA,KACN,MAAO,CAAA,EAAA,CAAG,SACP,aAAc,CAAA,MAAA,CAAO,EAAG,CAAA,MAAA,EAAQ,KAAK,SAAS,CAAA,GAC9C,SACA,GAAAA,sBAAA,CAAY,GAAG,CACf,GAAA,GAAA,CAAA,CAAA;AAER,CAAA,CAAA;AAEA,MAAM,sBAAA,GAAyB,CAC7B,OAAA,EACA,SACsB,KAAA;AACtB,EACE,OAAA,CAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,IACvB,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,OAAA,EAAS,SACL,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA;AAAA,MAAI,CAAC,IAAA,KACjB,QAAY,IAAA,IAAA,GACRH,eAAK,CAAAH,gBAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAL,EAAW,MAAA,EAAQM,sBAAY,CAAA,IAAA,CAAK,MAAM,CAAA,EAC1C,CAAA,GAAA,IAAA;AAAA,QAEN,KAAM,CAAA,OAAA;AAAA,UACL,EAAC,CAAA;AAEZ,CAAA,CAAA;AAEA,MAAM,yBAAA,GAA4B,CAChC,WAAA,EACA,SAC2B,KAAA;AAC3B,EAAA,OAAA,CACE,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,GAAA,CAAI,CAAC,IAAA,KAAUH,qCACvB,IADuB,CAAA,EAAA;AAAA,IAE1B,YAAY,IAAK,CAAA,UAAA,GACb,SACE,GAAAA,eAAA,CAAAH,gBAAA,CAAA,EAAA,EACK,KAAK,UADV,CAAA,EAAA;AAAA,MAEE,OAAS,EAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,IAAIM,sBAAW,CAAA;AAAA,KAClD,CAAA,GACA,KAAK,UACP,GAAA,KAAA,CAAA;AAAA,UACC,EAAC,CAAA;AAEZ,CAAA;;AC7vBO,MAAMsB,eAAa,OACxB,SAAA,EACA,EACA,EAAA,IAAA,EACA,SACA,GACkB,KAAA;AAClB,EAAA,MAAM,GAAM,GAAA,OAAA,CAAQ,EAAI,EAAA,IAAA,EAAM,SAAS,GAAG,CAAA,CAAA;AAC1C,EAAM,MAAA,KAAA,GAAQ,WAAW,GAAG,CAAA,CAAA;AAE5B,EAAM,MAAA,SAAA,CAAU,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAEnC,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAM,OAAU,GAAA,CACd,EACA,EAAA,IAAA,EACA,SACA,GACmB,KAAA;AACnB,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAA,GAAA,GAAMC,eAAI,GAAG,CAAA,CAAA;AAAA,GACf;AAEA,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,IAAA;AAAA,IACA,OAAO,EAAC;AAAA,IACR,GAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,GAA6B,KAAA;AAC/C,EAAA,MAAM,SAAoB,EAAC,CAAA;AAC3B,EAAA,MAAM,MAAgB,EAAC,CAAA;AACvB,EAAM,MAAA,EAAE,SAAY,GAAA,GAAA,CAAA;AAEpB,EAAI,IAAA,GAAA,CAAI,WAAW,QAAU,EAAA;AAC3B,IAAA,GAAA,CAAI,KAAK,QAAQ,CAAA,CAAA;AAEjB,IAAA,IAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,eAAA;AAAiB,MAAA,GAAA,CAAI,KAAK,YAAY,CAAA,CAAA;AACnD,IAAA,IAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,SAAA;AAAW,MAAA,GAAA,CAAI,KAAK,WAAW,CAAA,CAAA;AAC5C,IAAA,IAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,SAAA;AAAW,MAAA,GAAA,CAAI,KAAK,WAAW,CAAA,CAAA;AAE5C,IAAI,GAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,GAAA,CAAI,IAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAE7B,IAAA,IAAI,mCAAS,OAAS,EAAA;AACpB,MAAI,GAAA,CAAA,IAAA;AAAA,QACF,CAAA,CAAA,EAAI,OAAQ,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAW,CAAI,CAAA,EAAA,MAAA,CAAA,CAAA,CAAS,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,OAC9D,CAAA;AAAA,KACF;AAEA,IAAA,IAAI,mCAAS,IAAM,EAAA;AACjB,MAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,MAAA,IAAI,QAAQ,IAAK,CAAA,WAAA;AACf,QAAA,IAAA,CAAK,KAAK,CAAkB,eAAA,EAAAxB,sBAAA,CAAY,OAAQ,CAAA,IAAA,CAAK,WAAW,CAAG,CAAA,CAAA,CAAA,CAAA;AACrE,MAAA,IAAI,QAAQ,IAAK,CAAA,eAAA;AAAiB,QAAA,IAAA,CAAK,KAAK,CAAyB,uBAAA,CAAA,CAAA,CAAA;AACrE,MAAA,IAAI,QAAQ,IAAK,CAAA,eAAA;AAAiB,QAAA,IAAA,CAAK,KAAK,CAAyB,uBAAA,CAAA,CAAA,CAAA;AACrE,MAAA,GAAA,CAAI,IAAK,CAAA,CAAA,OAAA,EAAU,IAAK,CAAA,IAAA,CAAK,IAAI,CAAK,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,KACxC;AAEA,IAAA,GAAA,CAAI,KAAK,CAAO,IAAA,EAAAI,UAAA,CAAO,GAAI,CAAA,GAAA,EAAK,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACrC,MAAA;AACL,IAAA,GAAA,CAAI,KAAK,WAAW,CAAA,CAAA;AAEpB,IAAA,IAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,YAAA;AAAc,MAAA,GAAA,CAAI,KAAK,CAAW,SAAA,CAAA,CAAA,CAAA;AAE/C,IAAI,GAAA,CAAA,IAAA,CAAK,CAAI,CAAA,EAAA,GAAA,CAAI,IAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAExB,IAAA,IAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA;AAAU,MAAI,GAAA,CAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA,CAAA;AAAA,GAClD;AAEA,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,GAAI,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,IAClB,MAAA;AAAA,GACF,CAAA;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;ACUO,MAAM,wBAA2B,GAAA,CACtC,EACA,EAAA,EAAA,EACA,MACc,KAAA;AACd,EAAA,MAAM,UAAU,IAAIqB,sBAAA,CAAmB,IAAI,EAAG,CAAA,MAAA,EAAQ,GAAG,KAAK,CAAA,CAAA;AAC9D,EAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,OAAA,CAAA;AAC1B,EAAA,MAAM,MAAMC,uBAAoB,CAAA,MAAA,CAAO,MAAU,IAAA,OAAA,EAAS,OAAO,GAAG,CAAA,CAAA;AAEpE,EAAQ,OAAA,CAAA,KAAA,GAAS,CAAC,CAAA,EAAG,KAAU,KAAA;AAC7B,IAAO,OAAA,WAAA,CAAY,KAAK,CAAG,EAAA,MAAM,MAAM,IAAK,CAAA,OAAA,EAAS,CAAG,EAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GAChE,CAAA;AAEA,EAAQ,OAAA,CAAA,MAAA,GAAU,CAAC,CAAA,EAAG,KAAU,KAAA;AAC9B,IAAO,OAAA,WAAA,CAAY,KAAK,CAAG,EAAA,MAAM,OAAO,IAAK,CAAA,OAAA,EAAS,CAAG,EAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GACjE,CAAA;AAEA,EAAA,MAAA,CAAO,OAAO,OAAS,EAAA,EAAE,aAAa,KAAO,EAAA,YAAA,EAAc,QAAQ,CAAA,CAAA;AAEnE,EAAA,MAAM,KAAKC,YAAS,CAAA;AAAA,IAClB,OAAA;AAAA,IACA,aAAa,MAAO,CAAA,WAAA;AAAA,GACrB,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,aAAA,CAAA;AAC7B,EAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,mBAAoB,CAAA,KAAK,CAAG,EAAA;AACnD,IAAC,EAA0C,CAAA,GAAG,CAC5C,GAAA,KAAA,CAAM,GAAyB,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,EAAA,CAAG,eAAe,EAAC,CAAA;AAEnB,EAAO,OAAA,MAAA,CAAO,OAAO,EAAI,EAAA;AAAA,IACvB,OAAA;AAAA,IACA,GAAA;AAAA,IACA,EAAA;AAAA,IACA,OAAS,EAAA,MAAA;AAAA,GACV,CAAA,CAAA;AACH,EAAA;AAEO,MAAM,aAA0C,CAAA;AAAA,EAiBrD,WAAA,CACE,SACA,EAAA,WAAA,EACA,EAEc,EAAA;AACd,IAAA,MAAM,OAAU,GAAA,OAAO,WAAgB,KAAA,UAAA,GAAa,EAAK,GAAA,WAAA,CAAA;AACzD,IAAA,MAAM,KAAM,EAAM,IAAA,WAAA,CAAA;AAElB,IAAA,OAAOpB,cAAY,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,SAAA,EAAW,SAAS,EAAE,CAAA,CAAA;AAAA,GAC1D;AAAA,EAWA,SAAA,CACE,SACA,EAAA,WAAA,EACA,EAEc,EAAA;AACd,IAAA,MAAM,OAAU,GAAA,OAAO,WAAgB,KAAA,UAAA,GAAa,EAAK,GAAA,WAAA,CAAA;AACzD,IAAA,MAAM,KAAM,EAAM,IAAA,WAAA,CAAA;AAElB,IAAA,OAAOA,cAAY,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,SAAA,EAAW,SAAS,EAAE,CAAA,CAAA;AAAA,GAC3D;AAAA,EAQA,WAAA,CACE,SACA,EAAA,WAAA,EACA,EACe,EAAA;AACf,IAAA,MAAM,CAAC,EAAA,EAAI,OAAO,CAAA,GAChB,OAAO,WAAgB,KAAA,UAAA,GAAa,CAAC,WAAA,EAAa,EAAE,CAAI,GAAA,CAAC,IAAI,WAAW,CAAA,CAAA;AAE1E,IAAA,OAAO,YAAY,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,SAAA,EAAW,SAAS,EAAE,CAAA,CAAA;AAAA,GAC1D;AAAA,EAEA,MAAM,WAAY,CAAA,IAAA,EAAc,EAA2B,EAAA;AACzD,IAAM,MAAA,CAAC,YAAY,CAAC,CAAA,GAAI,0BAA0B,IAAK,CAAA,EAAA,GAAK,OAAO,EAAE,CAAA,CAAA;AACrE,IAAM,MAAA,CAAC,UAAU,CAAC,CAAA,GAAI,0BAA0B,IAAK,CAAA,EAAA,GAAK,KAAK,IAAI,CAAA,CAAA;AACnE,IAAA,MAAM,GAA6B,GAAA;AAAA,MACjC,IAAM,EAAA,aAAA;AAAA,MACN,UAAA;AAAA,MACA,IAAM,EAAA,CAAA;AAAA,MACN,QAAA;AAAA,MACA,EAAI,EAAA,CAAA;AAAA,KACN,CAAA;AAEA,IAAA,MAAM,KAAK,OAAQ,CAAA,KAAA;AAAA,MACjB,eAAe,eAAgB,CAAA;AAAA,QAC7B,QAAQ,GAAI,CAAA,UAAA;AAAA,QACZ,MAAM,GAAI,CAAA,IAAA;AAAA,OACX,eAAe,eAAgB,CAAA;AAAA,QAC9B,QAAQ,GAAI,CAAA,QAAA;AAAA,QACZ,MAAM,GAAI,CAAA,EAAA;AAAA,OACX,CAAA,CAAA,CAAA;AAAA,KACH,CAAA;AAEA,IAAK,IAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,SAAA,CACE,SACA,EAAA,UAAA,EACA,EACe,EAAA;AACf,IAAA,OAAO,UAAU,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,SAAA,EAAW,YAAY,EAAE,CAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,UAAA,CACE,SACA,EAAA,UAAA,EACA,EACe,EAAA;AACf,IAAA,OAAO,UAAU,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,SAAA,EAAW,YAAY,EAAE,CAAA,CAAA;AAAA,GAC5D;AAAA,EAEA,QAAA,CACE,SACA,EAAA,OAAA,EACA,OACe,EAAA;AACf,IAAA,OAAO,SAAS,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,SAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAAA,GAC5D;AAAA,EAEA,SAAA,CACE,SACA,EAAA,OAAA,EACA,OACe,EAAA;AACf,IAAA,OAAO,SAAS,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,SAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAAA,GAC7D;AAAA,EAEA,aACE,CAAA,SAAA,EACA,OACA,EAAA,YAAA,EACA,gBACA,OACe,EAAA;AACf,IAAO,OAAA,aAAA;AAAA,MACL,IAAA;AAAA,MACA,IAAK,CAAA,EAAA;AAAA,MACL,SAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAEA,cACE,CAAA,SAAA,EACA,OACA,EAAA,YAAA,EACA,gBACA,OACe,EAAA;AACf,IAAO,OAAA,aAAA;AAAA,MACL,IAAA;AAAA,MACA,CAAC,IAAK,CAAA,EAAA;AAAA,MACN,SAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAEA,aAAA,CACE,SACA,EAAA,OAAA,EACA,OACe,EAAA;AACf,IAAA,OAAO,cAAc,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,SAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAAA,GACjE;AAAA,EAEA,cAAA,CACE,SACA,EAAA,OAAA,EACA,OACe,EAAA;AACf,IAAA,OAAO,cAAc,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,SAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAAA,GAClE;AAAA,EAEA,QAAA,CAAS,WAAmB,KAAqC,EAAA;AAC/D,IAAA,OAAO,QAAS,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,GACjD;AAAA,EAEA,SAAA,CAAU,WAAmB,KAAqC,EAAA;AAChE,IAAA,OAAO,SAAS,IAAM,EAAA,CAAC,IAAK,CAAA,EAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,GAClD;AAAA,EAEA,aAAA,CAAc,WAAmB,UAA0C,EAAA;AACzE,IAAA,OAAO,aAAc,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,WAAW,UAAU,CAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,cAAA,CAAe,WAAmB,UAA0C,EAAA;AAC1E,IAAA,OAAO,cAAc,IAAM,EAAA,CAAC,IAAK,CAAA,EAAA,EAAI,WAAW,UAAU,CAAA,CAAA;AAAA,GAC5D;AAAA,EAEA,YAAA,CAAa,SAAmB,EAAA,IAAA,EAAc,EAA2B,EAAA;AACvE,IAAA,OAAO,IAAK,CAAA,WAAA,CAAY,SAAW,EAAA,CAAC,CAAO,MAAA;AAAA,MACzC,CAAC,IAAI,GAAG,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,KACnB,CAAA,CAAA,CAAA;AAAA,GACJ;AAAA,EAEA,aAAa,UAAmC,EAAA;AAC9C,IAAA,OAAOqB,cAAa,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,UAAU,CAAA,CAAA;AAAA,GAC/C;AAAA,EAEA,WAAW,UAAmC,EAAA;AAC5C,IAAA,OAAOA,cAAa,CAAA,IAAA,EAAM,CAAC,IAAA,CAAK,IAAI,UAAU,CAAA,CAAA;AAAA,GAChD;AAAA,EAEA,eACE,CAAA,IAAA,EACA,OAAiE,GAAA,EAClD,EAAA;AACf,IAAA,OAAOC,iBAAgB,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,GACrD;AAAA,EAEA,aACE,CAAA,IAAA,EACA,OAGI,GAAA,EACW,EAAA;AACf,IAAA,OAAOA,kBAAgB,IAAM,EAAA,CAAC,IAAK,CAAA,EAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,GACtD;AAAA,EAEA,UAAA,CACE,IACA,EAAA,MAAA,EACA,OAIe,EAAA;AACf,IAAA,OAAOC,aAAW,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,IAAA,EAAM,QAAQ,OAAO,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,QAAA,CACE,IACA,EAAA,MAAA,EACA,OAIe,EAAA;AACf,IAAA,OAAOA,aAAW,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,IAAA,EAAM,QAAQ,OAAO,CAAA,CAAA;AAAA,GACzD;AAAA,EAEA,YAAA,CACE,IACA,EAAA,EAAA,EACA,OAIe,EAAA;AACf,IAAA,OAAOC,eAAa,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,GACtD;AAAA,EAEA,UAAA,CACE,IACA,EAAA,EAAA,EACA,OAIe,EAAA;AACf,IAAA,OAAOA,eAAa,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,GACvD;AAAA,EAQA,UAAA,CAAW,SAAiB,IAAgC,EAAA;AAC1D,IAAA,MAAM,CAAC,OAAA,EAAS,GAAG,CAAA,GAAI,IAAK,CAAA,MAAA,KAAW,CAAI,GAAA,IAAA,GAAO,CAAChB,sBAAA,EAAa,IAAK,CAAA,CAAC,CAAC,CAAA,CAAA;AAEvE,IAAO,OAAAQ,YAAA;AAAA,MACL,IAAA;AAAA,MACA,IAAK,CAAA,EAAA;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAQA,QAAA,CAAS,SAAiB,IAAgC,EAAA;AACxD,IAAA,MAAM,CAAC,OAAA,EAAS,GAAG,CAAA,GAAI,IAAK,CAAA,MAAA,KAAW,CAAI,GAAA,IAAA,GAAO,CAACR,sBAAA,EAAa,IAAK,CAAA,CAAC,CAAC,CAAA,CAAA;AAEvE,IAAO,OAAAQ,YAAA;AAAA,MACL,IAAA;AAAA,MACA,CAAC,IAAK,CAAA,EAAA;AAAA,MACN,IAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAEA,MAAM,YAAY,SAAqC,EAAA;AACrD,IAAA,OAAO,YAAY,IAAM,EAAA;AAAA,MACvB,IAAM,EAAA,CAAA,mEAAA,CAAA;AAAA,MACN,MAAA,EAAQ,CAAC,SAAS,CAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,MAAM,YAAa,CAAA,SAAA,EAAmB,UAAsC,EAAA;AAC1E,IAAA,OAAO,YAAY,IAAM,EAAA;AAAA,MACvB,IAAM,EAAA,CAAA,2FAAA,CAAA;AAAA,MACN,MAAA,EAAQ,CAAC,SAAA,EAAW,UAAU,CAAA;AAAA,KAC/B,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,MAAM,iBAAiB,cAA0C,EAAA;AAC/D,IAAA,OAAO,YAAY,IAAM,EAAA;AAAA,MACvB,IAAM,EAAA,CAAA,mFAAA,CAAA;AAAA,MACN,MAAA,EAAQ,CAAC,cAAc,CAAA;AAAA,KACxB,CAAA,CAAA;AAAA,GACH;AACF,CAAA;AAEA,MAAM,WAAc,GAAA,OAClB,GACA,EAAA,KAAA,EACA,EACoB,KAAA;AACpB,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAA,OAAO,EAAG,EAAA,CAAA;AAAA,GACL,MAAA;AACL,IAAA,MAAM,MACJ,OAAO,KAAA,KAAU,WACb,EAAE,IAAA,EAAM,OAAO,MAAQ,EAAA,IACvB,GAAA,KAAA,CAAM,SACN,KACA,GAAAzB,eAAA,CAAAH,gBAAA,CAAA,EAAA,EAAK,QAAL,EAAY,MAAA,EAAQ,EAAG,EAAA,CAAA,CAAA;AAG7B,IAAM,MAAA,OAAA,GAAU,GAAI,CAAA,WAAA,CAAY,GAAG,CAAA,CAAA;AAEnC,IAAI,IAAA;AACF,MAAM,MAAA,MAAA,GAAS,MAAM,EAAG,EAAA,CAAA;AACxB,MAAI,GAAA,CAAA,UAAA,CAAW,KAAK,OAAO,CAAA,CAAA;AAC3B,MAAO,OAAA,MAAA,CAAA;AAAA,aACA,GAAP,EAAA;AACA,MAAI,GAAA,CAAA,OAAA,CAAQ,GAAc,EAAA,GAAA,EAAK,OAAO,CAAA,CAAA;AACtC,MAAM,MAAA,GAAA,CAAA;AAAA,KACR;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,YAAY,CAChB,SAAA,EACA,EACA,EAAA,SAAA,EACA,YACA,EACkB,KAAA;AAClB,EAAA,OAAO,YAAY,SAAW,EAAA,EAAA,EAAI,WAAW,EAAC,EAAG,CAAC,CAAO,MAAA;AAAA,IACvD,CAAC,UAAU,GAAG,EAAE,GAAI,CAAA,EAAA,CAAG,CAAC,CAAC,CAAA;AAAA,GACzB,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAM,WAAW,CACf,SAAA,EACA,EACA,EAAA,SAAA,EACA,SACA,OACkB,KAAA;AAClB,EAAA,OAAO,YAAY,SAAW,EAAA,EAAA,EAAI,SAAW,EAAA,IAAI,CAAC,CAAA,KAAOA,gBACpD,CAAA,EAAA,EAAA,CAAA,CAAE,IAAI,CAAE,CAAA,KAAA,CAAM,OAAS,EAAA,OAAO,CAAC,CAClC,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CACpB,SACA,EAAA,EAAA,EACA,WACA,OACA,EAAA,YAAA,EACA,gBACA,OACkB,KAAA;AAClB,EAAA,OAAO,YAAY,SAAW,EAAA,EAAA,EAAI,WAAW,EAAC,EAAG,CAAC,CAAO,KAAAA,gBAAA,CAAA,EAAA,EACpD,CAAE,CAAA,GAAA,CAAI,EAAE,UAAW,CAAA,OAAA,EAAS,cAAc,cAAgB,EAAA,OAAO,CAAC,CACrE,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAM,gBAAgB,CACpB,SAAA,EACA,EACA,EAAA,SAAA,EACA,SACA,OACkB,KAAA;AAClB,EAAA,OAAO,YAAY,SAAW,EAAA,EAAA,EAAI,SAAW,EAAA,IAAI,CAAC,CAAA,KAAOA,gBACpD,CAAA,EAAA,EAAA,CAAA,CAAE,IAAI,CAAE,CAAA,UAAA,CAAW,OAAS,EAAA,OAAO,CAAC,CACvC,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAM,QAAW,GAAA,CACf,SACA,EAAA,EAAA,EACA,WACA,KACkB,KAAA;AAClB,EAAA,OAAO,WAAY,CAAA,SAAA,EAAW,EAAI,EAAA,SAAA,EAAW,EAAI,EAAA,CAAC,CAAO,KAAAA,gBAAA,CAAA,EAAA,EACpD,EAAE,GAAI,CAAA,CAAA,CAAE,KAAM,CAAA,KAAK,CAAC,CACvB,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAM,aAAgB,GAAA,CACpB,SACA,EAAA,EAAA,EACA,WACA,UACkB,KAAA;AAClB,EAAA,OAAO,WAAY,CAAA,SAAA,EAAW,EAAI,EAAA,SAAA,EAAW,EAAI,EAAA,CAAC,CAAO,KAAAA,gBAAA,CAAA,EAAA,EACpD,EAAE,GAAI,CAAA,CAAA,CAAE,UAAW,CAAA,UAAU,CAAC,CACjC,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAMiC,cAAe,GAAA,OACnB,SACA,EAAA,EAAA,EACA,IACkB,KAAA;AAClB,EAAA,MAAM,GAAwB,GAAA;AAAA,IAC5B,IAAM,EAAA,QAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,IAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,UAAU,OAAQ,CAAA,KAAA;AAAA,IACtB,CAAG,EAAA,GAAA,CAAI,MAAW,KAAA,QAAA,GAAW,WAAW,MAAkB,CAAA,SAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,GAC5D,CAAA;AAEA,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAMC,iBAAkB,GAAA,OACtB,SACA,EAAA,EAAA,EACA,MACA,OACkB,KAAA;AAClB,EAAA,MAAM,GAA2B,GAAAlC,gBAAA,CAAA;AAAA,IAC/B,IAAM,EAAA,WAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,IAAA;AAAA,GACG,EAAA,OAAA,CAAA,CAAA;AAGL,EAAI,IAAA,KAAA,CAAA;AACJ,EAAI,IAAA,GAAA,CAAI,WAAW,MAAQ,EAAA;AACzB,IAAQ,KAAA,GAAA,CAAA,cAAA,EAAiB,IAAI,YAAe,GAAA,YAAA,GAAe,OACzD,GAAI,CAAA,IAAA,CAAA,CAAA,EACF,GAAI,CAAA,OAAA,GAAU,UAAa,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAC1B,MAAA;AACL,IAAQ,KAAA,GAAA,CAAA,gBAAA,EACN,IAAI,iBAAoB,GAAA,gBAAA,GAAmB,OACxC,GAAI,CAAA,IAAA,CAAA,CAAA,EAAQ,IAAI,MAAS,GAAA,CAAA,SAAA,EAAY,IAAI,MAAY,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,EACxD,IAAI,OAAU,GAAA,CAAA,UAAA,EAAa,IAAI,OAAa,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,EAC3C,GAAI,CAAA,OAAA,GAAU,UAAa,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAChC;AAEA,EAAM,MAAA,SAAA,CAAU,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAEnC,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAMmC,YAAA,GAAa,OACjB,SACA,EAAA,EAAA,EACA,MACA,MACA,EAAA,OAAA,GAGI,EACc,KAAA;AAClB,EAAA,MAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA,GAAI,0BAA0B,IAAI,CAAA,CAAA;AAEzD,EAAA,MAAM,GAAsB,GAAAnC,gBAAA,CAAA;AAAA,IAC1B,IAAM,EAAA,MAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,MAAA;AAAA,IACA,IAAM,EAAA,QAAA;AAAA,IACN,MAAA;AAAA,GACG,EAAA,OAAA,CAAA,CAAA;AAGL,EAAI,IAAA,KAAA,CAAA;AACJ,EAAM,MAAA,UAAA,GAAa,gBAAgB,GAAG,CAAA,CAAA;AACtC,EAAI,IAAA,GAAA,CAAI,WAAW,QAAU,EAAA;AAC3B,IAAA,KAAA,GAAQ,eAAe,UAAuB,CAAA,UAAA,EAAA,MAAA,CAC3C,IAAIO,SAAK,CAAA,CACT,KAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACP,MAAA;AACL,IAAQ,KAAA,GAAA,CAAA,SAAA,EAAY,IAAI,YAAe,GAAA,YAAA,GAAe,MAAM,UAC1D,CAAA,EAAA,GAAA,CAAI,UAAU,UAAa,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAE/B;AAEA,EAAM,MAAA,SAAA,CAAU,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAEnC,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAM6B,iBAAe,OACnB,SAAA,EACA,EACA,EAAA,IAAA,EACA,IACA,OAIkB,KAAA;AAClB,EAAA,MAAM,CAAC,MAAA,EAAQ,UAAU,CAAA,GAAI,0BAA0B,IAAI,CAAA,CAAA;AAE3D,EAAA,MAAM,GAAwB,GAAApC,gBAAA,CAAA;AAAA,IAC5B,IAAM,EAAA,QAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,MAAA;AAAA,IACA,IAAM,EAAA,UAAA;AAAA,IACN,QAAA,EAAU,EAAG,CAAA,SAAA,CAAU,WAAW,CAAA;AAAA,GAC/B,EAAA,OAAA,CAAA,CAAA;AAGL,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,SAAoB,EAAC,CAAA;AAC3B,EAAM,MAAA,UAAA,GAAa,gBAAgB,GAAG,CAAA,CAAA;AACtC,EAAI,IAAA,GAAA,CAAI,WAAW,QAAU,EAAA;AAC3B,IAAA,KAAA,GAAQ,iBAAiB,UAAiB,CAAA,IAAA,EAAA,eAAA,CAAgB,IAAI,QAAQ,CAAA,CAAA,EACpE,IAAI,SACA,GAAA,CAAA;AAAA,UAAA,EACEK,uBAAY,GAAI,CAAA,SAAS,CAC3B,CAAA,CAAA,GAAA,EAAA,CAAA,EAEJ,IAAI,OACA,GAAA,CAAA;AAAA,QACA,EAAAI,UAAA,CAAO,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA,CAAA,GAC1B,EACH,CAAA,EAAA,GAAA,CAAI,OAAW,IAAA,GAAA,CAAI,KAAQ,GAAA,IAAA,GAAO,EAAK,CAAA,EAAA;AAAA,MACxC,IAAI,OAAW,IAAA,UAAA;AAAA,MACf,IAAI,KAAS,IAAA,CAAA,MAAA,EAASA,UAAO,CAAA,GAAA,CAAI,OAAO,MAAM,CAAA,CAAA,CAAA;AAAA,KAE7C,CAAA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GACN,MAAA;AACL,IAAA,KAAA,GAAQ,CAAe,YAAA,EAAA,UAAA,CAAA,EAAa,GAAI,CAAA,OAAA,GAAU,UAAa,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GACjE;AAEA,EAAM,MAAA,SAAA,CAAU,QAAQ,KAAM,CAAA;AAAA,IAC5B,IAAM,EAAA,KAAA;AAAA,IACN,MAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAM,WAAA,GAAc,CAClB,EAAA,EACA,GACqB,KAAA;AACrB,EAAO,OAAA,EAAA,CAAG,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,IAAK,CAAA,CAAC,EAAE,QAAA,EAAe,KAAA,QAAA,GAAW,CAAC,CAAA,CAAA;AAClE,CAAA;;AC7rBO,MAAM,mBAAsB,GAAA,OACjC,EACA,EAAA,OAAA,EACA,MACkB,KAAA;AAClB,EAAA,MAAM,EAAG,CAAA,YAAA;AAAA,IACP,eAAe,eAAgB,CAAA;AAAA,MAC7B,MAAM,MAAO,CAAA,eAAA;AAAA,KACd,CAAc,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA;AAAA,GACjB,CAAA;AACF,EAAA;AAEO,MAAM,qBAAwB,GAAA,OACnC,EACA,EAAA,OAAA,EACA,MACG,KAAA;AACH,EAAA,MAAM,EAAG,CAAA,YAAA;AAAA,IACP,eAAe,eAAgB,CAAA;AAAA,MAC7B,MAAM,MAAO,CAAA,eAAA;AAAA,KACd,CAAsB,CAAA,kBAAA,EAAA,OAAA,CAAA,CAAA,CAAA;AAAA,GACzB,CAAA;AACF,EAAA;AAEa,MAAA,sBAAA,GAAyB,OACpC,EAAA,EACA,MACqC,KAAA;AACrC,EAAI,IAAA;AACF,IAAM,MAAA,MAAA,GAAS,MAAM,EAAG,CAAA,MAAA;AAAA,MACtB,CAAA;AAAA,YAAA,EACQ,eAAgB,CAAA,EAAE,IAAM,EAAA,MAAA,CAAO,iBAAiB,CAAA,CAAA,CAAA;AAAA,KAC1D,CAAA;AACA,IAAA,OAAO,MAAO,CAAA,WAAA,CAAY,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,GAAQ,KAAA,CAAC,GAAI,CAAA,CAAC,CAAG,EAAA,IAAI,CAAC,CAAC,CAAA,CAAA;AAAA,WAC3D,GAAP,EAAA;AACA,IAAK,IAAA,GAAA,CAAgC,SAAS,OAAS,EAAA;AACrD,MAAM,MAAA,sBAAA,CAAuB,IAAI,MAAM,CAAA,CAAA;AACvC,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAM,MAAA,GAAA,CAAA;AAAA,GACR;AACF;;;;;;;;;;;;;;;;;;ACtBA,MAAM,QAAQ,CAAC,OAAA,KAAqBuB,YAAS,CAAA,EAAE,SAAS,CAAA,CAAA;AAEjD,MAAM,iBAAoB,GAAA,OAC/B,OACA,EAAA,MAAA,EACA,MACA,EACkB,KAAA;AAnCpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAoCE,EAAA,MAAA,GAAShC,gBAAK,CAAA,EAAA,EAAA,MAAA,CAAA,CAAA;AACd,EAAA,MAAM,KAAQ,GAAA,MAAM,iBAAkB,CAAA,MAAA,EAAQ,EAAE,CAAA,CAAA;AAEhD,EAAI,IAAA,KAAA,GAAQ,KAAK,QAAW,GAAA,CAAA,CAAA;AAC5B,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AACX,EAAM,MAAA,GAAA,GAAM,KAAK,CAAC,CAAA,KAAM,QAAQ,QAAW,GAAA,QAAA,CAAS,IAAK,CAAA,CAAC,CAAC,CAAA,CAAA;AAC3D,EAAI,IAAA,CAAC,KAAM,CAAA,GAAG,CAAG,EAAA;AACf,IAAA,IAAA,EAAA,CAAA;AACA,IAAQ,KAAA,GAAA,GAAA,CAAA;AAAA,GACV;AAEA,EAAM,MAAA,GAAA,GAAM,KAAK,IAAI,CAAA,CAAA;AACrB,EAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,IAAA,MAAA,CAAO,cAAiB,GAAA,IAAA,CAAK,IAAO,GAAA,CAAC,CAAM,KAAA,OAAA,CAAA;AAAA,GAC7C;AAEA,EAAA,IAAI,CAAC,MAAO,CAAA,cAAA;AAAgB,IAAA,OAAO,MAAO,CAAA,cAAA,CAAA;AAE1C,EAAA,MAAM,sBAAsB,EAAC,CAAA;AAE7B,EAAW,KAAA,MAAA,IAAA,IAAQU,kBAAQ,CAAA,OAAO,CAAG,EAAA;AACnC,IAAM,MAAA,OAAA,GAAU,IAAI2B,WAAA,CAAQ,IAAI,CAAA,CAAA;AAChC,IAAI,IAAA,EAAA,CAAA;AAEJ,IAAA,IAAI,EAAI,EAAA;AACN,MAAA,OAAA,CAAM,EAAO,GAAA,MAAA,CAAA,aAAA,KAAP,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,EAAA,EAAA,IAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAO,MAAM,OAAO,CAAA,CAAA,CAAA,CAAA;AAAA,KAC7C,MAAA;AACL,MAAA,OAAA,CAAM,EAAO,GAAA,MAAA,CAAA,cAAA,KAAP,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,EAAA,EAAA,IAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAO,MAAM,OAAO,CAAA,CAAA,CAAA,CAAA;AAAA,KACrD;AAEA,IAAA,MAAM,gBAAmB,GAAA,MAAM,sBAAuB,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACrE,IAAI,IAAA;AACF,MAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,QACG,IAAA,EAAA,IAAM,gBAAiB,CAAA,IAAA,CAAK,OAAO,CAAA,IACnC,CAAC,EAAA,IAAM,CAAC,gBAAA,CAAiB,IAAK,CAAA,OAAO,CACtC,EAAA;AACA,UAAA,SAAA;AAAA,SACF;AAEA,QAAA,IAAI,KAAW,EAAA,IAAA,CAAA;AAAG,UAAA,MAAA;AAElB,QAAM,MAAA,gBAAA;AAAA,UACJ,OAAA;AAAA,UACA,EAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA;AAAA,UACA,IAAA;AAAA,UACA,mBAAA;AAAA,SACF,CAAA;AAEA,QAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA;AAAA,UACb,GAAG,EAAK,GAAA,UAAA,GAAa,aAAiB,CAAA,CAAA,EAAAC,oBAAA,CAAU,KAAK,IAAI,CAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAE7D;AAEA,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,OAAA,CAAM,EAAO,GAAA,MAAA,CAAA,YAAA,KAAP,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,EAAA,EAAA,IAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAO,MAAM,OAAO,CAAA,CAAA,CAAA,CAAA;AAAA,OAC5C,MAAA;AACL,QAAA,OAAA,CAAM,EAAO,GAAA,MAAA,CAAA,aAAA,KAAP,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,EAAA,EAAA,IAAA,IAAA,GAAA,EAAA,GAAA,EAAA,GAAO,MAAM,OAAO,CAAA,CAAA,CAAA,CAAA;AAAA,OACpD;AAAA,KACA,SAAA;AACA,MAAM,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,cAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,QAAS,CAAA;AAAA,QACpC,OAAS,EAAA,IAAA;AAAA,QACT,UAAU,MAAO,CAAA,QAAA;AAAA,QACjB,KAAO,EAAA,mBAAA;AAAA,QACP,QAAQ,MAAO,CAAA,MAAA;AAAA;AAAA,QAEf,WAAW,MAAO,CAAA,SAAA;AAAA,OACpB,CAAA,CAAA,CAAA;AAEA,MAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AAAA,KACtB;AAEA,IAAA,OAAO,MAAO,CAAA,cAAA,CAAA;AAAA,GAChB;AACF,EAAA;AAEO,MAAM,cAA4D,GAAC;AAE1E,MAAM,KAAQ,GAAA;AAAA,EACZ,IAAM,EAAA,OAAA;AAAA,EACN,MAAQ,EAAAC,qBAAA;AACV,CAAA,CAAA;AAEA,MAAM,mBAAmB,OACvB,EAAA,EACA,IACA,IACA,EAAA,MAAA,EACA,SACA,mBACG,KAAA;AAhIL,EAAA,IAAA,EAAA,CAAA;AAiIE,EAAA,MAAM,OAAO,MAAM,EAAA,CAAG,WAAY,CAAA,KAAA,EAAO,OAAO,EAAO,KAAA;AACrD,IAAa,YAAA,EAAA,CAAA;AAEb,IAAI,IAAA,OAAA,GAAU,WAAY,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AACnC,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAI,IAAA;AACF,QAAM,MAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,eACtB,GAAP,EAAA;AAEA,QAAA,IAAK,IAAyB,IAAS,KAAA,gCAAA;AACrC,UAAM,MAAA,GAAA,CAAA;AAGR,QAAA,MAAM,OAAO,MAAO,CAAAC,cAAA,CAAI,cAAc,IAAK,CAAA,IAAI,EAAE,QAAQ,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,OAAA,GAAU,iBAAkB,EAAA,CAAA;AAC5B,MAAY,WAAA,CAAA,IAAA,CAAK,IAAI,CAAI,GAAA,OAAA,CAAA;AAAA,KAC3B;AAEA,IAAA,MAAMC,GAAK,GAAA,wBAAA,CAAyB,EAAI,EAAA,EAAA,EAAI,MAAM,CAAA,CAAA;AAElD,IAAA,KAAA,MAAW,EAAM,IAAA,EAAA,GAAK,OAAU,GAAA,OAAA,CAAQ,SAAW,EAAA;AACjD,MAAM,MAAA,EAAA,CAAGA,KAAI,EAAE,CAAA,CAAA;AAAA,KACjB;AAEA,IAAA,MAAA,CAAO,KAAK,mBAAsB,GAAA,qBAAA;AAAA,MAChCA,GAAG,CAAA,OAAA;AAAA,MACH,IAAK,CAAA,OAAA;AAAA,MACL,MAAA;AAAA,KACF,CAAA;AAEA,IAAA,OAAOA,GAAG,CAAA,YAAA,CAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAM,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,cAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,OAAQ,CAAA;AAAA,MACnC,GAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAU,MAAO,CAAA,QAAA;AAAA,MACjB,KAAO,EAAA,mBAAA;AAAA,MACP,QAAQ,MAAO,CAAA,MAAA;AAAA;AAAA,MAEf,WAAW,MAAO,CAAA,SAAA;AAAA,KACpB,CAAA,CAAA,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEa,MAAA,OAAA,GAAU,CACrB,OAAA,EACA,MACA,EAAA,IAAA,GAAiB,EAAC,KACA,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,IAAI,EAAA;AAEpD,MAAA,QAAA,GAAW,CACtB,OAAA,EACA,MACA,EAAA,IAAA,GAAiB,EAAC,KACA,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,KAAK,EAAA;AAE3D,MAAM,OAAO,OAClB,OAAA,EACA,MACA,EAAA,IAAA,GAAiB,EACC,KAAA;AAClB,EAAA,MAAM,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,KAAK,CAAA,CAAA;AACpD,EAAA,MAAM,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AACrD;;ACxLA,MAAM,OAAA,GAAU,OACd,OAAA,EACA,GAGG,KAAA;AACH,EAAM,MAAA,EAAA,GAAK,IAAIJ,WAAA,CAAQ,OAAO,CAAA,CAAA;AAE9B,EAAI,IAAA;AACF,IAAM,MAAA,EAAA,CAAG,MAAM,GAAG,CAAA,CAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,WACA,KAAP,EAAA;AACA,IAAA,MAAM,GAAM,GAAA,KAAA,CAAA;AAEZ,IACE,IAAA,OAAO,IAAI,OAAY,KAAA,QAAA,IACvB,IAAI,OAAQ,CAAA,QAAA,CAAS,iBAAiB,CACtC,EAAA;AACA,MAAO,OAAA,cAAA,CAAA;AAAA,KACT;AAEA,IAAA,IAAI,GAAI,CAAA,IAAA,KAAS,OAAW,IAAA,GAAA,CAAI,SAAS,OAAS,EAAA;AAChD,MAAO,OAAA,SAAA,CAAA;AAAA,KAEP,MAAA,IAAA,GAAA,CAAI,IAAS,KAAA,OAAA,IACZ,OAAO,GAAA,CAAI,OAAY,KAAA,QAAA,IACtB,GAAI,CAAA,OAAA,CAAQ,QAAS,CAAA,gCAAgC,CACvD,EAAA;AACA,MAAO,OAAA,WAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,OAAO,EAAE,KAAM,EAAA,CAAA;AAAA,KACjB;AAAA,GACA,SAAA;AACA,IAAA,MAAM,GAAG,KAAM,EAAA,CAAA;AAAA,GACjB;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,OACnB,OACA,EAAA,YAAA,EACA,QACA,IAMG,KAAA;AA1DL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA2DE,EAAM,MAAA,MAAA,GAAS,8BAA8B,OAAO,CAAA,CAAA;AAEpD,EAAA,MAAM,SAAS,MAAM,OAAA;AAAA,IACnB,iBAAkB,CAAA,YAAA,EAAc,EAAE,QAAA,EAAU,YAAY,CAAA;AAAA,IACxD,IAAA,CAAK,IAAI,MAAM,CAAA;AAAA,GACjB,CAAA;AACA,EAAA,IAAI,WAAW,IAAM,EAAA;AACnB,IAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,GAAI,CAAA,IAAA,CAAK,eAAe,MAAM,CAAA,CAAA,CAAA;AAAA,GAC/C,MAAA,IAAW,WAAW,SAAW,EAAA;AAC/B,IAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,GAAI,CAAA,IAAA,CAAK,eAAe,MAAM,CAAA,CAAA,CAAA;AAAA,GAC/C,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,IAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA;AAAA,MACb,8DAAA;AAAA,KAAA,CAAA;AAEF,IAAA,OAAA;AAAA,GACF,MAAA,IAAW,WAAW,WAAa,EAAA;AACjC,IAAA,IAAI,OAAU,GAAA,CAAA,qBAAA,EACZ,IAAK,CAAA,MAAA,GAAS,QAAW,GAAA,MAAA,CAAA,UAAA,CAAA,CAAA;AAG3B,IAAM,MAAA,IAAA,GAAO,aAAa,WACtB,GAAA,IAAI,IAAI,YAAa,CAAA,WAAW,CAAE,CAAA,QAAA,GAClC,YAAa,CAAA,IAAA,CAAA;AAEjB,IAAA,MAAM,UAAU,IAAS,KAAA,WAAA,CAAA;AACzB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAW,OAAA,IAAA,CAAA;AAAA,2EAAA,CAAA,CAAA;AAAA,KACb;AAEA,IAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,GAAI,CAAA,OAAA,CAAA,CAAA;AAEnB,IAAA,MAAM,iBAAiB,MAAM,4BAAA;AAAA,MAC3B,OAAA;AAAA,MACA,IAAK,CAAA,MAAA;AAAA,KACP,CAAA;AACA,IAAA,IAAI,CAAC,cAAA;AAAgB,MAAA,OAAA;AAErB,IAAA,MAAM,YAAa,CAAA,OAAA,EAAS,cAAgB,EAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AACxD,IAAA,OAAA;AAAA,GACK,MAAA;AACL,IAAA,MAAM,MAAO,CAAA,KAAA,CAAA;AAAA,GACf;AAEA,EAAA,IAAI,CAAC,IAAK,CAAA,MAAA;AAAQ,IAAA,OAAA;AAElB,EAAM,MAAA,EAAA,GAAK,IAAIA,WAAA,CAAQ,OAAO,CAAA,CAAA;AAE9B,EAAM,MAAA,EAAE,QAAW,GAAA,EAAA,CAAA;AACnB,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,EAAA,CAAG,MAAS,GAAA,KAAA,CAAA,CAAA;AACZ,IAAI,IAAA;AACF,MAAM,MAAA,EAAA,CAAG,KAAM,CAAA,CAAA,eAAA,EAAkB,MAAS,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1C,MAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,CAAkB,eAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,aAC9B,GAAP,EAAA;AACA,MAAK,IAAA,GAAA,CAAyB,SAAS,OAAS,EAAA;AAC9C,QAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,CAAU,OAAA,EAAA,MAAA,CAAA,eAAA,CAAA,CAAA,CAAA;AAAA,OACxB,MAAA;AACL,QAAM,MAAA,GAAA,CAAA;AAAA,OACR;AAAA,KACF;AACA,IAAA,EAAA,CAAG,MAAS,GAAA,MAAA,CAAA;AAAA,GACd;AAEA,EAAM,MAAA,sBAAA,CAAuB,IAAI,MAAM,CAAA,CAAA;AACvC,EAAA,MAAM,GAAG,KAAM,EAAA,CAAA;AACjB,CAAA,CAAA;AAEa,MAAA,QAAA,GAAW,OACtB,GAAA,EACA,MACG,KAAA;AACH,EAAW,KAAA,MAAA,OAAA,IAAW3B,kBAAQ,CAAA,GAAG,CAAG,EAAA;AAClC,IAAM,MAAA,YAAA,CAAa,OAAS,EAAA,OAAA,EAAS,MAAQ,EAAA;AAAA,MAC3C,GAAI,CAAA,EAAE,QAAU,EAAA,IAAA,EAAQ,EAAA;AACtB,QAAA,OAAO,oBAAoB,QAAoB,CAAA,SAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OACjD;AAAA,MACA,cAAA,CAAe,EAAE,QAAA,EAAY,EAAA;AAC3B,QAAA,OAAO,CAAY,SAAA,EAAA,QAAA,CAAA,qBAAA,CAAA,CAAA;AAAA,OACrB;AAAA,MACA,cAAA,CAAe,EAAE,QAAA,EAAY,EAAA;AAC3B,QAAA,OAAO,CAAY,SAAA,EAAA,QAAA,CAAA,eAAA,CAAA,CAAA;AAAA,OACrB;AAAA,MACA,MAAQ,EAAA,IAAA;AAAA,KACT,CAAA,CAAA;AAAA,GACH;AACF,EAAA;AAEa,MAAA,MAAA,GAAS,OACpB,GAAA,EACA,MACG,KAAA;AACH,EAAW,KAAA,MAAA,OAAA,IAAWA,kBAAQ,CAAA,GAAG,CAAG,EAAA;AAClC,IAAM,MAAA,YAAA,CAAa,OAAS,EAAA,OAAA,EAAS,MAAQ,EAAA;AAAA,MAC3C,GAAA,CAAI,EAAE,QAAA,EAAY,EAAA;AAChB,QAAA,OAAO,CAAkB,eAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAC3B;AAAA,MACA,cAAA,CAAe,EAAE,QAAA,EAAY,EAAA;AAC3B,QAAA,OAAO,CAAY,SAAA,EAAA,QAAA,CAAA,yBAAA,CAAA,CAAA;AAAA,OACrB;AAAA,MACA,cAAA,CAAe,EAAE,QAAA,EAAY,EAAA;AAC3B,QAAA,OAAO,CAAY,SAAA,EAAA,QAAA,CAAA,eAAA,CAAA,CAAA;AAAA,OACrB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,EAAA;AAEa,MAAA,OAAA,GAAU,OACrB,GAAA,EACA,MACG,KAAA;AACH,EAAM,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAA;AACxB,EAAM,MAAA,QAAA,CAAS,KAAK,MAAM,CAAA,CAAA;AAC1B,EAAM,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA,CAAA;AAC3B;;AClKO,MAAM,kBAAqB,GAAA,OAChC,MACA,EAAA,OAAA,EACA,MACA,OACG,KAAA;AAfL,EAAA,IAAA,EAAA,CAAA;AAgBE,EAAA,MAAMgC,eAAM,MAAO,CAAA,cAAA,EAAgB,EAAE,SAAA,EAAW,MAAM,CAAA,CAAA;AAEtD,EAAA,MAAM,WAAW,IAAK,CAAA,OAAA,CAAQ,OAAO,cAAgB,EAAA,CAAA,EAAG,WAAW,IAAS,CAAA,GAAA,CAAA,CAAA,CAAA;AAC5E,EAAA,MAAM,UAAa,GAAAC,wBAAA;AAAA,IACjB,QAAA;AAAA,IACA,IAAK,CAAA,IAAA,CAAK,MAAO,CAAA,QAAA,EAAU,OAAO,QAAQ,CAAA;AAAA,GAC5C,CAAA;AAEA,EAAA,MAAMC,kBAAU,CAAA,QAAA,EAAU,OAAQ,CAAA,UAAA,EAAY,IAAI,CAAC,CAAA,CAAA;AACnD,EAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,GAAI,CAAA,CAAA,QAAA,EAAWN,qBAAU,QAAQ,CAAA,CAAA,CAAA,CAAA,CAAA;AAClD,EAAA;AAEO,MAAM,QAAW,GAAA,OACtB,MACA,EAAA,CAAC,IAAI,CACa,KAAA;AAClB,EAAA,IAAI,CAAC,IAAA;AAAM,IAAM,MAAA,IAAI,MAAM,2BAA2B,CAAA,CAAA;AAEtD,EAAA,MAAM,UAAU,iBAAkB,EAAA,CAAA;AAClC,EAAA,MAAM,kBAAmB,CAAA,MAAA,EAAQ,OAAS,EAAA,IAAA,EAAM,WAAW,CAAA,CAAA;AAC7D,EAAA;AAEO,MAAM,oBAAoB,MAAM;AACrC,EAAM,MAAA,GAAA,uBAAU,IAAK,EAAA,CAAA;AACrB,EAAO,OAAA;AAAA,IACL,IAAI,cAAe,EAAA;AAAA,IACnB,GAAA,CAAI,aAAgB,GAAA,CAAA;AAAA,IACpB,IAAI,UAAW,EAAA;AAAA,IACf,IAAI,WAAY,EAAA;AAAA,IAChB,IAAI,aAAc,EAAA;AAAA,IAClB,IAAI,aAAc,EAAA;AAAA,GACpB,CACG,GAAI,CAAA,CAAC,KAAW,KAAA,KAAA,GAAQ,EAAK,GAAA,CAAA,CAAA,EAAI,KAAU,CAAA,CAAA,GAAA,KAAM,CACjD,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AACZ,EAAA;AAEA,MAAM,WAAA,GAAc,CAAC,UAAA,EAAoB,IAAyB,KAAA;AAChE,EAAA,IAAI,UAAU,CAA2B,wBAAA,EAAA,UAAA,CAAA;AAAA;AAAA,sBAAA,CAAA,CAAA;AAEzC,EAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,oBAAoB,IAAI,CAAA,CAAA;AAC9C,EAAA,IAAI,IAAM,EAAA;AACR,IAAI,IAAA,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,MAAQ,EAAA;AAC1C,MAAW,OAAA,IAAA,CAAA;AAAA,WACT,EAAA,KAAA,KAAU,QAAW,GAAA,aAAA,GAAgB,WAClC,CAAA,EAAA,EAAA,IAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAAA;AAAA,KACP,MAAA,IAAW,UAAU,QAAU,EAAA;AAC7B,MAAW,OAAA,IAAA,CAAA;AAAA,wBAA6B,EAAA,IAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAAA;AAAA,KAC/B,MAAA,IAAA,KAAA,KAAU,KAAS,IAAA,KAAA,KAAU,QAAU,EAAA;AAChD,MAAA,MAAM,QACJ,KAAU,KAAA,KAAA,GAAQ,eAAe,IAAI,CAAA,GAAI,iBAAiB,IAAI,CAAA,CAAA;AAChE,MAAW,OAAA,IAAA,CAAA;AAAA,uBACT,EAAA,KAAA,GAAQ,IAAI,KAAW,CAAA,CAAA,CAAA,GAAA,WAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAAA;AAAA,KAE3B;AAAA,GACF;AAEA,EAAA,OAAO,OAAU,GAAA,SAAA,CAAA;AACnB,CAAA;;ACuEA,MAAM,YAAe,GAAA,CAAC,KACpB,KAAA,CAAA,EAAG,KAAuB,CAAA,eAAA,EAAA,KAAA,CAAA,wBAAA,CAAA,CAAA;AAE5B,MAAM,OAAU,GAAA,CAACO,IAAa,EAAA,EAAA,KAC5B,+CAA+CA,IAAe,CAAA,SAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAEhE,MAAM,aAAa,CAAC;AAAA,EAClB,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAO,GAAA,EAAA;AAAA,EACP,KAAA;AACF,CAKM,KAAA,CAAA;AAAA,EACF,EAAA,MAAA,CAAA;AAAA,EACA,EAAA,KAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0DF,IAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+DAW+D,EAAA,KAAA,CAAA;AAAA;AAAA;AAAA,MAGzD,EAAA,KAAA,CAAA;AAAA,iBAAA,CAAA,CAAA;AAGR,MAAM,UAAa,GAAA,CAAA;AAAA;AAAA,MAAA,EAEX,aAAa,SAAS,CAAA,CAAA,CAAA,CAAA;AAE9B,MAAM,SAAY,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA,4CAAA,EAI4B,UAAW,CAAA;AAAA,EACrD,MAAQ,EAAA,GAAA;AAAA,EACR,KAAO,EAAA,GAAA;AAAA,EACP,KAAO,EAAA,oBAAA;AACT,CAAC,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAIK,aAAa,SAAS,CAAA,CAAA;AAAA,gBAAA,CAAA,CAAA;AAG9B,MAAM,QAAW,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAAA,EAK6B,UAAW,CAAA;AAAA,EACrD,MAAQ,EAAA,IAAA;AAAA,EACR,KAAO,EAAA,GAAA;AAAA,EACP,KAAO,EAAA,oBAAA;AACT,CAAC,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAQK,aAAa,YAAY,CAAA,CAAA;AAAA,kBAAA,CAAA,CAAA;AA6BjC,MAAM,GAAA,GAAM,WAAW,UAA6B,CAAA,gBAAA,EAAA,OAAA;AAAA,EAClD,SAAA;AAAA,EACA,QAAA;AACF,CAAM,CAAA,EAAA,EAAA,OAAA,CAAQ,UAAU,OAAO,CAAA,CAAA,CAAA,CAAA;AAQxB,MAAM,WAAY,CAAA;AAAA,EACvB,YAAoB,EAAa,EAAA;AAAb,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA,CAAA;AAAA,GAAc;AAAA,EAElC,MAAM,YAAmC,GAAA;AACvC,IAAM,MAAA;AAAA,MACJ,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,KACd,GAAA,MAAM,IAAK,CAAA,EAAA,CAAG,MAAiB,GAAG,CAAA,CAAA;AACtC,IAAO,OAAA,SAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,UAAa,GAAA;AACjB,IAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,KAAK,EAAG,CAAA,KAAA;AAAA,MAC7B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EA6FE,aAAa,WAAW,CAAA,CAAA;AAAA;AAAA,mBAAA,CAAA;AAAA,KAG5B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,cAAiB,GAAA;AACrB,IAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,KAAK,EAAG,CAAA,KAAA;AAAA,MAC7B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAA,EAiEC,aAAa,WAAW,CAAA,CAAA;AAAA,kBAAA,CAAA;AAAA,KAE3B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,WAAc,GAAA;AAClB,IAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,KAAK,EAAG,CAAA,KAAA;AAAA,MAC7B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EASE,aAAa,qBAAqB,CAAA,CAAA;AAAA;AAAA,qBAAA,CAAA;AAAA,KAGtC,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,aAAgB,GAAA;AACpB,IAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,KAAK,EAAG,CAAA,KAAA;AAAA,MAC7B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAA,EAMC,aAAa,WAAW,CAAA,CAAA,CAAA;AAAA,KAC3B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,QAAW,GAAA;AACf,IAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,KAAK,EAAG,CAAA,KAAA;AAAA,MAC7B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAOE,aAAa,WAAW,CAAA,CAAA;AAAA,6BAAA,CAAA;AAAA,KAE5B,CAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,UAAa,GAAA;AACjB,IAAA,MAAM,EAAE,IAAK,EAAA,GAAI,MAAM,IAAA,CAAK,GAAG,KAA0B,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BA4BjC,EAAA,YAAA,CAAa,WAAW,CAAG,CAAA,CAAA,CAAA,CAAA;AAEnD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3iBA,MAAM,QAAwD,GAAA;AAAA,EAC5D,CAAG,EAAA,KAAA,CAAA;AAAA,EACH,CAAG,EAAA,MAAA;AAAA,EACH,CAAG,EAAA,SAAA;AACL,CAAA,CAAA;AAEA,MAAM,aAA8D,GAAA;AAAA,EAClE,CAAG,EAAA,KAAA,CAAA;AAAA;AAAA,EACH,CAAG,EAAA,UAAA;AAAA,EACH,CAAG,EAAA,SAAA;AAAA,EACH,CAAG,EAAA,UAAA;AAAA,EACH,CAAG,EAAA,aAAA;AACL,CAAA,CAAA;AA0Ba,MAAA,cAAA,GAAiB,OAC5B,GAAA,EACA,EACyB,KAAA;AACzB,EAAA,MAAM,MAAmB,EAAC,CAAA;AAE1B,EAAM,MAAA,IAAA,GAAO,MAAM,OAAA,CAAQ,EAAE,CAAA,CAAA;AAE7B,EAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,OAAS,EAAA;AAC/B,IAAA,IAAI,IAAS,KAAA,QAAA;AAAU,MAAA,SAAA;AAEvB,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,IAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,gBAA+B,EAAC,CAAA;AACtC,EAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,IAAA,MAAM,GAAM,GAAA,CAAA,EAAG,KAAM,CAAA,UAAA,CAAA,CAAA,EAAc,KAAM,CAAA,IAAA,CAAA,CAAA,CAAA;AACzC,IAAM,MAAA,SAAA,uBAAgB,GAAY,EAAA,CAAA;AAElC,IAAW,KAAA,MAAA,EAAA,IAAM,KAAK,WAAa,EAAA;AACjC,MAAM,MAAA,EAAE,YAAe,GAAA,EAAA,CAAA;AACvB,MACE,IAAA,CAAC,cACD,EAAG,CAAA,UAAA,KAAe,MAAM,UACxB,IAAA,EAAA,CAAG,cAAc,KAAM,CAAA,IAAA;AAEvB,QAAA,SAAA;AAEF,MAAA,MAAM,QAAW,GAAA,CAAA,EAAG,UAAW,CAAA,aAAA,CAAA,CAAA,EAAiB,UAAW,CAAA,YAAA,CAAA,CAAA,CAAA;AAC3D,MAAA,IAAI,aAAa,GAAK,EAAA;AACpB,QAAA,SAAA,CAAU,IAAI,QAAQ,CAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAEA,IAAA,aAAA,CAAc,GAAG,CAAA,GAAI,EAAE,KAAA,EAAO,SAAU,EAAA,CAAA;AAAA,GAC1C;AAEA,EAAA,MAAM,UAAmB,EAAC,CAAA;AAC1B,EAAW,KAAA,MAAA,EAAA,IAAM,KAAK,OAAS,EAAA;AAC7B,IAAQ,OAAA,CAAA,CAAA,EAAG,GAAG,UAAc,CAAA,CAAA,EAAA,EAAA,CAAG,MAAM,CAAI,GAAA,SAAA,CAAU,GAAK,EAAA,IAAA,EAAM,OAAS,EAAA;AAAA,MACrE,YAAY,EAAG,CAAA,UAAA;AAAA,MACf,MAAM,EAAG,CAAA,IAAA;AAAA,MACT,MAAM,EAAG,CAAA,IAAA;AAAA,MACT,YAAY,EAAG,CAAA,UAAA;AAAA,MACf,SAAS,EAAG,CAAA,OAAA;AAAA,MACZ,QAAU,EAAA,KAAA;AAAA,KACX,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,OAAO,aAAe,EAAA;AAC/B,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAI,cAAc,GAAG,CAAA,CAAA;AAC9C,IAAI,IAAA,CAAC,UAAU,IAAM,EAAA;AACnB,MAAA,YAAA,CAAa,GAAK,EAAA,GAAA,EAAK,IAAM,EAAA,OAAA,EAAS,OAAO,aAAa,CAAA,CAAA;AAAA,KAC5D;AAAA,GACF;AAEA,EAAA,MAAM,mBAAkE,EAAC,CAAA;AAEzE,EAAW,KAAA,MAAA,EAAA,IAAM,KAAK,UAAY,EAAA;AAChC,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,MAAM,EAAG,CAAA,IAAA;AAAA,MACT,QAAQ,EAAG,CAAA,UAAA,KAAe,GAAI,CAAA,aAAA,GAAgB,SAAY,EAAG,CAAA,UAAA;AAAA,MAC7D,SAAS,EAAG,CAAA,OAAA;AAAA,KACb,CAAA,CAAA;AAAA,GACH;AAEA,EAAW,KAAA,MAAA,EAAA,IAAM,KAAK,KAAO,EAAA;AAC3B,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,MAAM,EAAG,CAAA,IAAA;AAAA,MACT,QAAQ,EAAG,CAAA,UAAA,KAAe,GAAI,CAAA,aAAA,GAAgB,SAAY,EAAG,CAAA,UAAA;AAAA,MAC7D,QAAQ,EAAG,CAAA,MAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GACH;AAEA,EAAW,KAAA,MAAA,EAAA,IAAM,KAAK,OAAS,EAAA;AAC7B,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,QAAQ,EAAG,CAAA,UAAA,KAAe,GAAI,CAAA,aAAA,GAAgB,SAAY,EAAG,CAAA,UAAA;AAAA,MAC7D,MAAM,EAAG,CAAA,IAAA;AAAA,MACT,UAAU,OAAQ,CAAA,CAAA,EAAG,EAAG,CAAA,UAAA,CAAA,CAAA,EAAc,GAAG,IAAM,CAAA,CAAA,CAAA;AAAA,MAC/C,SAAS,EAAG,CAAA,OAAA;AAAA,MACZ,WAAW,EAAG,CAAA,SAAA;AAAA,MACd,OAAA,EAASC,yBAAsB,CAAA,EAAA,CAAG,OAAO,CAAA;AAAA,MACzC,OAAO,EAAG,CAAA,KAAA,GAAQjB,cAAI,CAAA,EAAA,CAAG,KAAK,CAAI,GAAA,KAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,OAAO,aAAe,EAAA;AAC/B,IAAA,MAAM,mBAA6C,EAAC,CAAA;AACpD,IAAA,MAAM,EAAE,KAAA,EAAU,GAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAEnC,IAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,WAAa,EAAA;AACnC,MAAA,IAAI,KAAK,UAAe,KAAA,KAAA,CAAM,UAAc,IAAA,IAAA,CAAK,cAAc,KAAM,CAAA,IAAA;AACnE,QAAA,SAAA;AAEF,MAAM,MAAA,QAAA,GACJ,KAAK,UACL,IAAA,CAAA,EAAG,KAAK,UAAW,CAAA,aAAA,CAAA,CAAA,EAAiB,KAAK,UAAW,CAAA,YAAA,CAAA,CAAA,CAAA;AAEtD,MAAA,IAAI,CAAC,QAAY,IAAA,CAAC,cAAc,QAAQ,CAAA,IAAK,aAAa,GAAK,EAAA;AAC7D,QAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA,CAAA;AAAA,OACrB,MAAA;AACL,QAAA,gBAAA,CAAiB,IAAK,CAAA,CAAC,IAAM,EAAA,KAAK,CAAC,CAAA,CAAA;AAAA,OACrC;AAAA,KACF;AAEA,IAAA,YAAA;AAAA,MACE,GAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,gBAAkB,EAAA;AAC5C,IAAA,GAAA,CAAI,IAAK,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACJ,eAAgB,CAAA,GAAA,EAAK,IAAI,CADrB,CAAA,EAAA;AAAA,MAEP,IAAM,EAAA,YAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,aACE,KAAM,CAAA,UAAA,KAAe,GAAI,CAAA,aAAA,GAAgB,SAAY,KAAM,CAAA,UAAA;AAAA,MAC7D,WAAW,IAAK,CAAA,SAAA;AAAA,KACjB,CAAA,CAAA,CAAA;AAAA,GACH;AAEA,EAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,KAAO,EAAA;AAC7B,IAAA,GAAA,CAAI,KAAK,SAAU,CAAA,GAAA,EAAK,IAAM,EAAA,OAAA,EAAS,IAAI,CAAC,CAAA,CAAA;AAAA,GAC9C;AAEA,EAAO,OAAA,GAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,OAAA,GAAU,OAAO,EAAmC,KAAA;AACxD,EAAM,MAAA;AAAA,IACJ,EAAE,OAAS,EAAA,MAAA,EAAQ,KAAM,EAAA;AAAA,IACzB,WAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,GACF,GAAI,MAAM,OAAA,CAAQ,GAAI,CAAA;AAAA,IACpB,GAAG,YAAa,EAAA;AAAA,IAChB,GAAG,cAAe,EAAA;AAAA,IAClB,GAAG,UAAW,EAAA;AAAA,IACd,GAAG,aAAc,EAAA;AAAA,IACjB,GAAG,QAAS,EAAA;AAAA,IACZ,GAAG,UAAW,EAAA;AAAA,GACf,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,kBAAA,GACJ,CAAC,MAAA,EAA4B,KAC7B,KAAA,CAAC,SACC,IAAK,CAAA,UAAA,KAAe,MAAU,IAAA,IAAA,CAAK,SAAc,KAAA,KAAA,CAAA;AAErD,MAAM,WAAA,GAAc,CAAC,IAA6B,KAAA;AAChD,EAAI,IAAA,IAAA,CAAK,SAAS,MAAU,IAAA,IAAA,CAAK,SAAS,MAAU,IAAA,IAAA,CAAK,SAAS,MAAQ,EAAA;AACxE,IAAA,MAAM,EAAE,OAAS,EAAA,GAAA,EAAK,UAAY,EAAA,SAAA,EAAW,MAAS,GAAA,IAAA,CAAA;AACtD,IAAM,MAAA,GAAA,GAAM,GAAG,SAAa,CAAA,CAAA,EAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AAC5B,IAAA,IACE,QACC,GAAQ,KAAA,CAAA,QAAA,EAAWxB,uBAAY,CAAG,EAAA,GAAA,CAAA,CAAK,kBACtC,GAAQ,KAAA,CAAA,QAAA,EAAWA,sBAAY,CAAA,CAAA,CAAA,EAAI,MAAM,CACzC,CAAA,WAAA,CAAA,IAAA,GAAA,KAAQ,WAAWA,sBAAY,CAAA,CAAA,EAAG,cAAc,GAAK,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,IACrD,GAAQ,KAAA,CAAA,QAAA,EAAWA,uBAAY,CAAI,CAAA,EAAA,UAAA,CAAA,EAAA,EAAe,KAAK,CACvD,CAAA,WAAA,CAAA,IAAA,GAAA,KAAQ,WAAWA,sBAAY,CAAA,CAAA,EAAG,UAAe,CAAA,EAAA,EAAA,GAAA,CAAA,CAAA,CAAM,kBACvD,GAAQ,KAAA,CAAA,QAAA,EAAWA,uBAAY,CAAI,CAAA,EAAA,UAAA,CAAA,GAAA,EAAgB,MAAM,CAC3D,CAAA,WAAA,CAAA,CAAA,EAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,SAAY,GAAA,CAChB,GACA,EAAA,IAAA,EACA,SACA,EAkBG,KAAA;AAlBH,EACE,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,GA7QJ,GAsQE,EAQK,EAAA,MAAA,GAAA,SAAA,CARL,EAQK,EAAA;AAAA,IAPH,YAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,GAAA,CAAA,CAAA;AA7QJ,EAAA,IAAA0C,GAAAC,EAAAA,GAAAA,CAAAA;AAyRE,EAAI,IAAA,MAAA,CAAA;AAEJ,EAAA,MAAM,KAAQ,GAAAC,iBAAA,CAAc,aAAc,CAAA,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAA;AACzD,EAAA,IAAI,KAAO,EAAA;AACT,IAAS,MAAA,GAAAC,qBAAA,CAAkB,OAAO,MAAM,CAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,CAAG,EAAA,UAAA,CAAA,CAAA,EAAc,IAAM,CAAA,CAAA,CAAA,CAAA;AACpD,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,MAAA,GAAS,IAAIC,gBAAA,CAAa,IAAI,CAAA,CAAE,GAAG,YAAY,CAAA,CAAA;AAAA,KAC1C,MAAA;AACL,MAAM,MAAA,QAAA,GAAW,KAAK,KAAM,CAAA,IAAA;AAAA,QAC1B,CAAC,IAAS,KAAA,IAAA,CAAK,IAAS,KAAA,IAAA,IAAQ,KAAK,UAAe,KAAA,UAAA;AAAA,OACtD,CAAA;AACA,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,MAAA,GAAS,IAAIxC,cAAA,CAAW,IAAM,EAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,OACxC,MAAA;AACL,QAAS,MAAA,GAAA,IAAIyC,qBAAiB,IAAI,CAAA,CAAA;AAElC,QAACJ,CAAAA,CAAAA,GAAAA,GAAAA,CAAAD,MAAA,GAAI,CAAA,gBAAA,EAAJ,iBAAAC,GAAAD,GAAAA,GAAAA,CAAA,IAA+B,CAAA,GAAA,EAAI,EAAA,IAAA;AAAA,UAClC,CAAG,EAAA,UAAA,CAAA,EAAa,SAAY,GAAA,CAAA,CAAA,EAAI,cAAc,EAAM,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AAAA,SACtD,CAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,OAAU,GAAA,IAAIM,eAAY,CAAA,MAAM,CAAI,GAAA,MAAA,CAAA;AAC7C,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,IAAA,EAAc,QAAsB,KAAA;AACzD,EAAA,IAAI,CAAC,QAAA;AAAU,IAAO,OAAA,IAAA,CAAA;AAEtB,EAAA,OAAO,IAAS,KAAA,MAAA,GACZ,aACA,GAAA,IAAA,KAAS,SACT,QACA,GAAA,WAAA,CAAA;AACN,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CACnB,GAAA,EACA,GACA,EAAA,IAAA,EACA,SACA,KACA,EAAA,aAAA,EACA,gBAAmB,GAAA,IAAA,CAAK,WACrB,KAAA;AACH,EAAA,MAAM,EAAE,UAAA,EAAY,IAAM,EAAA,SAAA,EAAW,SAAY,GAAA,KAAA,CAAA;AAEjD,EAAM,MAAA,GAAA,GAAM,CAAG,EAAA,UAAA,CAAA,CAAA,EAAc,KAAM,CAAA,IAAA,CAAA,CAAA,CAAA;AACnC,EAAA,OAAO,cAAc,GAAG,CAAA,CAAA;AAExB,EAAA,IAAI,SAAc,KAAA,kBAAA;AAAoB,IAAA,OAAA;AAEtC,EAAM,MAAA,cAAA,GAAiB,kBAAmB,CAAA,UAAA,EAAY,SAAS,CAAA,CAAA;AAE/D,EAAI,IAAA,UAAA,CAAA;AACJ,EAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,WAAa,EAAA;AACnC,IAAI,IAAA,cAAA,CAAe,IAAI,CAAA,IAAK,IAAK,CAAA,UAAA;AAC/B,MAAA,UAAA,GAAa,EAAE,OAAS,EAAA,IAAA,CAAK,UAAY,EAAA,IAAA,EAAM,KAAK,IAAK,EAAA,CAAA;AAAA,GAC7D;AAEA,EAAA,MAAM,YAAe,GAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAO,cAAc,CAAA,CAAA;AAEvD,EAAA,MAAM,mBAAmB,gBAAiB,CAAA,MAAA;AAAA,IACxC,CAAC,KAAK,IAAS,KAAA;AA1VnB,MAAA,IAAA,EAAA,CAAA;AA2VM,MAAM,MAAA,EAAE,UAAY,EAAA,KAAA,EAAU,GAAA,IAAA,CAAA;AAC9B,MACE,IAAA,cAAA,CAAe,IAAI,CAClB,KAAA,UAAA,IAAe,SAAS,CAAC,aAAA,CAAc,IAAI,CAC5C,CAAA,EAAA;AACA,QAAA,MAAM,UAAmC,GAAA;AAAA,UACvC,YAAY,UACR,GAAA;AAAA,YACE,SAAS,UAAW,CAAA,OAAA;AAAA,YACpB,SAAA,EAAW,kBAAmB,CAAA,GAAA,EAAK,UAAU,CAAA;AAAA,YAC7C,gBAAgB,UAAW,CAAA,cAAA;AAAA,YAC3B,OAAS,EAAA;AAAA,cACP,KAAA,EAAO,QAAS,CAAA,UAAA,CAAW,KAAK,CAAA;AAAA,cAChC,QAAA,EAAU,aAAc,CAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,cAC3C,QAAA,EAAU,aAAc,CAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,aAC7C;AAAA,WAEF,GAAA,KAAA,CAAA;AAAA,UACJ,KAAO,EAAA,KAAA,GAAQxB,cAAI,CAAA,KAAA,CAAM,UAAU,CAAI,GAAA,KAAA,CAAA;AAAA,SACzC,CAAA;AAEA,QAAM,MAAA,IAAA,GACJ,IAAK,CAAA,IAAA,IAAQ,IAAK,CAAA,IAAA,KAAS,kBAAkB,SAAW,EAAA,UAAU,CAC9D,GAAA,IAAA,CAAK,IACL,GAAA,KAAA,CAAA,CAAA;AAEN,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,UAAA,CAAW,IAAO,GAAA,IAAA,CAAA;AAClB,UAAI,IAAA,CAAA,EAAA,GAAA,UAAA,CAAW,UAAX,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,OAAS,EAAA;AAClC,YAAW,UAAA,CAAA,UAAA,CAAW,QAAQ,IAAO,GAAA,IAAA,CAAA;AAAA,WACvC;AAAA,SACF;AAEA,QAAA,GAAA,CAAI,KAAK,UAAU,CAAA,CAAA;AAAA,OACrB;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,eAAe,gBAAiB,CAAA,MAAA;AAAA,IACpC,CAAC,KAAK,IAAS,KAAA;AACb,MAAA,IAAI,cAAe,CAAA,IAAI,CAAK,IAAA,aAAA,CAAc,IAAI,CAAG,EAAA;AAC/C,QAAA,GAAA,CAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAI,KAAK,KAAM,CAAA,UAAA,CAAA;AAAA,OAC1C;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,KAAQ,GAAA,gBAAA;AAAA,IACZ,GAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AAEA,EAAA,GAAA,CAAI,IAAK,CAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,MAAQ,EAAA,QAAA;AAAA,IACR,MAAQ,EAAA,UAAA,KAAe,GAAI,CAAA,aAAA,GAAgB,KAAY,CAAA,GAAA,UAAA;AAAA,IACvD,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,IAAM,EAAA,SAAA;AAAA,IACN,KAAA;AAAA,IACA,YAAA,EAAc,aAAa,OAAU,GAAA,QAAA;AAAA,IACrC,UACE,EAAA,UAAA,IAAc,UAAW,CAAA,OAAA,CAAQ,SAAS,CACtC,GAAA;AAAA,MACE,SAAS,UAAW,CAAA,OAAA;AAAA,MACpB,OAAA,EACE,WAAW,IAAS,KAAA,CAAA,EAAG,mBACnB,KACA,CAAA,GAAA,EAAE,IAAM,EAAA,UAAA,CAAW,IAAK,EAAA;AAAA,KAEhC,GAAA,KAAA,CAAA;AAAA,IACN,SAAS,YACN,CAAA,MAAA;AAAA,MACC,CAAC,KAAA,KACC,KAAM,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,IACvB,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,EAAO,KAAA,YAAA,IAAgB,EAAE,CAAA;AAAA,KACjD,CACC,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,MACf,SAAS,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAC,EAAA,KAAQ,iCAC9B,QAAY,IAAA,EAAA,GACZ,EAAE,MAAA,EAAQ,GAAG,MAAO,EAAA,GACpB,EAAE,UAAY,EAAA,EAAA,CAAG,YAHa,CAAA,EAAA;AAAA,QAIlC,SAAS,EAAG,CAAA,OAAA;AAAA,QACZ,SAAS,EAAG,CAAA,OAAA;AAAA,QACZ,OAAO,EAAG,CAAA,KAAA;AAAA,OACV,CAAA,CAAA;AAAA,MACF,OAAS,EAAA;AAAA,QACP,IAAA,EACE,MAAM,IAAS,KAAA,YAAA,CAAa,WAAW,KAAM,CAAA,OAAO,CAChD,GAAA,KAAA,CAAM,IACN,GAAA,KAAA,CAAA;AAAA,QACN,KAAO,EAAA,KAAA,CAAM,KAAU,KAAA,OAAA,GAAU,SAAY,KAAM,CAAA,KAAA;AAAA,QACnD,QAAQ,KAAM,CAAA,QAAA;AAAA,QACd,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,kBAAkB,KAAM,CAAA,gBAAA;AAAA,QACxB,MAAM,KAAM,CAAA,IAAA;AAAA,QACZ,YAAY,KAAM,CAAA,UAAA;AAAA,QAClB,OAAO,KAAM,CAAA,KAAA;AAAA,OACf;AAAA,KACA,CAAA,CAAA;AAAA,IACJ,aAAa,gBAAiB,CAAA,MAAA;AAAA,MAC5B,CAAC,OAAOyB,qBAAkB,CAAA,EAAE,MAAM,YAAgB,IAAA,CAAC,aAAa,EAAE,CAAA;AAAA,KACpE;AAAA,GACD,CAAA,CAAA;AAED,EAAA,KAAA,MAAW,YAAY,aAAe,EAAA;AACpC,IAAM,MAAA,IAAA,GAAO,cAAc,QAAQ,CAAA,CAAA;AACnC,IAAI,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,GAAG,KAAK,IAAK,CAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AAC3D,MAAA,YAAA,CAAa,KAAK,GAAK,EAAA,IAAA,EAAM,OAAS,EAAA,IAAA,CAAK,OAAO,aAAa,CAAA,CAAA;AAAA,KACjE;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CACtB,GAAA,EACA,IACyB,KAAA;AAxd3B,EAAA,IAAA,EAAA,CAAA;AAydE,EAAA,MAAM,SAA+B,EAAC,CAAA;AAEtC,EAAM,MAAA,EAAE,UAAY,EAAA,KAAA,EAAU,GAAA,IAAA,CAAA;AAE9B,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,MAAM,UAA6B,EAAC,CAAA;AACpC,IAAA,MAAA,CAAO,UAAa,GAAA;AAAA,MAClB,SAAS,UAAW,CAAA,OAAA;AAAA,MACpB,SAAA,EAAW,kBAAmB,CAAA,GAAA,EAAK,UAAU,CAAA;AAAA,MAC7C,gBAAgB,UAAW,CAAA,cAAA;AAAA,MAC3B,OAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AACvC,IAAI,IAAA,KAAA;AAAO,MAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA;AAE3B,IAAM,MAAA,QAAA,GAAW,aAAc,CAAA,UAAA,CAAW,QAAQ,CAAA,CAAA;AAClD,IAAI,IAAA,QAAA;AAAU,MAAA,OAAA,CAAQ,QAAW,GAAA,QAAA,CAAA;AAEjC,IAAM,MAAA,QAAA,GAAW,aAAc,CAAA,UAAA,CAAW,QAAQ,CAAA,CAAA;AAClD,IAAI,IAAA,QAAA;AAAU,MAAA,OAAA,CAAQ,QAAW,GAAA,QAAA,CAAA;AAAA,GACnC;AAEA,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,MAAA,CAAA,KAAA,GAAQzB,cAAI,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAAA,GACrC;AAEA,EAAI,IAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,IAAA,KAAS,kBAAkB,IAAK,CAAA,SAAA,EAAW,MAAM,CAAG,EAAA;AACxE,IAAA,MAAA,CAAO,OAAO,IAAK,CAAA,IAAA,CAAA;AACnB,IAAI,IAAA,CAAA,EAAA,GAAA,MAAA,CAAO,UAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,OAAS,EAAA;AAC9B,MAAO,MAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,GAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KACxC;AAAA,GACF;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,CACzB,GAAA,EACA,UACG,KAAA;AACH,EAAO,OAAA,UAAA,CAAW,kBAAkB,GAAI,CAAA,aAAA,GACpC,GAAG,UAAW,CAAA,aAAA,CAAA,CAAA,EAAiB,UAAW,CAAA,YAAA,CAAA,CAAA,GAC1C,UAAW,CAAA,YAAA,CAAA;AACjB,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CACpB,EAGG,KAAA;AA3gBL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4gBE,EAAO,OAAA,CAAC,GAAG,UAAc,IAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,EAAA,CAAG,UAAH,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAAV,mBAAmB,MAAW,MAAA,CAAA,CAAA;AACzD,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CACnB,EACsE,KAAA;AAjhBxE,EAAA,IAAA,EAAA,CAAA;AAkhBE,EAAA,OAAO,CAAC,EAAG,CAAA,KAAA,IAAA,CAAA,CAAS,QAAG,UAAH,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,QAAQ,MAAW,MAAA,CAAA,CAAA;AACxD,CAAA,CAAA;AAEA,MAAM,SAAY,GAAA,CAChB,GACA,EAAA,IAAA,EACA,SACA,IACmB,KAAA;AACnB,EAAM,MAAA,KAAA,GAAQ,iBAAiB,GAAK,EAAA,IAAA,EAAM,SAAS,IAAK,CAAA,IAAA,EAAM,KAAK,OAAO,CAAA,CAAA;AAE1E,EAAA,MAAM,UAAiC,EAAC,CAAA;AACxC,EAAA,IAAI,IAAK,CAAA,WAAA;AAAa,IAAA,OAAA,CAAQ,SAAY,GAAA,IAAA,CAAA;AAE1C,EAAA,IAAI,KAAK,IAAM,EAAA;AACb,IAAA,MAAM,cAAuC,EAAC,CAAA;AAC9C,IAAA,OAAA,CAAQ,IAAO,GAAA,WAAA,CAAA;AACf,IAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,IAAM,EAAA;AAC5B,MAAA,MAAM,CAAC,GAAK,EAAA,KAAK,CAAI,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA,CAAA;AACnC,MAAY,WAAA,CAAA0B,sBAAA,CAAY,GAAG,CAAkB,CAAA,GAC3C,UAAU,MAAS,GAAA,IAAA,GAAO,KAAU,KAAA,OAAA,GAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,KAC1D;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA,QAAA;AAAA,IACR,QAAQ,IAAK,CAAA,UAAA,KAAe,GAAI,CAAA,aAAA,GAAgB,SAAY,IAAK,CAAA,UAAA;AAAA,IACjE,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,KAAA;AAAA,IACA,GAAA,EAAK1B,cAAI,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB,OAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,GAAA,EACA,IACA,EAAA,OAAA,EACA,WACA,OACA,EAAA,UAAA,EACA,OACA,EAAA,WAAA,EACA,MACiB,KAAA;AA/jBnB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgkBE,EAAA,MAAM,QAAsB,EAAC,CAAA;AAE7B,EAAA,KAAA,IAAS,QAAQ,OAAS,EAAA;AACxB,IAAM,MAAA,QAAA,GAAW,YAAY,IAAI,CAAA,CAAA;AACjC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,GAAO,aAAK,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAL,EAAW,OAAA,EAAS,KAAU,CAAA,EAAA,CAAA,CAAA;AAAA,KACvC;AAEA,IAAA,IAAI,SAAS,SAAU,CAAA,GAAA,EAAK,IAAM,EAAA,OAAA,EAAS,iCACtC,IADsC,CAAA,EAAA;AAAA,MAEzC,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,QAAA;AAAA,KACD,CAAA,CAAA,CAAA;AAED,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAK,CAAA,QAAA,CAAA;AAC5B,MAAI,IAAA,CAAC,KAAK,QAAS,CAAA,MAAA;AAAQ,QAAO,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,QAAA,KAAnB,IAA6B,GAAA,IAAA,GAAA,OAAA,EAAA,CAAA,MAAA,CAAA;AAAA,KAC1D;AAEA,IACE,IAAA,CAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,YAAZ,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,MAAW,MAChC,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,OAAA,CAAQ,CAAO,CAAA,MAAA,IAAA,CAAK,IAChC,EAAA;AACA,MAAA,MAAA,GAAS,OAAO,UAAW,EAAA,CAAA;AAAA,KAC7B;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,MAAM,gBAAgB,OAAQ,CAAA,MAAA;AAAA,QAC5B,CAAC,EACC,KAAA,EAAA,CAAG,OAAQ,CAAA,MAAA,KAAW,KACtB,QAAY,IAAA,EAAA,CAAG,OAAQ,CAAA,CAAC,KACxB,EAAG,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,WAAW,IAAK,CAAA,IAAA;AAAA,OAClC,CAAA;AACA,MAAA,KAAA,MAAW,SAAS,aAAe,EAAA;AACjC,QAAM,MAAA,OAAA,GAAU,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAC/B,QAAA,MAAA,GAAS,OAAO,KAAM,CAAA;AAAA,UACpB,SAAS,OAAQ,CAAA,OAAA;AAAA,UACjB,SAAS,OAAQ,CAAA,OAAA;AAAA,UACjB,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,IAAA,EACE,MAAM,IAAS,KAAA,YAAA,CAAa,WAAW,KAAM,CAAA,OAAO,CAChD,GAAA,KAAA,CAAM,IACN,GAAA,KAAA,CAAA;AAAA,UACN,KAAO,EAAA,KAAA,CAAM,KAAU,KAAA,OAAA,GAAU,SAAY,KAAM,CAAA,KAAA;AAAA,UACnD,QAAQ,KAAM,CAAA,QAAA;AAAA,UACd,SAAS,KAAM,CAAA,OAAA;AAAA,UACf,kBAAkB,KAAM,CAAA,gBAAA;AAAA,UACxB,MAAM,KAAM,CAAA,IAAA;AAAA,UACZ,YAAY,KAAM,CAAA,UAAA;AAAA,UAClB,OAAO,KAAM,CAAA,KAAA;AAAA,SACd,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAEA,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,KAAA,MAAW,MAAM,WAAa,EAAA;AAC5B,QAAI,IAAA,CAAC,aAAa,EAAE,CAAA,IAAK,GAAG,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAK,CAAA,IAAA;AACzD,UAAA,SAAA;AAEF,QAAA,MAAA,GAAS,MAAO,CAAA,UAAA;AAAA,UACd,GAAG,UAAW,CAAA,SAAA;AAAA,UACd,EAAA,CAAG,UAAW,CAAA,cAAA,CAAe,CAAC,CAAA;AAAA,UAC9B,GAAG,UAAW,CAAA,OAAA;AAAA,SAChB,CAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAM,MAAA,KAAA,GAAQ,iCAAS,IAAK,CAAA,IAAA,CAAA,CAAA;AAC5B,IAAA,IAAI,KAAO,EAAA;AACT,MAAO,MAAA,CAAA,IAAA,CAAK,KAAQ,GAAAA,cAAA,CAAI,KAAK,CAAA,CAAA;AAAA,KAC/B;AAEA,IAAM,MAAA,aAAA,GAAgB0B,sBAAY,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAE3C,IAAA,IAAI,IAAI,SAAW,EAAA;AACjB,MAAM,MAAA,aAAA,GAAgBjD,uBAAY,aAAa,CAAA,CAAA;AAE/C,MAAA,IAAI,kBAAkB,IAAK,CAAA,IAAA;AAAM,QAAO,MAAA,CAAA,IAAA,CAAK,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KAC3D,MAAA,IAAW,aAAkB,KAAA,IAAA,CAAK,IAAM,EAAA;AACtC,MAAO,MAAA,CAAA,IAAA,CAAK,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KAC1B;AAEA,IAAA,KAAA,CAAM,aAAa,CAAI,GAAA,MAAA,CAAA;AAAA,GACzB;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;;AC9nBa,MAAA,cAAA,GAAiB,CAC5B,MAAA,EACA,GACiD,KAAA;AACjD,EAAA,MAAM,QAAgB,EAAC,CAAA;AACvB,EAAA,MAAM,iBAAyB,EAAC,CAAA;AAChC,EAAA,MAAM,cAAsB,EAAC,CAAA;AAC7B,EAAA,KAAA,MAAW,QAAQ,GAAK,EAAA;AACtB,IAAA,IAAI,IAAK,CAAA,IAAA,KAAS,QAAY,IAAA,IAAA,CAAK,WAAW,QAAU,EAAA;AACtD,MAAM,KAAA,CAAA,IAAA,CAAK,YAAa,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,eACpB,IAAK,CAAA,IAAA,KAAS,WAAe,IAAA,IAAA,CAAK,WAAW,QAAU,EAAA;AAChE,MAAA,IAAI,KAAM,CAAA,MAAA;AAAQ,QAAM,KAAA,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAC/B,MAAA,KAAA,CAAM,IAAK,CAAA,GAAG,eAAgB,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,eAC1B,IAAK,CAAA,IAAA,KAAS,MAAU,IAAA,IAAA,CAAK,WAAW,QAAU,EAAA;AAC3D,MAAA,IAAI,KAAM,CAAA,MAAA;AAAQ,QAAM,KAAA,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAC/B,MAAM,KAAA,CAAA,IAAA,CAAK,UAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,eAClB,IAAK,CAAA,IAAA,KAAS,QAAY,IAAA,IAAA,CAAK,WAAW,QAAU,EAAA;AAC7D,MAAA,IAAI,KAAM,CAAA,MAAA;AAAQ,QAAM,KAAA,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAC/B,MAAA,KAAA,CAAM,IAAK,CAAA,GAAG,YAAa,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,eACvB,IAAK,CAAA,IAAA,KAAS,OAAW,IAAA,IAAA,CAAK,WAAW,QAAU,EAAA;AAC5D,MAAA,cAAA,CAAe,IAAK,CAAA,WAAA,CAAY,MAAQ,EAAA,IAAI,CAAC,CAAA,CAAA;AAAA,eACpC,IAAK,CAAA,IAAA,KAAS,MAAU,IAAA,IAAA,CAAK,WAAW,QAAU,EAAA;AAC3D,MAAe,cAAA,CAAA,IAAA,CAAK,UAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,KACtC,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,YAAc,EAAA;AACrC,MAAA,IAAI,WAAY,CAAA,MAAA;AAAQ,QAAY,WAAA,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAC3C,MAAA,WAAA,CAAY,IAAK,CAAA,GAAG,gBAAiB,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,KAC5C;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,KAAM,CAAA,MAAA,IAAU,CAAC,cAAe,CAAA,MAAA,IAAU,CAAC,WAAY,CAAA,MAAA;AAAQ,IAAA,OAAA;AAEpE,EAAA,IAAI,IAAO,GAAA,EAAA,CAAA;AAEX,EAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,IAAQ,IAAA,IAAA,CAAA;AAAA;AAAA,EAEVkD,uBAAA,CAAa,KAAO,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA;AAAA,CAAA,CAAA;AAAA,GAG9B;AAEA,EAAA,IAAI,eAAe,MAAQ,EAAA;AACzB,IAAA,KAAA,MAAW,SAAS,cAAgB,EAAA;AAClC,MAAQ,IAAA,IAAA,CAAA;AAAA;AAAA,EAEZA,uBAAA,CAAa,KAAO,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA;AAAA,CAAA,CAAA;AAAA,KAG5B;AAAA,GACF;AAEA,EAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,IAAQ,IAAA,IAAA,CAAA;AAAA;AAAA,EAEVA,uBAAA,CAAa,WAAa,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA;AAAA,CAAA,CAAA;AAAA,GAGpC;AAEA,EAAO,OAAA,CAAC,eAAe,CAA2B,wBAAA,EAAA,UAAA,CAAA;AAAA,EAAiB,IAAA,CAAA,CAAA,CAAA;AACrE,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,GAA0B,KAAA;AAC9C,EAAO,OAAA,CAAA,sBAAA,EAAyBnD,sBAAY,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAA,CAAA,CAAA;AACtD,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,GAAqC,KAAA;AAC5D,EAAA,MAAM,OAAe,CAAC,CAAA,yBAAA,EAA4BA,sBAAY,CAAA,GAAA,CAAI,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AACzE,EAAI,IAAA,GAAA,CAAI,MAAU,IAAA,GAAA,CAAI,OAAS,EAAA;AAC7B,IAAAoD,kBAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AACnB,IAAA,IAAI,IAAI,MAAQ,EAAA;AACd,MAAA,IAAA,CAAK,KAAK,CAAC,CAAA,QAAA,EAAWpD,uBAAY,GAAI,CAAA,MAAM,IAAI,CAAC,CAAA,CAAA;AAAA,KACnD;AACA,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAA,IAAA,CAAK,KAAK,CAAC,CAAA,SAAA,EAAYA,uBAAY,GAAI,CAAA,OAAO,IAAI,CAAC,CAAA,CAAA;AAAA,KACrD;AACA,IAAAoD,kBAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AAAA,GACnB;AACA,EAAAA,kBAAA,CAAQ,MAAM,IAAI,CAAA,CAAA;AAClB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,GAAwB,KAAA;AAC1C,EAAO,OAAA,CAAA,oBAAA,EAAuB,gBAAiB,CAAA,GAAG,CAAO,CAAA,GAAA,EAAA,GAAA,CAAI,OAC1D,GAAI,CAAApD,sBAAW,CACf,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,GAAA,CAAA,CAAA;AACd,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,GAA0B,KAAA;AAC9C,EAAA,MAAM,IAAe,GAAA;AAAA,IACnB,CAAyB,sBAAA,EAAA,gBAAA;AAAA,MACvB,GAAA;AAAA,KACW,CAAA,SAAA,EAAA,GAAA,CAAI,QAAS,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA,CAAA;AAAA,GACtC,CAAA;AAEA,EAAA,IAAI,IAAI,OAAW,IAAA,GAAA,CAAI,aAAa,GAAI,CAAA,OAAA,IAAW,IAAI,KAAO,EAAA;AAC5D,IAAA,MAAM,QAAgB,EAAC,CAAA;AACvB,IAAA,IAAI,GAAI,CAAA,OAAA;AAAS,MAAA,KAAA,CAAM,KAAK,CAAgB,cAAA,CAAA,CAAA,CAAA;AAC5C,IAAA,IAAI,GAAI,CAAA,SAAA;AAAW,MAAA,KAAA,CAAM,IAAK,CAAA,CAAA,WAAA,EAAcA,sBAAY,CAAA,GAAA,CAAI,SAAS,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACzE,IAAA,IAAI,GAAI,CAAA,OAAA;AAAS,MAAA,KAAA,CAAM,KAAK,CAAY,SAAA,EAAAqD,oBAAA,CAAU,IAAM,EAAA,GAAA,CAAI,OAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACvE,IAAA,IAAI,GAAI,CAAA,KAAA;AAAO,MAAA,KAAA,CAAM,KAAK,CAAU,OAAA,EAAAA,oBAAA,CAAU,IAAM,EAAA,GAAA,CAAI,KAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAEjE,IAAAD,kBAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AACnB,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AACf,IAAAA,kBAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AAAA,GACnB;AAEA,EAAAA,kBAAA,CAAQ,MAAM,IAAI,CAAA,CAAA;AAClB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,WAAA,GAAc,CAClB,MAAA,EACA,GACG,KAAA;AACH,EAAA,MAAM,OAAe,EAAC,CAAA;AACtB,EAAAA,kBAAA,CAAQ,IAAM,EAAA,CAAA,qBAAA,EAAwB,gBAAiB,CAAA,GAAG,CAAc,CAAA,WAAA,CAAA,CAAA,CAAA;AAExE,EAAA,MAAM,UAAa,GAAA,iBAAA,CAAkB,MAAQ,EAAA,GAAA,EAAKE,qBAAiB,CAAA,CAAA;AACnE,EAAA,MAAM,cAAiB,GAAA,iBAAA,CAAkB,MAAQ,EAAA,GAAA,EAAKA,qBAAiB,CAAA,CAAA;AACvE,EAAM,MAAA,gBAAA,GACJ,UAAW,CAAA,aAAA,IAAiB,cAAe,CAAA,aAAA,CAAA;AAC7C,EAAM,MAAA,yBAAA,GACJ,UAAW,CAAA,mBAAA,IAAuB,cAAe,CAAA,mBAAA,CAAA;AAEnD,EAAW,KAAA,MAAA,GAAA,IAAO,IAAI,KAAO,EAAA;AAC3B,IAAI,IAAA,gBAAA,KAAqB,GAAQ,KAAA,WAAA,IAAe,GAAQ,KAAA,WAAA,CAAA;AACtD,MAAA,SAAA;AAEF,IAAA,MAAM,IAAe,GAAA,CAAC,CAAG,EAAAC,yBAAA,CAAe,GAAG,CAAK,CAAA,EAAA,CAAA,CAAA,CAAA;AAChD,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAI,KAAM,CAAA,GAAG,EAAE,MAAO,CAAA,GAAA,EAAK,IAAI,CAAG,EAAA;AACnD,MAAAH,kBAAA,CAAQ,MAAM,IAAI,CAAA,CAAA;AAAA,KACpB;AACA,IAAAA,kBAAA,CAAQ,MAAM,GAAG,CAAA,CAAA;AACjB,IAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AAAA,GAChB;AAEA,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAM,MAAA,GAAA,GAAM,UAAW,CAAA,aAAA,GAAgB,YAAe,GAAA,gBAAA,CAAA;AAEtD,IAAA,IAAA,CAAK,IAAK,CAAA;AAAA,MACR,CACE,KAAA,EAAA,yBAAA,IAA6B,MAAO,CAAA,SAAA,GAAY,MAAM,CAAG,EAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA;AAAA,KAE5D,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,IAAI,IAAI,UAAY,EAAA;AAClB,IAAA,IAAA,CAAK,KAAK,CAACI,oBAAA,CAAiB,IAAI,UAAY,EAAA,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,GACnD;AAEA,EAAA,IAAI,IAAI,OAAS,EAAA;AACf,IAAW,KAAA,MAAA,KAAA,IAAS,IAAI,OAAS,EAAA;AAC/B,MAAA,IAAA,CAAK,IAAK,CAAAC,eAAA,CAAY,KAAO,EAAA,GAAG,CAAC,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAEA,EAAA,IAAI,IAAI,WAAa,EAAA;AACnB,IAAW,KAAA,MAAA,UAAA,IAAc,IAAI,WAAa,EAAA;AACxC,MAAA,IAAA,CAAK,IAAK,CAAAC,oBAAA,CAAiB,UAAY,EAAA,GAAG,CAAC,CAAA,CAAA;AAAA,KAC7C;AAAA,GACF;AAEA,EAAAN,kBAAA,CAAQ,MAAM,MAAM,CAAA,CAAA;AAEpB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,WAAA,GAAc,CAClB,MAAA,EACA,IACG,KAAA;AACH,EAAA,IAAI,CAAC,MAAA;AAAQ,IAAO,OAAA,KAAA,CAAA;AAEpB,EAAA,MAAM,EAAE,OAAA,EAAS,GAAI,EAAA,GAAI,MAAO,CAAA,IAAA,CAAA;AAChC,EAAA,OACE,MAAkB,YAAA,IAAA,IAClB,CAAC,MAAA,CAAO,KAAK,UACb,IAAA,GAAA,IACA,OAAO,GAAA,KAAQ,QACf,IAAAjD,gBAAA,CAAM,GAAG,CAAA,IACT,IAAI,KAAU,KAAA,OAAA,CAAA;AAElB,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,CACxB,MACA,EAAA,GAAA,EACA,IACG,KAAA;AAtNL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAuNE,EAAI,IAAA,aAAA,GACF,WAAY,CAAA,GAAA,CAAI,KAAM,CAAA,SAAA,EAAW,IAAI,CAAA,IACrC,WAAY,CAAA,GAAA,CAAI,KAAM,CAAA,SAAA,EAAW,IAAI,CAAA,CAAA;AAEvC,EAAA,MAAM,sBACJ,CAAC,MAAA,CAAO,SACR,IAAA,aAAA,IACA,GAAC,EAAI,GAAA,GAAA,CAAA,KAAA,CAAM,SAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAqB,KAAK,IAC3B,CAAA,IAAA,EAAA,CAAC,SAAI,KAAM,CAAA,SAAA,KAAV,mBAAqB,IAAK,CAAA,IAAA,CAAA,CAAA;AAE7B,EAAA,MAAM,mBACJ,GAAA,aAAA,IACA,CAAC,mBAAA,KACC,CAAC,MAAO,CAAA,SAAA,IAAA,CAAA,CACR,EAAI,GAAA,GAAA,CAAA,KAAA,CAAM,cAAV,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,IAAS,MAAA,YAAA,IAAA,CAAA,CACnC,SAAI,KAAM,CAAA,SAAA,KAAV,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,UAAS,YAClC,IAAA,MAAA,CAAO,SACN,IAAA,EAAA,CAAC,SAAI,KAAM,CAAA,SAAA,KAAV,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,SAC3B,EAAC,CAAA,EAAA,GAAA,GAAA,CAAI,KAAM,CAAA,SAAA,KAAV,mBAAqB,IAAK,CAAA,IAAA,CAAA,CAAA,CAAA;AAEjC,EAAI,IAAA,CAAC,mBAAuB,IAAA,CAAC,mBAAqB,EAAA;AAChD,IAAgB,aAAA,GAAA,KAAA,CAAA;AAAA,GAClB;AAEA,EAAO,OAAA;AAAA,IACL,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CAAC,IAAqC,KAAA;AAC7D,EAAM,MAAA,IAAA,GAAO8C,sBAAkB,IAAI,CAAA,CAAA;AACnC,EAAA,MAAM,QAAQ,gBAAiB,CAAA;AAAA,IAC7B,QAAQ,IAAK,CAAA,WAAA;AAAA,IACb,MAAM,IAAK,CAAA,SAAA;AAAA,GACZ,CAAA,CAAA;AAED,EAAI,IAAA,IAAA,KAAS,YAAgB,IAAA,IAAA,CAAK,UAAY,EAAA;AAC5C,IAAO,OAAA;AAAA,MACL,CAAA,uBAAA,CAAA;AAAA,MACA,CAAC,GAAG,KAAU,CAAA,CAAA,CAAA,EAAA,GAAGU,yBAAqB,IAAK,CAAA,UAAA,EAAY,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA,MACjE,IAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,IAAA,KAAS,OAAW,IAAA,IAAA,CAAK,KAAO,EAAA;AAClC,IAAA,OAAO,CAAC,CAAqB,kBAAA,EAAA,KAAA,CAAA,EAAA,EAAUN,qBAAU,GAAK,EAAA,IAAA,CAAK,KAAK,CAAK,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GACvE;AAEA,EAAO,OAAA;AAAA,IACL,CAA0B,uBAAA,EAAA,KAAA,CAAA,GAAA,CAAA;AAAA,IAC1BO,yBAAA,CAAsB,KAAK,IAAI,CAAA;AAAA,IAC/B,KAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,GAAwB,KAAA;AAC1C,EAAA,MAAM,IAAe,GAAA,CAAC,CAAuB,oBAAA,EAAA,gBAAA,CAAiB,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA;AAEpE,EAAA,MAAM,UAAkB,EAAC,CAAA;AACzB,EAAA,IAAI,IAAI,OAAQ,CAAA,SAAA;AAAW,IAAA,OAAA,CAAQ,KAAK,kBAAkB,CAAA,CAAA;AAE1D,EAAM,MAAA,CAAA,GAAI,IAAI,OAAQ,CAAA,IAAA,CAAA;AACtB,EAAA,IAAI,CAAG,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,WAAA;AAAa,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAiB,cAAA,EAAA,CAAA,CAAE,WAAe,CAAA,EAAA,CAAA,CAAA,CAAA;AACnE,EAAA,IAAI,CAAG,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,eAAA;AACL,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAoB,iBAAA,EAAA,CAAA,CAAE,eAAkB,CAAA,CAAA,CAAA,CAAA,CAAA;AACvD,EAAA,IAAI,CAAG,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,eAAA;AACL,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAoB,iBAAA,EAAA,CAAA,CAAE,eAAkB,CAAA,CAAA,CAAA,CAAA,CAAA;AAEvD,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAAR,kBAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AACnB,IAAK,IAAA,CAAA,IAAA,CAAK,SAAS,GAAG,CAAA,CAAA;AAAA,GACxB;AAEA,EAAAA,kBAAA,CAAQ,MAAM,IAAI,CAAA,CAAA;AAElB,EAAI,IAAA,CAAC,GAAI,CAAA,GAAA,CAAI,QAAU,EAAA;AACrB,IAAAA,kBAAA,CAAQ,IAAM,EAAAS,wBAAA,CAAc,GAAI,CAAA,GAAA,CAAI,KAAK,CAAC,CAAA,CAAA;AAAA,GACrC,MAAA;AACL,IAAAT,kBAAA,CAAQ,IAAM,EAAAC,oBAAA,CAAU,IAAM,EAAA,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAAA,GACxC;AAEA,EAAAD,kBAAA,CAAQ,MAAM,IAAI,CAAA,CAAA;AAClB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;;ACnSa,MAAA,eAAA,GAAkB,OAC7B,OAAA,EACA,MACkB,KAAA;AAZpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAaE,EAAM,MAAA,OAAA,GAAU,IAAIpB,WAAA,CAAQ,OAAO,CAAA,CAAA;AACnC,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAU,IAAA,QAAA,CAAA;AACxC,EAAM,MAAA,EAAA,GAAK,IAAI,WAAA,CAAY,OAAO,CAAA,CAAA;AAElC,EAAA,MAAM,GAAyB,GAAA;AAAA,IAC7B,kBAAkB,EAAC;AAAA,IACnB,WAAW,MAAO,CAAA,SAAA;AAAA,IAClB,aAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,GAAM,GAAA,MAAM,cAAe,CAAA,GAAA,EAAK,EAAE,CAAA,CAAA;AACxC,EAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AAEpB,EAAM,MAAA,MAAA,GAAS,cAAe,CAAA,MAAA,EAAQ,GAAG,CAAA,CAAA;AACzC,EAAA,IAAI,CAAC,MAAA;AAAQ,IAAA,OAAA;AAEb,EAAA,MAAM,UAAU,iBAAkB,EAAA,CAAA;AAClC,EAAA,MAAM,kBAAmB,CAAA,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,MAAM,CAAA,CAAA;AAExD,EAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,MAAA,CAAO,OAAS,EAAA;AAAA,IAC3C,aAAa,OAAQ,CAAA,KAAA;AAAA,IACrB,cAAc,OAAQ,CAAA,MAAA;AAAA,GACvB,CAAA,CAAA;AACD,EAAM,MAAA,mBAAA,CAAoB,aAAe,EAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAExD,EAAA,MAAM,QAAQ,EAAC,CAAA;AACf,EAAA,KAAA,MAAW,QAAQ,GAAK,EAAA;AACtB,IAAM,OAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,cAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,OAAQ,CAAA;AAAA,MACpC,GAAK,EAAA,IAAA;AAAA,MACL,OAAA;AAAA,MACA,UAAU,MAAO,CAAA,QAAA;AAAA,MACjB,KAAA;AAAA,MACA,QAAQ,MAAO,CAAA,MAAA;AAAA;AAAA,MAEf,WAAW,MAAO,CAAA,SAAA;AAAA,KACpB,CAAA,CAAA,CAAA;AAAA,GACF;AAEA,EAAM,OAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,cAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,QAAS,CAAA;AAAA,IACrC,OAAA;AAAA,IACA,UAAU,MAAO,CAAA,QAAA;AAAA,IACjB,KAAA;AAAA,IACA,QAAQ,MAAO,CAAA,MAAA;AAAA;AAAA,IAEf,WAAW,MAAO,CAAA,SAAA;AAAA,GACpB,CAAA,CAAA,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA,CAAA;AAC9D,EAAA,MAAM,MAAM,kBAAmB,CAAA,MAAA,CAAA;AAC/B,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA;AAAA,MACb,CAAA;AAAA,EAA6B,mBAC1B,GAAI,CAAA,CAAC,CAAC,IAAA,EAAM,OAAO,CAAM,KAAA;AACxB,QAAA,KAAA,IAAS,OAAQ,CAAA,MAAA,CAAA;AACjB,QAAO,OAAA,CAAA,EAAA,EAAK,0BACV,OAAQ,CAAA,MAAA,GAAS,IAAI,GAAM,GAAA,EAAA,CAAA,CAAA,EACzB,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,OACtB,CACA,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,iCACV,EAAA,KAAA,GAAQ,CAAI,GAAA,OAAA,GAAU,MACd,CAAA,OAAA,EAAA,KAAA,GAAQ,IAAI,GAAM,GAAA,EAAA,CAAA,UAAA,EAC1B,KAAQ,GAAA,CAAA,GAAI,MAAS,GAAA,IAAA,CAAA,qBAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAG3B;AAEA,EAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,GAAI,CAAA,8BAAA,CAAA,CAAA;AACnB,EAAA,OAAA,CAAQ,KAAM,EAAA,CAAA;AAChB,CAAA;;AC5Ea,MAAA,sBAAA,GAAyB,OACpC,OAAA,EACA,MACkB,KAAA;AATpB,EAAA,IAAA,EAAA,CAAA;AAUE,EAAI,IAAA,GAAA,CAAA;AACJ,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEZ,EAAA,MAAM,gBAAiB,CAAA,MAAA,CAAO,aAAe,EAAA,OAAO,IAAS,KAAA;AAC3D,IAAA,KAAA,EAAA,CAAA;AAGA,IAAQ,GAAA,IAAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA3B,kBAAA,CAAQ,OAAO,CAAE,CAAA,GAAA;AAAA,MAAI,CAAC,SAC5BsB,YAAS,CAAA,EAAE,SAAS,IAAIK,WAAA,CAAQ,IAAI,CAAA,EAAG,CAAA;AAAA,KACzC,CAAA;AAEA,IAAA,MAAM,GAAM,GAAA,MAAM8B,iBAAS,CAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AACxC,IAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACZ,GAAA,CAAI,GAAI,CAAA,OAAO,EAAO,KAAA;AACpB,QAAM,MAAA,EAAA,CAAG,OAAQ,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA,OAC5B,CAAA;AAAA,KACH,CAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,IAAI,GAAK,EAAA;AACP,IAAM,MAAA,OAAA,CAAQ,IAAI,GAAI,CAAA,GAAA,CAAI,CAAC,EAAO,KAAA,EAAA,CAAG,KAAM,EAAC,CAAC,CAAA,CAAA;AAE7C,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA;AAAA,QACb,CAAW,QAAA,EAAA,KAAA,CAAA,yBAAA,EAAiC,KAAQ,GAAA,CAAA,GAAI,GAAM,GAAA,EAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAElE;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,OACvB,OAAA,EACA,EACG,KAAA;AACH,EAAA,MAAM,OAAO,MAAM/D,gBAAA,CAAQ,OAAO,CAAE,CAAA,KAAA,CAAM,CAAC,GAAQ,KAAA;AACjD,IAAA,IAAI,IAAI,IAAS,KAAA,QAAA;AAAU,MAAM,MAAA,GAAA,CAAA;AACjC,IAAA,OAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,IAAI,CAAC,IAAA;AAAM,IAAA,OAAA;AAEX,EAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,IACZ,IAAA,CAAK,GAAI,CAAA,OAAO,IAAS,KAAA;AACvB,MAAM,MAAAL,MAAA,GAAOqE,SAAK,CAAA,OAAA,EAAS,IAAI,CAAA,CAAA;AAC/B,MAAM,MAAA,IAAA,GAAO,MAAMC,aAAA,CAAKtE,MAAI,CAAA,CAAA;AAC5B,MAAI,IAAA,IAAA,CAAK,aAAe,EAAA;AACtB,QAAM,MAAA,gBAAA,CAAiBA,QAAM,EAAE,CAAA,CAAA;AAAA,iBACtB,IAAK,CAAA,MAAA,MAAYA,MAAK,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACjD,QAAA,MAAM,GAAGA,MAAI,CAAA,CAAA;AAAA,OACf;AAAA,KACD,CAAA;AAAA,GACH,CAAA;AACF,CAAA;;ACnDa,MAAA,MAAA,GAAS,CACpB,OAAA,EACA,aAAuC,GAAA,EACvC,EAAA,IAAA,GAAiB,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAC+B,KAAA;AACpE,EAAM,MAAA,MAAA,GAAS,oBAAoB,aAAa,CAAA,CAAA;AAChD,EAAA,MAAM,OAAU,GAAA,UAAA,CAAW,OAAS,EAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAEhD,EAAA,OAAO,MAAO,CAAA,MAAA;AAAA,IACZ,CAAC,EAA2B,KAAA;AAC1B,MAAA,UAAA,CAAW,EAA+B,CAAA,CAAA;AAAA,KAC5C;AAAA,IACA;AAAA,MACE,OAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,EAAA;AAEA,MAAM,UAAA,GAAa,OACjB,OACA,EAAA,MAAA,EACA,OAAiB,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CACnB,KAAA;AAjCpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAkCE,EAAA,MAAM,OAAM,EAAK,GAAA,IAAA,CAAA,CAAC,CAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAS,MAAM,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAEhC,EAAI,IAAA;AACF,IAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,MAAM,MAAA,QAAA,CAAS,SAAS,MAAM,CAAA,CAAA;AAAA,KAChC,MAAA,IAAW,QAAQ,MAAQ,EAAA;AACzB,MAAM,MAAA,MAAA,CAAO,SAAS,MAAM,CAAA,CAAA;AAAA,KAC9B,MAAA,IAAW,QAAQ,OAAS,EAAA;AAC1B,MAAM,MAAA,OAAA,CAAQ,SAAS,MAAM,CAAA,CAAA;AAAA,KACpB,MAAA,IAAA,GAAA,KAAQ,IAAQ,IAAA,GAAA,KAAQ,SAAW,EAAA;AAC5C,MAAA,MAAM,QAAQ,OAAS,EAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,KACnC,MAAA,IAAA,GAAA,KAAQ,MAAU,IAAA,GAAA,KAAQ,UAAY,EAAA;AAC/C,MAAA,MAAM,SAAS,OAAS,EAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,KAC/C,MAAA,IAAW,QAAQ,MAAQ,EAAA;AACzB,MAAA,MAAM,KAAK,OAAS,EAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,KAC3C,MAAA,IAAW,QAAQ,KAAO,EAAA;AACxB,MAAA,MAAM,QAAS,CAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,KACtC,MAAA,IAAW,QAAQ,MAAQ,EAAA;AACzB,MAAA,MAAM,gBAAgBW,kBAAQ,CAAA,OAAO,CAAE,CAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AAAA,KACxC,MAAA,IAAA,MAAA,CAAO,QAAS,CAAA,GAAG,CAAG,EAAA;AAC/B,MAAM,MAAA,MAAA,CAAO,QAAS,CAAA,GAAG,CAAE,CAAAA,kBAAA,CAAQ,OAAO,CAAA,EAAG,MAAQ,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,KACzD,MAAA,IAAA,GAAA,KAAQ,KAAS,IAAA,GAAA,KAAQ,WAAa,EAAA;AAC/C,MAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,GAAI,CAAA,IAAA,CAAA,CAAA;AAAA,KACrB;AAEA,IAAA,IACE,QAAQ,SACR,IAAA,GAAA,KAAQ,SACR,GAAQ,KAAA,WAAA,IACR,QAAQ,MACR,EAAA;AACA,MAAM,MAAA,sBAAA,CAAuB,SAAS,MAAM,CAAA,CAAA;AAAA,KAC9C;AAAA,WACO,GAAP,EAAA;AACA,IAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,MAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,GAAI,CAAA,OAAA,CAAA,CAAA;AACzB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,KAChB;AACA,IAAM,MAAA,GAAA,CAAA;AAAA,GACR;AACF,CAAA,CAAA;AAEA,MAAM,IAAO,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/tableMethods.ts","../src/errors.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createView.ts","../src/migration/migration.ts","../src/migration/manageMigratedVersions.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/pull/dbStructure.ts","../src/pull/structureToAst.ts","../src/pull/astToMigration.ts","../src/pull/pull.ts","../src/commands/recurrent.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n columnTypes as defaultColumnTypes,\n DbResult,\n DefaultColumnTypes,\n EnumColumn,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport { ColumnTypesBase, getCallerFilePath, singleQuote } from 'orchid-core';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\nimport prompts from 'prompts';\nimport { TableQuery } from './migration/createTable';\n\ntype Db = DbResult<DefaultColumnTypes>;\n\ntype BaseTable<CT extends ColumnTypesBase> = {\n exportAs: string;\n filePath: string;\n nowSQL?: string;\n\n new (): {\n columnTypes: CT;\n snakeCase?: boolean;\n };\n};\n\nexport type InputRakeDbConfig<CT extends ColumnTypesBase> = Partial<\n Omit<RakeDbConfig<CT>, 'columnTypes'>\n> &\n (\n | {\n columnTypes?: CT | ((t: DefaultColumnTypes) => CT);\n }\n | {\n baseTable?: BaseTable<CT>;\n }\n );\n\nexport type RakeDbConfig<CT extends ColumnTypesBase = DefaultColumnTypes> = {\n columnTypes: CT;\n basePath: string;\n dbScript: string;\n migrationsPath: string;\n recurrentPath: string;\n migrationsTable: string;\n snakeCase: boolean;\n commands: Record<\n string,\n (\n options: AdapterOptions[],\n config: RakeDbConfig<CT>,\n args: string[],\n ) => Promise<void>\n >;\n import(path: string): Promise<void>;\n noPrimaryKey?: NoPrimaryKeyOption;\n baseTable?: BaseTable<CT>;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n beforeMigrate?(db: Db): Promise<void>;\n afterMigrate?(db: Db): Promise<void>;\n beforeRollback?(db: Db): Promise<void>;\n afterRollback?(db: Db): Promise<void>;\n} & QueryLogOptions;\n\nexport type AppCodeUpdaterParams = {\n options: AdapterOptions;\n basePath: string;\n cache: object;\n logger: QueryLogOptions['logger'];\n baseTable: { filePath: string; exportAs: string };\n};\n\nexport type AppCodeUpdater = {\n process(params: AppCodeUpdaterParams & { ast: RakeDbAst }): Promise<void>;\n afterAll(params: AppCodeUpdaterParams): Promise<void>;\n};\n\nexport const migrationConfigDefaults: Omit<\n RakeDbConfig,\n 'basePath' | 'dbScript' | 'columnTypes' | 'recurrentPath'\n> = {\n migrationsPath: path.join('src', 'db', 'migrations'),\n migrationsTable: 'schemaMigrations',\n snakeCase: false,\n commands: {},\n import: (path: string) => {\n return import(path).catch((err) => {\n if (err.code === 'ERR_UNKNOWN_FILE_EXTENSION') {\n require(path);\n } else {\n throw err;\n }\n });\n },\n log: true,\n logger: console,\n useCodeUpdater: true,\n};\n\nexport const processRakeDbConfig = <CT extends ColumnTypesBase>(\n config: InputRakeDbConfig<CT>,\n): RakeDbConfig<CT> => {\n const result = { ...migrationConfigDefaults, ...config } as RakeDbConfig<CT>;\n if (!result.recurrentPath)\n result.recurrentPath = path.join(result.migrationsPath, 'recurrent');\n\n if (\n config.appCodeUpdater &&\n (!('baseTable' in config) || !config.baseTable)\n ) {\n throw new Error(\n '`baseTable` option is required in `rakeDb` for `appCodeUpdater`',\n );\n }\n\n if (!result.log) {\n delete result.logger;\n }\n\n if (!result.basePath || !result.dbScript) {\n const filePath = getCallerFilePath();\n if (!filePath) {\n throw new Error(\n 'Failed to determine path to db script. Please set basePath option of rakeDb',\n );\n }\n\n result.basePath = path.dirname(filePath);\n result.dbScript = path.basename(filePath);\n }\n\n if (!path.isAbsolute(result.migrationsPath)) {\n result.migrationsPath = path.resolve(\n result.basePath,\n result.migrationsPath,\n );\n }\n\n if (!path.isAbsolute(result.recurrentPath)) {\n result.recurrentPath = path.resolve(result.basePath, result.recurrentPath);\n }\n\n if ('baseTable' in config) {\n const proto = config.baseTable?.prototype;\n result.columnTypes = proto.columnTypes || defaultColumnTypes;\n if (proto.snakeCase) result.snakeCase = true;\n } else {\n result.columnTypes = (('columnTypes' in config &&\n (typeof config.columnTypes === 'function'\n ? config.columnTypes(defaultColumnTypes)\n : config.columnTypes)) ||\n defaultColumnTypes) as CT;\n }\n\n return result as RakeDbConfig<CT>;\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n create?: boolean,\n): Promise<AdapterOptions | undefined> => {\n const confirm = await prompts([\n {\n message: `Would you like to share admin credentials to ${\n create ? 'create' : 'drop'\n } a database`,\n type: 'confirm',\n name: 'confirm',\n initial: true,\n },\n ]);\n\n if (!confirm.confirm) {\n return;\n }\n\n const values = await prompts([\n {\n message: 'Enter admin user:',\n type: 'text',\n name: 'user',\n initial: 'postgres',\n min: 1,\n },\n {\n message: 'Enter admin password:',\n type: 'password',\n name: 'password',\n },\n ]);\n\n return setAdapterOptions(options, {\n ...values,\n password: values.password || undefined,\n });\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: Pick<RakeDbConfig, 'migrationsTable' | 'logger'>,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteWithSchema({\n name: config.migrationsTable,\n })} ( version TEXT NOT NULL )`,\n );\n config.logger?.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n config.logger?.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files.filter((file) => path.basename(file).includes('.'))).map(\n (file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.resolve(migrationsPath, file),\n version: timestampMatch[1],\n };\n },\n );\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteWithSchema = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return schema ? `\"${schema}\".\"${name}\"` : `\"${name}\"`;\n};\n\nexport const getSchemaAndTableFromName = (\n name: string,\n): [string | undefined, string] => {\n const index = name.indexOf('.');\n return index !== -1\n ? [name.slice(0, index), name.slice(index + 1)]\n : [undefined, name];\n};\n\nexport const quoteSchemaTable = ({\n schema,\n name,\n}: {\n schema?: string;\n name: string;\n}) => {\n return singleQuote(schema ? `${schema}.${name}` : name);\n};\n\nexport const makePopulateEnumQuery = (item: EnumColumn): TableQuery => {\n const [schema, name] = getSchemaAndTableFromName(item.enumName);\n return {\n text: `SELECT unnest(enum_range(NULL::${quoteWithSchema({\n schema,\n name,\n })}))::text`,\n then(result) {\n // populate empty options array with values from db\n item.options.push(...result.rows.map(([value]) => value));\n },\n };\n};\n","import { Migration } from './migration';\nimport { ColumnTypesBase } from 'orchid-core';\n\nlet currentChanges: ChangeCallback[] = [];\n\nexport type ChangeCallback<CT extends ColumnTypesBase = ColumnTypesBase> = (\n db: Migration<CT>,\n up: boolean,\n) => Promise<void>;\n\nexport const clearChanges = () => {\n currentChanges = [];\n};\n\nexport const getCurrentChanges = () => currentChanges;\nexport const pushChange = (fn: ChangeCallback) => currentChanges.push(fn);\n","import { ColumnType, ForeignKeyTable, getRaw, quote, TableData } from 'pqb';\nimport { isRaw, RawExpression, Sql, toArray, toSnakeCase } from 'orchid-core';\nimport { ColumnComment } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinColumns,\n quoteWithSchema,\n} from '../common';\n\nexport const columnTypeToSql = (item: ColumnType) => {\n return item.data.isOfCustomType ? `\"${item.toSQL()}\"` : item.toSQL();\n};\n\nexport const getColumnName = (\n item: { data: { name?: string } },\n key: string,\n snakeCase: boolean | undefined,\n) => {\n return item.data.name || (snakeCase ? toSnakeCase(key) : key);\n};\n\nexport const columnToSql = (\n name: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n snakeCase: boolean | undefined,\n): string => {\n const line = [`\"${name}\" ${columnTypeToSql(item)}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.data.identity) {\n line.push(identityToSql(item.data.identity));\n }\n\n if (item.data.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.data.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.check) {\n line.push(checkToSql(item.data.check, values));\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKeys } = item.data;\n if (foreignKeys) {\n for (const foreignKey of foreignKeys) {\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(\n referencesToSql(\n {\n columns: foreignKey.columns,\n fnOrTable: 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n foreignColumns: foreignKey.columns,\n options: foreignKey,\n },\n snakeCase,\n ),\n );\n }\n }\n\n return line.join(' ');\n};\n\nexport const identityToSql = (identity: TableData.Identity) => {\n const options = sequenceOptionsToSql(identity);\n return `GENERATED ${identity.always ? 'ALWAYS' : 'BY DEFAULT'} AS IDENTITY${\n options ? ` (${options})` : ''\n }`;\n};\n\nconst sequenceOptionsToSql = (item: TableData.SequenceOptions) => {\n const line: string[] = [];\n if (item.dataType) line.push(`AS ${item.dataType}`);\n if (item.incrementBy !== undefined)\n line.push(`INCREMENT BY ${item.incrementBy}`);\n if (item.min !== undefined) line.push(`MINVALUE ${item.min}`);\n if (item.max !== undefined) line.push(`MAXVALUE ${item.max}`);\n if (item.startWith !== undefined) line.push(`START WITH ${item.startWith}`);\n if (item.cache !== undefined) line.push(`CACHE ${item.cache}`);\n if (item.cycle) line.push(`CYCLE`);\n if (item.ownedBy) {\n const [schema, table] = getSchemaAndTableFromName(item.ownedBy);\n line.push(`OWNED BY ${quoteWithSchema({ schema, name: table })}`);\n }\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n name: string,\n item: ColumnType,\n) => {\n if (item.data.indexes) {\n indexes.push(\n ...item.data.indexes.map((index) => ({\n columns: [{ ...index, column: name }],\n options: index,\n })),\n );\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n name: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: name, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n): [string | undefined, string] => {\n if (typeof fnOrTable === 'string') {\n return getSchemaAndTableFromName(fnOrTable);\n }\n\n const item = new (fnOrTable())();\n return [item.schema, item.table];\n};\n\nexport const getConstraintName = (\n table: string,\n constraint: TableData.Constraint,\n) => {\n if (constraint.references)\n return `${table}_${constraint.references.columns.join('_')}_fkey`;\n if (constraint.check) return `${table}_check`;\n return `${table}_constraint`;\n};\n\nexport const constraintToSql = (\n { name }: { schema?: string; name: string },\n up: boolean,\n constraint: TableData.Constraint,\n values: unknown[],\n snakeCase: boolean | undefined,\n) => {\n const constraintName = constraint.name || getConstraintName(name, constraint);\n\n if (!up) {\n const { dropMode } = constraint;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const sql = [`CONSTRAINT \"${constraintName}\"`];\n\n if (constraint.references) {\n sql.push(foreignKeyToSql(constraint.references, snakeCase));\n }\n\n if (constraint.check) {\n sql.push(checkToSql(constraint.check, values));\n }\n\n return sql.join(' ');\n};\n\nconst checkToSql = (check: RawExpression, values: unknown[]) => {\n return `CHECK (${getRaw(check, values)})`;\n};\n\nconst foreignKeyToSql = (item: TableData.References, snakeCase?: boolean) => {\n return `FOREIGN KEY (${joinColumns(item.columns)}) ${referencesToSql(\n item,\n snakeCase,\n )}`;\n};\n\nexport const referencesToSql = (\n references: TableData.References,\n snakeCase: boolean | undefined,\n) => {\n const [schema, table] = getForeignKeyTable(references.fnOrTable);\n\n const sql: string[] = [\n `REFERENCES ${quoteWithSchema({ schema, name: table })}(${joinColumns(\n snakeCase\n ? references.foreignColumns.map(toSnakeCase)\n : references.foreignColumns,\n )})`,\n ];\n\n const { options } = references;\n if (options?.match) {\n sql.push(`MATCH ${options?.match.toUpperCase()}`);\n }\n\n if (options?.onDelete) {\n sql.push(`ON DELETE ${options?.onDelete.toUpperCase()}`);\n }\n\n if (options?.onUpdate) {\n sql.push(`ON UPDATE ${options?.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const getIndexName = (\n table: string,\n columns: TableData.Index['columns'],\n) => {\n return `${table}_${columns\n .map((it) =>\n 'column' in it\n ? it.column\n : it.expression.match(/\\w+/g)?.join('_') || 'expression',\n )\n .join('_')}_idx`;\n};\n\nexport const indexesToQuery = (\n up: boolean,\n { schema, name }: { schema?: string; name: string },\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName = options.name || getIndexName(name, columns);\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteWithSchema({ schema, name })}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n 'column' in column ? `\"${column.column}\"` : `(${column.expression})`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.opclass) {\n columnSql.push(column.opclass);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.nullsNotDistinct) {\n sql.push(`NULLS NOT DISTINCT`);\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n schemaTable: { schema?: string; name: string },\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteWithSchema(\n schemaTable,\n )}.\"${column}\" IS ${quote(comment)}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n","import { EnumColumn } from 'pqb';\n\nexport const tableMethods = {\n enum(name: string) {\n // empty array will be filled during the migration by querying db\n return new EnumColumn(name, [] as unknown as [string, ...string[]]);\n },\n};\n","export class RakeDbError extends Error {}\n\nexport class NoPrimaryKey extends RakeDbError {}\n","import {\n ColumnsShape,\n Db,\n EnumColumn,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n QueryArraysResult,\n quote,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n MigrationBase,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n getColumnName,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { tableMethods } from './tableMethods';\nimport { NoPrimaryKey } from '../errors';\nimport { ColumnTypesBase, snakeCaseKey } from 'orchid-core';\n\nexport type TableQuery = {\n text: string;\n values?: unknown[];\n then?(result: QueryArraysResult): void;\n};\n\nexport type CreateTableResult<\n Table extends string,\n Shape extends ColumnsShape,\n> = {\n table: Db<Table, Shape>;\n};\n\nexport const createTable = async <\n CT extends ColumnTypesBase,\n Table extends string,\n Shape extends ColumnsShape,\n>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: Table,\n options: TableOptions,\n fn: ColumnsShapeCallback<CT, Shape>,\n): Promise<CreateTableResult<Table, Shape>> => {\n const snakeCase =\n 'snakeCase' in options ? options.snakeCase : migration.options.snakeCase;\n\n const types = Object.assign(\n Object.create(migration.columnTypes),\n tableMethods,\n );\n types[snakeCaseKey] = snakeCase;\n\n const shape = getColumnTypes(types, fn, migration.options.baseTable?.nowSQL);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast, snakeCase);\n for (const { then, ...query } of queries) {\n const result = await migration.adapter.arrays(query);\n then?.(result);\n }\n\n migration.migratedAsts.push(ast);\n\n let table: Db<Table, Shape> | undefined;\n\n return {\n get table(): Db<Table, Shape> {\n return (table ??= (migration as unknown as Migration)(tableName, shape, {\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : undefined,\n snakeCase: options.snakeCase,\n }) as unknown as Db<Table, Shape>);\n },\n };\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n const column = shape[key];\n if (column.data.isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const { primaryKey } = tableData;\n const [schema, table] = getSchemaAndTableFromName(tableName);\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n schema,\n name: table,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].data.isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const error = new NoPrimaryKey(\n `Table ${ast.name} has no primary key.\\nYou can suppress this error by setting { noPrimaryKey: true } after a table name.`,\n );\n if (ast.noPrimaryKey === 'error') {\n throw error;\n } else {\n console.warn(error.message);\n }\n }\n }\n};\n\nconst astToQueries = (\n ast: RakeDbAst.Table,\n snakeCase?: boolean,\n): TableQuery[] => {\n const queries: TableQuery[] = [];\n const { shape } = ast;\n\n for (const key in shape) {\n const item = shape[key];\n if (!(item instanceof EnumColumn)) continue;\n\n queries.push(makePopulateEnumQuery(item));\n }\n\n if (ast.action === 'drop') {\n queries.push({\n text: `DROP TABLE ${quoteWithSchema(ast)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n });\n return queries;\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in shape) {\n const item = shape[key];\n const name = getColumnName(item, key, snakeCase);\n addColumnIndex(indexes, name, item);\n addColumnComment(comments, name, item);\n lines.push(\n `\\n ${columnToSql(name, item, values, !!ast.primaryKey, snakeCase)}`,\n );\n }\n\n if (ast.primaryKey) {\n lines.push(\n `\\n ${primaryKeyToSql({\n options: ast.primaryKey.options,\n columns: ast.primaryKey.columns.map((key) =>\n getColumnName(shape[key], key, snakeCase),\n ),\n })}`,\n );\n }\n\n ast.constraints?.forEach((item) => {\n lines.push(\n `\\n ${constraintToSql(\n ast,\n true,\n {\n ...item,\n references: item.references\n ? {\n ...item.references,\n columns: item.references.columns.map((column) =>\n getColumnName(shape[column], column, snakeCase),\n ),\n }\n : undefined,\n },\n values,\n snakeCase,\n )}`,\n );\n });\n\n indexes.push(\n ...(ast.indexes?.map((index) => ({\n ...index,\n columns: index.columns.map((item) => ({\n ...item,\n ...('column' in item\n ? {\n column: getColumnName(shape[item.column], item.column, snakeCase),\n }\n : {}),\n })),\n })) || []),\n );\n\n queries.push(\n {\n text: `CREATE TABLE ${quoteWithSchema(ast)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast, indexes),\n ...commentsToQuery(ast, comments),\n );\n\n if (ast.comment) {\n queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n });\n }\n\n return queries;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n TableData,\n quote,\n getRaw,\n EnumColumn,\n UnknownColumn,\n columnTypes,\n} from 'pqb';\nimport {\n EmptyObject,\n emptyObject,\n RawExpression,\n isRaw,\n ColumnTypesBase,\n snakeCaseKey,\n toSnakeCase,\n deepCompare,\n consumeColumnName,\n} from 'orchid-core';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n MigrationBase,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteWithSchema,\n} from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n getColumnName,\n identityToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { tableMethods } from './tableMethods';\nimport { TableQuery } from './createTable';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: {},\n drop: {},\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...(a.indexes || []), ...(b.indexes || [])];\n a.constraints = [...(a.constraints || []), ...(b.constraints || [])];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return addOrDrop('add', item, options);\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = function (item, options) {\n if (item instanceof ColumnType) {\n return addOrDrop('drop', item, options);\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n} as typeof add;\n\nconst addOrDrop = (\n type: 'add' | 'drop',\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem => {\n const name = consumeColumnName();\n if (name) {\n item.data.name = name;\n }\n\n if (item instanceof UnknownColumn) {\n const empty = columnTypeToColumnChange({\n type: 'change',\n from: {},\n to: {},\n });\n const add = columnTypeToColumnChange({\n type: 'change',\n from: {},\n to: {\n check: item.data.check,\n },\n });\n\n return {\n type: 'change',\n from: type === 'add' ? empty : add,\n to: type === 'add' ? add : empty,\n ...options,\n };\n }\n\n return {\n type,\n item,\n dropMode: options?.dropMode,\n };\n};\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKeys = item.data.foreignKeys;\n if (foreignKeys?.some((it) => 'fn' in it)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.data.isNullable,\n primaryKey: item.data.isPrimaryKey,\n ...item.data,\n foreignKeys: foreignKeys as RakeDbAst.ColumnChange['foreignKeys'],\n };\n }\n\n return item.to;\n};\n\nconst nameKey = Symbol('name');\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n ...tableMethods,\n name(this: ColumnTypesBase, name: string) {\n const types = Object.create(columnTypes.name.call(this, name));\n types[nameKey] = name;\n return types;\n },\n add,\n drop,\n change(\n this: ColumnTypesBase,\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n name: (this as { [nameKey]?: string })[nameKey],\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger<CT extends ColumnTypesBase> =\n MigrationColumnTypes<CT> & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n): Promise<void> => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(migration.columnTypes) as TableChanger<CT>;\n Object.assign(tableChanger, tableChangeMethods);\n\n const snakeCase =\n 'snakeCase' in options ? options.snakeCase : migration.options.snakeCase;\n\n (tableChanger as { [snakeCaseKey]?: boolean })[snakeCaseKey] = snakeCase;\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast, snakeCase);\n for (const query of queries) {\n const result = await migration.adapter.arrays(query);\n query.then?.(result);\n }\n\n migration.migratedAsts.push(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n const [schema, table] = getSchemaAndTableFromName(name);\n\n return {\n type: 'changeTable',\n schema,\n name: table,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (\n ast: RakeDbAst.ChangeTable,\n snakeCase?: boolean,\n): TableQuery[] => {\n const queries: TableQuery[] = [];\n\n if (ast.comment !== undefined) {\n queries.push({\n text: `COMMENT ON TABLE ${quoteWithSchema(ast)} IS ${quote(ast.comment)}`,\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = {\n columns: [],\n };\n\n const dropPrimaryKeys: PrimaryKeys = {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if ('item' in item) {\n const { item: column } = item;\n if (column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(column));\n }\n }\n\n if (item.type === 'add') {\n if (item.item.data.isPrimaryKey) {\n addPrimaryKeys.columns.push(getColumnName(item.item, key, snakeCase));\n }\n } else if (item.type === 'drop') {\n if (item.item.data.isPrimaryKey) {\n dropPrimaryKeys.columns.push(getColumnName(item.item, key, snakeCase));\n }\n } else if (item.type === 'change') {\n if (item.from.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.from.column));\n }\n\n if (item.to.column instanceof EnumColumn) {\n queries.push(makePopulateEnumQuery(item.to.column));\n }\n\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(\n item.from.column\n ? getColumnName(item.from.column, key, snakeCase)\n : snakeCase\n ? toSnakeCase(key)\n : key,\n );\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(\n item.to.column\n ? getColumnName(item.to.column, key, snakeCase)\n : snakeCase\n ? toSnakeCase(key)\n : key,\n );\n addPrimaryKeys.change = true;\n }\n }\n }\n\n if (ast.add.primaryKey) {\n addPrimaryKeys.options = ast.add.primaryKey.options;\n addPrimaryKeys.columns.push(...ast.add.primaryKey.columns);\n }\n\n if (ast.drop.primaryKey) {\n dropPrimaryKeys.options = ast.drop.primaryKey.options;\n dropPrimaryKeys.columns.push(...ast.drop.primaryKey.columns);\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes = mapIndexesForSnakeCase(ast.add.indexes, snakeCase);\n\n const dropIndexes = mapIndexesForSnakeCase(ast.drop.indexes, snakeCase);\n\n const addConstraints = mapConstraintsToSnakeCase(\n ast.add.constraints,\n snakeCase,\n );\n\n const dropConstraints = mapConstraintsToSnakeCase(\n ast.drop.constraints,\n snakeCase,\n );\n\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n const column = item.item;\n const name = getColumnName(column, key, snakeCase);\n addColumnIndex(addIndexes, name, column);\n addColumnComment(comments, name, column);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n name,\n column,\n values,\n addPrimaryKeys.columns.length > 1,\n snakeCase,\n )}`,\n );\n } else if (item.type === 'drop') {\n const name = getColumnName(item.item, key, snakeCase);\n addColumnIndex(dropIndexes, name, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${name}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n const name = getChangeColumnName(item, key, snakeCase);\n\n if (to.type && (from.type !== to.type || from.collate !== to.collate)) {\n const type =\n !to.column || to.column.data.isOfCustomType\n ? `\"${to.type}\"`\n : to.type;\n\n alterTable.push(\n `ALTER COLUMN \"${name}\" TYPE ${type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (\n typeof from.identity !== typeof to.identity ||\n !deepCompare(from.identity, to.identity)\n ) {\n alterTable.push(\n `ALTER COLUMN \"${name}\" ${\n to.identity ? `ADD ${identityToSql(to.identity)}` : `DROP IDENTITY`\n }`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${name}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${name}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${name}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n if (from.check !== to.check) {\n const checkName = `${ast.name}_${name}_check`;\n if (from.check) {\n alterTable.push(`DROP CONSTRAINT \"${checkName}\"`);\n }\n if (to.check) {\n alterTable.push(\n `ADD CONSTRAINT \"${checkName}\"\\n CHECK (${getRaw(\n to.check,\n values,\n )})`,\n );\n }\n }\n\n const foreignKeysLen = Math.max(\n from.foreignKeys?.length || 0,\n to.foreignKeys?.length || 0,\n );\n for (let i = 0; i < foreignKeysLen; i++) {\n const fromFkey = from.foreignKeys?.[i];\n const toFkey = to.foreignKeys?.[i];\n\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropConstraints.push({\n name: fromFkey.name,\n dropMode: fromFkey.dropMode,\n references: {\n columns: [name],\n fnOrTable: fromFkey.table,\n foreignColumns: snakeCase\n ? fromFkey.columns.map(toSnakeCase)\n : fromFkey.columns,\n options: fromFkey,\n },\n });\n }\n\n if (toFkey) {\n addConstraints.push({\n name: toFkey.name,\n dropMode: toFkey.dropMode,\n references: {\n columns: [name],\n fnOrTable: toFkey.table,\n foreignColumns: snakeCase\n ? toFkey.columns.map(toSnakeCase)\n : toFkey.columns,\n options: toFkey,\n },\n });\n }\n }\n }\n\n const indexesLen = Math.max(\n from.indexes?.length || 0,\n to.indexes?.length || 0,\n );\n for (let i = 0; i < indexesLen; i++) {\n const fromIndex = from.indexes?.[i];\n const toIndex = to.indexes?.[i];\n\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.opclass !== toIndex.opclass ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: name,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: name,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: name, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(\n `RENAME COLUMN \"${snakeCase ? toSnakeCase(key) : key}\" TO \"${\n snakeCase ? toSnakeCase(item.name) : item.name\n }\"`,\n );\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropConstraints.map(\n (foreignKey) =>\n `\\n DROP ${constraintToSql(ast, false, foreignKey, values, snakeCase)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(\n `ADD ${primaryKeyToSql(\n snakeCase\n ? {\n options: addPrimaryKeys.options,\n columns: addPrimaryKeys.columns.map(toSnakeCase),\n }\n : addPrimaryKeys,\n )}`,\n );\n }\n\n alterTable.push(\n ...addConstraints.map(\n (foreignKey) =>\n `\\n ADD ${constraintToSql(ast, true, foreignKey, values, snakeCase)}`,\n ),\n );\n\n if (alterTable.length) {\n queries.push({\n text:\n `ALTER TABLE ${quoteWithSchema(ast)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n queries.push(...indexesToQuery(false, ast, dropIndexes));\n queries.push(...indexesToQuery(true, ast, addIndexes));\n queries.push(...commentsToQuery(ast, comments));\n\n return queries;\n};\n\nconst getChangeColumnName = (\n change: RakeDbAst.ChangeTableItem.Change,\n key: string,\n snakeCase?: boolean,\n) => {\n return (\n change.name ||\n (change.to.column\n ? getColumnName(change.to.column, key, snakeCase)\n : snakeCase\n ? toSnakeCase(key)\n : key)\n );\n};\n\nconst mapIndexesForSnakeCase = (\n indexes?: TableData.Index[],\n snakeCase?: boolean,\n): TableData.Index[] => {\n return (\n indexes?.map((index) => ({\n options: index.options,\n columns: snakeCase\n ? index.columns.map((item) =>\n 'column' in item\n ? { ...item, column: toSnakeCase(item.column) }\n : item,\n )\n : index.columns,\n })) || []\n );\n};\n\nconst mapConstraintsToSnakeCase = (\n foreignKeys?: TableData.Constraint[],\n snakeCase?: boolean,\n): TableData.Constraint[] => {\n return (\n foreignKeys?.map((item) => ({\n ...item,\n references: item.references\n ? snakeCase\n ? {\n ...item.references,\n columns: item.references.columns.map(toSnakeCase),\n }\n : item.references\n : undefined,\n })) || []\n );\n};\n","import { MigrationBase } from './migration';\nimport {\n ColumnTypesBase,\n raw,\n RawExpression,\n singleQuote,\n Sql,\n} from 'orchid-core';\nimport { RakeDbAst } from '../ast';\nimport { getRaw } from 'pqb';\n\nexport const createView = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n): Promise<void> => {\n const ast = makeAst(up, name, options, sql);\n const query = astToQuery(ast);\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n): RakeDbAst.View => {\n if (typeof sql === 'string') {\n sql = raw(sql);\n }\n\n return {\n type: 'view',\n action: up ? 'create' : 'drop',\n name,\n shape: {},\n sql,\n options,\n };\n};\n\nconst astToQuery = (ast: RakeDbAst.View): Sql => {\n const values: unknown[] = [];\n const sql: string[] = [];\n const { options } = ast;\n\n if (ast.action === 'create') {\n sql.push('CREATE');\n\n if (options?.createOrReplace) sql.push('OR REPLACE');\n if (options?.temporary) sql.push('TEMPORARY');\n if (options?.recursive) sql.push('RECURSIVE');\n\n sql.push(`VIEW \"${ast.name}\"`);\n\n if (options?.columns) {\n sql.push(\n `(${options.columns.map((column) => `\"${column}\"`).join(', ')})`,\n );\n }\n\n if (options?.with) {\n const list: string[] = [];\n if (options.with.checkOption)\n list.push(`check_option = ${singleQuote(options.with.checkOption)}`);\n if (options.with.securityBarrier) list.push(`security_barrier = true`);\n if (options.with.securityInvoker) list.push(`security_invoker = true`);\n sql.push(`WITH ( ${list.join(', ')} )`);\n }\n\n sql.push(`AS (${getRaw(ast.sql, values)})`);\n } else {\n sql.push('DROP VIEW');\n\n if (options?.dropIfExists) sql.push(`IF EXISTS`);\n\n sql.push(`\"${ast.name}\"`);\n\n if (options?.dropMode) sql.push(options.dropMode);\n }\n\n return {\n text: sql.join(' '),\n values,\n };\n};\n","import {\n ColumnsShape,\n ColumnType,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n QueryLogObject,\n TransactionAdapter,\n TextColumn,\n createDb,\n DbResult,\n EnumColumn,\n quote,\n getRaw,\n Adapter,\n DefaultColumnTypes,\n} from 'pqb';\nimport {\n ColumnTypesBase,\n emptyObject,\n MaybeArray,\n QueryInput,\n raw,\n RawExpression,\n singleQuote,\n Sql,\n} from 'orchid-core';\nimport { createTable, CreateTableResult } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport {\n RakeDbConfig,\n quoteWithSchema,\n getSchemaAndTableFromName,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { columnTypeToSql } from './migrationUtils';\nimport { createView } from './createView';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n snakeCase?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes<CT extends ColumnTypesBase> = Omit<\n CT,\n 'text' | 'string' | 'enum'\n> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n citext: TextColumnCreator;\n enum: (name: string) => EnumColumn;\n};\n\nexport type ColumnsShapeCallback<\n CT extends ColumnTypesBase,\n Shape extends ColumnsShape = ColumnsShape,\n> = (t: MigrationColumnTypes<CT> & { raw: typeof raw }) => Shape;\n\nexport type ChangeTableOptions = {\n snakeCase?: boolean;\n comment?: string | [string, string] | null;\n};\n\nexport type ChangeTableCallback<CT extends ColumnTypesBase> = (\n t: TableChanger<CT>,\n) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type SilentQueries = {\n // query without logging\n silentQuery: Adapter['query'];\n silentArrays: Adapter['arrays'];\n};\n\nexport type Migration<CT extends ColumnTypesBase = DefaultColumnTypes> =\n DbResult<CT> &\n MigrationBase<CT> & {\n adapter: SilentQueries;\n };\n\ntype ConstraintArg = {\n name?: string;\n references?: [\n columns: [string, ...string[]],\n table: string,\n foreignColumn: [string, ...string[]],\n options: Omit<ForeignKeyOptions, 'name' | 'dropMode'>,\n ];\n check?: RawExpression;\n dropMode?: DropMode;\n};\n\nexport const createMigrationInterface = <CT extends ColumnTypesBase>(\n tx: TransactionAdapter,\n up: boolean,\n config: RakeDbConfig<CT>,\n): Migration => {\n const adapter = new TransactionAdapter(tx, tx.client, tx.types);\n const { query, arrays } = adapter;\n const log = logParamToLogObject(config.logger || console, config.log);\n\n adapter.query = ((q, types) => {\n return wrapWithLog(log, q, () => query.call(adapter, q, types));\n }) as typeof adapter.query;\n\n adapter.arrays = ((q, types) => {\n return wrapWithLog(log, q, () => arrays.call(adapter, q, types));\n }) as typeof adapter.arrays;\n\n Object.assign(adapter, { silentQuery: query, silentArrays: arrays });\n\n const db = createDb({\n adapter,\n columnTypes: config.columnTypes,\n }) as unknown as Migration;\n\n const { prototype: proto } = MigrationBase;\n for (const key of Object.getOwnPropertyNames(proto)) {\n (db as unknown as Record<string, unknown>)[key] =\n proto[key as keyof typeof proto];\n }\n\n db.migratedAsts = [];\n\n return Object.assign(db, {\n adapter,\n log,\n up,\n options: config,\n });\n};\n\nexport class MigrationBase<CT extends ColumnTypesBase> {\n public adapter!: TransactionAdapter;\n public log?: QueryLogObject;\n public up!: boolean;\n public options!: RakeDbConfig;\n public migratedAsts!: RakeDbAst[];\n public columnTypes!: CT;\n\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n options: TableOptions,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n cbOrOptions: ColumnsShapeCallback<CT, Shape> | TableOptions,\n cb?: ColumnsShapeCallback<CT, Shape>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n options: TableOptions,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n cbOrOptions: ColumnsShapeCallback<CT, Shape> | TableOptions,\n cb?: ColumnsShapeCallback<CT, Shape>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback<CT>): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback<CT> | ChangeTableOptions,\n cb?: ChangeTableCallback<CT>,\n ): Promise<void> {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const [fromSchema, f] = getSchemaAndTableFromName(this.up ? from : to);\n const [toSchema, t] = getSchemaAndTableFromName(this.up ? to : from);\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n fromSchema,\n from: f,\n toSchema,\n to: t,\n };\n\n await this.adapter.query(\n `ALTER TABLE ${quoteWithSchema({\n schema: ast.fromSchema,\n name: ast.from,\n })} RENAME TO ${quoteWithSchema({\n schema: ast.toSchema,\n name: ast.to,\n })}`,\n );\n\n this.migratedAsts.push(ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes<CT>) => ColumnType,\n ): Promise<void> {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes<CT>) => ColumnType,\n ): Promise<void> {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ): Promise<void> {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ): Promise<void> {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ): Promise<void> {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ): Promise<void> {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ): Promise<void> {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ): Promise<void> {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n addCheck(tableName: string, check: RawExpression): Promise<void> {\n return addCheck(this, this.up, tableName, check);\n }\n\n dropCheck(tableName: string, check: RawExpression): Promise<void> {\n return addCheck(this, !this.up, tableName, check);\n }\n\n addConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, this.up, tableName, constraint);\n }\n\n dropConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, !this.up, tableName, constraint);\n }\n\n renameColumn(tableName: string, from: string, to: string): Promise<void> {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string): Promise<void> {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string): Promise<void> {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'> = {},\n ): Promise<void> {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: Omit<\n RakeDbAst.Extension,\n 'type' | 'action' | 'name' | 'values'\n > = {},\n ): Promise<void> {\n return createExtension(this, !this.up, name, options);\n }\n\n createEnum(\n name: string,\n values: [string, ...string[]],\n options?: Omit<\n RakeDbAst.Enum,\n 'type' | 'action' | 'name' | 'values' | 'schema'\n >,\n ): Promise<void> {\n return createEnum(this, this.up, name, values, options);\n }\n\n dropEnum(\n name: string,\n values: [string, ...string[]],\n options?: Omit<\n RakeDbAst.Enum,\n 'type' | 'action' | 'name' | 'values' | 'schema'\n >,\n ): Promise<void> {\n return createEnum(this, !this.up, name, values, options);\n }\n\n createDomain(\n name: string,\n fn: (t: CT) => ColumnType,\n options?: Omit<\n RakeDbAst.Domain,\n 'type' | 'action' | 'schema' | 'name' | 'baseType'\n >,\n ): Promise<void> {\n return createDomain(this, this.up, name, fn, options);\n }\n\n dropDomain(\n name: string,\n fn: (t: CT) => ColumnType,\n options?: Omit<\n RakeDbAst.Domain,\n 'type' | 'action' | 'schema' | 'name' | 'baseType'\n >,\n ): Promise<void> {\n return createDomain(this, !this.up, name, fn, options);\n }\n\n createView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n ): Promise<void>;\n createView(name: string, sql: string | RawExpression): Promise<void>;\n createView(name: string, ...args: unknown[]): Promise<void> {\n const [options, sql] = args.length === 2 ? args : [emptyObject, args[0]];\n\n return createView(\n this,\n this.up,\n name,\n options as RakeDbAst.ViewOptions,\n sql as string | RawExpression,\n );\n }\n\n dropView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawExpression,\n ): Promise<void>;\n dropView(name: string, sql: string | RawExpression): Promise<void>;\n dropView(name: string, ...args: unknown[]): Promise<void> {\n const [options, sql] = args.length === 2 ? args : [emptyObject, args[0]];\n\n return createView(\n this,\n !this.up,\n name,\n options as RakeDbAst.ViewOptions,\n sql as string | RawExpression,\n );\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes<CT>) => ColumnType,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst addCheck = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n check: RawExpression,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.check(check)),\n }));\n};\n\nconst addConstraint = <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n tableName: string,\n constraint: ConstraintArg,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.constraint(constraint)),\n }));\n};\n\nconst createSchema = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n): Promise<void> => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.adapter.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n migration.migratedAsts.push(ast);\n};\n\nconst createExtension = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n options: Omit<RakeDbAst.Extension, 'type' | 'action' | 'name'>,\n): Promise<void> => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.dropIfExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } \"${ast.name}\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst createEnum = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n values: [string, ...string[]],\n options: Omit<\n RakeDbAst.Enum,\n 'type' | 'action' | 'name' | 'values' | 'schema'\n > = {},\n): Promise<void> => {\n const [schema, enumName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Enum = {\n type: 'enum',\n action: up ? 'create' : 'drop',\n schema,\n name: enumName,\n values,\n ...options,\n };\n\n let query;\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE TYPE ${quotedName} AS ENUM (${values\n .map(quote)\n .join(', ')})`;\n } else {\n query = `DROP TYPE${ast.dropIfExists ? ' IF EXISTS' : ''} ${quotedName}${\n ast.cascade ? ' CASCADE' : ''\n }`;\n }\n\n await migration.adapter.query(query);\n\n migration.migratedAsts.push(ast);\n};\n\nconst createDomain = async <CT extends ColumnTypesBase>(\n migration: MigrationBase<CT>,\n up: boolean,\n name: string,\n fn: (t: CT) => ColumnType,\n options?: Omit<\n RakeDbAst.Domain,\n 'type' | 'action' | 'schema' | 'name' | 'baseType'\n >,\n): Promise<void> => {\n const [schema, domainName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Domain = {\n type: 'domain',\n action: up ? 'create' : 'drop',\n schema,\n name: domainName,\n baseType: fn(migration.columnTypes),\n ...options,\n };\n\n let query;\n const values: unknown[] = [];\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE DOMAIN ${quotedName} AS ${columnTypeToSql(ast.baseType)}${\n ast.collation\n ? `\nCOLLATION ${singleQuote(ast.collation)}`\n : ''\n }${\n ast.default\n ? `\nDEFAULT ${getRaw(ast.default, values)}`\n : ''\n }${ast.notNull || ast.check ? '\\n' : ''}${[\n ast.notNull && 'NOT NULL',\n ast.check && `CHECK ${getRaw(ast.check, values)}`,\n ]\n .filter(Boolean)\n .join(' ')}`;\n } else {\n query = `DROP DOMAIN ${quotedName}${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.adapter.query({\n text: query,\n values,\n });\n\n migration.migratedAsts.push(ast);\n};\n\nconst queryExists = <CT extends ColumnTypesBase>(\n db: MigrationBase<CT>,\n sql: { text: string; values: unknown[] },\n): Promise<boolean> => {\n return db.adapter.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import { Adapter } from 'pqb';\nimport {\n createSchemaMigrations,\n quoteWithSchema,\n RakeDbConfig,\n} from '../common';\nimport { SilentQueries } from './migration';\nimport { ColumnTypesBase } from 'orchid-core';\n\nexport const saveMigratedVersion = async <CT extends ColumnTypesBase>(\n db: SilentQueries,\n version: string,\n config: RakeDbConfig<CT>,\n): Promise<void> => {\n await db.silentArrays(\n `INSERT INTO ${quoteWithSchema({\n name: config.migrationsTable,\n })} VALUES ('${version}')`,\n );\n};\n\nexport const removeMigratedVersion = async <CT extends ColumnTypesBase>(\n db: SilentQueries,\n version: string,\n config: RakeDbConfig<CT>,\n) => {\n await db.silentArrays(\n `DELETE FROM ${quoteWithSchema({\n name: config.migrationsTable,\n })} WHERE version = '${version}'`,\n );\n};\n\nexport const getMigratedVersionsMap = async <CT extends ColumnTypesBase>(\n db: Adapter,\n config: RakeDbConfig<CT>,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT *\n FROM ${quoteWithSchema({ name: config.migrationsTable })}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n","import {\n Adapter,\n AdapterOptions,\n createDb,\n DbResult,\n DefaultColumnTypes,\n} from 'pqb';\nimport {\n ColumnTypesBase,\n emptyArray,\n MaybeArray,\n pathToLog,\n toArray,\n} from 'orchid-core';\nimport { getMigrationFiles, MigrationFile, RakeDbConfig } from '../common';\nimport {\n ChangeCallback,\n clearChanges,\n getCurrentChanges,\n} from '../migration/change';\nimport { createMigrationInterface } from '../migration/migration';\nimport * as url from 'url';\nimport {\n getMigratedVersionsMap,\n removeMigratedVersion,\n saveMigratedVersion,\n} from '../migration/manageMigratedVersions';\n\nconst getDb = (adapter: Adapter) => createDb({ adapter });\n\nexport const migrateOrRollback = async <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[],\n up: boolean,\n): Promise<void> => {\n config = { ...config };\n const files = await getMigrationFiles(config, up);\n\n let count = up ? Infinity : 1;\n let argI = 0;\n const num = args[0] === 'all' ? Infinity : parseInt(args[0]);\n if (!isNaN(num)) {\n argI++;\n count = num;\n }\n\n const arg = args[argI];\n if (arg === '--code') {\n config.useCodeUpdater = args[argI + 1] !== 'false';\n }\n\n if (!config.useCodeUpdater) delete config.appCodeUpdater;\n\n const appCodeUpdaterCache = {};\n\n for (const opts of toArray(options)) {\n const adapter = new Adapter(opts);\n let db: DbResult<DefaultColumnTypes> | undefined;\n\n if (up) {\n await config.beforeMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.beforeRollback?.((db ??= getDb(adapter)));\n }\n\n const migratedVersions = await getMigratedVersionsMap(adapter, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(\n adapter,\n up,\n file,\n config,\n opts,\n appCodeUpdaterCache,\n );\n\n config.logger?.log(\n `${up ? 'Migrated' : 'Rolled back'} ${pathToLog(file.path)}`,\n );\n }\n\n if (up) {\n await config.afterMigrate?.((db ??= getDb(adapter)));\n } else {\n await config.afterRollback?.((db ??= getDb(adapter)));\n }\n } finally {\n await config.appCodeUpdater?.afterAll({\n options: opts,\n basePath: config.basePath,\n cache: appCodeUpdaterCache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n\n await adapter.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\nexport const changeCache: Record<string, ChangeCallback[] | undefined> = {};\n\nconst begin = {\n text: 'BEGIN',\n values: emptyArray,\n};\n\nconst processMigration = async <CT extends ColumnTypesBase>(\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig<CT>,\n options: AdapterOptions,\n appCodeUpdaterCache: object,\n) => {\n const asts = await db.transaction(begin, async (tx) => {\n clearChanges();\n\n let changes = changeCache[file.path];\n if (!changes) {\n try {\n await config.import(file.path);\n } catch (err) {\n // throw if unknown error\n if ((err as { code: string }).code !== 'ERR_UNSUPPORTED_ESM_URL_SCHEME')\n throw err;\n\n // this error happens on windows in ESM mode, try import transformed url\n await config.import(url.pathToFileURL(file.path).pathname);\n }\n changes = getCurrentChanges();\n changeCache[file.path] = changes;\n }\n\n const db = createMigrationInterface(tx, up, config);\n\n for (const fn of up ? changes : changes.reverse()) {\n await fn(db, up);\n }\n\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db.adapter,\n file.version,\n config,\n );\n\n return db.migratedAsts;\n });\n\n for (const ast of asts) {\n await config.appCodeUpdater?.process({\n ast,\n options,\n basePath: config.basePath,\n cache: appCodeUpdaterCache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n }\n};\n\nexport const migrate = <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = [],\n): Promise<void> => migrateOrRollback(options, config, args, true);\n\nexport const rollback = <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = [],\n): Promise<void> => migrateOrRollback(options, config, args, false);\n\nexport const redo = async <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = [],\n): Promise<void> => {\n await migrateOrRollback(options, config, args, false);\n await migrateOrRollback(options, config, args, true);\n};\n","import { Adapter, AdapterOptions } from 'pqb';\nimport { ColumnTypesBase, MaybeArray, toArray } from 'orchid-core';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<\n 'ok' | 'already' | 'forbidden' | 'ssl required' | { error: unknown }\n> => {\n const db = new Adapter(options);\n\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n\n if (\n typeof err.message === 'string' &&\n err.message.includes('sslmode=require')\n ) {\n return 'ssl required';\n }\n\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (\n err.code === '42501' ||\n (typeof err.message === 'string' &&\n err.message.includes('password authentication failed'))\n ) {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: Pick<RakeDbConfig, 'migrationsTable' | 'logger'>,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n create?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n config.logger?.log(args.successMessage(params));\n } else if (result === 'already') {\n config.logger?.log(args.alreadyMessage(params));\n } else if (result === 'ssl required') {\n config.logger?.log(\n 'SSL is required: append ?ssl=true to the database url string',\n );\n return;\n } else if (result === 'forbidden') {\n let message = `Permission denied to ${\n args.create ? 'create' : 'drop'\n } database.`;\n\n const host = adminOptions.databaseURL\n ? new URL(adminOptions.databaseURL).hostname\n : adminOptions.host;\n\n const isLocal = host === 'localhost';\n if (!isLocal) {\n message += `\\nDon't use this command for database service providers, only for a local db.`;\n }\n\n config.logger?.log(message);\n\n const updatedOptions = await setAdminCredentialsToOptions(\n options,\n args.create,\n );\n if (!updatedOptions) return;\n\n await createOrDrop(options, updatedOptions, config, args);\n return;\n } else {\n throw result.error;\n }\n\n if (!args.create) return;\n\n const db = new Adapter(options);\n\n const { schema } = db;\n if (schema) {\n db.schema = undefined;\n try {\n await db.query(`CREATE SCHEMA \"${schema}\"`);\n config.logger?.log(`Created schema ${schema}`);\n } catch (err) {\n if ((err as { code: string }).code === '42P06') {\n config.logger?.log(`Schema ${schema} already exists`);\n } else {\n throw err;\n }\n }\n db.schema = schema;\n }\n\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async <CT extends ColumnTypesBase>(\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n create: true,\n });\n }\n};\n\nexport const dropDb = async <CT extends ColumnTypesBase>(\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async <CT extends ColumnTypesBase>(\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n) => {\n await dropDb(arg, config);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\nimport { ColumnTypesBase, getImportPath, pathToLog } from 'orchid-core';\n\nexport const writeMigrationFile = async <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n version: string,\n name: string,\n content: (importPath: string, name: string) => string,\n) => {\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(config.migrationsPath, `${version}_${name}.ts`);\n const importPath = getImportPath(\n filePath,\n path.join(config.basePath, config.dbScript),\n );\n\n await writeFile(filePath, content(importPath, name));\n config.logger?.log(`Created ${pathToLog(filePath)}`);\n};\n\nexport const generate = async <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n [name]: string[],\n): Promise<void> => {\n if (!name) throw new Error('Migration name is missing');\n\n const version = makeFileTimeStamp();\n await writeMigrationFile(config, version, name, makeContent);\n};\n\nexport const makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (importPath: string, name: string): string => {\n let content = `import { change } from '${importPath}';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({\\n \\n }));`;\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({\\n \\n }));`;\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({\\n \\n }));`;\n }\n }\n\n return content + '\\n});\\n';\n};\n","import { Adapter } from 'pqb';\n\nexport namespace DbStructure {\n export type Table = {\n schemaName: string;\n name: string;\n comment?: string;\n columns: Column[];\n };\n\n export type View = {\n schemaName: string;\n name: string;\n isRecursive: boolean;\n with?: string[]; // ['check_option=LOCAL', 'security_barrier=true']\n columns: Column[];\n sql: string;\n };\n\n export type Procedure = {\n schemaName: string;\n name: string;\n returnSet: boolean;\n returnType: string;\n kind: string;\n isTrigger: boolean;\n types: string[];\n argTypes: string[];\n argModes: ('i' | 'o')[];\n argNames?: string[];\n };\n\n export type Column = {\n schemaName: string;\n tableName: string;\n name: string;\n typeSchema: string;\n type: string;\n isArray: boolean;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n default?: string;\n isNullable: boolean;\n collation?: string;\n compression?: 'p' | 'l'; // p for pglz, l for lz4\n comment?: string;\n identity?: {\n always: boolean;\n start?: number;\n increment?: number;\n min?: number;\n max?: number;\n cache?: number;\n cycle?: boolean;\n };\n };\n\n export type Index = {\n schemaName: string;\n tableName: string;\n name: string;\n using: string;\n isUnique: boolean;\n columns: (({ column: string } | { expression: string }) & {\n collate?: string;\n opclass?: string;\n order?: string;\n })[];\n include?: string[];\n nullsNotDistinct?: boolean;\n with?: string;\n tablespace?: string;\n where?: string;\n };\n\n // a = no action, r = restrict, c = cascade, n = set null, d = set default\n type ForeignKeyAction = 'a' | 'r' | 'c' | 'n' | 'd';\n\n export type Constraint = {\n schemaName: string;\n tableName: string;\n name: string;\n primaryKey?: string[];\n references?: References;\n check?: Check;\n };\n\n export type References = {\n foreignSchema: string;\n foreignTable: string;\n columns: string[];\n foreignColumns: string[];\n match: 'f' | 'p' | 's'; // FULL | PARTIAL | SIMPLE\n onUpdate: ForeignKeyAction;\n onDelete: ForeignKeyAction;\n };\n\n export type Check = {\n columns?: string[];\n expression: string;\n };\n\n export type Trigger = {\n schemaName: string;\n tableName: string;\n triggerSchema: string;\n name: string;\n events: string[];\n activation: string;\n condition?: string;\n definition: string;\n };\n\n export type Extension = {\n schemaName: string;\n name: string;\n version?: string;\n };\n\n export type Enum = {\n schemaName: string;\n name: string;\n values: [string, ...string[]];\n };\n\n export type Domain = {\n schemaName: string;\n name: string;\n type: string;\n typeSchema: string;\n isArray: boolean;\n notNull: boolean;\n maxChars?: number;\n numericPrecision?: number;\n numericScale?: number;\n dateTimePrecision?: number;\n collation?: string;\n default?: string;\n check?: string;\n };\n}\n\nconst filterSchema = (table: string) =>\n `${table} !~ '^pg_' AND ${table} != 'information_schema'`;\n\nconst jsonAgg = (sql: string, as: string) =>\n `(SELECT coalesce(json_agg(t.*), '[]') FROM (${sql}) t) AS \"${as}\"`;\n\nconst columnsSql = ({\n schema,\n table,\n join = '',\n where,\n}: {\n schema: string;\n table: string;\n join?: string;\n where: string;\n}) => `SELECT\n ${schema}.nspname AS \"schemaName\",\n ${table}.relname AS \"tableName\",\n a.attname AS \"name\",\n COALESCE(et.typname, t.typname) AS \"type\",\n tn.nspname AS \"typeSchema\",\n et.typname IS NOT NULL AS \"isArray\",\n information_schema._pg_char_max_length(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"maxChars\",\n information_schema._pg_numeric_precision(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"numericPrecision\",\n information_schema._pg_numeric_scale(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"numericScale\",\n information_schema._pg_datetime_precision(\n information_schema._pg_truetypid(a, t),\n information_schema._pg_truetypmod(a, t)\n ) AS \"datetimePrecision\",\n CAST(\n CASE WHEN a.attgenerated = ''\n THEN pg_get_expr(ad.adbin, ad.adrelid)\n END AS information_schema.character_data\n ) AS \"default\",\n NOT (a.attnotnull OR (t.typtype = 'd' AND t.typnotnull)) AS \"isNullable\",\n co.collname AS \"collation\",\n NULLIF(a.attcompression, '') AS compression,\n pgd.description AS \"comment\",\n (\n CASE WHEN a.attidentity IN ('a', 'd') THEN (\n json_build_object(\n 'always',\n a.attidentity = 'a',\n 'start',\n seq.seqstart,\n 'increment',\n seq.seqincrement,\n 'min',\n nullif(seq.seqmin, 1),\n 'max',\n nullif(seq.seqmax, (\n CASE COALESCE(et.typname, t.typname)\n WHEN 'int2' THEN 32767\n WHEN 'int4' THEN 2147483647\n WHEN 'int8' THEN 9223372036854775807\n ELSE NULL\n END\n )),\n 'cache',\n seq.seqcache,\n 'cycle',\n seq.seqcycle\n )\n ) END\n ) \"identity\"\nFROM pg_attribute a\n${join}\nLEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum\nJOIN pg_type t ON a.atttypid = t.oid\nLEFT JOIN pg_type et ON t.typelem = et.oid\nJOIN pg_namespace tn ON tn.oid = t.typnamespace\nLEFT JOIN (pg_collation co JOIN pg_namespace nco ON (co.collnamespace = nco.oid))\n ON a.attcollation = co.oid AND (nco.nspname, co.collname) <> ('pg_catalog', 'default')\nLEFT JOIN pg_catalog.pg_description pgd\n ON pgd.objoid = a.attrelid\n AND pgd.objsubid = a.attnum\nLEFT JOIN (pg_depend dep JOIN pg_sequence seq ON (dep.classid = 'pg_class'::regclass AND dep.objid = seq.seqrelid AND dep.deptype = 'i'))\n ON (dep.refclassid = 'pg_class'::regclass AND dep.refobjid = ${table}.oid AND dep.refobjsubid = a.attnum)\nWHERE a.attnum > 0\n AND NOT a.attisdropped\n AND ${where}\nORDER BY a.attnum`;\n\nconst schemasSql = `SELECT coalesce(json_agg(nspname ORDER BY nspname), '[]')\nFROM pg_catalog.pg_namespace n\nWHERE ${filterSchema('nspname')}`;\n\nconst tablesSql = `SELECT\n nspname AS \"schemaName\",\n relname AS \"name\",\n obj_description(c.oid) AS comment,\n (SELECT coalesce(json_agg(t), '[]') FROM (${columnsSql({\n schema: 'n',\n table: 'c',\n where: 'a.attrelid = c.oid',\n })}) t) AS \"columns\"\nFROM pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = relnamespace\nWHERE relkind = 'r'\n AND ${filterSchema('nspname')}\nORDER BY relname`;\n\nconst viewsSql = `SELECT\n nc.nspname AS \"schemaName\",\n c.relname AS \"name\",\n right(substring(r.ev_action from ':hasRecursive \\w'), 1)::bool AS \"isRecursive\",\n array_to_json(c.reloptions) AS \"with\",\n (SELECT coalesce(json_agg(t), '[]') FROM (${columnsSql({\n schema: 'nc',\n table: 'c',\n where: 'a.attrelid = c.oid',\n })}) t) AS \"columns\",\n pg_get_viewdef(c.oid) AS \"sql\"\nFROM pg_namespace nc\nJOIN pg_class c\n ON nc.oid = c.relnamespace\n AND c.relkind = 'v'\n AND c.relpersistence != 't'\nJOIN pg_rewrite r ON r.ev_class = c.oid\nWHERE ${filterSchema('nc.nspname')}\nORDER BY c.relname`;\n\n// procedures\n// `SELECT\n// n.nspname AS \"schemaName\",\n// proname AS name,\n// proretset AS \"returnSet\",\n// (\n// SELECT typname FROM pg_type WHERE oid = prorettype\n// ) AS \"returnType\",\n// prokind AS \"kind\",\n// coalesce((\n// SELECT true FROM information_schema.triggers\n// WHERE n.nspname = trigger_schema AND trigger_name = proname\n// LIMIT 1\n// ), false) AS \"isTrigger\",\n// coalesce((\n// SELECT json_agg(pg_type.typname)\n// FROM unnest(coalesce(proallargtypes, proargtypes)) typeId\n// JOIN pg_type ON pg_type.oid = typeId\n// ), '[]') AS \"types\",\n// coalesce(to_json(proallargtypes::int[]), to_json(proargtypes::int[])) AS \"argTypes\",\n// coalesce(to_json(proargmodes), '[]') AS \"argModes\",\n// to_json(proargnames) AS \"argNames\"\n// FROM pg_proc p\n// JOIN pg_namespace n ON p.pronamespace = n.oid\n// WHERE ${filterSchema('n.nspname')}`\n\nconst sql = `SELECT (${schemasSql}) AS \"schemas\", ${jsonAgg(\n tablesSql,\n 'tables',\n)}, ${jsonAgg(viewsSql, 'views')}`;\n\ntype Structure = {\n schemas: string[];\n tables: DbStructure.Table[];\n views: DbStructure.View[];\n};\n\nexport class DbStructure {\n constructor(private db: Adapter) {}\n\n async getStructure(): Promise<Structure> {\n const {\n rows: [structure],\n } = await this.db.query<Structure>(sql);\n return structure;\n }\n\n async getIndexes() {\n const { rows } = await this.db.query<DbStructure.Index>(\n `SELECT\n n.nspname \"schemaName\",\n t.relname \"tableName\",\n ic.relname \"name\",\n am.amname AS \"using\",\n i.indisunique \"isUnique\",\n (\n SELECT json_agg(\n (\n CASE WHEN t.e = 0\n THEN jsonb_build_object('expression', pg_get_indexdef(i.indexrelid, t.i::int4, false))\n ELSE jsonb_build_object('column', (\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = t.e\n )\n ))\n END\n ) || (\n CASE WHEN i.indcollation[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE (\n SELECT (\n CASE WHEN collname = 'default'\n THEN '{}'::jsonb\n ELSE jsonb_build_object('collate', collname)\n END\n )\n FROM pg_catalog.pg_collation\n WHERE oid = i.indcollation[t.i - 1]\n )\n END\n ) || (\n SELECT\n CASE WHEN opcdefault AND attoptions IS NULL\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'opclass', opcname || COALESCE('(' || array_to_string(attoptions, ', ') || ')', '')\n )\n END\n FROM pg_opclass\n LEFT JOIN pg_attribute\n ON attrelid = i.indexrelid\n AND attnum = t.i\n WHERE oid = i.indclass[t.i - 1]\n ) || (\n CASE WHEN i.indoption[t.i - 1] = 0\n THEN '{}'::jsonb\n ELSE jsonb_build_object(\n 'order',\n CASE\n WHEN i.indoption[t.i - 1] = 1 THEN 'DESC NULLS LAST'\n WHEN i.indoption[t.i - 1] = 2 THEN 'ASC NULLS FIRST'\n WHEN i.indoption[t.i - 1] = 3 THEN 'DESC'\n ELSE NULL\n END\n )\n END\n )\n )\n FROM unnest(i.indkey[:indnkeyatts - 1]) WITH ORDINALITY AS t(e, i)\n ) \"columns\",\n (\n SELECT json_agg(\n (\n SELECT attname\n FROM pg_catalog.pg_attribute\n WHERE attrelid = i.indrelid\n AND attnum = j.e\n )\n )\n FROM unnest(i.indkey[indnkeyatts:]) AS j(e)\n ) AS \"include\",\n (to_jsonb(i.*)->'indnullsnotdistinct')::bool AS \"nullsNotDistinct\",\n NULLIF(pg_catalog.array_to_string(\n ic.reloptions || array(SELECT 'toast.' || x FROM pg_catalog.unnest(tc.reloptions) x),\n ', '\n ), '') AS \"with\",\n (\n SELECT tablespace\n FROM pg_indexes\n WHERE schemaname = n.nspname\n AND indexname = ic.relname\n ) AS tablespace,\n pg_get_expr(i.indpred, i.indrelid) AS \"where\"\nFROM pg_index i\nJOIN pg_class t ON t.oid = i.indrelid\nJOIN pg_namespace n ON n.oid = t.relnamespace\nJOIN pg_class ic ON ic.oid = i.indexrelid\nJOIN pg_am am ON am.oid = ic.relam\nLEFT JOIN pg_catalog.pg_class tc ON (ic.reltoastrelid = tc.oid)\nWHERE ${filterSchema('n.nspname')}\n AND NOT i.indisprimary\nORDER BY ic.relname`,\n );\n return rows;\n }\n\n async getConstraints() {\n const { rows } = await this.db.query<DbStructure.Constraint>(\n `SELECT\n s.nspname AS \"schemaName\",\n t.relname AS \"tableName\",\n c.conname AS \"name\",\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.constraint_column_usage ccu\n WHERE contype = 'p'\n AND ccu.constraint_name = c.conname\n AND ccu.table_schema = s.nspname\n ) AS \"primaryKey\",\n (\n SELECT\n json_build_object(\n 'foreignSchema',\n fs.nspname,\n 'foreignTable',\n ft.relname,\n 'columns',\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.key_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ),\n 'foreignColumns',\n (\n SELECT json_agg(ccu.column_name)\n FROM information_schema.constraint_column_usage ccu\n WHERE ccu.constraint_name = c.conname\n AND ccu.table_schema = cs.nspname\n ),\n 'match',\n c.confmatchtype,\n 'onUpdate',\n c.confupdtype,\n 'onDelete',\n c.confdeltype\n )\n FROM pg_class ft\n JOIN pg_catalog.pg_namespace fs ON fs.oid = ft.relnamespace\n JOIN pg_catalog.pg_namespace cs ON cs.oid = c.connamespace\n WHERE contype = 'f' AND ft.oid = confrelid\n ) AS \"references\",\n (\n SELECT\n CASE conbin IS NULL\n WHEN false THEN\n json_build_object(\n 'columns',\n json_agg(ccu.column_name),\n 'expression',\n pg_get_expr(conbin, conrelid)\n )\n END\n FROM information_schema.constraint_column_usage ccu\n WHERE conbin IS NOT NULL\n AND ccu.constraint_name = c.conname\n AND ccu.table_schema = s.nspname\n ) AS \"check\"\nFROM pg_catalog.pg_constraint c\nJOIN pg_class t ON t.oid = conrelid\nJOIN pg_catalog.pg_namespace s\n ON s.oid = t.relnamespace\n AND contype IN ('p', 'f', 'c')\n AND ${filterSchema('s.nspname')}\nORDER BY c.conname`,\n );\n return rows;\n }\n\n async getTriggers() {\n const { rows } = await this.db.query<DbStructure.Trigger>(\n `SELECT event_object_schema AS \"schemaName\",\n event_object_table AS \"tableName\",\n trigger_schema AS \"triggerSchema\",\n trigger_name AS name,\n json_agg(event_manipulation) AS events,\n action_timing AS activation,\n action_condition AS condition,\n action_statement AS definition\nFROM information_schema.triggers\nWHERE ${filterSchema('event_object_schema')}\nGROUP BY event_object_schema, event_object_table, trigger_schema, trigger_name, action_timing, action_condition, action_statement\nORDER BY trigger_name`,\n );\n return rows;\n }\n\n async getExtensions() {\n const { rows } = await this.db.query<DbStructure.Extension>(\n `SELECT\n nspname AS \"schemaName\",\n extname AS \"name\",\n extversion AS version\nFROM pg_extension\nJOIN pg_catalog.pg_namespace n ON n.oid = extnamespace\n AND ${filterSchema('n.nspname')}`,\n );\n return rows;\n }\n\n async getEnums() {\n const { rows } = await this.db.query<DbStructure.Enum>(\n `SELECT\n n.nspname as \"schemaName\",\n t.typname as name,\n json_agg(e.enumlabel) as values\nFROM pg_type t\nJOIN pg_enum e ON t.oid = e.enumtypid\nJOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\nWHERE ${filterSchema('n.nspname')}\nGROUP BY n.nspname, t.typname`,\n );\n return rows;\n }\n\n async getDomains() {\n const { rows } = await this.db.query<DbStructure.Domain>(`SELECT\n n.nspname AS \"schemaName\",\n d.typname AS \"name\",\n t.typname AS \"type\",\n s.nspname AS \"typeSchema\",\n d.typnotnull AS \"notNull\",\n d.typcategory = 'A' AS \"isArray\",\n character_maximum_length AS \"maxChars\",\n numeric_precision AS \"numericPrecision\",\n numeric_scale AS \"numericScale\",\n datetime_precision AS \"dateTimePrecision\",\n collation_name AS \"collation\",\n domain_default AS \"default\",\n pg_get_expr(conbin, conrelid) AS \"expression\"\nFROM pg_catalog.pg_type d\nJOIN pg_catalog.pg_namespace n ON n.oid = d.typnamespace\nJOIN information_schema.domains i\n ON i.domain_schema = nspname\n AND i.domain_name = d.typname\nJOIN pg_catalog.pg_type t\n ON (\n CASE WHEN d.typcategory = 'A'\n THEN t.typarray\n ELSE t.oid\n END\n ) = d.typbasetype\nJOIN pg_catalog.pg_namespace s ON s.oid = t.typnamespace\nLEFT JOIN pg_catalog.pg_constraint c ON c.contypid = d.oid\nWHERE d.typtype = 'd' AND ${filterSchema('n.nspname')}`);\n\n return rows;\n }\n}\n","import { DbStructure } from './dbStructure';\nimport { RakeDbAst } from '../ast';\nimport {\n ArrayColumn,\n ColumnFromDbParams,\n columnsByType,\n ColumnsShape,\n ColumnType,\n CustomTypeColumn,\n DomainColumn,\n EnumColumn,\n ForeignKeyAction,\n ForeignKeyMatch,\n ForeignKeyOptions,\n getConstraintKind,\n instantiateColumn,\n simplifyColumnDefault,\n TableData,\n} from 'pqb';\nimport { raw, singleQuote, toCamelCase, toSnakeCase } from 'orchid-core';\nimport { getConstraintName, getIndexName } from '../migration/migrationUtils';\n\nconst matchMap: Record<string, undefined | ForeignKeyMatch> = {\n s: undefined,\n f: 'FULL',\n p: 'PARTIAL',\n};\n\nconst fkeyActionMap: Record<string, undefined | ForeignKeyAction> = {\n a: undefined, // default\n r: 'RESTRICT',\n c: 'CASCADE',\n n: 'SET NULL',\n d: 'SET DEFAULT',\n};\n\ntype Data = {\n schemas: string[];\n tables: DbStructure.Table[];\n views: DbStructure.View[];\n constraints: DbStructure.Constraint[];\n indexes: DbStructure.Index[];\n extensions: DbStructure.Extension[];\n enums: DbStructure.Enum[];\n domains: DbStructure.Domain[];\n};\n\ntype Domains = Record<string, ColumnType>;\n\ntype PendingTables = Record<\n string,\n { table: DbStructure.Table; dependsOn: Set<string> }\n>;\n\nexport type StructureToAstCtx = {\n snakeCase?: boolean;\n unsupportedTypes: Record<string, string[]>;\n currentSchema: string;\n};\n\nexport const structureToAst = async (\n ctx: StructureToAstCtx,\n db: DbStructure,\n): Promise<RakeDbAst[]> => {\n const ast: RakeDbAst[] = [];\n\n const data = await getData(db);\n\n for (const name of data.schemas) {\n if (name === 'public') continue;\n\n ast.push({\n type: 'schema',\n action: 'create',\n name,\n });\n }\n\n const pendingTables: PendingTables = {};\n for (const table of data.tables) {\n const key = `${table.schemaName}.${table.name}`;\n const dependsOn = new Set<string>();\n\n for (const fk of data.constraints) {\n const { references } = fk;\n if (\n !references ||\n fk.schemaName !== table.schemaName ||\n fk.tableName !== table.name\n )\n continue;\n\n const otherKey = `${references.foreignSchema}.${references.foreignTable}`;\n if (otherKey !== key) {\n dependsOn.add(otherKey);\n }\n }\n\n pendingTables[key] = { table, dependsOn };\n }\n\n const domains: Domains = {};\n for (const it of data.domains) {\n domains[`${it.schemaName}.${it.name}`] = getColumn(ctx, data, domains, {\n schemaName: it.schemaName,\n name: it.name,\n type: it.type,\n typeSchema: it.typeSchema,\n isArray: it.isArray,\n isSerial: false,\n });\n }\n\n for (const key in pendingTables) {\n const { table, dependsOn } = pendingTables[key];\n if (!dependsOn.size) {\n pushTableAst(ctx, ast, data, domains, table, pendingTables);\n }\n }\n\n const outerConstraints: [DbStructure.Constraint, DbStructure.Table][] = [];\n\n for (const it of data.extensions) {\n ast.push({\n type: 'extension',\n action: 'create',\n name: it.name,\n schema: it.schemaName === ctx.currentSchema ? undefined : it.schemaName,\n version: it.version,\n });\n }\n\n for (const it of data.enums) {\n ast.push({\n type: 'enum',\n action: 'create',\n name: it.name,\n schema: it.schemaName === ctx.currentSchema ? undefined : it.schemaName,\n values: it.values,\n });\n }\n\n for (const it of data.domains) {\n ast.push({\n type: 'domain',\n action: 'create',\n schema: it.schemaName === ctx.currentSchema ? undefined : it.schemaName,\n name: it.name,\n baseType: domains[`${it.schemaName}.${it.name}`],\n notNull: it.notNull,\n collation: it.collation,\n default: simplifyColumnDefault(it.default),\n check: it.check ? raw(it.check) : undefined,\n });\n }\n\n for (const key in pendingTables) {\n const innerConstraints: DbStructure.Constraint[] = [];\n const { table } = pendingTables[key];\n\n for (const fkey of data.constraints) {\n if (fkey.schemaName !== table.schemaName || fkey.tableName !== table.name)\n continue;\n\n const otherKey =\n fkey.references &&\n `${fkey.references.foreignSchema}.${fkey.references.foreignTable}`;\n\n if (!otherKey || !pendingTables[otherKey] || otherKey === key) {\n innerConstraints.push(fkey);\n } else {\n outerConstraints.push([fkey, table]);\n }\n }\n\n pushTableAst(\n ctx,\n ast,\n data,\n domains,\n table,\n pendingTables,\n innerConstraints,\n );\n }\n\n for (const [fkey, table] of outerConstraints) {\n ast.push({\n ...constraintToAst(ctx, fkey),\n type: 'constraint',\n action: 'create',\n tableSchema:\n table.schemaName === ctx.currentSchema ? undefined : table.schemaName,\n tableName: fkey.tableName,\n });\n }\n\n for (const view of data.views) {\n ast.push(viewToAst(ctx, data, domains, view));\n }\n\n return ast;\n};\n\nconst getData = async (db: DbStructure): Promise<Data> => {\n const [\n { schemas, tables, views },\n constraints,\n indexes,\n extensions,\n enums,\n domains,\n ] = await Promise.all([\n db.getStructure(),\n db.getConstraints(),\n db.getIndexes(),\n db.getExtensions(),\n db.getEnums(),\n db.getDomains(),\n ]);\n\n return {\n schemas,\n tables,\n views,\n constraints,\n indexes,\n extensions,\n enums,\n domains,\n };\n};\n\nconst makeBelongsToTable =\n (schema: string | undefined, table: string) =>\n (item: { schemaName: string; tableName: string }) =>\n item.schemaName === schema && item.tableName === table;\n\nconst getIsSerial = (item: DbStructure.Column) => {\n if (item.type === 'int2' || item.type === 'int4' || item.type === 'int8') {\n const { default: def, schemaName, tableName, name } = item;\n const seq = `${tableName}_${name}_seq`;\n if (\n def &&\n (def === `nextval(${singleQuote(`${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".${seq}`)}::regclass)` ||\n def === `nextval(${singleQuote(`${schemaName}.\"${seq}\"`)}::regclass)` ||\n def === `nextval(${singleQuote(`\"${schemaName}\".\"${seq}\"`)}::regclass)`)\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst getColumn = (\n ctx: StructureToAstCtx,\n data: Data,\n domains: Domains,\n {\n schemaName,\n tableName,\n name,\n type,\n typeSchema,\n isArray,\n isSerial,\n ...params\n }: {\n schemaName: string;\n tableName?: string;\n name: string;\n type: string;\n typeSchema: string;\n isArray: boolean;\n isSerial: boolean;\n } & ColumnFromDbParams,\n) => {\n let column: ColumnType;\n\n const klass = columnsByType[getColumnType(type, isSerial)];\n if (klass) {\n column = instantiateColumn(klass, params);\n } else {\n const domainColumn = domains[`${typeSchema}.${type}`];\n if (domainColumn) {\n column = new DomainColumn(type).as(domainColumn);\n } else {\n const enumType = data.enums.find(\n (item) => item.name === type && item.schemaName === typeSchema,\n );\n if (enumType) {\n column = new EnumColumn(type, enumType.values);\n } else {\n column = new CustomTypeColumn(type);\n\n (ctx.unsupportedTypes[type] ??= []).push(\n `${schemaName}${tableName ? `.${tableName}` : ''}.${name}`,\n );\n }\n }\n }\n\n return isArray ? new ArrayColumn(column) : column;\n};\n\nconst getColumnType = (type: string, isSerial: boolean) => {\n if (!isSerial) return type;\n\n return type === 'int2'\n ? 'smallserial'\n : type === 'int4'\n ? 'serial'\n : 'bigserial';\n};\n\nconst pushTableAst = (\n ctx: StructureToAstCtx,\n ast: RakeDbAst[],\n data: Data,\n domains: Domains,\n table: DbStructure.Table,\n pendingTables: PendingTables,\n innerConstraints = data.constraints,\n) => {\n const { schemaName, name: tableName, columns } = table;\n\n const key = `${schemaName}.${table.name}`;\n delete pendingTables[key];\n\n if (tableName === 'schemaMigrations') return;\n\n const belongsToTable = makeBelongsToTable(schemaName, tableName);\n\n let primaryKey: { columns: string[]; name?: string } | undefined;\n for (const item of data.constraints) {\n if (belongsToTable(item) && item.primaryKey)\n primaryKey = { columns: item.primaryKey, name: item.name };\n }\n\n const tableIndexes = data.indexes.filter(belongsToTable);\n\n const tableConstraints = innerConstraints.reduce<TableData.Constraint[]>(\n (acc, item) => {\n const { references, check } = item;\n if (\n belongsToTable(item) &&\n (references || (check && !isColumnCheck(item)))\n ) {\n const constraint: TableData.Constraint = {\n references: references\n ? {\n columns: references.columns,\n fnOrTable: getReferencesTable(ctx, references),\n foreignColumns: references.foreignColumns,\n options: {\n match: matchMap[references.match],\n onUpdate: fkeyActionMap[references.onUpdate],\n onDelete: fkeyActionMap[references.onDelete],\n },\n }\n : undefined,\n check: check ? raw(check.expression) : undefined,\n };\n\n const name =\n item.name && item.name !== getConstraintName(tableName, constraint)\n ? item.name\n : undefined;\n\n if (name) {\n constraint.name = name;\n if (constraint.references?.options) {\n constraint.references.options.name = name;\n }\n }\n\n acc.push(constraint);\n }\n return acc;\n },\n [],\n );\n\n const columnChecks = innerConstraints.reduce<Record<string, string>>(\n (acc, item) => {\n if (belongsToTable(item) && isColumnCheck(item)) {\n acc[item.check.columns[0]] = item.check.expression;\n }\n return acc;\n },\n {},\n );\n\n const shape = makeColumnsShape(\n ctx,\n data,\n domains,\n tableName,\n columns,\n primaryKey,\n tableIndexes,\n tableConstraints,\n columnChecks,\n );\n\n ast.push({\n type: 'table',\n action: 'create',\n schema: schemaName === ctx.currentSchema ? undefined : schemaName,\n comment: table.comment,\n name: tableName,\n shape,\n noPrimaryKey: primaryKey ? 'error' : 'ignore',\n primaryKey:\n primaryKey && primaryKey.columns.length > 1\n ? {\n columns: primaryKey.columns,\n options:\n primaryKey.name === `${tableName}_pkey`\n ? undefined\n : { name: primaryKey.name },\n }\n : undefined,\n indexes: tableIndexes\n .filter(\n (index) =>\n index.columns.length > 1 ||\n index.columns.some((it) => 'expression' in it),\n )\n .map((index) => ({\n columns: index.columns.map((it) => ({\n ...('column' in it\n ? { column: it.column }\n : { expression: it.expression }),\n collate: it.collate,\n opclass: it.opclass,\n order: it.order,\n })),\n options: {\n name:\n index.name !== getIndexName(tableName, index.columns)\n ? index.name\n : undefined,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n nullsNotDistinct: index.nullsNotDistinct,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n },\n })),\n constraints: tableConstraints.filter(\n (it) => getConstraintKind(it) === 'constraint' || !isColumnFkey(it),\n ),\n });\n\n for (const otherKey in pendingTables) {\n const item = pendingTables[otherKey];\n if (item.dependsOn.delete(key) && item.dependsOn.size === 0) {\n pushTableAst(ctx, ast, data, domains, item.table, pendingTables);\n }\n }\n};\n\nconst constraintToAst = (\n ctx: StructureToAstCtx,\n item: DbStructure.Constraint,\n): TableData.Constraint => {\n const result: TableData.Constraint = {};\n\n const { references, check } = item;\n\n if (references) {\n const options: ForeignKeyOptions = {};\n result.references = {\n columns: references.columns,\n fnOrTable: getReferencesTable(ctx, references),\n foreignColumns: references.foreignColumns,\n options,\n };\n\n const match = matchMap[references.match];\n if (match) options.match = match;\n\n const onUpdate = fkeyActionMap[references.onUpdate];\n if (onUpdate) options.onUpdate = onUpdate;\n\n const onDelete = fkeyActionMap[references.onDelete];\n if (onDelete) options.onDelete = onDelete;\n }\n\n if (check) {\n result.check = raw(check.expression);\n }\n\n if (item.name && item.name !== getConstraintName(item.tableName, result)) {\n result.name = item.name;\n if (result.references?.options) {\n result.references.options.name = item.name;\n }\n }\n\n return result;\n};\n\nconst getReferencesTable = (\n ctx: StructureToAstCtx,\n references: DbStructure.References,\n) => {\n return references.foreignSchema !== ctx.currentSchema\n ? `${references.foreignSchema}.${references.foreignTable}`\n : references.foreignTable;\n};\n\nconst isColumnCheck = (\n it: DbStructure.Constraint,\n): it is DbStructure.Constraint & {\n check: DbStructure.Check & { columns: string[] };\n} => {\n return !it.references && it.check?.columns?.length === 1;\n};\n\nconst isColumnFkey = (\n it: TableData.Constraint,\n): it is TableData.Constraint & { references: TableData.References } => {\n return !it.check && it.references?.columns.length === 1;\n};\n\nconst viewToAst = (\n ctx: StructureToAstCtx,\n data: Data,\n domains: Domains,\n view: DbStructure.View,\n): RakeDbAst.View => {\n const shape = makeColumnsShape(ctx, data, domains, view.name, view.columns);\n\n const options: RakeDbAst.ViewOptions = {};\n if (view.isRecursive) options.recursive = true;\n\n if (view.with) {\n const withOptions: Record<string, unknown> = {};\n options.with = withOptions;\n for (const pair of view.with) {\n const [key, value] = pair.split('=');\n withOptions[toCamelCase(key) as 'checkOption'] =\n value === 'true' ? true : value === 'false' ? false : value;\n }\n }\n\n return {\n type: 'view',\n action: 'create',\n schema: view.schemaName === ctx.currentSchema ? undefined : view.schemaName,\n name: view.name,\n shape,\n sql: raw(view.sql),\n options,\n };\n};\n\nconst makeColumnsShape = (\n ctx: StructureToAstCtx,\n data: Data,\n domains: Domains,\n tableName: string,\n columns: DbStructure.Column[],\n primaryKey?: { columns: string[]; name?: string },\n indexes?: DbStructure.Index[],\n constraints?: TableData.Constraint[],\n checks?: Record<string, string>,\n): ColumnsShape => {\n const shape: ColumnsShape = {};\n\n for (let item of columns) {\n const isSerial = getIsSerial(item);\n if (isSerial) {\n item = { ...item, default: undefined };\n }\n\n let column = getColumn(ctx, data, domains, {\n ...item,\n type: item.type,\n isArray: item.isArray,\n isSerial,\n });\n\n if (item.identity) {\n column.data.identity = item.identity;\n if (!item.identity.always) delete column.data.identity?.always;\n }\n\n if (\n primaryKey?.columns?.length === 1 &&\n primaryKey?.columns[0] === item.name\n ) {\n column = column.primaryKey();\n }\n\n if (indexes) {\n const columnIndexes = indexes.filter(\n (it) =>\n it.columns.length === 1 &&\n 'column' in it.columns[0] &&\n it.columns[0].column === item.name,\n );\n for (const index of columnIndexes) {\n const options = index.columns[0];\n column = column.index({\n collate: options.collate,\n opclass: options.opclass,\n order: options.order,\n name:\n index.name !== getIndexName(tableName, index.columns)\n ? index.name\n : undefined,\n using: index.using === 'btree' ? undefined : index.using,\n unique: index.isUnique,\n include: index.include,\n nullsNotDistinct: index.nullsNotDistinct,\n with: index.with,\n tablespace: index.tablespace,\n where: index.where,\n });\n }\n }\n\n if (constraints) {\n for (const it of constraints) {\n if (!isColumnFkey(it) || it.references.columns[0] !== item.name)\n continue;\n\n column = column.foreignKey(\n it.references.fnOrTable as string,\n it.references.foreignColumns[0],\n it.references.options,\n );\n }\n }\n\n const check = checks?.[item.name];\n if (check) {\n column.data.check = raw(check);\n }\n\n const camelCaseName = toCamelCase(item.name);\n\n if (ctx.snakeCase) {\n const snakeCaseName = toSnakeCase(camelCaseName);\n\n if (snakeCaseName !== item.name) column.data.name = item.name;\n } else if (camelCaseName !== item.name) {\n column.data.name = item.name;\n }\n\n shape[camelCaseName] = column;\n }\n\n return shape;\n};\n","import { RakeDbAst } from '../ast';\nimport {\n ColumnType,\n referencesArgsToCode,\n constraintToCode,\n indexToCode,\n primaryKeyToCode,\n getConstraintKind,\n constraintPropsToCode,\n TimestampTZColumn,\n TimestampColumn,\n} from 'pqb';\nimport {\n addCode,\n backtickQuote,\n Code,\n codeToString,\n ColumnTypesBase,\n isRaw,\n quoteObjectKey,\n rawToCode,\n singleQuote,\n} from 'orchid-core';\nimport { quoteSchemaTable, RakeDbConfig } from '../common';\n\nexport const astToMigration = <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n ast: RakeDbAst[],\n): ((importPath: string) => string) | undefined => {\n const first: Code[] = [];\n const tablesAndViews: Code[] = [];\n const constraints: Code[] = [];\n for (const item of ast) {\n if (item.type === 'schema' && item.action === 'create') {\n first.push(createSchema(item));\n } else if (item.type === 'extension' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createExtension(item));\n } else if (item.type === 'enum' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(createEnum(item));\n } else if (item.type === 'domain' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createDomain(item));\n } else if (item.type === 'table' && item.action === 'create') {\n tablesAndViews.push(createTable(config, item));\n } else if (item.type === 'view' && item.action === 'create') {\n tablesAndViews.push(createView(item));\n } else if (item.type === 'constraint') {\n if (constraints.length) constraints.push([]);\n constraints.push(...createConstraint(item));\n }\n }\n\n if (!first.length && !tablesAndViews.length && !constraints.length) return;\n\n let code = '';\n\n if (first.length) {\n code += `\nchange(async (db) => {\n${codeToString(first, ' ', ' ')}\n});\n`;\n }\n\n if (tablesAndViews.length) {\n for (const table of tablesAndViews) {\n code += `\nchange(async (db) => {\n${codeToString(table, ' ', ' ')}\n});\n`;\n }\n }\n\n if (constraints.length) {\n code += `\nchange(async (db) => {\n${codeToString(constraints, ' ', ' ')}\n});\n`;\n }\n\n return (importPath) => `import { change } from '${importPath}';\\n${code}`;\n};\n\nconst createSchema = (ast: RakeDbAst.Schema) => {\n return `await db.createSchema(${singleQuote(ast.name)});`;\n};\n\nconst createExtension = (ast: RakeDbAst.Extension): Code[] => {\n const code: Code[] = [`await db.createExtension(${singleQuote(ast.name)}`];\n if (ast.schema || ast.version) {\n addCode(code, ', {');\n if (ast.schema) {\n code.push([`schema: ${singleQuote(ast.schema)},`]);\n }\n if (ast.version) {\n code.push([`version: ${singleQuote(ast.version)},`]);\n }\n addCode(code, '}');\n }\n addCode(code, ');');\n return code;\n};\n\nconst createEnum = (ast: RakeDbAst.Enum) => {\n return `await db.createEnum(${quoteSchemaTable(ast)}, [${ast.values\n .map(singleQuote)\n .join(', ')}]);`;\n};\n\nconst createDomain = (ast: RakeDbAst.Domain) => {\n const code: Code[] = [\n `await db.createDomain(${quoteSchemaTable(\n ast,\n )}, (t) => ${ast.baseType.toCode('t')}`,\n ];\n\n if (ast.notNull || ast.collation || ast.default || ast.check) {\n const props: Code[] = [];\n if (ast.notNull) props.push(`notNull: true,`);\n if (ast.collation) props.push(`collation: ${singleQuote(ast.collation)},`);\n if (ast.default) props.push(`default: ${rawToCode('db', ast.default)},`);\n if (ast.check) props.push(`check: ${rawToCode('db', ast.check)},`);\n\n addCode(code, ', {');\n code.push(props);\n addCode(code, '}');\n }\n\n addCode(code, ');');\n return code;\n};\n\nconst createTable = <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n ast: RakeDbAst.Table,\n) => {\n const code: Code[] = [];\n addCode(code, `await db.createTable(${quoteSchemaTable(ast)}, (t) => ({`);\n\n const timestamps = getTimestampsInfo(config, ast, TimestampTZColumn);\n const timestampsNoTZ = getTimestampsInfo(config, ast, TimestampTZColumn);\n const hasAnyTimestamps =\n timestamps.hasTimestamps || timestampsNoTZ.hasTimestamps;\n const hasAnyCamelCaseTimestamps =\n timestamps.camelCaseTimestamps || timestampsNoTZ.camelCaseTimestamps;\n\n for (const key in ast.shape) {\n if (hasAnyTimestamps && (key === 'createdAt' || key === 'updatedAt'))\n continue;\n\n const line: Code[] = [`${quoteObjectKey(key)}: `];\n for (const part of ast.shape[key].toCode('t', true)) {\n addCode(line, part);\n }\n addCode(line, ',');\n code.push(line);\n }\n\n if (hasAnyTimestamps) {\n const key = timestamps.hasTimestamps ? 'timestamps' : 'timestampsNoTZ';\n\n code.push([\n `...t.${\n hasAnyCamelCaseTimestamps || config.snakeCase ? key : `${key}SnakeCase`\n }(),`,\n ]);\n }\n\n if (ast.primaryKey) {\n code.push([primaryKeyToCode(ast.primaryKey, 't')]);\n }\n\n if (ast.indexes) {\n for (const index of ast.indexes) {\n code.push(indexToCode(index, 't'));\n }\n }\n\n if (ast.constraints) {\n for (const constraint of ast.constraints) {\n code.push(constraintToCode(constraint, 't'));\n }\n }\n\n addCode(code, '}));');\n\n return code;\n};\n\nconst isTimestamp = (\n column: ColumnType | undefined,\n type: typeof TimestampTZColumn<number> | typeof TimestampColumn<number>,\n) => {\n if (!column) return false;\n\n const { default: def } = column.data;\n return (\n column instanceof type &&\n !column.data.isNullable &&\n def &&\n typeof def === 'object' &&\n isRaw(def) &&\n def.__raw === 'now()'\n );\n};\n\nconst getTimestampsInfo = <CT extends ColumnTypesBase>(\n config: RakeDbConfig<CT>,\n ast: RakeDbAst.Table,\n type: typeof TimestampTZColumn<number> | typeof TimestampColumn<number>,\n) => {\n let hasTimestamps =\n isTimestamp(ast.shape.createdAt, type) &&\n isTimestamp(ast.shape.updatedAt, type);\n\n const camelCaseTimestamps =\n !config.snakeCase &&\n hasTimestamps &&\n !ast.shape.createdAt?.data.name &&\n !ast.shape.updatedAt?.data.name;\n\n const snakeCaseTimestamps =\n hasTimestamps &&\n !camelCaseTimestamps &&\n ((!config.snakeCase &&\n ast.shape.createdAt?.data.name === 'created_at' &&\n ast.shape.updatedAt?.data.name === 'updated_at') ||\n (config.snakeCase &&\n !ast.shape.createdAt?.data.name &&\n !ast.shape.updatedAt?.data.name));\n\n if (!camelCaseTimestamps && !snakeCaseTimestamps) {\n hasTimestamps = false;\n }\n\n return {\n hasTimestamps,\n camelCaseTimestamps,\n snakeCaseTimestamps,\n };\n};\n\nconst createConstraint = (item: RakeDbAst.Constraint): Code => {\n const kind = getConstraintKind(item);\n const table = quoteSchemaTable({\n schema: item.tableSchema,\n name: item.tableName,\n });\n\n if (kind === 'foreignKey' && item.references) {\n return [\n `await db.addForeignKey(`,\n [`${table},`, ...referencesArgsToCode(item.references, item.name)],\n ');',\n ];\n }\n\n if (kind === 'check' && item.check) {\n return [`await db.addCheck(${table}, ${rawToCode('t', item.check)});`];\n }\n\n return [\n `await db.addConstraint(${table}, {`,\n constraintPropsToCode('t', item),\n '});',\n ];\n};\n\nconst createView = (ast: RakeDbAst.View) => {\n const code: Code[] = [`await db.createView(${quoteSchemaTable(ast)}`];\n\n const options: Code[] = [];\n if (ast.options.recursive) options.push('recursive: true,');\n\n const w = ast.options.with;\n if (w?.checkOption) options.push(`checkOption: '${w.checkOption}',`);\n if (w?.securityBarrier)\n options.push(`securityBarrier: ${w.securityBarrier},`);\n if (w?.securityInvoker)\n options.push(`securityInvoker: ${w.securityInvoker},`);\n\n if (options.length) {\n addCode(code, ', {');\n code.push(options, '}');\n }\n\n addCode(code, ', ');\n\n if (!ast.sql.__values) {\n addCode(code, backtickQuote(ast.sql.__raw));\n } else {\n addCode(code, rawToCode('db', ast.sql));\n }\n\n addCode(code, ');');\n return code;\n};\n","import { RakeDbConfig } from '../common';\nimport { Adapter, AdapterOptions } from 'pqb';\nimport { DbStructure } from './dbStructure';\nimport { structureToAst, StructureToAstCtx } from './structureToAst';\nimport { astToMigration } from './astToMigration';\nimport { makeFileTimeStamp, writeMigrationFile } from '../commands/generate';\nimport { saveMigratedVersion } from '../migration/manageMigratedVersions';\nimport { ColumnTypesBase } from 'orchid-core';\n\nexport const pullDbStructure = async <CT extends ColumnTypesBase>(\n options: AdapterOptions,\n config: RakeDbConfig<CT>,\n): Promise<void> => {\n const adapter = new Adapter(options);\n const currentSchema = adapter.schema || 'public';\n const db = new DbStructure(adapter);\n\n const ctx: StructureToAstCtx = {\n unsupportedTypes: {},\n snakeCase: config.snakeCase,\n currentSchema,\n };\n\n const ast = await structureToAst(ctx, db);\n await adapter.close();\n\n const result = astToMigration(config, ast);\n if (!result) return;\n\n const version = makeFileTimeStamp();\n await writeMigrationFile(config, version, 'pull', result);\n\n const silentQueries = Object.assign(adapter, {\n silentQuery: adapter.query,\n silentArrays: adapter.arrays,\n });\n await saveMigratedVersion(silentQueries, version, config);\n\n const cache = {};\n for (const item of ast) {\n await config?.appCodeUpdater?.process({\n ast: item,\n options,\n basePath: config.basePath,\n cache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n }\n\n await config?.appCodeUpdater?.afterAll({\n options,\n basePath: config.basePath,\n cache,\n logger: config.logger,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n baseTable: config.baseTable!,\n });\n\n const unsupportedEntries = Object.entries(ctx.unsupportedTypes);\n const len = unsupportedEntries.length;\n if (len) {\n let count = 0;\n config.logger?.warn(\n `Found unsupported types:\\n${unsupportedEntries\n .map(([type, columns]) => {\n count += columns.length;\n return `- ${type} is used for column${\n columns.length > 1 ? 's' : ''\n } ${columns.join(', ')}`;\n })\n .join('\\n')}\\nAppend \\`as\\` method manually to ${\n count > 1 ? 'these' : 'this'\n } column${count > 1 ? 's' : ''} to treat ${\n count > 1 ? 'them' : 'it'\n } as other column type`,\n );\n }\n\n config.logger?.log('Database pulled successfully');\n adapter.close();\n};\n","import { ColumnTypesBase, MaybeArray, toArray } from 'orchid-core';\nimport { Adapter, AdapterOptions, createDb, DbResult } from 'pqb';\nimport { RakeDbConfig } from '../common';\nimport { join } from 'path';\nimport { readdir, stat, readFile } from 'fs/promises';\n\nexport const runRecurrentMigrations = async <CT extends ColumnTypesBase>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n): Promise<void> => {\n let dbs: DbResult<ColumnTypesBase>[] | undefined;\n let files = 0;\n\n await readdirRecursive(config.recurrentPath, async (path) => {\n files++;\n\n // init dbs lazily\n dbs ??= toArray(options).map((opts) =>\n createDb({ adapter: new Adapter(opts) }),\n );\n\n const sql = await readFile(path, 'utf-8');\n await Promise.all(\n dbs.map(async (db) => {\n await db.adapter.arrays(sql);\n }),\n );\n });\n\n if (dbs) {\n await Promise.all(dbs.map((db) => db.close()));\n\n if (files > 0) {\n config.logger?.log(\n `Applied ${files} recurrent migration file${files > 1 ? 's' : ''}`,\n );\n }\n }\n};\n\nconst readdirRecursive = async (\n dirPath: string,\n cb: (path: string) => Promise<void>,\n) => {\n const list = await readdir(dirPath).catch((err) => {\n if (err.code !== 'ENOENT') throw err;\n return;\n });\n\n if (!list) return;\n\n await Promise.all(\n list.map(async (item) => {\n const path = join(dirPath, item);\n const info = await stat(path);\n if (info.isDirectory()) {\n await readdirRecursive(path, cb);\n } else if (info.isFile() && path.endsWith('.sql')) {\n await cb(path);\n }\n }),\n );\n};\n","import { AdapterOptions, DefaultColumnTypes } from 'pqb';\nimport { ColumnTypesBase, MaybeArray, toArray } from 'orchid-core';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, redo, rollback } from './commands/migrateOrRollback';\nimport { InputRakeDbConfig, processRakeDbConfig, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\nimport { pullDbStructure } from './pull/pull';\nimport { RakeDbError } from './errors';\nimport { ChangeCallback, pushChange } from './migration/change';\nimport { runRecurrentMigrations } from './commands/recurrent';\n\nexport const rakeDb = <CT extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n partialConfig: InputRakeDbConfig<CT> = {},\n args: string[] = process.argv.slice(2),\n): ((fn: ChangeCallback<CT>) => void) & { promise: Promise<void> } => {\n const config = processRakeDbConfig(partialConfig);\n const promise = runCommand(options, config, args);\n\n return Object.assign(\n (fn: ChangeCallback<CT>) => {\n pushChange(fn as unknown as ChangeCallback);\n },\n {\n promise,\n },\n );\n};\n\nconst runCommand = async <CT extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<CT>,\n args: string[] = process.argv.slice(2),\n): Promise<void> => {\n const arg = args[0]?.split(':')[0];\n\n try {\n if (arg === 'create') {\n await createDb(options, config);\n } else if (arg === 'drop') {\n await dropDb(options, config);\n } else if (arg === 'reset') {\n await resetDb(options, config);\n } else if (arg === 'up' || arg === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (arg === 'down' || arg === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (arg === 'redo') {\n await redo(options, config, args.slice(1));\n } else if (arg === 'new') {\n await generate(config, args.slice(1));\n } else if (arg === 'pull') {\n await pullDbStructure(toArray(options)[0], config);\n } else if (config.commands[arg]) {\n await config.commands[arg](toArray(options), config, args.slice(1));\n } else if (arg !== 'rec' && arg !== 'recurrent') {\n config.logger?.log(help);\n }\n\n if (\n arg === 'migrate' ||\n arg === 'rec' ||\n arg === 'recurrent' ||\n arg === 'redo'\n ) {\n await runRecurrentMigrations(options, config);\n }\n } catch (err) {\n if (err instanceof RakeDbError) {\n config.logger?.error(err.message);\n process.exit(1);\n }\n throw err;\n }\n};\n\nconst help = `Usage: rake-db [command] [arguments]\n\nSee documentation at:\nhttps://orchid-orm.netlify.app/guide/migration-commands.html\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n new create new migration file, see below\n migrate migrate pending migrations, run recurrent\n up migrate pending migrations, don't run recurrent\n rollback or down rollback the last migrated\n redo rollback and migrate, run recurrent\n rec or recurrent run recurrent migrations\n no or unknown command prints this message\n \nMigrate arguments:\n no arguments run all pending migrations\n number run specific number of pending migrations\n\nRollback arguments:\n no arguments rollback one last applied migration\n number rollback specific number of applied migrations\n all rollback all applied migrations\n\nMigrate and rollback common arguments:\n --code run code updater, overrides \\`useCodeUpdater\\` option\n --code false do not run code updater\n`;\n"],"names":["path","__spreadValues","getCallerFilePath","defaultColumnTypes","__spreadProps","readdir","singleQuote","toSnakeCase","quote","isRaw","getRaw","toArray","EnumColumn","createTable","snakeCaseKey","getColumnTypes","getTableData","makeAst","astToQueries","__objRest","ColumnType","emptyObject","resetTableData","consumeColumnName","UnknownColumn","add","columnTypes","changeTableData","deepCompare","createView","raw","TransactionAdapter","logParamToLogObject","createDb","createSchema","createExtension","createEnum","createDomain","Adapter","pathToLog","emptyArray","url","db","mkdir","getImportPath","writeFile","sql","simplifyColumnDefault","_a","_b","columnsByType","instantiateColumn","DomainColumn","CustomTypeColumn","ArrayColumn","getConstraintKind","toCamelCase","codeToString","addCode","rawToCode","TimestampTZColumn","quoteObjectKey","primaryKeyToCode","indexToCode","constraintToCode","referencesArgsToCode","constraintPropsToCode","backtickQuote","readFile","join","stat"],"mappings":"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"}