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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "monux-cli",
"version": "2.0.6",
"version": "2.0.7",
"license": "MIT",
"main": "index.js",
"engines": {
Expand Down
5 changes: 2 additions & 3 deletions src/angular/angular.utilities.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Dirent } from 'fs';

import { Provider, EnvironmentProviders } from '@angular/core';
import { NavbarRow, NavRoute } from 'ngx-material-navigation';
Expand All @@ -15,7 +14,7 @@ import { AddNavElementConfig } from './add-nav-element-config.model';
import { getPath, mergeDeep, optionsToCliString } from '../utilities';
import { NavElementTypes } from './nav-element-types.enum';
import { RobotsUtilities } from '../robots';
import { WorkspaceUtilities } from '../workspace';
import { WorkspaceProject, WorkspaceUtilities } from '../workspace';
import { adminsPageTsContent, getAdminModelContent, getAdminServiceContent, baseEntityModelContent, changeSetServiceContent, changeSetsComponentHtmlContent, changeSetsComponentTsContent, lodashUtilitiesContent } from './content';
import { authServiceContent } from './content/auth-service.content';
import { offlineServiceContent } from './content/offline-service.content';
Expand Down Expand Up @@ -619,7 +618,7 @@ export abstract class AngularUtilities {
* @param projectName - The name of the project.
*/
static async addSitemapAndRobots(root: string, projectName: string): Promise<void> {
const app: Dirent = await WorkspaceUtilities.findProjectOrFail(projectName);
const app: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(projectName);
await RobotsUtilities.createRobotsTxtForApp(app, 'dev.docker-compose.yaml');
await FsUtilities.createFile(getPath(root, 'src', SITEMAP_FILE_NAME), [
'<?xml version="1.0" encoding="UTF-8"?>',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { Dirent } from 'fs';

import { AngularUtilities } from '../../../angular';
import { ANGULAR_JSON_FILE_NAME, GIT_IGNORE_FILE_NAME, LIBS_DIRECTORY_NAME, PACKAGE_JSON_FILE_NAME } from '../../../constants';
import { FsUtilities, JsonUtilities, QuestionsFor } from '../../../encapsulation';
Expand All @@ -10,7 +8,7 @@ import { TailwindUtilities } from '../../../tailwind';
import { TsConfig, TsConfigUtilities } from '../../../tsconfig';
import { OmitStrict } from '../../../types';
import { getPath, mergeDeep } from '../../../utilities';
import { WorkspaceConfig, WorkspaceUtilities } from '../../../workspace';
import { WorkspaceConfig, WorkspaceProject, WorkspaceUtilities } from '../../../workspace';
import { AddCommand } from '../models';
import { AddConfiguration } from '../models/add-configuration.model';

Expand Down Expand Up @@ -120,9 +118,8 @@ export class AddAngularLibraryCommand extends AddCommand<AddAngularLibraryConfig
[PACKAGE_JSON_FILE_NAME]
);

const newProject: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const root: string = getPath(newProject.parentPath, newProject.name);
return { root, oldPackageJson };
const newProject: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
return { root: newProject.path, oldPackageJson };
}

private async setupTsConfig(root: string, projectName: string): Promise<void> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { Dirent } from 'fs';

import { AngularUtilities, NavElementTypes } from '../../../angular';
import { ANGULAR_JSON_FILE_NAME, APPS_DIRECTORY_NAME, DOCKER_FILE_NAME, GIT_IGNORE_FILE_NAME } from '../../../constants';
import { DockerUtilities } from '../../../docker';
Expand All @@ -11,7 +9,7 @@ import { TailwindUtilities } from '../../../tailwind';
import { TsConfig, TsConfigUtilities } from '../../../tsconfig';
import { OmitStrict } from '../../../types';
import { getPath, toPascalCase } from '../../../utilities';
import { WorkspaceUtilities } from '../../../workspace';
import { WorkspaceProject, WorkspaceUtilities } from '../../../workspace';
import { AddCommand } from '../models';
import { AddConfiguration } from '../models/add-configuration.model';

Expand Down Expand Up @@ -115,7 +113,7 @@ export class AddAngularWebsiteCommand extends AddCommand<AddAngularWebsiteConfig
await AngularUtilities.setupTracking(config.name);
}
await NpmUtilities.updatePackageJson(config.name, { scripts: { start: `ng serve --port ${config.port}` } });
const app: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const app: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
await EnvUtilities.buildEnvironmentFileForApp(app, true, 'dev.docker-compose.yaml');
}

