chore: Magic phantom types

This commit is contained in:
BluJ
2022-07-18 15:27:36 -06:00
parent 3a7e0989b9
commit 3173b96fc9
2 changed files with 21 additions and 14 deletions

View File

@@ -25,7 +25,7 @@ export function updateConfig<
noRepeat?: NoRepeat<version, type>,
noFail = false,
): M.MigrationFn<version, type> {
return async (effects: T.Effects) => {
return M.migrationFn(async (effects: T.Effects) => {
await noRepeatGuard(effects, noRepeat, async () => {
let config = util.unwrapResultType(await getConfig({})(effects)).config;
if (config) {
@@ -42,7 +42,7 @@ export function updateConfig<
}
});
return { configured };
};
});
}
export async function noRepeatGuard<

View File

@@ -4,7 +4,15 @@ import { matches } from "./dependencies.ts";
export type MigrationFn<version extends string, type extends "up" | "down"> = (
effects: T.Effects,
) => Promise<T.MigrationRes>;
) => Promise<T.MigrationRes> & { _type: type; _version: version };
export function migrationFn<version extends string, type extends "up" | "down">(
fn: (
effects: T.Effects,
) => Promise<T.MigrationRes>,
): MigrationFn<version, type> {
return fn as MigrationFn<version, type>;
}
export interface Migration<version extends string> {
up: MigrationFn<version, "up">;
@@ -34,17 +42,16 @@ export function fromMapping<versions extends string>(
const current = EmVer.parse(currentVersion);
const other = EmVer.parse(version);
const filteredMigrations =
(Object.entries(migrations) as [
keyof MigrationMapping<string>,
Migration<string>,
][])
.map(([version, migration]) => ({
version: EmVer.parse(version),
migration,
})).filter(({ version }) =>
version.greaterThan(other) && version.lessThanOrEqual(current)
);
const filteredMigrations = (Object.entries(migrations) as [
keyof MigrationMapping<string>,
Migration<string>,
][])
.map(([version, migration]) => ({
version: EmVer.parse(version),
migration,
})).filter(({ version }) =>
version.greaterThan(other) && version.lessThanOrEqual(current)
);
const migrationsToRun = matches.matches(direction)
.when("from", () =>