mirror of
https://github.com/better-auth/better-auth.git
synced 2026-05-26 00:46:44 -05:00
fix(cli): resolve path aliases from extended tsconfig files (#8520)
This commit is contained in:
@@ -86,6 +86,7 @@
|
||||
"better-auth",
|
||||
"c12",
|
||||
"chalk",
|
||||
"get-tsconfig",
|
||||
"open",
|
||||
"prettier",
|
||||
"prompts",
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
"commander": "^12.1.0",
|
||||
"dotenv": "^17.3.1",
|
||||
"drizzle-orm": "^0.41.0",
|
||||
"get-tsconfig": "^4.13.6",
|
||||
"open": "^10.2.0",
|
||||
"pg": "^8.19.0",
|
||||
"prettier": "^3.8.1",
|
||||
|
||||
@@ -7,10 +7,11 @@ import babelPresetTypeScript from "@babel/preset-typescript";
|
||||
import type { BetterAuthOptions } from "@better-auth/core";
|
||||
import { BetterAuthError } from "@better-auth/core/error";
|
||||
import { loadConfig } from "c12";
|
||||
import type { TsConfigResult } from "get-tsconfig";
|
||||
import { getTsconfig, parseTsconfig } from "get-tsconfig";
|
||||
import type { JitiOptions } from "jiti";
|
||||
import { addCloudflareModules } from "./add-cloudflare-modules";
|
||||
import { addSvelteKitEnvModules } from "./add-svelte-kit-env-modules";
|
||||
import { getTsconfigInfo } from "./get-tsconfig-info";
|
||||
|
||||
let possiblePaths = [
|
||||
"auth.ts",
|
||||
@@ -42,93 +43,104 @@ possiblePaths = [
|
||||
...possiblePaths.map((it) => `app/${it}`),
|
||||
];
|
||||
|
||||
function resolveReferencePath(configDir: string, refPath: string): string {
|
||||
const resolvedPath = path.resolve(configDir, refPath);
|
||||
|
||||
// If it ends with .json, treat as direct file reference
|
||||
if (refPath.endsWith(".json")) {
|
||||
return resolvedPath;
|
||||
}
|
||||
|
||||
// If the exact path exists and is a file, use it
|
||||
if (fs.existsSync(resolvedPath)) {
|
||||
try {
|
||||
const stats = fs.statSync(resolvedPath);
|
||||
if (stats.isFile()) {
|
||||
return resolvedPath;
|
||||
}
|
||||
} catch {
|
||||
// Fall through to directory handling
|
||||
function mergeAliases(
|
||||
target: Record<string, string>,
|
||||
source: Record<string, string>,
|
||||
): void {
|
||||
for (const [alias, aliasPath] of Object.entries(source)) {
|
||||
if (!(alias in target)) {
|
||||
target[alias] = aliasPath;
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise, assume directory reference
|
||||
return path.resolve(configDir, refPath, "tsconfig.json");
|
||||
}
|
||||
|
||||
function getPathAliasesRecursive(
|
||||
function extractAliases(tsconfig: TsConfigResult): Record<string, string> {
|
||||
const { paths = {}, baseUrl } = tsconfig.config.compilerOptions ?? {};
|
||||
const result: Record<string, string> = {};
|
||||
const configDir = path.dirname(tsconfig.path);
|
||||
const resolvedBaseUrl = baseUrl
|
||||
? path.resolve(configDir, baseUrl)
|
||||
: configDir;
|
||||
|
||||
for (const [alias, aliasPaths = []] of Object.entries(paths)) {
|
||||
for (const aliasedPath of aliasPaths) {
|
||||
const finalAlias = alias.slice(-1) === "*" ? alias.slice(0, -1) : alias;
|
||||
const finalAliasedPath =
|
||||
aliasedPath.slice(-1) === "*" ? aliasedPath.slice(0, -1) : aliasedPath;
|
||||
|
||||
result[finalAlias || ""] = path.join(resolvedBaseUrl, finalAliasedPath);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads raw tsconfig JSON to get `references` (which get-tsconfig strips out).
|
||||
*/
|
||||
function readRawTsconfigReferences(
|
||||
tsconfigPath: string,
|
||||
): Array<{ path: string }> | undefined {
|
||||
try {
|
||||
const text = fs.readFileSync(tsconfigPath, "utf-8");
|
||||
const stripped = text
|
||||
.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) =>
|
||||
g ? "" : m,
|
||||
)
|
||||
.replace(/,(?=\s*[}\]])/g, "");
|
||||
const raw = JSON.parse(stripped);
|
||||
return raw.references;
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect path aliases from tsconfig references recursively.
|
||||
*/
|
||||
function collectReferencesAliases(
|
||||
tsconfigPath: string,
|
||||
visited = new Set<string>(),
|
||||
): Record<string, string> {
|
||||
if (visited.has(tsconfigPath)) {
|
||||
return {};
|
||||
}
|
||||
visited.add(tsconfigPath);
|
||||
const result: Record<string, string> = {};
|
||||
const refs = readRawTsconfigReferences(tsconfigPath);
|
||||
if (!refs) return result;
|
||||
|
||||
if (!fs.existsSync(tsconfigPath)) {
|
||||
console.warn(`Referenced tsconfig not found: ${tsconfigPath}`);
|
||||
return {};
|
||||
}
|
||||
const configDir = path.dirname(tsconfigPath);
|
||||
for (const ref of refs) {
|
||||
const resolvedRef = path.resolve(configDir, ref.path);
|
||||
const refTsconfigPath = resolvedRef.endsWith(".json")
|
||||
? resolvedRef
|
||||
: path.join(resolvedRef, "tsconfig.json");
|
||||
|
||||
try {
|
||||
const tsConfig = getTsconfigInfo(undefined, tsconfigPath);
|
||||
const { paths = {}, baseUrl = "." } = tsConfig.compilerOptions || {};
|
||||
const result: Record<string, string> = {};
|
||||
if (visited.has(refTsconfigPath)) continue;
|
||||
visited.add(refTsconfigPath);
|
||||
|
||||
const configDir = path.dirname(tsconfigPath);
|
||||
const obj = Object.entries(paths) as [string, string[]][];
|
||||
for (const [alias, aliasPaths] of obj) {
|
||||
for (const aliasedPath of aliasPaths) {
|
||||
const resolvedBaseUrl = path.resolve(configDir, baseUrl);
|
||||
const finalAlias = alias.slice(-1) === "*" ? alias.slice(0, -1) : alias;
|
||||
const finalAliasedPath =
|
||||
aliasedPath.slice(-1) === "*"
|
||||
? aliasedPath.slice(0, -1)
|
||||
: aliasedPath;
|
||||
|
||||
result[finalAlias || ""] = path.join(resolvedBaseUrl, finalAliasedPath);
|
||||
}
|
||||
try {
|
||||
const refConfig = parseTsconfig(refTsconfigPath);
|
||||
mergeAliases(
|
||||
result,
|
||||
extractAliases({ path: refTsconfigPath, config: refConfig }),
|
||||
);
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tsConfig.references) {
|
||||
for (const ref of tsConfig.references) {
|
||||
const refPath = resolveReferencePath(configDir, ref.path);
|
||||
const refAliases = getPathAliasesRecursive(refPath, visited);
|
||||
for (const [alias, aliasPath] of Object.entries(refAliases)) {
|
||||
if (!(alias in result)) {
|
||||
result[alias] = aliasPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.warn(`Error parsing tsconfig at ${tsconfigPath}: ${error}`);
|
||||
return {};
|
||||
mergeAliases(result, collectReferencesAliases(refTsconfigPath, visited));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function getPathAliases(cwd: string): Record<string, string> | null {
|
||||
let tsConfigPath = path.join(cwd, "tsconfig.json");
|
||||
if (!fs.existsSync(tsConfigPath)) {
|
||||
tsConfigPath = path.join(cwd, "jsconfig.json");
|
||||
}
|
||||
if (!fs.existsSync(tsConfigPath)) {
|
||||
const configName = fs.existsSync(path.join(cwd, "tsconfig.json"))
|
||||
? "tsconfig.json"
|
||||
: "jsconfig.json";
|
||||
const tsconfig = getTsconfig(cwd, configName);
|
||||
if (!tsconfig) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
const result = getPathAliasesRecursive(tsConfigPath);
|
||||
const result = extractAliases(tsconfig);
|
||||
mergeAliases(result, collectReferencesAliases(tsconfig.path));
|
||||
addSvelteKitEnvModules(result);
|
||||
addCloudflareModules(result);
|
||||
return result;
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
function stripJsonComments(jsonString: string): string {
|
||||
return jsonString
|
||||
.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) =>
|
||||
g ? "" : m,
|
||||
)
|
||||
.replace(/,(?=\s*[}\]])/g, "");
|
||||
}
|
||||
|
||||
export function getTsconfigInfo(cwd?: string, flatPath?: string) {
|
||||
let tsConfigPath: string;
|
||||
if (flatPath) {
|
||||
tsConfigPath = flatPath;
|
||||
} else {
|
||||
tsConfigPath = cwd
|
||||
? path.join(cwd, "tsconfig.json")
|
||||
: path.join("tsconfig.json");
|
||||
}
|
||||
try {
|
||||
const text = fs.readFileSync(tsConfigPath, "utf-8");
|
||||
return JSON.parse(stripJsonComments(text));
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -897,4 +897,217 @@ describe("getConfig", async () => {
|
||||
expect(config).not.toBe(null);
|
||||
expect(config?.emailAndPassword?.enabled).toBe(true);
|
||||
});
|
||||
|
||||
/**
|
||||
* @see https://github.com/better-auth/better-auth/issues/6373
|
||||
*/
|
||||
it("should resolve path aliases from extended tsconfig", async () => {
|
||||
const authPath = path.join(tmpDir, "src", "auth");
|
||||
const dbPath = path.join(tmpDir, "src", "db");
|
||||
await fs.mkdir(authPath, { recursive: true });
|
||||
await fs.mkdir(dbPath, { recursive: true });
|
||||
|
||||
// Create base tsconfig with path aliases
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.base.json"),
|
||||
`{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@src/*": ["./src/*"]
|
||||
}
|
||||
}
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create tsconfig.json that extends base
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.json"),
|
||||
`{
|
||||
"extends": "./tsconfig.base.json"
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create dummy db.ts
|
||||
await fs.writeFile(
|
||||
path.join(dbPath, "db.ts"),
|
||||
`class PrismaClient {
|
||||
constructor() {}
|
||||
}
|
||||
export const db = new PrismaClient()`,
|
||||
);
|
||||
|
||||
// Create auth.ts using the alias from extended config
|
||||
await fs.writeFile(
|
||||
path.join(authPath, "auth.ts"),
|
||||
`import {betterAuth} from "better-auth";
|
||||
import {prismaAdapter} from "better-auth/adapters/prisma";
|
||||
import {db} from "@src/db/db";
|
||||
|
||||
export const auth = betterAuth({
|
||||
database: prismaAdapter(db, {
|
||||
provider: 'sqlite'
|
||||
}),
|
||||
emailAndPassword: {
|
||||
enabled: true,
|
||||
}
|
||||
})`,
|
||||
);
|
||||
|
||||
const config = await getConfig({
|
||||
cwd: tmpDir,
|
||||
configPath: "src/auth/auth.ts",
|
||||
});
|
||||
|
||||
expect(config).not.toBe(null);
|
||||
expect(config).toMatchObject({
|
||||
emailAndPassword: { enabled: true },
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* @see https://github.com/better-auth/better-auth/issues/6373
|
||||
*/
|
||||
it("should resolve path aliases from chained extends", async () => {
|
||||
const authPath = path.join(tmpDir, "src", "auth");
|
||||
const dbPath = path.join(tmpDir, "src", "db");
|
||||
await fs.mkdir(authPath, { recursive: true });
|
||||
await fs.mkdir(dbPath, { recursive: true });
|
||||
|
||||
// Create grandparent tsconfig with path aliases
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.root.json"),
|
||||
`{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@server/*": ["./src/*"]
|
||||
}
|
||||
}
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create parent tsconfig that extends grandparent
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.base.json"),
|
||||
`{
|
||||
"extends": "./tsconfig.root.json"
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create tsconfig.json that extends parent
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.json"),
|
||||
`{
|
||||
"extends": "./tsconfig.base.json"
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create dummy db.ts
|
||||
await fs.writeFile(
|
||||
path.join(dbPath, "db.ts"),
|
||||
`class PrismaClient {
|
||||
constructor() {}
|
||||
}
|
||||
export const db = new PrismaClient()`,
|
||||
);
|
||||
|
||||
// Create auth.ts using the alias from grandparent
|
||||
await fs.writeFile(
|
||||
path.join(authPath, "auth.ts"),
|
||||
`import {betterAuth} from "better-auth";
|
||||
import {prismaAdapter} from "better-auth/adapters/prisma";
|
||||
import {db} from "@server/db/db";
|
||||
|
||||
export const auth = betterAuth({
|
||||
database: prismaAdapter(db, {
|
||||
provider: 'sqlite'
|
||||
}),
|
||||
emailAndPassword: {
|
||||
enabled: true,
|
||||
}
|
||||
})`,
|
||||
);
|
||||
|
||||
const config = await getConfig({
|
||||
cwd: tmpDir,
|
||||
configPath: "src/auth/auth.ts",
|
||||
});
|
||||
|
||||
expect(config).not.toBe(null);
|
||||
expect(config).toMatchObject({
|
||||
emailAndPassword: { enabled: true },
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* @see https://github.com/better-auth/better-auth/issues/6373
|
||||
*/
|
||||
it("should let child paths override parent paths from extends", async () => {
|
||||
const authPath = path.join(tmpDir, "server", "auth");
|
||||
const dbPath = path.join(tmpDir, "server", "db");
|
||||
const oldDbPath = path.join(tmpDir, "old", "db");
|
||||
await fs.mkdir(authPath, { recursive: true });
|
||||
await fs.mkdir(dbPath, { recursive: true });
|
||||
await fs.mkdir(oldDbPath, { recursive: true });
|
||||
|
||||
// Create parent tsconfig with path aliases pointing to old location
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.base.json"),
|
||||
`{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@server/*": ["./old/*"]
|
||||
}
|
||||
}
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create child tsconfig that overrides the alias
|
||||
await fs.writeFile(
|
||||
path.join(tmpDir, "tsconfig.json"),
|
||||
`{
|
||||
"extends": "./tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@server/*": ["./server/*"]
|
||||
}
|
||||
}
|
||||
}`,
|
||||
);
|
||||
|
||||
// Create dummy db.ts in the correct (overridden) location
|
||||
await fs.writeFile(
|
||||
path.join(dbPath, "db.ts"),
|
||||
`class PrismaClient {
|
||||
constructor() {}
|
||||
}
|
||||
export const db = new PrismaClient()`,
|
||||
);
|
||||
|
||||
// Create auth.ts
|
||||
await fs.writeFile(
|
||||
path.join(authPath, "auth.ts"),
|
||||
`import {betterAuth} from "better-auth";
|
||||
import {prismaAdapter} from "better-auth/adapters/prisma";
|
||||
import {db} from "@server/db/db";
|
||||
|
||||
export const auth = betterAuth({
|
||||
database: prismaAdapter(db, {
|
||||
provider: 'sqlite'
|
||||
}),
|
||||
emailAndPassword: {
|
||||
enabled: true,
|
||||
}
|
||||
})`,
|
||||
);
|
||||
|
||||
const config = await getConfig({
|
||||
cwd: tmpDir,
|
||||
configPath: "server/auth/auth.ts",
|
||||
});
|
||||
|
||||
expect(config).not.toBe(null);
|
||||
expect(config).toMatchObject({
|
||||
emailAndPassword: { enabled: true },
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
51
pnpm-lock.yaml
generated
51
pnpm-lock.yaml
generated
@@ -441,7 +441,7 @@ importers:
|
||||
version: 0.30.6
|
||||
drizzle-orm:
|
||||
specifier: ^0.45.1
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
mongodb:
|
||||
specifier: ^7.1.0
|
||||
version: 7.1.0(socks@2.8.7)
|
||||
@@ -654,7 +654,7 @@ importers:
|
||||
version: link:../../../../../packages/better-auth
|
||||
drizzle-orm:
|
||||
specifier: ^0.45.1
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
hono:
|
||||
specifier: ^4.12.4
|
||||
version: 4.12.5
|
||||
@@ -1049,7 +1049,7 @@ importers:
|
||||
version: 0.31.9
|
||||
drizzle-orm:
|
||||
specifier: '>=0.41.0'
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
jose:
|
||||
specifier: ^6.1.3
|
||||
version: 6.1.3
|
||||
@@ -1215,7 +1215,10 @@ importers:
|
||||
version: 17.3.1
|
||||
drizzle-orm:
|
||||
specifier: ^0.41.0
|
||||
version: 0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
get-tsconfig:
|
||||
specifier: ^4.13.6
|
||||
version: 4.13.6
|
||||
open:
|
||||
specifier: ^10.2.0
|
||||
version: 10.2.0
|
||||
@@ -1328,7 +1331,7 @@ importers:
|
||||
version: 0.3.1
|
||||
drizzle-orm:
|
||||
specifier: ^0.45.1
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
tsdown:
|
||||
specifier: 'catalog:'
|
||||
version: 0.21.0-beta.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
|
||||
@@ -26871,7 +26874,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
@@ -26907,6 +26910,24 @@ snapshots:
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
'@libsql/client': 0.17.0(encoding@0.1.13)
|
||||
'@opentelemetry/api': 1.9.0
|
||||
'@prisma/client': 7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
|
||||
'@types/better-sqlite3': 7.6.13
|
||||
'@types/pg': 8.16.0
|
||||
better-sqlite3: 12.6.2
|
||||
bun-types: 1.3.9
|
||||
gel: 2.2.0
|
||||
kysely: 0.28.11
|
||||
mysql2: 3.18.2(@types/node@25.3.3)
|
||||
pg: 8.19.0
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
@@ -26926,24 +26947,6 @@ snapshots:
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
optional: true
|
||||
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
'@libsql/client': 0.17.0(encoding@0.1.13)
|
||||
'@opentelemetry/api': 1.9.0
|
||||
'@prisma/client': 7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
|
||||
'@types/better-sqlite3': 7.6.13
|
||||
'@types/pg': 8.16.0
|
||||
better-sqlite3: 12.6.2
|
||||
bun-types: 1.3.9
|
||||
gel: 2.2.0
|
||||
kysely: 0.28.11
|
||||
mysql2: 3.18.2(@types/node@25.3.3)
|
||||
pg: 8.19.0
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
|
||||
drizzle-zod@0.8.3(drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(zod@4.3.6):
|
||||
dependencies:
|
||||
drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
|
||||
Reference in New Issue
Block a user