@kuckit/db 2.0.2 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -653,4 +653,4 @@ declare const verification: drizzle_orm_pg_core0.PgTableWithColumns<{
653
653
  }>;
654
654
  //#endregion
655
655
  export { verification as i, session as n, user as r, account as t };
656
- //# sourceMappingURL=auth-DwdzzHD4.d.ts.map
656
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","names":[],"sources":["../src/schema/auth.ts"],"sourcesContent":[],"mappings":";;;;cAEa,2BAAI;;;;IAAJ,EAAA,EASX,oBAAA,CAAA,QAAA,CAAA;MAAA,IAAA,EAAA,IAAA;;;;;;;;;;;;;gBATe,SAAA;MAAA,SAAA,EAAA,SAAA;IAWJ,CAAA,EAAA,CAAA,CAAA,EAWX,CAAA,CAAA,CAAA;IAAA,IAAA,+BAAA,CAAA;;;;;;;;;;;uBAXkB,EAAA,KAAA;MAAA,UAAA,EAAA,CAAA,MAAA,EAAA,GAAA,MAAA,EAAA,CAAA;MAaP,UAgBX,EAAA,KAAA;MAAA,QAAA,EAAA,SAAA;;;;;;;;;;;;;;;;;gBAhBkB,SAAA;MAAA,SAAA,EAAA,SAAA;IAkBP,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;IAOX,aAAA,+BAAA,CAAA;;;;;;;;;kBAPuB,EAAA,KAAA;MAAA,eAAA,EAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA/BZ,8BAAO;;;;QAWlB,oBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,8BAAO;;;;QAgBlB,oBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,mCAAY;;;;QAOvB,oBAAA,CAAA"}
@@ -47,4 +47,4 @@ const verification = pgTable("verification", {
47
47
 
48
48
  //#endregion
49
49
  export { verification as i, session as n, user as r, account as t };
50
- //# sourceMappingURL=auth-Do_CXnv3.js.map
50
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","names":[],"sources":["../src/schema/auth.ts"],"sourcesContent":["import { pgTable, text, timestamp, boolean } from 'drizzle-orm/pg-core'\n\nexport const user = pgTable('user', {\n\tid: text('id').primaryKey(),\n\tname: text('name').notNull(),\n\temail: text('email').notNull().unique(),\n\temailVerified: boolean('email_verified').notNull(),\n\timage: text('image'),\n\tpermissions: text('permissions').array().notNull().default(['modules:read']),\n\tcreatedAt: timestamp('created_at').notNull(),\n\tupdatedAt: timestamp('updated_at').notNull(),\n})\n\nexport const session = pgTable('session', {\n\tid: text('id').primaryKey(),\n\texpiresAt: timestamp('expires_at').notNull(),\n\ttoken: text('token').notNull().unique(),\n\tcreatedAt: timestamp('created_at').notNull(),\n\tupdatedAt: timestamp('updated_at').notNull(),\n\tipAddress: text('ip_address'),\n\tuserAgent: text('user_agent'),\n\tuserId: text('user_id')\n\t\t.notNull()\n\t\t.references(() => user.id, { onDelete: 'cascade' }),\n})\n\nexport const account = pgTable('account', {\n\tid: text('id').primaryKey(),\n\taccountId: text('account_id').notNull(),\n\tproviderId: text('provider_id').notNull(),\n\tuserId: text('user_id')\n\t\t.notNull()\n\t\t.references(() => user.id, { onDelete: 'cascade' }),\n\taccessToken: text('access_token'),\n\trefreshToken: text('refresh_token'),\n\tidToken: text('id_token'),\n\taccessTokenExpiresAt: timestamp('access_token_expires_at'),\n\trefreshTokenExpiresAt: timestamp('refresh_token_expires_at'),\n\tscope: text('scope'),\n\tpassword: text('password'),\n\tcreatedAt: timestamp('created_at').notNull(),\n\tupdatedAt: timestamp('updated_at').notNull(),\n})\n\nexport const verification = pgTable('verification', {\n\tid: text('id').primaryKey(),\n\tidentifier: text('identifier').notNull(),\n\tvalue: text('value').notNull(),\n\texpiresAt: timestamp('expires_at').notNull(),\n\tcreatedAt: timestamp('created_at'),\n\tupdatedAt: timestamp('updated_at'),\n})\n"],"mappings":";;;AAEA,MAAa,OAAO,QAAQ,QAAQ;CACnC,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,MAAM,KAAK,OAAO,CAAC,SAAS;CAC5B,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,QAAQ;CACvC,eAAe,QAAQ,iBAAiB,CAAC,SAAS;CAClD,OAAO,KAAK,QAAQ;CACpB,aAAa,KAAK,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;CAC5E,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,CAAC;AAEF,MAAa,UAAU,QAAQ,WAAW;CACzC,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,QAAQ;CACvC,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,KAAK,aAAa;CAC7B,WAAW,KAAK,aAAa;CAC7B,QAAQ,KAAK,UAAU,CACrB,SAAS,CACT,iBAAiB,KAAK,IAAI,EAAE,UAAU,WAAW,CAAC;CACpD,CAAC;AAEF,MAAa,UAAU,QAAQ,WAAW;CACzC,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,WAAW,KAAK,aAAa,CAAC,SAAS;CACvC,YAAY,KAAK,cAAc,CAAC,SAAS;CACzC,QAAQ,KAAK,UAAU,CACrB,SAAS,CACT,iBAAiB,KAAK,IAAI,EAAE,UAAU,WAAW,CAAC;CACpD,aAAa,KAAK,eAAe;CACjC,cAAc,KAAK,gBAAgB;CACnC,SAAS,KAAK,WAAW;CACzB,sBAAsB,UAAU,0BAA0B;CAC1D,uBAAuB,UAAU,2BAA2B;CAC5D,OAAO,KAAK,QAAQ;CACpB,UAAU,KAAK,WAAW;CAC1B,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,CAAC;AAEF,MAAa,eAAe,QAAQ,gBAAgB;CACnD,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,YAAY,KAAK,aAAa,CAAC,SAAS;CACxC,OAAO,KAAK,QAAQ,CAAC,SAAS;CAC9B,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa;CAClC,WAAW,UAAU,aAAa;CAClC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { i as verification, n as session, r as user, t as account } from "../auth-DwdzzHD4.js";
2
- import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "../connection-CqOTA50h.js";
3
- import { t as DbConfig } from "../types-Dq-KsFrs.js";
1
+ import { i as verification, n as session, r as user, t as account } from "../auth.js";
2
+ import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "../connection2.js";
3
+ import { t as DbConfig } from "../types.js";
4
4
  export { type DbConfig, account, buildDatabaseUrl, ensureDatabaseUrl, session, user, verification };
@@ -1,4 +1,4 @@
1
- import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "../connection-qCY3AVOI.js";
2
- import { i as verification, n as session, r as user, t as account } from "../auth-Do_CXnv3.js";
1
+ import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "../connection2.js";
2
+ import { i as verification, n as session, r as user, t as account } from "../auth.js";
3
3
 
4
4
  export { account, buildDatabaseUrl, ensureDatabaseUrl, session, user, verification };
@@ -1,2 +1,2 @@
1
- import { t as DbConfig } from "../types-Dq-KsFrs.js";
1
+ import { t as DbConfig } from "../types.js";
2
2
  export { DbConfig };
@@ -1,2 +1,2 @@
1
- import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection-CqOTA50h.js";
1
+ import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection2.js";
2
2
  export { buildDatabaseUrl, ensureDatabaseUrl };
@@ -1,3 +1,3 @@
1
- import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection-qCY3AVOI.js";
1
+ import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection2.js";
2
2
 
3
3
  export { buildDatabaseUrl, ensureDatabaseUrl };
@@ -23,4 +23,4 @@ declare function buildDatabaseUrl(): string;
23
23
  declare function ensureDatabaseUrl(): string;
24
24
  //#endregion
25
25
  export { ensureDatabaseUrl as n, buildDatabaseUrl as t };
26
- //# sourceMappingURL=connection-CqOTA50h.d.ts.map
26
+ //# sourceMappingURL=connection2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection2.d.ts","names":[],"sources":["../src/connection.ts"],"sourcesContent":[],"mappings":";;AAgBA;AAuBA;;;;;;;;;;;;;iBAvBgB,gBAAA,CAAA;;;;;;iBAuBA,iBAAA,CAAA"}
@@ -33,4 +33,4 @@ function ensureDatabaseUrl() {
33
33
 
34
34
  //#endregion
35
35
  export { ensureDatabaseUrl as n, buildDatabaseUrl as t };
36
- //# sourceMappingURL=connection-qCY3AVOI.js.map
36
+ //# sourceMappingURL=connection2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection2.js","names":[],"sources":["../src/connection.ts"],"sourcesContent":["/**\n * Database connection utilities\n * Single source of truth for DATABASE_URL construction\n */\n\n/**\n * Build DATABASE_URL from environment variables\n *\n * Supports two modes:\n * 1. Direct DATABASE_URL - used in local development\n * 2. Individual DB_* vars - used in Cloud Run with Cloud SQL Auth Proxy\n *\n * Cloud SQL Unix socket format: postgresql://user:password@/dbname?host=/cloudsql/connection-name\n *\n * @throws Error if neither DATABASE_URL nor complete DB_* vars are provided\n */\nexport function buildDatabaseUrl(): string {\n\t// Prefer DATABASE_URL if provided directly\n\tif (process.env.DATABASE_URL) {\n\t\treturn process.env.DATABASE_URL\n\t}\n\n\t// Construct from individual components (Cloud Run with Cloud SQL)\n\tconst { DB_HOST, DB_USER, DB_PASSWORD, DB_NAME } = process.env\n\tif (DB_HOST && DB_USER && DB_PASSWORD && DB_NAME) {\n\t\t// Cloud SQL Auth Proxy uses Unix socket path in host\n\t\treturn `postgresql://${DB_USER}:${encodeURIComponent(DB_PASSWORD)}@/${DB_NAME}?host=${DB_HOST}`\n\t}\n\n\tthrow new Error(\n\t\t'Missing database configuration: provide DATABASE_URL or DB_HOST, DB_USER, DB_PASSWORD, DB_NAME'\n\t)\n}\n\n/**\n * Ensure DATABASE_URL is set in process.env\n * Call this early in application startup to set up the environment\n * for packages that read process.env.DATABASE_URL directly\n */\nexport function ensureDatabaseUrl(): string {\n\tconst url = buildDatabaseUrl()\n\tprocess.env.DATABASE_URL = url\n\treturn url\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,SAAgB,mBAA2B;AAE1C,KAAI,QAAQ,IAAI,aACf,QAAO,QAAQ,IAAI;CAIpB,MAAM,EAAE,SAAS,SAAS,aAAa,YAAY,QAAQ;AAC3D,KAAI,WAAW,WAAW,eAAe,QAExC,QAAO,gBAAgB,QAAQ,GAAG,mBAAmB,YAAY,CAAC,IAAI,QAAQ,QAAQ;AAGvF,OAAM,IAAI,MACT,iGACA;;;;;;;AAQF,SAAgB,oBAA4B;CAC3C,MAAM,MAAM,kBAAkB;AAC9B,SAAQ,IAAI,eAAe;AAC3B,QAAO"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { i as verification, n as session, r as user, t as account } from "./auth-DwdzzHD4.js";
2
- import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection-CqOTA50h.js";
3
- import { t as DbConfig } from "./types-Dq-KsFrs.js";
1
+ import { i as verification, n as session, r as user, t as account } from "./auth.js";
2
+ import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection2.js";
3
+ import { t as DbConfig } from "./types.js";
4
4
  import { NodePgDatabase } from "drizzle-orm/node-postgres";
5
5
  import { Pool } from "pg";
6
6
 
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection-qCY3AVOI.js";
2
- import { i as verification, n as session, r as user, t as account } from "./auth-Do_CXnv3.js";
1
+ import { n as ensureDatabaseUrl, t as buildDatabaseUrl } from "./connection2.js";
2
+ import { i as verification, n as session, r as user, t as account } from "./auth.js";
3
3
  import { drizzle } from "drizzle-orm/node-postgres";
4
4
  import { Pool } from "pg";
5
5
 
@@ -1,2 +1,2 @@
1
- import { i as verification, n as session, r as user, t as account } from "../auth-DwdzzHD4.js";
1
+ import { i as verification, n as session, r as user, t as account } from "../auth.js";
2
2
  export { account, session, user, verification };
@@ -1,3 +1,3 @@
1
- import { i as verification, n as session, r as user, t as account } from "../auth-Do_CXnv3.js";
1
+ import { i as verification, n as session, r as user, t as account } from "../auth.js";
2
2
 
3
3
  export { account, session, user, verification };
@@ -6,11 +6,8 @@ import { createRequire as createRequire$1 } from "module";
6
6
  import { existsSync as existsSync$1 } from "node:fs";
7
7
  import { dirname as dirname$1, resolve as resolve$1 } from "node:path";
8
8
 
9
- //#region ../sdk/dist/chunk-B1JASekH.js
9
+ //#region ../sdk/dist/loader-BJ2ClBV6.js
10
10
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
11
-
12
- //#endregion
13
- //#region ../sdk/dist/loader-DKhFYG5d.js
14
11
  const CONFIG_FILES = [
15
12
  "kuckit.config.ts",
16
13
  "kuckit.config.js",
@@ -1 +1 @@
1
- {"version":3,"file":"schema-discovery.js","names":["dirname","resolve","existsSync","createRequire"],"sources":["../../sdk/dist/chunk-B1JASekH.js","../../sdk/dist/loader-DKhFYG5d.js","../src/schema-discovery.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\n\n//#region rolldown:runtime\nvar __require = /* @__PURE__ */ createRequire(import.meta.url);\n\n//#endregion\nexport { __require as t };","import { t as __require } from \"./chunk-B1JASekH.js\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\n//#region src/config/loader.ts\nconst CONFIG_FILES = [\n\t\"kuckit.config.ts\",\n\t\"kuckit.config.js\",\n\t\"kuckit.config.mjs\"\n];\n/**\n* Find the config file path by searching from cwd upward\n*/\nfunction findConfigFile(cwd = process.cwd()) {\n\tlet dir = cwd;\n\twhile (dir !== dirname(dir)) {\n\t\tfor (const file of CONFIG_FILES) {\n\t\t\tconst configPath = resolve(dir, file);\n\t\t\tif (existsSync(configPath)) return configPath;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\tfor (const file of CONFIG_FILES) {\n\t\tconst configPath = resolve(dir, file);\n\t\tif (existsSync(configPath)) return configPath;\n\t}\n\treturn null;\n}\n/**\n* Check if a unified config file exists\n*/\nfunction hasUnifiedConfig(cwd = process.cwd()) {\n\treturn findConfigFile(cwd) !== null;\n}\n/**\n* Load Kuckit configuration from file\n*\n* Uses jiti for TypeScript support at runtime.\n* Falls back to dynamic import for JS/MJS files.\n*\n* @param cwd - Directory to start searching from (default: process.cwd())\n* @throws Error if config file not found or invalid\n*/\nasync function loadKuckitConfig(cwd = process.cwd()) {\n\tconst configPath = findConfigFile(cwd);\n\tif (!configPath) throw new Error(`No Kuckit config file found. Create a kuckit.config.ts at your project root.\\nSearched from: ${cwd}`);\n\tlet config;\n\tif (configPath.endsWith(\".ts\")) {\n\t\tconst { createJiti } = await import(\"jiti\");\n\t\tconst loaded = await createJiti(cwd, { interopDefault: true }).import(configPath);\n\t\tconfig = loaded.default ?? loaded;\n\t} else {\n\t\tconst loaded = await import(configPath);\n\t\tconfig = loaded.default ?? loaded;\n\t}\n\tif (!config || typeof config !== \"object\") throw new Error(`Invalid Kuckit config at ${configPath}: expected an object`);\n\tif (!Array.isArray(config.modules)) throw new Error(`Invalid Kuckit config at ${configPath}: 'modules' must be an array`);\n\treturn {\n\t\t...config,\n\t\t_configPath: configPath\n\t};\n}\n/**\n* Synchronously load config (for non-async contexts like drizzle.config.ts)\n* Uses jiti synchronously to load TypeScript config\n*/\nfunction loadKuckitConfigSync(cwd = process.cwd()) {\n\tconst configPath = findConfigFile(cwd);\n\tif (!configPath) return null;\n\ttry {\n\t\tconst { createJiti } = __require(\"jiti\");\n\t\tconst loaded = createJiti(cwd, { interopDefault: true })(configPath);\n\t\tconst config = loaded.default ?? loaded;\n\t\tif (!config || typeof config !== \"object\" || !Array.isArray(config.modules)) return null;\n\t\treturn {\n\t\t\t...config,\n\t\t\t_configPath: configPath\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Try to load config, returning null if not found\n*/\nasync function tryLoadKuckitConfig(cwd = process.cwd()) {\n\ttry {\n\t\treturn await loadKuckitConfig(cwd);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n//#endregion\nexport { tryLoadKuckitConfig as a, loadKuckitConfigSync as i, hasUnifiedConfig as n, loadKuckitConfig as r, findConfigFile as t };\n//# sourceMappingURL=loader-DKhFYG5d.js.map","import { existsSync } from 'fs'\nimport { resolve, dirname } from 'path'\nimport { fileURLToPath } from 'url'\nimport { createRequire } from 'module'\nimport { loadKuckitConfigSync, type KuckitModuleConfig } from '@kuckit/sdk/config'\n\nconst currentDirPath = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\n\n/**\n * Resolve a module's package root directory using require.resolve.\n * Works for packages in node_modules, packages/, apps/, or any location.\n *\n * @param packageName - NPM package name (e.g., '@kuckit/users-module')\n * @returns Absolute path to package root, or null if not found\n */\nfunction resolvePackageRoot(packageName: string): string | null {\n\ttry {\n\t\t// Try to resolve the package's package.json\n\t\tconst packageJsonPath = require.resolve(`${packageName}/package.json`)\n\t\treturn dirname(packageJsonPath)\n\t} catch {\n\t\t// Package not installed or doesn't have package.json exports\n\t\ttry {\n\t\t\t// Fallback: resolve main entry and walk up to find package.json\n\t\t\tconst mainPath = require.resolve(packageName)\n\t\t\tlet dir = dirname(mainPath)\n\t\t\t// Walk up until we find package.json (max 10 levels to prevent infinite loop)\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tif (existsSync(resolve(dir, 'package.json'))) {\n\t\t\t\t\treturn dir\n\t\t\t\t}\n\t\t\t\tconst parent = dirname(dir)\n\t\t\t\tif (parent === dir) break // Reached filesystem root\n\t\t\t\tdir = parent\n\t\t\t}\n\t\t} catch {\n\t\t\t// Package not resolvable at all\n\t\t}\n\t\treturn null\n\t}\n}\n\n/**\n * Get schema paths for Drizzle configuration.\n * Derives paths from kuckit.config.ts (single source of truth).\n *\n * Uses require.resolve to dynamically locate packages, supporting:\n * - Modules in packages/ directory\n * - Modules in apps/ directory\n * - External modules in node_modules\n * - Nested package directories\n *\n * @returns Array of absolute paths to schema directories, starting with core schema\n */\nexport function getModuleSchemaPaths(): string[] {\n\tconst coreSchema = resolve(currentDirPath, './schema')\n\n\t// Load config using the SDK's pure config loader (no side effects)\n\tconst config = loadKuckitConfigSync()\n\tif (!config) {\n\t\t// Fall back to just core schema if no config found\n\t\treturn [coreSchema]\n\t}\n\n\tconst modulePaths = config.modules\n\t\t.filter((m: KuckitModuleConfig) => m.enabled !== false)\n\t\t.map((m: KuckitModuleConfig) => {\n\t\t\tconst packageRoot = resolvePackageRoot(m.package)\n\t\t\tif (!packageRoot) return null\n\n\t\t\tconst schemaDir = m.schemaDir ?? 'src/server/schema'\n\t\t\treturn resolve(packageRoot, schemaDir)\n\t\t})\n\t\t.filter((p): p is string => p !== null && existsSync(p))\n\n\treturn [coreSchema, ...modulePaths]\n}\n"],"mappings":";;;;;;;;;AAGA,IAAI,YAA4B,8BAAc,OAAO,KAAK,IAAI;;;;ACE9D,MAAM,eAAe;CACpB;CACA;CACA;CACA;;;;AAID,SAAS,eAAe,MAAM,QAAQ,KAAK,EAAE;CAC5C,IAAI,MAAM;AACV,QAAO,QAAQA,UAAQ,IAAI,EAAE;AAC5B,OAAK,MAAM,QAAQ,cAAc;GAChC,MAAM,aAAaC,UAAQ,KAAK,KAAK;AACrC,OAAIC,aAAW,WAAW,CAAE,QAAO;;AAEpC,QAAMF,UAAQ,IAAI;;AAEnB,MAAK,MAAM,QAAQ,cAAc;EAChC,MAAM,aAAaC,UAAQ,KAAK,KAAK;AACrC,MAAIC,aAAW,WAAW,CAAE,QAAO;;AAEpC,QAAO;;;;;;AAwCR,SAAS,qBAAqB,MAAM,QAAQ,KAAK,EAAE;CAClD,MAAM,aAAa,eAAe,IAAI;AACtC,KAAI,CAAC,WAAY,QAAO;AACxB,KAAI;EACH,MAAM,EAAE,eAAe,UAAU,OAAO;EACxC,MAAM,SAAS,WAAW,KAAK,EAAE,gBAAgB,MAAM,CAAC,CAAC,WAAW;EACpE,MAAM,SAAS,OAAO,WAAW;AACjC,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,OAAO,QAAQ,CAAE,QAAO;AACpF,SAAO;GACN,GAAG;GACH,aAAa;GACb;SACM;AACP,SAAO;;;;;;ACzET,MAAM,iBAAiB,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAC9D,MAAM,UAAUC,gBAAc,OAAO,KAAK,IAAI;;;;;;;;AAS9C,SAAS,mBAAmB,aAAoC;AAC/D,KAAI;AAGH,SAAO,QADiB,QAAQ,QAAQ,GAAG,YAAY,eAAe,CACvC;SACxB;AAEP,MAAI;GAGH,IAAI,MAAM,QADO,QAAQ,QAAQ,YAAY,CAClB;AAE3B,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,QAAI,WAAW,QAAQ,KAAK,eAAe,CAAC,CAC3C,QAAO;IAER,MAAM,SAAS,QAAQ,IAAI;AAC3B,QAAI,WAAW,IAAK;AACpB,UAAM;;UAEA;AAGR,SAAO;;;;;;;;;;;;;;;AAgBT,SAAgB,uBAAiC;CAChD,MAAM,aAAa,QAAQ,gBAAgB,WAAW;CAGtD,MAAM,SAAS,sBAAsB;AACrC,KAAI,CAAC,OAEJ,QAAO,CAAC,WAAW;AAcpB,QAAO,CAAC,YAAY,GAXA,OAAO,QACzB,QAAQ,MAA0B,EAAE,YAAY,MAAM,CACtD,KAAK,MAA0B;EAC/B,MAAM,cAAc,mBAAmB,EAAE,QAAQ;AACjD,MAAI,CAAC,YAAa,QAAO;AAGzB,SAAO,QAAQ,aADG,EAAE,aAAa,oBACK;GACrC,CACD,QAAQ,MAAmB,MAAM,QAAQ,WAAW,EAAE,CAAC,CAEtB"}
1
+ {"version":3,"file":"schema-discovery.js","names":["dirname","resolve","existsSync","createRequire"],"sources":["../../sdk/dist/loader-BJ2ClBV6.js","../src/schema-discovery.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\n//#region rolldown:runtime\nvar __require = /* @__PURE__ */ createRequire(import.meta.url);\n\n//#endregion\n//#region src/config/loader.ts\nconst CONFIG_FILES = [\n\t\"kuckit.config.ts\",\n\t\"kuckit.config.js\",\n\t\"kuckit.config.mjs\"\n];\n/**\n* Find the config file path by searching from cwd upward\n*/\nfunction findConfigFile(cwd = process.cwd()) {\n\tlet dir = cwd;\n\twhile (dir !== dirname(dir)) {\n\t\tfor (const file of CONFIG_FILES) {\n\t\t\tconst configPath = resolve(dir, file);\n\t\t\tif (existsSync(configPath)) return configPath;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\tfor (const file of CONFIG_FILES) {\n\t\tconst configPath = resolve(dir, file);\n\t\tif (existsSync(configPath)) return configPath;\n\t}\n\treturn null;\n}\n/**\n* Check if a unified config file exists\n*/\nfunction hasUnifiedConfig(cwd = process.cwd()) {\n\treturn findConfigFile(cwd) !== null;\n}\n/**\n* Load Kuckit configuration from file\n*\n* Uses jiti for TypeScript support at runtime.\n* Falls back to dynamic import for JS/MJS files.\n*\n* @param cwd - Directory to start searching from (default: process.cwd())\n* @throws Error if config file not found or invalid\n*/\nasync function loadKuckitConfig(cwd = process.cwd()) {\n\tconst configPath = findConfigFile(cwd);\n\tif (!configPath) throw new Error(`No Kuckit config file found. Create a kuckit.config.ts at your project root.\\nSearched from: ${cwd}`);\n\tlet config;\n\tif (configPath.endsWith(\".ts\")) {\n\t\tconst { createJiti } = await import(\"jiti\");\n\t\tconst loaded = await createJiti(cwd, { interopDefault: true }).import(configPath);\n\t\tconfig = loaded.default ?? loaded;\n\t} else {\n\t\tconst loaded = await import(configPath);\n\t\tconfig = loaded.default ?? loaded;\n\t}\n\tif (!config || typeof config !== \"object\") throw new Error(`Invalid Kuckit config at ${configPath}: expected an object`);\n\tif (!Array.isArray(config.modules)) throw new Error(`Invalid Kuckit config at ${configPath}: 'modules' must be an array`);\n\treturn {\n\t\t...config,\n\t\t_configPath: configPath\n\t};\n}\n/**\n* Synchronously load config (for non-async contexts like drizzle.config.ts)\n* Uses jiti synchronously to load TypeScript config\n*/\nfunction loadKuckitConfigSync(cwd = process.cwd()) {\n\tconst configPath = findConfigFile(cwd);\n\tif (!configPath) return null;\n\ttry {\n\t\tconst { createJiti } = __require(\"jiti\");\n\t\tconst loaded = createJiti(cwd, { interopDefault: true })(configPath);\n\t\tconst config = loaded.default ?? loaded;\n\t\tif (!config || typeof config !== \"object\" || !Array.isArray(config.modules)) return null;\n\t\treturn {\n\t\t\t...config,\n\t\t\t_configPath: configPath\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Try to load config, returning null if not found\n*/\nasync function tryLoadKuckitConfig(cwd = process.cwd()) {\n\ttry {\n\t\treturn await loadKuckitConfig(cwd);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n//#endregion\nexport { tryLoadKuckitConfig as a, loadKuckitConfigSync as i, hasUnifiedConfig as n, loadKuckitConfig as r, findConfigFile as t };\n//# sourceMappingURL=loader-BJ2ClBV6.js.map","import { existsSync } from 'fs'\nimport { resolve, dirname } from 'path'\nimport { fileURLToPath } from 'url'\nimport { createRequire } from 'module'\nimport { loadKuckitConfigSync, type KuckitModuleConfig } from '@kuckit/sdk/config'\n\nconst currentDirPath = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\n\n/**\n * Resolve a module's package root directory using require.resolve.\n * Works for packages in node_modules, packages/, apps/, or any location.\n *\n * @param packageName - NPM package name (e.g., '@kuckit/users-module')\n * @returns Absolute path to package root, or null if not found\n */\nfunction resolvePackageRoot(packageName: string): string | null {\n\ttry {\n\t\t// Try to resolve the package's package.json\n\t\tconst packageJsonPath = require.resolve(`${packageName}/package.json`)\n\t\treturn dirname(packageJsonPath)\n\t} catch {\n\t\t// Package not installed or doesn't have package.json exports\n\t\ttry {\n\t\t\t// Fallback: resolve main entry and walk up to find package.json\n\t\t\tconst mainPath = require.resolve(packageName)\n\t\t\tlet dir = dirname(mainPath)\n\t\t\t// Walk up until we find package.json (max 10 levels to prevent infinite loop)\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tif (existsSync(resolve(dir, 'package.json'))) {\n\t\t\t\t\treturn dir\n\t\t\t\t}\n\t\t\t\tconst parent = dirname(dir)\n\t\t\t\tif (parent === dir) break // Reached filesystem root\n\t\t\t\tdir = parent\n\t\t\t}\n\t\t} catch {\n\t\t\t// Package not resolvable at all\n\t\t}\n\t\treturn null\n\t}\n}\n\n/**\n * Get schema paths for Drizzle configuration.\n * Derives paths from kuckit.config.ts (single source of truth).\n *\n * Uses require.resolve to dynamically locate packages, supporting:\n * - Modules in packages/ directory\n * - Modules in apps/ directory\n * - External modules in node_modules\n * - Nested package directories\n *\n * @returns Array of absolute paths to schema directories, starting with core schema\n */\nexport function getModuleSchemaPaths(): string[] {\n\tconst coreSchema = resolve(currentDirPath, './schema')\n\n\t// Load config using the SDK's pure config loader (no side effects)\n\tconst config = loadKuckitConfigSync()\n\tif (!config) {\n\t\t// Fall back to just core schema if no config found\n\t\treturn [coreSchema]\n\t}\n\n\tconst modulePaths = config.modules\n\t\t.filter((m: KuckitModuleConfig) => m.enabled !== false)\n\t\t.map((m: KuckitModuleConfig) => {\n\t\t\tconst packageRoot = resolvePackageRoot(m.package)\n\t\t\tif (!packageRoot) return null\n\n\t\t\tconst schemaDir = m.schemaDir ?? 'src/server/schema'\n\t\t\treturn resolve(packageRoot, schemaDir)\n\t\t})\n\t\t.filter((p): p is string => p !== null && existsSync(p))\n\n\treturn [coreSchema, ...modulePaths]\n}\n"],"mappings":";;;;;;;;;AAKA,IAAI,YAA4B,8BAAc,OAAO,KAAK,IAAI;AAI9D,MAAM,eAAe;CACpB;CACA;CACA;CACA;;;;AAID,SAAS,eAAe,MAAM,QAAQ,KAAK,EAAE;CAC5C,IAAI,MAAM;AACV,QAAO,QAAQA,UAAQ,IAAI,EAAE;AAC5B,OAAK,MAAM,QAAQ,cAAc;GAChC,MAAM,aAAaC,UAAQ,KAAK,KAAK;AACrC,OAAIC,aAAW,WAAW,CAAE,QAAO;;AAEpC,QAAMF,UAAQ,IAAI;;AAEnB,MAAK,MAAM,QAAQ,cAAc;EAChC,MAAM,aAAaC,UAAQ,KAAK,KAAK;AACrC,MAAIC,aAAW,WAAW,CAAE,QAAO;;AAEpC,QAAO;;;;;;AAwCR,SAAS,qBAAqB,MAAM,QAAQ,KAAK,EAAE;CAClD,MAAM,aAAa,eAAe,IAAI;AACtC,KAAI,CAAC,WAAY,QAAO;AACxB,KAAI;EACH,MAAM,EAAE,eAAe,UAAU,OAAO;EACxC,MAAM,SAAS,WAAW,KAAK,EAAE,gBAAgB,MAAM,CAAC,CAAC,WAAW;EACpE,MAAM,SAAS,OAAO,WAAW;AACjC,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,OAAO,QAAQ,CAAE,QAAO;AACpF,SAAO;GACN,GAAG;GACH,aAAa;GACb;SACM;AACP,SAAO;;;;;;AC7ET,MAAM,iBAAiB,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAC9D,MAAM,UAAUC,gBAAc,OAAO,KAAK,IAAI;;;;;;;;AAS9C,SAAS,mBAAmB,aAAoC;AAC/D,KAAI;AAGH,SAAO,QADiB,QAAQ,QAAQ,GAAG,YAAY,eAAe,CACvC;SACxB;AAEP,MAAI;GAGH,IAAI,MAAM,QADO,QAAQ,QAAQ,YAAY,CAClB;AAE3B,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,QAAI,WAAW,QAAQ,KAAK,eAAe,CAAC,CAC3C,QAAO;IAER,MAAM,SAAS,QAAQ,IAAI;AAC3B,QAAI,WAAW,IAAK;AACpB,UAAM;;UAEA;AAGR,SAAO;;;;;;;;;;;;;;;AAgBT,SAAgB,uBAAiC;CAChD,MAAM,aAAa,QAAQ,gBAAgB,WAAW;CAGtD,MAAM,SAAS,sBAAsB;AACrC,KAAI,CAAC,OAEJ,QAAO,CAAC,WAAW;AAcpB,QAAO,CAAC,YAAY,GAXA,OAAO,QACzB,QAAQ,MAA0B,EAAE,YAAY,MAAM,CACtD,KAAK,MAA0B;EAC/B,MAAM,cAAc,mBAAmB,EAAE,QAAQ;AACjD,MAAI,CAAC,YAAa,QAAO;AAGzB,SAAO,QAAQ,aADG,EAAE,aAAa,oBACK;GACrC,CACD,QAAQ,MAAmB,MAAM,QAAQ,WAAW,EAAE,CAAC,CAEtB"}
@@ -18,4 +18,4 @@ interface DbConfig {
18
18
  }
19
19
  //#endregion
20
20
  export { DbConfig as t };
21
- //# sourceMappingURL=types-Dq-KsFrs.d.ts.map
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/config/types.ts"],"sourcesContent":[],"mappings":";;AAGA;;UAAiB,QAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kuckit/db",
3
- "version": "2.0.2",
3
+ "version": "2.0.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-Do_CXnv3.js","names":[],"sources":["../src/schema/auth.ts"],"sourcesContent":["import { pgTable, text, timestamp, boolean } from 'drizzle-orm/pg-core'\n\nexport const user = pgTable('user', {\n\tid: text('id').primaryKey(),\n\tname: text('name').notNull(),\n\temail: text('email').notNull().unique(),\n\temailVerified: boolean('email_verified').notNull(),\n\timage: text('image'),\n\tpermissions: text('permissions').array().notNull().default(['modules:read']),\n\tcreatedAt: timestamp('created_at').notNull(),\n\tupdatedAt: timestamp('updated_at').notNull(),\n})\n\nexport const session = pgTable('session', {\n\tid: text('id').primaryKey(),\n\texpiresAt: timestamp('expires_at').notNull(),\n\ttoken: text('token').notNull().unique(),\n\tcreatedAt: timestamp('created_at').notNull(),\n\tupdatedAt: timestamp('updated_at').notNull(),\n\tipAddress: text('ip_address'),\n\tuserAgent: text('user_agent'),\n\tuserId: text('user_id')\n\t\t.notNull()\n\t\t.references(() => user.id, { onDelete: 'cascade' }),\n})\n\nexport const account = pgTable('account', {\n\tid: text('id').primaryKey(),\n\taccountId: text('account_id').notNull(),\n\tproviderId: text('provider_id').notNull(),\n\tuserId: text('user_id')\n\t\t.notNull()\n\t\t.references(() => user.id, { onDelete: 'cascade' }),\n\taccessToken: text('access_token'),\n\trefreshToken: text('refresh_token'),\n\tidToken: text('id_token'),\n\taccessTokenExpiresAt: timestamp('access_token_expires_at'),\n\trefreshTokenExpiresAt: timestamp('refresh_token_expires_at'),\n\tscope: text('scope'),\n\tpassword: text('password'),\n\tcreatedAt: timestamp('created_at').notNull(),\n\tupdatedAt: timestamp('updated_at').notNull(),\n})\n\nexport const verification = pgTable('verification', {\n\tid: text('id').primaryKey(),\n\tidentifier: text('identifier').notNull(),\n\tvalue: text('value').notNull(),\n\texpiresAt: timestamp('expires_at').notNull(),\n\tcreatedAt: timestamp('created_at'),\n\tupdatedAt: timestamp('updated_at'),\n})\n"],"mappings":";;;AAEA,MAAa,OAAO,QAAQ,QAAQ;CACnC,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,MAAM,KAAK,OAAO,CAAC,SAAS;CAC5B,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,QAAQ;CACvC,eAAe,QAAQ,iBAAiB,CAAC,SAAS;CAClD,OAAO,KAAK,QAAQ;CACpB,aAAa,KAAK,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;CAC5E,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,CAAC;AAEF,MAAa,UAAU,QAAQ,WAAW;CACzC,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,QAAQ;CACvC,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,KAAK,aAAa;CAC7B,WAAW,KAAK,aAAa;CAC7B,QAAQ,KAAK,UAAU,CACrB,SAAS,CACT,iBAAiB,KAAK,IAAI,EAAE,UAAU,WAAW,CAAC;CACpD,CAAC;AAEF,MAAa,UAAU,QAAQ,WAAW;CACzC,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,WAAW,KAAK,aAAa,CAAC,SAAS;CACvC,YAAY,KAAK,cAAc,CAAC,SAAS;CACzC,QAAQ,KAAK,UAAU,CACrB,SAAS,CACT,iBAAiB,KAAK,IAAI,EAAE,UAAU,WAAW,CAAC;CACpD,aAAa,KAAK,eAAe;CACjC,cAAc,KAAK,gBAAgB;CACnC,SAAS,KAAK,WAAW;CACzB,sBAAsB,UAAU,0BAA0B;CAC1D,uBAAuB,UAAU,2BAA2B;CAC5D,OAAO,KAAK,QAAQ;CACpB,UAAU,KAAK,WAAW;CAC1B,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,CAAC;AAEF,MAAa,eAAe,QAAQ,gBAAgB;CACnD,IAAI,KAAK,KAAK,CAAC,YAAY;CAC3B,YAAY,KAAK,aAAa,CAAC,SAAS;CACxC,OAAO,KAAK,QAAQ,CAAC,SAAS;CAC9B,WAAW,UAAU,aAAa,CAAC,SAAS;CAC5C,WAAW,UAAU,aAAa;CAClC,WAAW,UAAU,aAAa;CAClC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-DwdzzHD4.d.ts","names":[],"sources":["../src/schema/auth.ts"],"sourcesContent":[],"mappings":";;;;cAEa,2BAAI;;;;IAAJ,EAAA,EASX,oBAAA,CAAA,QAAA,CAAA;MAAA,IAAA,EAAA,IAAA;;;;;;;;;;;;;gBATe,SAAA;MAAA,SAAA,EAAA,SAAA;IAWJ,CAAA,EAAA,CAAA,CAAA,EAWX,CAAA,CAAA,CAAA;IAAA,IAAA,+BAAA,CAAA;;;;;;;;;;;uBAXkB,EAAA,KAAA;MAAA,UAAA,EAAA,CAAA,MAAA,EAAA,GAAA,MAAA,EAAA,CAAA;MAaP,UAgBX,EAAA,KAAA;MAAA,QAAA,EAAA,SAAA;;;;;;;;;;;;;;;;;gBAhBkB,SAAA;MAAA,SAAA,EAAA,SAAA;IAkBP,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;IAOX,aAAA,+BAAA,CAAA;;;;;;;;;kBAPuB,EAAA,KAAA;MAAA,eAAA,EAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA/BZ,8BAAO;;;;QAWlB,oBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,8BAAO;;;;QAgBlB,oBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,mCAAY;;;;QAOvB,oBAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-CqOTA50h.d.ts","names":[],"sources":["../src/connection.ts"],"sourcesContent":[],"mappings":";;AAgBA;AAuBA;;;;;;;;;;;;;iBAvBgB,gBAAA,CAAA;;;;;;iBAuBA,iBAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-qCY3AVOI.js","names":[],"sources":["../src/connection.ts"],"sourcesContent":["/**\n * Database connection utilities\n * Single source of truth for DATABASE_URL construction\n */\n\n/**\n * Build DATABASE_URL from environment variables\n *\n * Supports two modes:\n * 1. Direct DATABASE_URL - used in local development\n * 2. Individual DB_* vars - used in Cloud Run with Cloud SQL Auth Proxy\n *\n * Cloud SQL Unix socket format: postgresql://user:password@/dbname?host=/cloudsql/connection-name\n *\n * @throws Error if neither DATABASE_URL nor complete DB_* vars are provided\n */\nexport function buildDatabaseUrl(): string {\n\t// Prefer DATABASE_URL if provided directly\n\tif (process.env.DATABASE_URL) {\n\t\treturn process.env.DATABASE_URL\n\t}\n\n\t// Construct from individual components (Cloud Run with Cloud SQL)\n\tconst { DB_HOST, DB_USER, DB_PASSWORD, DB_NAME } = process.env\n\tif (DB_HOST && DB_USER && DB_PASSWORD && DB_NAME) {\n\t\t// Cloud SQL Auth Proxy uses Unix socket path in host\n\t\treturn `postgresql://${DB_USER}:${encodeURIComponent(DB_PASSWORD)}@/${DB_NAME}?host=${DB_HOST}`\n\t}\n\n\tthrow new Error(\n\t\t'Missing database configuration: provide DATABASE_URL or DB_HOST, DB_USER, DB_PASSWORD, DB_NAME'\n\t)\n}\n\n/**\n * Ensure DATABASE_URL is set in process.env\n * Call this early in application startup to set up the environment\n * for packages that read process.env.DATABASE_URL directly\n */\nexport function ensureDatabaseUrl(): string {\n\tconst url = buildDatabaseUrl()\n\tprocess.env.DATABASE_URL = url\n\treturn url\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,SAAgB,mBAA2B;AAE1C,KAAI,QAAQ,IAAI,aACf,QAAO,QAAQ,IAAI;CAIpB,MAAM,EAAE,SAAS,SAAS,aAAa,YAAY,QAAQ;AAC3D,KAAI,WAAW,WAAW,eAAe,QAExC,QAAO,gBAAgB,QAAQ,GAAG,mBAAmB,YAAY,CAAC,IAAI,QAAQ,QAAQ;AAGvF,OAAM,IAAI,MACT,iGACA;;;;;;;AAQF,SAAgB,oBAA4B;CAC3C,MAAM,MAAM,kBAAkB;AAC9B,SAAQ,IAAI,eAAe;AAC3B,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-Dq-KsFrs.d.ts","names":[],"sources":["../src/config/types.ts"],"sourcesContent":[],"mappings":";;AAGA;;UAAiB,QAAA"}
File without changes