@eui/cli 21.0.0-next.2 → 21.0.0-next.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -122,6 +122,22 @@
122
122
  }
123
123
  },
124
124
  "defaultConfiguration": "development"
125
+ },
126
+ "test": {
127
+ "builder": "@angular/build:unit-test",
128
+ "options": {
129
+ "tsConfig": "src/tsconfig.spec.json"
130
+ }
131
+ },
132
+ "lint": {
133
+ "builder": "@angular-eslint/builder:lint",
134
+ "options": {
135
+ "lintFilePatterns": [
136
+ "src/**/*.ts",
137
+ "src/**/*.html"
138
+ ],
139
+ "eslintConfig": "eslint.config.js"
140
+ }
125
141
  }
126
142
  }
127
143
  }
@@ -0,0 +1,43 @@
1
+ // @ts-check
2
+ const eslint = require("@eslint/js");
3
+ const tseslint = require("typescript-eslint");
4
+ const angular = require("angular-eslint");
5
+
6
+ module.exports = tseslint.config(
7
+ {
8
+ files: ["**/*.ts"],
9
+ extends: [
10
+ eslint.configs.recommended,
11
+ ...tseslint.configs.recommended,
12
+ ...tseslint.configs.stylistic,
13
+ ...angular.configs.tsRecommended,
14
+ ],
15
+ processor: angular.processInlineTemplates,
16
+ rules: {
17
+ "@angular-eslint/directive-selector": [
18
+ "error",
19
+ {
20
+ type: "attribute",
21
+ prefix: "app",
22
+ style: "camelCase",
23
+ },
24
+ ],
25
+ "@angular-eslint/component-selector": [
26
+ "error",
27
+ {
28
+ type: "element",
29
+ prefix: "app",
30
+ style: "kebab-case",
31
+ },
32
+ ],
33
+ },
34
+ },
35
+ {
36
+ files: ["**/*.html"],
37
+ extends: [
38
+ ...angular.configs.templateRecommended,
39
+ ...angular.configs.templateAccessibility,
40
+ ],
41
+ rules: {},
42
+ },
43
+ );
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eui-angular-app",
3
- "version": "21.0.0-next.2",
3
+ "version": "21.0.0-next.20",
4
4
  "license": "EUPL-1.1",
