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
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,6 @@ They will give you a nice overview of all monorepos on your machine and their re
## Angular app
## Angular website
## Angular library
WIP
## LoopBack
## Typescript library
## Wordpress
Expand Down
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.2.0",
"version": "2.2.1",
"license": "MIT",
"main": "index.js",
"engines": {
Expand Down
60 changes: 30 additions & 30 deletions src/__testing__/mock/constants.ts
Original file line number Diff line number Diff line change
@@ -1,61 +1,61 @@
import { ANGULAR_JSON_FILE_NAME, ANGULAR_ROUTES_FILE_NAME, APP_CONFIG_FILE_NAME, APPS_DIRECTORY_NAME, DEV_DOCKER_COMPOSE_FILE_NAME, PROD_DOCKER_COMPOSE_FILE_NAME, ENV_FILE_NAME, ENVIRONMENT_MODEL_TS_FILE_NAME, ENVIRONMENT_TS_FILE_NAME, ESLINT_CONFIG_FILE_NAME, GLOBAL_ENVIRONMENT_MODEL_FILE_NAME, LIBS_DIRECTORY_NAME, PACKAGE_JSON_FILE_NAME, LOCAL_DOCKER_COMPOSE_FILE_NAME } from '../../constants';
import { OmitStrict } from '../../types';
import { getPath } from '../../utilities';
import { getPath, Path } from '../../utilities';

// eslint-disable-next-line jsdoc/require-jsdoc
export type MockConstants = {
// eslint-disable-next-line jsdoc/require-jsdoc
readonly PROJECT_DIR: string,
readonly PROJECT_DIR: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly APPS_DIR: string,
readonly APPS_DIR: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly LIBS_DIR: string,
readonly LIBS_DIR: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly DOCKER_COMPOSE_YAML: string,
readonly DOCKER_COMPOSE_YAML: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly DEV_DOCKER_COMPOSE_YAML: string,
readonly DEV_DOCKER_COMPOSE_YAML: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly LOCAL_DOCKER_COMPOSE_YAML: string,
readonly LOCAL_DOCKER_COMPOSE_YAML: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_ESLINT_CONFIG_MJS: string,
readonly ANGULAR_ESLINT_CONFIG_MJS: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_PACKAGE_JSON: string,
readonly ANGULAR_PACKAGE_JSON: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_APP_NAME: string,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_APP_DIR: string,
readonly ANGULAR_APP_DIR: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_APP_COMPONENT_TS: string,
readonly ANGULAR_APP_COMPONENT_TS: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_APP_COMPONENT_HTML: string,
readonly ANGULAR_APP_COMPONENT_HTML: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_APP_ROUTES_TS: string,
readonly ANGULAR_APP_ROUTES_TS: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_ROUTES_TS: string,
readonly ANGULAR_ROUTES_TS: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_APP_CONFIG_TS: string,
readonly ANGULAR_APP_CONFIG_TS: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_JSON: string,
readonly ANGULAR_JSON: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_ENVIRONMENT_MODEL: string,
readonly ANGULAR_ENVIRONMENT_MODEL: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ANGULAR_ENVIRONMENT: string,
readonly ANGULAR_ENVIRONMENT: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly TS_LIBRARY_DIR: string,
readonly TS_LIBRARY_DIR: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly TS_LIBRARY_SCOPE: string,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly TS_LIBRARY_PACKAGE_JSON: string,
readonly TS_LIBRARY_PACKAGE_JSON: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ROOT_PACKAGE_JSON: string,
readonly ROOT_PACKAGE_JSON: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly TS_LIBRARY_NAME: string,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly ENV: string,
readonly ENV: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly GLOBAL_ENV_MODEL: string,
readonly GLOBAL_ENV_MODEL: Path,
// eslint-disable-next-line jsdoc/require-jsdoc
readonly GITHUB_WORKFLOW_DIR: string
readonly GITHUB_WORKFLOW_DIR: Path
};

// eslint-disable-next-line jsdoc/require-jsdoc
Expand All @@ -79,14 +79,14 @@ export type DirMockConstants = OmitStrict<
* @returns Constant values.
*/
export function getMockConstants(projectName: string): MockConstants {
const TMP_DIR: string = getPath(__dirname, '..', 'tmp');
const PROJECT_DIR: string = getPath(TMP_DIR, projectName);
const APPS_DIR: string = getPath(PROJECT_DIR, APPS_DIRECTORY_NAME);
const LIBS_DIR: string = getPath(PROJECT_DIR, LIBS_DIRECTORY_NAME);
const TMP_DIR: Path = getPath(__dirname, '..', 'tmp');
const PROJECT_DIR: Path = getPath(TMP_DIR, projectName);
const APPS_DIR: Path = getPath(PROJECT_DIR, APPS_DIRECTORY_NAME);
const LIBS_DIR: Path = getPath(PROJECT_DIR, LIBS_DIRECTORY_NAME);
const ANGULAR_APP_NAME: string = 'angular';
const ANGULAR_APP_DIR: string = getPath(APPS_DIR, ANGULAR_APP_NAME);
const ANGULAR_APP_DIR: Path = getPath(APPS_DIR, ANGULAR_APP_NAME);
const TS_LIBRARY_NAME: string = 'library';
const TS_LIBRARY_DIR: string = getPath(LIBS_DIR, TS_LIBRARY_NAME);
const TS_LIBRARY_DIR: Path = getPath(LIBS_DIR, TS_LIBRARY_NAME);

const mockConstants: MockConstants = {
PROJECT_DIR: PROJECT_DIR,
Expand Down
9 changes: 5 additions & 4 deletions src/__testing__/mock/file-mock.utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { MockConstants, FileMockConstants, DirMockConstants } from './constants'
import { AngularJson } from '../../angular';
import { CPUtilities, FsUtilities, JsonUtilities } from '../../encapsulation';
import { EnvUtilities } from '../../env';
import { getPath } from '../../utilities';
import { WorkspaceUtilities } from '../../workspace';

export abstract class FileMockUtilities {
Expand Down Expand Up @@ -35,7 +36,7 @@ export abstract class FileMockUtilities {
filesToMock: (keyof FileMockConstants)[] = [],
contentOverrides: Partial<Record<keyof FileMockConstants, string | string[]>> = {}
): Promise<void> {
await FsUtilities.rm(mockConstants.PROJECT_DIR);
await FsUtilities.rm(getPath(mockConstants.PROJECT_DIR));
CPUtilities['cwd'] = mockConstants.PROJECT_DIR;
await this.mockFolders(mockConstants);
await this.mockFiles(filesToMock, contentOverrides, mockConstants);
Expand All @@ -52,7 +53,7 @@ export abstract class FileMockUtilities {
GITHUB_WORKFLOW_DIR: mockConstants.GITHUB_WORKFLOW_DIR
};
for (const entry of Object.values(dirMockConstants)) {
await FsUtilities.mkdir(entry, true, false);
await FsUtilities.mkdir(getPath(entry), true, false);
}
}

Expand All @@ -77,14 +78,14 @@ export abstract class FileMockUtilities {
content: string | string[] | undefined
): Promise<void> {
if (hasContentOverride) {
await FsUtilities.createFile(mockConstants[entry], content ?? '', true, false);
await FsUtilities.createFile(getPath(mockConstants[entry]), content ?? '', true, false);
return;
}
await this.mockMethodForFile[entry](mockConstants, entry);
}

private static async createEmptyFile(mockConstants: MockConstants, entry: keyof MockConstants): Promise<void> {
await FsUtilities.createFile(mockConstants[entry], '', true, false);
await FsUtilities.createFile(getPath(mockConstants[entry]), '', true, false);
}

private static async createAngularJson(mockConstants: MockConstants): Promise<void> {
Expand Down
46 changes: 23 additions & 23 deletions src/angular/angular.utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { ANGULAR_APP_COMPONENT_FILE_NAME, ANGULAR_JSON_FILE_NAME, ANGULAR_ROUTES
import { DefaultEnvKeys, EnvUtilities } from '../env';
import { DeepPartial } from '../types';
import { AddNavElementConfig } from './add-nav-element-config.model';
import { getPath, mergeDeep, optionsToCliString } from '../utilities';
import { getPath, mergeDeep, optionsToCliString, Path } from '../utilities';
import { NavElementTypes } from './nav-element-types.enum';
import { RobotsUtilities } from '../robots';
import { WorkspaceProject, WorkspaceUtilities } from '../workspace';
Expand Down Expand Up @@ -132,7 +132,7 @@ export abstract class AngularUtilities {
'}'
]
);
const appComponentPath: string = getPath(root, 'src', 'app', ANGULAR_APP_COMPONENT_FILE_NAME);
const appComponentPath: Path = getPath(root, 'src', 'app', ANGULAR_APP_COMPONENT_FILE_NAME);
await TsUtilities.addImportStatements(
appComponentPath,
[{ defaultImport: false, element: 'LoggerService', path: './services/logger.service' }]
Expand Down Expand Up @@ -187,7 +187,7 @@ export abstract class AngularUtilities {
false,
getPath('.')
);
const authServicePath: string = getPath(projectRoot, 'src', 'app', 'services', 'auth.service.ts');
const authServicePath: Path = getPath(projectRoot, 'src', 'app', 'services', 'auth.service.ts');
await FsUtilities.createFile(authServicePath, authServiceContent);
await this.addProvider(
projectRoot,
Expand All @@ -205,7 +205,7 @@ export abstract class AngularUtilities {
{ defaultImport: false, element: 'environment', path: '../environment/environment' }
]
);
const appConfigPath: string = getPath(projectRoot, 'src', 'app', APP_CONFIG_FILE_NAME);
const appConfigPath: Path = getPath(projectRoot, 'src', 'app', APP_CONFIG_FILE_NAME);
await TsUtilities.addImportStatements(
appConfigPath,
[
Expand Down Expand Up @@ -249,9 +249,9 @@ export abstract class AngularUtilities {
},
domain
);
const pagesPath: string = getPath(projectRoot, 'src', 'app', 'pages');
const loginPageTs: string = getPath(pagesPath, 'login', 'login.component.ts');
const loginPageHtml: string = getPath(pagesPath, 'login', 'login.component.html');
const pagesPath: Path = getPath(projectRoot, 'src', 'app', 'pages');
const loginPageTs: Path = getPath(pagesPath, 'login', 'login.component.ts');
const loginPageHtml: Path = getPath(pagesPath, 'login', 'login.component.html');
await this.addComponentImports(
loginPageTs,
[{ defaultImport: false, element: 'NgxMatAuthLoginComponent', path: NpmPackage.NGX_MATERIAL_AUTH }]
Expand Down Expand Up @@ -284,9 +284,9 @@ export abstract class AngularUtilities {
},
domain
);
const requestResetPasswordPageTs: string = getPath(pagesPath, 'request-reset-password', 'request-reset-password.component.ts');
const requestResetPasswordPageTs: Path = getPath(pagesPath, 'request-reset-password', 'request-reset-password.component.ts');

const requestResetPasswordPageHtml: string = getPath(pagesPath, 'request-reset-password', 'request-reset-password.component.html');
const requestResetPasswordPageHtml: Path = getPath(pagesPath, 'request-reset-password', 'request-reset-password.component.html');
await this.addComponentImports(
requestResetPasswordPageTs,
[{ defaultImport: false, element: 'NgxMatAuthRequestResetPasswordComponent', path: NpmPackage.NGX_MATERIAL_AUTH }]
Expand Down Expand Up @@ -317,9 +317,9 @@ export abstract class AngularUtilities {
},
domain
);
const confirmResetPasswordPageTs: string = getPath(pagesPath, 'confirm-reset-password', 'confirm-reset-password.component.ts');
const confirmResetPasswordPageTs: Path = getPath(pagesPath, 'confirm-reset-password', 'confirm-reset-password.component.ts');

const confirmResetPasswordPageHtml: string = getPath(pagesPath, 'confirm-reset-password', 'confirm-reset-password.component.html');
const confirmResetPasswordPageHtml: Path = getPath(pagesPath, 'confirm-reset-password', 'confirm-reset-password.component.html');
await this.addComponentImports(
confirmResetPasswordPageTs,
[{ defaultImport: false, element: 'NgxMatAuthConfirmResetPasswordComponent', path: NpmPackage.NGX_MATERIAL_AUTH }]
Expand Down Expand Up @@ -358,8 +358,8 @@ export abstract class AngularUtilities {
},
domain
);
const adminsPageTs: string = getPath(pagesPath, 'admins', 'admins.component.ts');
const adminsPageHtml: string = getPath(pagesPath, 'admins', 'admins.component.html');
const adminsPageTs: Path = getPath(pagesPath, 'admins', 'admins.component.ts');
const adminsPageHtml: Path = getPath(pagesPath, 'admins', 'admins.component.html');
await FsUtilities.updateFile(
adminsPageTs,
adminsPageTsContent,
Expand All @@ -374,7 +374,7 @@ export abstract class AngularUtilities {
],
'replace'
);
const routesTs: string = getPath(projectRoot, 'src', 'app', ANGULAR_ROUTES_FILE_NAME);
const routesTs: Path = getPath(projectRoot, 'src', 'app', ANGULAR_ROUTES_FILE_NAME);
await TsUtilities.addImportStatements(
routesTs,
[
Expand Down Expand Up @@ -480,7 +480,7 @@ export abstract class AngularUtilities {
provider: Provider | EnvironmentProviders | CustomTsValues,
imports: TsImportDefinition[]
): Promise<void> {
const appConfigPath: string = getPath(root, 'src', 'app', APP_CONFIG_FILE_NAME);
const appConfigPath: Path = getPath(root, 'src', 'app', APP_CONFIG_FILE_NAME);

const { result, contentString } = await TsUtilities.getArrayStartingWith(appConfigPath, 'providers: [');

Expand Down Expand Up @@ -528,7 +528,7 @@ export abstract class AngularUtilities {
await this.addNavElement(root, navElement);
}

const sitemapPath: string = getPath(root, 'src', SITEMAP_FILE_NAME);
const sitemapPath: Path = getPath(root, 'src', SITEMAP_FILE_NAME);
const route: string | undefined = this.resolveInternalRoute(navElement);
if (
domain
Expand Down Expand Up @@ -566,7 +566,7 @@ export abstract class AngularUtilities {
}

private static async addNavElement(projectPath: string, element: AddNavElementConfig): Promise<void> {
const routesPath: string = getPath(projectPath, 'src', 'app', ANGULAR_ROUTES_FILE_NAME);
const routesPath: Path = getPath(projectPath, 'src', 'app', ANGULAR_ROUTES_FILE_NAME);

const startIdentifier: ArrayStartIdentifier = this.getStartIdentifierForAddingNavElement(element);
const { result, contentString } = await TsUtilities.getArrayStartingWith<typeof element.element>(routesPath, startIdentifier);
Expand Down Expand Up @@ -629,7 +629,7 @@ export abstract class AngularUtilities {
'</urlset>'
]);

const angularJsonPath: string = getPath(root, ANGULAR_JSON_FILE_NAME);
const angularJsonPath: Path = getPath(root, ANGULAR_JSON_FILE_NAME);
const currentAngularJson: AngularJson = await FsUtilities.parseFileAs(angularJsonPath);
// eslint-disable-next-line stylistic/max-len
const currentAssets: AngularJsonAssetPattern[] = currentAngularJson?.projects[projectName]?.architect?.['build'].options?.assets ?? [];
Expand Down Expand Up @@ -674,7 +674,7 @@ export abstract class AngularUtilities {
],
'append'
);
const appComponentTs: string = getPath(root, 'src', 'app', ANGULAR_APP_COMPONENT_FILE_NAME);
const appComponentTs: Path = getPath(root, 'src', 'app', ANGULAR_APP_COMPONENT_FILE_NAME);
await this.addComponentImports(
appComponentTs,
[
Expand Down Expand Up @@ -724,7 +724,7 @@ export abstract class AngularUtilities {
}
await FsUtilities.updateFile(appComponentTs, tsLines, 'replace');

const routesTs: string = getPath(root, 'src', 'app', ANGULAR_ROUTES_FILE_NAME);
const routesTs: Path = getPath(root, 'src', 'app', ANGULAR_ROUTES_FILE_NAME);
await FsUtilities.rename(
getPath(root, 'src', 'app', 'app.routes.ts'),
routesTs
Expand Down Expand Up @@ -825,7 +825,7 @@ export abstract class AngularUtilities {
* @param path - The path of the ng-package.json.
* @param data - The data to update with.
*/
static async updateNgPackageJson(path: string, data: Partial<NgPackageJson>): Promise<void> {
static async updateNgPackageJson(path: Path, data: Partial<NgPackageJson>): Promise<void> {
const oldData: NgPackageJson = await FsUtilities.parseFileAs(path);
const updatedData: NgPackageJson = mergeDeep(oldData, data);
await FsUtilities.updateFile(path, JsonUtilities.stringify(updatedData), 'replace', false);
Expand All @@ -836,13 +836,13 @@ export abstract class AngularUtilities {
* @param path - The path of the angular.json.
* @param data - The data to update with.
*/
static async updateAngularJson(path: string, data: DeepPartial<AngularJson>): Promise<void> {
static async updateAngularJson(path: Path, data: DeepPartial<AngularJson>): Promise<void> {
const oldData: AngularJson = await FsUtilities.parseFileAs(path);
const newData: AngularJson = mergeDeep<AngularJson>(oldData, data);
await FsUtilities.updateFile(path, JsonUtilities.stringify(newData), 'replace');
}

private static async addComponentImports(componentPath: string, imports: TsImportDefinition[]): Promise<void> {
private static async addComponentImports(componentPath: Path, imports: TsImportDefinition[]): Promise<void> {
await TsUtilities.addImportStatements(componentPath, imports);
let lines: string[] = await FsUtilities.readFileLines(componentPath);
for (const imp of imports) {
Expand Down
Loading