{"version":3,"file":"driver.cjs","names":["entityKind","SingleStoreDriverSession","SingleStoreDatabase","SingleStoreDialect","DefaultLogger","createTableRelationsHelpers","npmVersion"],"sources":["../../src/singlestore/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/_relations.ts';\nimport type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\nimport { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport { npmVersion } from '~/version.ts';\nimport type {\n\tSingleStoreDriverClient,\n\tSingleStoreDriverPreparedQueryHKT,\n\tSingleStoreDriverQueryResultHKT,\n} from './session.ts';\nimport { SingleStoreDriverSession } from './session.ts';\n\nexport interface SingleStoreDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class SingleStoreDriverDriver {\n\tstatic readonly [entityKind]: string = 'SingleStoreDriverDriver';\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate options: SingleStoreDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t\trelations: AnyRelations,\n\t): SingleStoreDriverSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig> {\n\t\treturn new SingleStoreDriverSession(this.client, this.dialect, relations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\n\nexport class SingleStoreDriverDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends SingleStoreDatabase<SingleStoreDriverQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverDatabase';\n}\n\nexport type SingleStoreDriverDrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> =\n\t& Omit<DrizzleConfig<TSchema, TRelations>, 'schema'>\n\t& ({ schema: TSchema } | { schema?: undefined });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: SingleStoreDriverDrizzleConfig<TSchema, TRelations> = {},\n): SingleStoreDriverDatabase<TSchema, TRelations> & {\n\t$client: AnySingleStoreDriverConnection extends TClient ? CallbackPool : TClient;\n} {\n\tconst dialect = new SingleStoreDialect({\n\t\tuseJitMappers: jitCompatCheck(config.jit),\n\t});\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst driver = new SingleStoreDriverDriver(clientForInstance as SingleStoreDriverClient, dialect, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t});\n\tconst session = driver.createSession(schema, relations);\n\tconst db = new SingleStoreDriverDatabase(dialect, session, relations, schema as any) as SingleStoreDriverDatabase<\n\t\tTSchema\n\t>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): SingleStoreDriverClient;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;\n\nconst CONNECTION_ATTRS: PoolOptions['connectAttributes'] = {\n\t_connector_name: 'SingleStore Drizzle ORM Driver',\n\t_connector_version: npmVersion,\n};\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends AnySingleStoreDriverConnection = CallbackPool,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tSingleStoreDriverDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): SingleStoreDriverDatabase<TSchema, TRelations> & {\n\t$client: AnySingleStoreDriverConnection extends TClient ? CallbackPool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t\tconnectAttributes: CONNECTION_ATTRS,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t& SingleStoreDriverDrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tlet opts: PoolOptions = {};\n\topts = typeof connection === 'string'\n\t\t? {\n\t\t\turi: connection,\n\t\t\tsupportBigNumbers: true,\n\t\t\tconnectAttributes: CONNECTION_ATTRS,\n\t\t}\n\t\t: {\n\t\t\t...connection,\n\t\t\tconnectAttributes: {\n\t\t\t\t...connection!.connectAttributes,\n\t\t\t\t...CONNECTION_ATTRS,\n\t\t\t},\n\t\t};\n\n\tconst instance = createPool(opts);\n\tconst db = construct(instance, drizzleConfig);\n\n\treturn db as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: SingleStoreDriverDrizzleConfig<TSchema, TRelations>,\n\t): SingleStoreDriverDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AA6BA,IAAa,0BAAb,MAAqC;CACpC,QAAiBA,0BAAsB;CAEvC,YACC,AAAQ,QACR,AAAQ,SACR,AAAQ,UAAoC,EAAE,EAC7C;EAHO;EACA;EACA;;CAIT,cACC,QACA,WAC0F;AAC1F,SAAO,IAAIC,qDAAyB,KAAK,QAAQ,KAAK,SAAS,WAAW,QAAQ;GACjF,QAAQ,KAAK,QAAQ;GACrB,OAAO,KAAK,QAAQ;GACpB,CAAC;;;AAMJ,IAAa,4BAAb,cAGUC,6CAA6G;CACtH,QAA0BF,0BAAsB;;AAUjD,SAAS,UAKR,QACA,SAA8D,EAAE,EAG/D;CACD,MAAM,UAAU,IAAIG,iDAAmB,EACtC,8CAA8B,OAAO,IAAI,EACzC,CAAC;CACF,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAIC,2BAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,MAAM,oBAAoB,iBAAiB,OAAO,GAAG,OAAO,SAAS,GAAG;CAExE,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,kEACL,OAAO,QACPC,4CACA;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAMxC,MAAM,KAAK,IAAI,0BAA0B,SAL1B,IAAI,wBAAwB,mBAA8C,SAAS;EACjG;EACA,OAAO,OAAO;EACd,CAAC,CACqB,cAAc,QAAQ,UAAU,EACI,WAAW,OAAc;AAGpF,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAGjD,QAAO;;AAOR,SAAS,iBAAiB,QAAuC;AAChE,QAAO,OAAO,OAAO,YAAY;;AAKlC,MAAM,mBAAqD;CAC1D,iBAAiB;CACjB,oBAAoBC;CACpB;AAED,SAAgB,QAKf,GAAG,QAiBF;AACD,KAAI,OAAO,OAAO,OAAO,UAAU;EAClC,MAAM,mBAAmB,OAAO;AAMhC,SAAO,iCALqB;GAC3B,KAAK;GACL,mBAAmB;GACnB,CAAC,EAEyB,OAAO,GAAG;;CAGtC,MAAM,EAAE,YAAY,QAAQ,GAAG,kBAAkB,OAAO;AAIxD,KAAI,OAAQ,QAAO,UAAU,QAAQ,cAAc;CAEnD,IAAI,OAAoB,EAAE;AAC1B,QAAO,OAAO,eAAe,WAC1B;EACD,KAAK;EACL,mBAAmB;EACnB,mBAAmB;EACnB,GACC;EACD,GAAG;EACH,mBAAmB;GAClB,GAAG,WAAY;GACf,GAAG;GACH;EACD;AAKF,QAFW,iCADiB,KAAK,EACF,cAAc;;;CAMtC,SAAS,KAIf,QAGC;AACD,SAAO,UAAU,EAAE,EAAS,OAAO"}