Skip to content

Commit

Permalink
feat(url): add a bundle for all drivers
Browse files Browse the repository at this point in the history
  • Loading branch information
Antoine Monnet committed Jan 30, 2025
1 parent 4a3b618 commit 88f41ab
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/loader/_utils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { Driver, AsyncDriverFactory } from "../types";

export function coerceQuery(query: Record<string, string | string[]>) {
return Object.fromEntries(
Object.entries(query).map(([key, value]: [string, string | string[]]) => {
Expand All @@ -17,3 +19,15 @@ function coerceValue(value: string | string[]): any {
return value;
}
}

export function factoryLoader<OptionsT, InstanceT>(
loader: () => any
): AsyncDriverFactory<OptionsT, InstanceT> {
async function dynamicFactory(
options: OptionsT
): Promise<Driver<OptionsT, InstanceT>> {
const factory = (await loader()).default;
return factory(options);
}
return dynamicFactory;
}
48 changes: 48 additions & 0 deletions src/loader/all.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { factoryLoader } from "./_utils";

const all = {
"azure+appconfigarution": factoryLoader(
() => import("../drivers/azure-app-configuration")
),
"azure+cosmos": factoryLoader(() => import("../drivers/azure-cosmos")),
"azure+keyvault": factoryLoader(() => import("../drivers/azure-key-vault")),
"azure+blob": factoryLoader(() => import("../drivers/azure-storage-blob")),
"azure+table": factoryLoader(() => import("../drivers/azure-storage-table")),
"capacitor+preferences": factoryLoader(
() => import("../drivers/capacitor-preferences")
),
"cloudflarekv+binding": factoryLoader(
() => import("../drivers/cloudflare-kv-binding")
),
"cloudflarekv+http": factoryLoader(
() => import("../drivers/cloudflare-kv-http")
),
"cloudflarer2+binding": factoryLoader(
() => import("../drivers/cloudflare-r2-binding")
),
db: factoryLoader(() => import("../drivers/db0")),
"denokv+node": factoryLoader(() => import("../drivers/deno-kv-node")),
denokv: factoryLoader(() => import("../drivers/deno-kv")),
file: factoryLoader(() => import("../drivers/fs")),
github: factoryLoader(() => import("../drivers/github")),
http: factoryLoader(() => import("../drivers/http")),
https: factoryLoader(() => import("../drivers/http")),
indexedb: factoryLoader(() => import("../drivers/indexedb")),
localstorage: factoryLoader(() => import("../drivers/localstorage")),
cache: factoryLoader(() => import("../drivers/lru-cache")),
memory: factoryLoader(() => import("../drivers/memory")),
mongodb: factoryLoader(() => import("../drivers/mongodb")),
"netlify+blobs": factoryLoader(() => import("../drivers/netlify-blobs")),
null: factoryLoader(() => import("../drivers/null")),
overlay: factoryLoader(() => import("../drivers/overlay")),
planetscale: factoryLoader(() => import("../drivers/planetscale")),
redis: factoryLoader(() => import("../drivers/redis")),
s3: factoryLoader(() => import("../drivers/s3")),
sessionstorage: factoryLoader(() => import("../drivers/session-storage")),
uploadthing: factoryLoader(() => import("../drivers/uploadthing")),
upstash: factoryLoader(() => import("../drivers/upstash")),
"vercel+blob": factoryLoader(() => import("../drivers/vercel-blob")),
"vercel+kv": factoryLoader(() => import("../drivers/vercel-kv")),
};

export default all;
4 changes: 4 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ export type DriverFactory<OptionsT, InstanceT> = (
opts: OptionsT
) => Driver<OptionsT, InstanceT>;

export type AsyncDriverFactory<OptionsT, InstanceT> = (
opts: OptionsT
) => Promise<Driver<OptionsT, InstanceT>>;

type StorageDefinition = {
items: unknown;
[key: string]: unknown;
Expand Down
6 changes: 6 additions & 0 deletions test/loader.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { describe, it, expect } from "vitest";
import { defineDriver } from "../src";
import { loadFromUrl } from "../src/loader";
import all from "../src/loader/all";

interface Options {
scheme: string;
Expand Down Expand Up @@ -47,4 +48,9 @@ describe("loader", () => {
expect(driver.options.array).toStrictEqual([2, 3, 4]);
expect(driver.options.object).toStrictEqual({ h: 5, i: 6, j: "7" });
});

it("all bundle", async () => {
const driver = await loadFromUrl("memory:", all);
expect(driver.name).toBe("memory");
});
});

0 comments on commit 88f41ab

Please sign in to comment.