GAE JS MIGRATIONS
Replaced with MondoKit: We are excited to announce the next generation of GAE JS. Our
ESM-only
set of libraries, migrated from GAE JS and rebranded as MondoKit.You can see a Migration guide from GAE JS to help you move to the new libraries. Many changes are simple search/replace.
We will continue to add minor fixes and patches to this library as required.
Find MondoKit on GitHub.
Setup and Run migrations, with state stored in firestore and a mutex lock to ensure only one is run at a time
Installation
npm install @mondomob/gae-js-migrations
Components
runMigrations
Run Migrations as a function e.g /migrate route handler
bootstrapMigrations
Bootstrap Migrations to be run before application starts
Migration Files
The AutoMigration interface
Use naming convention with date and index number to version migrations
migrations/v_20220122_001_addUsers.ts
const userRepository = new TimestampedRepository<User>("users");
export const v_20220122_001_addUsers: AutoMigration = {
id: "v_20220122_001_addUsers",
migrate: async ({ logger }) => {
logger.info("Adding users");
const createdUsers = await userRepository.save([
{
...newTimestampedEntity("user1"),
name: "User 1",
},
{
...newTimestampedEntity("user2"),
name: "User 2",
},
]);
logger.info(`Creating ${createdUsers.length} new users`);
},
// Optional function that skips if returning true. For example to skip in a certain environment.
// skip: () => true,
// Optional options to override from defaults, or those defined globally
// options: { disableTimestampUpdate: false },
}
Application Startup (index.ts)
import { bootstrap } from "@mondomob/gae-js-core";
import { bootstrapMigrations } from "@mondomob/gae-js-migrations";
import { firestoreLoader, firestoreProvider, newTimestampedEntity } from "@mondomob/gae-js-firestore";
import {v_20220122_001_addUsers} from "./migrations/v_20220122_001_addUsers"
// Add firestore support
firestoreProvider.init();
app.use(firestoreLoader());
// After firestore initialised
const migrations: AutoMigration[] = [
v_20220122_001_addUsers
];
await bootstrap([bootstrapMigrations(migrations)]);
// OR with options
// await bootstrap([bootstrapMigrations(migrations, { disableTimestampUpdate: true })]);
Migration options (either global or per migration)
All properties are optional. These options can be specified globally (via the bootstrapMigrations
or runMigrations
functions) or overridden for an individual migration file (via the AutoMigration
interface with the options
property). Any options set via AutoMigration
options will take preference over global settings or defaults.
Property | Type | Default | Description |
---|---|---|---|
disableTimestampUpdate | boolean | false | If enabled, this will skip automatically updating timestamp values via TimestampedRepository |