| import * as tslib_1 from "tslib"; | 
| import { DriverPackageNotInstalledError } from "../../error/DriverPackageNotInstalledError"; | 
| import { SqliteQueryRunner } from "./SqliteQueryRunner"; | 
| import { DriverOptionNotSetError } from "../../error/DriverOptionNotSetError"; | 
| import { PlatformTools } from "../../platform/PlatformTools"; | 
| import { AbstractSqliteDriver } from "../sqlite-abstract/AbstractSqliteDriver"; | 
| /** | 
|  * Organizes communication with sqlite DBMS. | 
|  */ | 
| var SqliteDriver = /** @class */ (function (_super) { | 
|     tslib_1.__extends(SqliteDriver, _super); | 
|     // ------------------------------------------------------------------------- | 
|     // Constructor | 
|     // ------------------------------------------------------------------------- | 
|     function SqliteDriver(connection) { | 
|         var _this = _super.call(this, connection) || this; | 
|         _this.connection = connection; | 
|         _this.options = connection.options; | 
|         _this.database = _this.options.database; | 
|         // validate options to make sure everything is set | 
|         if (!_this.options.database) | 
|             throw new DriverOptionNotSetError("database"); | 
|         // load sqlite package | 
|         _this.loadDependencies(); | 
|         return _this; | 
|     } | 
|     // ------------------------------------------------------------------------- | 
|     // Public Methods | 
|     // ------------------------------------------------------------------------- | 
|     /** | 
|      * Closes connection with database. | 
|      */ | 
|     SqliteDriver.prototype.disconnect = function () { | 
|         return tslib_1.__awaiter(this, void 0, void 0, function () { | 
|             var _this = this; | 
|             return tslib_1.__generator(this, function (_a) { | 
|                 return [2 /*return*/, new Promise(function (ok, fail) { | 
|                         _this.queryRunner = undefined; | 
|                         _this.databaseConnection.close(function (err) { return err ? fail(err) : ok(); }); | 
|                     })]; | 
|             }); | 
|         }); | 
|     }; | 
|     /** | 
|      * Creates a query runner used to execute database queries. | 
|      */ | 
|     SqliteDriver.prototype.createQueryRunner = function (mode) { | 
|         if (mode === void 0) { mode = "master"; } | 
|         if (!this.queryRunner) | 
|             this.queryRunner = new SqliteQueryRunner(this); | 
|         return this.queryRunner; | 
|     }; | 
|     SqliteDriver.prototype.normalizeType = function (column) { | 
|         if (column.type === Buffer) { | 
|             return "blob"; | 
|         } | 
|         return _super.prototype.normalizeType.call(this, column); | 
|     }; | 
|     // ------------------------------------------------------------------------- | 
|     // Protected Methods | 
|     // ------------------------------------------------------------------------- | 
|     /** | 
|      * Creates connection with the database. | 
|      */ | 
|     SqliteDriver.prototype.createDatabaseConnection = function () { | 
|         var _this = this; | 
|         return new Promise(function (ok, fail) { return tslib_1.__awaiter(_this, void 0, void 0, function () { | 
|             var databaseConnection; | 
|             var _this = this; | 
|             return tslib_1.__generator(this, function (_a) { | 
|                 switch (_a.label) { | 
|                     case 0: return [4 /*yield*/, this.createDatabaseDirectory(this.options.database)]; | 
|                     case 1: | 
|                         _a.sent(); | 
|                         databaseConnection = new this.sqlite.Database(this.options.database, function (err) { | 
|                             if (err) | 
|                                 return fail(err); | 
|                             // we need to enable foreign keys in sqlite to make sure all foreign key related features | 
|                             // working properly. this also makes onDelete to work with sqlite. | 
|                             databaseConnection.run("PRAGMA foreign_keys = ON;", function (err, result) { | 
|                                 if (err) | 
|                                     return fail(err); | 
|                                 ok(databaseConnection); | 
|                             }); | 
|                             // in the options, if encryption key for for SQLCipher is setted. | 
|                             if (_this.options.key) { | 
|                                 databaseConnection.run("PRAGMA key = " + _this.options.key + ";", function (err, result) { | 
|                                     if (err) | 
|                                         return fail(err); | 
|                                     ok(databaseConnection); | 
|                                 }); | 
|                             } | 
|                         }); | 
|                         return [2 /*return*/]; | 
|                 } | 
|             }); | 
|         }); }); | 
|     }; | 
|     /** | 
|      * If driver dependency is not given explicitly, then try to load it via "require". | 
|      */ | 
|     SqliteDriver.prototype.loadDependencies = function () { | 
|         try { | 
|             this.sqlite = PlatformTools.load("sqlite3").verbose(); | 
|         } | 
|         catch (e) { | 
|             throw new DriverPackageNotInstalledError("SQLite", "sqlite3"); | 
|         } | 
|     }; | 
|     /** | 
|      * Auto creates database directory if it does not exist. | 
|      */ | 
|     SqliteDriver.prototype.createDatabaseDirectory = function (fullPath) { | 
|         return new Promise(function (resolve, reject) { | 
|             var mkdirp = PlatformTools.load("mkdirp"); | 
|             var path = PlatformTools.load("path"); | 
|             mkdirp(path.dirname(fullPath), function (err) { return err ? reject(err) : resolve(); }); | 
|         }); | 
|     }; | 
|     return SqliteDriver; | 
| }(AbstractSqliteDriver)); | 
| export { SqliteDriver }; | 
|   | 
| //# sourceMappingURL=SqliteDriver.js.map |