Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
03557d9
chore(dependencies): update Node.js version and Angular packages
nicobytes Jul 17, 2026
fd14137
chore(dependencies): update Node.js version to 22.22.3 and streamline…
nicobytes Jul 17, 2026
8695e1e
chore(dependencies): update Angular and Nx versions, enhance ESLint c…
nicobytes Jul 17, 2026
c318982
refactor(eslint): remove unused FlatCompat imports from ESLint config…
nicobytes Jul 17, 2026
ae31027
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 17, 2026
3d5b9dc
refactor(content-types): migrate add-to-menu logic to signals and upd…
nicobytes Jul 17, 2026
f1676de
test(dot-history-timeline-list): enhance unit tests for timeline key …
nicobytes Jul 17, 2026
d1061cf
refactor(content-types-layout): improve HTML structure and clean up u…
nicobytes Jul 17, 2026
b38ad5a
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 17, 2026
bcef623
fix(suggestions.component): remove unnecessary whitespace in import s…
nicobytes Jul 20, 2026
7f7066d
fix(suggestions.component): remove unnecessary whitespace in import s…
nicobytes Jul 20, 2026
31d6065
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 20, 2026
14c3e46
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 22, 2026
85a9ac8
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 22, 2026
830fdeb
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 27, 2026
0096a05
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 27, 2026
ef39b17
Merge branch 'main' into 35930-migrate-angular-21-angular-22-typescri…
nicobytes Jul 29, 2026
721eaa7
fix(block-editor): remove leading whitespace in suggestions import
nicobytes Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ dotCMS is a **Universal Content Management System** - a large-scale enterprise J
| Tool | Version | Installation | Verification |
|------|---------|--------------|--------------|
| Java | 21.0.8+ | `sdk env install` (SDKMAN) | `java -version` |
| Node.js | 22.15.0+ | `nvm use` (from `.nvmrc`) | `node --version` |
| Node.js | 22.22.3+ | `nvm use` (from `.nvmrc`) | `node --version` |
| Maven | 3.9+ | Wrapper included (`./mvnw`) | `./mvnw --version` |
| Docker | Latest | [Docker Desktop](https://www.docker.com/products/docker-desktop) | `docker --version` |

Expand Down Expand Up @@ -548,14 +548,14 @@ error @angular/compiler-cli@19.2.15: The engine "node" is incompatible
**Solution:**
```bash
# Check required version
cat .nvmrc # Shows: v22.15.0
cat .nvmrc # Shows: v22.22.3

# Install and use correct version
nvm install 22.15.0
nvm use 22.15.0
nvm install 22.22.3
nvm use 22.22.3

# Verify
node --version # Should show v22.15.0
node --version # Should show v22.22.3
```

### Issue #5: Frontend Build Fails - Puppeteer ARM64
Expand Down Expand Up @@ -860,7 +860,7 @@ When working with dotCMS:
- ✅ Complete OpenAPI docs for REST endpoints

### Frontend (Angular/TypeScript)
- ✅ Use Node 22.15+ (`nvm use`)
- ✅ Use Node 22.22.3+ (`nvm use`)
- ✅ Modern syntax: `@if`, `@for`, `input()`, `output()`
- ✅ Test with Spectator: `spectator.setInput()`, `data-testid`
- ✅ Build with `nx run dotcms-ui:build`
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v22.15.0
v22.22.3
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ core/

```bash
sdk env install # Java 25 via SDKMAN (.sdkmanrc) — build fails with wrong version
nvm use # Node 22.15+ via nvm (.nvmrc) — frontend build fails with wrong version
nvm use # Node 22.22.3+ via nvm (.nvmrc) — frontend build fails with wrong version
```

## Build & Test Commands
Expand Down
2 changes: 1 addition & 1 deletion ONBOARDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ canonical reference for build commands, project structure, and coding patterns.

```bash
sdk env install # Java 25 via SDKMAN, pinned in .sdkmanrc
nvm use # Node 22.15+ via nvm, pinned in .nvmrc
nvm use # Node 22.22.3+ via nvm, pinned in .nvmrc
```

- **Java:** core modules compile to and run on Java 25. A wrong JDK gives cryptic
Expand Down
2 changes: 1 addition & 1 deletion core-web/.nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v22.15.0
v22.22.3
59 changes: 22 additions & 37 deletions core-web/apps/dotcdn/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,46 +1,31 @@
import { FlatCompat } from '@eslint/eslintrc';
import { dirname } from 'path';
import { fileURLToPath } from 'url';
import js from '@eslint/js';
import baseConfig from '../../eslint.config.mjs';
import nx from '@nx/eslint-plugin';

const compat = new FlatCompat({
baseDirectory: dirname(fileURLToPath(import.meta.url)),
recommendedConfig: js.configs.recommended
});

export default [
...baseConfig,
...nx.configs['flat/angular'],
...compat
.config({
extends: ['plugin:@angular-eslint/template/process-inline-templates']
})
.map((config) => ({
...config,
files: ['**/*.ts'],
rules: {
...config.rules,
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dotcms',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dotcms',
style: 'kebab-case'
}
],
'@angular-eslint/prefer-standalone': 'off'
}
})),
{
files: ['**/*.ts'],
rules: {
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dotcms',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dotcms',
style: 'kebab-case'
}
],
'@angular-eslint/prefer-standalone': 'off'
}
},
...nx.configs['flat/angular-template'],
{
// Pre-migration parity: the repo's eslintrc setup applied only
Expand Down
5 changes: 4 additions & 1 deletion core-web/apps/dotcdn/tsconfig.app.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,8 @@
"moduleResolution": "bundler"
},
"files": ["src/main.ts", "src/polyfills.ts"],
"exclude": ["jest.config.ts"]
"exclude": ["jest.config.ts"],
"angularCompilerOptions": {
"strictTemplates": false
}
}
62 changes: 24 additions & 38 deletions core-web/apps/dotcms-binary-field-builder/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,47 +1,33 @@
import { FlatCompat } from '@eslint/eslintrc';
import { dirname } from 'path';
import { fileURLToPath } from 'url';
import js from '@eslint/js';
import baseConfig from '../../eslint.config.mjs';
import nx from '@nx/eslint-plugin';

