Skip to content

Commit e4e7134

Browse files
Garfield-frjma
andcommitted
chore: migrate to angular 21
* Uses signals. * Changes directory structure. * Uses ngrx signal store. * Makes all component stadalone. * Uses vitest for the tests. Co-Authored-by: Bertrand Zuchuat <bertrand.zuchuat@rero.ch> Co-Authored-by: Johnny Mariéthoz <Johnny.Mariethoz@rero.ch>
1 parent 230affc commit e4e7134

File tree

296 files changed

+20340
-21024
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

296 files changed

+20340
-21024
lines changed

.github/workflows/main.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ jobs:
77

88
runs-on: ubuntu-latest
99

10+
strategy:
11+
matrix:
12+
node-version: [20.19.x, 22.12.x, 24.0.x]
13+
1014
steps:
1115
- uses: actions/checkout@v4
1216
- name: Use Node.js 22
@@ -15,8 +19,10 @@ jobs:
1519
node-version: 22
1620
- name: install package
1721
run: |
18-
npm install -g @angular/cli@19
22+
npm install -g @angular/cli@20
1923
npm ci
24+
- name: Install Playwright browsers
25+
run: npx playwright install --with-deps chromium
2026
- name: run tests
2127
run: |
2228
./run-tests.sh

angular.json

