mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 03:43:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* eslint-disable import/no-extraneous-dependencies */
 | 
						|
 | 
						|
'use strict';
 | 
						|
 | 
						|
const knex = require('knex');
 | 
						|
 | 
						|
const SqliteClient = require('knex/lib/dialects/sqlite3/index');
 | 
						|
 | 
						|
const trySqlitePackage = (packageName) => {
 | 
						|
  try {
 | 
						|
    require.resolve(packageName);
 | 
						|
    return packageName;
 | 
						|
  } catch (error) {
 | 
						|
    if (error.code === 'MODULE_NOT_FOUND') {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    throw error;
 | 
						|
  }
 | 
						|
};
 | 
						|
class LegacySqliteClient extends SqliteClient {
 | 
						|
  _driver() {
 | 
						|
    return require('sqlite3');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
const clientMap = {
 | 
						|
  'better-sqlite3': 'better-sqlite3',
 | 
						|
  '@vscode/sqlite3': 'sqlite',
 | 
						|
  sqlite3: LegacySqliteClient,
 | 
						|
};
 | 
						|
 | 
						|
const getSqlitePackageName = () => {
 | 
						|
  // NOTE: allow forcing the package to use (mostly used for testing purposes)
 | 
						|
  if (typeof process.env.SQLITE_PKG !== 'undefined') {
 | 
						|
    return process.env.SQLITE_PKG;
 | 
						|
  }
 | 
						|
 | 
						|
  // NOTE: this tries to find the best sqlite module possible to use
 | 
						|
  // while keeping retro compatibility
 | 
						|
  return (
 | 
						|
    trySqlitePackage('better-sqlite3') ||
 | 
						|
    trySqlitePackage('@vscode/sqlite3') ||
 | 
						|
    trySqlitePackage('sqlite3')
 | 
						|
  );
 | 
						|
};
 | 
						|
 | 
						|
const createConnection = (config) => {
 | 
						|
  const knexConfig = { ...config };
 | 
						|
  if (knexConfig.client === 'sqlite') {
 | 
						|
    const sqlitePackageName = getSqlitePackageName();
 | 
						|
 | 
						|
    knexConfig.client = clientMap[sqlitePackageName];
 | 
						|
  }
 | 
						|
 | 
						|
  const knexInstance = knex(knexConfig);
 | 
						|
 | 
						|
  return Object.assign(knexInstance, {
 | 
						|
    getSchemaName() {
 | 
						|
      return this.client.connectionSettings.schema;
 | 
						|
    },
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
module.exports = createConnection;
 |