Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,29 +33,30 @@ export type Configuration = {
projectDirectory: WorkingDirectory,
fullValidator: Validator<JsonProjectConfiguration>,
partialValidator: Validator<JsonPartialProjectConfiguration>,
configurationFile: string,
};

export class JsonConfigurationFileManager implements ConfigurationManager {
private static readonly CONFIGURATION_SCHEMA = 'https://schema.croct.com/json/v1/project.json';

private readonly fileSystem: FileSystem;

private readonly projectDirectory: WorkingDirectory;

private readonly fullValidator: Validator<ProjectConfiguration>;

private readonly partialValidator: Validator<PartialProjectConfiguration>;

public constructor({fileSystem, projectDirectory, fullValidator, partialValidator}: Configuration) {
this.fileSystem = fileSystem;
this.projectDirectory = projectDirectory;
this.fullValidator = fullValidator;
this.partialValidator = partialValidator;
private readonly configurationFile: string;

public constructor(configuration: Configuration) {
this.fileSystem = configuration.fileSystem;
this.fullValidator = configuration.fullValidator;
this.partialValidator = configuration.partialValidator;
this.configurationFile = configuration.configurationFile;
}

public async isInitialized(state: InitializationState = InitializationState.ANY): Promise<boolean> {
if (state === InitializationState.ANY) {
return this.fileSystem.exists(this.getConfigurationFilePath());
return this.fileSystem.exists(this.configurationFile);
}

const validator = state === InitializationState.FULL
Expand Down Expand Up @@ -160,7 +161,7 @@ export class JsonConfigurationFileManager implements ConfigurationManager {
validator: Validator<T>,
): Promise<LoadedFile<Omit<T, '$schema'>>> {
const file: LoadedFile<T> = {
path: this.getConfigurationFilePath(),
path: this.configurationFile,
source: null,
configuration: null,
};
Expand All @@ -185,10 +186,6 @@ export class JsonConfigurationFileManager implements ConfigurationManager {
return file;
}

private getConfigurationFilePath(): string {
return this.fileSystem.joinPaths(this.projectDirectory.get(), 'croct.json');
}

private async validateConfiguration<T extends JsonPartialProjectConfiguration>(
validator: Validator<T>,
value: JsonValue,
Expand Down
12 changes: 11 additions & 1 deletion src/infrastructure/application/cli/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ export type Configuration = {
cliTokenIssuer: string,
apiKeyTokenDuration: number,
adminTokenDuration: number,
configurationFile: string,
directories: {
current?: string,
config: string,
Expand Down Expand Up @@ -451,6 +452,7 @@ export class Cli {
adminTokenParameter: configuration.adminTokenParameter ?? 'accessToken',
adminGraphqlEndpoint: configuration?.adminGraphqlEndpoint
?? new URL('https://app.croct.com/graphql'),
configurationFile: configuration.configurationFile ?? 'croct.json',
directories: {
current: configuration.directories?.current ?? process.getCurrentDirectory(),
config: configuration.directories?.config ?? appPaths.config(),
Expand Down Expand Up @@ -2310,11 +2312,19 @@ export class Cli {

private getConfigurationManager(): ConfigurationManager {
return this.share(this.getConfigurationManager, () => {
const fileSystem = this.getFileSystem();

const manager = new JsonConfigurationFileManager({
fileSystem: this.getFileSystem(),
fileSystem: fileSystem,
fullValidator: new FullCroctConfigurationValidator(),
partialValidator: new PartialCroctConfigurationValidator(),
projectDirectory: this.workingDirectory,
configurationFile: fileSystem.isAbsolutePath(this.configuration.configurationFile)
? this.configuration.configurationFile
: fileSystem.joinPaths(
this.workingDirectory.get(),
this.configuration.configurationFile,
),
});

return new IndexedConfigurationManager({
Expand Down
2 changes: 2 additions & 0 deletions src/infrastructure/application/cli/program.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ function createProgram(config: Configuration): typeof program {
return url;
})
.option('--no-interaction', 'Run the CLI in non-interactive mode.')
.option('--config <path>', 'Path to the configuration file.')
.addOption(
new Option('--stateless', 'Run the CLI without saving any state locally.')
.env('CROCT_STATELESS')
Expand Down Expand Up @@ -455,6 +456,7 @@ export async function run(args: string[] = process.argv, welcome = true): Promis
templateRegistryUrl: options.registry === undefined
? undefined
: new URL(options.registry),
configurationFile: options.config,
});

const template = getTemplate(invocation.args);
Expand Down
Loading