fix: cli: user command now uses the same app env setup as run

This commit is contained in:
dswbx
2025-04-08 11:22:10 +02:00
parent 7e1757b7f4
commit a80a731498
4 changed files with 36 additions and 18 deletions

View File

@@ -38,6 +38,7 @@
"test:vitest:watch": "vitest", "test:vitest:watch": "vitest",
"test:vitest:coverage": "vitest run --coverage", "test:vitest:coverage": "vitest run --coverage",
"test:e2e": "playwright test", "test:e2e": "playwright test",
"test:e2e:adapters": "bun run e2e/adapters.ts",
"test:e2e:ui": "playwright test --ui", "test:e2e:ui": "playwright test --ui",
"test:e2e:debug": "playwright test --debug", "test:e2e:debug": "playwright test --debug",
"test:e2e:report": "playwright show-report" "test:e2e:report": "playwright show-report"

View File

@@ -17,12 +17,13 @@ import {
startServer, startServer,
} from "./platform"; } from "./platform";
import { makeConfig } from "adapter"; import { makeConfig } from "adapter";
import { isBun as $isBun } from "cli/utils/sys";
const env_files = [".env", ".dev.vars"]; const env_files = [".env", ".dev.vars"];
dotenv.config({ dotenv.config({
path: env_files.map((file) => path.resolve(process.cwd(), file)), path: env_files.map((file) => path.resolve(process.cwd(), file)),
}); });
const isBun = typeof Bun !== "undefined"; const isBun = $isBun();
export const run: CliCommand = (program) => { export const run: CliCommand = (program) => {
program program
@@ -98,7 +99,7 @@ export async function makeConfigApp(_config: CliBkndConfig, platform?: Platform)
}); });
} }
async function action(options: { type RunOptions = {
port: number; port: number;
memory?: boolean; memory?: boolean;
config?: string; config?: string;
@@ -106,8 +107,9 @@ async function action(options: {
dbToken?: string; dbToken?: string;
server: Platform; server: Platform;
open?: boolean; open?: boolean;
}) { };
colorizeConsole(console);
export async function makeAppFromEnv(options: Partial<RunOptions> = {}) {
const configFilePath = await getConfigPath(options.config); const configFilePath = await getConfigPath(options.config);
let app: App | undefined = undefined; let app: App | undefined = undefined;
@@ -147,12 +149,19 @@ async function action(options: {
// if nothing helps, create a file based app // if nothing helps, create a file based app
if (!app) { if (!app) {
const connection = { url: "file:data.db" } as Config; const connection = { url: "file:data.db" } as Config;
console.info("Using connection", c.cyan(connection.url)); console.info("Using fallback connection", c.cyan(connection.url));
app = await makeApp({ app = await makeApp({
connection, connection,
server: { platform: options.server }, server: { platform: options.server },
}); });
} }
return app;
}
async function action(options: RunOptions) {
colorizeConsole(console);
const app = await makeAppFromEnv(options);
await startServer(options.server, app, { port: options.port, open: options.open }); await startServer(options.server, app, { port: options.port, open: options.open });
} }

View File

@@ -1,17 +1,17 @@
import { import {
isCancel as $isCancel,
log as $log,
password as $password, password as $password,
text as $text, text as $text,
log as $log,
isCancel as $isCancel,
} from "@clack/prompts"; } from "@clack/prompts";
import type { App } from "App"; import type { App } from "App";
import type { PasswordStrategy } from "auth/authenticate/strategies"; import type { PasswordStrategy } from "auth/authenticate/strategies";
import { makeConfigApp } from "cli/commands/run"; import { makeAppFromEnv } from "cli/commands/run";
import { getConfigPath } from "cli/commands/run/platform"; import type { CliCommand } from "cli/types";
import type { CliBkndConfig, CliCommand } from "cli/types";
import { Argument } from "commander"; import { Argument } from "commander";
import { $console } from "core"; import { $console } from "core";
import c from "picocolors"; import c from "picocolors";
import { isBun } from "cli/utils/sys";
export const user: CliCommand = (program) => { export const user: CliCommand = (program) => {
program program
@@ -24,14 +24,9 @@ export const user: CliCommand = (program) => {
}; };
async function action(action: "create" | "update" | "token", options: any) { async function action(action: "create" | "update" | "token", options: any) {
const configFilePath = await getConfigPath(); const app = await makeAppFromEnv({
if (!configFilePath) { server: "node",
console.error("config file not found"); });
return;
}
const config = (await import(configFilePath).then((m) => m.default)) as CliBkndConfig;
const app = await makeConfigApp(config, options.server);
switch (action) { switch (action) {
case "create": case "create":
@@ -147,6 +142,11 @@ async function update(app: App, options: any) {
} }
async function token(app: App, options: any) { async function token(app: App, options: any) {
if (isBun()) {
$log.error("Please use node to generate tokens");
process.exit(1);
}
const config = app.module.auth.toJSON(true); const config = app.module.auth.toJSON(true);
const users_entity = config.entity_name as "users"; const users_entity = config.entity_name as "users";
const em = app.modules.ctx().em; const em = app.modules.ctx().em;

View File

@@ -3,6 +3,14 @@ import { readFile } from "node:fs/promises";
import path from "node:path"; import path from "node:path";
import url from "node:url"; import url from "node:url";
export function isBun(): boolean {
try {
return typeof Bun !== "undefined";
} catch (e) {
return false;
}
}
export function getRootPath() { export function getRootPath() {
const _path = path.dirname(url.fileURLToPath(import.meta.url)); const _path = path.dirname(url.fileURLToPath(import.meta.url));
// because of "src", local needs one more level up // because of "src", local needs one more level up