🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@nanocollective/json-up

Package Overview
Dependencies
Maintainers
2
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nanocollective/json-up - npm Package Compare versions

Comparing version
0.1.3
to
0.2.0
+14
-1
dist/create-migration.d.ts
import type { z } from "zod";
import type { Migration } from "./types.js";
import type { AsyncMigration, Migration } from "./types.js";
/**

@@ -16,2 +16,15 @@ * Type helper for creating standalone migrations with proper type inference.

export declare function createMigration<TInput, TOutput extends z.ZodTypeAny>(migration: Migration<TInput, TOutput>): Migration<TInput, TOutput>;
/**
* Type helper for creating standalone async migrations with proper type inference.
*
* @example
* ```typescript
* const migration = createAsyncMigration({
* version: 1,
* schema: z.object({ name: z.string(), key: z.string() }),
* up: async () => ({ name: "", key: await generateKey() }),
* });
* ```
*/
export declare function createAsyncMigration<TInput, TOutput extends z.ZodTypeAny>(migration: AsyncMigration<TInput, TOutput>): AsyncMigration<TInput, TOutput>;
//# sourceMappingURL=create-migration.d.ts.map
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"create-migration.d.ts","sourceRoot":"","sources":["../src/create-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EACnE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAE5B"}
{"version":3,"file":"create-migration.d.ts","sourceRoot":"","sources":["../src/create-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EACnE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAE5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EACxE,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjC"}

@@ -16,2 +16,17 @@ /**

}
/**
* Type helper for creating standalone async migrations with proper type inference.
*
* @example
* ```typescript
* const migration = createAsyncMigration({
* version: 1,
* schema: z.object({ name: z.string(), key: z.string() }),
* up: async () => ({ name: "", key: await generateKey() }),
* });
* ```
*/
export function createAsyncMigration(migration) {
return migration;
}
//# sourceMappingURL=create-migration.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"create-migration.js","sourceRoot":"","sources":["../src/create-migration.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC9B,SAAqC;IAErC,OAAO,SAAS,CAAC;AAClB,CAAC"}
{"version":3,"file":"create-migration.js","sourceRoot":"","sources":["../src/create-migration.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC9B,SAAqC;IAErC,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAA0C;IAE1C,OAAO,SAAS,CAAC;AAClB,CAAC"}
import type { z } from "zod";
import type { AnyMigration, Migration } from "./types.js";
import type { AnyAsyncMigration, AnyMigration, AsyncMigration, Migration } from "./types.js";
/**

@@ -42,3 +42,51 @@ * Builder interface for creating type-safe migration chains.

export declare function createMigrations(): MigrationBuilder<unknown, readonly []>;
/**
* Builder interface for creating migration chains that support async `up()` functions.
* Each `.add()` call accepts both sync and async `up()` functions.
*/
interface AsyncMigrationBuilder<TPrevOutput, TAccumulated extends readonly AnyAsyncMigration[]> {
/**
* Add a migration to the chain.
* The `up()` function can be sync or async.
* The input type is inferred from the previous migration's output.
*/
add<TSchema extends z.ZodTypeAny>(migration: {
version: number;
schema: TSchema;
up: (state: TPrevOutput) => z.infer<TSchema> | Promise<z.infer<TSchema>>;
}): AsyncMigrationBuilder<z.infer<TSchema>, readonly [...TAccumulated, AsyncMigration<TPrevOutput, TSchema>]>;
/**
* Build and return the migrations array.
*/
build(): TAccumulated;
}
/**
* Creates a builder for migration chains that support async `up()` functions.
*
* Use this instead of `createMigrations()` when any migration needs to perform
* async operations. The built migrations should be passed to `migrateAsync()`.
*
* @example
* ```typescript
* const migrations = createAsyncMigrations()
* .add({
* version: 1,
* schema: z.object({ name: z.string() }),
* up: (state) => ({ name: state.name ?? "" }),
* })
* .add({
* version: 2,
* schema: z.object({ name: z.string(), key: z.string() }),
* up: async (state) => ({
* name: state.name,
* key: await generateKey(),
* }),
* })
* .build();
*
* const result = await migrateAsync({ state, migrations });
* ```
*/
export declare function createAsyncMigrations(): AsyncMigrationBuilder<unknown, readonly []>;
export {};
//# sourceMappingURL=create-migrations.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"create-migrations.d.ts","sourceRoot":"","sources":["../src/create-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1D;;;GAGG;AACH,UAAU,gBAAgB,CAAC,WAAW,EAAE,YAAY,SAAS,SAAS,YAAY,EAAE;IACnF;;;OAGG;IACH,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE;QAC5C,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC7C,GAAG,gBAAgB,CACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAChB,SAAS,CAAC,GAAG,YAAY,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAC3D,CAAC;IAEF;;OAEG;IACH,KAAK,IAAI,YAAY,CAAC;CACtB;AAiCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAEzE"}
{"version":3,"file":"create-migrations.d.ts","sourceRoot":"","sources":["../src/create-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7F;;;GAGG;AACH,UAAU,gBAAgB,CAAC,WAAW,EAAE,YAAY,SAAS,SAAS,YAAY,EAAE;IACnF;;;OAGG;IACH,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE;QAC5C,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC7C,GAAG,gBAAgB,CACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAChB,SAAS,CAAC,GAAG,YAAY,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAC3D,CAAC;IAEF;;OAEG;IACH,KAAK,IAAI,YAAY,CAAC;CACtB;AAiCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAEzE;AAED;;;GAGG;AACH,UAAU,qBAAqB,CAAC,WAAW,EAAE,YAAY,SAAS,SAAS,iBAAiB,EAAE;IAC7F;;;;OAIG;IACH,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE;QAC5C,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACzE,GAAG,qBAAqB,CACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAChB,SAAS,CAAC,GAAG,YAAY,EAAE,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAChE,CAAC;IAEF;;OAEG;IACH,KAAK,IAAI,YAAY,CAAC;CACtB;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,IAAI,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAEnF"}

@@ -37,2 +37,46 @@ /**

}
/**
* Internal async builder implementation.
*/
function createAsyncBuilder(migrations) {
return {
add(migration) {
const newMigrations = [...migrations, migration];
return createAsyncBuilder(newMigrations);
},
build() {
return migrations;
},
};
}
/**
* Creates a builder for migration chains that support async `up()` functions.
*
* Use this instead of `createMigrations()` when any migration needs to perform
* async operations. The built migrations should be passed to `migrateAsync()`.
*
* @example
* ```typescript
* const migrations = createAsyncMigrations()
* .add({
* version: 1,
* schema: z.object({ name: z.string() }),
* up: (state) => ({ name: state.name ?? "" }),
* })
* .add({
* version: 2,
* schema: z.object({ name: z.string(), key: z.string() }),
* up: async (state) => ({
* name: state.name,
* key: await generateKey(),
* }),
* })
* .build();
*
* const result = await migrateAsync({ state, migrations });
* ```
*/
export function createAsyncMigrations() {
return createAsyncBuilder([]);
}
//# sourceMappingURL=create-migrations.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"create-migrations.js","sourceRoot":"","sources":["../src/create-migrations.ts"],"names":[],"mappings":"AA2BA;;GAEG;AACH,SAAS,aAAa,CACrB,UAAwB;IAExB,OAAO;QACN,GAAG,CAA+B,SAIjC;YAIA,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,CAG9C,CAAC;YACF,OAAO,aAAa,CAGlB,aAAa,CAAC,CAAC;QAClB,CAAC;QAED,KAAK;YACJ,OAAO,UAAU,CAAC;QACnB,CAAC;KACD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,aAAa,CAAuB,EAAW,CAAC,CAAC;AACzD,CAAC"}
{"version":3,"file":"create-migrations.js","sourceRoot":"","sources":["../src/create-migrations.ts"],"names":[],"mappings":"AA2BA;;GAEG;AACH,SAAS,aAAa,CACrB,UAAwB;IAExB,OAAO;QACN,GAAG,CAA+B,SAIjC;YAIA,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,CAG9C,CAAC;YACF,OAAO,aAAa,CAGlB,aAAa,CAAC,CAAC;QAClB,CAAC;QAED,KAAK;YACJ,OAAO,UAAU,CAAC;QACnB,CAAC;KACD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,aAAa,CAAuB,EAAW,CAAC,CAAC;AACzD,CAAC;AA2BD;;GAEG;AACH,SAAS,kBAAkB,CAC1B,UAAwB;IAExB,OAAO;QACN,GAAG,CAA+B,SAIjC;YAIA,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,EAAE,SAAS,CAG9C,CAAC;YACF,OAAO,kBAAkB,CAGvB,aAAa,CAAC,CAAC;QAClB,CAAC;QAED,KAAK;YACJ,OAAO,UAAU,CAAC;QACnB,CAAC;KACD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,qBAAqB;IACpC,OAAO,kBAAkB,CAAuB,EAAW,CAAC,CAAC;AAC9D,CAAC"}

@@ -1,7 +0,7 @@

export { createMigration } from "./create-migration.js";
export { createMigrations } from "./create-migrations.js";
export { createAsyncMigration, createMigration } from "./create-migration.js";
export { createAsyncMigrations, createMigrations } from "./create-migrations.js";
export { MigrationError, ValidationError, VersionError } from "./errors.js";
export type { MigrateOptions } from "./migrate.js";
export { migrate } from "./migrate.js";
export type { AnyMigration, InferMigrationInput, LastMigrationOutput, Migration, WithVersion, } from "./types.js";
export type { MigrateAsyncOptions, MigrateOptions } from "./migrate.js";
export { migrate, migrateAsync } from "./migrate.js";
export type { AnyAsyncMigration, AnyMigration, AsyncMigration, InferAsyncMigrationInput, InferMigrationInput, LastAsyncMigrationOutput, LastMigrationOutput, Migration, WithVersion, } from "./types.js";
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACX,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,EACT,WAAW,GACX,MAAM,YAAY,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EACX,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,SAAS,EACT,WAAW,GACX,MAAM,YAAY,CAAC"}
// Types
// Functions
export { createMigration } from "./create-migration.js";
export { createMigrations } from "./create-migrations.js";
export { createAsyncMigration, createMigration } from "./create-migration.js";
export { createAsyncMigrations, createMigrations } from "./create-migrations.js";
// Errors
export { MigrationError, ValidationError, VersionError } from "./errors.js";
export { migrate } from "./migrate.js";
export { migrate, migrateAsync } from "./migrate.js";
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AAER,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AAER,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACjF,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}

@@ -1,2 +0,2 @@

import type { AnyMigration, LastMigrationOutput, WithVersion } from "./types.js";
import type { AnyAsyncMigration, AnyMigration, LastAsyncMigrationOutput, LastMigrationOutput, WithVersion } from "./types.js";
/**

@@ -32,2 +32,38 @@ * Options for the migrate function.

export declare function migrate<TMigrations extends readonly AnyMigration[], TKey extends string = "_version">(options: MigrateOptions<TMigrations, TKey>): WithVersion<LastMigrationOutput<TMigrations>, TKey>;
/**
* Options for the migrateAsync function.
*/
export interface MigrateAsyncOptions<TMigrations extends readonly AnyAsyncMigration[], TKey extends string = "_version"> {
/** The state object to migrate */
state: unknown;
/** Array of migrations to apply (sync or async `up()` functions) */
migrations: TMigrations;
/** The key used to store the version (default: "_version") */
key?: TKey;
}
/**
* Migrates a state object through a series of migrations, supporting async `up()` functions.
*
* Works identically to `migrate()` but awaits each `up()` call, allowing migrations
* to perform async operations (database calls, network requests, etc.).
*
* Sync migrations built with `createMigrations()` can also be passed here since
* `Migration` is structurally compatible with `AsyncMigration`.
*
* @param options - Migration options
* @returns A promise resolving to the migrated state with the version field
*
* @throws {VersionError} If migrations array is empty or unsorted
* @throws {MigrationError} If an `up()` function throws or rejects
* @throws {ValidationError} If schema validation fails
*
* @example
* ```typescript
* const result = await migrateAsync({
* state: { _version: 1, name: "hello" },
* migrations,
* });
* ```
*/
export declare function migrateAsync<TMigrations extends readonly AnyAsyncMigration[], TKey extends string = "_version">(options: MigrateAsyncOptions<TMigrations, TKey>): Promise<WithVersion<LastAsyncMigrationOutput<TMigrations>, TKey>>;
//# sourceMappingURL=migrate.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,cAAc,CAC9B,WAAW,SAAS,SAAS,YAAY,EAAE,EAC3C,IAAI,SAAS,MAAM,GAAG,UAAU;IAEhC,kCAAkC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,UAAU,EAAE,WAAW,CAAC;IACxB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,IAAI,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,OAAO,CACtB,WAAW,SAAS,SAAS,YAAY,EAAE,EAC3C,IAAI,SAAS,MAAM,GAAG,UAAU,EAC/B,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CA8DjG"}
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc,CAC9B,WAAW,SAAS,SAAS,YAAY,EAAE,EAC3C,IAAI,SAAS,MAAM,GAAG,UAAU;IAEhC,kCAAkC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,UAAU,EAAE,WAAW,CAAC;IACxB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,IAAI,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,OAAO,CACtB,WAAW,SAAS,SAAS,YAAY,EAAE,EAC3C,IAAI,SAAS,MAAM,GAAG,UAAU,EAC/B,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CA8DjG;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CACnC,WAAW,SAAS,SAAS,iBAAiB,EAAE,EAChD,IAAI,SAAS,MAAM,GAAG,UAAU;IAEhC,kCAAkC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,UAAU,EAAE,WAAW,CAAC;IACxB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,IAAI,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,YAAY,CACjC,WAAW,SAAS,SAAS,iBAAiB,EAAE,EAChD,IAAI,SAAS,MAAM,GAAG,UAAU,EAEhC,OAAO,EAAE,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,GAC7C,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC,CA8DnE"}

@@ -70,2 +70,75 @@ import { z } from "zod";

}
/**
* Migrates a state object through a series of migrations, supporting async `up()` functions.
*
* Works identically to `migrate()` but awaits each `up()` call, allowing migrations
* to perform async operations (database calls, network requests, etc.).
*
* Sync migrations built with `createMigrations()` can also be passed here since
* `Migration` is structurally compatible with `AsyncMigration`.
*
* @param options - Migration options
* @returns A promise resolving to the migrated state with the version field
*
* @throws {VersionError} If migrations array is empty or unsorted
* @throws {MigrationError} If an `up()` function throws or rejects
* @throws {ValidationError} If schema validation fails
*
* @example
* ```typescript
* const result = await migrateAsync({
* state: { _version: 1, name: "hello" },
* migrations,
* });
* ```
*/
export async function migrateAsync(options) {
const { state, migrations, key = "_version" } = options;
// Validate migrations array
if (migrations.length === 0) {
throw new VersionError("Migrations array cannot be empty");
}
// Check migrations are sorted by version
for (let i = 1; i < migrations.length; i++) {
const prev = migrations[i - 1];
const curr = migrations[i];
if (prev && curr && prev.version >= curr.version) {
throw new VersionError(`Migrations must be sorted by version in ascending order. Found version ${prev.version} before ${curr.version}`);
}
}
// Get current version from state
let currentVersion = 0;
if (state !== null && typeof state === "object" && key in state) {
const version = state[key];
if (typeof version === "number") {
currentVersion = version;
}
}
// Find migrations to apply
const migrationsToApply = migrations.filter((m) => m.version > currentVersion);
// Run migrations sequentially
let currentState = state;
for (const migration of migrationsToApply) {
// Run the up function (await handles both sync and async)
let result;
try {
result = await migration.up(currentState);
}
catch (error) {
throw new MigrationError(migration.version, error);
}
// Add version to result
if (result !== null && typeof result === "object") {
result[key] = migration.version;
}
// Validate against schema with version field
const schemaWithVersion = migration.schema.and(z.object({ [key]: z.literal(migration.version) }));
const parseResult = schemaWithVersion.safeParse(result);
if (!parseResult.success) {
throw new ValidationError(migration.version, parseResult.error.issues);
}
currentState = parseResult.data;
}
return currentState;
}
//# sourceMappingURL=migrate.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB5E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,OAAO,CAGrB,OAA0C;IAC3C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,UAAkB,EAAE,GAAG,OAAO,CAAC;IAEhE,4BAA4B;IAC5B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,YAAY,CAAC,kCAAkC,CAAC,CAAC;IAC5D,CAAC;IAED,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,IAAI,YAAY,CACrB,0EAA0E,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,OAAO,EAAE,CAC/G,CAAC;QACH,CAAC;IACF,CAAC;IAED,iCAAiC;IACjC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACjE,MAAM,OAAO,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,cAAc,GAAG,OAAO,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,2BAA2B;IAC3B,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC;IAE/E,8BAA8B;IAC9B,IAAI,YAAY,GAAY,KAAK,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC3C,sBAAsB;QACtB,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACJ,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,wBAAwB;QACxB,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;QAC9D,CAAC;QAED,6CAA6C;QAC7C,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CACjD,CAAC;QAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QAED,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,OAAO,YAAmE,CAAC;AAC5E,CAAC"}
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}

@@ -29,2 +29,29 @@ import type { z } from "zod";

/**
* A migration that can have an async `up()` function.
* Sync `up()` functions are also accepted (T is a subtype of T | Promise<T>).
*/
export type AsyncMigration<TInput = unknown, TOutput extends z.ZodTypeAny = z.ZodTypeAny> = {
version: number;
schema: TOutput;
up: (state: TInput) => z.infer<TOutput> | Promise<z.infer<TOutput>>;
};
/**
* An async migration with any input/output types. Used for array constraints.
*/
export type AnyAsyncMigration = AsyncMigration<any, any>;
/**
* Infers the input type of the first async migration in a tuple.
*/
export type InferAsyncMigrationInput<T extends readonly AnyAsyncMigration[]> = T extends readonly [
AsyncMigration<infer TInput, z.ZodTypeAny>,
...AnyAsyncMigration[]
] ? TInput : unknown;
/**
* Infers the output type of the last async migration in a tuple.
*/
export type LastAsyncMigrationOutput<T extends readonly AnyAsyncMigration[]> = T extends readonly [
...any[],
AsyncMigration<infer _TInput, infer TOutput>
] ? z.infer<TOutput> : unknown;
/**
* Helper type to add version key to an object type.

@@ -31,0 +58,0 @@ */

@@ -1,1 +0,1 @@

{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF;;GAEG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,IAAI,CAAC,SAAS,SAAS;IACvF,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrC,GAAG,YAAY,EAAE;CACjB,GACE,MAAM,GACN,OAAO,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,IAAI,CAAC,SAAS,SAAS;IAEvF,GAAG,GAAG,EAAE;IACR,SAAS,CAAC,MAAM,OAAO,EAAE,MAAM,OAAO,CAAC;CACvC,GACE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAChB,OAAO,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,MAAM;CAAE,CAAC"}
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF;;GAEG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,IAAI,CAAC,SAAS,SAAS;IACvF,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrC,GAAG,YAAY,EAAE;CACjB,GACE,MAAM,GACN,OAAO,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,IAAI,CAAC,SAAS,SAAS;IAEvF,GAAG,GAAG,EAAE;IACR,SAAS,CAAC,MAAM,OAAO,EAAE,MAAM,OAAO,CAAC;CACvC,GACE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAChB,OAAO,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CACpE,CAAC;AAEF;;GAEG;AAEH,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE,IAAI,CAAC,SAAS,SAAS;IACjG,cAAc,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IAC1C,GAAG,iBAAiB,EAAE;CACtB,GACE,MAAM,GACN,OAAO,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE,IAAI,CAAC,SAAS,SAAS;IAEjG,GAAG,GAAG,EAAE;IACR,cAAc,CAAC,MAAM,OAAO,EAAE,MAAM,OAAO,CAAC;CAC5C,GACE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAChB,OAAO,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,MAAM;CAAE,CAAC"}
{
"name": "@nanocollective/json-up",
"version": "0.1.3",
"version": "0.2.0",
"description": "A TypeScript JSON migration tool with Zod schema validation",

@@ -5,0 +5,0 @@ "type": "module",

@@ -10,2 +10,3 @@ # json-up

- **Fluent builder API** for migration chains
- **Async migration support** for migrations that need async operations
- **Automatic version tracking**

@@ -51,2 +52,29 @@ - **Zero runtime dependencies** (only Zod as peer)

### Async migrations
When your migrations need to perform async operations, use the async API:
```typescript
import { createAsyncMigrations, migrateAsync } from "@nanocollective/json-up";
import { z } from "zod";
const migrations = createAsyncMigrations()
.add({
version: 1,
schema: z.object({ name: z.string() }),
up: (data) => ({ name: data.name ?? "" }),
})
.add({
version: 2,
schema: z.object({ name: z.string(), key: z.string() }),
up: async (data) => ({
name: data.name,
key: await generateKey(),
}),
})
.build();
const result = await migrateAsync({ state, migrations });
```
## Documentation

@@ -53,0 +81,0 @@