Expand Down Expand Up @@ -240,15 +238,14 @@ export class AddAngularWebsiteCommand extends AddCommand<AddAngularWebsiteConfig
`new ${config.name}`,
{ '--skip-git': true, '--style': 'css', '--inline-style': true, '--ssr': true }
);
const newProject: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const root: string = getPath(newProject.parentPath, newProject.name);
await FsUtilities.updateFile(getPath(root, 'src', 'app', 'app.component.html'), '', 'replace');
await AngularUtilities.addProvider(root, 'provideHttpClient(withInterceptorsFromDi(), withFetch())', [
const newProject: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
await FsUtilities.updateFile(getPath(newProject.path, 'src', 'app', 'app.component.html'), '', 'replace');
await AngularUtilities.addProvider(newProject.path, 'provideHttpClient(withInterceptorsFromDi(), withFetch())', [
// eslint-disable-next-line sonar/no-duplicate-string
{ defaultImport: false, element: 'provideHttpClient', path: '@angular/common/http' },
{ defaultImport: false, element: 'withInterceptorsFromDi', path: '@angular/common/http' },
{ defaultImport: false, element: 'withFetch', path: '@angular/common/http' }
]);
return root;
return newProject.path;
}
}
15 changes: 6 additions & 9 deletions src/commands/add/add-angular/add-angular.command.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
/* eslint-disable no-console */
import { Dirent } from 'fs';

import { AngularUtilities, NavElementTypes } from '../../../angular';
import { ANGULAR_JSON_FILE_NAME, APP_CONFIG_FILE_NAME, APPS_DIRECTORY_NAME, DOCKER_FILE_NAME, GIT_IGNORE_FILE_NAME } from '../../../constants';
import { DockerUtilities } from '../../../docker';
Expand All @@ -12,7 +10,7 @@ import { TailwindUtilities } from '../../../tailwind';
import { TsConfig, TsConfigUtilities } from '../../../tsconfig';
import { OmitStrict } from '../../../types';
import { getPath, toPascalCase } from '../../../utilities';
import { WorkspaceUtilities } from '../../../workspace';
import { WorkspaceProject, WorkspaceUtilities } from '../../../workspace';
import { AddCommand } from '../models/add-command.class';
import { AddConfiguration } from '../models/add-configuration.model';

Expand Down Expand Up @@ -121,7 +119,7 @@ export class AddAngularCommand extends AddCommand<AddAngularConfiguration> {

await NpmUtilities.updatePackageJson(config.name, { scripts: { start: `ng serve --port ${config.port}` } });

const app: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const app: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
await EnvUtilities.buildEnvironmentFileForApp(app, false, 'dev.docker-compose.yaml');
}

