mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-04-16 22:24:49 +00:00
chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
chore: migrate to Angular 20, TypeScript 5.9, and supporting packages This commit migrates the Nx monorepo from Angular 19 to Angular 20 and updates all related dependencies to their compatible versions. - @angular/core: 19.2.18 → 20.3.9 - @angular/material: 19.2.19 → 20.2.14 - @angular/cdk: 19.2.19 → 20.2.14 - @angular/material-date-fns-adapter: 19.2.19 → 20.2.14 - typescript: 5.8.3 → 5.9.3 - ng-packagr: 19.2.2 → 20.3.2 - @angular-devkit/build-angular: 19.2.19 → 20.3.16 - @angular-devkit/architect: 0.1902.19 → 0.2003.16 - @angular-devkit/core: 19.2.19 → 20.3.16 - @angular-devkit/schematics: 19.2.19 → 20.3.16 - @schematics/angular: 19.2.7 → 20.3.16 - @angular-eslint/eslint-plugin: 19.3.0 → 20.7.0 - @angular-eslint/eslint-plugin-template: 19.3.0 → 20.7.0 - @angular-eslint/template-parser: 19.3.0 → 20.7.0 - @typescript-eslint/eslint-plugin: 6.21.0 → 8.55.0 - @typescript-eslint/parser: 6.21.0 → 8.55.0 - @typescript-eslint/typescript-estree: 8.41.0 → 8.55.0 - @typescript-eslint/utils: ^8.51.0 → 8.55.0 - nx: 22.4.1 → 22.5.1 - @nx/angular: 22.1.3 → 22.5.1 - @nx/eslint-plugin: 22.3.3 → 22.5.1 - @nx/js: 22.1.3 → 22.5.1 - @nx/node: 22.1.3 → 22.5.1 - @nx/storybook: ^20.8.4 → 22.5.1 - @nx/workspace: 22.4.5 → 22.5.1 - @nx/webpack: 22.3.3 → 22.5.1 - storybook: ^10.2.0 → 10.2.8 - @storybook/angular: ^10.2.0 → 10.2.8 - @storybook/addon-themes: ^10.2.0 → 10.2.8 1. **PortalInjector Removal (Angular CDK 20)** - Replaced PortalInjector usage with Injector.create() - Updated context-menu-overlay.service.ts to use new API 2. **ESLint Configuration** - Removed deprecated @typescript-eslint/brace-style rule - This rule was removed in @typescript-eslint v8 All libraries build successfully: - ✅ js-api - ✅ extensions - ✅ core - ✅ content-services - ✅ process-services - ✅ process-services-cloud - ✅ insights Dependencies were installed using npm install --legacy-peer-deps due to peer dependency conflicts with @mat-datetimepicker/core which requires Angular CDK ^19.0.0 but we are using 20.2.14. - ESLint warnings about @angular-eslint/prefer-inject are expected - this is a new recommendation in Angular 20 to use inject() function instead of constructor injection. These can be addressed in a follow-up PR. chore: migrate to Angular 20, TypeScript 5.9, and supporting packages This commit migrates the Nx monorepo from Angular 19 to Angular 20 and updates all related dependencies to their compatible versions. - @angular/core: 19.2.18 → 20.3.9 - @angular/material: 19.2.19 → 20.2.14 - @angular/cdk: 19.2.19 → 20.2.14 - @angular/material-date-fns-adapter: 19.2.19 → 20.2.14 - typescript: 5.8.3 → 5.9.3 - ng-packagr: 19.2.2 → 20.3.2 - @angular-devkit/build-angular: 19.2.19 → 20.3.16 - @angular-devkit/architect: 0.1902.19 → 0.2003.16 - @angular-devkit/core: 19.2.19 → 20.3.16 - @angular-devkit/schematics: 19.2.19 → 20.3.16 - @schematics/angular: 19.2.7 → 20.3.16 - @angular-eslint/eslint-plugin: 19.3.0 → 20.7.0 - @angular-eslint/eslint-plugin-template: 19.3.0 → 20.7.0 - @angular-eslint/template-parser: 19.3.0 → 20.7.0 - @typescript-eslint/eslint-plugin: 6.21.0 → 8.55.0 - @typescript-eslint/parser: 6.21.0 → 8.55.0 - @typescript-eslint/typescript-estree: 8.41.0 → 8.55.0 - @typescript-eslint/utils: ^8.51.0 → 8.55.0 - nx: 22.4.1 → 22.5.1 - @nx/angular: 22.1.3 → 22.5.1 - @nx/eslint-plugin: 22.3.3 → 22.5.1 - @nx/js: 22.1.3 → 22.5.1 - @nx/node: 22.1.3 → 22.5.1 - @nx/storybook: ^20.8.4 → 22.5.1 - @nx/workspace: 22.4.5 → 22.5.1 - @nx/webpack: 22.3.3 → 22.5.1 - storybook: ^10.2.0 → 10.2.8 - @storybook/angular: ^10.2.0 → 10.2.8 - @storybook/addon-themes: ^10.2.0 → 10.2.8 1. **PortalInjector Removal (Angular CDK 20)** - Replaced PortalInjector usage with Injector.create() - Updated context-menu-overlay.service.ts to use new API 2. **ESLint Configuration** - Removed deprecated @typescript-eslint/brace-style rule - This rule was removed in @typescript-eslint v8 All libraries build successfully: - ✅ js-api - ✅ extensions - ✅ core - ✅ content-services - ✅ process-services - ✅ process-services-cloud - ✅ insights Dependencies were installed using npm install --legacy-peer-deps due to peer dependency conflicts with @mat-datetimepicker/core which requires Angular CDK ^19.0.0 but we are using 20.2.14. - ESLint warnings about @angular-eslint/prefer-inject are expected - this is a new recommendation in Angular 20 to use inject() function instead of constructor injection. These can be addressed in a follow-up PR. To fix these automatically, run: ng generate @angular/core:inject --path=lib fix: resolve peer dependency conflicts for CI/CD - Update @mat-datetimepicker/core from 15.0.2 to 16.0.1 (supports Angular 20) - Update webpack override to 5.104.1 for consistency - Add .npmrc with legacy-peer-deps=true for npm ci compatibility - Fixes npm ci failures in CI/CD pipeline fix: update webpack to 5.105.0 for Storybook compatibility - Align webpack version with @angular-devkit/build-angular bundled version - Fixes Storybook compilation error with webpack instance mismatch - Removes unnecessary webpack overrides chore: finalize Angular 20 migration and improve migration prompt - Marked all migration tasks as completed in the migration plan. - Added a comprehensive summary of the migration process, including phases, completed tasks, and known issues. - Introduced an improved migration prompt that addresses critical considerations and provides a detailed migration strategy for Angular 20 and related packages. fix: update migration prompt and tests for Angular 20 breaking changes - Enhanced migration prompt with specific instructions for handling Angular CDK Directionality API changes and removal of ng-reflect-* attributes. - Updated unit tests to replace deprecated ng-reflect-* attribute checks with appropriate Angular testing patterns. - Adjusted user preferences service to utilize the new directionality API method for setting text direction. fix: enhance ImgViewerComponent to handle cleanup and prevent errors after destruction - Added a `destroyed` flag to manage component lifecycle and prevent operations on a destroyed instance. - Implemented `afterEach` hooks in tests to ensure proper fixture cleanup. - Updated key event handlers and methods to check for the `destroyed` state before executing actions, improving stability and preventing errors. feat: update ESLint configuration to include @angular-eslint/prefer-inject rule - Added the @angular-eslint/prefer-inject rule to .eslintrc.json files in content-services, process-services, and process-services-cloud, promoting the use of the inject() function for dependency injection. - Made minor adjustments to comments in search-logical-filter.component.ts for clarity. chore: update ESLint configuration to include @angular-eslint/prefer-inject rule - Added the @angular-eslint/prefer-inject rule to .eslintrc.json files in extensions, insights, and js-api, promoting the use of the inject() function for dependency injection. - Removed unnecessary eslint-disable comments in process-list-cloud.component.ts and base-task-list-cloud.component.ts for cleaner code. remove unnecessary changes remove useless changes cleanup useless changes remove useless changes Update package.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> chore: update version of @ngx-translate/core to 17.0.0 in package.json and package-lock.json Update package.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Update package.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Update .npmrc Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> chore: upgrade apollo-angular and jest packages to support Angular 20 - Upgrade apollo-angular from 10.0.3 to 13.0.0 - Upgrade @apollo/client from 3.13.1 to ^4.0.1 - Upgrade jest packages to v30 (jest, jest-environment-jsdom) - Upgrade jest-preset-angular from 14.4.2 to 16.1.1 - Add overrides for Angular 20 peer dependency compatibility chore: downgrade @apollo/client and apollo-angular to compatible versions chore: downgrade @apollo/client and apollo-angular to compatible versions chore: remove unused configuration options from jest and tsconfig chore: refactor window.location mock in oauth2 tests for improved clarity and functionality chore: enhance oauth2Auth tests and improve hash handling logic chore: remove @typescript-eslint/brace-style rule from ESLint configuration chore: add prefer-optional-chain rule to ESLint configuration chore: update ESLint rules for optional chaining and refactor type definitions chore: refactor tests to use TestBed for dependency injection in FileViewer and ProcessFormRendering services chore: update AttachFileWidgetComponent to ensure early return after download chore: update AttachFileWidgetComponent to ensure early return after download chore: update unselectFacetBucket method to use optional chaining for safer property access
This commit is contained in:
committed by
Aleksander Sklorz
parent
74252797b7
commit
fe9b69c2b5
@@ -100,7 +100,7 @@ describe('SearchChipListComponent', () => {
|
||||
});
|
||||
|
||||
it('should remove the entry upon remove button click', async () => {
|
||||
spyOn(searchFacetFiltersService, 'unselectFacetBucket').and.callThrough();
|
||||
spyOn(searchFacetFiltersService, 'unselectFacetBucket').and.stub();
|
||||
|
||||
searchFacetFiltersService.selectedBuckets = [
|
||||
{
|
||||
|
||||
@@ -394,7 +394,7 @@ export class SearchFacetFiltersService {
|
||||
unselectFacetBucket(facetField: FacetField, bucket: FacetFieldBucket) {
|
||||
if (bucket) {
|
||||
bucket.checked = false;
|
||||
this.queryBuilder.removeUserFacetBucket(facetField.field, bucket);
|
||||
this.queryBuilder.removeUserFacetBucket(facetField?.field, bucket);
|
||||
this.updateSelectedBuckets();
|
||||
this.queryBuilder.update();
|
||||
}
|
||||
|
||||
@@ -135,7 +135,8 @@ export class UserPreferencesService {
|
||||
|
||||
this.select('textOrientation').subscribe((direction: Direction) => {
|
||||
renderer.setAttribute(this.document.body, 'dir', direction);
|
||||
(this.directionality as any).value = direction;
|
||||
this.directionality.valueSignal.set(direction);
|
||||
this.directionality.change.emit(direction);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ export default {
|
||||
preset: '../../jest.preset.js',
|
||||
testEnvironment: 'jsdom',
|
||||
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
|
||||
collectCoverage: true,
|
||||
coverageReporters: ['html', ['text-summary', { file: 'summary.txt' }], 'text-summary'],
|
||||
coverageDirectory: '../../coverage/js-api',
|
||||
moduleNameMapper: {
|
||||
|
||||
@@ -437,7 +437,7 @@ export class Oauth2Auth extends AlfrescoApiClient {
|
||||
|
||||
if (!externalHash) {
|
||||
hash = decodeURIComponent(window.location.hash);
|
||||
if (!this.startWithHashRoute(hash)) {
|
||||
if (hash && !this.startWithHashRoute(hash)) {
|
||||
window.location.hash = '';
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -15,5 +15,4 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
|
||||
export const isBrowser = (): boolean => typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
||||
|
||||
@@ -41,26 +41,24 @@ describe('Oauth2 test', () => {
|
||||
});
|
||||
|
||||
alfrescoJsApi.storage.setStorage(mockStorage);
|
||||
Object.defineProperty(window, 'location', {
|
||||
writable: true,
|
||||
value: {
|
||||
ancestorOrigins: null,
|
||||
hash: null,
|
||||
host: 'dummy.com',
|
||||
port: '80',
|
||||
protocol: 'http:',
|
||||
hostname: 'dummy.com',
|
||||
href: 'http://localhost/',
|
||||
origin: 'dummy.com',
|
||||
pathname: null,
|
||||
search: null,
|
||||
assign: (url: string) => {
|
||||
window.location.href = url;
|
||||
},
|
||||
reload: null,
|
||||
replace: null
|
||||
}
|
||||
});
|
||||
delete (window as any).location;
|
||||
(window as any).location = {
|
||||
ancestorOrigins: null,
|
||||
hash: null,
|
||||
host: 'dummy.com',
|
||||
port: '80',
|
||||
protocol: 'http:',
|
||||
hostname: 'dummy.com',
|
||||
href: 'http://localhost/',
|
||||
origin: 'dummy.com',
|
||||
pathname: null,
|
||||
search: null,
|
||||
assign: jest.fn((url: string) => {
|
||||
window.location.href = url;
|
||||
}),
|
||||
reload: jest.fn(),
|
||||
replace: jest.fn()
|
||||
};
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -189,7 +187,6 @@ describe('Oauth2 test', () => {
|
||||
});
|
||||
|
||||
it('should refresh token when the login not use the implicitFlow ', (done) => {
|
||||
jest.spyOn(window, 'document', 'get').mockReturnValueOnce(undefined);
|
||||
oauth2Mock.get200Response();
|
||||
|
||||
const oauth2Auth = new Oauth2Auth(
|
||||
@@ -208,6 +205,10 @@ describe('Oauth2 test', () => {
|
||||
alfrescoJsApi
|
||||
);
|
||||
|
||||
jest.spyOn(oauth2Auth as any, 'silentRefresh').mockImplementation(function (this: any) {
|
||||
this.pollingRefreshToken();
|
||||
});
|
||||
|
||||
let calls = 0;
|
||||
oauth2Auth.refreshToken = () => {
|
||||
calls++;
|
||||
@@ -224,7 +225,6 @@ describe('Oauth2 test', () => {
|
||||
});
|
||||
|
||||
it('should not hang the app also if the logout is missing', (done) => {
|
||||
jest.spyOn(window, 'document', 'get').mockReturnValueOnce(undefined);
|
||||
oauth2Mock.get200Response();
|
||||
|
||||
const oauth2Auth = new Oauth2Auth(
|
||||
@@ -244,6 +244,10 @@ describe('Oauth2 test', () => {
|
||||
alfrescoJsApi
|
||||
);
|
||||
|
||||
jest.spyOn(oauth2Auth as any, 'silentRefresh').mockImplementation(function (this: any) {
|
||||
this.pollingRefreshToken();
|
||||
});
|
||||
|
||||
let calls = 0;
|
||||
oauth2Auth.refreshToken = () => {
|
||||
calls++;
|
||||
|
||||
@@ -26,26 +26,24 @@ describe('Oauth2 Implicit flow test', () => {
|
||||
alfrescoJsApi = new AlfrescoApi({
|
||||
hostEcm: ''
|
||||
});
|
||||
Object.defineProperty(window, 'location', {
|
||||
writable: true,
|
||||
value: {
|
||||
ancestorOrigins: null,
|
||||
hash: '',
|
||||
host: 'dummy.com',
|
||||
port: '80',
|
||||
protocol: 'http:',
|
||||
hostname: 'dummy.com',
|
||||
href: 'http://localhost/',
|
||||
origin: 'dummy.com',
|
||||
pathname: null,
|
||||
search: null,
|
||||
assign: (url: string) => {
|
||||
window.location.href = url;
|
||||
},
|
||||
reload: null,
|
||||
replace: null
|
||||
}
|
||||
});
|
||||
delete (window as any).location;
|
||||
(window as any).location = {
|
||||
ancestorOrigins: null,
|
||||
hash: '',
|
||||
host: 'dummy.com',
|
||||
port: '80',
|
||||
protocol: 'http:',
|
||||
hostname: 'dummy.com',
|
||||
href: 'http://localhost/',
|
||||
origin: 'dummy.com',
|
||||
pathname: null,
|
||||
search: null,
|
||||
assign: jest.fn((url: string) => {
|
||||
window.location.href = url;
|
||||
}),
|
||||
reload: jest.fn(),
|
||||
replace: jest.fn()
|
||||
};
|
||||
});
|
||||
|
||||
it('should throw an error if redirectUri is not present', (done) => {
|
||||
@@ -84,8 +82,8 @@ describe('Oauth2 Implicit flow test', () => {
|
||||
alfrescoJsApi
|
||||
);
|
||||
|
||||
oauth2Auth.on('implicit_redirect', () => {
|
||||
assert.equal(window.location.href.includes('https://myOauthUrl:30081/auth/realms/springboot/protocol/openid-connect/auth?'), true);
|
||||
oauth2Auth.on('implicit_redirect', (href: string) => {
|
||||
assert.equal(href.includes('https://myOauthUrl:30081/auth/realms/springboot/protocol/openid-connect/auth?'), true);
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -110,8 +108,8 @@ describe('Oauth2 Implicit flow test', () => {
|
||||
let setItemCalled = false;
|
||||
alfrescoJsApi.storage.setItem = () => (setItemCalled = true);
|
||||
|
||||
oauth2Auth.on('implicit_redirect', () => {
|
||||
assert.equal(window.location.href.includes('https://myOauthUrl:30081/auth/realms/springboot/protocol/openid-connect/auth?'), true);
|
||||
oauth2Auth.on('implicit_redirect', (href: string) => {
|
||||
assert.equal(href.includes('https://myOauthUrl:30081/auth/realms/springboot/protocol/openid-connect/auth?'), true);
|
||||
assert.equal(setItemCalled, true);
|
||||
done();
|
||||
});
|
||||
@@ -168,8 +166,8 @@ describe('Oauth2 Implicit flow test', () => {
|
||||
let lastValues: [string, any];
|
||||
alfrescoJsApi.storage.setItem = (key, value) => (lastValues = [key, value]);
|
||||
|
||||
oauth2Auth.on('implicit_redirect', () => {
|
||||
assert.equal(window.location.href.includes('https://myOauthUrl:30081/auth/realms/springboot/protocol/openid-connect/auth?'), true);
|
||||
oauth2Auth.on('implicit_redirect', (href: string) => {
|
||||
assert.equal(href.includes('https://myOauthUrl:30081/auth/realms/springboot/protocol/openid-connect/auth?'), true);
|
||||
assert.deepEqual(lastValues, ['loginFragment', '/redirect-path&session_state=eqfqwfqwf']);
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -17,12 +17,11 @@
|
||||
|
||||
import { FileViewerWidgetComponent } from './file-viewer.widget';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { FormFieldModel, FormModel, FormService, NoopAuthModule, NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { FormFieldModel, FormModel, NoopAuthModule, NoopTranslateModule } from '@alfresco/adf-core';
|
||||
|
||||
describe('FileViewerWidgetComponent', () => {
|
||||
const fakeForm = new FormModel();
|
||||
let widget: FileViewerWidgetComponent;
|
||||
let formServiceStub: Partial<FormService>;
|
||||
let fixture: ComponentFixture<FileViewerWidgetComponent>;
|
||||
|
||||
const fakePngAnswer: any = {
|
||||
@@ -42,11 +41,9 @@ describe('FileViewerWidgetComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [NoopTranslateModule, NoopAuthModule, FileViewerWidgetComponent],
|
||||
providers: [{ provide: FormService, useValue: formServiceStub }]
|
||||
imports: [NoopTranslateModule, NoopAuthModule, FileViewerWidgetComponent]
|
||||
});
|
||||
|
||||
formServiceStub = TestBed.inject(FormService);
|
||||
fixture = TestBed.createComponent(FileViewerWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { ProcessFormRenderingService } from './process-form-rendering.service';
|
||||
import { FormFieldModel, FormFieldTypes } from '@alfresco/adf-core';
|
||||
import { FormFieldModel, FormFieldTypes, FormService } from '@alfresco/adf-core';
|
||||
import { AttachFolderWidgetComponent } from './widgets/content-widget/attach-folder-widget.component';
|
||||
import { DropdownWidgetComponent } from './widgets/dropdown/dropdown.widget';
|
||||
import { DynamicTableWidgetComponent } from './widgets/dynamic-table/dynamic-table.widget';
|
||||
@@ -27,13 +27,16 @@ import { TypeaheadWidgetComponent } from './widgets/typeahead/typeahead.widget';
|
||||
import { DocumentWidgetComponent } from './widgets/document/document.widget';
|
||||
import { AttachFileWidgetComponent } from './widgets/content-widget/attach-file-widget.component';
|
||||
import { FileViewerWidgetComponent } from './widgets/file-viewer/file-viewer.widget';
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
describe('ProcessFormRenderingService', () => {
|
||||
|
||||
let service: ProcessFormRenderingService;
|
||||
|
||||
beforeEach(() => {
|
||||
service = new ProcessFormRenderingService();
|
||||
TestBed.configureTestingModule({
|
||||
providers: [ProcessFormRenderingService, FormService]
|
||||
});
|
||||
service = TestBed.inject(ProcessFormRenderingService);
|
||||
});
|
||||
|
||||
it('should resolve Upload field as Upload widget', () => {
|
||||
@@ -106,5 +109,4 @@ describe('ProcessFormRenderingService', () => {
|
||||
const type = resolver(null);
|
||||
expect(type).toBe(FileViewerWidgetComponent);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -166,6 +166,7 @@ export class AttachFileWidgetComponent extends UploadWidgetComponent implements
|
||||
const nodeUrl = this.contentService.getContentUrl(nodeUploaded.id);
|
||||
this.downloadService.downloadUrl(nodeUrl, file.name);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (file.sourceId) {
|
||||
const sourceHost = this.findSource(file.source);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { FileViewerWidgetComponent } from './file-viewer.widget';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { FormModel, FormService, FormFieldModel, RedirectAuthService } from '@alfresco/adf-core';
|
||||
import { EMPTY, of } from 'rxjs';
|
||||
import { EMPTY, of, Subject } from 'rxjs';
|
||||
|
||||
describe('FileViewerWidgetComponent', () => {
|
||||
const fakeForm = new FormModel();
|
||||
@@ -42,6 +42,11 @@ describe('FileViewerWidgetComponent', () => {
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
formServiceStub = {
|
||||
formEvents: new Subject(),
|
||||
formRulesEvent: new Subject()
|
||||
};
|
||||
|
||||
TestBed.configureTestingModule({
|
||||
imports: [FileViewerWidgetComponent],
|
||||
providers: [
|
||||
@@ -49,8 +54,6 @@ describe('FileViewerWidgetComponent', () => {
|
||||
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY, onTokenReceived: of() } }
|
||||
]
|
||||
});
|
||||
|
||||
formServiceStub = TestBed.inject(FormService);
|
||||
fixture = TestBed.createComponent(FileViewerWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
});
|
||||
|
||||
76
package.json
76
package.json
@@ -38,20 +38,20 @@
|
||||
"process services-cloud"
|
||||
],
|
||||
"dependencies": {
|
||||
"@angular/animations": "19.2.20",
|
||||
"@angular/cdk": "19.2.19",
|
||||
"@angular/common": "19.2.20",
|
||||
"@angular/compiler": "19.2.20",
|
||||
"@angular/core": "19.2.20",
|
||||
"@angular/forms": "19.2.20",
|
||||
"@angular/material": "19.2.19",
|
||||
"@angular/material-date-fns-adapter": "19.2.19",
|
||||
"@angular/platform-browser": "19.2.20",
|
||||
"@angular/platform-browser-dynamic": "19.2.20",
|
||||
"@angular/router": "19.2.20",
|
||||
"@angular/animations": "20.3.9",
|
||||
"@angular/cdk": "20.2.14",
|
||||
"@angular/common": "20.3.9",
|
||||
"@angular/compiler": "20.3.9",
|
||||
"@angular/core": "20.3.9",
|
||||
"@angular/forms": "20.3.9",
|
||||
"@angular/material": "20.2.14",
|
||||
"@angular/material-date-fns-adapter": "20.2.14",
|
||||
"@angular/platform-browser": "20.3.9",
|
||||
"@angular/platform-browser-dynamic": "20.3.9",
|
||||
"@angular/router": "20.3.9",
|
||||
"@apollo/client": "3.13.1",
|
||||
"@cspell/eslint-plugin": "9.4.0",
|
||||
"@mat-datetimepicker/core": "15.0.2",
|
||||
"@mat-datetimepicker/core": "16.0.1",
|
||||
"@ngx-translate/core": "^17.0.0",
|
||||
"angular-oauth2-oidc": "17.0.2",
|
||||
"angular-oauth2-oidc-jwks": "^17.0.2",
|
||||
@@ -76,24 +76,24 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@alfresco/eslint-plugin-eslint-angular": "file:lib/eslint-angular",
|
||||
"@angular-devkit/architect": "0.1902.22",
|
||||
"@angular-devkit/build-angular": "19.2.22",
|
||||
"@angular-devkit/core": "19.2.22",
|
||||
"@angular-devkit/schematics": "19.2.22",
|
||||
"@angular-eslint/eslint-plugin": "19.8.1",
|
||||
"@angular-eslint/eslint-plugin-template": "19.8.1",
|
||||
"@angular-eslint/template-parser": "19.8.1",
|
||||
"@angular/compiler-cli": "19.2.20",
|
||||
"@angular-devkit/architect": "0.2003.16",
|
||||
"@angular-devkit/build-angular": "20.3.16",
|
||||
"@angular-devkit/core": "20.3.16",
|
||||
"@angular-devkit/schematics": "20.3.16",
|
||||
"@angular-eslint/eslint-plugin": "20.7.0",
|
||||
"@angular-eslint/eslint-plugin-template": "20.7.0",
|
||||
"@angular-eslint/template-parser": "20.7.0",
|
||||
"@angular/compiler-cli": "20.3.9",
|
||||
"@chromatic-com/storybook": "4.1.3",
|
||||
"@nx/angular": "22.6.3",
|
||||
"@nx/eslint-plugin": "22.6.3",
|
||||
"@nx/js": "22.6.3",
|
||||
"@nx/node": "22.6.3",
|
||||
"@nx/storybook": "^22.6.3",
|
||||
"@nx/workspace": "22.4.5",
|
||||
"@schematics/angular": "19.2.22",
|
||||
"@storybook/addon-themes": "^10.2.0",
|
||||
"@storybook/angular": "^10.2.0",
|
||||
"@nx/workspace": "22.5.1",
|
||||
"@schematics/angular": "20.3.16",
|
||||
"@storybook/addon-themes": "10.2.8",
|
||||
"@storybook/angular": "10.2.8",
|
||||
"@types/ejs": "^3.1.5",
|
||||
"@types/jasmine": "4.0.3",
|
||||
"@types/jasminewd2": "~2.0.2",
|
||||
@@ -105,8 +105,8 @@
|
||||
"@types/superagent": "^4.1.22",
|
||||
"@typescript-eslint/eslint-plugin": "8.57.2",
|
||||
"@typescript-eslint/parser": "8.57.2",
|
||||
"@typescript-eslint/typescript-estree": "8.41.0",
|
||||
"@typescript-eslint/utils": "^8.51.0",
|
||||
"@typescript-eslint/typescript-estree": "8.55.0",
|
||||
"@typescript-eslint/utils": "8.55.0",
|
||||
"ajv": "^8.18.0",
|
||||
"dotenv": "16.4.7",
|
||||
"ejs": "^3.1.10",
|
||||
@@ -127,9 +127,9 @@
|
||||
"jasmine-core": "5.13.0",
|
||||
"jasmine-reporters": "^2.5.2",
|
||||
"jasmine-spec-reporter": "7.0.0",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"jest-preset-angular": "14.4.2",
|
||||
"jest": "^30.0.0",
|
||||
"jest-environment-jsdom": "^30.0.0",
|
||||
"jest-preset-angular": "16.1.1",
|
||||
"jsdom": "^27.4.0",
|
||||
"karma": "6.4.4",
|
||||
"karma-chrome-launcher": "~3.2.0",
|
||||
@@ -142,25 +142,27 @@
|
||||
"lint-staged": "15.5.2",
|
||||
"mocha": "11.7.5",
|
||||
"moment": "^2.29.4",
|
||||
"ng-packagr": "19.2.2",
|
||||
"ng-packagr": "20.3.2",
|
||||
"nock": "13.5.5",
|
||||
"nx": "22.4.1",
|
||||
"nx": "22.5.1",
|
||||
"prettier": "3.6.2",
|
||||
"react": "^19.2.4",
|
||||
"react-dom": "^19.2.4",
|
||||
"rimraf": "^6.1.2",
|
||||
"sass-loader": "16.0.7",
|
||||
"spdx-license-list": "^6.11.0",
|
||||
"storybook": "^10.2.13",
|
||||
"storybook": "10.2.8",
|
||||
"stylelint": "16.20.0",
|
||||
"stylelint-config-standard-scss": "^13.1.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "5.8.3",
|
||||
"typescript": "5.9.3",
|
||||
"webpack": "5.105.3"
|
||||
},
|
||||
"overrides": {
|
||||
"@storybook/angular": {
|
||||
"webpack": "5.105.3"
|
||||
"apollo-angular": {
|
||||
"@angular/core": "^20.0.0"
|
||||
},
|
||||
"jest-preset-angular": {
|
||||
"@angular/core": "^20.0.0",
|
||||
"@angular/compiler-cli": "^20.0.0"
|
||||
}
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
"sourceMap": true,
|
||||
"declaration": false,
|
||||
"moduleResolution": "node",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"skipLibCheck": true,
|
||||
"noUnusedLocals": true,
|
||||
|
||||
Reference in New Issue
Block a user