const compat = new FlatCompat({
baseDirectory: dirname(fileURLToPath(import.meta.url)),
recommendedConfig: js.configs.recommended
});

export default [
...baseConfig,
...nx.configs['flat/angular'],
...compat
.config({
extends: ['plugin:@angular-eslint/template/process-inline-templates']
})
.map((config) => ({
...config,
files: ['**/*.ts'],
rules: {
...config.rules,
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dotcms',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dotcms',
style: 'kebab-case'
}
],
'@angular-eslint/prefer-standalone': 'off',
'@angular-eslint/no-input-rename': 'off'
}
})),
{
Comment thread
nicobytes marked this conversation as resolved.
files: ['**/*.ts'],
rules: {
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dotcms',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dotcms',
style: 'kebab-case'
}
],
'@angular-eslint/prefer-standalone': 'off',
'@angular-eslint/prefer-on-push-component-change-detection': 'off',
'@angular-eslint/no-input-rename': 'off'
}
},
...nx.configs['flat/angular-template'],
{
// Pre-migration parity: the repo's eslintrc setup applied only
Expand Down
5 changes: 4 additions & 1 deletion core-web/apps/dotcms-binary-field-builder/tsconfig.app.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,8 @@
},
"files": ["src/main.ts"],
"include": ["src/**/*.d.ts"],
"exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"]
"exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"],
"angularCompilerOptions": {
"strictTemplates": false
}
}
59 changes: 22 additions & 37 deletions core-web/apps/dotcms-block-editor/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,46 +1,31 @@
import { FlatCompat } from '@eslint/eslintrc';
import { dirname } from 'path';
import { fileURLToPath } from 'url';
import js from '@eslint/js';
import baseConfig from '../../eslint.config.mjs';
import nx from '@nx/eslint-plugin';

const compat = new FlatCompat({
baseDirectory: dirname(fileURLToPath(import.meta.url)),
recommendedConfig: js.configs.recommended
});

export default [
...baseConfig,
...nx.configs['flat/angular'],
...compat
.config({
extends: ['plugin:@angular-eslint/template/process-inline-templates']
})
.map((config) => ({
...config,
files: ['**/*.ts'],
rules: {
...config.rules,
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dotcms',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dotcms',
style: 'kebab-case'
}
],
'@angular-eslint/prefer-standalone': 'off'
}
})),
{
Comment thread
nicobytes marked this conversation as resolved.
files: ['**/*.ts'],
rules: {
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dotcms',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dotcms',
style: 'kebab-case'
}
],
'@angular-eslint/prefer-standalone': 'off'
}
},
...nx.configs['flat/angular-template'],
{
// Pre-migration parity: the repo's eslintrc setup applied only
Expand Down
4 changes: 3 additions & 1 deletion core-web/apps/dotcms-block-editor/tsconfig.app.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@
"esModuleInterop": true
},
"files": ["src/main.ts", "src/polyfills.ts"],
"exclude": ["**/*.stories.ts", "**/*.stories.js"]
"angularCompilerOptions": {
"strictTemplates": false
}
}
80 changes: 33 additions & 47 deletions core-web/apps/dotcms-ui/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,56 +1,42 @@
import { FlatCompat } from '@eslint/eslintrc';
import { dirname } from 'path';
import { fileURLToPath } from 'url';
import js from '@eslint/js';
import baseConfig from '../../eslint.config.mjs';
import nx from '@nx/eslint-plugin';

const compat = new FlatCompat({
baseDirectory: dirname(fileURLToPath(import.meta.url)),
recommendedConfig: js.configs.recommended
});

export default [
...baseConfig,
...nx.configs['flat/angular'],
...compat
.config({
extends: ['plugin:@angular-eslint/template/process-inline-templates']
})
.map((config) => ({
...config,
files: ['**/*.ts'],
rules: {
...config.rules,
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dot',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dot',
style: 'kebab-case'
}
],
'@typescript-eslint/no-duplicate-enum-values': 'off',
'@angular-eslint/prefer-standalone': 'off',
'@angular-eslint/no-input-rename': 'off',
'@angular-eslint/no-output-on-prefix': 'off',
'@angular-eslint/no-output-native': 'off',
'@nx/enforce-module-boundaries': [
'error',
{
allow: ['@dotcms/dotcms-webcomponents/loader']
}
]
}
})),
{
files: ['**/*.ts'],
rules: {
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'dot',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'dot',
style: 'kebab-case'
}
],
'@typescript-eslint/no-duplicate-enum-values': 'off',
'@angular-eslint/prefer-standalone': 'off',
'@angular-eslint/prefer-on-push-component-change-detection': 'off',
'@angular-eslint/no-input-rename': 'off',
'@angular-eslint/no-output-on-prefix': 'off',
'@angular-eslint/no-output-native': 'off',
'@nx/enforce-module-boundaries': [
'error',
{
allow: ['@dotcms/dotcms-webcomponents/loader']
}
]
}
},
...nx.configs['flat/angular-template'],
{
// Pre-migration parity: the repo's eslintrc setup applied only
Expand Down
Loading
Loading