Expand Down Expand Up @@ -191,14 +189,13 @@ export class AddAngularCommand extends AddCommand<AddAngularConfiguration> {
`new ${config.name}`,
{ '--skip-git': true, '--style': 'css', '--inline-style': true, '--ssr': true }
);
const newProject: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const root: string = getPath(newProject.parentPath, newProject.name);
await FsUtilities.updateFile(getPath(root, 'src', 'app', 'app.component.html'), '', 'replace');
await AngularUtilities.addProvider(root, 'provideHttpClient(withInterceptorsFromDi(), withFetch())', [
const newProject: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
await FsUtilities.updateFile(getPath(newProject.path, 'src', 'app', 'app.component.html'), '', 'replace');
await AngularUtilities.addProvider(newProject.path, 'provideHttpClient(withInterceptorsFromDi(), withFetch())', [
{ defaultImport: false, element: 'provideHttpClient', path: '@angular/common/http' },
{ defaultImport: false, element: 'withInterceptorsFromDi', path: '@angular/common/http' }
]);
return root;
return newProject.path;
}

private async cleanUp(root: string): Promise<void> {
Expand Down
23 changes: 10 additions & 13 deletions src/commands/add/add-loopback/add-loopback.command.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { Dirent } from 'fs';

import { APPS_DIRECTORY_NAME, PROD_DOCKER_COMPOSE_FILE_NAME, DOCKER_FILE_NAME, ENVIRONMENT_MODEL_TS_FILE_NAME, GIT_IGNORE_FILE_NAME, TS_CONFIG_FILE_NAME } from '../../../constants';
import { DbUtilities } from '../../../db';
import { DockerUtilities } from '../../../docker';
Expand All @@ -12,7 +10,7 @@ import { TsUtilities } from '../../../ts';
import { TsConfigUtilities } from '../../../tsconfig';
import { OmitStrict } from '../../../types';
import { getPath, toKebabCase, toPascalCase } from '../../../utilities';
import { WorkspaceUtilities } from '../../../workspace';
import { WorkspaceProject, WorkspaceUtilities } from '../../../workspace';
import { AddCommand } from '../models';
import { AddConfiguration } from '../models/add-configuration.model';

Expand Down Expand Up @@ -121,7 +119,7 @@ export class AddLoopbackCommand extends AddCommand<AddLoopbackConfiguration> {
await LoopbackUtilities.setupChangeSets(root, config.name);
await LoopbackUtilities.setupMigrations(root, config.name);

const app: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const app: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
await EnvUtilities.buildEnvironmentFileForApp(app, false, 'dev.docker-compose.yaml');
}

Expand Down Expand Up @@ -242,16 +240,15 @@ export class AddLoopbackCommand extends AddCommand<AddLoopbackConfiguration> {
vscode: false
}
});
const newProject: Dirent = await WorkspaceUtilities.findProjectOrFail(config.name);
const root: string = getPath(newProject.parentPath, newProject.name);
const newProject: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(config.name);
await Promise.all([
FsUtilities.rm(getPath(root, 'src', '__tests__')),
FsUtilities.rm(getPath(root, GIT_IGNORE_FILE_NAME)),
FsUtilities.rm(getPath(root, 'DEVELOPING.md')),
FsUtilities.rm(getPath(root, 'src', 'controllers', 'ping.controller.ts')),
FsUtilities.updateFile(getPath(root, 'src', 'controllers', 'index.ts'), '', 'replace')
FsUtilities.rm(getPath(newProject.path, 'src', '__tests__')),
FsUtilities.rm(getPath(newProject.path, GIT_IGNORE_FILE_NAME)),
FsUtilities.rm(getPath(newProject.path, 'DEVELOPING.md')),
FsUtilities.rm(getPath(newProject.path, 'src', 'controllers', 'ping.controller.ts')),
FsUtilities.updateFile(getPath(newProject.path, 'src', 'controllers', 'index.ts'), '', 'replace')
]);
const indexTs: string = getPath(root, 'src', 'index.ts');
const indexTs: string = getPath(newProject.path, 'src', 'index.ts');
await FsUtilities.replaceInFile(
indexTs,
'async function main(options: ApplicationConfig = {})',
Expand All @@ -277,7 +274,7 @@ export class AddLoopbackCommand extends AddCommand<AddLoopbackConfiguration> {
'|| \'127.0.0.1\'',
'?? \'127.0.0.1\''
);
return root;
return newProject.path;
}

private async setupTsConfig(projectName: string): Promise<void> {
Expand Down
7 changes: 3 additions & 4 deletions src/commands/add/add-ts-library/add-ts-library.command.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Dirent } from 'fs';

import { GIT_IGNORE_FILE_NAME, LIBS_DIRECTORY_NAME, TS_CONFIG_FILE_NAME } from '../../../constants';
import { CPUtilities, FsUtilities, QuestionsFor } from '../../../encapsulation';
Expand All @@ -7,7 +6,7 @@ import { NpmPackage, NpmUtilities } from '../../../npm';
import { TsConfigUtilities } from '../../../tsconfig';
import { OmitStrict } from '../../../types';
import { getPath } from '../../../utilities';
import { WorkspaceConfig, WorkspaceUtilities } from '../../../workspace';
import { WorkspaceConfig, WorkspaceProject, WorkspaceUtilities } from '../../../workspace';
import { AddCommand } from '../models/add-command.class';
import { AddConfiguration } from '../models/add-configuration.model';

Expand Down Expand Up @@ -55,12 +54,12 @@ export class AddTsLibraryCommand extends AddCommand<TsLibraryConfiguration> {

await FsUtilities.createFile(getPath(root, 'src', 'index.ts'), '');
await NpmUtilities.install(config.name, [NpmPackage.VITE_PLUGIN_DTS], true);
NpmUtilities.run(config.name, 'build');
await NpmUtilities.run(config.name, 'build');
await this.installInProjects(config);
}

private async installInProjects(config: TsLibraryConfiguration): Promise<void> {
const projects: Dirent[] = await WorkspaceUtilities.getProjects('apps');
const projects: WorkspaceProject[] = await WorkspaceUtilities.getProjects('apps');
const npmPackage: string = `${config.scope}/${config.name}`;
await Promise.all(projects.map((p) => NpmUtilities.install(p.name, [npmPackage as NpmPackage])));
}
Expand Down
12 changes: 5 additions & 7 deletions src/commands/generate-page/generate-page.command.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { Dirent } from 'fs';

import { AddNavElementConfig, AngularUtilities, NavElementTypes } from '../../angular';
import { ANGULAR_ROUTES_FILE_NAME } from '../../constants';
import { FsUtilities, InquirerUtilities, QuestionsFor } from '../../encapsulation';
import { DefaultEnvKeys, EnvUtilities } from '../../env';
import { getPath, toKebabCase, toPascalCase } from '../../utilities';
import { WorkspaceUtilities } from '../../workspace';
import { WorkspaceProject, WorkspaceUtilities } from '../../workspace';

