@sqrzro/server 4.0.0-alpha.4 → 4.0.0-alpha.40
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.
- package/dist/chunk-BA3BC4CD.js +2 -0
- package/dist/chunk-BA3BC4CD.js.map +1 -0
- package/dist/chunk-UCMLSO7F.js +3 -0
- package/dist/chunk-UCMLSO7F.js.map +1 -0
- package/dist/csv/index.d.ts +7 -0
- package/dist/csv/index.js +2 -0
- package/dist/csv/index.js.map +1 -0
- package/dist/database/index.d.ts +77 -36
- package/dist/database/index.js +1 -1
- package/dist/database/index.js.map +1 -1
- package/dist/forms/index.d.ts +37 -4
- package/dist/forms/index.js +1 -1
- package/dist/forms/index.js.map +1 -1
- package/dist/{interfaces-BheedaEI.d.ts → interfaces-DTUqy5Oj.d.ts} +4 -3
- package/dist/json/index.d.ts +3 -1
- package/dist/json/index.js +1 -1
- package/dist/json/index.js.map +1 -1
- package/dist/mail/index.d.ts +25 -0
- package/dist/mail/index.js +3 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/proxy/index.d.ts +10 -0
- package/dist/proxy/index.js +2 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/storage/index.d.ts +32 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/utility/index.d.ts +8 -5
- package/dist/utility/index.js +1 -1
- package/dist/utility/index.js.map +1 -1
- package/package.json +26 -34
- package/dist/auth/index.d.ts +0 -49
- package/dist/auth/index.js +0 -2
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/utility/schema.d.ts +0 -348
- package/dist/auth/utility/schema.js +0 -2
- package/dist/auth/utility/schema.js.map +0 -1
- package/dist/chunk-37TYQL5Y.js +0 -2
- package/dist/chunk-37TYQL5Y.js.map +0 -1
- package/dist/chunk-AGS5PPG2.js +0 -2
- package/dist/chunk-AGS5PPG2.js.map +0 -1
- package/dist/chunk-JI2U2EMD.js +0 -2
- package/dist/chunk-JI2U2EMD.js.map +0 -1
- package/dist/chunk-QE347FVL.js +0 -2
- package/dist/chunk-QE347FVL.js.map +0 -1
- package/dist/chunk-XSJ4OEIH.js +0 -2
- package/dist/chunk-XSJ4OEIH.js.map +0 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +0 -3
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/scripts/db-generate.ts +0 -31
- package/dist/cli/scripts/db-reset.ts +0 -56
- package/dist/cli/scripts/db-seed.ts +0 -32
- package/dist/cli/static/drizzle.config.js +0 -19
package/dist/chunk-QE347FVL.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {e}from'./chunk-JI2U2EMD.js';import I from'bcryptjs';import {cache}from'react';import {createClient}from'redis';import {cookies}from'next/headers';import {and,eq,isNull}from'drizzle-orm';import {drizzle}from'drizzle-orm/node-postgres';var i=null;async function S(){if(!process.env.REDIS_URL)throw new Error("REDIS_URL is not defined. Access to the cache is not possible.");return i||(i=createClient({url:process.env.REDIS_URL}),await i.connect(),i)}var o=S;var w={async getItem(e,r){let t=await(await o()).get(`[${e}]:${r}`);if(!t)return null;try{return JSON.parse(t)}catch{return null}},async getArray(e,r){return await(await o()).sMembers(`[${e}]:${r}`)},async addToArray(e,r,t){await(await o()).sAdd(`[${e}]:${r}`,t);},async removeFromArray(e,r,t){await(await o()).sRem(`[${e}]:${r}`,t);},async setItem(e,r,t){await(await o()).set(`[${e}]:${r}`,JSON.stringify(t));},async removeItem(e,r){await(await o()).del(`[${e}]:${r}`);}},l=w;function _(){let e=process.env.AUTH_ROLE;if(!e)throw new Error("AUTH_ROLE environment variable is not set.");let r=parseInt(e,10);if(isNaN(r))throw new Error("AUTH_ROLE environment variable is not a valid number.");return r}var u=_;var c=process.env.AUTH_COOKIE_NAME??"session",K=process.env.AUTH_INVITE_EXPIRY_HOURS?Number(process.env.AUTH_INVITE_EXPIRY_HOURS):24,V=process.env.AUTH_RESET_EXPIRY_HOURS?Number(process.env.AUTH_RESET_EXPIRY_HOURS):2;async function h(e){let r=(e??await cookies()).get(c)?.value;if(!r)return null;let t=r.split(".");if(t.length!==2)return null;let[s,a]=t;return {id:s,secret:a}}var m=h;function v(e){let{expires:r,secret:t,userID:s}=e;if(typeof r!="string"||typeof t!="string"||typeof s!="string")return null;let a=new Date(r);return isNaN(a.getTime())?null:{expires:a,secret:t,userID:s}}var f=v;async function x(e){let r=await m(e);if(!r)return null;let t=u(),s=await l.getItem("session",r.id);return s?.role!==t||typeof s?.secret!="string"||!await I.compare(r.secret,s.secret)?null:f(s)}var N=cache(x),p=N;var y=drizzle(process.env.DATABASE_URL??"");async function b(e$1,r){let t=u();return (await y.select().from(e).where(and(eq(e[e$1],r),eq(e.role,t),isNull(e.deletedAt))).limit(1))[0]??null}var d=b;async function k(e){return d("id",e)}var U=k;async function $(){let e=await p();if(!e)return null;let r=await U(e.userID);return r?{email:r.email,id:r.id}:null}async function D(){return cache($)()}var R=D;async function L(){let e=await R();if(!e)throw new Error("Could not ensure session user. No session user found.");return e}var Re=L;export{y as a,c as b,K as c,V as d,u as e,d as f,l as g,m as h,p as i,R as j,Re as k};//# sourceMappingURL=chunk-QE347FVL.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-QE347FVL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/utility/get-client.ts","../src/storage/index.ts","../src/auth/utility/ensure-role.ts","../src/auth/utility/config.ts","../src/auth/sessions/utility/get-session-cookie.ts","../src/auth/sessions/utility/parse-session.ts","../src/auth/sessions/validate-session.ts","../src/utility/db.ts","../src/auth/users/utility/get-user-by.ts","../src/auth/users/utility/get-user-by-id.ts","../src/auth/users/get-session-user.ts","../src/auth/users/ensure-session-user.ts"],"names":["client","getClient","createClient","get_client_default","serverStorage","prefix","key","value","storage_default","ensureRole","role","roleNumber","ensure_role_default","AUTH_COOKIE_NAME","AUTH_INVITE_EXPIRY_HOURS","AUTH_RESET_EXPIRY_HOURS","getSessionCookie","cookies","cookie","cookieFn","parts","id","secret","get_session_cookie_default","parseSession","session","expires","userID","expiresDate","parse_session_default","uncached_validateSession","bcrypt","validateSession","cache","validate_session_default","db_default","drizzle","getUserBy","authUserTable","and","eq","isNull","get_user_by_default","getUserByID","get_user_by_id_default","uncached_getSessionUser","authUser","getSessionUser","get_session_user_default","ensureSessionUser","user","ensure_session_user_default"],"mappings":"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","file":"chunk-QE347FVL.js","sourcesContent":["import { createClient } from 'redis';\n\nimport isLocalhost from './is-localhost.js';\n\nlet client: ReturnType<typeof createClient> | null = null;\n\n/**\n * Get a Redis client instance. If the client does not exist, it creates a new one and connects to the Redis server.\n * If the client already exists, it returns the existing instance.\n *\n * @returns A promise that resolves to a Redis client instance.\n */\nasync function getClient(): Promise<ReturnType<typeof createClient>> {\n if (!process.env.REDIS_URL) {\n throw new Error('REDIS_URL is not defined. Access to the cache is not possible.');\n }\n\n if (client) {\n return client;\n }\n\n client = createClient({\n url: process.env.REDIS_URL,\n });\n\n await client.connect();\n return client;\n}\n\nexport default getClient;\n","import getClient from './utility/get-client';\n\n/**\n * Server-side storage utility for caching data using Redis. It is designed to match the interface of localStorage, but operates on the server side.\n */\nconst serverStorage = {\n /**\n * Get an item from the cache.\n * @param prefix The prefix to use for the cache key.\n * @param key The key of the item to retrieve.\n * @returns The cached item, or null if not found.\n */\n async getItem(prefix: string, key: string): Promise<Record<string, unknown> | null> {\n const value = await (await getClient()).get(`[${prefix}]:${key}`);\n\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n },\n\n async getArray(prefix: string, key: string): Promise<string[]> {\n const values = await (await getClient()).sMembers(`[${prefix}]:${key}`);\n return values;\n },\n\n async addToArray(prefix: string, key: string, value: string): Promise<void> {\n await (await getClient()).sAdd(`[${prefix}]:${key}`, value);\n },\n\n async removeFromArray(prefix: string, key: string, value: string): Promise<void> {\n await (await getClient()).sRem(`[${prefix}]:${key}`, value);\n },\n\n /**\n * Set an item in the cache.\n * @param prefix The prefix to use for the cache key.\n * @param key The key of the item to set.\n * @param value The value of the item to set.\n */\n async setItem(prefix: string, key: string, value: Record<string, unknown>): Promise<void> {\n await (await getClient()).set(`[${prefix}]:${key}`, JSON.stringify(value));\n },\n\n /**\n * Remove an item from the cache.\n * @param prefix The prefix to use for the cache key.\n * @param key The key of the item to remove.\n */\n async removeItem(prefix: string, key: string): Promise<void> {\n await (await getClient()).del(`[${prefix}]:${key}`);\n },\n};\n\nexport default serverStorage;\n","function ensureRole(): number {\n const role = process.env.AUTH_ROLE;\n\n if (!role) {\n throw new Error('AUTH_ROLE environment variable is not set.');\n }\n\n const roleNumber = parseInt(role, 10);\n\n if (isNaN(roleNumber)) {\n throw new Error('AUTH_ROLE environment variable is not a valid number.');\n }\n\n return roleNumber;\n}\n\nexport default ensureRole;\n","export const AUTH_COOKIE_NAME = process.env.AUTH_COOKIE_NAME ?? 'session';\n\nexport const AUTH_INVITE_EXPIRY_HOURS = process.env.AUTH_INVITE_EXPIRY_HOURS\n ? Number(process.env.AUTH_INVITE_EXPIRY_HOURS)\n : 24;\n\nexport const AUTH_RESET_EXPIRY_HOURS = process.env.AUTH_RESET_EXPIRY_HOURS\n ? Number(process.env.AUTH_RESET_EXPIRY_HOURS)\n : 2;\n","import { cookies as cookieFn } from 'next/headers';\nimport { NextRequest } from 'next/server';\n\nimport { AUTH_COOKIE_NAME } from '../../utility/config';\n\nimport type { AuthSessionCookie } from './interfaces';\n\nasync function getSessionCookie(\n cookies?: NextRequest['cookies']\n): Promise<AuthSessionCookie | null> {\n const cookie = (cookies ?? (await cookieFn())).get(AUTH_COOKIE_NAME)?.value;\n\n if (!cookie) {\n return null;\n }\n\n const parts = cookie.split('.');\n\n if (parts.length !== 2) {\n return null;\n }\n\n const [id, secret] = parts;\n return { id, secret };\n}\n\nexport default getSessionCookie;\n","import type { AuthSession } from './interfaces';\n\nfunction parseSession(session: Record<string, unknown>): AuthSession | null {\n const { expires, secret, userID } = session;\n\n if (typeof expires !== 'string' || typeof secret !== 'string' || typeof userID !== 'string') {\n return null;\n }\n\n const expiresDate = new Date(expires);\n\n if (isNaN(expiresDate.getTime())) {\n return null;\n }\n\n return {\n expires: expiresDate,\n secret,\n userID,\n };\n}\n\nexport default parseSession;\n","import bcrypt from 'bcryptjs';\nimport { NextRequest } from 'next/server';\nimport { cache } from 'react';\n\nimport serverStorage from '../../storage';\n\nimport ensureRole from '../utility/ensure-role';\nimport getSessionCookie from './utility/get-session-cookie';\nimport type { AuthSession } from './utility/interfaces';\nimport parseSession from './utility/parse-session';\n\nasync function uncached_validateSession(\n cookies?: NextRequest['cookies']\n): Promise<AuthSession | null> {\n const cookie = await getSessionCookie(cookies);\n\n if (!cookie) {\n return null;\n }\n\n const role = ensureRole();\n const session = await serverStorage.getItem('session', cookie.id);\n\n if(session?.role !== role) {\n return null;\n }\n\n if (typeof session?.secret !== 'string') {\n return null;\n }\n\n if (!(await bcrypt.compare(cookie.secret, session.secret))) {\n return null;\n }\n\n return parseSession(session);\n}\n\nconst validateSession = cache(uncached_validateSession);\n\nexport default validateSession;\n","import { drizzle } from 'drizzle-orm/node-postgres';\n\nexport default drizzle(process.env.DATABASE_URL ?? '');\n","import { and, eq, isNull } from 'drizzle-orm';\n\nimport db from '../../../utility/db';\n\nimport ensureRole from '../../utility/ensure-role';\nimport { authUserTable } from '../../utility/schema';\nimport type { AuthUserTable } from '../../utility/schema';\n\nimport type { AuthUser } from './interfaces';\n\nasync function getUserBy(key: keyof AuthUserTable, value: string): Promise<AuthUser | null> {\n const role = ensureRole();\n\n const results = await db\n .select()\n .from(authUserTable)\n .where(\n and(\n eq(authUserTable[key], value),\n eq(authUserTable.role, role),\n isNull(authUserTable.deletedAt)\n )\n )\n .limit(1);\n\n return results[0] ?? null;\n}\n\nexport default getUserBy;\n","import getUserBy from './get-user-by';\nimport type { AuthUser } from './interfaces';\n\nasync function getUserByID(id: string): Promise<AuthUser | null> {\n return getUserBy('id', id);\n}\n\nexport default getUserByID;\n","import { cache } from 'react';\n\nimport validateSession from '../sessions/validate-session';\n\nimport getUserByID from './utility/get-user-by-id';\nimport type { User } from './utility/interfaces';\n\nasync function uncached_getSessionUser(): Promise<User | null> {\n const session = await validateSession();\n\n if (!session) {\n return null;\n }\n\n const authUser = await getUserByID(session.userID);\n\n if (!authUser) {\n return null;\n }\n\n return {\n email: authUser.email,\n id: authUser.id,\n };\n}\n\nasync function getSessionUser(): ReturnType<typeof uncached_getSessionUser> {\n return cache(uncached_getSessionUser)();\n}\n\nexport default getSessionUser;\n","import getSessionUser from './get-session-user';\nimport type { User } from './utility/interfaces';\n\nasync function ensureSessionUser(): Promise<User> {\n const user = await getSessionUser();\n\n if (!user) {\n throw new Error('Could not ensure session user. No session user found.');\n }\n\n return user;\n}\n\nexport default ensureSessionUser;\n"]}
|
package/dist/chunk-XSJ4OEIH.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {randomBytes}from'crypto';function u(r,n){let t=Array.isArray(r)?r[0]:r;return t?.startsWith(n)?t:null}var s=u;function a(r,n){let t=s(r,n);if(!t)throw new Error(`Could not ensure ID. '${r}' is not a valid ID with prefix '${n}'.`);return t}var m=a;var l=16;function d(r,n=l){let t="abcdefghijklmnopqrstuvwxyz0123456789",i=randomBytes(n),e="";for(let o=0;o<n;o++)e+=t[i[o]%t.length];return `${r?r+"_":""}${e}`}var I=d;async function f(r,n,t){if(!t)throw new Error("");let i=await t,e=s(i[r],n);if(!e)throw new Error("");return e}var p=f;export{s as a,m as b,I as c,p as d};//# sourceMappingURL=chunk-XSJ4OEIH.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-XSJ4OEIH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/guard-id.ts","../src/utility/ensure-id.ts","../src/utility/generate-id.ts","../src/utility/get-id-from-params.ts"],"names":["guardID","id","prefix","value","guard_id_default","ensureID","guardedID","ensure_id_default","ID_LENGTH","generateID","length","chars","bytes","randomBytes","result","i","generate_id_default","getIDFromParams","key","params","awaitedParams","get_id_from_params_default"],"mappings":"iCAAA,SAASA,CAAAA,CACLC,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMC,CAAAA,CAAQ,KAAA,CAAM,OAAA,CAAQF,CAAE,CAAA,CAAIA,CAAAA,CAAG,CAAC,CAAA,CAAIA,EAE1C,OAAKE,CAAAA,EAAO,UAAA,CAAWD,CAAM,CAAA,CAItBC,CAAAA,CAHI,IAIf,KAEOC,CAAAA,CAAQJ,ECXf,SAASK,CAAAA,CAA2BJ,CAAAA,CAA0CC,CAAAA,CAAmB,CAC7F,IAAMI,EAAYF,CAAAA,CAAWH,CAAAA,CAAIC,CAAM,CAAA,CAEvC,GAAI,CAACI,CAAAA,CACD,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyBL,CAAE,CAAA,iCAAA,EAAoCC,CAAM,CAAA,EAAA,CAAI,CAAA,CAG7F,OAAOI,CACX,CAEA,IAAOC,CAAAA,CAAQF,ECVf,IAAMG,CAAAA,CAAY,EAAA,CAElB,SAASC,CAAAA,CAAsCP,CAAAA,CAAwBQ,CAAAA,CAASF,CAAAA,CAAc,CAC1F,IAAMG,CAAAA,CAAQ,sCAAA,CACRC,CAAAA,CAAQC,WAAAA,CAAYH,CAAM,CAAA,CAE5BI,CAAAA,CAAS,EAAA,CAEb,QAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIL,CAAAA,CAAQK,CAAAA,EAAAA,CACxBD,CAAAA,EAAUH,CAAAA,CAAMC,CAAAA,CAAMG,CAAC,CAAA,CAAIJ,CAAAA,CAAM,MAAM,CAAA,CAG3C,OAAO,CAAA,EAAGT,CAAAA,CAASA,CAAAA,CAAS,IAAM,EAAE,CAAA,EAAGY,CAAM,CAAA,CACjD,CAEA,IAAOE,CAAAA,CAAQP,ECff,eAAeQ,CAAAA,CACXC,CAAAA,CACAhB,CAAAA,CACAiB,CAAAA,CACU,CACV,GAAI,CAACA,CAAAA,CACD,MAAM,IAAI,KAAA,CAAM,EAAE,CAAA,CAGtB,IAAMC,CAAAA,CAAgB,MAAMD,CAAAA,CACtBlB,EAAKG,CAAAA,CAAWgB,CAAAA,CAAcF,CAAG,CAAA,CAAGhB,CAAM,CAAA,CAEhD,GAAI,CAACD,EACD,MAAM,IAAI,KAAA,CAAM,EAAE,CAAA,CAGtB,OAAOA,CACX,KAEOoB,CAAAA,CAAQJ","file":"chunk-XSJ4OEIH.js","sourcesContent":["function guardID<T extends string>(\n id: string[] | string | null | undefined,\n prefix: string\n): T | null {\n const value = Array.isArray(id) ? id[0] : id;\n\n if (!value?.startsWith(prefix)) {\n return null;\n }\n\n return value as T;\n}\n\nexport default guardID;\n","import guardID from './guard-id';\n\nfunction ensureID<T extends string>(id: string[] | string | null | undefined, prefix: string): T {\n const guardedID = guardID<T>(id, prefix);\n\n if (!guardedID) {\n throw new Error(`Could not ensure ID. '${id}' is not a valid ID with prefix '${prefix}'.`);\n }\n\n return guardedID;\n}\n\nexport default ensureID;\n","import { randomBytes } from 'crypto';\n\nconst ID_LENGTH = 16;\n\nfunction generateID<T extends string = string>(prefix?: string | null, length = ID_LENGTH): T {\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const bytes = randomBytes(length);\n\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars[bytes[i] % chars.length];\n }\n\n return `${prefix ? prefix + '_' : ''}${result}` as T;\n}\n\nexport default generateID;\n","import guardID from './guard-id';\n\nasync function getIDFromParams<T extends string>(\n key: string,\n prefix: string,\n params?: Promise<Record<string, string>> | null\n): Promise<T> {\n if (!params) {\n throw new Error('');\n }\n\n const awaitedParams = await params;\n const id = guardID<T>(awaitedParams[key], prefix);\n\n if (!id) {\n throw new Error('');\n }\n\n return id;\n}\n\nexport default getIDFromParams;\n"]}
|
package/dist/cli/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
package/dist/cli/index.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {program}from'commander';import {spawn}from'child_process';import {dirname,resolve}from'path';import {fileURLToPath}from'url';var i=dirname(fileURLToPath(import.meta.url)),b=resolve(i,"../../node_modules/.bin/tsx"),f=resolve(i,"./scripts");async function u(n){let a=spawn(b,[`${resolve(f,n)}.ts`],{stdio:"inherit"});return new Promise((s,m)=>{a.on("close",o=>{o===0?s():m(new Error(`Script ${n} exited with code ${o}`));});})}var t=u;program.command("db:generate").action(async()=>await t("db-generate"));program.command("db:reset").action(async()=>await t("db-reset"));program.command("db:seed").action(async()=>await t("db-seed"));program.parse();//# sourceMappingURL=index.js.map
|
|
3
|
-
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/utility/run-script.ts","../../src/cli/index.ts"],"names":["__dirname","dirname","fileURLToPath","binPath","resolve","scriptPath","runScript","file","ls","spawn","reject","code","run_script_default","program"],"mappings":";qIAIA,IAAMA,CAAAA,CAAYC,OAAAA,CAAQC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA,CAElDC,CAAAA,CAAUC,OAAAA,CAAQJ,CAAAA,CAAW,6BAA6B,CAAA,CAC1DK,CAAAA,CAAaD,OAAAA,CAAQJ,CAAAA,CAAW,WAAW,CAAA,CAEjD,eAAeM,CAAAA,CAAUC,CAAAA,CAAc,CACnC,IAAMC,CAAAA,CAAKC,KAAAA,CAAMN,CAAAA,CAAS,CAAC,CAAA,EAAGC,OAAAA,CAAQC,CAAAA,CAAYE,CAAI,CAAC,CAAA,GAAA,CAAK,CAAA,CAAG,CAAE,KAAA,CAAO,SAAU,CAAC,CAAA,CAEnF,OAAO,IAAI,OAAA,CAAc,CAACH,CAAAA,CAASM,CAAAA,GAAW,CAC1CF,CAAAA,CAAG,EAAA,CAAG,OAAA,CAAUG,CAAAA,EAAS,CACjBA,CAAAA,GAAS,CAAA,CACTP,CAAAA,EAAQ,CAERM,CAAAA,CAAO,IAAI,KAAA,CAAM,CAAA,OAAA,EAAUH,CAAI,CAAA,kBAAA,EAAqBI,CAAI,CAAA,CAAE,CAAC,EAEnE,CAAC,EACL,CAAC,CACL,CAEA,IAAOC,CAAAA,CAAQN,CAAAA,CCjBfO,OAAAA,CAAQ,OAAA,CAAQ,aAAa,CAAA,CAAE,MAAA,CAAO,SAAY,MAAMD,CAAAA,CAAU,aAAa,CAAC,CAAA,CAChFC,OAAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,CAAE,MAAA,CAAO,SAAY,MAAMD,CAAAA,CAAU,UAAU,CAAC,CAAA,CAC1EC,OAAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,MAAA,CAAO,SAAY,MAAMD,CAAAA,CAAU,SAAS,CAAC,CAAA,CAExEC,OAAAA,CAAQ,KAAA,EAAM","file":"index.js","sourcesContent":["import { spawn } from 'node:child_process';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nconst binPath = resolve(__dirname, '../../node_modules/.bin/tsx');\nconst scriptPath = resolve(__dirname, './scripts');\n\nasync function runScript(file: string) {\n const ls = spawn(binPath, [`${resolve(scriptPath, file)}.ts`], { stdio: 'inherit' });\n\n return new Promise<void>((resolve, reject) => {\n ls.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Script ${file} exited with code ${code}`));\n }\n });\n });\n}\n\nexport default runScript;\n","#!/usr/bin/env node\n\nimport { program } from 'commander';\n\nimport runScript from './utility/run-script';\n\nprogram.command('db:generate').action(async () => await runScript('db-generate'));\nprogram.command('db:reset').action(async () => await runScript('db-reset'));\nprogram.command('db:seed').action(async () => await runScript('db-seed'));\n\nprogram.parse();\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { dirname, resolve } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
|
|
5
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
|
|
7
|
-
const binPath = resolve(__dirname, '../../../node_modules/.bin/drizzle-kit');
|
|
8
|
-
const configPath = resolve(__dirname, '../static/drizzle.config.js');
|
|
9
|
-
|
|
10
|
-
async function main() {
|
|
11
|
-
const ls = spawn(binPath, ['generate', `--config=${configPath}`], { stdio: 'inherit' });
|
|
12
|
-
|
|
13
|
-
return new Promise<void>((resolve, reject) => {
|
|
14
|
-
ls.on('close', (code) => {
|
|
15
|
-
if (code === 0) {
|
|
16
|
-
resolve();
|
|
17
|
-
} else {
|
|
18
|
-
reject();
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
main()
|
|
25
|
-
.then(() => {
|
|
26
|
-
process.exit(0);
|
|
27
|
-
})
|
|
28
|
-
.catch((err) => {
|
|
29
|
-
console.error(err);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
});
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { readdir, readFile } from 'node:fs/promises';
|
|
2
|
-
import { extname, resolve } from 'node:path';
|
|
3
|
-
|
|
4
|
-
import { Client } from 'pg';
|
|
5
|
-
|
|
6
|
-
import dotenv from 'dotenv';
|
|
7
|
-
dotenv.config({ path: resolve(process.cwd(), '.env'), quiet: true });
|
|
8
|
-
|
|
9
|
-
const migrationPath = resolve(process.cwd(), './database/migrations');
|
|
10
|
-
|
|
11
|
-
async function getMigrationQuery(): Promise<string> {
|
|
12
|
-
const files = (await readdir(migrationPath))
|
|
13
|
-
.filter((file) => extname(file) === '.sql')
|
|
14
|
-
.map((file) => resolve(migrationPath, file));
|
|
15
|
-
|
|
16
|
-
let query = [];
|
|
17
|
-
|
|
18
|
-
for (const file of files) {
|
|
19
|
-
query.push(await readFile(file, 'utf-8'));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return query.join('\n');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async function main() {
|
|
26
|
-
if (!process.env.DATABASE_URL) {
|
|
27
|
-
throw new Error('DATABASE_URL is not defined');
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const environment = process.env.APP_ENV;
|
|
31
|
-
|
|
32
|
-
if (!environment || !['development', 'test'].includes(environment)) {
|
|
33
|
-
throw new Error('APP_ENV is not defined, or does not support migration.');
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const client = new Client(process.env.DATABASE_URL);
|
|
37
|
-
await client.connect();
|
|
38
|
-
|
|
39
|
-
await client.query(
|
|
40
|
-
'SET client_min_messages TO WARNING; DROP SCHEMA IF EXISTS auth CASCADE; DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public;'
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const query = await getMigrationQuery();
|
|
44
|
-
await client.query(query);
|
|
45
|
-
|
|
46
|
-
await client.end();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
main()
|
|
50
|
-
.then(() => {
|
|
51
|
-
process.exit(0);
|
|
52
|
-
})
|
|
53
|
-
.catch((err) => {
|
|
54
|
-
console.error(err);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { readdir } from 'node:fs/promises';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
|
|
4
|
-
import dotenv from 'dotenv';
|
|
5
|
-
dotenv.config({ path: resolve(process.cwd(), '.env'), quiet: true });
|
|
6
|
-
|
|
7
|
-
const seedPath = resolve(process.cwd(), './database/seeds');
|
|
8
|
-
|
|
9
|
-
async function runSeedFile(file: string) {
|
|
10
|
-
const seedModule = await import(file);
|
|
11
|
-
|
|
12
|
-
if (typeof seedModule.default === 'function') {
|
|
13
|
-
await seedModule.default();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async function main() {
|
|
18
|
-
const files = (await readdir(seedPath)).map((file) => resolve(seedPath, file));
|
|
19
|
-
|
|
20
|
-
for (const file of files) {
|
|
21
|
-
await runSeedFile(file);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
main()
|
|
26
|
-
.then(() => {
|
|
27
|
-
process.exit(0);
|
|
28
|
-
})
|
|
29
|
-
.catch((err) => {
|
|
30
|
-
console.error(err);
|
|
31
|
-
process.exit(1);
|
|
32
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import 'dotenv/config';
|
|
2
|
-
import { defineConfig } from 'drizzle-kit';
|
|
3
|
-
|
|
4
|
-
if (!process.env.DATABASE_URL) {
|
|
5
|
-
throw new Error('DATABASE_URL is not defined. Database migration cannot be generated.');
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
dbCredentials: {
|
|
10
|
-
url: process.env.DATABASE_URL,
|
|
11
|
-
},
|
|
12
|
-
dialect: 'postgresql',
|
|
13
|
-
out: './database/migrations',
|
|
14
|
-
schema: [
|
|
15
|
-
import.meta.resolve('@sqrzro/server/auth/schema'),
|
|
16
|
-
'./src/schema/**/*.ts',
|
|
17
|
-
'./src/**/schema.ts',
|
|
18
|
-
],
|
|
19
|
-
});
|