{"version":3,"file":"session.cjs","names":["MySqlEffectSession","entityKind","Effect","MySqlEffectPreparedQuery","MySqlEffectTransaction"],"sources":["../../src/effect-mysql2/session.ts"],"sourcesContent":["import type { MysqlClient } from '@effect/sql-mysql2/MysqlClient';\nimport * as Effect from 'effect/Effect';\nimport type { SqlError } from 'effect/unstable/sql/SqlError';\nimport type { EffectCacheShape } from '~/cache/core/cache-effect.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport type { EffectDrizzleQueryError } from '~/effect-core/errors.ts';\nimport type { EffectLoggerShape } from '~/effect-core/logger.ts';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport { MySqlEffectPreparedQuery, MySqlEffectSession, MySqlEffectTransaction } from '~/mysql-core/effect/session.ts';\nimport type { MySqlPreparedQueryConfig, MySqlQueryResultHKT } from '~/mysql-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\nimport type { Assume } from '~/utils.ts';\n\nexport interface EffectMysql2QueryEffectHKT extends QueryEffectHKTBase {\n\treadonly error: EffectDrizzleQueryError;\n\treadonly context: never;\n}\n\nexport interface EffectMysql2QueryResultHKT extends MySqlQueryResultHKT {\n\ttype: readonly Assume<this['row'], object>[];\n}\n\nexport interface EffectMysql2SessionOptions {\n\tlogger: EffectLoggerShape;\n\tcache: EffectCacheShape;\n}\n\nexport class EffectMysql2Session<\n\tTQueryResult extends MySqlQueryResultHKT,\n\tTRelations extends AnyRelations,\n> extends MySqlEffectSession<EffectMysql2QueryEffectHKT, TQueryResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'EffectMysql2Session';\n\n\tconstructor(\n\t\tprivate client: MysqlClient,\n\t\tdialect: MySqlDialect,\n\t\tprotected relations: TRelations,\n\t\tprivate options: EffectMysql2SessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t}\n\n\toverride prepareQuery<T extends MySqlPreparedQueryConfig = MySqlPreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\tmapper?: (rows: any[]) => any,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): MySqlEffectPreparedQuery<T, EffectMysql2QueryEffectHKT> {\n\t\tconst executor = (params?: unknown[]) => {\n\t\t\tconst q = this.client.unsafe(query.sql, params);\n\n\t\t\tif (mode === 'arrays') return q.values;\n\t\t\tif (mode === 'objects') return q.withoutTransform;\n\t\t\tif (!mapper) return q.raw;\n\n\t\t\treturn q.raw.pipe(Effect.map(({ insertId, affectedRows }: any) => ({\n\t\t\t\tinsertId,\n\t\t\t\taffectedRows,\n\t\t\t})));\n\t\t};\n\n\t\treturn new MySqlEffectPreparedQuery<T, EffectMysql2QueryEffectHKT>(\n\t\t\texecutor,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.options.logger,\n\t\t\tthis.options.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride transaction<A, E, R>(\n\t\ttransaction: (\n\t\t\ttx: EffectMysql2Transaction<TQueryResult, TRelations>,\n\t\t) => Effect.Effect<A, E, R>,\n\t): Effect.Effect<A, E | SqlError, R> {\n\t\tconst { dialect, relations } = this;\n\n\t\treturn this.client.withTransaction(Effect.gen({ self: this }, function*() {\n\t\t\tconst tx = new EffectMysql2Transaction<TQueryResult, TRelations>(\n\t\t\t\tdialect,\n\t\t\t\tthis,\n\t\t\t\trelations,\n\t\t\t);\n\n\t\t\treturn yield* transaction(tx);\n\t\t}));\n\t}\n}\n\nexport class EffectMysql2Transaction<\n\tTQueryResult extends MySqlQueryResultHKT,\n\tTRelations extends AnyRelations,\n> extends MySqlEffectTransaction<EffectMysql2QueryEffectHKT, TQueryResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'EffectMysql2Transaction';\n\n\toverride transaction<A, E, R>(\n\t\ttransaction: (\n\t\t\ttx: MySqlEffectTransaction<EffectMysql2QueryEffectHKT, TQueryResult, TRelations>,\n\t\t) => Effect.Effect<A, E, R>,\n\t): Effect.Effect<A, SqlError | E, R> {\n\t\treturn this.session.transaction(transaction);\n\t}\n}\n"],"mappings":";;;;;;;;AA8BA,IAAa,sBAAb,cAGUA,kDAAyE;CAClF,QAA0BC,0BAAsB;CAEhD,YACC,AAAQ,QACR,SACA,AAAU,WACV,AAAQ,SACP;AACD,QAAM,QAAQ;EALN;EAEE;EACF;;CAKT,AAAS,aACR,OACA,MACA,QACA,eAIA,aAC0D;EAC1D,MAAM,YAAY,WAAuB;GACxC,MAAM,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAE/C,OAAI,SAAS,SAAU,QAAO,EAAE;AAChC,OAAI,SAAS,UAAW,QAAO,EAAE;AACjC,OAAI,CAAC,OAAQ,QAAO,EAAE;AAEtB,UAAO,EAAE,IAAI,KAAKC,cAAO,KAAK,EAAE,UAAU,oBAAyB;IAClE;IACA;IACA,EAAE,CAAC;;AAGL,SAAO,IAAIC,wDACV,UACA,OACA,QACA,MACA,KAAK,QAAQ,QACb,KAAK,QAAQ,OACb,eACA,YACA;;CAGF,AAAS,YACR,aAGoC;EACpC,MAAM,EAAE,SAAS,cAAc;AAE/B,SAAO,KAAK,OAAO,gBAAgBD,cAAO,IAAI,EAAE,MAAM,MAAM,EAAE,aAAY;AAOzE,UAAO,OAAO,YANH,IAAI,wBACd,SACA,MACA,UACA,CAE4B;IAC5B,CAAC;;;AAIL,IAAa,0BAAb,cAGUE,sDAA6E;CACtF,QAA0BH,0BAAsB;CAEhD,AAAS,YACR,aAGoC;AACpC,SAAO,KAAK,QAAQ,YAAY,YAAY"}