/**
* Options for generating an angular page.
Expand Down Expand Up @@ -35,7 +33,7 @@ const LOAD_COMPONENT_PLACEHOLDER: string = 'LOAD_COMPONENT_PLACEHOLDER';
* Runs the generate page cli command.
*/
export async function runGeneratePage(): Promise<void> {
const apps: Dirent[] = await WorkspaceUtilities.getProjects('apps');
const apps: WorkspaceProject[] = await WorkspaceUtilities.getProjects('apps');
const questions: QuestionsFor<GeneratePageOptions> = {
projectName: {
message: 'Project',
Expand All @@ -60,7 +58,7 @@ export async function runGeneratePage(): Promise<void> {
};

const options: GeneratePageOptions = await InquirerUtilities.prompt(questions);
const projectRoot: Dirent = await WorkspaceUtilities.findProjectOrFail(options.projectName);
const projectRoot: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(options.projectName);
const domain: string = await EnvUtilities.getEnvVariable(
DefaultEnvKeys.domain(options.projectName),
'dev.docker-compose.yaml'
Expand All @@ -81,10 +79,10 @@ export async function runGeneratePage(): Promise<void> {
rowIndex: 0
};

await AngularUtilities.generatePage(getPath(projectRoot.parentPath, projectRoot.name), options.pageName, navElement, domain);
await AngularUtilities.generatePage(projectRoot.path, options.pageName, navElement, domain);
const pageName: string = toKebabCase(options.pageName);
await FsUtilities.replaceInFile(
getPath(projectRoot.parentPath, projectRoot.name, 'src', 'app', ANGULAR_ROUTES_FILE_NAME),
getPath(projectRoot.path, 'src', 'app', ANGULAR_ROUTES_FILE_NAME),
`\'${LOAD_COMPONENT_PLACEHOLDER}\'`,
`() => import(\'./pages/${pageName}/${pageName}.component\').then(m => m.${toPascalCase(options.pageName)}Component)`
);
Expand Down
8 changes: 5 additions & 3 deletions src/commands/run/run.command.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
import { CPUtilities } from '../../encapsulation';
import { NativeNpmCommands, NpmUtilities } from '../../npm';
import { WorkspaceProject, WorkspaceUtilities } from '../../workspace';

/**
* Runs the run cli command.
* @param args - The passed cli commands.
*/
export function runRun(...args: string[]): void {
export async function runRun(...args: string[]): Promise<void> {
const projectName: string = args[0];
const npmScript: string = args[1];
const nativeCommand: boolean = Object.values(NativeNpmCommands).includes(npmScript as NativeNpmCommands);

const commands: string = args.slice(1).join(' ');
if (!nativeCommand) {
NpmUtilities.run(projectName, commands);
await NpmUtilities.run(projectName, commands);
}

CPUtilities.execSync(`npm ${commands} --workspace=${projectName}`);
const project: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(projectName);
CPUtilities.execSync(`npm ${commands} --workspace=${project.npmWorkspaceString}`);
}
7 changes: 3 additions & 4 deletions src/commands/validate-input.function.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Dirent } from 'fs';

import { FsUtilities } from '../encapsulation';
import { WorkspaceConfig, WorkspaceUtilities } from '../workspace';
import { WorkspaceConfig, WorkspaceProject, WorkspaceUtilities } from '../workspace';
import { Command } from './command.enum';
import { exitWithError } from './exit-with-error.function';
import { PACKAGE_JSON_FILE_NAME } from '../constants';
Expand Down Expand Up @@ -79,10 +79,9 @@ export async function validateInput(args: string[]): Promise<void> {
async function validateRunInput(...args: string[]): Promise<void> {
const project: string = args[0];
await validateInsideWorkspace();
const foundProject: Dirent = await WorkspaceUtilities.findProjectOrFail(project);
const foundProject: WorkspaceProject = await WorkspaceUtilities.findProjectOrFail(project);

const foundProjectPath: string = getPath(foundProject.parentPath, foundProject.name);
const packageJson: Dirent | undefined = (await FsUtilities.readdir(foundProjectPath)).find(f => f.name === PACKAGE_JSON_FILE_NAME);
const packageJson: Dirent | undefined = (await FsUtilities.readdir(foundProject.path)).find(f => f.name === PACKAGE_JSON_FILE_NAME);
if (!packageJson) {
exitWithError(`The provided project "${project}" does not contain a ${PACKAGE_JSON_FILE_NAME} file`);
return;
Expand Down
Loading