dromanis.trackgenie.server.common
v3.4.4
Published
Common utilities and database handling for NodeJS API (server-side) projects.
Maintainers
Readme
@dromanis/trackgenie-server-common
Common utilities and database handling for NodeJS API (server-side) projects. Written in TypeScript and published as a library with dual ESM/CJS builds and type declarations.
Install
npm i @dromanis/trackgenie-server-common
# If you plan to use the Postgres adapter:
npm i pgRequires Node.js 18+.
Usage
Env helpers
import { loadEnv, requireEnv, readEnvNumber, readEnvBoolean } from "@dromanis/trackgenie-server-common";
await loadEnv(); // optional: uses dotenv if installed
const nodeEnv = requireEnv("NODE_ENV");
const port = readEnvNumber("PORT", 3000) ?? 3000;
const debug = readEnvBoolean("DEBUG", false) ?? false;Logger
import { logger } from "@dromanis/trackgenie-server-common";
logger.info("Server starting", { port: 3000 });
logger.warn("Cache miss", { key: "users:1" });
logger.error("Unhandled error", { err });
// Set LOG_LEVEL=debug to enable debug logs
logger.debug("Detailed info for troubleshooting");Errors
import { AppError } from "@dromanis/trackgenie-server-common";
throw new AppError("User not found", "NOT_FOUND", { userId: "123" });Time helpers
import { sleep, nowUtc, toIso, since } from "@dromanis/trackgenie-server-common";
await sleep(100);
console.log(toIso(nowUtc()));
console.log(`Took ${since(performance.now())}ms`);Database abstraction (Postgres)
import { PostgresClient } from "@dromanis/trackgenie-server-common";
const db = new PostgresClient({
connectionString: process.env.DATABASE_URL
});
await db.connect();
const { rows } = await db.query<{ id: number; email: string }>(
"select id, email from users where id = $1",
[123]
);
const user = await db.transaction(async (tx) => {
await tx.query("update counters set value = value + 1 where id = $1", [1]);
const res = await tx.query<{ id: number; email: string }>("select id, email from users where id = $1", [123]);
return res.rows[0];
});
await db.close();Build
npm run buildOutputs ESM and CJS to dist/ with type declarations.
Publishing
This package is configured for public publishing to the npm registry.
npm publish --access publicEnsure you have built artifacts in dist/ before publishing (the prepublishOnly script runs build automatically).
