Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions .mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,12 @@ experimental = true

# Automatically install missing tools
auto_install = true

# Enable reading legacy version files (.nvmrc, .sdkmanrc, etc.)
# This allows mise to automatically detect Node.js and Java versions
# from existing version files without explicit configuration in .mise.toml
legacy_version_file = true

# Enable idiomatic version file detection for Java and Node
# Required for mise to read .java-version, .sdkmanrc, and .nvmrc files
idiomatic_version_file_enable_tools = ["java", "node"]
421 changes: 84 additions & 337 deletions core-web/.husky/pre-commit

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions core-web/.lintstagedrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module.exports = {
// TypeScript/JavaScript files - lint and format
'*.{ts,js,tsx,jsx}': (filenames) => {
// Convert absolute paths to relative paths from core-web directory
const files = filenames.map((f) => f.replace(/^.*\/core-web\//, '')).join(',');
return [
`nx affected -t lint --exclude='tag:skip:lint' --fix --files=${files}`,
`nx format:write --files=${files}`
];
},

// JSON, HTML, CSS, SCSS files - format only
'*.{json,html,css,scss}': (filenames) => {
const files = filenames.map((f) => f.replace(/^.*\/core-web\//, '')).join(',');
return `nx format:write --files=${files}`;
},

// Always run yarn install if package.json or yarn.lock changes
'package.json': () => 'yarn install --frozen-lockfile',
'yarn.lock': () => 'yarn install --frozen-lockfile'
};
6 changes: 3 additions & 3 deletions core-web/apps/dotcms-ui/src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,9 @@ const PORTLETS_IFRAME = [
children: [
{
loadChildren: () =>
import(
'@components/dot-contentlet-editor/dot-contentlet-editor.routes'
).then((m) => m.dotContentletEditorRoutes),
import('@components/dot-contentlet-editor/dot-contentlet-editor.routes').then(
(m) => m.dotContentletEditorRoutes
),
path: 'new'
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ export const dotEditPageRoutes: Routes = [
{
path: 'layout/template/:id/:tabName',
loadComponent: () =>
import(
'./layout/components/dot-template-additional-actions/dot-legacy-template-additional-actions-iframe/dot-legacy-template-additional-actions-iframe.component'
).then((m) => m.DotLegacyTemplateAdditionalActionsComponent)
import('./layout/components/dot-template-additional-actions/dot-legacy-template-additional-actions-iframe/dot-legacy-template-additional-actions-iframe.component').then(
(m) => m.DotLegacyTemplateAdditionalActionsComponent
)
}
];
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ import {
* @implements {Resolve<Observable<{ user: DotCurrentUser, permissions: DotPermissionsType }>>}
*/
@Injectable()
export class DotStarterResolver
implements Resolve<Observable<{ user: DotCurrentUser; permissions: DotPermissionsType }>>
{
export class DotStarterResolver implements Resolve<
Observable<{ user: DotCurrentUser; permissions: DotPermissionsType }>
> {
private dotCurrentUserService = inject(DotCurrentUserService);

resolve(): Observable<{ user: DotCurrentUser; permissions: DotPermissionsType }> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,9 +376,8 @@ export class DotContentTypesPortletComponent implements OnInit, OnDestroy {
}

private async showCloneContentTypeDialog(item: DotCMSContentType) {
const { DotContentTypeCopyDialogComponent } = await import(
'./components/dot-content-type-copy-dialog/dot-content-type-copy-dialog.component'
);
const { DotContentTypeCopyDialogComponent } =
await import('./components/dot-content-type-copy-dialog/dot-content-type-copy-dialog.component');
const componentRef = this.dotDynamicDialog.createComponent(
DotContentTypeCopyDialogComponent
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import { DotPropertiesService } from '@dotcms/data-access';
* }
*/
@Injectable()
export class DotFeatureFlagResolver
implements Resolve<Observable<Record<string, boolean | string>> | Observable<boolean | string>>
{
export class DotFeatureFlagResolver implements Resolve<
Observable<Record<string, boolean | string>> | Observable<boolean | string>
> {
private readonly dotConfigurationService = inject(DotPropertiesService);

resolve(route: ActivatedRouteSnapshot) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -896,8 +896,7 @@ describe('DotExperimentsConfigurationStore', () => {
of({ ...EXPERIMENT_MOCK_2, status: DotExperimentStatus.RUNNING })
);

ActivatedRouteMock.parent.parent.parent.snapshot.data.content.state.lockedByAnotherUser =
true;
ActivatedRouteMock.parent.parent.parent.snapshot.data.content.state.lockedByAnotherUser = true;

spectator.service.loadExperiment(EXPERIMENT_MOCK_2.id);

Expand Down Expand Up @@ -925,8 +924,7 @@ describe('DotExperimentsConfigurationStore', () => {
it('should set EXP_CONFIG_ERROR_LABEL_PAGE_BLOCKED when page is locked by other user', (done) => {
dotExperimentsService.getById.mockReturnValue(of(EXPERIMENT_MOCK_2));

ActivatedRouteMock.parent.parent.parent.snapshot.data.content.state.lockedByAnotherUser =
true;
ActivatedRouteMock.parent.parent.parent.snapshot.data.content.state.lockedByAnotherUser = true;

spectator.service.loadExperiment(EXPERIMENT_MOCK_2.id);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,10 @@ export interface EditEmaDialogState {

export type DialogActionPayload = Pick<EditEmaDialogState, 'actionPayload'>;

export interface DialogAction
extends Pick<EditEmaDialogState, 'actionPayload' | 'form' | 'clientAction'> {
export interface DialogAction extends Pick<
EditEmaDialogState,
'actionPayload' | 'form' | 'clientAction'
> {
event: CustomEvent;
}

Expand Down
6 changes: 4 additions & 2 deletions core-web/libs/sdk/types/src/lib/ai/public.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,10 @@ export class DotErrorAISearch extends Error {
* @public
* @interface DotCMSAISearchResponse
*/
export interface DotCMSAISearchResponse<T extends DotCMSBasicContentlet>
extends Omit<DotCMSAISearchRawResponse<T>, 'dotCMSResults'> {
export interface DotCMSAISearchResponse<T extends DotCMSBasicContentlet> extends Omit<
DotCMSAISearchRawResponse<T>,
'dotCMSResults'
> {
/**
* The results from the AI search.
* @property {DotCMSAISearchContentletData<T>[]} results - The results from the AI search.
Expand Down
19 changes: 10 additions & 9 deletions core-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,23 @@
"@tiptap/starter-kit": "^2.14.0",
"@tiptap/suggestion": "^2.14.0",
"@webcomponents/webcomponentsjs": "^2.6.0",
"axios": "^1.13.2",
"chalk": "^5.6.2",
"chart.js": "^4.3.0",
"commander": "^14.0.2",
"consola": "^3.4.2",
"core-js": "3.36.1",
"cross-fetch": "^3.1.4",
"date-fns": "^4.0.0",
"document-register-element": "^1.7.2",
"dom-autoscroller": "^2.3.4",
"dragula": "^3.7.3",
"execa": "^9.6.0",
"font-awesome": "^4.7.0",
"fs-extra": "^11.3.2",
"gridstack": "^8.1.1",
"htmldiff-js": "^1.0.5",
"inquirer": "^13.0.1",
"jstat": "^1.9.6",
"marked": "12.0.2",
"md5": "^2.3.0",
Expand All @@ -119,6 +125,7 @@
"ngx-markdown": "18.1.0",
"ngx-tiptap": "^12.0.0",
"node-fetch": "^2.6.1",
"ora": "^9.0.0",
"primeflex": "3.3.1",
"primeicons": "7.0.0",
"primeng": "17.18.11",
Expand All @@ -131,20 +138,13 @@
"terser": "^5.28.1",
"test": "^0.6.0",
"tinymce": "^6.8.3",
"ts-results": "^3.3.0",
"tslib": "^2.3.0",
"turndown": "^7.2.0",
"uuid": "^9.0.0",
"webpack-dev-middleware": "^6.1.2",
"zod": "4.1.9",
"zone.js": "0.15.1",
"axios": "^1.13.2",
"chalk": "^5.6.2",
"commander": "^14.0.2",
"execa": "^9.6.0",
"fs-extra": "^11.3.2",
"inquirer": "^13.0.1",
"ora": "^9.0.0",
"ts-results": "^3.3.0"
"zone.js": "0.15.1"
},
"devDependencies": {
"@analytics/queue-utils": "^0.1.3",
Expand Down Expand Up @@ -260,6 +260,7 @@
"jiti": "2.4.2",
"jsdom": "~22.1.0",
"jsonc-eslint-parser": "^2.4.0",
"lint-staged": "^16.2.7",
"mock-socket": "^9.0.3",
"mockdate": "^3.0.5",
"monaco-editor": "^0.33.0",
Expand Down
71 changes: 66 additions & 5 deletions core-web/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10697,6 +10697,14 @@ cli-truncate@^4.0.0:
slice-ansi "^5.0.0"
string-width "^7.0.0"

cli-truncate@^5.0.0:
version "5.1.1"
resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz#455476face9904d94b7d11e98d9adbca15292ea5"
integrity sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==
dependencies:
slice-ansi "^7.1.0"
string-width "^8.0.0"

cli-width@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5"
Expand Down Expand Up @@ -17640,6 +17648,19 @@ linkifyjs@^4.3.2:
resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1"
integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==

lint-staged@^16.2.7:
version "16.2.7"
resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz#c4a635960c17b52fe774f1f40aee8ce1bd86531f"
integrity sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==
dependencies:
commander "^14.0.2"
listr2 "^9.0.5"
micromatch "^4.0.8"
nano-spawn "^2.0.0"
pidtree "^0.6.0"
string-argv "^0.3.2"
yaml "^2.8.1"

listr2@9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.1.tgz#3cad12d81d998f8024621d9b35c969dba5da4103"
Expand All @@ -17652,6 +17673,18 @@ listr2@9.0.1:
rfdc "^1.4.1"
wrap-ansi "^9.0.0"

listr2@^9.0.5:
version "9.0.5"
resolved "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316"
integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==
dependencies:
cli-truncate "^5.0.0"
colorette "^2.0.20"
eventemitter3 "^5.0.1"
log-update "^6.1.0"
rfdc "^1.4.1"
wrap-ansi "^9.0.0"

lit-element@^2.3.0:
version "2.5.1"
resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.5.1.tgz#3fa74b121a6cd22902409ae3859b7847d01aa6b6"
Expand Down Expand Up @@ -18710,6 +18743,11 @@ mute-stream@~0.0.4:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==

nano-spawn@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz#f1250434c09ae18870d4f729fc54b406cf85a3e1"
integrity sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==

nanoid@^3.3.11, nanoid@^3.3.6:
version "3.3.11"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
Expand Down Expand Up @@ -20241,6 +20279,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==

pidtree@^0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==

pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
Expand Down Expand Up @@ -23550,7 +23593,7 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==

string-argv@~0.3.1:
string-argv@^0.3.2, string-argv@~0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
Expand All @@ -23568,7 +23611,7 @@ string-length@^4.0.1, string-length@^4.0.2:
char-regex "^1.0.2"
strip-ansi "^6.0.0"

"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
Expand All @@ -23586,6 +23629,15 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"

"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"

string-width@^2.0.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
Expand Down Expand Up @@ -23621,7 +23673,7 @@ string-width@^7.0.0, string-width@^7.2.0:
get-east-asian-width "^1.0.0"
strip-ansi "^7.1.0"

string-width@^8.1.0:
string-width@^8.0.0, string-width@^8.1.0:
version "8.1.0"
resolved "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz#9e9fb305174947cf45c30529414b5da916e9e8d1"
integrity sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==
Expand Down Expand Up @@ -25735,7 +25787,7 @@ worker-farm@^1.6.0, worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"

"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
Expand All @@ -25762,6 +25814,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"

wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"

wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
Expand Down Expand Up @@ -25913,7 +25974,7 @@ yaml@^1.10.0, yaml@^1.10.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==

yaml@^2.6.0:
yaml@^2.6.0, yaml@^2.8.1:
version "2.8.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5"
integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==
Expand Down