5
5
  "scripts": {
6
6
  "ng": "ng",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "private": true,
23
23
  "dependencies": {
24
- "@eui/deps-base": "21.0.0-next.2"
24
+ "@eui/deps-base": "21.0.0-next.20"
25
25
  },
26
26
  "devDependencies": {
27
27
  "npm-run-all": "4.1.5",
@@ -29,7 +29,12 @@
29
29
  "nodemon": "2.0.22",
30
30
  "lowdb": "1.0.0",
31
31
  "body-parser": "1.20.3",
32
- "express": "4.21.2"
32
+ "express": "4.21.2",
33
+ "typescript-eslint": "8.46.3",
34
+ "angular-eslint": "20.6.0",
35
+ "eslint": "^9.39.0",
36
+ "vitest": "^4.0.0",
37
+ "jsdom": "^27.2.0"
33
38
  },
34
39
  "resolutions": {
35
40
  "semver": ">=7.5.2",
@@ -4,9 +4,11 @@ import {CONFIG_TOKEN, I18nService, UserService} from '@eui/core';
4
4
  import {EuiAppConfig} from '@eui/core';
5
5
  import {of} from 'rxjs';
6
6
  import {AppStarterService} from './app-starter.service';
7
- import SpyObj = jasmine.SpyObj;
8
7
  import { EuiServiceStatus } from '@eui/base';
9
8
  import { provideHttpClient, withInterceptorsFromDi } from "@angular/common/http";
9
+ import { describe, it, beforeEach, expect, vi } from 'vitest';
10
+
11
+ type SpyObj<T> = { [K in keyof T]: T[K] extends (...args: any[]) => any ? ReturnType<typeof vi.fn> : T[K] };
10
12
 
11
13
  describe('AppStarterService', () => {
12
14
  let service: AppStarterService;
@@ -16,8 +18,8 @@ describe('AppStarterService', () => {
16
18
  let configMock: EuiAppConfig;
17
19
 
18
20
  beforeEach(() => {
19
- userServiceMock = jasmine.createSpyObj('UserService', ['init']);
20
- i18nServiceMock = jasmine.createSpyObj('I18nService', ['init']);
21
+ userServiceMock = { init: vi.fn() } as SpyObj<UserService>;
22
+ i18nServiceMock = { init: vi.fn() } as SpyObj<I18nService>;
21
23
  configMock = {global: {}, modules: {core: {base: 'localhost:3000', userDetails: 'dummy'}}};
22
24
 
23
25
  TestBed.configureTestingModule({
@@ -40,8 +42,8 @@ describe('AppStarterService', () => {
40
42
  });
41
43
 
42
44
  it('should call start method', () => {
43
- userServiceMock.init.and.returnValue(of({ } as EuiServiceStatus));
44
- i18nServiceMock.init.and.returnValue(of({ } as EuiServiceStatus));
45
+ vi.mocked(userServiceMock.init).mockReturnValue(of({ } as EuiServiceStatus));
46
+ vi.mocked(i18nServiceMock.init).mockReturnValue(of({ } as EuiServiceStatus));
45
47
  service.start().subscribe(() => {
46
48
  expect(userServiceMock.init).toHaveBeenCalled();
47
49
  expect(i18nServiceMock.init).toHaveBeenCalled();
@@ -49,7 +51,7 @@ describe('AppStarterService', () => {
49
51
  });
50
52
 
51
53
  it('should call initUserService method', () => {
52
- userServiceMock.init.and.returnValue(of({ } as EuiServiceStatus));
54
+ vi.mocked(userServiceMock.init).mockReturnValue(of({ } as EuiServiceStatus));
53
55
  service.initUserService().subscribe(() => {
54
56
  expect(userServiceMock.init).toHaveBeenCalled();
55
57
  });
@@ -10,17 +10,17 @@
10
10
  <eui-user-profile isShowAvatarInitials>
11
11
  <eui-user-profile-menu>
12
12
  <eui-user-profile-menu-item>
13
- <eui-icon-svg icon="person:outline"/>{{ 'eui.my-profile-informations' | translate }}
13
+ <eui-icon-svg icon="user:regular"/>{{ 'eui.my-profile-informations' | translate }}
14
14
  </eui-user-profile-menu-item>
15
15
  <eui-user-profile-menu-item>
16
- <eui-icon-svg icon="log-out:outline"/>{{ 'eui.sign-out' | translate }}
16
+ <eui-icon-svg icon="sign-out:regular"/>{{ 'eui.sign-out' | translate }}
17
17
  </eui-user-profile-menu-item>
18
18
  </eui-user-profile-menu>
19
19
  </eui-user-profile>
20
20
  </eui-toolbar-item>
21
21
 
22
22
  <eui-toolbar-item>
23
- <eui-notifications [count]="notificationItems?.length" [items]="notificationItems"></eui-notifications>
23
+ <eui-notifications [count]="notificationItems.length" [items]="notificationItems" />
24
24
  </eui-toolbar-item>
25
25
  </eui-toolbar-items>
26
26
 
@@ -10,7 +10,9 @@ import { CONFIG_TOKEN, I18nService, I18nState, UserService} from '@eui/core';
10
10
  import { EuiAppConfig } from '@eui/core';
11
11
  import { Observable, of } from 'rxjs';
12
12
  import { TranslateModule } from '@ngx-translate/core';
13
- import SpyObj = jasmine.SpyObj;
13
+ import { describe, it, beforeEach, expect, vi } from 'vitest';
14
+
15
+ type SpyObj<T> = { [K in keyof T]: T[K] extends (...args: any[]) => any ? ReturnType<typeof vi.fn> : T[K] };
14
16
 
15
17
  describe('AppComponent', () => {
16
18
  let component: AppComponent;
@@ -20,18 +22,18 @@ describe('AppComponent', () => {
20
22
  let configMock: EuiAppConfig;
21
23
 
22
24
  beforeEach(async () => {
23
-
24
- // Handle the overloaded getState method
25
25
  type GetStateReturnType<T> = T extends keyof I18nState ? Observable<I18nState[T]> : Observable<I18nState>;
26
26
 
27
- userServiceMock = jasmine.createSpyObj('UserService', ['init']);
28
- i18nServiceMock = jasmine.createSpyObj<I18nService>('I18nService', ['init', 'getState']);
29
- i18nServiceMock.getState.and.callFake(<K extends keyof I18nState>(key?: K): GetStateReturnType<K> => {
30
- if (typeof key === 'string') {
31
- return of({ activeLang: 'en' }[key]) as GetStateReturnType<K>;
32
- }
33
- return of({ activeLang: 'en' }) as GetStateReturnType<K>;
34
- });
27
+ userServiceMock = { init: vi.fn() } as SpyObj<UserService>;
28
+ i18nServiceMock = {
29
+ init: vi.fn(),
30
+ getState: vi.fn(<K extends keyof I18nState>(key?: K): GetStateReturnType<K> => {
31
+ if (typeof key === 'string') {
32
+ return of({ activeLang: 'en' }[key]) as GetStateReturnType<K>;
33
+ }
34
+ return of({ activeLang: 'en' }) as GetStateReturnType<K>;
35
+ })
36
+ } as SpyObj<I18nService>;
35
37
  configMock = {global: {}, modules: {core: {base: 'localhost:3000', userDetails: 'dummy'}}};
36
38
 
37
39
  await TestBed.configureTestingModule({
@@ -1,5 +1,5 @@
1
1
  <eui-page>
2
- <eui-page-header label="{{ 'page.home.title' | translate }}"></eui-page-header>
2
+ <eui-page-header label="{{ 'page.home.title' | translate }}" />
3
3
 
4
4
  <eui-page-content>
5
5
  <h3 class="eui-u-font-bold eui-u-color-info">Overview</h3>
@@ -1,4 +1,4 @@
1
- import { Component, Inject } from '@angular/core';
1
+ import { Component, inject } from '@angular/core';
2
2
  import { CONFIG_TOKEN, EuiAppConfig } from '@eui/core';
3
3
  import { EUI_PAGE } from '@eui/components/eui-page';
4
4
  import { TranslateModule } from '@ngx-translate/core';
@@ -11,7 +11,9 @@ import { TranslateModule } from '@ngx-translate/core';
11
11
  ],
12
12
  })
13
13
  export class HomeComponent {
14
- constructor(@Inject(CONFIG_TOKEN) protected config: EuiAppConfig) {
15
- console.log(config);
14
+ protected config: EuiAppConfig = inject(CONFIG_TOKEN);
15
+
16
+ constructor() {
17
+ console.log(this.config);
16
18
  }
17
19
  }
@@ -1,5 +1,5 @@
1
1
  <eui-page>
2
- <eui-page-header label="Module 1 - page 1"></eui-page-header>
2
+ <eui-page-header label="Module 1 - page 1" />
3
3
 
4
4
  <eui-page-content>
5
5
  page 1 content
@@ -1,5 +1,5 @@
1
1
  <eui-page>
2
- <eui-page-header label="Module 1 - page 2"></eui-page-header>
2
+ <eui-page-header label="Module 1 - page 2" />
3
3
 
4
4
  <eui-page-content>
5
5
  page 1 content
@@ -1,7 +1,5 @@
1
1
  <eui-page>
2
- <eui-page-header label="Module 1"></eui-page-header>
2
+ <eui-page-header label="Module 1" />
3
3
 
4
- <eui-page-content>
5
-
6
- </eui-page-content>
4
+ <eui-page-content />
7
5
  </eui-page>
@@ -1,5 +1,5 @@
1
1
  <eui-page>
2
- <eui-page-header label="Module 2"></eui-page-header>
2
+ <eui-page-header label="Module 2" />
3
3
 
4
4
  <eui-page-content>
5
5
  Module 2 content
@@ -1,3 +1,5 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
1
3
  // Dummy test
2
4
  describe('Test', () => {
3
5
  it('should work', () => {
@@ -9,6 +9,9 @@
9
9
  "strictTemplates": true,
10
10
  "strictInjectionParameters": true,
11
11
  },
12
+ "include": [
13
+ "**/*.ts"
14
+ ],
12
15
  "exclude": [
13
16
  "**/*.spec.ts",
14
17
  "app/shared/testing/router.mock.ts",
@@ -1,27 +1,31 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
1
3
  {
2
- "compileOnSave": false,
3
- "compilerOptions": {
4
- "baseUrl": "./",
5
- "outDir": "./dist/out-tsc",
6
- "target": "ES2022",
7
- "module": "ES2022",
8
- "useDefineForClassFields": false,
9
- "lib": [
10
- "ES2022",
11
- "dom"
12
- ],
13
- "sourceMap": true,
14
- "declaration": false,
15
- "moduleResolution": "bundler",
16
- "emitDecoratorMetadata": false,
17
- "experimentalDecorators": true,
18
- "allowSyntheticDefaultImports": true,
19
- "importHelpers": true,
20
- "typeRoots": [
21
- "node_modules/@types"
22
- ],
23
- "paths": {
24
- "@shared/*": ["src/app/shared/*"],
4
+ "compileOnSave": false,
5
+ "compilerOptions": {
6
+ "baseUrl": "./",
7
+ "outDir": "./dist/out-tsc",
8
+ "target": "ES2022",
9
+ "module": "ES2022",
10
+ "useDefineForClassFields": false,
11
+ "lib": [
12
+ "ES2022",
13
+ "dom"
14
+ ],
15
+ "sourceMap": true,
16
+ "declaration": false,
17
+ "moduleResolution": "bundler",
18
+ "emitDecoratorMetadata": false,
19
+ "experimentalDecorators": true,
20
+ "allowSyntheticDefaultImports": true,
21
+ "importHelpers": true,
22
+ "typeRoots": [
23
+ "node_modules/@types"
24
+ ],
25
+ "paths": {
26
+ "@shared/*": [
27
+ "src/app/shared/*"
28
+ ]
29
+ }
25
30
  }
26
- }
27
31
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eui-angular-app",
3
- "version": "21.0.0-next.2",
3
+ "version": "21.0.0-next.20",
4
4
  "license": "EUPL-1.1",
5
5
  "scripts": {
6
6
  "ng": "ng",
@@ -21,7 +21,7 @@
21
21
  "private": true,
22
22
  "dependencies": {
23
23
  "@eui/deps-base": "18.2.20",
24
- "@eui/mobile-core": "18.1.3",
25
- "@eui/mobile-styles": "18.1.3"
24
+ "@eui/mobile-core": "18.1.4",
25
+ "@eui/mobile-styles": "18.1.4"
26
26
  }
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eui-angular-app",
3
- "version": "21.0.0-next.2",
3
+ "version": "21.0.0-next.20",
4
4
  "license": "EUPL-1.1",
5
5
  "scripts": {
6
6
  "ng": "ng",
@@ -18,21 +18,21 @@
18
18
  },
19
19
  "private": true,
20
20
  "dependencies": {
21
- "@angular/animations": "21.0.0-rc.2",
22
- "@angular/common": "21.0.0-rc.2",
23
- "@angular/compiler": "21.0.0-rc.2",
24
- "@angular/core": "21.0.0-rc.2",
25
- "@angular/forms": "21.0.0-rc.2",
26
- "@angular/platform-browser": "21.0.0-rc.2",
27
- "@angular/platform-browser-dynamic": "21.0.0-rc.2",
28
- "@angular/router": "21.0.0-rc.2",
29
- "@angular/elements": "21.0.0-rc.2",
30
- "@angular/language-service": "21.0.0-rc.2",
31
- "@angular/service-worker": "21.0.0-rc.2",
32
- "@angular/cdk": "21.0.0-rc.1",
33
- "@angular/material": "21.0.0-rc.1",
34
- "@angular/material-moment-adapter": "21.0.0-rc.1",
35
- "@angular-devkit/build-angular": "21.0.0-rc.1",
21
+ "@angular/animations": "21.0.0",
22
+ "@angular/common": "21.0.0",
23
+ "@angular/compiler": "21.0.0",
24
+ "@angular/core": "21.0.0",
25
+ "@angular/forms": "21.0.0",
26
+ "@angular/platform-browser": "21.0.0",
27
+ "@angular/platform-browser-dynamic": "21.0.0",
28
+ "@angular/router": "21.0.0",
29
+ "@angular/elements": "21.0.0",
30
+ "@angular/language-service": "21.0.0",
31
+ "@angular/service-worker": "21.0.0",
32
+ "@angular/cdk": "21.0.0",
33
+ "@angular/material": "21.0.0",
34
+ "@angular/material-moment-adapter": "21.0.0",
35
+ "@angular-devkit/build-angular": "21.0.0",
36
36
  "rxjs": "7.8.2",
37
37
  "tslib": "2.8.1",
38
38
  "zone.js": "0.15.1",
@@ -48,18 +48,18 @@
48
48
  "pikaday": "1.8.2",
49
49
  "lodash-es": "4.17.21",
50
50
  "localforage": "1.10.0",
51
- "@eui/base": "21.0.0-next.2",
52
- "@eui/core": "21.0.0-next.2",
53
- "@eui/styles": "21.0.0-next.2",
54
- "@eui/components": "21.0.0-next.2",
55
- "@eui/ecl": "21.0.0-next.2"
51
+ "@eui/base": "21.0.0-next.20",
52
+ "@eui/core": "21.0.0-next.20",
53
+ "@eui/styles": "21.0.0-next.20",
54
+ "@eui/components": "21.0.0-next.20",
55
+ "@eui/ecl": "21.0.0-next.20"
56
56
  },
57
57
  "devDependencies": {
58
- "@angular/build": "21.0.0-rc.1",
59
- "@angular/compiler-cli": "21.0.0-rc.2",
60
- "@angular/cli": "21.0.0-rc.1",
61
- "@eui/cli": "21.0.0-next.2",
62
- "ng-packagr": "21.0.0-rc.1",
58
+ "@angular/build": "21.0.0",
59
+ "@angular/compiler-cli": "21.0.0",
60
+ "@angular/cli": "21.0.0",
61
+ "@eui/cli": "21.0.0-next.20",
62
+ "ng-packagr": "21.0.0",
63
63
  "typescript": "5.9.2",
64
64
  "npm-run-all": "4.1.5",
65
65
  "json-server": "1.0.0-beta.3",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eui/cli",
3
- "version": "21.0.0-next.2",
3
+ "version": "21.0.0-next.20",
4
4
  "tag": "next",
5
5
  "license": "EUPL-1.1",
6
6
  "description": "eUI CLI app generator & tools",
@@ -1,121 +0,0 @@
1
- {
2
- "root": true,
3
- "ignorePatterns": [
4
- "**/node_modules/**",
5
- "**/dist/**",
6
- "**/coverage/**",
7
- "**/e2e/**",
8
- "**/test/**",
9
- "**/testing/**"
10
- ],
11
- "overrides": [
12
- {
13
- "files": [
14
- "*.ts"
15
- ],
16
- "parserOptions": {
17
- "project": [
18
- "tsconfig.json",
19
- "e2e/tsconfig.json"
20
- ],
21
- "createDefaultProgram": true
22
- },
23
- "extends": [
24
- "eslint:recommended",
25
- "plugin:@typescript-eslint/recommended",
26
- "plugin:@angular-eslint/recommended",
27
- "plugin:@angular-eslint/template/process-inline-templates"
28
- ],
29
- "rules": {
30
- "@angular-eslint/component-selector": [
31
- "error",
32
- {
33
- "type": "element",
34
- "prefix": ["app", "app"],
35
- "style": "kebab-case"
36
- }
37
- ],
38
- "@angular-eslint/directive-selector": [
39
- "error",
40
- {
41
- "type": "attribute",
42
- "prefix": ["app", "eui"],
43
- "style": "camelCase"
44
- }
45
- ],
46
- "@typescript-eslint/ban-ts-comment": "off",
47
- "@typescript-eslint/no-empty-object-type": "error",
48
- "@typescript-eslint/no-unsafe-function-type": "error",
49
- "@typescript-eslint/consistent-type-definitions": "off",
50
- "@typescript-eslint/dot-notation": "off",
51
- "@typescript-eslint/explicit-member-accessibility": [
52
- "off",
53
- {
54
- "accessibility": "explicit"
55
- }
56
- ],
57
- "@typescript-eslint/no-require-imports": "error",
58
- "@typescript-eslint/no-unused-vars": "off",
59
- "@typescript-eslint/no-var-requires": "error",
60
- "@typescript-eslint/require-await": "error",
61
- "brace-style": [
62
- "error",
63
- "1tbs"
64
- ],
65
- "id-blacklist": "off",
66
- "id-match": "off",
67
- "no-duplicate-case": "error",
68
- "no-duplicate-imports": "off",
69
- "no-invalid-this": "error",
70
- "no-multiple-empty-lines": [
71
- "error",
72
- {
73
- "max": 1
74
- }
75
- ],
76
- "no-new-func": "error",
77
- "no-redeclare": "off",
78
- "@typescript-eslint/no-redeclare": [
79
- "error"
80
- ],
81
- "no-template-curly-in-string": "error",
82
- "no-underscore-dangle": "off",
83
- "@typescript-eslint/naming-convention": [
84
- "error",
85
- {
86
- "selector": "enum",
87
- "format": [
88
- "PascalCase",
89
- "UPPER_CASE"
90
- ]
91
- }
92
- ],
93
- "@typescript-eslint/member-ordering": [
94
- "error",
95
- {
96
- "default": [
97
- "public-static-field",
98
- "public-instance-field",
99
- "private-static-field",
100
- "private-instance-field",
101
- "public-constructor",
102
- "private-constructor",
103
- "public-instance-method",
104
- "protected-instance-method",
105
- "private-instance-method"
106
- ]
107
- }
108
- ]
109
- }
110
- },
111
- {
112
- "files": [
113
- "*.html"
114
- ],
115
- "extends": [
116
- "plugin:@angular-eslint/template/recommended"
117
- ],
118
- "rules": {}
119
- }
120
- ]
121
- }