rake-db 2.10.64 → 2.10.66
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 +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
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, getStackTrace, 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';\nimport { pathToFileURL, fileURLToPath } from 'node:url';\n\ntype Db = DbResult<DefaultColumnTypes>;\n\ntype BaseTable<CT extends ColumnTypesBase> = {\n exportAs: string;\n getFilePath(): string;\n nowSQL?: string;\n\n new (): {\n types: CT;\n snakeCase?: boolean;\n language?: string;\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 migrations?: ModuleExportsRecord;\n recurrentPath: string;\n migrationsTable: string;\n snakeCase: boolean;\n language?: string;\n commands: Record<\n string,\n (\n options: AdapterOptions[],\n config: RakeDbConfig<CT>,\n args: string[],\n ) => void | Promise<void>\n >;\n noPrimaryKey?: NoPrimaryKeyOption;\n baseTable?: BaseTable<CT>;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n // throw if a migration doesn't have a default export\n forceDefaultExports?: boolean;\n import(path: string): Promise<unknown>;\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 ModuleExportsRecord = Record<string, () => Promise<unknown>>;\n\nexport type AppCodeUpdaterParams = {\n options: AdapterOptions;\n basePath: string;\n cache: object;\n logger: QueryLogOptions['logger'];\n baseTable: { getFilePath(): string; exportAs: string };\n import(path: string): Promise<unknown>;\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\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 // 0 is getStackTrace file, 1 is this function, 2 is a caller in rakeDb.ts, 3 is the user db script file.\n // bundlers can bundle all files into a single file, or change file structure, so this must rely only on the caller index.\n let filePath = getStackTrace()?.[3].getFileName();\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 if (filePath.startsWith('file://')) {\n filePath = fileURLToPath(filePath);\n }\n\n const ext = path.extname(filePath);\n if (ext !== '.ts' && ext !== '.js' && ext !== '.mjs') {\n throw new Error(\n `Add a .ts suffix to the \"${path.basename(filePath)}\" when calling it`,\n );\n }\n\n result.basePath = path.dirname(filePath);\n result.dbScript = path.basename(filePath);\n }\n\n if ('migrationsPath' in result && !path.isAbsolute(result.migrationsPath)) {\n result.migrationsPath = path.resolve(\n result.basePath,\n result.migrationsPath,\n );\n }\n\n if ('recurrentPath' in result && !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.types || defaultColumnTypes;\n if (proto.snakeCase) result.snakeCase = true;\n if (proto.language) result.language = proto.language;\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 const { schema } = db;\n if (schema && schema !== 'public') {\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 throw err;\n }\n }\n }\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 MigrationItem = {\n path: string;\n version: string;\n /**\n * Function that loads the migration content,\n * can store lazy import of a migration file.\n * Promise can return `{ default: x }` where `x` is a return of `change` or an array of such returns.\n */\n load(): Promise<unknown>;\n};\n\n// If the config has a `migrations` object, it will be returned as array of migration items.\n// If `up` is false, will reverse the resulting array.\n// Otherwise, it will scan directory which is set in `migrationPath` and convert files into migration items.\n// `up` value determines sorting of files: `true` for ascending, `false` for descending.\nexport const getMigrations = async (\n {\n migrations,\n ...config\n }: Pick<\n RakeDbConfig,\n 'basePath' | 'migrations' | 'migrationsPath' | 'import'\n >,\n up: boolean,\n): Promise<MigrationItem[]> => {\n return migrations\n ? getMigrationsFromConfig({ ...config, migrations }, up)\n : getMigrationsFromFiles(config, up);\n};\n\n// Converts user-provided migrations object into array of migration items.\nfunction getMigrationsFromConfig(\n config: { basePath: string; migrations: ModuleExportsRecord },\n up: boolean,\n): MigrationItem[] {\n const result: MigrationItem[] = [];\n\n const { migrations, basePath } = config;\n for (const key in migrations) {\n result.push({\n path: path.resolve(basePath, key),\n version: getVersion(path.basename(key)),\n load: migrations[key],\n });\n }\n\n if (!up) result.reverse();\n\n return result;\n}\n\n// Scans files under `migrationsPath` to convert files into migration items.\nasync function getMigrationsFromFiles(\n config: Pick<RakeDbConfig, 'migrationsPath' | 'import'>,\n up: boolean,\n): Promise<MigrationItem[]> {\n const { migrationsPath, import: imp } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n files = files.filter((file) => path.basename(file).includes('.'));\n files = (up ? sortAsc : sortDesc)(files);\n\n return files.map((file) => {\n checkExt(file);\n\n const filePath = path.resolve(migrationsPath, file);\n return {\n path: filePath,\n version: getVersion(file),\n async load() {\n try {\n await imp(filePath);\n } catch (err) {\n // throw if unknown error\n if (\n (err as { code: string }).code !== 'ERR_UNSUPPORTED_ESM_URL_SCHEME'\n )\n throw err;\n\n // this error happens on windows in ESM mode, try import transformed url\n await imp(pathToFileURL(filePath).pathname);\n }\n },\n };\n });\n}\n\n// Restrict supported file extensions to `.ts`, `.js`, and `.mjs`.\nfunction checkExt(filePath: string): void {\n const ext = path.extname(filePath);\n if (ext !== '.ts' && ext !== '.js' && ext !== '.mjs') {\n throw new Error(\n `Only .ts, .js, and .mjs files are supported for migration, received: ${path}`,\n );\n }\n}\n\n// Extract a 14-chars long timestamp from a beginning of a file name.\nfunction getVersion(path: string): string {\n const timestampMatch = path.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${path}`,\n );\n }\n\n return timestampMatch[1];\n}\n\n// Just a default ascending sort.\nexport const sortAsc = (arr: string[]) => arr.sort();\n\n// Reverse sort order, higher goes first.\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\n// Join array of strings into a camelCased string.\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 quoteNameFromString = (string: string) => {\n const [schema, name] = getSchemaAndTableFromName(string);\n return quoteWithSchema({ schema, 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 { DbMigration } from './migration';\nimport { ColumnTypesBase } from 'orchid-core';\n\nlet currentChanges: ChangeCallback[] = [];\n\nexport type ChangeCallback<CT extends ColumnTypesBase = ColumnTypesBase> = (\n db: DbMigration<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, quote, TableData } from 'pqb';\nimport {\n ColumnTypeBase,\n ForeignKeyTable,\n isRawSQL,\n RawSQLBase,\n Sql,\n toArray,\n toSnakeCase,\n} from 'orchid-core';\nimport { ColumnComment } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinColumns,\n quoteNameFromString,\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 ${quoteNameFromString(item.data.collate)}`);\n }\n\n if (item.data.identity) {\n line.push(identityToSql(item.data.identity));\n } else if (item.data.generated) {\n line.push(\n `GENERATED ALWAYS AS (${item.data.generated.toSQL({ values })}) STORED`,\n );\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 const def = encodeColumnDefault(item.data.default, values, item);\n if (def !== null) line.push(`DEFAULT ${def}`);\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 encodeColumnDefault = (\n def: unknown,\n values: unknown[],\n column?: ColumnTypeBase,\n) => {\n if (def !== undefined && def !== null && typeof def !== 'function') {\n if (isRawSQL(def)) {\n return def.toSQL({ values });\n } else {\n return quote(column?.encodeFn ? column.encodeFn(def) : def);\n }\n }\n\n return null;\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: RawSQLBase, values: unknown[]) => {\n return `CHECK (${check.toSQL({ 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 language?: string,\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 const using = options.using || (options.tsVector && 'GIN');\n if (using) {\n sql.push(`USING ${using}`);\n }\n\n const columnsSql: string[] = [];\n\n const lang =\n options.tsVector && options.languageColumn\n ? `\"${options.languageColumn}\"`\n : options.language\n ? typeof options.language === 'string'\n ? `'${options.language}'`\n : options.language.toSQL({ values })\n : `'${language || 'english'}'`;\n\n let hasWeight =\n options.tsVector && columns.some((column) => !!column.weight);\n\n for (const column of columns) {\n const columnSql: string[] = [\n 'column' in column ? `\"${column.column}\"` : `(${column.expression})`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE ${quoteNameFromString(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 let sql = columnSql.join(' ');\n\n if (hasWeight) {\n sql = `to_tsvector(${lang}, coalesce(${sql}, ''))`;\n\n if (column.weight) {\n hasWeight = true;\n sql = `setweight(${sql}, '${column.weight}')`;\n }\n }\n\n columnsSql.push(sql);\n }\n\n let columnList = columnsSql.join(hasWeight ? ' || ' : ', ');\n\n if (!hasWeight && options.tsVector) {\n if (columnsSql.length > 1) columnList = `concat_ws(' ', ${columnList})`;\n columnList = `to_tsvector(${lang}, ${columnList})`;\n }\n\n sql.push(`(${columnList})`);\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 isRawSQL(options.where)\n ? options.where.toSQL({ 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 DbMigration,\n Migration,\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, emptyObject, 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: Migration<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 const language =\n 'language' in options ? options.language : migration.options.language;\n\n const types = Object.assign(\n Object.create(migration.columnTypes),\n tableMethods,\n );\n types[snakeCaseKey] = snakeCase;\n\n const shape = !fn\n ? emptyObject\n : getColumnTypes(types, fn, migration.options.baseTable?.nowSQL, language);\n\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 fn && validatePrimaryKey(ast);\n\n const queries = astToQueries(ast, snakeCase, language);\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 DbMigration)(\n tableName,\n shape,\n {\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : undefined,\n snakeCase: options.snakeCase,\n },\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 language?: string,\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${\n ast.dropIfExists ? ' IF EXISTS' : ''\n } ${quoteWithSchema(ast)}${ast.dropMode ? ` ${ast.dropMode}` : ''}`,\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${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } ${quoteWithSchema(ast)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast, indexes, language),\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 EnumColumn,\n UnknownColumn,\n columnTypes,\n} from 'pqb';\nimport {\n EmptyObject,\n emptyObject,\n ColumnTypesBase,\n snakeCaseKey,\n toSnakeCase,\n deepCompare,\n consumeColumnName,\n RawSQLBase,\n setDefaultLanguage,\n ColumnTypeBase,\n} from 'orchid-core';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteNameFromString,\n quoteWithSchema,\n} from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n encodeColumnDefault,\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?: RawSQLBase;\n usingDown?: RawSQLBase;\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 | RawSQLBase): 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: Migration<CT>,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n): Promise<void> => {\n const snakeCase =\n 'snakeCase' in options ? options.snakeCase : migration.options.snakeCase;\n const language =\n 'language' in options ? options.language : migration.options.language;\n\n setDefaultLanguage(language);\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(migration.columnTypes) as TableChanger<CT>;\n Object.assign(tableChanger, tableChangeMethods);\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, language);\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 let item = changeData[key];\n if (item instanceof ColumnTypeBase) {\n item = add(item);\n }\n\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 language?: string,\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\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 let changeType = false;\n if (to.type && (from.type !== to.type || from.collate !== to.collate)) {\n changeType = true;\n\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 ${quoteNameFromString(to.collate)}` : ''\n }${item.using ? ` USING ${item.using.toSQL({ 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 = encodeColumnDefault(to.default, values, to.column);\n\n // when changing type, need to first drop an existing default before setting a new one\n if (changeType && value !== null) {\n alterTable.push(`ALTER COLUMN \"${name}\" DROP DEFAULT`);\n }\n\n const expr = value === null ? '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 (${to.check.toSQL({\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, language));\n queries.push(...indexesToQuery(true, ast, addIndexes, language));\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 { Migration } from './migration';\nimport { ColumnTypesBase, RawSQLBase, singleQuote, Sql } from 'orchid-core';\nimport { RakeDbAst } from '../ast';\nimport { raw } from 'pqb';\n\nexport const createView = async <CT extends ColumnTypesBase>(\n migration: Migration<CT>,\n up: boolean,\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawSQLBase,\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 | RawSQLBase,\n): RakeDbAst.View => {\n if (typeof sql === 'string') {\n sql = raw({ 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 (${ast.sql.toSQL({ 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 Adapter,\n DefaultColumnTypes,\n raw,\n} from 'pqb';\nimport {\n ColumnTypesBase,\n emptyObject,\n MaybeArray,\n QueryInput,\n RawSQLBase,\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 quoteNameFromString,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { columnTypeToSql } from './migrationUtils';\nimport { createView } from './createView';\n\n// Drop mode to use when dropping various database entities.\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\n// Options for creating a table.\nexport type TableOptions = {\n // create the table only if it not exists already\n createIfNotExists?: boolean;\n // drop the table only if it exists\n dropIfExists?: boolean;\n // Drop mode to use when dropping the table.\n dropMode?: DropMode;\n // Create a table with a database comment on it.\n comment?: string;\n // Ignore the absence of a primary key. Will throw otherwise.\n noPrimaryKey?: boolean;\n // Translate columns name into snake case\n snakeCase?: boolean;\n language?: string;\n};\n\n// Simplified text column type that doesn't require `min` and `max` arguments.\ntype TextColumnCreator = () => TextColumn;\n\n// Overridden column types to simplify and adapt some column types for a migration.\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\n// Create table callback\nexport type ColumnsShapeCallback<\n CT extends ColumnTypesBase,\n Shape extends ColumnsShape = ColumnsShape,\n> = (t: MigrationColumnTypes<CT> & { raw: typeof raw }) => Shape;\n\n// Options for changing a table\nexport type ChangeTableOptions = {\n snakeCase?: boolean;\n language?: string;\n comment?: string | [string, string] | null;\n};\n\n// Callback for a table change\nexport type ChangeTableCallback<CT extends ColumnTypesBase> = (\n t: TableChanger<CT>,\n) => TableChangeData;\n\n// DTO for column comments\nexport type ColumnComment = { column: string; comment: string | null };\n\n// Database adapter methods to perform queries without logging\nexport type SilentQueries = {\n // Query without logging\n silentQuery: Adapter['query'];\n // Query arrays without logging\n silentArrays: Adapter['arrays'];\n};\n\n// Combined queryable database instance and a migration interface\nexport type DbMigration<CT extends ColumnTypesBase = DefaultColumnTypes> =\n DbResult<CT> &\n Migration<CT> & {\n // Add `SilentQueries` to an existing `adapter` type in the `DbResult`\n adapter: SilentQueries;\n };\n\n// Constraint config, it can be a foreign key or a check\ntype ConstraintArg = {\n // Name of the constraint\n name?: string;\n // Foreign key options\n references?: [\n columns: [string, ...string[]],\n table: string,\n foreignColumn: [string, ...string[]],\n options: Omit<ForeignKeyOptions, 'name' | 'dropMode'>,\n ];\n // Database check raw SQL\n check?: RawSQLBase;\n // Drop mode to use when dropping the constraint\n dropMode?: DropMode;\n};\n\n/**\n * Creates a new `db` instance that is an instance of `pqb` with mixed in migration methods from the `Migration` class.\n * It overrides `query` and `array` db adapter methods to intercept SQL for the logging.\n *\n * @param tx - database adapter that executes inside a transaction\n * @param up - migrate or rollback\n * @param config - config of `rakeDb`\n */\nexport const createMigrationInterface = <CT extends ColumnTypesBase>(\n tx: TransactionAdapter,\n up: boolean,\n config: RakeDbConfig<CT>,\n): DbMigration<CT> => {\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 DbMigration;\n\n const { prototype: proto } = Migration;\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 }) as unknown as DbMigration<CT>;\n};\n\n// Migration interface to use inside the `change` callback.\nexport class Migration<CT extends ColumnTypesBase> {\n // Database adapter to perform queries with.\n public adapter!: TransactionAdapter;\n // The logger config.\n public log?: QueryLogObject;\n // Is migrating or rolling back.\n public up!: boolean;\n // `rakeDb` config.\n public options!: RakeDbConfig;\n // Collect objects that represents what was changed by a migration to pass it later to the `appCodeUpdater`.\n public migratedAsts!: RakeDbAst[];\n // Available column types that may be customized by a user.\n // They are pulled from a `baseTable` or a `columnTypes` option of the `rakeDb` config.\n public columnTypes!: CT;\n\n /**\n * `createTable` accepts a string for a table name, optional options, and a callback to specify columns.\n *\n * `dropTable` accepts the same arguments, it will drop the table when migrating and create a table when rolling back.\n *\n * To create an empty table, the callback with columns may be omitted.\n *\n * When creating a table within a specific schema, write the table name with schema name: `'schemaName.tableName'`.\n *\n * Returns object `{ table: TableInterface }` that allows to insert records right after creating a table.\n *\n * Options are:\n *\n * ```ts\n * type TableOptions = {\n * // create the table only if it not exists already\n * createIfNotExists?: boolean;\n *\n * // drop the table only if it exists\n * dropIfExists?: boolean;\n *\n * // used when reverting a `createTable`\n * dropMode?: 'CASCADE' | 'RESTRICT';\n *\n * // add a database comment on the table\n * comment?: string;\n *\n * // by default, it will throw an error when the table has no primary key\n * // set `noPrimaryKey` to `true` to bypass it\n * noPrimaryKey?: boolean;\n *\n * // override rakeDb `snakeCase` option for only this table\n * snakeCase?: boolean;\n * };\n * ```\n *\n * Example:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db, up) => {\n * // call `createTable` with options\n * await db.createTable(\n * 'table',\n * {\n * comment: 'Table comment',\n * dropMode: 'CASCADE',\n * noPrimaryKey: true,\n * },\n * (t) => ({\n * // ...\n * }),\n * );\n *\n * // call without options\n * const { table } = await db.createTable('user', (t) => ({\n * id: t.identity().primaryKey(),\n * email: t.text().unique(),\n * name: t.text(),\n * active: t.boolean().nullable(),\n * ...t.timestamps(),\n * }));\n *\n * // create records only when migrating up\n * if (up) {\n * // table is a db table interface, all query methods are available\n * await table.createMany([...data]);\n * }\n * });\n * ```\n *\n * @param tableName - name of the table to create\n * @param fn - create table callback\n */\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn?: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n /**\n * See {@link createTable}\n *\n * @param tableName - name of the table to create\n * @param options - {@link TableOptions}\n * @param fn - create table callback\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 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 =\n !cbOrOptions || typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (\n typeof cbOrOptions === 'function' ? cbOrOptions : cb\n ) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n /**\n * Drop the table, create it on rollback. See {@link createTable}.\n *\n * @param tableName - name of the table to drop\n * @param fn - create table callback\n */\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn?: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n /**\n * Drop the table, create it on rollback. See {@link createTable}.\n *\n * @param tableName - name of the table to drop\n * @param options - {@link TableOptions}\n * @param fn - create table callback\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 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 =\n !cbOrOptions || typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (\n typeof cbOrOptions === 'function' ? cbOrOptions : cb\n ) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n /**\n * `changeTable` accepts a table name, optional options, and a special callback with column changes.\n *\n * When changing a table within a specific schema, write the table name with schema name: `'schemaName.tableName'`.\n *\n * Options are:\n *\n * ```ts\n * type ChangeTableOptions = {\n * comment?:\n * | // add a comment to the table on migrating, remove a comment on rollback\n * string // change comment from first to second on migrating, from second to first on rollback\n * | [string, string] // remove a comment on both migrate and rollback\n * | null;\n *\n * // override rakeDb `snakeCase` option for only this table\n * snakeCase?: boolean;\n * };\n * ```\n *\n * The callback of the `changeTable` is different from `createTable` in the way that it expects columns to be wrapped in change methods such as `add`, `drop`, and `change`.\n *\n * @param tableName - name of the table to change (ALTER)\n * @param fn - change table callback\n */\n changeTable(tableName: string, fn: ChangeTableCallback<CT>): Promise<void>;\n /**\n * See {@link changeTable}\n *\n * @param tableName - name of the table to change (ALTER)\n * @param options - change table options\n * @param fn - change table callback\n */\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n ): 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 /**\n * Rename a table:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.renameTable('oldTableName', 'newTableName');\n * });\n * ```\n *\n * @param from - rename the table from\n * @param to - rename the table to\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 /**\n * Add a column to the table on migrating, and remove it on rollback.\n *\n * `dropColumn` takes the same arguments, removes a column on migrate, and adds it on rollback.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addColumn('tableName', 'columnName', (t) =>\n * t.integer().index().nullable(),\n * );\n * });\n * ```\n *\n * @param tableName - name of the table to add the column to\n * @param columnName - name of the column to add\n * @param fn - function returning a type of the column\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 /**\n * Drop the schema, create it on rollback. See {@link addIndex}.\n *\n * @param tableName - name of the table to add the column to\n * @param columnName - name of the column to add\n * @param fn - function returning a type of the column\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 /**\n * Add an index to the table on migrating, and remove it on rollback.\n *\n * `dropIndex` takes the same arguments, removes the index on migrate, and adds it on rollback.\n *\n * The first argument is the table name, other arguments are the same as in [composite index](#composite-index).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addIndex(\n * 'tableName',\n * ['column1', { column: 'column2', order: 'DESC' }],\n * {\n * name: 'indexName',\n * },\n * );\n * });\n * ```\n *\n * @param tableName - name of the table to add the index for\n * @param columns - indexed columns\n * @param options - index options\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 /**\n * Drop the schema, create it on rollback. See {@link addIndex}.\n *\n * @param tableName - name of the table to add the index for\n * @param columns - indexed columns\n * @param options - index options\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 /**\n * Add a foreign key to a table on migrating, and remove it on rollback.\n *\n * `dropForeignKey` takes the same arguments, removes the foreign key on migrate, and adds it on rollback.\n *\n * Arguments:\n *\n * - table name\n * - column names in the table\n * - other table name\n * - column names in the other table\n * - options:\n * - `name`: constraint name\n * - `match`: 'FULL', 'PARTIAL', or 'SIMPLE'\n * - `onUpdate` and `onDelete`: 'NO ACTION', 'RESTRICT', 'CASCADE', 'SET NULL', or 'SET DEFAULT'\n *\n * The first argument is the table name, other arguments are the same as in [composite foreign key](#composite-foreign-key).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addForeignKey(\n * 'tableName',\n * ['id', 'name'],\n * 'otherTable',\n * ['foreignId', 'foreignName'],\n * {\n * name: 'constraintName',\n * match: 'FULL',\n * onUpdate: 'RESTRICT',\n * onDelete: 'CASCADE',\n * },\n * );\n * });\n * ```\n *\n * @param tableName - table name\n * @param columns - column names in the table\n * @param foreignTable - other table name\n * @param foreignColumns - column names in the other table\n * @param options - foreign key options\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 /**\n * Drop the schema, create it on rollback. See {@link addForeignKey}.\n *\n * @param tableName - table name\n * @param columns - column names in the table\n * @param foreignTable - other table name\n * @param foreignColumns - column names in the other table\n * @param options - foreign key options\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 /**\n * Add a primary key to a table on migrate, and remove it on rollback.\n *\n * `dropPrimaryKey` takes the same arguments, removes the primary key on migrate, and adds it on rollback.\n *\n * First argument is a table name, second argument is an array of columns.\n * The optional third argument may have a name for the primary key constraint.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addPrimaryKey('tableName', ['id', 'name'], {\n * name: 'tablePkeyName',\n * });\n * });\n * ```\n *\n * @param tableName - name of the table\n * @param columns - array of the columns\n * @param options - object with a constraint name\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 /**\n * Drop the schema, create it on rollback. See {@link addPrimaryKey}.\n *\n * @param tableName - name of the table\n * @param columns - array of the columns\n * @param options - object with a constraint name\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 /**\n * Add or drop a check for multiple columns.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addCheck('tableName', t.sql`column > 123`);\n * });\n * ```\n *\n * @param tableName - name of the table to add the check into\n * @param check - raw SQL for the check\n */\n addCheck(tableName: string, check: RawSQLBase): Promise<void> {\n return addCheck(this, this.up, tableName, check);\n }\n\n /**\n * Drop the schema, create it on rollback. See {@link addConstraint}.\n *\n * @param tableName - name of the table to add the check into\n * @param check - raw SQL for the check\n */\n dropCheck(tableName: string, check: RawSQLBase): Promise<void> {\n return addCheck(this, !this.up, tableName, check);\n }\n\n /**\n * Add or drop a constraint with check and a foreign key references.\n *\n * See foreign key details in [foreign key](/guide/migration-column-methods.html#composite-foreign-key).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addConstraint('tableName', {\n * name: 'constraintName',\n * check: db.sql`column > 123`,\n * references: [['id', 'name'], 'otherTable', ['otherId', 'otherName']],\n * });\n * });\n * ```\n *\n * @param tableName - name of the table to add the constraint to\n * @param constraint - constraint config object\n */\n addConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, this.up, tableName, constraint);\n }\n\n /**\n * Drop the schema, create it on rollback. See {@link addConstraint}.\n *\n * @param tableName - name of the table to add the constraint to\n * @param constraint - constraint config object\n */\n dropConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, !this.up, tableName, constraint);\n }\n\n /**\n * Rename a column:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.renameColumn('tableName', 'oldColumnName', 'newColumnName');\n * });\n * ```\n *\n * @param tableName - name of the table to rename the column in\n * @param from - rename column from\n * @param to - rename column to\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 /**\n * `createSchema` creates a database schema, and removes it on rollback.\n *\n * `dropSchema` takes the same arguments, removes schema on migration, and adds it on rollback.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createSchema('schemaName');\n * });\n * ```\n *\n * @param schemaName - name of the schema\n */\n createSchema(schemaName: string): Promise<void> {\n return createSchema(this, this.up, schemaName);\n }\n\n /**\n * Drop the schema, create it on rollback. See {@link createSchema}.\n *\n * @param schemaName - name of the schema\n */\n dropSchema(schemaName: string): Promise<void> {\n return createSchema(this, !this.up, schemaName);\n }\n\n /**\n * `createExtension` creates a database extension, and removes it on rollback.\n *\n * `dropExtension` takes the same arguments, removes the extension on migrate, and adds it on rollback.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createExtension('pg_trgm');\n * });\n * ```\n *\n * @param name - name of the extension\n * @param options - extension options\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 /**\n * Drop the extension, create it on rollback. See {@link createExtension}.\n *\n * @param name - name of the extension\n * @param options - extension options\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 /**\n * `createEnum` creates an enum on migrate, drops it on rollback.\n *\n * `dropEnum` does the opposite.\n *\n * Third argument for options is optional.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createEnum('number', ['one', 'two', 'three']);\n *\n * // use `schemaName.enumName` format to specify a schema\n * await db.createEnum('customSchema.mood', ['sad', 'ok', 'happy'], {\n * // following options are used when dropping enum\n * dropIfExists: true,\n * cascade: true,\n * });\n * });\n * ```\n *\n * @param name - name of the enum\n * @param values - possible enum values\n * @param options - enum options\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 /**\n * Drop the enum, create it on rollback. See {@link createEnum}.\n *\n * @param name - name of the enum\n * @param values - possible enum values\n * @param options - enum options\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 /**\n * Domain is a custom database type that allows to predefine a `NOT NULL` and a `CHECK` (see [postgres tutorial](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-user-defined-data-types/)).\n *\n * `createDomain` and `dropDomain` take a domain name as first argument, callback returning inner column type as a second, and optional object with parameters as third.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createDomain('domainName', (t) => t.integer(), {\n * check: db.sql`value = 42`,\n * });\n *\n * // use `schemaName.domainName` format to specify a schema\n * await db.createDomain('schemaName.domainName', (t) => t.text(), {\n * // unlike columns, domain is nullable by default, use notNull when needed:\n * notNull: true,\n * collation: 'C',\n * default: db.sql`'default text'`,\n * check: db.sql`length(value) > 10`,\n *\n * // cascade is used when dropping domain\n * cascade: true,\n * });\n * });\n * ```\n *\n * @param name - name of the domain\n * @param fn - function returning a column type for the domain\n * @param options - domain options\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 /**\n * Drop the domain, create it on rollback. See {@link dropDomain}.\n *\n * @param name - name of the domain\n * @param fn - function returning a column type for the domain\n * @param options - domain options\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 /**\n * Create and drop a database collation, (see [Postgres docs](https://www.postgresql.org/docs/current/sql-createcollation.html)).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createCollation('myCollation', {\n * // This is a shortcut for setting lcCollate and lcCType at once.\n * locale: 'en-u-kn-true',\n *\n * // set `lcType` and `lcCType` only if the `locale` is not set.\n * // lcType: 'C',\n * // lcCType: 'C',\n *\n * // provider can be 'icu' or 'libc'. 'libc' is a default.\n * provider: 'icu',\n *\n * // true by default, false is only supported with 'icu' provider.\n * deterministic: true,\n *\n * // Is intended to by used by `pg_upgrade`. Normally, it should be omitted.\n * version: '1.2.3',\n *\n * // For `CREATE IF NOT EXISTS` when creating.\n * createIfNotExists: true,\n *\n * // For `DROP IF EXISTS` when dropping.\n * dropIfExists: true,\n *\n * // For `DROP ... CASCADE` when dropping.\n * cascase: true,\n * });\n * });\n * ```\n *\n * Instead of specifying the collation options, you can specify a collation to copy options from.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createCollation('myCollation', {\n * fromExisting: 'otherCollation',\n * });\n * });\n * ```\n *\n * To create a collation withing a specific database schema, prepend it to the collation name:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createCollation('schemaName.myCollation', {\n * // `fromExisting` also can accept a collation name with a schema.\n * fromExisting: 'schemaName.otherCollation',\n * });\n * });\n * ```\n *\n * @param name - name of the collation, can contain a name of schema separated with a dot.\n * @param options - options to create and drop the collation.\n */\n createCollation(\n name: string,\n options: Omit<RakeDbAst.Collation, 'type' | 'action' | 'schema' | 'name'>,\n ): Promise<void> {\n return createCollation(this, this.up, name, options);\n }\n\n /**\n * Drop the collation, create it on rollback. See {@link createCollation}.\n *\n * @param name - name of the collation, can contain a name of schema separated with a dot.\n * @param options - options to create and drop the collation.\n */\n dropCollation(\n name: string,\n options: Omit<RakeDbAst.Collation, 'type' | 'action' | 'schema' | 'name'>,\n ): Promise<void> {\n return createCollation(this, !this.up, name, options);\n }\n\n /**\n * Create and drop database views.\n *\n * Provide SQL as a string or via `db.sql` that can accept variables.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createView(\n * 'simpleView',\n * `\n * SELECT a.one, b.two\n * FROM a\n * JOIN b ON b.\"aId\" = a.id\n * `,\n * );\n *\n * // view can accept db.sql with variables in such way:\n * const value = 'some value';\n * await db.createView(\n * 'viewWithVariables',\n * db.sql`\n * SELECT * FROM a WHERE key = ${value}\n * `,\n * );\n *\n * // view with options\n * await db.createView(\n * 'schemaName.recursiveView',\n * {\n * // createOrReplace has effect when creating the view\n * createOrReplace: true,\n *\n * // dropIfExists and dropMode have effect when dropping the view\n * dropIfExists: true,\n * dropMode: 'CASCADE',\n *\n * // for details, check Postgres docs for CREATE VIEW,\n * // these options are matching CREATE VIEW options\n * temporary: true,\n * recursive: true,\n * columns: ['n'],\n * with: {\n * checkOption: 'LOCAL', // or 'CASCADED'\n * securityBarrier: true,\n * securityInvoker: true,\n * },\n * },\n * `\n * VALUES (1)\n * UNION ALL\n * SELECT n + 1 FROM \"schemaName\".\"recursiveView\" WHERE n < 100;\n * `,\n * );\n * });\n * ```\n *\n * @param name - name of the view\n * @param options - view options\n * @param sql - SQL to create the view with\n */\n createView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawSQLBase,\n ): Promise<void>;\n /**\n * See {@link createView}\n *\n * @param name - name of the view\n * @param sql - SQL to create the view with\n */\n createView(name: string, sql: string | RawSQLBase): 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 | RawSQLBase,\n );\n }\n\n /**\n * Drop the view, create it on rollback. See {@link createView}.\n *\n * @param name - name of the view\n * @param options - view options\n * @param sql - SQL to create the view with\n */\n dropView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawSQLBase,\n ): Promise<void>;\n /**\n * Drop the view, create it on rollback. See {@link createView}.\n *\n * @param name - name of the view\n * @param sql - SQL to create the view with\n */\n dropView(name: string, sql: string | RawSQLBase): 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 | RawSQLBase,\n );\n }\n\n /**\n * Returns boolean to know if table exists:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * if (await db.tableExists('tableName')) {\n * // ...do something\n * }\n * });\n * ```\n *\n * @param tableName - name of the table\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 /**\n * Returns boolean to know if a column exists:\n *\n * Note that when `snakeCase` option is set to true, this method won't translate column to snake case, unlike other parts.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * if (await db.columnExists('tableName', 'columnName')) {\n * // ...do something\n * }\n * });\n * ```\n *\n * @param tableName - name of the table to check for the column in\n * @param columnName - name of the column\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 /**\n * Returns boolean to know if constraint exists:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * if (await db.constraintExists('constraintName')) {\n * // ...do something\n * }\n * });\n * ```\n *\n * @param constraintName - name of the constraint\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\n/**\n * If `log` object is specified, it will perform the query with logging.\n *\n * @param log - logger object\n * @param query - object with SQL text and values for a query\n * @param fn - function to call the original `query` or `arrays`\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\n/**\n * See {@link Migration.addColumn}\n */\nconst addColumn = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addIndex}\n */\nconst addIndex = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addForeignKey}\n */\nconst addForeignKey = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addPrimaryKey}\n */\nconst addPrimaryKey = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addCheck}\n */\nconst addCheck = <CT extends ColumnTypesBase>(\n migration: Migration<CT>,\n up: boolean,\n tableName: string,\n check: RawSQLBase,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.check(check)),\n }));\n};\n\n/**\n * See {@link Migration.addConstraint}\n */\nconst addConstraint = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createSchema}\n */\nconst createSchema = async <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createExtension}\n */\nconst createExtension = async <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createEnum}\n */\nconst createEnum = async <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createDomain}\n */\nconst createDomain = async <CT extends ColumnTypesBase>(\n migration: Migration<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 ${ast.default.toSQL({ values })}`\n : ''\n }${ast.notNull || ast.check ? '\\n' : ''}${[\n ast.notNull && 'NOT NULL',\n ast.check && `CHECK ${ast.check.toSQL({ 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\n/**\n * See {@link Migration.createCollation}\n */\nconst createCollation = async <CT extends ColumnTypesBase>(\n migration: Migration<CT>,\n up: boolean,\n name: string,\n options: Omit<RakeDbAst.Collation, 'type' | 'action' | 'schema' | 'name'>,\n): Promise<void> => {\n const [schema, collationName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Collation = {\n type: 'collation',\n action: up ? 'create' : 'drop',\n schema,\n name: collationName,\n ...options,\n };\n\n let query;\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE COLLATION${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } ${quotedName} `;\n\n if (ast.fromExisting) {\n query += `FROM ${quoteNameFromString(ast.fromExisting)}`;\n } else {\n const config: string[] = [];\n if (ast.locale) config.push(`locale = '${ast.locale}'`);\n if (ast.lcCollate) config.push(`lc_collate = '${ast.lcCollate}'`);\n if (ast.lcCType) config.push(`lc_ctype = '${ast.lcCType}'`);\n if (ast.provider) config.push(`provider = ${ast.provider}`);\n if (ast.deterministic !== undefined)\n config.push(`deterministic = ${ast.deterministic}`);\n if (ast.version) config.push(`version = '${ast.version}'`);\n\n query += `(\\n ${config.join(',\\n ')}\\n)`;\n }\n } else {\n query = `DROP COLLATION${\n ast.dropIfExists ? ' IF EXISTS' : ''\n } ${quotedName}${ast.cascade ? ` CASCADE` : ''}`;\n }\n\n await migration.adapter.query({\n text: query,\n });\n\n migration.migratedAsts.push(ast);\n};\n\n/**\n * Run the query and check if it has rows.\n *\n * @param db - migration instance\n * @param sql - raw SQL object to execute\n */\nconst queryExists = <CT extends ColumnTypesBase>(\n db: Migration<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 { getMigrations, MigrationItem, RakeDbConfig } from '../common';\nimport {\n ChangeCallback,\n clearChanges,\n getCurrentChanges,\n} from '../migration/change';\nimport { createMigrationInterface } from '../migration/migration';\nimport {\n getMigratedVersionsMap,\n removeMigratedVersion,\n saveMigratedVersion,\n} from '../migration/manageMigratedVersions';\nimport { RakeDbError } from '../errors';\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 getMigrations(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 import: config.import,\n });\n\n await adapter.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\n// Cache `change` functions of migrations. Key is a migration file name, value is array of `change` functions.\n// When migrating two or more databases, files are loaded just once due to this cache.\nexport const changeCache: Record<string, ChangeCallback[] | undefined> = {};\n\n// SQL to start a transaction\nconst begin = {\n text: 'BEGIN',\n values: emptyArray,\n};\n\n/**\n * Process one migration file.\n * It performs a db transaction, loads `change` functions from a file, executes them in order specified by `up` parameter.\n * After calling `change` functions successfully, will save new entry or delete one in case of `up: false` from the migrations table.\n * After transaction is committed, will call `appCodeUpdater` if exists with the migrated changes.\n */\nconst processMigration = async <CT extends ColumnTypesBase>(\n db: Adapter,\n up: boolean,\n file: MigrationItem,\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 const module = (await file.load()) as\n | {\n default?: MaybeArray<ChangeCallback>;\n }\n | undefined;\n\n const exported = module?.default && toArray(module.default);\n\n if (config.forceDefaultExports && !exported) {\n throw new RakeDbError(\n `Missing a default export in ${file.path} migration`,\n );\n }\n\n changes = exported || getCurrentChanges();\n changeCache[file.path] = changes;\n }\n\n const db = createMigrationInterface<CT>(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 import: config.import,\n });\n }\n};\n\n/**\n * Will run all pending yet migrations, sequentially in order,\n * will apply `change` functions top-to-bottom.\n *\n * @param options - options to construct db adapter with\n * @param config - specifies how to load migrations, may have `appCodeUpdater`, callbacks, and logger.\n * @param args - pass none or `all` to run all migrations, pass int for how many to migrate, `--code` to enable and `--code false` to disable `useCodeUpdater`.\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\n/**\n * Will roll back one latest applied migration,\n * will apply `change` functions bottom-to-top.\n *\n * Takes the same options as {@link migrate}.\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\n/**\n * Calls {@link rollback} and then {@link migrate}.\n *\n * Takes the same options as {@link migrate}.\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\n // because we just called rollback, `change` functions are cached bottom-to-top.\n // now we are about to migrate, and need to reverse cached functions.\n for (const file in changeCache) {\n changeCache[file]?.reverse();\n }\n\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 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}\"${user ? ` 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 export type Collation = {\n schema: string;\n name: string;\n provider: string;\n deterministic: boolean;\n lcCollate?: string;\n lcCType?: string;\n locale?: string;\n version?: 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(): Promise<DbStructure.Domain[]> {\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 async getCollations(): Promise<DbStructure.Collation[]> {\n const { rows } = await this.db.query<DbStructure.Collation>(`SELECT\n nspname \"schema\",\n collname \"name\",\n CASE WHEN collprovider = 'i' THEN 'icu' WHEN collprovider = 'c' THEN 'libc' ELSE collprovider::text END \"provider\",\n collisdeterministic \"deterministic\",\n collcollate \"lcCollate\",\n collctype \"lcCType\",\n colliculocale \"locale\",\n collversion \"version\"\nFROM pg_collation\nJOIN pg_namespace n on pg_collation.collnamespace = n.oid\nWHERE ${filterSchema('n.nspname')}\n `);\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 raw,\n simplifyColumnDefault,\n TableData,\n} from 'pqb';\nimport { 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 collations: DbStructure.Collation[];\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 for (const it of data.collations) {\n ast.push({\n type: 'collation',\n action: 'create',\n ...it,\n schema: it.schema === ctx.currentSchema ? undefined : it.schema,\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({ 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 collations,\n ] = await Promise.all([\n db.getStructure(),\n db.getConstraints(),\n db.getIndexes(),\n db.getExtensions(),\n db.getEnums(),\n db.getDomains(),\n db.getCollations(),\n ]);\n\n return {\n schemas,\n tables,\n views,\n constraints,\n indexes,\n extensions,\n enums,\n domains,\n collations,\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({ 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({ 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({ 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({ 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 isRawSQL,\n quoteObjectKey,\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 === 'collation' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createCollation(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: ${ast.default.toCode('db')},`);\n if (ast.check) props.push(`check: ${ast.check.toCode('db')},`);\n\n addCode(code, ', {');\n code.push(props);\n addCode(code, '}');\n }\n\n addCode(code, ');');\n return code;\n};\n\nconst createCollation = (ast: RakeDbAst.Collation): Code[] => {\n const params: string[] = [];\n if (ast.locale) params.push(`locale: '${ast.locale}',`);\n if (ast.lcCollate) params.push(`lcCollate: '${ast.lcCollate}',`);\n if (ast.lcCType) params.push(`lcCType: '${ast.lcCType}',`);\n if (ast.provider) params.push(`provider: '${ast.provider}',`);\n if (ast.deterministic) params.push(`deterministic: ${ast.deterministic},`);\n if (ast.version) params.push(`version: '${ast.version}',`);\n\n return [\n `await db.createCollation(${quoteSchemaTable(ast)}, {`,\n params,\n '});',\n ];\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 isRawSQL(def) &&\n def._sql === '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}, ${item.check.toCode('t')});`];\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 const raw = ast.sql._sql;\n let sql;\n if (typeof raw === 'string') {\n sql = raw;\n } else {\n sql = '';\n const parts = raw[0];\n const last = parts.length - 1;\n for (let i = 0; i < last; i++) {\n sql += parts[i] + `\\${${raw[i + 1]}}`;\n }\n sql += parts[last];\n }\n\n addCode(code, backtickQuote(sql));\n } else {\n addCode(code, ast.sql.toCode('db'));\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 import: config.import,\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 import: config.import,\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\n/**\n * Type of {@link rakeDb} function\n */\nexport type RakeDbFn = (<C extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n partialConfig?: InputRakeDbConfig<C>,\n args?: string[],\n) => RakeDbChangeFn<C> & {\n promise: Promise<void>;\n}) & {\n /**\n * Unlike the original `rakeDb` that executes immediately,\n * `rakeDb.lazy` returns the `run` function to be later called programmatically.\n *\n * @param options - {@link AdapterOptions} or an array of such options to migrate multiple dbs\n * @param config - {@link RakeDbConfig}\n * @returns `change` is to be used in migrations, `run` takes an array cli args to execute a command\n */\n lazy: RakeDbLazyFn;\n};\n\n/**\n * Type of {@link rakeDb.lazy} function\n */\nexport type RakeDbLazyFn = <C extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n partialConfig?: InputRakeDbConfig<C>,\n) => {\n change: RakeDbChangeFn<C>;\n run(args: string[], config?: Partial<RakeDbConfig<C>>): Promise<void>;\n};\n\n/**\n * Function to use in migrations to wrap database changes\n * Saves the given callback to an internal queue,\n * and also returns the callback in case you want to export it from migration.\n */\nexport type RakeDbChangeFn<C extends ColumnTypesBase> = (\n fn: ChangeCallback<C>,\n) => ChangeCallback<C>;\n\n/**\n * Function to configure and run `rakeDb`.\n *\n * @param options - {@link AdapterOptions} or an array of such options to migrate multiple dbs\n * @param config - {@link RakeDbConfig}\n * @param args - optionally provide an array of cli args. Default is `process.argv.slice(2)`.\n */\nexport const rakeDb: RakeDbFn = ((\n options,\n partialConfig = {},\n args = process.argv.slice(2),\n) => {\n const config = processRakeDbConfig(partialConfig);\n const promise = runCommand(options, config, args).catch((err) => {\n if (err instanceof RakeDbError) {\n config.logger?.error(err.message);\n process.exit(1);\n }\n throw err;\n });\n\n return Object.assign(change, {\n promise,\n });\n}) as RakeDbFn;\n\nrakeDb.lazy = ((options, partialConfig = {}) => {\n const config = processRakeDbConfig(partialConfig);\n\n return {\n change,\n run(args: string[], conf) {\n return runCommand(options, conf ? { ...config, ...conf } : config, args);\n },\n };\n}) as RakeDbLazyFn;\n\nfunction change(fn: ChangeCallback) {\n pushChange(fn);\n return fn;\n}\n\nconst runCommand = async <C extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<C>,\n args: string[] = process.argv.slice(2),\n): Promise<void> => {\n const arg = args[0]?.split(':')[0];\n\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};\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 pull generate a combined migration for an existing database\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","getStackTrace","fileURLToPath","defaultColumnTypes","__spreadProps","__objRest","readdir","pathToFileURL","singleQuote","toSnakeCase","isRawSQL","quote","sql","toArray","EnumColumn","createTable","snakeCaseKey","emptyObject","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","resetTableData","consumeColumnName","UnknownColumn","add","columnTypes","setDefaultLanguage","changeTableData","ColumnTypeBase","deepCompare","createView","raw","TransactionAdapter","logParamToLogObject","createDb","createSchema","createExtension","createEnum","createDomain","createCollation","Adapter","pathToLog","emptyArray","db","mkdir","getImportPath","writeFile","simplifyColumnDefault","_a","_b","columnsByType","instantiateColumn","DomainColumn","CustomTypeColumn","ArrayColumn","getConstraintKind","toCamelCase","codeToString","addCode","TimestampTZColumn","quoteObjectKey","primaryKeyToCode","indexToCode","constraintToCode","referencesArgsToCode","constraintPropsToCode","backtickQuote","readFile","join","stat"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FO,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;AAnHvB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAoHE,EAAM,MAAA,MAAA,GAASC,sCAAK,uBAA4B,CAAA,EAAA,MAAA,CAAA,CAAA;AAChD,EAAI,IAAA,CAAC,OAAO,aAAe,EAAA;AACzB,IAAA,MAAA,CAAO,aAAgB,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,gBAAgB,WAAW,CAAA,CAAA;AAAA,GACrE;AAEA,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;AAGxC,IAAA,IAAI,QAAW,GAAA,CAAA,EAAA,GAAAC,wBAAA,EAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,CAAG,CAAA,CAAA,WAAA,EAAA,CAAA;AACpC,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,6EAAA;AAAA,OACF,CAAA;AAAA,KACF;AAEA,IAAI,IAAA,QAAA,CAAS,UAAW,CAAA,SAAS,CAAG,EAAA;AAClC,MAAA,QAAA,GAAWC,uBAAc,QAAQ,CAAA,CAAA;AAAA,KACnC;AAEA,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AACjC,IAAA,IAAI,GAAQ,KAAA,KAAA,IAAS,GAAQ,KAAA,KAAA,IAAS,QAAQ,MAAQ,EAAA;AACpD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,yBAAA,EAA4B,IAAK,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAA,iBAAA,CAAA;AAAA,OACpD,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,oBAAoB,MAAU,IAAA,CAAC,KAAK,UAAW,CAAA,MAAA,CAAO,cAAc,CAAG,EAAA;AACzE,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,mBAAmB,MAAU,IAAA,CAAC,KAAK,UAAW,CAAA,MAAA,CAAO,aAAa,CAAG,EAAA;AACvE,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,KAAS,IAAAC,eAAA,CAAA;AACpC,IAAA,IAAI,KAAM,CAAA,SAAA;AAAW,MAAA,MAAA,CAAO,SAAY,GAAA,IAAA,CAAA;AACxC,IAAA,IAAI,KAAM,CAAA,QAAA;AAAU,MAAA,MAAA,CAAO,WAAW,KAAM,CAAA,QAAA,CAAA;AAAA,GACvC,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,OAAOJ,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,EAAAI,eAAA,CAAAJ,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;AAlRL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAmRE,EAAM,MAAA,EAAE,QAAW,GAAA,EAAA,CAAA;AACnB,EAAI,IAAA,MAAA,IAAU,WAAW,QAAU,EAAA;AACjC,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,QAAM,MAAA,GAAA,CAAA;AAAA,OACR;AAAA,KACF;AAAA,GACF;AAEA,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;AAiBa,MAAA,aAAA,GAAgB,OAC3B,EAAA,EAOA,EAC6B,KAAA;AAR7B,EACE,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,UAAA;AAAA,GAtWJ,GAqWE,EAEK,EAAA,MAAA,GAAAK,WAAA,CAFL,EAEK,EAAA;AAAA,IADH,YAAA;AAAA,GAAA,CAAA,CAAA;AAQF,EAAO,OAAA,UAAA,GACH,uBAAwB,CAAAD,eAAA,CAAAJ,gBAAA,CAAA,EAAA,EAAK,MAAL,CAAA,EAAA,EAAa,UAAW,EAAA,CAAA,EAAG,EAAE,CAAA,GACrD,sBAAuB,CAAA,MAAA,EAAQ,EAAE,CAAA,CAAA;AACvC,CAAA,CAAA;AAGA,SAAS,uBAAA,CACP,QACA,EACiB,EAAA;AACjB,EAAA,MAAM,SAA0B,EAAC,CAAA;AAEjC,EAAM,MAAA,EAAE,UAAY,EAAA,QAAA,EAAa,GAAA,MAAA,CAAA;AACjC,EAAA,KAAA,MAAW,OAAO,UAAY,EAAA;AAC5B,IAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACV,IAAM,EAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,EAAU,GAAG,CAAA;AAAA,MAChC,OAAS,EAAA,UAAA,CAAW,IAAK,CAAA,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,MACtC,IAAA,EAAM,WAAW,GAAG,CAAA;AAAA,KACrB,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,IAAI,CAAC,EAAA;AAAI,IAAA,MAAA,CAAO,OAAQ,EAAA,CAAA;AAExB,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAGA,eAAe,sBAAA,CACb,QACA,EAC0B,EAAA;AAC1B,EAAA,MAAM,EAAE,cAAA,EAAgB,MAAQ,EAAA,GAAA,EAAQ,GAAA,MAAA,CAAA;AAExC,EAAI,IAAA,KAAA,CAAA;AACJ,EAAI,IAAA;AACF,IAAQ,KAAA,GAAA,MAAMM,iBAAQ,cAAc,CAAA,CAAA;AAAA,WAC7B,CAAP,EAAA;AACA,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAEA,EAAQ,KAAA,GAAA,KAAA,CAAM,MAAO,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,SAAS,IAAI,CAAA,CAAE,QAAS,CAAA,GAAG,CAAC,CAAA,CAAA;AAChE,EAAS,KAAA,GAAA,CAAA,EAAA,GAAK,OAAU,GAAA,QAAA,EAAU,KAAK,CAAA,CAAA;AAEvC,EAAO,OAAA,KAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AACzB,IAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAEb,IAAA,MAAM,QAAW,GAAA,IAAA,CAAK,OAAQ,CAAA,cAAA,EAAgB,IAAI,CAAA,CAAA;AAClD,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,OAAA,EAAS,WAAW,IAAI,CAAA;AAAA,MACxB,MAAM,IAAO,GAAA;AACX,QAAI,IAAA;AACF,UAAA,MAAM,IAAI,QAAQ,CAAA,CAAA;AAAA,iBACX,GAAP,EAAA;AAEA,UAAA,IACG,IAAyB,IAAS,KAAA,gCAAA;AAEnC,YAAM,MAAA,GAAA,CAAA;AAGR,UAAA,MAAM,GAAI,CAAAC,sBAAA,CAAc,QAAQ,CAAA,CAAE,QAAQ,CAAA,CAAA;AAAA,SAC5C;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACD,CAAA,CAAA;AACH,CAAA;AAGA,SAAS,SAAS,QAAwB,EAAA;AACxC,EAAM,MAAA,GAAA,GAAM,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AACjC,EAAA,IAAI,GAAQ,KAAA,KAAA,IAAS,GAAQ,KAAA,KAAA,IAAS,QAAQ,MAAQ,EAAA;AACpD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAwE,qEAAA,EAAA,IAAA,CAAA,CAAA;AAAA,KAC1E,CAAA;AAAA,GACF;AACF,CAAA;AAGA,SAAS,WAAWR,KAAsB,EAAA;AACxC,EAAM,MAAA,cAAA,GAAiBA,KAAK,CAAA,KAAA,CAAM,aAAa,CAAA,CAAA;AAC/C,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAoEA,iEAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AAAA,KACtE,CAAA;AAAA,GACF;AAEA,EAAA,OAAO,eAAe,CAAC,CAAA,CAAA;AACzB,CAAA;AAGO,MAAM,OAAU,GAAA,CAAC,GAAkB,KAAA,GAAA,CAAI,IAAK,EAAA,CAAA;AAGtC,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;AAYjE,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;AAEa,MAAA,mBAAA,GAAsB,CAAC,MAAmB,KAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,IAAI,CAAA,GAAI,0BAA0B,MAAM,CAAA,CAAA;AACvD,EAAA,OAAO,eAAgB,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA,CAAA;AACzC,CAAA,CAAA;AAEO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,MAAA;AAAA,EACA,IAAA;AACF,CAGM,KAAA;AACJ,EAAA,OAAOS,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;;ACvgBA,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;;;;;;;;;;;;;;;;;;;;;ACG3D,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,EAAA,mBAAA,CAAoB,IAAK,CAAA,IAAA,CAAK,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GAC/D;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,MAAA,IAAW,IAAK,CAAA,IAAA,CAAK,SAAW,EAAA;AAC9B,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,wBAAwB,IAAK,CAAA,IAAA,CAAK,UAAU,KAAM,CAAA,EAAE,QAAQ,CAAA,CAAA,QAAA,CAAA;AAAA,KAC9D,CAAA;AAAA,GACF;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,EAAA,MAAM,MAAM,mBAAoB,CAAA,IAAA,CAAK,IAAK,CAAA,OAAA,EAAS,QAAQ,IAAI,CAAA,CAAA;AAC/D,EAAA,IAAI,GAAQ,KAAA,IAAA;AAAM,IAAK,IAAA,CAAA,IAAA,CAAK,WAAW,GAAK,CAAA,CAAA,CAAA,CAAA;AAE5C,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;AAEO,MAAM,mBAAsB,GAAA,CACjC,GACA,EAAA,MAAA,EACA,MACG,KAAA;AACH,EAAA,IAAI,QAAQ,KAAa,CAAA,IAAA,GAAA,KAAQ,IAAQ,IAAA,OAAO,QAAQ,UAAY,EAAA;AAClE,IAAI,IAAAC,mBAAA,CAAS,GAAG,CAAG,EAAA;AACjB,MAAA,OAAO,GAAI,CAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,CAAA,CAAA;AAAA,KACtB,MAAA;AACL,MAAA,OAAOC,WAAM,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,QAAA,IAAW,OAAO,QAAS,CAAA,GAAG,IAAI,GAAG,CAAA,CAAA;AAAA,KAC5D;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,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,CAACP,eAAA,CAAAJ,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,EAAmB,MAAsB,KAAA;AAC3D,EAAA,OAAO,CAAU,OAAA,EAAA,KAAA,CAAM,KAAM,CAAA,EAAE,QAAQ,CAAA,CAAA,CAAA,CAAA,CAAA;AACzC,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,CAAAS,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;AA3Pd,MAAA,IAAA,EAAA,CAAA;AA4PM,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;AAEa,MAAA,cAAA,GAAiB,CAC5B,EACA,EAAA,EAAE,QAAQ,IAAK,EAAA,EACf,SACA,QACU,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,MAAM,KAAQ,GAAA,OAAA,CAAQ,KAAU,IAAA,OAAA,CAAQ,QAAY,IAAA,KAAA,CAAA;AACpD,IAAA,IAAI,KAAO,EAAA;AACT,MAAI,GAAA,CAAA,IAAA,CAAK,SAAS,KAAO,CAAA,CAAA,CAAA,CAAA;AAAA,KAC3B;AAEA,IAAA,MAAM,aAAuB,EAAC,CAAA;AAE9B,IAAM,MAAA,IAAA,GACJ,OAAQ,CAAA,QAAA,IAAY,OAAQ,CAAA,cAAA,GACxB,IAAI,OAAQ,CAAA,cAAA,CAAA,CAAA,CAAA,GACZ,OAAQ,CAAA,QAAA,GACR,OAAO,OAAA,CAAQ,aAAa,QAC1B,GAAA,CAAA,CAAA,EAAI,OAAQ,CAAA,QAAA,CAAA,CAAA,CAAA,GACZ,OAAQ,CAAA,QAAA,CAAS,KAAM,CAAA,EAAE,MAAO,EAAC,CACnC,GAAA,CAAA,CAAA,EAAI,QAAY,IAAA,SAAA,CAAA,CAAA,CAAA,CAAA;AAEtB,IAAI,IAAA,SAAA,GACF,OAAQ,CAAA,QAAA,IAAY,OAAQ,CAAA,IAAA,CAAK,CAAC,MAAW,KAAA,CAAC,CAAC,MAAA,CAAO,MAAM,CAAA,CAAA;AAE9D,IAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,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,QAAA,SAAA,CAAU,IAAK,CAAA,CAAA,QAAA,EAAW,mBAAoB,CAAA,MAAA,CAAO,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,OACjE;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,MAAIG,IAAAA,IAAAA,GAAM,SAAU,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAE5B,MAAA,IAAI,SAAW,EAAA;AACb,QAAAA,IAAAA,GAAM,eAAe,IAAkBA,CAAAA,WAAAA,EAAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA;AAEvC,QAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,UAAY,SAAA,GAAA,IAAA,CAAA;AACZ,UAAAA,IAAAA,GAAM,CAAaA,UAAAA,EAAAA,IAAAA,CAAAA,GAAAA,EAAS,MAAO,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA;AAAA,SACrC;AAAA,OACF;AAEA,MAAA,UAAA,CAAW,KAAKA,IAAG,CAAA,CAAA;AAAA,KACrB;AAEA,IAAA,IAAI,UAAa,GAAA,UAAA,CAAW,IAAK,CAAA,SAAA,GAAY,SAAS,IAAI,CAAA,CAAA;AAE1D,IAAI,IAAA,CAAC,SAAa,IAAA,OAAA,CAAQ,QAAU,EAAA;AAClC,MAAA,IAAI,WAAW,MAAS,GAAA,CAAA;AAAG,QAAA,UAAA,GAAa,CAAkB,eAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;AAC1D,MAAA,UAAA,GAAa,eAAe,IAAS,CAAA,EAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KACvC;AAEA,IAAI,GAAA,CAAA,IAAA,CAAK,IAAI,UAAa,CAAA,CAAA,CAAA,CAAA,CAAA;AAE1B,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAI,GAAA,CAAA,IAAA;AAAA,QACF,CAAY,SAAA,EAAAC,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,CACE,MAAA,EAAAH,mBAAA,CAAS,OAAQ,CAAA,KAAK,CAClB,GAAA,OAAA,CAAQ,KAAM,CAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,CAAA,GAC9B,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,EAAAC,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;AA1YL,EAAA,IAAA,EAAA,CAAA;AA2YE,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;;AC7YO,MAAM,YAAe,GAAA;AAAA,EAC1B,KAAK,IAAc,EAAA;AAEjB,IAAA,OAAO,IAAIG,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;AACjE,EAAA,MAAM,WACJ,UAAc,IAAA,OAAA,GAAU,OAAQ,CAAA,QAAA,GAAW,UAAU,OAAQ,CAAA,QAAA,CAAA;AAE/D,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,EAAA,MAAM,KAAQ,GAAA,CAAC,EACX,GAAAC,sBAAA,GACAC,kBAAe,CAAA,KAAA,EAAO,EAAI,EAAA,CAAA,EAAA,GAAA,SAAA,CAAU,OAAQ,CAAA,SAAA,KAAlB,IAA6B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAE3E,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,EAAA,IAAM,mBAAmB,GAAG,CAAA,CAAA;AAE5B,EAAA,MAAM,OAAU,GAAAC,cAAA,CAAa,GAAK,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACrD,EAAA,KAAA,MAAW,MAAsB,OAAS,EAAA;AAArC,IAAA,MAAA,EAAA,GAAA,EAAA,EAAQ,EA1Ff,IAAA,EAAA,GA0FO,EAAiB,EAAA,KAAA,GAAAhB,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,MAAA,OAAQ,KAAW,IAAA,IAAA,GAAA,KAAA,GAAA,KAAA,GAAA,SAAA;AAAA,QACjB,SAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,UACE,YAAA,EAAc,OAAQ,CAAA,YAAA,GAAe,QAAW,GAAA,KAAA,CAAA;AAAA,UAChD,WAAW,OAAQ,CAAA,SAAA;AAAA,SACrB;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAMe,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,OAAAhB,eAAA,CAAAJ,gBAAA,CAAAI,eAAA,CAAAJ,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,GAAAI,eAAA,CAAAJ,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;AAtJrD,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAuJE,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,MAAMqB,cAAe,GAAA,CACnB,GACA,EAAA,SAAA,EACA,QACiB,KAAA;AAnLnB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAoLE,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,YAAAP,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,IAAM,EAAA,CAAA,UAAA,EACJ,GAAI,CAAA,YAAA,GAAe,YAAe,GAAA,EAAA,CAAA,CAAA,EAChC,eAAgB,CAAA,GAAG,CAAI,CAAA,EAAA,GAAA,CAAI,QAAW,GAAA,CAAA,CAAA,EAAI,IAAI,QAAa,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,KAChE,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,QACAV,qCACK,IADL,CAAA,EAAA;AAAA,UAEE,UAAY,EAAA,IAAA,CAAK,UACb,GAAAA,eAAA,CAAAJ,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,KAAWI,qCAC5B,KAD4B,CAAA,EAAA;AAAA,MAE/B,OAAA,EAAS,MAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAU,KAAAJ,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,IAAA,EAAM,CACJ,YAAA,EAAA,GAAA,CAAI,iBAAoB,GAAA,gBAAA,GAAmB,EACzC,CAAA,CAAA,EAAA,eAAA,CAAgB,GAAG,CAAA,CAAA,EAAA,EAAM,KAAM,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,CAAA,CAAA;AAAA,MAC3C,MAAA;AAAA,KACF;AAAA,IACA,GAAG,cAAA,CAAe,IAAM,EAAA,GAAA,EAAK,SAAS,QAAQ,CAAA;AAAA,IAC9C,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,EAAAW,SAAA,CAAM,IAAI,OAAO,CAAA,CAAA,CAAA;AAAA,KACvE,CAAA,CAAA;AAAA,GACH;AAEA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;;;;;;;;;;;;;;;;;;;;;AClOA,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,SAASX,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,gBAAgBsB,cAAY,EAAA;AAC9B,IAAO,OAAA,SAAA,CAAU,KAAO,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACvC,MAAA,IAAW,SAASL,sBAAa,EAAA;AAC/B,IAAe,cAAA,CAAA,eAAA,CAAgB,GAAK,EAAAE,gBAAA,EAAc,CAAA,CAAA;AAClD,IAAeI,kBAAA,EAAA,CAAA;AACf,IAAO,OAAAN,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,gBAAgBK,cAAY,EAAA;AAC9B,IAAO,OAAA,SAAA,CAAU,MAAQ,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACxC,MAAA,IAAW,SAASL,sBAAa,EAAA;AAC/B,IAAe,cAAA,CAAA,eAAA,CAAgB,IAAM,EAAAE,gBAAA,EAAc,CAAA,CAAA;AACnD,IAAeI,kBAAA,EAAA,CAAA;AACf,IAAO,OAAAN,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,OAAOO,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,OAAA1B,gBAAA,CAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MACN,IAAA,EAAM,IAAS,KAAA,KAAA,GAAQ,KAAQ0B,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,gBAAgBJ,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,OAAAlB,eAAA,CAAAJ,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,GAAqBI,qCACtB,YADsB,CAAA,EAAA;AAAA,EAEzB,KAA4B,IAAc,EAAA;AACxC,IAAM,MAAA,KAAA,GAAQ,OAAO,MAAO,CAAAuB,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,OAAA3B,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,KAAqC,EAAA;AAC3C,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;AA9QpB,EAAA,IAAA,EAAA,CAAA;AA+QE,EAAA,MAAM,YACJ,WAAe,IAAA,OAAA,GAAU,OAAQ,CAAA,SAAA,GAAY,UAAU,OAAQ,CAAA,SAAA,CAAA;AACjE,EAAA,MAAM,WACJ,UAAc,IAAA,OAAA,GAAU,OAAQ,CAAA,QAAA,GAAW,UAAU,OAAQ,CAAA,QAAA,CAAA;AAE/D,EAAA4B,6BAAA,CAAmB,QAAQ,CAAA,CAAA;AAC3B,EAAeL,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,EAAC,YAAA,CAA8CP,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,MAAMI,SAAQ,CAAA,EAAA,EAAI,SAAW,EAAA,UAAA,EAAY,iBAAiB,OAAO,CAAA,CAAA;AAEvE,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,GAAK,EAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACrD,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,EACAS,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,IAAI,IAAA,IAAA,GAAO,WAAW,GAAG,CAAA,CAAA;AACzB,IAAA,IAAI,gBAAgBC,yBAAgB,EAAA;AAClC,MAAA,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAAA,KACjB;AAEA,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,GAAA1B,eAAA,CAAAJ,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,GAAII,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,CAAAJ,gBAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,QACjB,CAAA,GAAA,IAAA,CAAK,IAAS,KAAA,MAAA,GACdI,qCAAK,IAAL,CAAA,EAAA,EAAW,IAAM,EAAA,KAAA,MACjB,IAAK,CAAA,IAAA,KAAS,QACd,GAAAA,eAAA,CAAAJ,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,GACA6B,mBACA,EAAE,GAAA,EAAKA,iBAAgB,IAAM,EAAA,IAAA,EAAMA,iBAAgB,GAAI,EAAA,CAAA,CAAA;AAE/D,CAAA,CAAA;AAQA,MAAM,YAAe,GAAA,CACnB,GACA,EAAA,SAAA,EACA,QACiB,KAAA;AAjXnB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAkXE,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,EAAAlB,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,kBAAkBG,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;AAEpD,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,MAAA,IAAI,UAAa,GAAA,KAAA,CAAA;AACjB,MAAI,IAAA,EAAA,CAAG,SAAS,IAAK,CAAA,IAAA,KAAS,GAAG,IAAQ,IAAA,IAAA,CAAK,OAAY,KAAA,EAAA,CAAG,OAAU,CAAA,EAAA;AACrE,QAAa,UAAA,GAAA,IAAA,CAAA;AAEb,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,CAAA,cAAA,EAAiB,cAAc,IAC7B,CAAA,EAAA,EAAA,CAAG,UAAU,CAAY,SAAA,EAAA,mBAAA,CAAoB,GAAG,OAAO,CAAA,CAAA,CAAA,GAAM,KAC5D,IAAK,CAAA,KAAA,GAAQ,UAAU,IAAK,CAAA,KAAA,CAAM,MAAM,EAAE,MAAA,EAAQ,CAAM,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,SAC7D,CAAA;AAAA,OACF;AAEA,MAAA,IACE,OAAO,IAAA,CAAK,QAAa,KAAA,OAAO,EAAG,CAAA,QAAA,IACnC,CAACsB,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,QAAQ,mBAAoB,CAAA,EAAA,CAAG,OAAS,EAAA,MAAA,EAAQ,GAAG,MAAM,CAAA,CAAA;AAG/D,QAAI,IAAA,UAAA,IAAc,UAAU,IAAM,EAAA;AAChC,UAAW,UAAA,CAAA,IAAA,CAAK,iBAAiB,IAAoB,CAAA,cAAA,CAAA,CAAA,CAAA;AAAA,SACvD;AAEA,QAAA,MAAM,IAAO,GAAA,KAAA,KAAU,IAAO,GAAA,cAAA,GAAiB,CAAe,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAE9D,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,EAAA,EAAA,CAAG,MAAM,KAAM,CAAA;AAAA,cAC1D,MAAA;AAAA,aACD,CAAA,CAAA,CAAA,CAAA;AAAA,WACH,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,CAAAtB,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,gBACPT,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,GAAAS,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,OAAO,GAAK,EAAA,WAAA,EAAa,QAAQ,CAAC,CAAA,CAAA;AACjE,EAAA,OAAA,CAAQ,KAAK,GAAG,cAAA,CAAe,MAAM,GAAK,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA,CAAA;AAC/D,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,GACRL,eAAK,CAAAJ,gBAAA,CAAA,EAAA,EAAA,IAAA,CAAA,EAAL,EAAW,MAAA,EAAQS,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,KAAUL,qCACvB,IADuB,CAAA,EAAA;AAAA,IAE1B,YAAY,IAAK,CAAA,UAAA,GACb,SACE,GAAAA,eAAA,CAAAJ,gBAAA,CAAA,EAAA,EACK,KAAK,UADV,CAAA,EAAA;AAAA,MAEE,OAAS,EAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,IAAIS,sBAAW,CAAA;AAAA,KAClD,CAAA,GACA,KAAK,UACP,GAAA,KAAA,CAAA;AAAA,UACC,EAAC,CAAA;AAEZ,CAAA;;AC/wBO,MAAMuB,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,OAAI,CAAA,EAAE,GAAK,EAAA,GAAA,EAAK,CAAA,CAAA;AAAA,GACxB;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,EAAAzB,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,IAAI,GAAA,CAAA,IAAA,CAAK,OAAO,GAAI,CAAA,GAAA,CAAI,MAAM,EAAE,MAAA,EAAQ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACvC,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;;;;;;;;;;;;;;;;;;;;;ACmDO,MAAM,wBAA2B,GAAA,CACtC,EACA,EAAA,EAAA,EACA,MACoB,KAAA;AACpB,EAAA,MAAM,UAAU,IAAI0B,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,SAAA,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;AAGO,MAAM,SAAsC,CAAA;AAAA,EA0GjD,WAAA,CACE,SACA,EAAA,WAAA,EACA,EAEc,EAAA;AACd,IAAA,MAAM,UACJ,CAAC,WAAA,IAAe,OAAO,WAAgB,KAAA,UAAA,GAAa,EAAK,GAAA,WAAA,CAAA;AAC3D,IAAA,MAAM,EACJ,GAAA,OAAO,WAAgB,KAAA,UAAA,GAAa,WAAc,GAAA,EAAA,CAAA;AAGpD,IAAA,OAAOrB,cAAY,IAAM,EAAA,IAAA,CAAK,EAAI,EAAA,SAAA,EAAW,SAAS,EAAE,CAAA,CAAA;AAAA,GAC1D;AAAA,EAwBA,SAAA,CACE,SACA,EAAA,WAAA,EACA,EAEc,EAAA;AACd,IAAA,MAAM,UACJ,CAAC,WAAA,IAAe,OAAO,WAAgB,KAAA,UAAA,GAAa,EAAK,GAAA,WAAA,CAAA;AAC3D,IAAA,MAAM,EACJ,GAAA,OAAO,WAAgB,KAAA,UAAA,GAAa,WAAc,GAAA,EAAA,CAAA;AAGpD,IAAA,OAAOA,cAAY,IAAM,EAAA,CAAC,KAAK,EAAI,EAAA,SAAA,EAAW,SAAS,EAAE,CAAA,CAAA;AAAA,GAC3D;AAAA,EAwCA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,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;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,EA2BA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,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;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,EA6CA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,QAAA,CAAS,WAAmB,KAAkC,EAAA;AAC5D,IAAA,OAAO,QAAS,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,GACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAA,CAAU,WAAmB,KAAkC,EAAA;AAC7D,IAAA,OAAO,SAAS,IAAM,EAAA,CAAC,IAAK,CAAA,EAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,GAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,aAAA,CAAc,WAAmB,UAA0C,EAAA;AACzE,IAAA,OAAO,aAAc,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,WAAW,UAAU,CAAA,CAAA;AAAA,GAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAA,CAAe,WAAmB,UAA0C,EAAA;AAC1E,IAAA,OAAO,cAAc,IAAM,EAAA,CAAC,IAAK,CAAA,EAAA,EAAI,WAAW,UAAU,CAAA,CAAA;AAAA,GAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,aAAa,UAAmC,EAAA;AAC9C,IAAA,OAAOsB,cAAa,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,UAAU,CAAA,CAAA;AAAA,GAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,UAAmC,EAAA;AAC5C,IAAA,OAAOA,cAAa,CAAA,IAAA,EAAM,CAAC,IAAA,CAAK,IAAI,UAAU,CAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,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;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,EA4BA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,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;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,EAiCA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,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;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,EAkEA,eAAA,CACE,MACA,OACe,EAAA;AACf,IAAA,OAAOC,iBAAgB,CAAA,IAAA,EAAM,IAAK,CAAA,EAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,GACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAA,CACE,MACA,OACe,EAAA;AACf,IAAA,OAAOA,kBAAgB,IAAM,EAAA,CAAC,IAAK,CAAA,EAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,GACtD;AAAA,EA4EA,UAAA,CAAW,SAAiB,IAAgC,EAAA;AAC1D,IAAA,MAAM,CAAC,OAAA,EAAS,GAAG,CAAA,GAAI,IAAK,CAAA,MAAA,KAAW,CAAI,GAAA,IAAA,GAAO,CAACxB,sBAAA,EAAa,IAAK,CAAA,CAAC,CAAC,CAAA,CAAA;AAEvE,IAAO,OAAAe,YAAA;AAAA,MACL,IAAA;AAAA,MACA,IAAK,CAAA,EAAA;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAqBA,QAAA,CAAS,SAAiB,IAAgC,EAAA;AACxD,IAAA,MAAM,CAAC,OAAA,EAAS,GAAG,CAAA,GAAI,IAAK,CAAA,MAAA,KAAW,CAAI,GAAA,IAAA,GAAO,CAACf,sBAAA,EAAa,IAAK,CAAA,CAAC,CAAC,CAAA,CAAA;AAEvE,IAAO,OAAAe,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,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;AASA,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,GAAA5B,eAAA,CAAAJ,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;AAKA,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;AAKA,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;AAKA,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;AAKA,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;AAKA,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;AAKA,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;AAKA,MAAMqC,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;AAKA,MAAMC,iBAAkB,GAAA,OACtB,SACA,EAAA,EAAA,EACA,MACA,OACkB,KAAA;AAClB,EAAA,MAAM,GAA2B,GAAAtC,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;AAKA,MAAMuC,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,GAAAvC,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,IAAIW,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;AAKA,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,GAAAxC,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,EACEQ,uBAAY,GAAI,CAAA,SAAS,CAC3B,CAAA,CAAA,GAAA,EAAA,CAAA,EAEJ,IAAI,OACA,GAAA,CAAA;AAAA,QAAA,EACA,GAAI,CAAA,OAAA,CAAQ,KAAM,CAAA,EAAE,MAAO,EAAC,CAC5B,CAAA,CAAA,GAAA,EAAA,CAAA,EACH,GAAI,CAAA,OAAA,IAAW,GAAI,CAAA,KAAA,GAAQ,OAAO,EAAK,CAAA,EAAA;AAAA,MACxC,IAAI,OAAW,IAAA,UAAA;AAAA,MACf,GAAA,CAAI,SAAS,CAAS,MAAA,EAAA,GAAA,CAAI,MAAM,KAAM,CAAA,EAAE,QAAQ,CAAA,CAAA,CAAA;AAAA,KAE/C,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;AAKA,MAAMiC,iBAAkB,GAAA,OACtB,SACA,EAAA,EAAA,EACA,MACA,OACkB,KAAA;AAClB,EAAA,MAAM,CAAC,MAAA,EAAQ,aAAa,CAAA,GAAI,0BAA0B,IAAI,CAAA,CAAA;AAE9D,EAAA,MAAM,GAA2B,GAAAzC,gBAAA,CAAA;AAAA,IAC/B,IAAM,EAAA,WAAA;AAAA,IACN,MAAA,EAAQ,KAAK,QAAW,GAAA,MAAA;AAAA,IACxB,MAAA;AAAA,IACA,IAAM,EAAA,aAAA;AAAA,GACH,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,CACN,gBAAA,EAAA,GAAA,CAAI,iBAAoB,GAAA,gBAAA,GAAmB,EACzC,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;AAEJ,IAAA,IAAI,IAAI,YAAc,EAAA;AACpB,MAAS,KAAA,IAAA,CAAA,KAAA,EAAQ,mBAAoB,CAAA,GAAA,CAAI,YAAY,CAAA,CAAA,CAAA,CAAA;AAAA,KAChD,MAAA;AACL,MAAA,MAAM,SAAmB,EAAC,CAAA;AAC1B,MAAA,IAAI,GAAI,CAAA,MAAA;AAAQ,QAAO,MAAA,CAAA,IAAA,CAAK,CAAa,UAAA,EAAA,GAAA,CAAI,MAAS,CAAA,CAAA,CAAA,CAAA,CAAA;AACtD,MAAA,IAAI,GAAI,CAAA,SAAA;AAAW,QAAO,MAAA,CAAA,IAAA,CAAK,CAAiB,cAAA,EAAA,GAAA,CAAI,SAAY,CAAA,CAAA,CAAA,CAAA,CAAA;AAChE,MAAA,IAAI,GAAI,CAAA,OAAA;AAAS,QAAO,MAAA,CAAA,IAAA,CAAK,CAAe,YAAA,EAAA,GAAA,CAAI,OAAU,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1D,MAAA,IAAI,GAAI,CAAA,QAAA;AAAU,QAAO,MAAA,CAAA,IAAA,CAAK,CAAc,WAAA,EAAA,GAAA,CAAI,QAAU,CAAA,CAAA,CAAA,CAAA;AAC1D,MAAA,IAAI,IAAI,aAAkB,KAAA,KAAA,CAAA;AACxB,QAAO,MAAA,CAAA,IAAA,CAAK,CAAmB,gBAAA,EAAA,GAAA,CAAI,aAAe,CAAA,CAAA,CAAA,CAAA;AACpD,MAAA,IAAI,GAAI,CAAA,OAAA;AAAS,QAAO,MAAA,CAAA,IAAA,CAAK,CAAc,WAAA,EAAA,GAAA,CAAI,OAAU,CAAA,CAAA,CAAA,CAAA,CAAA;AAEzD,MAAS,KAAA,IAAA,CAAA;AAAA,EAAQ,EAAA,MAAA,CAAO,KAAK,OAAO,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAAA,KACtC;AAAA,GACK,MAAA;AACL,IAAQ,KAAA,GAAA,CAAA,cAAA,EACN,IAAI,YAAe,GAAA,YAAA,GAAe,MAChC,UAAa,CAAA,EAAA,GAAA,CAAI,UAAU,CAAa,QAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAC9C;AAEA,EAAM,MAAA,SAAA,CAAU,QAAQ,KAAM,CAAA;AAAA,IAC5B,IAAM,EAAA,KAAA;AAAA,GACP,CAAA,CAAA;AAED,EAAU,SAAA,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AACjC,CAAA,CAAA;AAQA,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;;ACz+CO,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,KAAqBoC,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,GAASpC,gBAAK,CAAA,EAAA,EAAA,MAAA,CAAA,CAAA;AACd,EAAA,MAAM,KAAQ,GAAA,MAAM,aAAc,CAAA,MAAA,EAAQ,EAAE,CAAA,CAAA;AAE5C,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,IAAQa,kBAAQ,CAAA,OAAO,CAAG,EAAA;AACnC,IAAM,MAAA,OAAA,GAAU,IAAI6B,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,QAClB,QAAQ,MAAO,CAAA,MAAA;AAAA,OACjB,CAAA,CAAA,CAAA;AAEA,MAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AAAA,KACtB;AAEA,IAAA,OAAO,MAAO,CAAA,cAAA,CAAA;AAAA,GAChB;AACF,EAAA;AAIO,MAAM,cAA4D,GAAC;AAG1E,MAAM,KAAQ,GAAA;AAAA,EACZ,IAAM,EAAA,OAAA;AAAA,EACN,MAAQ,EAAAC,qBAAA;AACV,CAAA,CAAA;AAQA,MAAM,mBAAmB,OACvB,EAAA,EACA,IACA,IACA,EAAA,MAAA,EACA,SACA,mBACG,KAAA;AA1IL,EAAA,IAAA,EAAA,CAAA;AA2IE,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,MAAM,MAAA,MAAA,GAAU,MAAM,IAAA,CAAK,IAAK,EAAA,CAAA;AAMhC,MAAA,MAAM,QAAW,GAAA,CAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,OAAW,KAAA/B,kBAAA,CAAQ,OAAO,OAAO,CAAA,CAAA;AAE1D,MAAI,IAAA,MAAA,CAAO,mBAAuB,IAAA,CAAC,QAAU,EAAA;AAC3C,QAAA,MAAM,IAAI,WAAA;AAAA,UACR,+BAA+B,IAAK,CAAA,IAAA,CAAA,UAAA,CAAA;AAAA,SACtC,CAAA;AAAA,OACF;AAEA,MAAA,OAAA,GAAU,YAAY,iBAAkB,EAAA,CAAA;AACxC,MAAY,WAAA,CAAA,IAAA,CAAK,IAAI,CAAI,GAAA,OAAA,CAAA;AAAA,KAC3B;AAEA,IAAA,MAAMgC,GAAK,GAAA,wBAAA,CAA6B,EAAI,EAAA,EAAA,EAAI,MAAM,CAAA,CAAA;AAEtD,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,MAClB,QAAQ,MAAO,CAAA,MAAA;AAAA,KACjB,CAAA,CAAA,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAUa,MAAA,OAAA,GAAU,CACrB,OAAA,EACA,MACA,EAAA,IAAA,GAAiB,EAAC,KACA,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,IAAI,EAAA;AAQpD,MAAA,QAAA,GAAW,CACtB,OAAA,EACA,MACA,EAAA,IAAA,GAAiB,EAAC,KACA,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,KAAK,EAAA;AAO3D,MAAM,OAAO,OAClB,OAAA,EACA,MACA,EAAA,IAAA,GAAiB,EACC,KAAA;AAlOpB,EAAA,IAAA,EAAA,CAAA;AAmOE,EAAA,MAAM,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,KAAK,CAAA,CAAA;AAIpD,EAAA,KAAA,MAAW,QAAQ,WAAa,EAAA;AAC9B,IAAY,CAAA,EAAA,GAAA,WAAA,CAAA,IAAI,MAAhB,IAAmB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,EAAA,CAAA;AAAA,GACrB;AAEA,EAAA,MAAM,iBAAkB,CAAA,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AACrD;;ACjOA,MAAM,OAAA,GAAU,OACd,OAAA,EACA,GAGG,KAAA;AACH,EAAM,MAAA,EAAA,GAAK,IAAIH,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,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,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,IAAW7B,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,CAAoB,iBAAA,EAAA,QAAA,CAAA,CAAA,EAAY,IAAO,GAAA,CAAA,QAAA,EAAW,IAAU,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,OACrE;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;;AClJO,MAAM,kBAAqB,GAAA,OAChC,MACA,EAAA,OAAA,EACA,MACA,OACG,KAAA;AAfL,EAAA,IAAA,EAAA,CAAA;AAgBE,EAAA,MAAMiC,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,EAAWL,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;;ACkFA,MAAM,YAAe,GAAA,CAAC,KACpB,KAAA,CAAA,EAAG,KAAuB,CAAA,eAAA,EAAA,KAAA,CAAA,wBAAA,CAAA,CAAA;AAE5B,MAAM,OAAU,GAAA,CAAC/B,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,UAA4C,GAAA;AAChD,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;AAAA,EAEA,MAAM,aAAkD,GAAA;AACtD,IAAA,MAAM,EAAE,IAAK,EAAA,GAAI,MAAM,IAAA,CAAK,GAAG,KAA6B,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAWxD,aAAa,WAAW,CAAA,CAAA;AAAA,IAC3B,CAAA,CAAA,CAAA;AAED,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvkBA,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;AA2Ba,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,EAAW,KAAA,MAAA,EAAA,IAAM,KAAK,UAAY,EAAA;AAChC,IAAA,GAAA,CAAI,IAAK,CAAA,aAAA,CAAAZ,gBAAA,CAAA;AAAA,MACP,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,KAAA,EACL,EAHI,CAAA,EAAA;AAAA,MAIP,QAAQ,EAAG,CAAA,MAAA,KAAW,GAAI,CAAA,aAAA,GAAgB,SAAY,EAAG,CAAA,MAAA;AAAA,KAC1D,CAAA,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,EAASiD,yBAAsB,CAAA,EAAA,CAAG,OAAO,CAAA;AAAA,MACzC,KAAA,EAAO,GAAG,KAAQ,GAAAhB,OAAA,CAAI,EAAE,GAAK,EAAA,EAAA,CAAG,KAAM,EAAC,CAAI,GAAA,KAAA,CAAA;AAAA,KAC5C,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,CAAAjC,gBAAA,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,IACA,UAAA;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,IACd,GAAG,aAAc,EAAA;AAAA,GAClB,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,IACA,UAAA;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,EAAWQ,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,GA3RJ,GAoRE,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;AA3RJ,EAAA,IAAA0C,GAAAC,EAAAA,GAAAA,CAAAA;AAuSE,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;AAxWnB,MAAA,IAAA,EAAA,CAAA;AAyWM,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,KAAA,EAAO,QAAQvB,OAAI,CAAA,EAAE,KAAK,KAAM,CAAA,UAAA,EAAY,CAAI,GAAA,KAAA,CAAA;AAAA,SAClD,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,mCAC9B,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,OAAOwB,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;AAte3B,EAAA,IAAA,EAAA,CAAA;AAueE,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,IAAA,MAAA,CAAO,QAAQxB,OAAI,CAAA,EAAE,GAAK,EAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAAA,GAC9C;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;AAzhBL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA0hBE,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;AA/hBxE,EAAA,IAAA,EAAA,CAAA;AAgiBE,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,CAAAyB,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,KAAKzB,OAAI,CAAA,EAAE,GAAK,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,IAC1B,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;AA7kBnB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA8kBE,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,CAAAjC,gBAAA,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,mCACtC,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,MAAA,MAAA,CAAO,KAAK,KAAQ,GAAAiC,OAAA,CAAI,EAAE,GAAA,EAAK,OAAO,CAAA,CAAA;AAAA,KACxC;AAEA,IAAM,MAAA,aAAA,GAAgByB,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;;AC7oBa,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,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,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,EAAA,GAAA,CAAI,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACnE,IAAA,IAAI,GAAI,CAAA,KAAA;AAAO,MAAA,KAAA,CAAM,KAAK,CAAU,OAAA,EAAA,GAAA,CAAI,KAAM,CAAA,MAAA,CAAO,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAE7D,IAAAoD,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,eAAA,GAAkB,CAAC,GAAqC,KAAA;AAC5D,EAAA,MAAM,SAAmB,EAAC,CAAA;AAC1B,EAAA,IAAI,GAAI,CAAA,MAAA;AAAQ,IAAO,MAAA,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,GAAA,CAAI,MAAU,CAAA,EAAA,CAAA,CAAA,CAAA;AACtD,EAAA,IAAI,GAAI,CAAA,SAAA;AAAW,IAAO,MAAA,CAAA,IAAA,CAAK,CAAe,YAAA,EAAA,GAAA,CAAI,SAAa,CAAA,EAAA,CAAA,CAAA,CAAA;AAC/D,EAAA,IAAI,GAAI,CAAA,OAAA;AAAS,IAAO,MAAA,CAAA,IAAA,CAAK,CAAa,UAAA,EAAA,GAAA,CAAI,OAAW,CAAA,EAAA,CAAA,CAAA,CAAA;AACzD,EAAA,IAAI,GAAI,CAAA,QAAA;AAAU,IAAO,MAAA,CAAA,IAAA,CAAK,CAAc,WAAA,EAAA,GAAA,CAAI,QAAY,CAAA,EAAA,CAAA,CAAA,CAAA;AAC5D,EAAA,IAAI,GAAI,CAAA,aAAA;AAAe,IAAO,MAAA,CAAA,IAAA,CAAK,CAAkB,eAAA,EAAA,GAAA,CAAI,aAAgB,CAAA,CAAA,CAAA,CAAA,CAAA;AACzE,EAAA,IAAI,GAAI,CAAA,OAAA;AAAS,IAAO,MAAA,CAAA,IAAA,CAAK,CAAa,UAAA,EAAA,GAAA,CAAI,OAAW,CAAA,EAAA,CAAA,CAAA,CAAA;AAEzD,EAAO,OAAA;AAAA,IACL,CAAA,yBAAA,EAA4B,iBAAiB,GAAG,CAAA,CAAA,GAAA,CAAA;AAAA,IAChD,MAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AACF,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,EAAKC,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,MAAAF,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,CAACG,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,EAAAL,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,IAAAlD,mBAAA,CAAS,GAAG,CAAA,IACZ,IAAI,IAAS,KAAA,OAAA,CAAA;AAEjB,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,CACxB,MACA,EAAA,GAAA,EACA,IACG,KAAA;AAxOL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyOE,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,GAAO+C,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,GAAGS,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,EAAU,KAAK,KAAM,CAAA,MAAA,CAAO,GAAG,CAAK,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GACnE;AAEA,EAAO,OAAA;AAAA,IACL,CAA0B,uBAAA,EAAA,KAAA,CAAA,GAAA,CAAA;AAAA,IAC1BC,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,IAAAP,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,OAAS,EAAA;AACpB,IAAM,MAAA,GAAA,GAAM,IAAI,GAAI,CAAA,IAAA,CAAA;AACpB,IAAI,IAAA,GAAA,CAAA;AACJ,IAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,MAAM,GAAA,GAAA,GAAA,CAAA;AAAA,KACD,MAAA;AACL,MAAM,GAAA,GAAA,EAAA,CAAA;AACN,MAAM,MAAA,KAAA,GAAQ,IAAI,CAAC,CAAA,CAAA;AACnB,MAAM,MAAA,IAAA,GAAO,MAAM,MAAS,GAAA,CAAA,CAAA;AAC5B,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,EAAM,CAAK,EAAA,EAAA;AAC7B,QAAA,GAAA,IAAO,MAAM,CAAC,CAAA,GAAI,CAAM,GAAA,EAAA,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OACnC;AACA,MAAA,GAAA,IAAO,MAAM,IAAI,CAAA,CAAA;AAAA,KACnB;AAEA,IAAQA,kBAAA,CAAA,IAAA,EAAMQ,wBAAc,CAAA,GAAG,CAAC,CAAA,CAAA;AAAA,GAC3B,MAAA;AACL,IAAAR,kBAAA,CAAQ,IAAM,EAAA,GAAA,CAAI,GAAI,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,GACpC;AAEA,EAAAA,kBAAA,CAAQ,MAAM,IAAI,CAAA,CAAA;AAClB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;;ACnUa,MAAA,eAAA,GAAkB,OAC7B,OAAA,EACA,MACkB,KAAA;AAZpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAaE,EAAM,MAAA,OAAA,GAAU,IAAIlB,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,MAClB,QAAQ,MAAO,CAAA,MAAA;AAAA,KACjB,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,IAClB,QAAQ,MAAO,CAAA,MAAA;AAAA,GACjB,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;;AC9Ea,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,GAAA7B,kBAAA,CAAQ,OAAO,CAAE,CAAA,GAAA;AAAA,MAAI,CAAC,SAC5BuB,YAAS,CAAA,EAAE,SAAS,IAAIM,WAAA,CAAQ,IAAI,CAAA,EAAG,CAAA;AAAA,KACzC,CAAA;AAEA,IAAA,MAAM,GAAM,GAAA,MAAM2B,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,MAAAP,MAAA,GAAOuE,SAAK,CAAA,OAAA,EAAS,IAAI,CAAA,CAAA;AAC/B,MAAM,MAAA,IAAA,GAAO,MAAMC,aAAA,CAAKxE,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;;;;;;;;;;;;;;;;;;ACHa,MAAA,MAAA,GAAoB,CAC/B,OAAA,EACA,aAAgB,GAAA,EAChB,EAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CACxB,KAAA;AACH,EAAM,MAAA,MAAA,GAAS,oBAAoB,aAAa,CAAA,CAAA;AAChD,EAAM,MAAA,OAAA,GAAU,WAAW,OAAS,EAAA,MAAA,EAAQ,IAAI,CAAE,CAAA,KAAA,CAAM,CAAC,GAAQ,KAAA;AAjEnE,IAAA,IAAA,EAAA,CAAA;AAkEI,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,GACP,CAAA,CAAA;AAED,EAAO,OAAA,MAAA,CAAO,OAAO,MAAQ,EAAA;AAAA,IAC3B,OAAA;AAAA,GACD,CAAA,CAAA;AACH,EAAA;AAEA,MAAA,CAAO,IAAQ,GAAA,CAAC,OAAS,EAAA,aAAA,GAAgB,EAAO,KAAA;AAC9C,EAAM,MAAA,MAAA,GAAS,oBAAoB,aAAa,CAAA,CAAA;AAEhD,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,GAAA,CAAI,MAAgB,IAAM,EAAA;AACxB,MAAA,OAAO,WAAW,OAAS,EAAA,IAAA,GAAO,kCAAK,MAAW,CAAA,EAAA,IAAA,CAAA,GAAS,QAAQ,IAAI,CAAA,CAAA;AAAA,KACzE;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,SAAS,OAAO,EAAoB,EAAA;AAClC,EAAA,UAAA,CAAW,EAAE,CAAA,CAAA;AACb,EAAO,OAAA,EAAA,CAAA;AACT,CAAA;AAEA,MAAM,UAAA,GAAa,OACjB,OACA,EAAA,MAAA,EACA,OAAiB,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CACnB,KAAA;AAlGpB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAmGE,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,EAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,IAAM,MAAA,QAAA,CAAS,SAAS,MAAM,CAAA,CAAA;AAAA,GAChC,MAAA,IAAW,QAAQ,MAAQ,EAAA;AACzB,IAAM,MAAA,MAAA,CAAO,SAAS,MAAM,CAAA,CAAA;AAAA,GAC9B,MAAA,IAAW,QAAQ,OAAS,EAAA;AAC1B,IAAM,MAAA,OAAA,CAAQ,SAAS,MAAM,CAAA,CAAA;AAAA,GACpB,MAAA,IAAA,GAAA,KAAQ,IAAQ,IAAA,GAAA,KAAQ,SAAW,EAAA;AAC5C,IAAA,MAAM,QAAQ,OAAS,EAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GACnC,MAAA,IAAA,GAAA,KAAQ,MAAU,IAAA,GAAA,KAAQ,UAAY,EAAA;AAC/C,IAAA,MAAM,SAAS,OAAS,EAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GAC/C,MAAA,IAAW,QAAQ,MAAQ,EAAA;AACzB,IAAA,MAAM,KAAK,OAAS,EAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GAC3C,MAAA,IAAW,QAAQ,KAAO,EAAA;AACxB,IAAA,MAAM,QAAS,CAAA,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GACtC,MAAA,IAAW,QAAQ,MAAQ,EAAA;AACzB,IAAA,MAAM,gBAAgBc,kBAAQ,CAAA,OAAO,CAAE,CAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AAAA,GACxC,MAAA,IAAA,MAAA,CAAO,QAAS,CAAA,GAAG,CAAG,EAAA;AAC/B,IAAM,MAAA,MAAA,CAAO,QAAS,CAAA,GAAG,CAAE,CAAAA,kBAAA,CAAQ,OAAO,CAAA,EAAG,MAAQ,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GACzD,MAAA,IAAA,GAAA,KAAQ,KAAS,IAAA,GAAA,KAAQ,WAAa,EAAA;AAC/C,IAAO,CAAA,EAAA,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,GAAI,CAAA,IAAA,CAAA,CAAA;AAAA,GACrB;AAEA,EAAA,IACE,QAAQ,SACR,IAAA,GAAA,KAAQ,SACR,GAAQ,KAAA,WAAA,IACR,QAAQ,MACR,EAAA;AACA,IAAM,MAAA,sBAAA,CAAuB,SAAS,MAAM,CAAA,CAAA;AAAA,GAC9C;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;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, getStackTrace, 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';\nimport { pathToFileURL, fileURLToPath } from 'node:url';\n\ntype Db = DbResult<DefaultColumnTypes>;\n\ntype BaseTable<CT extends ColumnTypesBase> = {\n exportAs: string;\n getFilePath(): string;\n nowSQL?: string;\n\n new (): {\n types: CT;\n snakeCase?: boolean;\n language?: string;\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 migrations?: ModuleExportsRecord;\n recurrentPath: string;\n migrationsTable: string;\n snakeCase: boolean;\n language?: string;\n commands: Record<\n string,\n (\n options: AdapterOptions[],\n config: RakeDbConfig<CT>,\n args: string[],\n ) => void | Promise<void>\n >;\n noPrimaryKey?: NoPrimaryKeyOption;\n baseTable?: BaseTable<CT>;\n appCodeUpdater?: AppCodeUpdater;\n useCodeUpdater?: boolean;\n // throw if a migration doesn't have a default export\n forceDefaultExports?: boolean;\n import(path: string): Promise<unknown>;\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 ModuleExportsRecord = Record<string, () => Promise<unknown>>;\n\nexport type AppCodeUpdaterParams = {\n options: AdapterOptions;\n basePath: string;\n cache: object;\n logger: QueryLogOptions['logger'];\n baseTable: { getFilePath(): string; exportAs: string };\n import(path: string): Promise<unknown>;\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\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 // 0 is getStackTrace file, 1 is this function, 2 is a caller in rakeDb.ts, 3 is the user db script file.\n // bundlers can bundle all files into a single file, or change file structure, so this must rely only on the caller index.\n let filePath = getStackTrace()?.[3].getFileName();\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 if (filePath.startsWith('file://')) {\n filePath = fileURLToPath(filePath);\n }\n\n const ext = path.extname(filePath);\n if (ext !== '.ts' && ext !== '.js' && ext !== '.mjs') {\n throw new Error(\n `Add a .ts suffix to the \"${path.basename(filePath)}\" when calling it`,\n );\n }\n\n result.basePath = path.dirname(filePath);\n result.dbScript = path.basename(filePath);\n }\n\n if ('migrationsPath' in result && !path.isAbsolute(result.migrationsPath)) {\n result.migrationsPath = path.resolve(\n result.basePath,\n result.migrationsPath,\n );\n }\n\n if ('recurrentPath' in result && !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.types || defaultColumnTypes;\n if (proto.snakeCase) result.snakeCase = true;\n if (proto.language) result.language = proto.language;\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 const { schema } = db;\n if (schema && schema !== 'public') {\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 throw err;\n }\n }\n }\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 MigrationItem = {\n path: string;\n version: string;\n /**\n * Function that loads the migration content,\n * can store lazy import of a migration file.\n * Promise can return `{ default: x }` where `x` is a return of `change` or an array of such returns.\n */\n load(): Promise<unknown>;\n};\n\n// If the config has a `migrations` object, it will be returned as array of migration items.\n// If `up` is false, will reverse the resulting array.\n// Otherwise, it will scan directory which is set in `migrationPath` and convert files into migration items.\n// `up` value determines sorting of files: `true` for ascending, `false` for descending.\nexport const getMigrations = async (\n {\n migrations,\n ...config\n }: Pick<\n RakeDbConfig,\n 'basePath' | 'migrations' | 'migrationsPath' | 'import'\n >,\n up: boolean,\n): Promise<MigrationItem[]> => {\n return migrations\n ? getMigrationsFromConfig({ ...config, migrations }, up)\n : getMigrationsFromFiles(config, up);\n};\n\n// Converts user-provided migrations object into array of migration items.\nfunction getMigrationsFromConfig(\n config: { basePath: string; migrations: ModuleExportsRecord },\n up: boolean,\n): MigrationItem[] {\n const result: MigrationItem[] = [];\n\n const { migrations, basePath } = config;\n for (const key in migrations) {\n result.push({\n path: path.resolve(basePath, key),\n version: getVersion(path.basename(key)),\n load: migrations[key],\n });\n }\n\n if (!up) result.reverse();\n\n return result;\n}\n\n// Scans files under `migrationsPath` to convert files into migration items.\nasync function getMigrationsFromFiles(\n config: Pick<RakeDbConfig, 'migrationsPath' | 'import'>,\n up: boolean,\n): Promise<MigrationItem[]> {\n const { migrationsPath, import: imp } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n files = files.filter((file) => path.basename(file).includes('.'));\n files = (up ? sortAsc : sortDesc)(files);\n\n return files.map((file) => {\n checkExt(file);\n\n const filePath = path.resolve(migrationsPath, file);\n return {\n path: filePath,\n version: getVersion(file),\n async load() {\n try {\n await imp(filePath);\n } catch (err) {\n // throw if unknown error\n if (\n (err as { code: string }).code !== 'ERR_UNSUPPORTED_ESM_URL_SCHEME'\n )\n throw err;\n\n // this error happens on windows in ESM mode, try import transformed url\n await imp(pathToFileURL(filePath).pathname);\n }\n },\n };\n });\n}\n\n// Restrict supported file extensions to `.ts`, `.js`, and `.mjs`.\nfunction checkExt(filePath: string): void {\n const ext = path.extname(filePath);\n if (ext !== '.ts' && ext !== '.js' && ext !== '.mjs') {\n throw new Error(\n `Only .ts, .js, and .mjs files are supported for migration, received: ${path}`,\n );\n }\n}\n\n// Extract a 14-chars long timestamp from a beginning of a file name.\nfunction getVersion(path: string): string {\n const timestampMatch = path.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${path}`,\n );\n }\n\n return timestampMatch[1];\n}\n\n// Just a default ascending sort.\nexport const sortAsc = (arr: string[]) => arr.sort();\n\n// Reverse sort order, higher goes first.\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\n// Join array of strings into a camelCased string.\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 quoteNameFromString = (string: string) => {\n const [schema, name] = getSchemaAndTableFromName(string);\n return quoteWithSchema({ schema, 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 { DbMigration } from './migration';\nimport { ColumnTypesBase } from 'orchid-core';\n\nlet currentChanges: ChangeCallback[] = [];\n\nexport type ChangeCallback<CT extends ColumnTypesBase = ColumnTypesBase> = (\n db: DbMigration<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, quote, TableData } from 'pqb';\nimport {\n ColumnTypeBase,\n ForeignKeyTable,\n isRawSQL,\n RawSQLBase,\n Sql,\n toArray,\n toSnakeCase,\n} from 'orchid-core';\nimport { ColumnComment } from './migration';\nimport {\n getSchemaAndTableFromName,\n joinColumns,\n quoteNameFromString,\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 ${quoteNameFromString(item.data.collate)}`);\n }\n\n if (item.data.identity) {\n line.push(identityToSql(item.data.identity));\n } else if (item.data.generated) {\n line.push(\n `GENERATED ALWAYS AS (${item.data.generated.toSQL({ values })}) STORED`,\n );\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 const def = encodeColumnDefault(item.data.default, values, item);\n if (def !== null) line.push(`DEFAULT ${def}`);\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 encodeColumnDefault = (\n def: unknown,\n values: unknown[],\n column?: ColumnTypeBase,\n) => {\n if (def !== undefined && def !== null && typeof def !== 'function') {\n if (isRawSQL(def)) {\n return def.toSQL({ values });\n } else {\n return quote(column?.encodeFn ? column.encodeFn(def) : def);\n }\n }\n\n return null;\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: RawSQLBase, values: unknown[]) => {\n return `CHECK (${check.toSQL({ 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 language?: string,\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 const using = options.using || (options.tsVector && 'GIN');\n if (using) {\n sql.push(`USING ${using}`);\n }\n\n const columnsSql: string[] = [];\n\n const lang =\n options.tsVector && options.languageColumn\n ? `\"${options.languageColumn}\"`\n : options.language\n ? typeof options.language === 'string'\n ? `'${options.language}'`\n : options.language.toSQL({ values })\n : `'${language || 'english'}'`;\n\n let hasWeight =\n options.tsVector && columns.some((column) => !!column.weight);\n\n for (const column of columns) {\n const columnSql: string[] = [\n 'column' in column ? `\"${column.column}\"` : `(${column.expression})`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE ${quoteNameFromString(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 let sql = columnSql.join(' ');\n\n if (hasWeight) {\n sql = `to_tsvector(${lang}, coalesce(${sql}, ''))`;\n\n if (column.weight) {\n hasWeight = true;\n sql = `setweight(${sql}, '${column.weight}')`;\n }\n }\n\n columnsSql.push(sql);\n }\n\n let columnList = columnsSql.join(hasWeight ? ' || ' : ', ');\n\n if (!hasWeight && options.tsVector) {\n if (columnsSql.length > 1) columnList = `concat_ws(' ', ${columnList})`;\n columnList = `to_tsvector(${lang}, ${columnList})`;\n }\n\n sql.push(`(${columnList})`);\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 isRawSQL(options.where)\n ? options.where.toSQL({ 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 DbMigration,\n Migration,\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, emptyObject, 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: Migration<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 const language =\n 'language' in options ? options.language : migration.options.language;\n\n const types = Object.assign(\n Object.create(migration.columnTypes),\n tableMethods,\n );\n types[snakeCaseKey] = snakeCase;\n\n const shape = !fn\n ? emptyObject\n : getColumnTypes(types, fn, migration.options.baseTable?.nowSQL, language);\n\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 fn && validatePrimaryKey(ast);\n\n const queries = astToQueries(ast, snakeCase, language);\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 DbMigration)(\n tableName,\n shape,\n {\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : undefined,\n snakeCase: options.snakeCase,\n },\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 language?: string,\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${\n ast.dropIfExists ? ' IF EXISTS' : ''\n } ${quoteWithSchema(ast)}${ast.dropMode ? ` ${ast.dropMode}` : ''}`,\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${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } ${quoteWithSchema(ast)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast, indexes, language),\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 EnumColumn,\n UnknownColumn,\n columnTypes,\n} from 'pqb';\nimport {\n EmptyObject,\n emptyObject,\n ColumnTypesBase,\n snakeCaseKey,\n toSnakeCase,\n deepCompare,\n consumeColumnName,\n RawSQLBase,\n setDefaultLanguage,\n ColumnTypeBase,\n} from 'orchid-core';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport {\n getSchemaAndTableFromName,\n makePopulateEnumQuery,\n quoteNameFromString,\n quoteWithSchema,\n} from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n encodeColumnDefault,\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?: RawSQLBase;\n usingDown?: RawSQLBase;\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 | RawSQLBase): 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: Migration<CT>,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n): Promise<void> => {\n const snakeCase =\n 'snakeCase' in options ? options.snakeCase : migration.options.snakeCase;\n const language =\n 'language' in options ? options.language : migration.options.language;\n\n setDefaultLanguage(language);\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(migration.columnTypes) as TableChanger<CT>;\n Object.assign(tableChanger, tableChangeMethods);\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, language);\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 let item = changeData[key];\n if (item instanceof ColumnTypeBase) {\n item = add(item);\n }\n\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 language?: string,\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\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 let changeType = false;\n if (to.type && (from.type !== to.type || from.collate !== to.collate)) {\n changeType = true;\n\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 ${quoteNameFromString(to.collate)}` : ''\n }${item.using ? ` USING ${item.using.toSQL({ 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 = encodeColumnDefault(to.default, values, to.column);\n\n // when changing type, need to first drop an existing default before setting a new one\n if (changeType && value !== null) {\n alterTable.push(`ALTER COLUMN \"${name}\" DROP DEFAULT`);\n }\n\n const expr = value === null ? '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 (${to.check.toSQL({\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, language));\n queries.push(...indexesToQuery(true, ast, addIndexes, language));\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 { Migration } from './migration';\nimport { ColumnTypesBase, RawSQLBase, singleQuote, Sql } from 'orchid-core';\nimport { RakeDbAst } from '../ast';\nimport { raw } from 'pqb';\n\nexport const createView = async <CT extends ColumnTypesBase>(\n migration: Migration<CT>,\n up: boolean,\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawSQLBase,\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 | RawSQLBase,\n): RakeDbAst.View => {\n if (typeof sql === 'string') {\n sql = raw({ 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 (${ast.sql.toSQL({ 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 Adapter,\n DefaultColumnTypes,\n raw,\n} from 'pqb';\nimport {\n ColumnTypesBase,\n emptyObject,\n MaybeArray,\n QueryInput,\n RawSQLBase,\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 quoteNameFromString,\n} from '../common';\nimport { RakeDbAst } from '../ast';\nimport { columnTypeToSql } from './migrationUtils';\nimport { createView } from './createView';\n\n// Drop mode to use when dropping various database entities.\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\n// Options for creating a table.\nexport type TableOptions = {\n // create the table only if it not exists already\n createIfNotExists?: boolean;\n // drop the table only if it exists\n dropIfExists?: boolean;\n // Drop mode to use when dropping the table.\n dropMode?: DropMode;\n // Create a table with a database comment on it.\n comment?: string;\n // Ignore the absence of a primary key. Will throw otherwise.\n noPrimaryKey?: boolean;\n // Translate columns name into snake case\n snakeCase?: boolean;\n language?: string;\n};\n\n// Simplified text column type that doesn't require `min` and `max` arguments.\ntype TextColumnCreator = () => TextColumn;\n\n// Overridden column types to simplify and adapt some column types for a migration.\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\n// Create table callback\nexport type ColumnsShapeCallback<\n CT extends ColumnTypesBase,\n Shape extends ColumnsShape = ColumnsShape,\n> = (t: MigrationColumnTypes<CT> & { raw: typeof raw }) => Shape;\n\n// Options for changing a table\nexport type ChangeTableOptions = {\n snakeCase?: boolean;\n language?: string;\n comment?: string | [string, string] | null;\n};\n\n// Callback for a table change\nexport type ChangeTableCallback<CT extends ColumnTypesBase> = (\n t: TableChanger<CT>,\n) => TableChangeData;\n\n// DTO for column comments\nexport type ColumnComment = { column: string; comment: string | null };\n\n// Database adapter methods to perform queries without logging\nexport type SilentQueries = {\n // Query without logging\n silentQuery: Adapter['query'];\n // Query arrays without logging\n silentArrays: Adapter['arrays'];\n};\n\n// Combined queryable database instance and a migration interface\nexport type DbMigration<CT extends ColumnTypesBase = DefaultColumnTypes> =\n DbResult<CT> &\n Migration<CT> & {\n // Add `SilentQueries` to an existing `adapter` type in the `DbResult`\n adapter: SilentQueries;\n };\n\n// Constraint config, it can be a foreign key or a check\ntype ConstraintArg = {\n // Name of the constraint\n name?: string;\n // Foreign key options\n references?: [\n columns: [string, ...string[]],\n table: string,\n foreignColumn: [string, ...string[]],\n options: Omit<ForeignKeyOptions, 'name' | 'dropMode'>,\n ];\n // Database check raw SQL\n check?: RawSQLBase;\n // Drop mode to use when dropping the constraint\n dropMode?: DropMode;\n};\n\n/**\n * Creates a new `db` instance that is an instance of `pqb` with mixed in migration methods from the `Migration` class.\n * It overrides `query` and `array` db adapter methods to intercept SQL for the logging.\n *\n * @param tx - database adapter that executes inside a transaction\n * @param up - migrate or rollback\n * @param config - config of `rakeDb`\n */\nexport const createMigrationInterface = <CT extends ColumnTypesBase>(\n tx: TransactionAdapter,\n up: boolean,\n config: RakeDbConfig<CT>,\n): DbMigration<CT> => {\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 DbMigration;\n\n const { prototype: proto } = Migration;\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 }) as unknown as DbMigration<CT>;\n};\n\n// Migration interface to use inside the `change` callback.\nexport class Migration<CT extends ColumnTypesBase> {\n // Database adapter to perform queries with.\n public adapter!: TransactionAdapter;\n // The logger config.\n public log?: QueryLogObject;\n // Is migrating or rolling back.\n public up!: boolean;\n // `rakeDb` config.\n public options!: RakeDbConfig;\n // Collect objects that represents what was changed by a migration to pass it later to the `appCodeUpdater`.\n public migratedAsts!: RakeDbAst[];\n // Available column types that may be customized by a user.\n // They are pulled from a `baseTable` or a `columnTypes` option of the `rakeDb` config.\n public columnTypes!: CT;\n\n /**\n * `createTable` accepts a string for a table name, optional options, and a callback to specify columns.\n *\n * `dropTable` accepts the same arguments, it will drop the table when migrating and create a table when rolling back.\n *\n * To create an empty table, the callback with columns may be omitted.\n *\n * When creating a table within a specific schema, write the table name with schema name: `'schemaName.tableName'`.\n *\n * Returns object `{ table: TableInterface }` that allows to insert records right after creating a table.\n *\n * Options are:\n *\n * ```ts\n * type TableOptions = {\n * // create the table only if it not exists already\n * createIfNotExists?: boolean;\n *\n * // drop the table only if it exists\n * dropIfExists?: boolean;\n *\n * // used when reverting a `createTable`\n * dropMode?: 'CASCADE' | 'RESTRICT';\n *\n * // add a database comment on the table\n * comment?: string;\n *\n * // by default, it will throw an error when the table has no primary key\n * // set `noPrimaryKey` to `true` to bypass it\n * noPrimaryKey?: boolean;\n *\n * // override rakeDb `snakeCase` option for only this table\n * snakeCase?: boolean;\n * };\n * ```\n *\n * Example:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db, up) => {\n * // call `createTable` with options\n * await db.createTable(\n * 'table',\n * {\n * comment: 'Table comment',\n * dropMode: 'CASCADE',\n * noPrimaryKey: true,\n * },\n * (t) => ({\n * // ...\n * }),\n * );\n *\n * // call without options\n * const { table } = await db.createTable('user', (t) => ({\n * id: t.identity().primaryKey(),\n * email: t.text().unique(),\n * name: t.text(),\n * active: t.boolean().nullable(),\n * ...t.timestamps(),\n * }));\n *\n * // create records only when migrating up\n * if (up) {\n * // table is a db table interface, all query methods are available\n * await table.createMany([...data]);\n * }\n * });\n * ```\n *\n * @param tableName - name of the table to create\n * @param fn - create table callback\n */\n createTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn?: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n /**\n * See {@link createTable}\n *\n * @param tableName - name of the table to create\n * @param options - {@link TableOptions}\n * @param fn - create table callback\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 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 =\n !cbOrOptions || typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (\n typeof cbOrOptions === 'function' ? cbOrOptions : cb\n ) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n /**\n * Drop the table, create it on rollback. See {@link createTable}.\n *\n * @param tableName - name of the table to drop\n * @param fn - create table callback\n */\n dropTable<Table extends string, Shape extends ColumnsShape>(\n tableName: Table,\n fn?: ColumnsShapeCallback<CT, Shape>,\n ): Promise<CreateTableResult<Table, Shape>>;\n /**\n * Drop the table, create it on rollback. See {@link createTable}.\n *\n * @param tableName - name of the table to drop\n * @param options - {@link TableOptions}\n * @param fn - create table callback\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 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 =\n !cbOrOptions || typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (\n typeof cbOrOptions === 'function' ? cbOrOptions : cb\n ) as ColumnsShapeCallback<CT, Shape>;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n /**\n * `changeTable` accepts a table name, optional options, and a special callback with column changes.\n *\n * When changing a table within a specific schema, write the table name with schema name: `'schemaName.tableName'`.\n *\n * Options are:\n *\n * ```ts\n * type ChangeTableOptions = {\n * comment?:\n * | // add a comment to the table on migrating, remove a comment on rollback\n * string // change comment from first to second on migrating, from second to first on rollback\n * | [string, string] // remove a comment on both migrate and rollback\n * | null;\n *\n * // override rakeDb `snakeCase` option for only this table\n * snakeCase?: boolean;\n * };\n * ```\n *\n * The callback of the `changeTable` is different from `createTable` in the way that it expects columns to be wrapped in change methods such as `add`, `drop`, and `change`.\n *\n * @param tableName - name of the table to change (ALTER)\n * @param fn - change table callback\n */\n changeTable(tableName: string, fn: ChangeTableCallback<CT>): Promise<void>;\n /**\n * See {@link changeTable}\n *\n * @param tableName - name of the table to change (ALTER)\n * @param options - change table options\n * @param fn - change table callback\n */\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback<CT>,\n ): 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 /**\n * Rename a table:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.renameTable('oldTableName', 'newTableName');\n * });\n * ```\n *\n * @param from - rename the table from\n * @param to - rename the table to\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 /**\n * Add a column to the table on migrating, and remove it on rollback.\n *\n * `dropColumn` takes the same arguments, removes a column on migrate, and adds it on rollback.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addColumn('tableName', 'columnName', (t) =>\n * t.integer().index().nullable(),\n * );\n * });\n * ```\n *\n * @param tableName - name of the table to add the column to\n * @param columnName - name of the column to add\n * @param fn - function returning a type of the column\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 /**\n * Drop the schema, create it on rollback. See {@link addIndex}.\n *\n * @param tableName - name of the table to add the column to\n * @param columnName - name of the column to add\n * @param fn - function returning a type of the column\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 /**\n * Add an index to the table on migrating, and remove it on rollback.\n *\n * `dropIndex` takes the same arguments, removes the index on migrate, and adds it on rollback.\n *\n * The first argument is the table name, other arguments are the same as in [composite index](#composite-index).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addIndex(\n * 'tableName',\n * ['column1', { column: 'column2', order: 'DESC' }],\n * {\n * name: 'indexName',\n * },\n * );\n * });\n * ```\n *\n * @param tableName - name of the table to add the index for\n * @param columns - indexed columns\n * @param options - index options\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 /**\n * Drop the schema, create it on rollback. See {@link addIndex}.\n *\n * @param tableName - name of the table to add the index for\n * @param columns - indexed columns\n * @param options - index options\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 /**\n * Add a foreign key to a table on migrating, and remove it on rollback.\n *\n * `dropForeignKey` takes the same arguments, removes the foreign key on migrate, and adds it on rollback.\n *\n * Arguments:\n *\n * - table name\n * - column names in the table\n * - other table name\n * - column names in the other table\n * - options:\n * - `name`: constraint name\n * - `match`: 'FULL', 'PARTIAL', or 'SIMPLE'\n * - `onUpdate` and `onDelete`: 'NO ACTION', 'RESTRICT', 'CASCADE', 'SET NULL', or 'SET DEFAULT'\n *\n * The first argument is the table name, other arguments are the same as in [composite foreign key](#composite-foreign-key).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addForeignKey(\n * 'tableName',\n * ['id', 'name'],\n * 'otherTable',\n * ['foreignId', 'foreignName'],\n * {\n * name: 'constraintName',\n * match: 'FULL',\n * onUpdate: 'RESTRICT',\n * onDelete: 'CASCADE',\n * },\n * );\n * });\n * ```\n *\n * @param tableName - table name\n * @param columns - column names in the table\n * @param foreignTable - other table name\n * @param foreignColumns - column names in the other table\n * @param options - foreign key options\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 /**\n * Drop the schema, create it on rollback. See {@link addForeignKey}.\n *\n * @param tableName - table name\n * @param columns - column names in the table\n * @param foreignTable - other table name\n * @param foreignColumns - column names in the other table\n * @param options - foreign key options\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 /**\n * Add a primary key to a table on migrate, and remove it on rollback.\n *\n * `dropPrimaryKey` takes the same arguments, removes the primary key on migrate, and adds it on rollback.\n *\n * First argument is a table name, second argument is an array of columns.\n * The optional third argument may have a name for the primary key constraint.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addPrimaryKey('tableName', ['id', 'name'], {\n * name: 'tablePkeyName',\n * });\n * });\n * ```\n *\n * @param tableName - name of the table\n * @param columns - array of the columns\n * @param options - object with a constraint name\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 /**\n * Drop the schema, create it on rollback. See {@link addPrimaryKey}.\n *\n * @param tableName - name of the table\n * @param columns - array of the columns\n * @param options - object with a constraint name\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 /**\n * Add or drop a check for multiple columns.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addCheck('tableName', t.sql`column > 123`);\n * });\n * ```\n *\n * @param tableName - name of the table to add the check into\n * @param check - raw SQL for the check\n */\n addCheck(tableName: string, check: RawSQLBase): Promise<void> {\n return addCheck(this, this.up, tableName, check);\n }\n\n /**\n * Drop the schema, create it on rollback. See {@link addConstraint}.\n *\n * @param tableName - name of the table to add the check into\n * @param check - raw SQL for the check\n */\n dropCheck(tableName: string, check: RawSQLBase): Promise<void> {\n return addCheck(this, !this.up, tableName, check);\n }\n\n /**\n * Add or drop a constraint with check and a foreign key references.\n *\n * See foreign key details in [foreign key](/guide/migration-column-methods.html#composite-foreign-key).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.addConstraint('tableName', {\n * name: 'constraintName',\n * check: db.sql`column > 123`,\n * references: [['id', 'name'], 'otherTable', ['otherId', 'otherName']],\n * });\n * });\n * ```\n *\n * @param tableName - name of the table to add the constraint to\n * @param constraint - constraint config object\n */\n addConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, this.up, tableName, constraint);\n }\n\n /**\n * Drop the schema, create it on rollback. See {@link addConstraint}.\n *\n * @param tableName - name of the table to add the constraint to\n * @param constraint - constraint config object\n */\n dropConstraint(tableName: string, constraint: ConstraintArg): Promise<void> {\n return addConstraint(this, !this.up, tableName, constraint);\n }\n\n /**\n * Rename a column:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.renameColumn('tableName', 'oldColumnName', 'newColumnName');\n * });\n * ```\n *\n * @param tableName - name of the table to rename the column in\n * @param from - rename column from\n * @param to - rename column to\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 /**\n * `createSchema` creates a database schema, and removes it on rollback.\n *\n * `dropSchema` takes the same arguments, removes schema on migration, and adds it on rollback.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createSchema('schemaName');\n * });\n * ```\n *\n * @param schemaName - name of the schema\n */\n createSchema(schemaName: string): Promise<void> {\n return createSchema(this, this.up, schemaName);\n }\n\n /**\n * Drop the schema, create it on rollback. See {@link createSchema}.\n *\n * @param schemaName - name of the schema\n */\n dropSchema(schemaName: string): Promise<void> {\n return createSchema(this, !this.up, schemaName);\n }\n\n /**\n * `createExtension` creates a database extension, and removes it on rollback.\n *\n * `dropExtension` takes the same arguments, removes the extension on migrate, and adds it on rollback.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createExtension('pg_trgm');\n * });\n * ```\n *\n * @param name - name of the extension\n * @param options - extension options\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 /**\n * Drop the extension, create it on rollback. See {@link createExtension}.\n *\n * @param name - name of the extension\n * @param options - extension options\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 /**\n * `createEnum` creates an enum on migrate, drops it on rollback.\n *\n * `dropEnum` does the opposite.\n *\n * Third argument for options is optional.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createEnum('number', ['one', 'two', 'three']);\n *\n * // use `schemaName.enumName` format to specify a schema\n * await db.createEnum('customSchema.mood', ['sad', 'ok', 'happy'], {\n * // following options are used when dropping enum\n * dropIfExists: true,\n * cascade: true,\n * });\n * });\n * ```\n *\n * @param name - name of the enum\n * @param values - possible enum values\n * @param options - enum options\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 /**\n * Drop the enum, create it on rollback. See {@link createEnum}.\n *\n * @param name - name of the enum\n * @param values - possible enum values\n * @param options - enum options\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 /**\n * Domain is a custom database type that allows to predefine a `NOT NULL` and a `CHECK` (see [postgres tutorial](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-user-defined-data-types/)).\n *\n * `createDomain` and `dropDomain` take a domain name as first argument, callback returning inner column type as a second, and optional object with parameters as third.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createDomain('domainName', (t) => t.integer(), {\n * check: db.sql`value = 42`,\n * });\n *\n * // use `schemaName.domainName` format to specify a schema\n * await db.createDomain('schemaName.domainName', (t) => t.text(), {\n * // unlike columns, domain is nullable by default, use notNull when needed:\n * notNull: true,\n * collation: 'C',\n * default: db.sql`'default text'`,\n * check: db.sql`length(value) > 10`,\n *\n * // cascade is used when dropping domain\n * cascade: true,\n * });\n * });\n * ```\n *\n * @param name - name of the domain\n * @param fn - function returning a column type for the domain\n * @param options - domain options\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 /**\n * Drop the domain, create it on rollback. See {@link dropDomain}.\n *\n * @param name - name of the domain\n * @param fn - function returning a column type for the domain\n * @param options - domain options\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 /**\n * Create and drop a database collation, (see [Postgres docs](https://www.postgresql.org/docs/current/sql-createcollation.html)).\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createCollation('myCollation', {\n * // This is a shortcut for setting lcCollate and lcCType at once.\n * locale: 'en-u-kn-true',\n *\n * // set `lcType` and `lcCType` only if the `locale` is not set.\n * // lcType: 'C',\n * // lcCType: 'C',\n *\n * // provider can be 'icu' or 'libc'. 'libc' is a default.\n * provider: 'icu',\n *\n * // true by default, false is only supported with 'icu' provider.\n * deterministic: true,\n *\n * // Is intended to by used by `pg_upgrade`. Normally, it should be omitted.\n * version: '1.2.3',\n *\n * // For `CREATE IF NOT EXISTS` when creating.\n * createIfNotExists: true,\n *\n * // For `DROP IF EXISTS` when dropping.\n * dropIfExists: true,\n *\n * // For `DROP ... CASCADE` when dropping.\n * cascase: true,\n * });\n * });\n * ```\n *\n * Instead of specifying the collation options, you can specify a collation to copy options from.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createCollation('myCollation', {\n * fromExisting: 'otherCollation',\n * });\n * });\n * ```\n *\n * To create a collation withing a specific database schema, prepend it to the collation name:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createCollation('schemaName.myCollation', {\n * // `fromExisting` also can accept a collation name with a schema.\n * fromExisting: 'schemaName.otherCollation',\n * });\n * });\n * ```\n *\n * @param name - name of the collation, can contain a name of schema separated with a dot.\n * @param options - options to create and drop the collation.\n */\n createCollation(\n name: string,\n options: Omit<RakeDbAst.Collation, 'type' | 'action' | 'schema' | 'name'>,\n ): Promise<void> {\n return createCollation(this, this.up, name, options);\n }\n\n /**\n * Drop the collation, create it on rollback. See {@link createCollation}.\n *\n * @param name - name of the collation, can contain a name of schema separated with a dot.\n * @param options - options to create and drop the collation.\n */\n dropCollation(\n name: string,\n options: Omit<RakeDbAst.Collation, 'type' | 'action' | 'schema' | 'name'>,\n ): Promise<void> {\n return createCollation(this, !this.up, name, options);\n }\n\n /**\n * Create and drop database views.\n *\n * Provide SQL as a string or via `db.sql` that can accept variables.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * await db.createView(\n * 'simpleView',\n * `\n * SELECT a.one, b.two\n * FROM a\n * JOIN b ON b.\"aId\" = a.id\n * `,\n * );\n *\n * // view can accept db.sql with variables in such way:\n * const value = 'some value';\n * await db.createView(\n * 'viewWithVariables',\n * db.sql`\n * SELECT * FROM a WHERE key = ${value}\n * `,\n * );\n *\n * // view with options\n * await db.createView(\n * 'schemaName.recursiveView',\n * {\n * // createOrReplace has effect when creating the view\n * createOrReplace: true,\n *\n * // dropIfExists and dropMode have effect when dropping the view\n * dropIfExists: true,\n * dropMode: 'CASCADE',\n *\n * // for details, check Postgres docs for CREATE VIEW,\n * // these options are matching CREATE VIEW options\n * temporary: true,\n * recursive: true,\n * columns: ['n'],\n * with: {\n * checkOption: 'LOCAL', // or 'CASCADED'\n * securityBarrier: true,\n * securityInvoker: true,\n * },\n * },\n * `\n * VALUES (1)\n * UNION ALL\n * SELECT n + 1 FROM \"schemaName\".\"recursiveView\" WHERE n < 100;\n * `,\n * );\n * });\n * ```\n *\n * @param name - name of the view\n * @param options - view options\n * @param sql - SQL to create the view with\n */\n createView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawSQLBase,\n ): Promise<void>;\n /**\n * See {@link createView}\n *\n * @param name - name of the view\n * @param sql - SQL to create the view with\n */\n createView(name: string, sql: string | RawSQLBase): 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 | RawSQLBase,\n );\n }\n\n /**\n * Drop the view, create it on rollback. See {@link createView}.\n *\n * @param name - name of the view\n * @param options - view options\n * @param sql - SQL to create the view with\n */\n dropView(\n name: string,\n options: RakeDbAst.ViewOptions,\n sql: string | RawSQLBase,\n ): Promise<void>;\n /**\n * Drop the view, create it on rollback. See {@link createView}.\n *\n * @param name - name of the view\n * @param sql - SQL to create the view with\n */\n dropView(name: string, sql: string | RawSQLBase): 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 | RawSQLBase,\n );\n }\n\n /**\n * Returns boolean to know if table exists:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * if (await db.tableExists('tableName')) {\n * // ...do something\n * }\n * });\n * ```\n *\n * @param tableName - name of the table\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 /**\n * Returns boolean to know if a column exists:\n *\n * Note that when `snakeCase` option is set to true, this method won't translate column to snake case, unlike other parts.\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * if (await db.columnExists('tableName', 'columnName')) {\n * // ...do something\n * }\n * });\n * ```\n *\n * @param tableName - name of the table to check for the column in\n * @param columnName - name of the column\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 /**\n * Returns boolean to know if constraint exists:\n *\n * ```ts\n * import { change } from '../dbScript';\n *\n * change(async (db) => {\n * if (await db.constraintExists('constraintName')) {\n * // ...do something\n * }\n * });\n * ```\n *\n * @param constraintName - name of the constraint\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\n/**\n * If `log` object is specified, it will perform the query with logging.\n *\n * @param log - logger object\n * @param query - object with SQL text and values for a query\n * @param fn - function to call the original `query` or `arrays`\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\n/**\n * See {@link Migration.addColumn}\n */\nconst addColumn = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addIndex}\n */\nconst addIndex = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addForeignKey}\n */\nconst addForeignKey = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addPrimaryKey}\n */\nconst addPrimaryKey = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.addCheck}\n */\nconst addCheck = <CT extends ColumnTypesBase>(\n migration: Migration<CT>,\n up: boolean,\n tableName: string,\n check: RawSQLBase,\n): Promise<void> => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.check(check)),\n }));\n};\n\n/**\n * See {@link Migration.addConstraint}\n */\nconst addConstraint = <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createSchema}\n */\nconst createSchema = async <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createExtension}\n */\nconst createExtension = async <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createEnum}\n */\nconst createEnum = async <CT extends ColumnTypesBase>(\n migration: Migration<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\n/**\n * See {@link Migration.createDomain}\n */\nconst createDomain = async <CT extends ColumnTypesBase>(\n migration: Migration<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 ${ast.default.toSQL({ values })}`\n : ''\n }${ast.notNull || ast.check ? '\\n' : ''}${[\n ast.notNull && 'NOT NULL',\n ast.check && `CHECK ${ast.check.toSQL({ 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\n/**\n * See {@link Migration.createCollation}\n */\nconst createCollation = async <CT extends ColumnTypesBase>(\n migration: Migration<CT>,\n up: boolean,\n name: string,\n options: Omit<RakeDbAst.Collation, 'type' | 'action' | 'schema' | 'name'>,\n): Promise<void> => {\n const [schema, collationName] = getSchemaAndTableFromName(name);\n\n const ast: RakeDbAst.Collation = {\n type: 'collation',\n action: up ? 'create' : 'drop',\n schema,\n name: collationName,\n ...options,\n };\n\n let query;\n const quotedName = quoteWithSchema(ast);\n if (ast.action === 'create') {\n query = `CREATE COLLATION${\n ast.createIfNotExists ? ' IF NOT EXISTS' : ''\n } ${quotedName} `;\n\n if (ast.fromExisting) {\n query += `FROM ${quoteNameFromString(ast.fromExisting)}`;\n } else {\n const config: string[] = [];\n if (ast.locale) config.push(`locale = '${ast.locale}'`);\n if (ast.lcCollate) config.push(`lc_collate = '${ast.lcCollate}'`);\n if (ast.lcCType) config.push(`lc_ctype = '${ast.lcCType}'`);\n if (ast.provider) config.push(`provider = ${ast.provider}`);\n if (ast.deterministic !== undefined)\n config.push(`deterministic = ${ast.deterministic}`);\n if (ast.version) config.push(`version = '${ast.version}'`);\n\n query += `(\\n ${config.join(',\\n ')}\\n)`;\n }\n } else {\n query = `DROP COLLATION${\n ast.dropIfExists ? ' IF EXISTS' : ''\n } ${quotedName}${ast.cascade ? ` CASCADE` : ''}`;\n }\n\n await migration.adapter.query({\n text: query,\n });\n\n migration.migratedAsts.push(ast);\n};\n\n/**\n * Run the query and check if it has rows.\n *\n * @param db - migration instance\n * @param sql - raw SQL object to execute\n */\nconst queryExists = <CT extends ColumnTypesBase>(\n db: Migration<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 { getMigrations, MigrationItem, RakeDbConfig } from '../common';\nimport {\n ChangeCallback,\n clearChanges,\n getCurrentChanges,\n} from '../migration/change';\nimport { createMigrationInterface } from '../migration/migration';\nimport {\n getMigratedVersionsMap,\n removeMigratedVersion,\n saveMigratedVersion,\n} from '../migration/manageMigratedVersions';\nimport { RakeDbError } from '../errors';\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 getMigrations(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 import: config.import,\n });\n\n await adapter.close();\n }\n // use appCodeUpdater only for the first provided options\n delete config.appCodeUpdater;\n }\n};\n\n// Cache `change` functions of migrations. Key is a migration file name, value is array of `change` functions.\n// When migrating two or more databases, files are loaded just once due to this cache.\nexport const changeCache: Record<string, ChangeCallback[] | undefined> = {};\n\n// SQL to start a transaction\nconst begin = {\n text: 'BEGIN',\n values: emptyArray,\n};\n\n/**\n * Process one migration file.\n * It performs a db transaction, loads `change` functions from a file, executes them in order specified by `up` parameter.\n * After calling `change` functions successfully, will save new entry or delete one in case of `up: false` from the migrations table.\n * After transaction is committed, will call `appCodeUpdater` if exists with the migrated changes.\n */\nconst processMigration = async <CT extends ColumnTypesBase>(\n db: Adapter,\n up: boolean,\n file: MigrationItem,\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 const module = (await file.load()) as\n | {\n default?: MaybeArray<ChangeCallback>;\n }\n | undefined;\n\n const exported = module?.default && toArray(module.default);\n\n if (config.forceDefaultExports && !exported) {\n throw new RakeDbError(\n `Missing a default export in ${file.path} migration`,\n );\n }\n\n changes = exported || getCurrentChanges();\n changeCache[file.path] = changes;\n }\n\n const db = createMigrationInterface<CT>(tx, up, config);\n\n for (const fn of up ? changes : changes.reverse()) {\n await (fn as unknown as ChangeCallback<CT>)(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 import: config.import,\n });\n }\n};\n\n/**\n * Will run all pending yet migrations, sequentially in order,\n * will apply `change` functions top-to-bottom.\n *\n * @param options - options to construct db adapter with\n * @param config - specifies how to load migrations, may have `appCodeUpdater`, callbacks, and logger.\n * @param args - pass none or `all` to run all migrations, pass int for how many to migrate, `--code` to enable and `--code false` to disable `useCodeUpdater`.\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\n/**\n * Will roll back one latest applied migration,\n * will apply `change` functions bottom-to-top.\n *\n * Takes the same options as {@link migrate}.\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\n/**\n * Calls {@link rollback} and then {@link migrate}.\n *\n * Takes the same options as {@link migrate}.\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\n // because we just called rollback, `change` functions are cached bottom-to-top.\n // now we are about to migrate, and need to reverse cached functions.\n for (const file in changeCache) {\n changeCache[file]?.reverse();\n }\n\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 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}\"${user ? ` 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 export type Collation = {\n schema: string;\n name: string;\n provider: string;\n deterministic: boolean;\n lcCollate?: string;\n lcCType?: string;\n locale?: string;\n version?: 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(): Promise<DbStructure.Domain[]> {\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 async getCollations(): Promise<DbStructure.Collation[]> {\n const { rows } = await this.db.query<DbStructure.Collation>(`SELECT\n nspname \"schema\",\n collname \"name\",\n CASE WHEN collprovider = 'i' THEN 'icu' WHEN collprovider = 'c' THEN 'libc' ELSE collprovider::text END \"provider\",\n collisdeterministic \"deterministic\",\n collcollate \"lcCollate\",\n collctype \"lcCType\",\n colliculocale \"locale\",\n collversion \"version\"\nFROM pg_collation\nJOIN pg_namespace n on pg_collation.collnamespace = n.oid\nWHERE ${filterSchema('n.nspname')}\n `);\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 raw,\n simplifyColumnDefault,\n TableData,\n} from 'pqb';\nimport { 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 collations: DbStructure.Collation[];\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 for (const it of data.collations) {\n ast.push({\n type: 'collation',\n action: 'create',\n ...it,\n schema: it.schema === ctx.currentSchema ? undefined : it.schema,\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({ 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 collations,\n ] = await Promise.all([\n db.getStructure(),\n db.getConstraints(),\n db.getIndexes(),\n db.getExtensions(),\n db.getEnums(),\n db.getDomains(),\n db.getCollations(),\n ]);\n\n return {\n schemas,\n tables,\n views,\n constraints,\n indexes,\n extensions,\n enums,\n domains,\n collations,\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({ 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({ 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({ 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({ 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 isRawSQL,\n quoteObjectKey,\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 === 'collation' && item.action === 'create') {\n if (first.length) first.push([]);\n first.push(...createCollation(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: ${ast.default.toCode('db')},`);\n if (ast.check) props.push(`check: ${ast.check.toCode('db')},`);\n\n addCode(code, ', {');\n code.push(props);\n addCode(code, '}');\n }\n\n addCode(code, ');');\n return code;\n};\n\nconst createCollation = (ast: RakeDbAst.Collation): Code[] => {\n const params: string[] = [];\n if (ast.locale) params.push(`locale: '${ast.locale}',`);\n if (ast.lcCollate) params.push(`lcCollate: '${ast.lcCollate}',`);\n if (ast.lcCType) params.push(`lcCType: '${ast.lcCType}',`);\n if (ast.provider) params.push(`provider: '${ast.provider}',`);\n if (ast.deterministic) params.push(`deterministic: ${ast.deterministic},`);\n if (ast.version) params.push(`version: '${ast.version}',`);\n\n return [\n `await db.createCollation(${quoteSchemaTable(ast)}, {`,\n params,\n '});',\n ];\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 isRawSQL(def) &&\n def._sql === '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}, ${item.check.toCode('t')});`];\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 const raw = ast.sql._sql;\n let sql;\n if (typeof raw === 'string') {\n sql = raw;\n } else {\n sql = '';\n const parts = raw[0];\n const last = parts.length - 1;\n for (let i = 0; i < last; i++) {\n sql += parts[i] + `\\${${raw[i + 1]}}`;\n }\n sql += parts[last];\n }\n\n addCode(code, backtickQuote(sql));\n } else {\n addCode(code, ast.sql.toCode('db'));\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 import: config.import,\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 import: config.import,\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\n/**\n * Type of {@link rakeDb} function\n */\nexport type RakeDbFn = (<C extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n partialConfig?: InputRakeDbConfig<C>,\n args?: string[],\n) => RakeDbChangeFn<C> & {\n promise: Promise<void>;\n}) & {\n /**\n * Unlike the original `rakeDb` that executes immediately,\n * `rakeDb.lazy` returns the `run` function to be later called programmatically.\n *\n * @param options - {@link AdapterOptions} or an array of such options to migrate multiple dbs\n * @param config - {@link RakeDbConfig}\n * @returns `change` is to be used in migrations, `run` takes an array cli args to execute a command\n */\n lazy: RakeDbLazyFn;\n};\n\n/**\n * Type of {@link rakeDb.lazy} function\n */\nexport type RakeDbLazyFn = <C extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n partialConfig?: InputRakeDbConfig<C>,\n) => {\n change: RakeDbChangeFn<C>;\n run(args: string[], config?: Partial<RakeDbConfig<C>>): Promise<void>;\n};\n\n/**\n * Function to use in migrations to wrap database changes\n * Saves the given callback to an internal queue,\n * and also returns the callback in case you want to export it from migration.\n */\nexport type RakeDbChangeFn<C extends ColumnTypesBase> = (\n fn: ChangeCallback<C>,\n) => ChangeCallback<C>;\n\n/**\n * Function to configure and run `rakeDb`.\n *\n * @param options - {@link AdapterOptions} or an array of such options to migrate multiple dbs\n * @param config - {@link RakeDbConfig}\n * @param args - optionally provide an array of cli args. Default is `process.argv.slice(2)`.\n */\nexport const rakeDb: RakeDbFn = ((\n options,\n partialConfig = {},\n args = process.argv.slice(2),\n) => {\n const config = processRakeDbConfig(partialConfig);\n const promise = runCommand(options, config, args).catch((err) => {\n if (err instanceof RakeDbError) {\n config.logger?.error(err.message);\n process.exit(1);\n }\n throw err;\n });\n\n return Object.assign(change, {\n promise,\n });\n}) as RakeDbFn;\n\nrakeDb.lazy = ((options, partialConfig = {}) => {\n const config = processRakeDbConfig(partialConfig);\n\n return {\n change,\n run(args: string[], conf) {\n return runCommand(options, conf ? { ...config, ...conf } : config, args);\n },\n };\n}) as RakeDbLazyFn;\n\nfunction change(fn: ChangeCallback) {\n pushChange(fn);\n return fn;\n}\n\nconst runCommand = async <C extends ColumnTypesBase = DefaultColumnTypes>(\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig<C>,\n args: string[] = process.argv.slice(2),\n): Promise<void> => {\n const arg = args[0]?.split(':')[0];\n\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};\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 pull generate a combined migration for an existing database\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","getStackTrace","fileURLToPath","defaultColumnTypes","__spreadProps","__objRest","readdir","pathToFileURL","singleQuote","toSnakeCase","isRawSQL","quote","sql","toArray","EnumColumn","createTable","snakeCaseKey","emptyObject","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","resetTableData","consumeColumnName","UnknownColumn","add","columnTypes","setDefaultLanguage","changeTableData","ColumnTypeBase","deepCompare","createView","raw","TransactionAdapter","logParamToLogObject","createDb","createSchema","createExtension","createEnum","createDomain","createCollation","Adapter","pathToLog","emptyArray","db","mkdir","getImportPath","writeFile","simplifyColumnDefault","_a","_b","columnsByType","instantiateColumn","DomainColumn","CustomTypeColumn","ArrayColumn","getConstraintKind","toCamelCase","codeToString","addCode","TimestampTZColumn","quoteObjectKey","primaryKeyToCode","indexToCode","constraintToCode","referencesArgsToCode","constraintPropsToCode","backtickQuote","readFile","join","stat"],"mappings":"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"}
|