From 7a176eb9a22a31caba999ef7accbe9dbc3bad542 Mon Sep 17 00:00:00 2001
From: Bartosz Sekula <bartosz.sekula@hyland.com>
Date: Mon, 30 Jan 2023 10:28:39 +0100
Subject: [PATCH] [AAE-11496] Build and publish aca-about and aca-settings
 (#2942)

* [AAE-11496] Build and publish aca-about and aca-content

* added libs to publish
---
 angular.json                                     |  6 ++++--
 app/src/app/extensions.module.ts                 |  3 ++-
 package.json                                     |  2 +-
 projects/aca-about/ng-package.json               | 11 +++++++++++
 projects/aca-about/package.json                  | 11 +++++++++++
 projects/aca-about/src/lib/about.component.html  |  2 +-
 projects/aca-about/src/lib/about.component.ts    |  8 +++++---
 projects/aca-about/src/lib/aca-about.module.ts   | 16 +++++++++++++---
 projects/aca-about/src/lib/package-json.token.ts |  3 +++
 projects/aca-about/src/public-api.ts             |  1 +
 projects/aca-about/tsconfig.lib.prod.json        |  7 ++++++-
 projects/aca-settings/ng-package.json            |  8 ++++++++
 projects/aca-settings/package.json               | 11 +++++++++++
 projects/aca-settings/tsconfig.lib.prod.json     |  7 ++++++-
 scripts/ci/npm/publish-libs.sh                   |  2 ++
 15 files changed, 85 insertions(+), 13 deletions(-)
 create mode 100644 projects/aca-about/ng-package.json
 create mode 100644 projects/aca-about/package.json
 create mode 100644 projects/aca-about/src/lib/package-json.token.ts
 create mode 100644 projects/aca-settings/ng-package.json
 create mode 100644 projects/aca-settings/package.json

diff --git a/angular.json b/angular.json
index 4173faf7e..18e1be87e 100644
--- a/angular.json
+++ b/angular.json
@@ -483,7 +483,8 @@
             "production": {
               "tsConfig": "projects/aca-about/tsconfig.lib.prod.json"
             }
-          }
+          },
+          "defaultConfiguration": "production"
         },
         "test": {
           "builder": "@angular-devkit/build-angular:karma",
@@ -523,7 +524,8 @@
             "production": {
               "tsConfig": "projects/aca-settings/tsconfig.lib.prod.json"
             }
-          }
+          },
+          "defaultConfiguration": "production"
         },
         "test": {
           "builder": "@angular-devkit/build-angular:karma",
diff --git a/app/src/app/extensions.module.ts b/app/src/app/extensions.module.ts
index 96418e8fa..66e77a2c9 100644
--- a/app/src/app/extensions.module.ts
+++ b/app/src/app/extensions.module.ts
@@ -29,12 +29,13 @@ import { AcaAboutModule } from '@alfresco/aca-about';
 import { AcaSettingsModule } from '@alfresco/aca-settings';
 import { AcaFolderRulesModule } from '@alfresco/aca-folder-rules';
 import { environment } from '../environments/environment';
+import packageJson from 'package.json';
 
 @NgModule({
   imports: [
     AosExtensionModule,
     ...(environment.devTools ? [AcaSettingsModule] : []),
-    AcaAboutModule.forRoot(environment.production),
+    AcaAboutModule.forRoot(environment.production, packageJson),
     AcaFolderRulesModule
   ]
 })
diff --git a/package.json b/package.json
index 356c53c79..df229ca64 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
     "prebuild": "mkdir -p ./app/.tmp && cp ./app/src/app.config.json.tpl ./app/.tmp/app.config.json",
     "build": "ng build content-ce",
     "build.release": "npm run build -- --configuration=production,release",
-    "build-libs": "ng build aca-shared && ng build adf-office-services-ext",
+    "build-libs": "ng build aca-shared && ng build adf-office-services-ext && ng build aca-settings && ng build aca-about ",
     "test": "ng test",
     "test:ci": "ng test adf-office-services-ext && ng test content-ce --code-coverage",
     "lint": "NODE_OPTIONS=--max_old_space_size=4096 ng lint && npm run spellcheck && npm run e2e.typecheck",
diff --git a/projects/aca-about/ng-package.json b/projects/aca-about/ng-package.json
new file mode 100644
index 000000000..8926e6c1b
--- /dev/null
+++ b/projects/aca-about/ng-package.json
@@ -0,0 +1,11 @@
+{
+  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
+  "dest": "../../dist/@alfresco/aca-about",
+
+  "lib": {
+    "entryFile": "src/public-api.ts"
+  },
+  "assets": [
+    "assets"
+  ]
+}
diff --git a/projects/aca-about/package.json b/projects/aca-about/package.json
new file mode 100644
index 000000000..c2ec593a6
--- /dev/null
+++ b/projects/aca-about/package.json
@@ -0,0 +1,11 @@
+{
+  "name": "@alfresco/aca-about",
+  "version": "0.0.1",
+  "peerDependencies": {
+    "@angular/common": "^14.1.0",
+    "@angular/core": "^14.1.0"
+  },
+  "dependencies": {
+    "tslib": "^2.3.0"
+  }
+}
diff --git a/projects/aca-about/src/lib/about.component.html b/projects/aca-about/src/lib/about.component.html
index 306181370..5791cb2fc 100644
--- a/projects/aca-about/src/lib/about.component.html
+++ b/projects/aca-about/src/lib/about.component.html
@@ -15,7 +15,7 @@
 
       <adf-about-panel *ngIf="dev" [label]="'ABOUT.PACKAGES.TITLE' | translate">
         <ng-template>
-            <adf-about-package-list [dependencies]="pkg?.dependencies"></adf-about-package-list>
+            <adf-about-package-list [dependencies]="packageJson?.dependencies"></adf-about-package-list>
         </ng-template>
       </adf-about-panel>
 
diff --git a/projects/aca-about/src/lib/about.component.ts b/projects/aca-about/src/lib/about.component.ts
index b55b19d34..295271dd5 100644
--- a/projects/aca-about/src/lib/about.component.ts
+++ b/projects/aca-about/src/lib/about.component.ts
@@ -23,12 +23,12 @@
  * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
  */
 
-import { Component, Inject, OnInit } from '@angular/core';
+import { Component, Inject, OnInit, Optional } from '@angular/core';
 import { DEV_MODE_TOKEN } from './dev-mode.tokens';
-import pkg from 'package.json';
 import { Observable } from 'rxjs';
 import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
 import { AuthenticationService, DiscoveryApiService, RepositoryInfo } from '@alfresco/adf-core';
+import { PACKAGE_JSON } from './package-json.token';
 
 @Component({
   selector: 'app-about-page',
@@ -43,12 +43,14 @@ export class AboutComponent implements OnInit {
 
   constructor(
     @Inject(DEV_MODE_TOKEN) devMode,
+    @Optional()
+    @Inject(PACKAGE_JSON)
+    public packageJson,
     private authService: AuthenticationService,
     private appExtensions: AppExtensionService,
     private discovery: DiscoveryApiService
   ) {
     this.dev = !devMode;
-    this.pkg = pkg;
     this.extensions$ = this.appExtensions.references$;
   }
 
diff --git a/projects/aca-about/src/lib/aca-about.module.ts b/projects/aca-about/src/lib/aca-about.module.ts
index 4359cc050..2f0550fe7 100644
--- a/projects/aca-about/src/lib/aca-about.module.ts
+++ b/projects/aca-about/src/lib/aca-about.module.ts
@@ -23,7 +23,7 @@
  * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
  */
 
-import { ModuleWithProviders, NgModule } from '@angular/core';
+import { ModuleWithProviders, NgModule, Provider } from '@angular/core';
 import { AboutComponent } from './about.component';
 import { CommonModule } from '@angular/common';
 import { CoreModule } from '@alfresco/adf-core';
@@ -31,6 +31,7 @@ import { SharedModule, PageLayoutModule } from '@alfresco/aca-shared';
 
 import { ExtensionService, provideExtensionConfig } from '@alfresco/adf-extensions';
 import { DEV_MODE_TOKEN } from './dev-mode.tokens';
+import { PACKAGE_JSON } from './package-json.token';
 
 @NgModule({
   imports: [CommonModule, CoreModule.forChild(), SharedModule, PageLayoutModule],
@@ -44,10 +45,19 @@ export class AcaAboutModule {
     });
   }
 
-  public static forRoot(devMode: any): ModuleWithProviders<AcaAboutModule> {
+  public static forRoot(devMode: any, packageJson?: any): ModuleWithProviders<AcaAboutModule> {
+    const providers: Provider[] = [{ provide: DEV_MODE_TOKEN, useValue: devMode }];
+
+    if (packageJson) {
+      providers.push({
+        provide: PACKAGE_JSON,
+        useValue: packageJson
+      });
+    }
+
     return {
       ngModule: AcaAboutModule,
-      providers: [{ provide: DEV_MODE_TOKEN, useValue: devMode }]
+      providers
     };
   }
 }
diff --git a/projects/aca-about/src/lib/package-json.token.ts b/projects/aca-about/src/lib/package-json.token.ts
new file mode 100644
index 000000000..f30ca52d2
--- /dev/null
+++ b/projects/aca-about/src/lib/package-json.token.ts
@@ -0,0 +1,3 @@
+import { InjectionToken } from '@angular/core';
+
+export const PACKAGE_JSON = new InjectionToken<any>('PACKAGE_JSON');
diff --git a/projects/aca-about/src/public-api.ts b/projects/aca-about/src/public-api.ts
index a3fcd24c4..a79a66995 100644
--- a/projects/aca-about/src/public-api.ts
+++ b/projects/aca-about/src/public-api.ts
@@ -25,3 +25,4 @@
 
 export * from './lib/about.component';
 export * from './lib/aca-about.module';
+export * from './lib/package-json.token';
diff --git a/projects/aca-about/tsconfig.lib.prod.json b/projects/aca-about/tsconfig.lib.prod.json
index 06de549e1..1715cbee8 100644
--- a/projects/aca-about/tsconfig.lib.prod.json
+++ b/projects/aca-about/tsconfig.lib.prod.json
@@ -2,7 +2,12 @@
 {
   "extends": "./tsconfig.lib.json",
   "compilerOptions": {
-    "declarationMap": false
+    "declarationMap": false,
+    "paths": {
+      "@alfresco/aca-shared": ["dist/@alfresco/aca-shared"],
+      "@alfresco/aca-shared/store": ["dist/@alfresco/aca-shared/store"],
+      "@alfresco/aca-shared/rules": ["dist/@alfresco/aca-shared/rules"]
+    }
   },
   "angularCompilerOptions": {
     "compilationMode": "partial"
diff --git a/projects/aca-settings/ng-package.json b/projects/aca-settings/ng-package.json
new file mode 100644
index 000000000..bd5547c88
--- /dev/null
+++ b/projects/aca-settings/ng-package.json
@@ -0,0 +1,8 @@
+{
+  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
+  "dest": "../../dist/@alfresco/aca-settings",
+  "lib": {
+    "entryFile": "src/public-api.ts"
+  },
+  "assets": ["assets"]
+}
diff --git a/projects/aca-settings/package.json b/projects/aca-settings/package.json
new file mode 100644
index 000000000..87f8dd283
--- /dev/null
+++ b/projects/aca-settings/package.json
@@ -0,0 +1,11 @@
+{
+  "name": "@alfresco/aca-settings",
+  "version": "0.0.1",
+  "peerDependencies": {
+    "@angular/common": "^14.1.0",
+    "@angular/core": "^14.1.0"
+  },
+  "dependencies": {
+    "tslib": "^2.3.0"
+  }
+}
diff --git a/projects/aca-settings/tsconfig.lib.prod.json b/projects/aca-settings/tsconfig.lib.prod.json
index 06de549e1..1715cbee8 100644
--- a/projects/aca-settings/tsconfig.lib.prod.json
+++ b/projects/aca-settings/tsconfig.lib.prod.json
@@ -2,7 +2,12 @@
 {
   "extends": "./tsconfig.lib.json",
   "compilerOptions": {
-    "declarationMap": false
+    "declarationMap": false,
+    "paths": {
+      "@alfresco/aca-shared": ["dist/@alfresco/aca-shared"],
+      "@alfresco/aca-shared/store": ["dist/@alfresco/aca-shared/store"],
+      "@alfresco/aca-shared/rules": ["dist/@alfresco/aca-shared/rules"]
+    }
   },
   "angularCompilerOptions": {
     "compilationMode": "partial"
diff --git a/scripts/ci/npm/publish-libs.sh b/scripts/ci/npm/publish-libs.sh
index ec216eb4f..63a72fb98 100755
--- a/scripts/ci/npm/publish-libs.sh
+++ b/scripts/ci/npm/publish-libs.sh
@@ -41,6 +41,8 @@ echo -e "Branch is '$TRAVIS_BRANCH', therefore publish with '$TAG_NPM' tag\n"
 PROJECTS=(
     'aca-shared'
     'adf-office-services-ext'
+    'aca-settings'
+    'aca-about'
 );
 
 for PROJECT in "${PROJECTS[@]}"