From 20ae737832ae2c5ac370c67cf1c6a6f1c91c9b53 Mon Sep 17 00:00:00 2001 From: Tim Fabian Date: Fri, 10 Oct 2025 18:11:31 +0200 Subject: [PATCH 1/5] updated ngx-material-tracking and ngx-material-navigation --- eslint.config.mjs | 12 ++-- package-lock.json | 4 +- package.json | 2 +- src/angular/angular.utilities.ts | 58 ++++++++++++++++--- .../add-angular-website.command.ts | 4 +- src/constants.ts | 10 ++++ 6 files changed, 70 insertions(+), 20 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 380199a..723acf4 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,10 +1,10 @@ +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from "eslint-plugin-storybook"; + import { configs } from 'eslint-config-service-soft'; // eslint-disable-next-line jsdoc/require-description /** @type {import('eslint').Linter.Config} */ -export default [ - ...configs, - { - ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] - } -]; \ No newline at end of file +export default [...configs, { + ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] +}, ...storybook.configs["flat/recommended"], ...storybook.configs["flat/recommended"]]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a9a64a9..d5621dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "monux-cli", - "version": "2.5.2", + "version": "2.5.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "monux-cli", - "version": "2.5.2", + "version": "2.5.3", "license": "MIT", "dependencies": { "chalk": "4.1.2", diff --git a/package.json b/package.json index dddfd2f..9b7d22a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "monux-cli", - "version": "2.5.2", + "version": "2.5.3", "license": "MIT", "main": "index.js", "engines": { diff --git a/src/angular/angular.utilities.ts b/src/angular/angular.utilities.ts index 21dda70..459cedd 100644 --- a/src/angular/angular.utilities.ts +++ b/src/angular/angular.utilities.ts @@ -7,7 +7,7 @@ import { NpmPackage, NpmUtilities } from '../npm'; import { ArrayStartIdentifier, TsImportDefinition, TsUtilities } from '../ts'; import { AngularJson, AngularJsonAssetPattern } from './angular-json.model'; import { NgPackageJson } from './ng-package-json.model'; -import { ANGULAR_APP_COMPONENT_FILE_NAME, ANGULAR_JSON_FILE_NAME, ANGULAR_ROUTES_FILE_NAME, APP_CONFIG_FILE_NAME, ENVIRONMENT_MODEL_TS_FILE_NAME, ROBOTS_FILE_NAME, SITEMAP_FILE_NAME } from '../constants'; +import { ANGULAR_APP_COMPONENT_FILE_NAME, ANGULAR_JSON_FILE_NAME, ANGULAR_ROUTES_FILE_NAME, ANGULAR_SERVER_ROUTES_FILE_NAME, APP_CONFIG_FILE_NAME, APP_CONFIG_SERVER_FILE_NAME, ENVIRONMENT_MODEL_TS_FILE_NAME, ROBOTS_FILE_NAME, SITEMAP_FILE_NAME } from '../constants'; import { DefaultEnvKeys, EnvUtilities } from '../env'; import { DeepPartial } from '../types'; import { AddNavElementConfig } from './add-nav-element-config.model'; @@ -462,6 +462,19 @@ export abstract class AngularUtilities { * @param root - The root of the angular project to setup material for. */ static async setupMaterial(root: string): Promise { + await AngularUtilities.setupBaseStyles(root); + await FsUtilities.updateFile( + getPath(root, 'src', 'styles.css'), + '@import "@angular/material/prebuilt-themes/indigo-pink.css";', + 'prepend' + ); + } + + /** + * Sets up the base styles. + * @param root - The root of the project. + */ + static async setupBaseStyles(root: string): Promise { await FsUtilities.updateFile( getPath(root, 'src', 'styles.css'), [ @@ -479,11 +492,6 @@ export abstract class AngularUtilities { ], 'append' ); - await FsUtilities.updateFile( - getPath(root, 'src', 'styles.css'), - '@import "@angular/material/prebuilt-themes/indigo-pink.css";', - 'prepend' - ); } /** @@ -623,12 +631,29 @@ export abstract class AngularUtilities { /** * Adds tracking to the angular project with the given name. * @param projectName - The name of the angular project to add tracking to. + * @param root - The root dir of the project. */ - static async setupTracking(projectName: string): Promise { + static async setupTracking(projectName: string, root: Path): Promise { // eslint-disable-next-line no-console console.log('Adds tracking'); await NpmUtilities.install(projectName, [NpmPackage.NGX_MATERIAL_TRACKING]); // TODO: Angular Tracking + await this.addProvider( + root, + { + provide: 'NGX_TRACKING_SNACKBAR_COMPONENT', + useValue: 'SnackbarComponent' + }, + [{ defaultImport: false, element: 'SnackbarComponent', path: NpmPackage.NGX_MATERIAL_TRACKING }] + ); + await this.addProvider( + root, + { + provide: 'NGX_GDPR_TRACKINGS', + useValue: [] + }, + [{ defaultImport: false, element: 'NGX_GDPR_TRACKINGS', path: NpmPackage.NGX_MATERIAL_TRACKING }] + ); } /** @@ -683,11 +708,12 @@ export abstract class AngularUtilities { getPath(root, 'src', 'app', 'app.html'), [ // eslint-disable-next-line stylistic/max-len - '', + '', + '\t', '\t', '', '', - '' + '' ], 'append' ); @@ -704,6 +730,11 @@ export abstract class AngularUtilities { element: 'NgxMatNavigationFooterComponent', path: NpmPackage.NGX_MATERIAL_NAVIGATION, defaultImport: false + }, + { + element: 'NgxMatNavigationBreadcrumbsComponent', + path: NpmPackage.NGX_MATERIAL_NAVIGATION, + defaultImport: false } ] ); @@ -742,6 +773,15 @@ export abstract class AngularUtilities { await FsUtilities.updateFile(appComponentTs, tsLines, 'replace'); const routesTs: Path = getPath(root, 'src', 'app', ANGULAR_ROUTES_FILE_NAME); + await FsUtilities.rename( + getPath(root, 'src', 'app', 'app.routes.server.ts'), + getPath(root, 'src', 'app', ANGULAR_SERVER_ROUTES_FILE_NAME) + ); + await FsUtilities.replaceAllInFile( + getPath(root, 'src', 'app', APP_CONFIG_SERVER_FILE_NAME), + 'import { serverRoutes } from \'./app.routes.server\';', + 'import { serverRoutes } from \'./server.routes\';' + ); await FsUtilities.rename( getPath(root, 'src', 'app', 'app.routes.ts'), routesTs diff --git a/src/commands/add/add-angular-website/add-angular-website.command.ts b/src/commands/add/add-angular-website/add-angular-website.command.ts index 01b36b9..dca6f3a 100644 --- a/src/commands/add/add-angular-website/add-angular-website.command.ts +++ b/src/commands/add/add-angular-website/add-angular-website.command.ts @@ -109,11 +109,11 @@ export class AddAngularWebsiteCommand extends BaseAddCommand Date: Fri, 10 Oct 2025 18:18:45 +0200 Subject: [PATCH 2/5] fixed linting --- eslint.config.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 723acf4..380199a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,10 +1,10 @@ -// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format -import storybook from "eslint-plugin-storybook"; - import { configs } from 'eslint-config-service-soft'; // eslint-disable-next-line jsdoc/require-description /** @type {import('eslint').Linter.Config} */ -export default [...configs, { - ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] -}, ...storybook.configs["flat/recommended"], ...storybook.configs["flat/recommended"]]; \ No newline at end of file +export default [ + ...configs, + { + ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] + } +]; \ No newline at end of file From 02756d8f5333e7fb72fc95143d449927c7259050 Mon Sep 17 00:00:00 2001 From: Tim Fabian Date: Fri, 10 Oct 2025 19:20:04 +0200 Subject: [PATCH 3/5] fixed some styling issues and tests --- eslint.config.mjs | 12 ++++---- package.json | 2 +- src/__testing__/mock/constants.ts | 8 +++++- src/__testing__/mock/file-mock.utilities.ts | 32 +++++++++++++++++++++ src/angular/angular-utilities.test.ts | 17 +++++++---- src/angular/angular.utilities.ts | 8 ++++-- 6 files changed, 64 insertions(+), 15 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 380199a..b45e724 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,10 +1,10 @@ +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from "eslint-plugin-storybook"; + import { configs } from 'eslint-config-service-soft'; // eslint-disable-next-line jsdoc/require-description /** @type {import('eslint').Linter.Config} */ -export default [ - ...configs, - { - ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] - } -]; \ No newline at end of file +export default [...configs, { + ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] +}, ...storybook.configs["flat/recommended"]]; \ No newline at end of file diff --git a/package.json b/package.json index 9b7d22a..e7bb250 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "start": "npm run build && cd sandbox && node ../dist/index.js", "build": "tsc", "clear": "rm -rf sandbox && mkdir sandbox && npm run start i", - "test": "jest", + "test": "jest --runInBand", "lint": "eslint . --max-warnings=0", "lint:fix": "eslint . --max-warnings=0 --fix", "prepublishOnly": "npm i && npm run build" diff --git a/src/__testing__/mock/constants.ts b/src/__testing__/mock/constants.ts index 7d82fcf..69f34dc 100644 --- a/src/__testing__/mock/constants.ts +++ b/src/__testing__/mock/constants.ts @@ -1,5 +1,5 @@ /* eslint-disable jsdoc/require-jsdoc */ -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, WORKSPACE_FILE_NAME, BASE_TS_CONFIG_FILE_NAME, STAGE_DOCKER_COMPOSE_FILE_NAME, ENV_PUBLIC_FILE_NAME, ANGULAR_APP_COMPONENT_FILE_NAME } from '../../constants'; +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, WORKSPACE_FILE_NAME, BASE_TS_CONFIG_FILE_NAME, STAGE_DOCKER_COMPOSE_FILE_NAME, ENV_PUBLIC_FILE_NAME, ANGULAR_APP_COMPONENT_FILE_NAME, ANGULAR_SERVER_ROUTES_FILE_NAME, APP_CONFIG_SERVER_FILE_NAME } from '../../constants'; import { OmitStrict } from '../../types'; import { getPath, Path } from '../../utilities'; @@ -29,7 +29,10 @@ export type MockConstants = { readonly ANGULAR_APP_COMPONENT_HTML: Path, readonly ANGULAR_APP_ROUTES_TS: Path, readonly ANGULAR_ROUTES_TS: Path, + readonly ANGULAR_APP_ROUTES_SERVER_TS: Path, + readonly ANGULAR_SERVER_ROUTES_TS: Path, readonly ANGULAR_APP_CONFIG_TS: Path, + readonly ANGULAR_APP_CONFIG_SERVER_TS: Path, readonly ANGULAR_JSON: Path, readonly ANGULAR_ENVIRONMENT_MODEL: Path, readonly ANGULAR_ENVIRONMENT: Path, @@ -90,7 +93,10 @@ export function getMockConstants(projectName: string): MockConstants { ANGULAR_APP_COMPONENT_HTML: getPath(ANGULAR_APP_DIR, 'src', 'app', 'app.html'), ANGULAR_APP_ROUTES_TS: getPath(ANGULAR_APP_DIR, 'src', 'app', 'app.routes.ts'), ANGULAR_ROUTES_TS: getPath(ANGULAR_APP_DIR, 'src', 'app', ANGULAR_ROUTES_FILE_NAME), + ANGULAR_APP_ROUTES_SERVER_TS: getPath(ANGULAR_APP_DIR, 'src', 'app', 'app.routes.server.ts'), + ANGULAR_SERVER_ROUTES_TS: getPath(ANGULAR_APP_DIR, 'src', 'app', ANGULAR_SERVER_ROUTES_FILE_NAME), ANGULAR_APP_CONFIG_TS: getPath(ANGULAR_APP_DIR, 'src', 'app', APP_CONFIG_FILE_NAME), + ANGULAR_APP_CONFIG_SERVER_TS: getPath(ANGULAR_APP_DIR, 'src', 'app', APP_CONFIG_SERVER_FILE_NAME), ANGULAR_JSON: getPath(ANGULAR_APP_DIR, ANGULAR_JSON_FILE_NAME), ANGULAR_ENVIRONMENT: getPath(ANGULAR_APP_DIR, 'src', 'environment', ENVIRONMENT_TS_FILE_NAME), ANGULAR_ENVIRONMENT_MODEL: getPath(ANGULAR_APP_DIR, 'src', 'environment', ENVIRONMENT_MODEL_TS_FILE_NAME), diff --git a/src/__testing__/mock/file-mock.utilities.ts b/src/__testing__/mock/file-mock.utilities.ts index 7844d8f..eb3aa9e 100644 --- a/src/__testing__/mock/file-mock.utilities.ts +++ b/src/__testing__/mock/file-mock.utilities.ts @@ -42,7 +42,10 @@ export abstract class FileMockUtilities { ANGULAR_APP_COMPONENT_HTML: this.createEmptyFile, ANGULAR_APP_ROUTES_TS: this.createAppRoutesTs, ANGULAR_ROUTES_TS: this.createEmptyFile, + ANGULAR_APP_ROUTES_SERVER_TS: this.createAppRoutesServerTs, + ANGULAR_SERVER_ROUTES_TS: this.createEmptyFile, ANGULAR_APP_CONFIG_TS: this.createAppConfig, + ANGULAR_APP_CONFIG_SERVER_TS: this.createAppConfigServer, ANGULAR_JSON: this.createAngularJson, ANGULAR_ENVIRONMENT_MODEL: this.createEmptyFile, ANGULAR_ENVIRONMENT: this.createEmptyFile, @@ -192,6 +195,19 @@ export abstract class FileMockUtilities { ], true, false); } + private static async createAppRoutesServerTs(mockConstants: MockConstants): Promise { + await FsUtilities.createFile(mockConstants.ANGULAR_APP_ROUTES_SERVER_TS, [ + `import { RenderMode, ServerRoute } from '@angular/ssr';`, + '', + `export const serverRoutes: ServerRoute[] = [`, + '\t{', + `\t\tpath: '**',`, + `\t\trenderMode: RenderMode.Prerender`, + '\t}', + '];' + ], true, false); + } + private static async createAppConfig(mockConstants: MockConstants): Promise { await FsUtilities.createFile(mockConstants.ANGULAR_APP_CONFIG_TS, [ 'import { ApplicationConfig, provideZoneChangeDetection } from \'@angular/core\';', @@ -210,6 +226,22 @@ export abstract class FileMockUtilities { ], true, false); } + private static async createAppConfigServer(mockConstants: MockConstants): Promise { + await FsUtilities.createFile(mockConstants.ANGULAR_APP_CONFIG_SERVER_TS, [ + `import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';`, + `import { provideServerRendering, withRoutes } from '@angular/ssr';`, + '', + `import { appConfig } from './app.config';`, + `import { serverRoutes } from './app.routes.server';`, + '', + `const serverConfig: ApplicationConfig = {`, + `\tproviders: [provideServerRendering(withRoutes(serverRoutes))]`, + `};`, + '', + `export const config: ApplicationConfig = mergeApplicationConfig(appConfig, serverConfig);` + ], true, false); + } + private static async createGlobalEnvModel(): Promise { await EnvUtilities['createGlobalEnvironmentModel'](); } diff --git a/src/angular/angular-utilities.test.ts b/src/angular/angular-utilities.test.ts index 30f58b6..23a81cc 100644 --- a/src/angular/angular-utilities.test.ts +++ b/src/angular/angular-utilities.test.ts @@ -21,7 +21,9 @@ describe('AngularUtilities', () => { 'ANGULAR_APP_COMPONENT_HTML', 'ANGULAR_APP_COMPONENT_TS', 'ANGULAR_APP_ROUTES_TS', + 'ANGULAR_APP_ROUTES_SERVER_TS', 'ANGULAR_APP_CONFIG_TS', + 'ANGULAR_APP_CONFIG_SERVER_TS', 'ANGULAR_JSON' ] ); @@ -57,24 +59,29 @@ describe('AngularUtilities', () => { const htmlLines: string[] = await FsUtilities.readFileLines(mockConstants.ANGULAR_APP_COMPONENT_HTML); expect(htmlLines).toEqual([ - '', - ' ', + '', + '
', + '
', + ' ', + ' ', + '
', + '
', '
', '', - '' + '' ]); const tsLines: string[] = await FsUtilities.readFileLines(mockConstants.ANGULAR_APP_COMPONENT_TS); expect(tsLines).toEqual([ 'import { navbarRows, footerRows } from \'./routes\';', - 'import { FooterRow, NavbarRow, NgxMatNavigationFooterComponent, NgxMatNavigationNavbarComponent } from \'ngx-material-navigation\';', + 'import { FooterRow, NavbarRow, NgxMatNavigationBreadcrumbsComponent, NgxMatNavigationFooterComponent, NgxMatNavigationNavbarComponent } from \'ngx-material-navigation\';', 'import { Component } from \'@angular/core\';', 'import { RouterOutlet } from \'@angular/router\';', '', '@Component({', ' selector: \'app-root\',', ' standalone: true,', - ' imports: [RouterOutlet, NgxMatNavigationNavbarComponent, NgxMatNavigationFooterComponent],', + ' imports: [RouterOutlet, NgxMatNavigationNavbarComponent, NgxMatNavigationFooterComponent, NgxMatNavigationBreadcrumbsComponent],', ' templateUrl: \'./app.html\',', ' styleUrl: \'./app.css\'', '})', diff --git a/src/angular/angular.utilities.ts b/src/angular/angular.utilities.ts index 459cedd..bf50456 100644 --- a/src/angular/angular.utilities.ts +++ b/src/angular/angular.utilities.ts @@ -709,8 +709,12 @@ export abstract class AngularUtilities { [ // eslint-disable-next-line stylistic/max-len '', - '\t', - '\t', + '
', + '
', + ' ', + ' ', + '
', + '
', '
', '', '' From 43eaab8f6b214955031cf5ebf9babfc55d0f0821 Mon Sep 17 00:00:00 2001 From: Tim Fabian Date: Wed, 10 Dec 2025 01:05:06 +0100 Subject: [PATCH 4/5] fixed linting, bumped up zibri version --- .github/workflows/cd.yml | 16 +++-- eslint.config.mjs | 12 ++-- package-lock.json | 79 ++++++++++----------- package.json | 3 + src/__testing__/mock/file-mock.utilities.ts | 24 +++---- src/npm/npm-utilities.test.ts | 3 +- src/zibri/zibri.utilities.ts | 2 +- 7 files changed, 75 insertions(+), 64 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 3605759..f8b3514 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -4,6 +4,10 @@ on: types: [closed] branches: [release] +permissions: + id-token: write + contents: read + jobs: deploy: if: github.event.pull_request.merged @@ -12,8 +16,12 @@ jobs: - uses: actions/checkout@v4 with: ref: release - - run: npm ci - - run: npm run build - - uses: JS-DevTools/npm-publish@v3 + - uses: actions/setup-node@v4 with: - token: ${{ secrets.NPM_TOKEN }} \ No newline at end of file + node-version: '20' + registry-url: 'https://registry.npmjs.org' + # Ensure npm 11.5.1 or later is installed + - run: npm install -g npm@latest + - run: npm i + - run: npm run build + - run: npm publish \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index b45e724..380199a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,10 +1,10 @@ -// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format -import storybook from "eslint-plugin-storybook"; - import { configs } from 'eslint-config-service-soft'; // eslint-disable-next-line jsdoc/require-description /** @type {import('eslint').Linter.Config} */ -export default [...configs, { - ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] -}, ...storybook.configs["flat/recommended"]]; \ No newline at end of file +export default [ + ...configs, + { + ignores: ['src/__testing__/tmp/*', 'src/__testing__/coverage/*', 'sandbox'] + } +]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d5621dc..9956909 100644 --- a/package-lock.json +++ b/package-lock.json @@ -231,9 +231,9 @@ } }, "node_modules/@angular/animations": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.2.1.tgz", - "integrity": "sha512-g4yLXwXCF7OAahx1xI4FXRwG4dIXfBqHsvlpx2TappaMRpiPp7PfP2cW6l3ox+KRpTWhSvcRqbJyIOWad0f7Rw==", + "version": "20.3.15", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.15.tgz", + "integrity": "sha512-ikyKfhkxoqQA6JcBN0B9RaN6369sM1XYX81Id0lI58dmWCe7gYfrTp8ejqxxKftl514psQO3pkW8Gn1nJ131Gw==", "dev": true, "license": "MIT", "peer": true, @@ -244,8 +244,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.2.1", - "@angular/core": "20.2.1" + "@angular/core": "20.3.15" } }, "node_modules/@angular/cdk": { @@ -266,9 +265,9 @@ } }, "node_modules/@angular/common": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.2.1.tgz", - "integrity": "sha512-T6RYnDZA9TyYhj2hUz4set8p4RbBCg6IKUvy6qzdKTl4nn4xQ0XUV7aGBYN4LKiGrse9lzlVUAyXtkhmwuBbCQ==", + "version": "20.3.15", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.15.tgz", + "integrity": "sha512-k4mCXWRFiOHK3bUKfWkRQQ8KBPxW8TAJuKLYCsSHPCpMz6u0eA1F0VlrnOkZVKWPI792fOaEAWH2Y4PTaXlUHw==", "dev": true, "license": "MIT", "dependencies": { @@ -278,14 +277,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.2.1", + "@angular/core": "20.3.15", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/core": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.2.1.tgz", - "integrity": "sha512-/hl3AkmdQ62P9ttmfULEDg9GIz7BkzhGv9bSH2ssiU3Y4ax6eM8uQXEbMxBA8OUKOvg1Q4POcNHIiJQgO5t28Q==", + "version": "20.3.15", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.15.tgz", + "integrity": "sha512-NMbX71SlTZIY9+rh/SPhRYFJU0pMJYW7z/TBD4lqiO+b0DTOIg1k7Pg9ydJGqSjFO1Z4dQaA6TteNuF99TJCNw==", "dev": true, "license": "MIT", "peer": true, @@ -296,7 +295,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.2.1", + "@angular/compiler": "20.3.15", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, @@ -310,9 +309,9 @@ } }, "node_modules/@angular/forms": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.2.1.tgz", - "integrity": "sha512-SfkiHEIFPLtTKeaXUTpRfYnpJDxaeKiTi0YqfvzEjKE68qH0t+pQ4rL0Poch2/l4snP6JS1XzO/nDve1dk3vZw==", + "version": "20.3.15", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.15.tgz", + "integrity": "sha512-gS5hQkinq52pm/7mxz4yHPCzEcmRWjtUkOVddPH0V1BW/HMni/p4Y6k2KqKBeGb9p8S5EAp6PDxDVLOPukp3mg==", "dev": true, "license": "MIT", "peer": true, @@ -323,9 +322,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.2.1", - "@angular/core": "20.2.1", - "@angular/platform-browser": "20.2.1", + "@angular/common": "20.3.15", + "@angular/core": "20.3.15", + "@angular/platform-browser": "20.3.15", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -349,9 +348,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.2.1.tgz", - "integrity": "sha512-oxDih/A8G7W+I6oAip+sev+kebioYmzhB/NMzF8C8zx/ieVDzatJ+YeEZQt7eDaJLH94S4sIC25SPq3OFIabxg==", + "version": "20.3.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.15.tgz", + "integrity": "sha512-TxRM/wTW/oGXv/3/Iohn58yWoiYXOaeEnxSasiGNS1qhbkcKtR70xzxW6NjChBUYAixz2ERkLURkpx3pI8Q6Dw==", "dev": true, "license": "MIT", "peer": true, @@ -362,9 +361,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.2.1", - "@angular/common": "20.2.1", - "@angular/core": "20.2.1" + "@angular/animations": "20.3.15", + "@angular/common": "20.3.15", + "@angular/core": "20.3.15" }, "peerDependenciesMeta": { "@angular/animations": { @@ -373,9 +372,9 @@ } }, "node_modules/@angular/router": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.2.1.tgz", - "integrity": "sha512-f8KfG55EVnFDC9ud+MbxAP6voKi7hVQH4YaqPK0Lm6pyc1Xp0I5W25iRbg+Y1rO1csHKHauBPkUEESEuVGBGqg==", + "version": "20.3.15", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.15.tgz", + "integrity": "sha512-6+qgk8swGSoAu7ISSY//GatAyCP36hEvvUgvjbZgkXLLH9yUQxdo77ij05aJ5s0OyB25q/JkqS8VTY0z1yE9NQ==", "dev": true, "license": "MIT", "peer": true, @@ -386,9 +385,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.2.1", - "@angular/core": "20.2.1", - "@angular/platform-browser": "20.2.1", + "@angular/common": "20.3.15", + "@angular/core": "20.3.15", + "@angular/platform-browser": "20.3.15", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -2365,9 +2364,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -6791,9 +6790,9 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -8420,9 +8419,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" diff --git a/package.json b/package.json index e7bb250..9ff8748 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,9 @@ "engines": { "node": ">=20" }, + "repository": { + "url": "https://github.com/Service-Soft/monux-cli" + }, "keywords": [ "monux", "mx", diff --git a/src/__testing__/mock/file-mock.utilities.ts b/src/__testing__/mock/file-mock.utilities.ts index eb3aa9e..0af8d4e 100644 --- a/src/__testing__/mock/file-mock.utilities.ts +++ b/src/__testing__/mock/file-mock.utilities.ts @@ -197,12 +197,12 @@ export abstract class FileMockUtilities { private static async createAppRoutesServerTs(mockConstants: MockConstants): Promise { await FsUtilities.createFile(mockConstants.ANGULAR_APP_ROUTES_SERVER_TS, [ - `import { RenderMode, ServerRoute } from '@angular/ssr';`, + 'import { RenderMode, ServerRoute } from \'@angular/ssr\';', '', - `export const serverRoutes: ServerRoute[] = [`, + 'export const serverRoutes: ServerRoute[] = [', '\t{', - `\t\tpath: '**',`, - `\t\trenderMode: RenderMode.Prerender`, + '\t\tpath: \'**\',', + '\t\trenderMode: RenderMode.Prerender', '\t}', '];' ], true, false); @@ -228,17 +228,17 @@ export abstract class FileMockUtilities { private static async createAppConfigServer(mockConstants: MockConstants): Promise { await FsUtilities.createFile(mockConstants.ANGULAR_APP_CONFIG_SERVER_TS, [ - `import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';`, - `import { provideServerRendering, withRoutes } from '@angular/ssr';`, + 'import { mergeApplicationConfig, ApplicationConfig } from \'@angular/core\';', + 'import { provideServerRendering, withRoutes } from \'@angular/ssr\';', '', - `import { appConfig } from './app.config';`, - `import { serverRoutes } from './app.routes.server';`, + 'import { appConfig } from \'./app.config\';', + 'import { serverRoutes } from \'./app.routes.server\';', '', - `const serverConfig: ApplicationConfig = {`, - `\tproviders: [provideServerRendering(withRoutes(serverRoutes))]`, - `};`, + 'const serverConfig: ApplicationConfig = {', + '\tproviders: [provideServerRendering(withRoutes(serverRoutes))]', + '};', '', - `export const config: ApplicationConfig = mergeApplicationConfig(appConfig, serverConfig);` + 'export const config: ApplicationConfig = mergeApplicationConfig(appConfig, serverConfig);' ], true, false); } diff --git a/src/npm/npm-utilities.test.ts b/src/npm/npm-utilities.test.ts index 56ce27d..88cb1f8 100644 --- a/src/npm/npm-utilities.test.ts +++ b/src/npm/npm-utilities.test.ts @@ -19,6 +19,7 @@ describe('NpmUtilities', () => { '{', ' "name": "@library/library",', ' "version": "1.0.0",', + ' "description": "",', ' "main": "index.js",', ' "scripts": {', ' "test": "echo \\\"Error: no test specified\\\" && exit 1"', @@ -26,7 +27,7 @@ describe('NpmUtilities', () => { ' "keywords": [],', ' "author": "",', ' "license": "ISC",', - ' "description": ""', + ' \"type\": \"commonjs\"', '}' ]); }, MAX_ADD_TIME); diff --git a/src/zibri/zibri.utilities.ts b/src/zibri/zibri.utilities.ts index d4849fa..cdacf46 100644 --- a/src/zibri/zibri.utilities.ts +++ b/src/zibri/zibri.utilities.ts @@ -37,7 +37,7 @@ type ZibriCliOptions */ export abstract class ZibriUtilities { - private static readonly CLI_VERSION: string = '1.6.4'; + private static readonly CLI_VERSION: string = '2.1.1'; /** * Runs a zibri cli command inside the provided directory. From 1d2125412c3e66d5761912661a65f7e1f21fe8ed Mon Sep 17 00:00:00 2001 From: Tim Fabian Date: Wed, 10 Dec 2025 01:13:18 +0100 Subject: [PATCH 5/5] fixed pipeline --- .github/workflows/ci.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b76ccf..9ab85ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,12 @@ jobs: - uses: actions/checkout@v4 - run: docker pull adminer - run: docker pull postgres - - run: npm i -g @angular/cli@20 zibri-cli @loopback/cli@6 @nestjs/cli@11 - - run: npm ci + - uses: actions/setup-node@v4 + with: + node-version: '20' + registry-url: 'https://registry.npmjs.org' + - run: npm i -g npm@latest + - run: npm i -g @angular/cli@20 zibri-cli @loopback/cli@6 @nestjs/cli@11 create-vite@6 create-storybook@9.1.16 + - run: npm i - run: npm run build - run: npm run test \ No newline at end of file