Home

Awesome

<h1 align="center">Nessie</h1> <p align="center"> <a href="https://deno.land/x/nessie"> <img alt="GitHub release (latest SemVer)" src="https://img.shields.io/github/v/release/halvardssm/deno-nessie?label=Nessie%20stable&style=for-the-badge&logo=data:image/png;base64,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" /> </a> <a href="https://deno.land/x/nessie"> <img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/halvardssm/deno-nessie?include_prereleases&label=Nessie%20Next&style=for-the-badge&logo=data:image/png;base64,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" /> </a> <a href="https://doc.deno.land/https/deno.land/x/nessie/mod.ts"> <img alt="Docs" src="https://img.shields.io/badge/Nessie-doc-informational.svg?style=for-the-badge&logo=data:image/png;base64,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" /> </a> <a href="https://deno.land"> <img alt="Deno Version" src="https://img.shields.io/badge/deno-v1.37.0-green.svg?style=for-the-badge&logo=deno"/> </a> <a href="https://github.com/halvardssm/deno-nessie/actions?query=branch%3Amain+workflow%3ACI"> <img alt="GitHub Workflow Status (branch)" src="https://img.shields.io/github/workflow/status/halvardssm/deno-nessie/CI/main?style=for-the-badge&logo=github"> </a> <a href="https://app.codecov.io/gh/halvardssm/deno-nessie"> <img alt="Codecov" src="https://img.shields.io/codecov/c/gh/halvardssm/deno-nessie?logo=codecov&style=for-the-badge&token=O59WOJ5W00" /> </a> <a href="./LICENSE"> <img alt="License" src="https://img.shields.io/github/license/c4spar/deno-cliffy?logo=github&style=for-the-badge" /> </a> <a href="https://discord.gg/8WXfG2tvfr"> <img alt="Discord" src="https://img.shields.io/badge/chat-on%20discord-green.svg?style=for-the-badge&logo=discord" /> </a> <a href="https://hub.docker.com/repository/docker/halvardm/nessie"> <img alt="Docker Image Size (tag)" src="https://img.shields.io/docker/image-size/halvardm/nessie/latest?logo=docker&style=for-the-badge" /> </a> <br> <a href="https://deno.land/x/nessie"> <img alt="deno.land" src="https://img.shields.io/badge/Published%20on-deno.land-blue?logo=deno&labelColor=272727&color=272727&style=for-the-badge" /> </a> <a href="https://nest.land/package/Nessie"> <img alt="nest.land" src="https://nest.land/badge-large.svg"> </a> </p> <p align="center"> <b>A modular database migration tool for <a href="https://deno.land">Deno</a> inspired by <a href="https://github.com/laravel/laravel">Laravel</a> and <a href="https://github.com/cakephp/phinx">Phinx</a>.</b></br> <sub>Supports PostgreSQL, MySQL, MariaDB and SQLite.</sub> </p> <p align="center"><img src="./.github/logo.png" alt="Nessie logo" width="200" height="200"></p>

Call for donations: If you are using Nessie commercially, please consider supporting the future development. See this issue for more information.

⚠️ With the native Prisma support for Deno, I no longer use Nessie for my projects. This means that Nessie will be unmaintained in the near future. See the related issue for more information.

🎉 Version 2 is released: To migrate from version 1 follow the steps in the migration section bellow.

See documentation for the clients.

Even though all examples in this readme applies unversioned usage, you should always use a version when using Nessie.


Contents

Available Via

CLI Usage

It is suggested you restrict the permissions Nessie has as much as possible, to only the permissions its needs. An example of this is:

deno install --unstable --allow-net=<db hostname/ip>:<db port> --allow-read=. --allow-write=nessie.config.ts,db -f  https://deno.land/x/nessie/cli.ts

Flags

Deno flags and Permissions

While the examples simply show -A as the permission flag, you can also limit the permissions according to your needs. Bellow you will see what Nessie actually needs.

Config file

The config interface is exported from mod.ts as NessieConfig.

export interface NessieConfig {
  /** Can be any class which extends `AbstractClient`. */
  client: AbstractClient<any>;
  /**
   * The folders where migration files are located.
   * Can be a relative path or an absolute path.
   * Defaults to ['./db/migrations/'] if additionalMigrationFiles is not populated
   */
  migrationFolders?: string[];
  /**
   * The folders where seed files are located.
   * Can be a relative path or an absolute path.
   * Defaults to ['./db/seeds/'] if additionalSeedFiles is not populated
   */
  seedFolders?: string[];
  /**
   * Additional migration files which will be added to the
   * list to parse when running the migrate or rollback command.
   * Can be any format supported by `import()` e.g. url or path
   */
  additionalMigrationFiles?: string[];
  /**
   * Additional seed files which will be added to the list to
   * match against when running the seed command.
   * Can be any format supported by `import()` e.g. remote url or path
   */
  additionalSeedFiles?: string[];
  /** Custom migration template, can be path or url. When also using the CLI flag `--migrationTemplate`, it will have precidence. */
  migrationTemplate?: string;
  /** Custom seed template, can be path or url. When also using the CLI flag `--seedTemplate`, it will have precidence. */
  seedTemplate?: string;
  /** Enables verbose output for debugging */
  debug?: boolean;
}

