diff --git a/.env.development b/.env.development index 6fe15d0d..e69de29b 100644 --- a/.env.development +++ b/.env.development @@ -1 +0,0 @@ -CLI_PROJECT_NAME=juno-dev \ No newline at end of file diff --git a/.env.production b/.env.production index 43b605ea..e69de29b 100644 --- a/.env.production +++ b/.env.production @@ -1 +0,0 @@ -CLI_PROJECT_NAME=juno \ No newline at end of file diff --git a/src/cli/env.loader.ts b/src/cli/env.loader.ts index e093c3cd..eb40017e 100644 --- a/src/cli/env.loader.ts +++ b/src/cli/env.loader.ts @@ -1,5 +1,6 @@ +import {notEmptyString} from '@dfinity/utils'; import {nextArg} from '@junobuild/cli-tools'; -import {JunoCliEnv, JunoConsole} from '../types/cli.env'; +import {type JunoCliConfig, type JunoCliEnv, type JunoConsole} from '../types/cli.env'; export const loadEnv = (): JunoCliEnv => { const [_, ...args] = process.argv.slice(2); @@ -13,7 +14,8 @@ export const loadEnv = (): JunoCliEnv => { return { mode: mode ?? 'production', containerUrl: envContainerUrl, - console: loadEnvConsole({args, mode}) + console: loadEnvConsole({args, mode}), + config: loadEnvConfig({mode}) }; }; @@ -31,3 +33,14 @@ const loadEnvConsole = ({args, mode}: {args?: string[]; mode: string | undefined } }; }; + +const loadEnvConfig = ({mode}: {mode: string | undefined}): JunoCliConfig => { + // Historically we used "juno" - without environment reference - for production. + // That is why we keep this approach for backwards compatibility. + const projectName = notEmptyString(mode) && mode !== 'production' ? `juno-${mode}` : 'juno'; + + return { + projectName, + projectSettingsName: `${projectName}-cli-settings` + }; +}; diff --git a/src/configs/cli.settings.config.ts b/src/configs/cli.settings.config.ts index bcd91db5..7f869633 100644 --- a/src/configs/cli.settings.config.ts +++ b/src/configs/cli.settings.config.ts @@ -1,5 +1,5 @@ import Conf, {type Schema} from 'conf'; -import {CLI_SETTINGS_NAME} from '../constants/constants'; +import {ENV} from '../env'; export interface CliSettingsConfig { encryption: boolean; @@ -12,7 +12,7 @@ const schema: Schema = { } as const; export const getSettingsConfig = (): Conf => - new Conf({projectName: CLI_SETTINGS_NAME, schema}); + new Conf({projectName: ENV.config.projectSettingsName, schema}); export const saveEncryption = (encryption: boolean) => { getSettingsConfig().set('encryption', encryption); diff --git a/src/constants/config.constants.ts b/src/constants/config.constants.ts index b8f88106..3316a876 100644 --- a/src/constants/config.constants.ts +++ b/src/constants/config.constants.ts @@ -1,7 +1,7 @@ import type {Schema} from 'conf'; -import {CLI_PROJECT_NAME} from './constants'; -import {CliConfig} from '../types/cli.config'; -import {CliDefaultOptions, CliOptions} from '../types/cli.options'; +import {ENV} from '../env'; +import {type CliConfig} from '../types/cli.config'; +import {type CliDefaultOptions, type CliOptions} from '../types/cli.options'; const schema: Schema = { token: { @@ -22,6 +22,6 @@ const DEFAULT_CONF_OPTIONS: CliDefaultOptions = { export const CONFIG_OPTIONS: CliOptions = { ...DEFAULT_CONF_OPTIONS, - projectName: CLI_PROJECT_NAME, + projectName: ENV.config.projectName, schema }; diff --git a/src/constants/constants.ts b/src/constants/constants.ts index b9808e1e..c1586cc6 100644 --- a/src/constants/constants.ts +++ b/src/constants/constants.ts @@ -1,5 +1,3 @@ -export const CLI_PROJECT_NAME = process.env.CLI_PROJECT_NAME ?? 'juno'; -export const CLI_SETTINGS_NAME = `${CLI_PROJECT_NAME}-cli-settings`; export const REDIRECT_URL = 'http://localhost:{port}'; export const JUNO_CONFIG_FILENAME = 'juno.config'; // .json | .js | .mjs | .cjs | .ts export const JUNO_DEV_CONFIG_FILENAME = 'juno.dev.config'; // .json | .js | .mjs | .cjs | .ts diff --git a/src/types/cli.env.ts b/src/types/cli.env.ts index 4ff9f57b..260a3500 100644 --- a/src/types/cli.env.ts +++ b/src/types/cli.env.ts @@ -3,14 +3,22 @@ import type {JunoConfigEnv} from '@junobuild/config'; export type JunoCliEnv = JunoConfigEnv & { containerUrl: string | undefined; console: JunoConsole; + config: JunoCliConfig; }; -interface JunoConsole { +export interface JunoConsole { urls: JunoConsoleUrls; } -interface JunoConsoleUrls { +export interface JunoConsoleUrls { root: string; satellite: string; auth: string; } + +export interface JunoCliConfig { + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents + projectName: string | 'juno'; + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents + projectSettingsName: string | 'juno-cli-settings'; +} diff --git a/src/types/cli.options.ts b/src/types/cli.options.ts index 459b941c..cc856c84 100644 --- a/src/types/cli.options.ts +++ b/src/types/cli.options.ts @@ -1,10 +1,13 @@ import type {Options as ConfOptions} from 'conf'; -import {CliConfig} from './cli.config'; +import {type CliConfig} from './cli.config'; type CliConfigRequiredOptions = Required>; -export type CliDefaultOptions = Pick; +export type CliDefaultOptions = Pick< + CliConfigRequiredOptions, + 'fileExtension' | 'projectSuffix' | 'configName' +>; // TODO: We do not inherit the type of projectName from RequiredOptions because somehow TypeScript does not checks it's a defined string once made required export type CliOptions = {projectName: string} & Pick & - CliDefaultOptions; \ No newline at end of file + CliDefaultOptions;