New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@leapfrogtechnology/sync-db

Package Overview
Dependencies
Maintainers
3
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@leapfrogtechnology/sync-db

Command line utility to synchronize and version control relational database objects across databases

  • 1.0.0-alpha.6
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
264
increased by61.96%
Maintainers
3
Weekly downloads
 
Created
Source

sync-db

Command line utility to synchronize and version control relational database objects across databases.

Version Travis Language grade: TypeScript LICENSE PRs Welcome

Installation

Using npm:

$ npm install @leapfrogtechnology/sync-db

You can install it globally as well.

$ npm install -g @leapfrogtechnology/sync-db

Drivers Installation

You'll need to install the database driver specific to your project separately.

For instance - if your project uses MSSQL, you will need to do:

$ yarn add mssql

This utility uses Knex under the hood so these are the supported drivers.

Usage

You can use sync-db both as a CLI utility and programmatically.

CLI

When installed globally, you can invoke the CLI directly.

The CLI exposes a single command sync-db that runs synchronize operation based on your configuration.

CLI Options

Below shown are the available CLI options , which is also the output printed by sync-db --help.

Synchronize database

USAGE
  $ sync-db

OPTIONS
  -f, --force    Force synchronization
  -h, --help     Print help information
  -v, --version  Print version

Refer to the examples section below for full example with CLI usage.

Programmatic Usage

You may use programmatic API as shown below in case you need better flexibility based on your needs.

import { synchronize, loadConfig, resolveConnections } from '@leapfrogtechnology/sync-db';

(async () => {
  const config = await loadConfig(); // Load sync-db.yml
  const connections = await resolveConnections(); // Load connections.sync-db.json

  // Invoke the command.
  await synchronize(config, connections);
})();

You can also pass your own database connection (eg: Knex connection) instead of resolving connections.sync-db.json file.

import * as Knex from 'knex';
import { synchronize, loadConfig } from '@leapfrogtechnology/sync-db';

(async () => {
  const config = await loadConfig(); // Load sync-db.yml
  const connection = Knex({
    // Your Knex connection instance.
    client: 'mssql',
    connection: {
      host: 'host',
      user: 'userName',
      password: 'password',
      database: 'dbName'
    }
  });
  const options = { force: false };

  // Invoke the command.
  await synchronize(config, connection, options);
})();

Configuration

  1. Sync Configuration
  2. Database Connections

1. Sync Configuration

sync-db expects the configuration file sync-db.yml to be present in your working directory. This holds all your configurations.

sync-db.yml

# Base path for the SQL source files.
basePath: /path/to/sql

sql:
  - schema/<schema_name>.sql
  - function/<schema_name>/<function_name>.sql
  - procedure/<schema_name>/<procedure_name>.sql
Configuration Options
  • basePath (string) - Base directory to hold all your SQL source files (default: "src/sql").
  • sql (array) - A series of SQL file paths that are to be run in ordered sequence (top to bottom), based on dependency. It should be noted that the source files needs to follow this convention of directory hierarchy. File paths listed here are relative to basePath value.

2. Database Connections

Database connections are configured in connections-sync-db.json file in your project root directory as shown below.

Since it contains all your database credentails, it is recommended that you DO NOT COMMIT it to VCS.

connections-sync-db.json

{
  "connections": [
    {
      "id": "db1",
      "host": "localhost",
      "port": 1433,
      "user": "db1user",
      "database": "db1",
      "password": "password",
      "client": "mssql"
    }
  ]
}

Note: The connections key expects an array, so you can also provide multiple databases and sync-db ensures your configured db objects are synced across all these databases.

Caveat

Setup and Teardown steps aren't always run within a single transaction. You need to pass the transaction instance object explicitly to make sure this happens.

await db.transaction(async trx => {
  // Rollback and create all db objects using config.
  await synchronize(config, trx);
});

Examples

  1. Node MSSQL Sample (JavaScript)

Changelog

Check the CHANGELOG for release history.

Contributing

Feel free to send pull requests.

License

Licensed under The MIT License.

Keywords

FAQs

Package last updated on 28 Aug 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc