ivy-kit
Version:
Ivy Kit is a CLI migrator tool for [Ivy ORM](https://www.npmjs.com/package/ivy-orm), a fully type-safe "ORM" for Azure AI Search. Use Ivy Kit to manage your AI Search data plane, like creating indexes and indexers.
130 lines (124 loc) • 3.89 kB
TypeScript
import { TokenCredential } from '@azure/identity';
import { z } from 'zod';
import { AzureKeyCredential } from '@azure/search-documents';
declare const indexResourceSchema: z.ZodObject<z.objectUtil.extendShape<{
id: z.ZodString;
name: z.ZodString;
checksum: z.ZodString;
}, {
type: z.ZodLiteral<"index">;
}>, "strip", z.ZodTypeAny, {
id: string;
checksum: string;
type: "index";
name: string;
}, {
id: string;
checksum: string;
type: "index";
name: string;
}>;
declare const indexerResourceSchema: z.ZodObject<z.objectUtil.extendShape<{
id: z.ZodString;
name: z.ZodString;
checksum: z.ZodString;
}, {
type: z.ZodLiteral<"indexer">;
}>, "strip", z.ZodTypeAny, {
id: string;
checksum: string;
type: "indexer";
name: string;
}, {
id: string;
checksum: string;
type: "indexer";
name: string;
}>;
declare const dataSourceResourceSchema: z.ZodObject<z.objectUtil.extendShape<{
id: z.ZodString;
name: z.ZodString;
checksum: z.ZodString;
}, {
type: z.ZodLiteral<"dataSource">;
}>, "strip", z.ZodTypeAny, {
id: string;
checksum: string;
type: "dataSource";
name: string;
}, {
id: string;
checksum: string;
type: "dataSource";
name: string;
}>;
/**
* Type of the state that stores the status of migrations.
*/
type Migration = {
/**
* Randomly generated ID for the migration. Ideally a v4 UUID.
*/
id: string;
/**
* The complete name of the migration directory.
*
* @example `20241002131556-imperial-dragonfly.json`
*/
migrationName: string;
/**
* The sha256 checksum of the migration file at the time the migration is applied. Should never be overwritten.
*/
checksum: string;
/**
* The timestamp at which the migration is started. Written prior to any migration actions.
*/
startedAt: Date;
/**
* The timestamp at which the migration successfully completed. A non-null value indicates the migration succeeded.
*/
finishedAt?: Date | null;
/**
* Any error messages that occurred during teh migration
*/
logs?: string | null;
};
type ResourceType = "index" | "indexer" | "dataSource";
type IndexResource = z.infer<typeof indexResourceSchema>;
type IndexerResource = z.infer<typeof indexerResourceSchema>;
type DataSourceResource = z.infer<typeof dataSourceResourceSchema>;
type Resource = IndexResource | IndexerResource | DataSourceResource;
type StartMigrationArgs = Pick<Migration, "migrationName" | "checksum">;
interface Adapter {
/**
* If defined, runs before commands that interact with backend state.
* Can be used to ensure backend provider is ready.
*/
initialize?(): Promise<void>;
listResources(): Promise<Resource[]>;
updateResource(id: string, data: Partial<Resource>): Promise<void>;
createResource(data: Omit<Resource, "id">): Promise<Resource>;
deleteResource(name: string, type: ResourceType): Promise<void>;
listMigrations(): Promise<Migration[]>;
startMigration(migration: StartMigrationArgs): Promise<Migration>;
succeedMigration(id: string): Promise<Migration>;
errorMigration(id: string, error: string): Promise<Migration>;
}
type Config = {
schema?: string;
endpoint: string;
credential: TokenCredential | AzureKeyCredential;
adapter?: Adapter;
/**
* migrations output directory path, relative to the schema directory
*/
out?: string;
};
/**
* Determines whether a resource is a valid Resource.
*
* @param resource - The resource to evaluate.
* @returns A boolean indicating whether the provided type is a Resource.
*/
declare function isResource(resource: any): resource is Resource;
export { type Adapter, type Config, type Migration, type Resource, type ResourceType, type StartMigrationArgs, isResource };