mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 04:27:21 +00:00
fix: cli: user command now uses the same app env setup as run
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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 });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user