{"version":3,"file":"main.mjs","sources":["../src/utils.js","../src/Statement.js","../src/Database.js","../src/main.js"],"sourcesContent":["/**\n * SQLite client library for Node.js applications\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nexport function prepareParams(args, { offset = 0, excludeLastArg = false } = {}) {\n const hasOneParam = (args.length === (offset + 1 + (excludeLastArg ? 1 : 0)));\n if (hasOneParam) {\n return args[offset];\n }\n return Array.prototype.slice.call(args, offset, args.length - (excludeLastArg ? 1 : 0));\n}\n\nexport function resolveTemplateStringObject(args, { offset = 0, excludeLastArg = false } = {}) {\n const hasOneParam = (args.length === (offset + 1 + (excludeLastArg ? 1 : 0)));\n if (hasOneParam && typeof args[offset] === 'object') {\n return {\n sql: args[offset].sql,\n params: args[offset].values,\n };\n }\n return {\n sql: args[offset],\n params: prepareParams(args, { offset: offset + 1, excludeLastArg }),\n };\n}\n","/**\n * SQLite client library for Node.js applications\n *\n * Copyright © 2016 Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport { prepareParams } from './utils';\n\nclass Statement {\n\n constructor(stmt, Promise) {\n this.stmt = stmt;\n this.Promise = Promise;\n }\n\n get sql() {\n return this.stmt.sql;\n }\n\n get lastID() {\n return this.stmt.lastID;\n }\n\n get changes() {\n return this.stmt.changes;\n }\n\n bind() {\n const params = prepareParams(arguments);\n return new this.Promise((resolve, reject) => {\n this.stmt.bind(params, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve(this);\n }\n });\n });\n }\n\n reset() {\n return new this.Promise((resolve) => {\n this.stmt.reset(() => {\n resolve(this);\n });\n });\n }\n\n finalize() {\n return new this.Promise((resolve, reject) => {\n this.stmt.finalize((err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n\n run() {\n const params = prepareParams(arguments);\n return new this.Promise((resolve, reject) => {\n this.stmt.run(params, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve(this);\n }\n });\n });\n }\n\n get() {\n const params = prepareParams(arguments);\n return new this.Promise((resolve, reject) => {\n this.stmt.get(params, (err, row) => {\n if (err) {\n reject(err);\n } else {\n resolve(row);\n }\n });\n });\n }\n\n all() {\n const params = prepareParams(arguments);\n return new this.Promise((resolve, reject) => {\n this.stmt.all(params, (err, rows) => {\n if (err) {\n reject(err);\n } else {\n resolve(rows);\n }\n });\n });\n }\n\n each() {\n const params = prepareParams(arguments, { excludeLastArg: true });\n const callback = arguments[arguments.length - 1];\n return new this.Promise((resolve, reject) => {\n this.stmt.each(params, callback, (err, rowsCount = 0) => {\n if (err) {\n reject(err);\n } else {\n resolve(rowsCount);\n }\n });\n });\n }\n\n}\n\nexport default Statement;\n","/**\n * SQLite client library for Node.js applications\n *\n * Copyright © 2016 Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n// eslint-disable-next-line no-unused-vars,import/no-unresolved,import/extensions\nimport sqlite3 from 'sqlite3'; // import sqlite3 for jsdoc type information only\nimport Statement from './Statement';\nimport { resolveTemplateStringObject } from './utils';\n\nclass Database {\n /**\n * Initializes a new instance of the database client.\n * @param {sqlite3.Database} driver An instance of SQLite3 driver library.\n * @param {{Promise: PromiseConstructor}} promiseLibrary ES6 Promise library to use.\n */\n constructor(driver, promiseLibrary) {\n this.driver = driver;\n this.Promise = promiseLibrary.Promise;\n }\n\n /**\n * Close the database.\n */\n close() {\n return new this.Promise((resolve, reject) => {\n this.driver.close((err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n\n /**\n * Register listeners for Sqlite3 events\n *\n * @param {'trace'|'profile'|'error'|'open'|'close'} eventName\n * @param {() => void} listener trigger listener function\n */\n on(eventName, listener) {\n this.driver.on(eventName, listener);\n }\n\n run() {\n const { sql, params } = resolveTemplateStringObject(arguments);\n const Promise = this.Promise;\n return new Promise((resolve, reject) => {\n this.driver.run(sql, params, function runExecResult(err) {\n if (err) {\n reject(err);\n } else {\n // Per https://github.com/mapbox/node-sqlite3/wiki/API#databaserunsql-param--callback\n // when run() succeeds, the `this' object is a driver statement object. Wrap it as a\n // Statement.\n resolve(new Statement(this, Promise));\n }\n });\n });\n }\n\n get() {\n const { sql, params } = resolveTemplateStringObject(arguments);\n return new this.Promise((resolve, reject) => {\n this.driver.get(sql, params, (err, row) => {\n if (err) {\n reject(err);\n } else {\n resolve(row);\n }\n });\n });\n }\n\n all() {\n const { sql, params } = resolveTemplateStringObject(arguments);\n return new this.Promise((resolve, reject) => {\n this.driver.all(sql, params, (err, rows) => {\n if (err) {\n reject(err);\n } else {\n resolve(rows);\n }\n });\n });\n }\n\n /**\n * Runs all the SQL queries in the supplied string. No result rows are retrieved.\n */\n exec(sql) {\n return new this.Promise((resolve, reject) => {\n this.driver.exec(sql, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve(this);\n }\n });\n });\n }\n\n each() {\n const { sql, params } = resolveTemplateStringObject(arguments, { excludeLastArg: true });\n const callback = arguments[arguments.length - 1];\n return new this.Promise((resolve, reject) => {\n this.driver.each(sql, params, callback, (err, rowsCount = 0) => {\n if (err) {\n reject(err);\n } else {\n resolve(rowsCount);\n }\n });\n });\n }\n\n prepare() {\n const { sql, params } = resolveTemplateStringObject(arguments);\n return new this.Promise((resolve, reject) => {\n const stmt = this.driver.prepare(sql, params, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve(new Statement(stmt, this.Promise));\n }\n });\n });\n }\n\n /**\n * Set a configuration option for the database.\n */\n configure(option, value) {\n this.driver.configure(option, value);\n }\n\n /**\n * Migrates database schema to the latest version\n */\n async migrate({ force, table = 'migrations', migrationsPath = './migrations' } = {}) {\n /* eslint-disable no-await-in-loop */\n const location = path.resolve(migrationsPath);\n\n // Get the list of migration files, for example:\n // { id: 1, name: 'initial', filename: '001-initial.sql' }\n // { id: 2, name: 'feature', fielname: '002-feature.sql' }\n const migrations = await new this.Promise((resolve, reject) => {\n fs.readdir(location, (err, files) => {\n if (err) {\n reject(err);\n } else {\n resolve(files\n .map(x => x.match(/^(\\d+).(.*?)\\.sql$/))\n .filter(x => x !== null)\n .map(x => ({ id: Number(x[1]), name: x[2], filename: x[0] }))\n .sort((a, b) => Math.sign(a.id - b.id)));\n }\n });\n });\n\n if (!migrations.length) {\n throw new Error(`No migration files found in '${location}'.`);\n }\n\n // Ge the list of migrations, for example:\n // { id: 1, name: 'initial', filename: '001-initial.sql', up: ..., down: ... }\n // { id: 2, name: 'feature', fielname: '002-feature.sql', up: ..., down: ... }\n await Promise.all(migrations.map(migration => new this.Promise((resolve, reject) => {\n const filename = path.join(location, migration.filename);\n fs.readFile(filename, 'utf-8', (err, data) => {\n if (err) {\n reject(err);\n } else {\n const [up, down] = data.split(/^--\\s+?down\\b/mi);\n if (!down) {\n const message = `The ${migration.filename} file does not contain '-- Down' separator.`;\n reject(new Error(message));\n } else {\n /* eslint-disable no-param-reassign */\n migration.up = up.replace(/^-- .*?$/gm, '').trim();// Remove comments\n migration.down = down.trim(); // and trim whitespaces\n /* eslint-enable no-param-reassign */\n resolve();\n }\n }\n });\n })));\n\n // Create a database table for migrations meta data if it doesn't exist\n await this.run(`CREATE TABLE IF NOT EXISTS \"${table}\" (\n id INTEGER PRIMARY KEY,\n name TEXT NOT NULL,\n up TEXT NOT NULL,\n down TEXT NOT NULL\n)`);\n\n // Get the list of already applied migrations\n let dbMigrations = await this.all(\n `SELECT id, name, up, down FROM \"${table}\" ORDER BY id ASC`,\n );\n\n // Undo migrations that exist only in the database but not in files,\n // also undo the last migration if the `force` option was set to `last`.\n const lastMigration = migrations[migrations.length - 1];\n for (const migration of dbMigrations.slice().sort((a, b) => Math.sign(b.id - a.id))) {\n if (!migrations.some(x => x.id === migration.id) ||\n (force === 'last' && migration.id === lastMigration.id)) {\n await this.run('BEGIN');\n try {\n await this.exec(migration.down);\n await this.run(`DELETE FROM \"${table}\" WHERE id = ?`, migration.id);\n await this.run('COMMIT');\n dbMigrations = dbMigrations.filter(x => x.id !== migration.id);\n } catch (err) {\n await this.run('ROLLBACK');\n throw err;\n }\n } else {\n break;\n }\n }\n\n // Apply pending migrations\n const lastMigrationId = dbMigrations.length ? dbMigrations[dbMigrations.length - 1].id : 0;\n for (const migration of migrations) {\n if (migration.id > lastMigrationId) {\n await this.run('BEGIN');\n try {\n await this.exec(migration.up);\n await this.run(\n `INSERT INTO \"${table}\" (id, name, up, down) VALUES (?, ?, ?, ?)`,\n migration.id, migration.name, migration.up, migration.down,\n );\n await this.run('COMMIT');\n } catch (err) {\n await this.run('ROLLBACK');\n throw err;\n }\n }\n }\n\n /* eslint-enable no-await-in-loop */\n return this;\n }\n}\n\nexport default Database;\n","/**\n * SQLite client library for Node.js applications\n *\n * Copyright © 2016 Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport sqlite3 from 'sqlite3';\nimport Database from './Database';\n\nconst promise = global.Promise;\nconst db = new Database(null, { Promise: promise });\n\n/**\n * Opens SQLite database.\n *\n * @returns Promise A promise that resolves to an instance of SQLite database client.\n */\ndb.open = (filename, {\n mode = null,\n verbose = false,\n Promise = promise,\n cached = false } = {}) => {\n let driver;\n let DBDriver = sqlite3.Database;\n\n if (cached) {\n DBDriver = sqlite3.cached.Database;\n }\n\n if (verbose) {\n sqlite3.verbose();\n }\n\n return new Promise((resolve, reject) => {\n if (mode !== null) {\n driver = new DBDriver(filename, mode, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n } else {\n driver = new DBDriver(filename, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n }\n }).then(() => {\n db.driver = driver;\n db.Promise = Promise;\n return new Database(driver, { Promise });\n });\n};\n\nexport default db;\n"],"names":["prepareParams","args","offset","excludeLastArg","hasOneParam","length","Array","prototype","slice","call","resolveTemplateStringObject","sql","values","Statement","stmt","Promise","lastID","changes","params","arguments","resolve","reject","bind","err","reset","finalize","run","get","row","all","rows","callback","each","rowsCount","Database","driver","promiseLibrary","close","eventName","listener","on","runExecResult","exec","prepare","option","value","configure","force","table","migrationsPath","location","path","migrations","readdir","files","map","x","match","filter","id","Number","name","filename","sort","a","b","Math","sign","Error","join","migration","readFile","data","up","down","split","message","replace","trim","dbMigrations","lastMigration","some","lastMigrationId","promise","global","db","open","DBDriver","sqlite3","cached","verbose","mode","then"],"mappings":"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"}