npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

abstract-migrator

v1.2.2

Published

Simple fixture for maintaining migrations that have their state stored in the storage that they reference.

Downloads

13

Readme

abstract-migrator

Simple fixture for maintaining migrations that have their state stored in the storage that they reference.

Installation

$ yarn global add abstract-migrator

To make the amigrate script available everywhere, or omit global to install it in node_modules/.bin/

Supported data stores

These adapters should be short & simple, and they have access to the credentials on the stores they modify, so it's worth taking a look at their code to make sure everything is on the up-and-up:

Configuration

In migrations/, migrations/$type or the parent folder of migrations in your project, according to your preference, add conf.js and (optionally) secrets.js files that export enough information to connect to the relevant data store(s). (The split between conf and secrets is so you can commit common settings in the former and .gitignore secrets.js for local credentials)

See the documentation for the module implementing migrations on your data store(s) to see which parameters are considered.

Usage

These examples assume you have cd-ed to migrations/$type/ in your project path. You can also supply --path /project/path/migrations/$type instead of relying on the working directory.

View help

$ amigrate
Usage: amigrate [options] verb [verb args]
... snip ...

Create a migration

$ amigrate create test migration
/project/path/migrations/$type/2018-05-24T17-00-55-821Z-test-migration.js

Since the output is the generated filename, you can edit immediately with, e.g.,

$ vim `amigrate create another test migration`

This is a file that exports { up, down } methods that are passed an instance of a client connection to the data store. These methods should either do their work synchronously or return a Promise that resolves when they're done.

You can change how these newly-created migrations look by creating & editing /project/path/migrations/$type/template.js

Run a migration

Single target:

$ amigrate up /project/path/migrations/$type/2018-05-24T17-00-55-821Z-test-migration.js

All unapplied:

$ amigrate up

Roll back a migration

Single target only:

$ amigrate down /project/path/migrations/$type/2018-05-24T17-00-55-821Z-test-migration.js

Custom adapters

There are examples above that serve as a good model. The formal requirements are:

index.js should export a function that accepts configuration parameters and returns a Promise that resolves to an instance of your adapter class when it's ready. The parameters are a hex-object, which you can read about here, or just call .get() on it to get a plain old object.

The adapter class must implement a few things:

  • get handle() - A connection to the data store, passed to up() and down(). The API here is up to you and the libraries you use, but callback-style APIs must be promisified.
  • applied(name) - Returns a boolean indicating whether a migration of the given name is already in the 'up' state.
  • record(name) - Mark the migration name as 'up'
  • remove(name) - Mark the migration name as 'down' (or just remove the 'up' mark)
  • commit() - Persist changes made this session permanently, where practical
  • rollback() - Remove changes attempted this session, where practical
  • close() - Cleanly shut down the client connection