build: esm-only dist (#686)

This commit is contained in:
Pooya Parsa 2025-10-07 20:36:43 +02:00 committed by GitHub
parent d1c7ce0ee7
commit 730a455ece
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
81 changed files with 954 additions and 1067 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@ __*
test/fs-storage/**
.env
.wrangler
tsconfig.tsbuildinfo

View File

@ -1,25 +1,13 @@
import { defineBuildConfig } from "unbuild";
import { defineBuildConfig } from "obuild/config";
export default defineBuildConfig({
declaration: true,
rollup: {
emitCJS: true,
},
entries: [
"src/index",
"src/server",
{
type: "transform",
input: "src/drivers/",
outDir: "drivers",
format: "esm",
},
{
input: "src/drivers/",
outDir: "drivers",
format: "cjs",
ext: "cjs",
declaration: false,
outDir: "dist/drivers",
},
],
externals: ["mongodb", "unstorage", /unstorage\/drivers\//],
});

View File

@ -6,36 +6,24 @@
"repository": "unjs/unstorage",
"license": "MIT",
"sideEffects": false,
"type": "module",
"exports": {
"./drivers/*": {
"types": "./drivers/*.d.ts",
"import": "./drivers/*.mjs",
"require": "./drivers/*.cjs"
},
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
},
"./server": {
"types": "./dist/server.d.ts",
"import": "./dist/server.mjs",
"require": "./dist/server.cjs"
}
"./drivers/*": "./drivers/*.mjs",
".": "./dist/index.mjs",
"./server": "./dist/server.mjs"
},
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"main": "./dist/index.mjs",
"types": "./dist/index.d.mts",
"files": [
"dist",
"drivers",
"server.d.ts"
],
"scripts": {
"bench": "jiti test/server.bench.ts",
"build": "pnpm gen-drivers && unbuild",
"gen-drivers": "jiti scripts/gen-drivers.ts",
"bench": "node test/server.bench.ts",
"build": "pnpm gen-drivers && obuild",
"dev": "vitest",
"gen-drivers": "jiti scripts/gen-drivers.ts",
"lint": "eslint . && prettier -c .",
"lint:fix": "eslint . --fix && prettier -w .",
"prepack": "pnpm build",
@ -97,10 +85,10 @@
"mlly": "^1.8.0",
"mongodb": "^6.20.0",
"mongodb-memory-server": "^10.2.1",
"obuild": "^0.2.1",
"prettier": "^3.6.2",
"scule": "^1.3.0",
"typescript": "^5.9.2",
"unbuild": "^3.6.1",
"uploadthing": "^7.7.4",
"vite": "^7.1.6",
"vitest": "^3.2.4",
@ -125,6 +113,7 @@
"db0": ">=0.2.1",
"idb-keyval": "^6.2.1",
"ioredis": "^5.4.2",
"mongodb": "^6.20.0",
"uploadthing": "^7.4.4"
},
"peerDependenciesMeta": {
@ -182,21 +171,24 @@
"ioredis": {
"optional": true
},
"mongodb": {
"optional": true
},
"uploadthing": {
"optional": true
}
},
"packageManager": "pnpm@10.17.0",
"pnpm": {
"ignoredBuiltDependencies": [
"@parcel/watcher",
"sharp",
"workerd"
],
"onlyBuiltDependencies": [
"better-sqlite3",
"esbuild",
"mongodb-memory-server"
],
"ignoredBuiltDependencies": [
"@parcel/watcher",
"sharp",
"workerd"
]
}
}

1568
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
import { resolve } from "node:path";
import { defineCommand, runMain } from "citty";
import { listen } from "listhen";
import { createStorage } from "./storage";
import { createStorageServer } from "./server";
import fsDriver from "./drivers/fs";
import { createStorage } from "./storage.ts";
import { createStorageServer } from "./server.ts";
import fsDriver from "./drivers/fs.ts";
const main = defineCommand({
meta: {

View File

@ -1,4 +1,4 @@
import { defineDriver, createRequiredError } from "./utils";
import { defineDriver, createRequiredError } from "./utils/index.ts";
import { AppConfigurationClient } from "@azure/app-configuration";
import { DefaultAzureCredential } from "@azure/identity";
@ -112,7 +112,7 @@ export default defineDriver((opts: AzureAppConfigurationOptions = {}) => {
labelFilter,
fields: ["key", "value", "label"],
});
const keys = [];
const keys: string[] = [];
for await (const setting of settings) {
keys.push(d(setting.key));
}

View File

@ -1,4 +1,4 @@
import { createRequiredError, defineDriver } from "./utils";
import { createRequiredError, defineDriver } from "./utils/index.ts";
import { Container, CosmosClient } from "@azure/cosmos";
import { DefaultAzureCredential } from "@azure/identity";

View File

@ -1,4 +1,8 @@
import { createError, createRequiredError, defineDriver } from "./utils";
import {
createError,
createRequiredError,
defineDriver,
} from "./utils/index.ts";
import {
SecretClient,
type SecretClientOptions,
@ -77,7 +81,7 @@ export default defineDriver((opts: AzureKeyVaultOptions) => {
const secrets = getKeyVaultClient()
.listPropertiesOfSecrets()
.byPage({ maxPageSize: opts.pageSize || 25 });
const keys = [];
const keys: string[] = [];
for await (const page of secrets) {
const pageKeys = page.map((secret) => decode(secret.name));
keys.push(...pageKeys);

View File

@ -1,4 +1,4 @@
import { createError, defineDriver } from "./utils";
import { createError, defineDriver } from "./utils/index.ts";
import {
BlobServiceClient,
ContainerClient,

View File

@ -1,4 +1,8 @@
import { createError, createRequiredError, defineDriver } from "./utils";
import {
createError,
createRequiredError,
defineDriver,
} from "./utils/index.ts";
import {
TableClient,
AzureNamedKeyCredential,

View File

@ -1,6 +1,6 @@
import { Preferences } from "@capacitor/preferences";
import { defineDriver, joinKeys, normalizeKey } from "./utils";
import { defineDriver, joinKeys, normalizeKey } from "./utils/index.ts";
const DRIVER_NAME = "capacitor-preferences";

View File

@ -1,6 +1,6 @@
/// <reference types="@cloudflare/workers-types" />
import { defineDriver, joinKeys } from "./utils";
import { getKVBinding } from "./utils/cloudflare";
import { defineDriver, joinKeys } from "./utils/index.ts";
import { getKVBinding } from "./utils/cloudflare.ts";
export interface KVOptions {
binding?: string | KVNamespace;
@ -24,7 +24,7 @@ export default defineDriver((opts: KVOptions) => {
async function getKeys(base: string = "") {
base = r(base);
const binding = getKVBinding(opts.binding);
const keys = [];
const keys: { name: string }[] = [];
let cursor: string | undefined = undefined;
do {
const kvList = await binding.list({ prefix: base || undefined, cursor });

View File

@ -4,7 +4,7 @@ import {
createRequiredError,
defineDriver,
joinKeys,
} from "./utils";
} from "./utils/index.ts";
interface KVAuthAPIToken {
/**

View File

@ -1,6 +1,6 @@
/// <reference types="@cloudflare/workers-types" />
import { defineDriver, joinKeys } from "./utils";
import { getR2Binding } from "./utils/cloudflare";
import { defineDriver, joinKeys } from "./utils/index.ts";
import { getR2Binding } from "./utils/cloudflare.ts";
export interface CloudflareR2Options {
binding?: string | R2Bucket;

View File

@ -1,5 +1,5 @@
import type { Database } from "db0";
import { createError, defineDriver } from "./utils";
import { createError, defineDriver } from "./utils/index.ts";
interface ResultSchema {
rows: Array<{

View File

@ -1,6 +1,6 @@
import { openKv, type Kv } from "@deno/kv";
import { defineDriver } from "./utils/index";
import denoKV from "./deno-kv";
import { defineDriver } from "./utils/index.ts";
import denoKV from "./deno-kv.ts";
// https://docs.deno.com/deploy/kv/manual/node/

View File

@ -1,4 +1,4 @@
import { defineDriver, createError, normalizeKey } from "./utils/index";
import { defineDriver, createError, normalizeKey } from "./utils/index.ts";
import type { Kv, KvKey } from "@deno/kv";
// https://docs.deno.com/deploy/kv/manual/

View File

@ -1,13 +1,17 @@
import { existsSync, promises as fsp, Stats } from "node:fs";
import { resolve, join } from "node:path";
import { createError, createRequiredError, defineDriver } from "./utils";
import {
createError,
createRequiredError,
defineDriver,
} from "./utils/index.ts";
import {
readFile,
writeFile,
readdirRecursive,
rmRecursive,
unlink,
} from "./utils/node-fs";
} from "./utils/node-fs.ts";
export interface FSStorageOptions {
base?: string;

View File

@ -2,14 +2,18 @@ import { existsSync, promises as fsp, Stats } from "node:fs";
import { resolve, relative, join } from "node:path";
import { FSWatcher, type ChokidarOptions, watch } from "chokidar";
import anymatch from "anymatch";
import { createError, createRequiredError, defineDriver } from "./utils";
import {
createError,
createRequiredError,
defineDriver,
} from "./utils/index.ts";
import {
readFile,
writeFile,
readdirRecursive,
rmRecursive,
unlink,
} from "./utils/node-fs";
} from "./utils/node-fs.ts";
export interface FSStorageOptions {
base?: string;
@ -29,8 +33,7 @@ export default defineDriver((userOptions: FSStorageOptions = {}) => {
}
const base = resolve(userOptions.base);
const ignore = anymatch(
const ignore = (anymatch as any)(
userOptions.ignore || ["**/node_modules/**", "**/.git/**"]
);

View File

@ -1,4 +1,8 @@
import { createError, createRequiredError, defineDriver } from "./utils";
import {
createError,
createRequiredError,
defineDriver,
} from "./utils/index.ts";
import { $fetch } from "ofetch";
import { withTrailingSlash, joinURL } from "ufo";

View File

@ -1,5 +1,5 @@
import type { TransactionOptions } from "..";
import { defineDriver } from "./utils";
import type { TransactionOptions } from "../types.ts";
import { defineDriver } from "./utils/index.ts";
import { type FetchError, $fetch as _fetch } from "ofetch";
import { joinURL } from "ufo";
@ -69,8 +69,8 @@ export default defineDriver((opts: HTTPOptions) => {
method: "HEAD",
headers: getHeaders(topts),
});
let mtime = undefined;
let ttl = undefined;
let mtime: Date | undefined;
let ttl: number | undefined;
const _lastModified = res.headers.get("last-modified");
if (_lastModified) {
mtime = new Date(_lastModified);

View File

@ -1,4 +1,4 @@
import { defineDriver } from "./utils";
import { defineDriver } from "./utils/index.ts";
import {
get,
set,

View File

@ -1,4 +1,8 @@
import { createRequiredError, defineDriver, normalizeKey } from "./utils";
import {
createRequiredError,
defineDriver,
normalizeKey,
} from "./utils/index.ts";
export interface LocalStorageOptions {
base?: string;

View File

@ -1,4 +1,4 @@
import { defineDriver } from "./utils";
import { defineDriver } from "./utils/index.ts";
import { LRUCache } from "lru-cache";
type LRUCacheOptions = LRUCache.OptionsBase<string, any, any> &

View File

@ -1,4 +1,4 @@
import { defineDriver } from "./utils";
import { defineDriver } from "./utils/index.ts";
const DRIVER_NAME = "memory";

View File

@ -1,4 +1,4 @@
import { createRequiredError, defineDriver } from "./utils";
import { createRequiredError, defineDriver } from "./utils/index.ts";
import { MongoClient, type Collection, type MongoClientOptions } from "mongodb";
export interface MongoDbOptions {

View File

@ -1,5 +1,9 @@
import { createError, createRequiredError, defineDriver } from "./utils";
import type { GetKeysOptions } from "..";
import {
createError,
createRequiredError,
defineDriver,
} from "./utils/index.ts";
import type { GetKeysOptions } from "../types.ts";
import { getStore, getDeployStore } from "@netlify/blobs";
import type {
Store,

View File

@ -1,4 +1,4 @@
import { defineDriver } from "./utils";
import { defineDriver } from "./utils/index.ts";
const DRIVER_NAME = "null";

View File

@ -1,6 +1,6 @@
import { defineDriver } from "./utils";
import type { Driver } from "..";
import { normalizeKey } from "./utils";
import { defineDriver } from "./utils/index.ts";
import type { Driver } from "../types.ts";
import { normalizeKey } from "./utils/index.ts";
export interface OverlayStorageOptions {
layers: Driver[];

View File

@ -1,4 +1,4 @@
import { createRequiredError, defineDriver } from "./utils";
import { createRequiredError, defineDriver } from "./utils/index.ts";
import type { ExecutedQuery, Connection } from "@planetscale/database";
import { connect } from "@planetscale/database";
import { fetch } from "node-fetch-native";

View File

@ -1,10 +1,10 @@
import { defineDriver, joinKeys } from "./utils";
// TODO: use named import in v2
import Redis, {
Cluster,
type ClusterNode,
type ClusterOptions,
type RedisOptions as _RedisOptions,
import { defineDriver, joinKeys } from "./utils/index.ts";
import { Cluster, Redis } from "ioredis";
import type {
ClusterOptions,
ClusterNode,
RedisOptions as _RedisOptions,
} from "ioredis";
export interface RedisOptions extends _RedisOptions {

View File

@ -3,7 +3,7 @@ import {
createRequiredError,
normalizeKey,
createError,
} from "./utils";
} from "./utils/index.ts";
import { AwsClient } from "aws4fetch";
export interface S3DriverOptions {

View File

@ -1,5 +1,5 @@
import { defineDriver } from "./utils";
import localstorage, { type LocalStorageOptions } from "./localstorage";
import { defineDriver } from "./utils/index.ts";
import localstorage, { type LocalStorageOptions } from "./localstorage.ts";
export interface SessionStorageOptions extends LocalStorageOptions {}

View File

@ -1,4 +1,4 @@
import { defineDriver, normalizeKey } from "./utils";
import { defineDriver, normalizeKey } from "./utils/index.ts";
import { UTApi } from "uploadthing/server";
// Reference: https://docs.uploadthing.com
@ -39,7 +39,7 @@ export default defineDriver<UploadThingOptions, UTApi>((opts = {}) => {
};
const toFile = (key: string, value: BlobPart) => {
return Object.assign(new Blob([value]), <FileEsque>{
return Object.assign(new Blob([value]), {
name: key,
customId: key,
}) satisfies FileEsque;

View File

@ -1,5 +1,5 @@
import { type RedisConfigNodejs, Redis } from "@upstash/redis";
import { defineDriver, normalizeKey, joinKeys } from "./utils";
import { defineDriver, normalizeKey, joinKeys } from "./utils/index.ts";
export interface UpstashOptions extends Partial<RedisConfigNodejs> {
/**

View File

@ -1,5 +1,5 @@
/// <reference types="@cloudflare/workers-types" />
import { createError } from "./index";
import { createError } from "./index.ts";
export function getBinding(binding: KVNamespace | R2Bucket | string) {
let bindingName = "[binding]";

View File

@ -1,4 +1,4 @@
import type { Driver } from "../..";
import type { Driver } from "../../types.ts";
type DriverFactory<OptionsT, InstanceT> = (
opts: OptionsT

View File

@ -1,5 +1,10 @@
import { del, head, list, put } from "@vercel/blob";
import { defineDriver, normalizeKey, joinKeys, createError } from "./utils";
import {
defineDriver,
normalizeKey,
joinKeys,
createError,
} from "./utils/index.ts";
export interface VercelBlobOptions {
/**
@ -106,7 +111,7 @@ export default defineDriver<VercelBlobOptions>((opts) => {
if (blob) await del(blob.url, { token: getToken() });
},
async getKeys(base: string) {
const blobs = [];
const blobs: any[] = [];
let cursor: string | undefined = undefined;
do {
const listBlobResult: Awaited<ReturnType<typeof list>> = await list({
@ -128,7 +133,7 @@ export default defineDriver<VercelBlobOptions>((opts) => {
},
async clear(base) {
let cursor: string | undefined = undefined;
const blobs = [];
const blobs: any[] = [];
do {
const listBlobResult: Awaited<ReturnType<typeof list>> = await list({
token: getToken(),

View File

@ -2,7 +2,12 @@ import { createClient } from "@vercel/kv";
import type { VercelKV } from "@vercel/kv";
import type { RedisConfigNodejs } from "@upstash/redis";
import { defineDriver, normalizeKey, joinKeys, createError } from "./utils";
import {
defineDriver,
normalizeKey,
joinKeys,
createError,
} from "./utils/index.ts";
export interface VercelKVOptions extends Partial<RedisConfigNodejs> {
/**

View File

@ -1,4 +1,4 @@
import { defineDriver, normalizeKey, joinKeys } from "./utils";
import { defineDriver, normalizeKey, joinKeys } from "./utils/index.ts";
import type { RuntimeCache } from "@vercel/functions";
export interface VercelCacheOptions {

View File

@ -1,11 +1,11 @@
export * from "./storage";
export * from "./types";
export * from "./utils";
export * from "./storage.ts";
export * from "./types.ts";
export * from "./utils.ts";
export { defineDriver } from "./drivers/utils";
export { defineDriver } from "./drivers/utils/index.ts";
export {
builtinDrivers,
type BuiltinDriverName,
type BuiltinDriverOptions,
} from "./_drivers";
} from "./_drivers.ts";

View File

@ -11,9 +11,9 @@ import {
type EventHandler,
H3Event,
} from "h3";
import type { Storage, TransactionOptions, StorageMeta } from "./types";
import { stringify } from "./_utils";
import { normalizeKey, normalizeBaseKey } from "./utils";
import type { Storage, TransactionOptions, StorageMeta } from "./types.ts";
import { stringify } from "./_utils.ts";
import { normalizeKey, normalizeBaseKey } from "./utils.ts";
export type StorageServerRequest = {
event: H3Event;

View File

@ -7,16 +7,21 @@ import type {
StorageValue,
WatchEvent,
TransactionOptions,
} from "./types";
import memory from "./drivers/memory";
import { asyncCall, deserializeRaw, serializeRaw, stringify } from "./_utils";
} from "./types.ts";
import memory from "./drivers/memory.ts";
import {
asyncCall,
deserializeRaw,
serializeRaw,
stringify,
} from "./_utils.ts";
import {
normalizeKey,
normalizeBaseKey,
joinKeys,
filterKeyByDepth,
filterKeyByBase,
} from "./utils";
} from "./utils.ts";
interface StorageCTX {
mounts: Record<string, Driver>;
@ -347,7 +352,7 @@ export function createStorage<T extends StorageValue>(
base = normalizeBaseKey(base);
const mounts = getMounts(base, true);
let maskedMounts: string[] = [];
const allKeys = [];
const allKeys: string[] = [];
let allMountsSupportMaxDepth = true;
for (const mount of mounts) {
if (!mount.driver.flags?.maxDepth) {

View File

@ -1,4 +1,4 @@
import type { Storage, StorageValue, TransactionOptions } from "./types";
import type { Storage, StorageValue, TransactionOptions } from "./types.ts";
type StorageKeys = Array<keyof Storage>;

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import driver from "../../src/drivers/azure-app-configuration";
import { testDriver } from "./utils";
import driver from "../../src/drivers/azure-app-configuration.ts";
import { testDriver } from "./utils.ts";
describe.skip("drivers: azure-app-configuration", () => {
testDriver({

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import driver from "../../src/drivers/azure-cosmos";
import { testDriver } from "./utils";
import driver from "../../src/drivers/azure-cosmos.ts";
import { testDriver } from "./utils.ts";
describe.skip("drivers: azure-cosmos", () => {
testDriver({

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import driver from "../../src/drivers/azure-key-vault";
import { testDriver } from "./utils";
import driver from "../../src/drivers/azure-key-vault.ts";
import { testDriver } from "./utils.ts";
describe.skip(
"drivers: azure-key-vault",

View File

@ -1,9 +1,9 @@
import { describe, expect, beforeAll, afterAll, test } from "vitest";
import driver from "../../src/drivers/azure-storage-blob";
import { testDriver } from "./utils";
import driver from "../../src/drivers/azure-storage-blob.ts";
import { testDriver } from "./utils.ts";
import { AccountSASPermissions, BlobServiceClient } from "@azure/storage-blob";
import { ChildProcess, exec } from "node:child_process";
import { createStorage } from "../../src";
import { createStorage } from "../../src/index.ts";
describe.skip("drivers: azure-storage-blob", () => {
let azuriteProcess: ChildProcess;

View File

@ -1,6 +1,6 @@
import { describe, beforeAll, afterAll } from "vitest";
import driver from "../../src/drivers/azure-storage-table";
import { testDriver } from "./utils";
import driver from "../../src/drivers/azure-storage-table.ts";
import { testDriver } from "./utils.ts";
import { TableClient } from "@azure/data-tables";
import { ChildProcess, exec } from "node:child_process";

View File

@ -1,6 +1,6 @@
import { describe, vi } from "vitest";
import driver from "../../src/drivers/capacitor-preferences";
import { testDriver } from "./utils";
import driver from "../../src/drivers/capacitor-preferences.ts";
import { testDriver } from "./utils.ts";
import { afterEach } from "node:test";
vi.mock("@capacitor/preferences", () => {

View File

@ -1,8 +1,8 @@
/// <reference types="@cloudflare/workers-types" />
import { describe, expect, test, afterAll } from "vitest";
import { createStorage, snapshot } from "../../src";
import CloudflareKVBinding from "../../src/drivers/cloudflare-kv-binding";
import { testDriver } from "./utils";
import { createStorage, snapshot } from "../../src/index.ts";
import CloudflareKVBinding from "../../src/drivers/cloudflare-kv-binding.ts";
import { testDriver } from "./utils.ts";
import { getPlatformProxy } from "wrangler";
describe("drivers: cloudflare-kv", async () => {

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import cfKvHttpDriver from "../../src/drivers/cloudflare-kv-http";
import { testDriver } from "./utils";
import cfKvHttpDriver from "../../src/drivers/cloudflare-kv-http.ts";
import { testDriver } from "./utils.ts";
const accountId = process.env.VITE_CLOUDFLARE_ACC_ID;
const namespaceId = process.env.VITE_CLOUDFLARE_KV_NS_ID;

View File

@ -1,8 +1,8 @@
/// <reference types="@cloudflare/workers-types" />
import { describe, test, expect, afterAll } from "vitest";
import { createStorage, snapshot } from "../../src";
import CloudflareR2Binding from "../../src/drivers/cloudflare-r2-binding";
import { testDriver } from "./utils";
import { createStorage, snapshot } from "../../src/index.ts";
import CloudflareR2Binding from "../../src/drivers/cloudflare-r2-binding.ts";
import { testDriver } from "./utils.ts";
import { getPlatformProxy } from "wrangler";
describe("drivers: cloudflare-r2-binding", async () => {

View File

@ -1,7 +1,7 @@
import { afterAll, describe, expect, it } from "vitest";
import { createDatabase } from "db0";
import db0Driver from "../../src/drivers/db0";
import { testDriver } from "./utils";
import db0Driver from "../../src/drivers/db0.ts";
import { testDriver } from "./utils.ts";
const drivers = [
{

View File

@ -1,7 +1,7 @@
import { createServer } from "node:http";
import { createStorage } from "../../src";
import { createStorage } from "../../src/index.ts";
import denoKV from "../../src/drivers/deno-kv.ts";
import { createStorageServer } from "../../src/server";
import { createStorageServer } from "../../src/server.ts";
const storage = createStorage({
driver: denoKV({

View File

@ -3,7 +3,7 @@ import { exec, execSync, type ChildProcess } from "node:child_process";
import { describe, beforeAll, afterAll } from "vitest";
import { getRandomPort, waitForPort } from "get-port-please";
import httpDriver from "../../src/drivers/http.ts";
import { testDriver } from "./utils";
import { testDriver } from "./utils.ts";
let hasDeno: boolean;
// prettier-ignore

View File

@ -1,8 +1,8 @@
import { describe, it, expect } from "vitest";
import { resolve } from "node:path";
import { readFile } from "../../src/drivers/utils/node-fs";
import { testDriver } from "./utils";
import driver from "../../src/drivers/fs-lite";
import { readFile } from "../../src/drivers/utils/node-fs.ts";
import { testDriver } from "./utils.ts";
import driver from "../../src/drivers/fs-lite.ts";
describe("drivers: fs-lite", () => {
const dir = resolve(__dirname, "tmp/fs-lite");

View File

@ -1,8 +1,8 @@
import { describe, it, expect, vi } from "vitest";
import { resolve } from "node:path";
import { readFile, writeFile } from "../../src/drivers/utils/node-fs";
import { testDriver } from "./utils";
import driver from "../../src/drivers/fs";
import { readFile, writeFile } from "../../src/drivers/utils/node-fs.ts";
import { testDriver } from "./utils.ts";
import driver from "../../src/drivers/fs.ts";
describe("drivers: fs", () => {
const dir = resolve(__dirname, "tmp/fs");

View File

@ -1,6 +1,6 @@
import { describe, it, expect } from "vitest";
import driver from "../../src/drivers/github";
import { createStorage } from "../../src";
import driver from "../../src/drivers/github.ts";
import { createStorage } from "../../src/index.ts";
describe("drivers: github", () => {
const storage = createStorage({

View File

@ -1,9 +1,9 @@
import { describe, afterAll, expect, it } from "vitest";
import driver from "../../src/drivers/http";
import { createStorage } from "../../src";
import { createStorageServer } from "../../src/server";
import driver from "../../src/drivers/http.ts";
import { createStorage } from "../../src/index.ts";
import { createStorageServer } from "../../src/server.ts";
import { listen } from "listhen";
import { testDriver } from "./utils";
import { testDriver } from "./utils.ts";
describe("drivers: http", async () => {
const remoteStorage = createStorage();

View File

@ -1,8 +1,8 @@
import { describe, expect, it } from "vitest";
import driver from "../../src/drivers/indexedb";
import { testDriver } from "./utils";
import driver from "../../src/drivers/indexedb.ts";
import { testDriver } from "./utils.ts";
import "fake-indexeddb/auto";
import { createStorage } from "../../src";
import { createStorage } from "../../src/index.ts";
describe("drivers: indexeddb", () => {
testDriver({ driver: driver({ dbName: "test-db" }) });

View File

@ -1,6 +1,6 @@
import { describe, it, expect, vi } from "vitest";
import driver from "../../src/drivers/localstorage";
import { testDriver } from "./utils";
import driver from "../../src/drivers/localstorage.ts";
import { testDriver } from "./utils.ts";
import { JSDOM } from "jsdom";
describe("drivers: localstorage", () => {

View File

@ -1,6 +1,6 @@
import { it, describe, expect } from "vitest";
import driver from "../../src/drivers/lru-cache";
import { testDriver } from "./utils";
import driver from "../../src/drivers/lru-cache.ts";
import { testDriver } from "./utils.ts";
describe("drivers: lru-cache", () => {
testDriver({

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import driver from "../../src/drivers/memory";
import { testDriver } from "./utils";
import driver from "../../src/drivers/memory.ts";
import { testDriver } from "./utils.ts";
describe("drivers: memory", () => {
testDriver({

View File

@ -1,6 +1,6 @@
import { afterAll, describe, expect, it } from "vitest";
import driver from "../../src/drivers/mongodb";
import { testDriver } from "./utils";
import driver from "../../src/drivers/mongodb.ts";
import { testDriver } from "./utils.ts";
import { MongoMemoryServer } from "mongodb-memory-server";
import { promisify } from "node:util";

View File

@ -1,6 +1,6 @@
import { afterAll, beforeAll, describe } from "vitest";
import driver from "../../src/drivers/netlify-blobs";
import { testDriver } from "./utils";
import driver from "../../src/drivers/netlify-blobs.ts";
import { testDriver } from "./utils.ts";
import { BlobsServer } from "@netlify/blobs/server";
import { resolve } from "node:path";
import { rm, mkdir } from "node:fs/promises";

View File

@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
import driver from "../../src/drivers/null";
import { createStorage } from "../../src";
import driver from "../../src/drivers/null.ts";
import { createStorage } from "../../src/index.ts";
describe("drivers: null", async () => {
const storage = createStorage({ driver: driver() });

View File

@ -1,7 +1,7 @@
import { describe } from "vitest";
import driver from "../../src/drivers/overlay";
import memory from "../../src/drivers/memory";
import { testDriver } from "./utils";
import driver from "../../src/drivers/overlay.ts";
import memory from "../../src/drivers/memory.ts";
import { testDriver } from "./utils.ts";
describe("drivers: overlay", () => {
const [s1, s2] = [memory(), memory()];

View File

@ -1,9 +1,9 @@
import { describe, vi, it, expect } from "vitest";
import * as ioredis from "ioredis-mock";
import redisDriver from "../../src/drivers/redis";
import { testDriver } from "./utils";
import * as ioredisMock from "ioredis-mock";
import redisDriver from "../../src/drivers/redis.ts";
import { testDriver } from "./utils.ts";
vi.mock("ioredis", () => ioredis);
vi.mock("ioredis", () => ({ ...ioredisMock, Redis: ioredisMock.default }));
describe("drivers: redis", () => {
const driver = redisDriver({
@ -20,7 +20,9 @@ describe("drivers: redis", () => {
await ctx.storage.setItem("s2:a", "test_data");
await ctx.storage.setItem("s3:a?q=1", "test_data");
const client = new ioredis.default("ioredis://localhost:6379/0");
const client = new (ioredisMock as any).default(
"ioredis://localhost:6379/0"
);
const keys = await client.keys("*");
expect(keys).toMatchInlineSnapshot(`
[
@ -33,7 +35,9 @@ describe("drivers: redis", () => {
});
it("exposes instance", () => {
expect(driver.getInstance?.()).toBeInstanceOf(ioredis.default);
expect(driver.getInstance?.()).toBeInstanceOf(
(ioredisMock as any).default
);
});
},
});

View File

@ -1,6 +1,6 @@
import { describe, it, expect } from "vitest";
import s3Driver from "../../src/drivers/s3";
import { testDriver } from "./utils";
import s3Driver from "../../src/drivers/s3.ts";
import { testDriver } from "./utils.ts";
import { AwsClient } from "aws4fetch";
const accessKeyId = process.env.VITE_S3_ACCESS_KEY_ID;

View File

@ -1,7 +1,7 @@
import { JSDOM } from "jsdom";
import { describe, expect, it, vi } from "vitest";
import driver from "../../src/drivers/session-storage";
import { testDriver } from "./utils";
import driver from "../../src/drivers/session-storage.ts";
import { testDriver } from "./utils.ts";
describe("drivers: session-storage", () => {
const jsdom = new JSDOM("", {

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import driver from "../../src/drivers/uploadthing";
import { testDriver } from "./utils";
import driver from "../../src/drivers/uploadthing.ts";
import { testDriver } from "./utils.ts";
const utfsToken = process.env.VITE_UPLOADTHING_TOKEN;

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import { testDriver } from "./utils";
import upstashDriver from "../../src/drivers/upstash";
import { testDriver } from "./utils.ts";
import upstashDriver from "../../src/drivers/upstash.ts";
const url = process.env.VITE_UPSTASH_REDIS_REST_URL;
const token = process.env.VITE_UPSTASH_REDIS_REST_TOKEN;

View File

@ -4,7 +4,7 @@ import {
type Driver,
createStorage,
restoreSnapshot,
} from "../../src";
} from "../../src/index.ts";
export interface TestContext {
storage: Storage;

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import { testDriver } from "./utils";
import vercelBlobDriver from "../../src/drivers/vercel-blob";
import { testDriver } from "./utils.ts";
import vercelBlobDriver from "../../src/drivers/vercel-blob.ts";
const token = process.env.VITE_VERCEL_BLOB_READ_WRITE_TOKEN;

View File

@ -1,6 +1,6 @@
import { describe } from "vitest";
import vercelKVDriver from "../../src/drivers/vercel-kv";
import { testDriver } from "./utils";
import vercelKVDriver from "../../src/drivers/vercel-kv.ts";
import { testDriver } from "./utils.ts";
const hasEnv = process.env.KV_REST_API_URL && process.env.KV_REST_API_TOKEN;

View File

@ -1,6 +1,6 @@
import { describe, it, expect } from "vitest";
import vercelRuntimeCacheDriver from "../../src/drivers/vercel-runtime-cache";
import { testDriver } from "./utils";
import vercelRuntimeCacheDriver from "../../src/drivers/vercel-runtime-cache.ts";
import { testDriver } from "./utils.ts";
describe("drivers: vercel-runtime-cache", async () => {
testDriver({

View File

@ -2,8 +2,8 @@ import { readFile } from "node:fs/promises";
import { describe, it, expect } from "vitest";
import { listen } from "listhen";
import { $fetch } from "ofetch";
import { createStorage } from "../src";
import { createStorageServer } from "../src/server";
import { createStorage } from "../src/index.ts";
import { createStorageServer } from "../src/server.ts";
import fsDriver from "../src/drivers/fs.ts";
import httpDriver from "../src/drivers/http.ts";

View File

@ -1,6 +1,6 @@
import { describe, it, expectTypeOf } from "vitest";
import { createStorage, prefixStorage } from "../src";
import type { Storage, StorageValue } from "../src";
import { createStorage, prefixStorage } from "../src/index.ts";
import type { Storage, StorageValue } from "../src/index.ts";
describe("types", () => {
it("default types for storage", async () => {

View File

@ -5,9 +5,9 @@ import {
snapshot,
restoreSnapshot,
prefixStorage,
} from "../src";
import memory from "../src/drivers/memory";
import fs from "../src/drivers/fs";
} from "../src/index.ts";
import memory from "../src/drivers/memory.ts";
import fs from "../src/drivers/fs.ts";
const data = {
"etc:conf": "test",

View File

@ -1,25 +1,29 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "preserve",
"moduleResolution": "bundler",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"moduleDetection": "force",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"allowJs": true,
"resolveJsonModule": true,
"strict": true,
"isolatedModules": true,
"isolatedModules": false, // TODO
"verbatimModuleSyntax": true,
"erasableSyntaxOnly": true,
"noUncheckedIndexedAccess": true,
"forceConsistentCasingInFileNames": true,
"noImplicitAny": false, // TODO
"noImplicitOverride": true,
"noEmit": true,
"allowImportingTsExtensions": true,
"skipLibCheck": true,
"composite": true,
// "isolatedDeclarations": true,
"allowImportingTsExtensions": true,
"types": ["node", "deno"],
"paths": {
"unstorage/drivers/*": ["./src/drivers/*"]
"unstorage/drivers/*": ["./src/drivers/*.ts"]
}
}
},
"include": ["src", "test"]
}