Remote Migration or Seed files

With the introduction of additionalMigrationFiles and additionalSeedFiles, you can now include remote migration and seed files which you can fetch for example via ftp or using api's like gihub or gitlab. Any input which can be given to the dynamic import() can be provided.

// nessie.config.ts
...
additionalMigrationFiles: ['https://example.com/some_migration_file.ts'],
additionalSeedFiles: ['https://example.com/some_seed_file.ts'],
...

See the example folder for more examples.

Custom Migration or Seed templates

As your project grows, or you are starting to have multiple project but want the same logic across the migrations, you might find it tedious to change the seed and migration files after creating them. To get around this, you can provide the options migrationTemplate and seedTemplate in the config file, or use the corresponding flags from the command line. There are no restrictions to what the file has to contain, so you can even provide an empty file if that is your preferred starting point.

A general usecase for providing custom templates is in the case that you use a custom AbstractMigration or AbstractSeed class, and want to use this for all your future migrations and seeds.

See the example folder for more examples.

Docker usage

See the specific Nessie image docs for using Nessie with a docker image.

Uses

Examples

See example repo for a REST API which uses Oak and Nessie.

See the example folder for more examples.

Nessie uses the AbstractMigration class which you can extend to access the client and its properties. This enables better flexibility in migrations and seeds and allows a more complex workflow.

nessie.config.ts with all default values

import {
  ClientPostgreSQL,
  NessieConfig,
} from "https://deno.land/x/nessie/mod.ts";

const clientPg = new ClientPostgreSQL({
  database: "nessie",
  hostname: "localhost",
  port: 5432,
  user: "root",
  password: "pwd",
});

const config: NessieConfig = {
  client: clientPg,
  migrationFolders: ["./db/migrations"],
  seedFolders: ["./db/seeds"],
  additionalMigrationFiles: [],
  additionalSeedFiles: [],
  migrationTemplate: undefined,
  seedTemplate: undefined,
  debug: false,
};

export default config;

Minimal example of a migration file

import {
  AbstractMigration,
  ClientPostgreSQL,
  Info,
} from "https://deno.land/x/nessie/mod.ts";

export default class extends AbstractMigration<ClientPostgreSQL> {
  async up({ dialect }: Info): Promise<void> {
    await this.client.queryArray("CREATE TABLE table1 (id int)");
  }

  async down({ dialect }: Info): Promise<void> {
    await this.client.queryArray("DROP TABLE table1");
  }
}

Seed file

import {
  AbstractSeed,
  ClientPostgreSQL,
  Info,
} from "https://deno.land/x/nessie/mod.ts";

export default class extends AbstractSeed<ClientPostgreSQL> {
  async run({ dialect }: Info): Promise<void> {
    await this.client.queryArray("INSERT INTO table1 VALUES (1234)");
  }
}

See the example folder for more

Clients

Provided clients are

If you would like to see your DB flavor supported, take a look at how to make a client plugin with examples in the clients folder or in the next section .

How to make a client

A client needs to extend AbstractClient.

query: Takes a query string or array of query strings and sends them of to the database for execution. Should return whatever the database responds.

prepare: Will be run when the migration or rollback commands are executed. This should create the connection, set up the nessie_migrations table and prepare the database for incoming migrations.

migrate: Takes a number as an optional input, will default to all files if not set. Will run Math.min(amount, numberOfFiles) migration files. Only handles the up method.

rollback: Takes a number as an optional input, will default to 1 if not set. Will run Math.min(amount, numberOfFiles) migration files. Only handles the down method.

seed: Takes an optional matcher as input. Matcher can be regex or string. Will seed the database. Handles the run method in seed files.

close: Will be the last method run before the program is finished. This should close the database connection.

See the existing examples in the clients folder for reference.

Migrate from version 1

If you are migrating from version 1, and starting from scratch is not an option, there are a couple of steps to perform. If you have any questions regarding the steps, please open a new discussion (not an issue).

⚠️ The contributors of Nessie takes no responsibility for any dataloss which might occur, so make sure to back up all existing data in your databases before migrating and test it locally before executing any changes to your production environment.

  1. Back up existing data

  2. Update the nessie.config.ts file to the new syntax (see the examples folder)

  3. (Skip this step if you already updated the timestamps) Run the update_timestamps command from the CLI to update the migration file names and database entries (only the nessie_migrations table). Use the latest version of Nessie e.g.

    deno run -A --unstable https://deno.land/x/nessie@2.0.0/cli.ts update_timestamps
    
  4. Update all imports of Nessie to the latest version in your migration and seed files

  5. Update the migration and seed files to use the new format (class based migration files)

If you come across any issues, you can open a new discussion on GitHub.

Contributing

All contributions are welcome, make sure to read the contribution guideline.