Lines changed: 46 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,13 @@
33
"version": 1,
44
"projects": {
55
"@rero/ng-core": {
6-
"schematics": {
7-
"@schematics/angular:component": {
8-
"standalone": false
9-
},
10-
"@schematics/angular:directive": {
11-
"standalone": false
12-
},
13-
"@schematics/angular:pipe" : {
14-
"standalone": false
15-
}
16-
},
176
"projectType": "library",
187
"root": "projects/rero/ng-core",
198
"sourceRoot": "projects/rero/ng-core/src",
209
"prefix": "ng-core",
2110
"architect": {
2211
"build": {
23-
"builder": "@angular-devkit/build-angular:ng-packagr",
12+
"builder": "@angular/build:ng-packagr",
2413
"options": {
2514
"tsConfig": "projects/rero/ng-core/tsconfig.lib.json",
2615
"project": "projects/rero/ng-core/ng-package.json"
@@ -32,11 +21,11 @@
3221
}
3322
},
3423
"test": {
35-
"builder": "@angular-devkit/build-angular:karma",
24+
"builder": "@angular/build:unit-test",
3625
"options": {
37-
"main": "projects/rero/ng-core/src/test.ts",
38-
"tsConfig": "projects/rero/ng-core/tsconfig.spec.json",
39-
"karmaConfig": "projects/rero/ng-core/karma.conf.js"
26+
"buildTarget": "ng-core-tester:build",
27+
"browsers": ["chromium"],
28+
"tsConfig": "projects/rero/ng-core/tsconfig.spec.json"
4029
}
4130
},
4231
"lint": {
@@ -49,49 +38,25 @@
4938
},
5039
"ng-core-tester": {
5140
"projectType": "application",
52-
"schematics": {
53-
"@schematics/angular:component": {
54-
"standalone": false
55-
},
56-
"@schematics/angular:directive": {
57-
"standalone": false
58-
},
59-
"@schematics/angular:pipe" : {
60-
"standalone": false
61-
}
62-
},
6341
"root": "projects/ng-core-tester",
6442
"sourceRoot": "projects/ng-core-tester/src",
6543
"prefix": "app",
6644
"architect": {
6745
"build": {
68-
"builder": "@angular-devkit/build-angular:application",
46+
"builder": "@angular/build:application",
6947
"options": {
70-
"allowedCommonJsDependencies": [
71-
"crypto-js",
72-
"easymde",
73-
"js-generate-password"
74-
],
48+
"allowedCommonJsDependencies": ["crypto-js", "easymde", "js-generate-password"],
7549
"outputPath": {
7650
"base": "dist/ng-core-tester"
7751
},
7852
"index": "projects/ng-core-tester/src/index.html",
79-
"polyfills": [
80-
"projects/ng-core-tester/src/polyfills.ts"
81-
],
53+
"polyfills": ["zone.js"],
8254
"tsConfig": "projects/ng-core-tester/tsconfig.app.json",
83-
"assets": [
84-
"projects/ng-core-tester/src/favicon.ico",
85-
"projects/ng-core-tester/src/assets"
86-
],
87-
"styles": [
88-
"projects/ng-core-tester/src/styles.scss"
89-
],
90-
"stylePreprocessorOptions": {
91-
"includePaths": [
92-
"projects/rero/ng-core/assets/scss"
93-
]
94-
},
55+
"assets": ["projects/ng-core-tester/src/favicon.ico", "projects/ng-core-tester/src/assets"],
56+
"styles": ["projects/ng-core-tester/src/styles.scss"],
57+
"stylePreprocessorOptions": {
58+
"includePaths": ["projects/rero/ng-core/assets/scss"]
59+
},
9560
"extractLicenses": false,
9661
"sourceMap": true,
9762
"optimization": false,
@@ -127,7 +92,7 @@
12792
"defaultConfiguration": ""
12893
},
12994
"serve": {
130-
"builder": "@angular-devkit/build-angular:dev-server",
95+
"builder": "@angular/build:dev-server",
13196
"options": {
13297
"buildTarget": "ng-core-tester:build"
13398
},
@@ -144,46 +109,52 @@
144109
}
145110
},
146111
"extract-i18n": {
147-
"builder": "@angular-devkit/build-angular:extract-i18n",
112+
"builder": "@angular/build:extract-i18n",
148113
"options": {
149114
"buildTarget": "ng-core-tester:build"
150115
}
151116
},
152117
"test": {
153-
"builder": "@angular-devkit/build-angular:karma",
118+
"builder": "@angular/build:unit-test",
154119
"options": {
155-
"main": "projects/ng-core-tester/src/test.ts",
156-
"polyfills": "projects/ng-core-tester/src/polyfills.ts",
157-
"tsConfig": "projects/ng-core-tester/tsconfig.spec.json",
158-
"karmaConfig": "projects/ng-core-tester/karma.conf.js",
159-
"assets": [
160-
"projects/ng-core-tester/src/favicon.ico",
161-
"projects/ng-core-tester/src/assets"
162-
]
163-
}
164-
},
165-
"e2e": {
166-
"builder": "@angular-devkit/build-angular:protractor",
167-
"options": {
168-
"protractorConfig": "projects/ng-core-tester/e2e/protractor.conf.js",
169-
"devServerTarget": "ng-core-tester:serve"
170-
},
171-
"configurations": {
172-
"production": {
173-
"devServerTarget": "ng-core-tester:serve:production"
174-
}
120+
"buildTarget": "ng-core-tester:build",
121+
"browsers": ["chromium"],
122+
"tsConfig": "projects/ng-core-tester/tsconfig.spec.json"
175123
}
176124
},
177125
"lint": {
178126
"builder": "@angular-eslint/builder:lint",
179127
"options": {
180-
"lintFilePatterns": [
181-
"projects/ng-core-tester/src/**/*.ts",
182-
"projects/ng-core-tester/src/**/*.html"
183-
]
128+
"lintFilePatterns": ["projects/ng-core-tester/src/**/*.ts", "projects/ng-core-tester/src/**/*.html"]
184129
}
185130
}
186131
}
187132
}
133+
},
134+
"schematics": {
135+
"@schematics/angular:component": {
136+
"type": "component"
137+
},
138+
"@schematics/angular:directive": {
139+
"type": "directive"
140+
},
141+
"@schematics/angular:service": {
142+
"type": "service"
143+
},
144+
"@schematics/angular:guard": {
145+
"typeSeparator": "."
146+
},
147+
"@schematics/angular:interceptor": {
148+
"typeSeparator": "."
149+
},
150+
"@schematics/angular:module": {
151+
"typeSeparator": "."
152+
},
153+
"@schematics/angular:pipe": {
154+
"typeSeparator": "."
155+
},
156+
"@schematics/angular:resolver": {
157+
"typeSeparator": "."
158+
}
188159
}
189160
}

eslint.config.js renamed to eslint.config.mjs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
// @ts-check
2-
const eslint = require('@eslint/js');
3-
const tseslint = require('typescript-eslint');
4-
const angular = require('angular-eslint');
2+
import eslint from '@eslint/js';
3+
import tseslint from 'typescript-eslint';
4+
import angular from 'angular-eslint';
5+
import { defineConfig } from "eslint/config";
56

6-
module.exports = tseslint.config(
7+
export default defineConfig(
78
{
89
files: ['**/*.ts'],
9-
extends: [eslint.configs.recommended, ...tseslint.configs.recommended, ...tseslint.configs.stylistic, ...angular.configs.tsRecommended],
10+
extends: [
11+
eslint.configs.recommended,
12+
...tseslint.configs.recommended,
13+
...tseslint.configs.stylistic,
14+
...angular.configs.tsRecommended
15+
],
1016
processor: angular.processInlineTemplates,
1117
rules: {
12-
'@angular-eslint/prefer-standalone': 'off',
13-
'@typescript-eslint/no-explicit-any': 'warn',
14-
'@typescript-eslint/no-unused-vars': 'warn',
18+
'@angular-eslint/prefer-standalone': 'error',
19+
'@typescript-eslint/no-explicit-any': 'off',
20+
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
1521
'@angular-eslint/component-class-suffix': 'warn',
1622
'@angular-eslint/no-output-on-prefix': 'warn',
1723
'@angular-eslint/no-output-native': 'warn',
1824
'@typescript-eslint/no-unsafe-function-type': 'warn',
1925
'@angular-eslint/directive-selector': [
2026
'error',
2127
{
28+
prefix: ['ngCore', 'app'],
2229
style: 'camelCase',
2330
type: 'attribute',
2431
},
@@ -35,7 +42,10 @@ module.exports = tseslint.config(
3542
},
3643
{
3744
files: ['**/*.html'],
38-
extends: [...angular.configs.templateRecommended, ...angular.configs.templateAccessibility],
45+
extends: [
46+
...angular.configs.templateRecommended,
47+
...angular.configs.templateAccessibility
48+
],
3949
rules: {
4050
'@angular-eslint/template/click-events-have-key-events': 'warn',
4151
'@angular-eslint/template/interactive-supports-focus': 'warn',

0 commit comments

Comments
 (0)