From e17744faf081a013f38936573a076cf957a3afe6 Mon Sep 17 00:00:00 2001 From: undergroundwires Date: Thu, 26 Sep 2024 16:07:37 +0200 Subject: [PATCH] Bump to TypeScript 5.5 and enable `noImplicitAny` This commit upgrades TypeScript from 5.4 to 5.5 and enables the `noImplicitAny` option for stricter type checking. It refactors code to comply with `noImplicitAny` and adapts to new TypeScript features and limitations. Key changes: - Migrate from TypeScript 5.4 to 5.5 - Enable `noImplicitAny` for stricter type checking - Refactor code to comply with new TypeScript features and limitations Other supporting changes: - Refactor progress bar handling for type safety - Drop 'I' prefix from interfaces to align with new code convention - Update TypeScript target from `ES2017` and `ES2018`. This allows named capturing groups. Otherwise, new TypeScript compiler does not compile the project and shows the following error: ``` ... TimestampedFilenameGenerator.spec.ts:105:23 - error TS1503: Named capturing groups are only available when targeting 'ES2018' or later const pattern = /^(?\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2})-(?[^.]+?)(?:\.(?[^.]+))?$/;// timestamp-scriptName.extension ... ``` - Refactor usage of `electron-progressbar` for type safety and less complexity. --- package-lock.json | 17 +- package.json | 2 +- src/application/Common/Enum.ts | 10 +- src/application/Context/ApplicationContext.ts | 37 +++- .../Parser/Executable/CategoryParser.ts | 2 +- .../Parser/Executable/Script/ScriptParser.ts | 2 +- .../Analyzers/AnalyzeDuplicateLines.ts | 2 +- .../RuntimeSanity/Common/FactoryValidator.ts | 8 +- .../RuntimeSanity/Common/ISanityValidator.ts | 7 - ...yCheckOptions.ts => SanityCheckOptions.ts} | 2 +- .../RuntimeSanity/Common/SanityValidator.ts | 7 + .../RuntimeSanity/SanityChecks.ts | 25 ++- .../EnvironmentVariablesValidator.ts | 4 +- .../Validators/WindowVariablesValidator.ts | 4 +- .../bootstrapping/ApplicationBootstrapper.ts | 4 +- .../Modules/RuntimeSanityBootstrapper.ts | 15 ++ .../Modules/RuntimeSanityValidator.ts | 15 -- .../TreeView/Node/HierarchicalTreeNode.vue | 4 +- .../Tree/TreeView/TreeRoot/TreeRootManager.ts | 12 +- .../components/Shared/TooltipWrapper.vue | 18 +- .../electron/main/IpcRegistration.ts | 3 +- .../main/Update/AutomaticUpdateCoordinator.ts | 8 +- .../main/Update/ManualUpdater/Downloader.ts | 2 +- .../ManualUpdater/ManualUpdateCoordinator.ts | 4 +- .../ElectronProgressBarWithLifecycle.ts | 158 ++++++++++++++++++ .../ProgressBar/ProgressBarWithLifecycle.ts | 31 ++++ .../Update/ProgressBar/UpdateProgressBar.ts | 92 ++++++++++ .../electron/main/Update/UpdateProgressBar.ts | 95 ----------- .../ContextBridging/MethodContextBinder.ts | 5 +- .../electron/shared/IpcBridging/IpcProxy.ts | 4 +- .../desktop-runtime-errors/main.spec.ts | 4 +- .../RuntimeSanity/SanityChecks.spec.ts | 6 +- .../Validators/ValidatorTestRunner.ts | 4 +- .../View/Tree/TreeView/TreeView.spec.ts | 6 +- .../Assertions/ExpectDeepThrowsError.ts | 2 +- .../TestCases/SupportedOperatingSystems.ts | 4 +- .../Common/Timing/PlatformTimer.spec.ts | 15 +- .../Context/ApplicationContext.spec.ts | 58 +++++-- .../State/CategoryCollectionState.spec.ts | 2 +- .../State/Code/ApplicationCode.spec.ts | 2 +- .../Generation/UserScriptGenerator.spec.ts | 3 +- .../Script/DebouncedScriptSelection.spec.ts | 2 +- .../Parser/Common/TypeValidator.spec.ts | 4 +- .../Parser/Regex/RegexParser.spec.ts | 2 +- .../Expressions/Pipes/PipeFactory.spec.ts | 3 +- .../Pipes/PipelineCompiler.spec.ts | 10 +- .../SyntaxParsers/SyntaxParserTestsRunner.ts | 2 +- .../SyntaxParsers/WithParser.spec.ts | 6 +- .../Analyzers/AnalyzeTooLongLines.spec.ts | 13 +- .../TimestampedFilenameGenerator.spec.ts | 18 +- ...ecificTerminalLaunchCommandFactory.spec.ts | 3 +- .../Vite/ViteEnvironmentVariables.spec.ts | 7 +- .../ConditionBasedOsDetector.spec.ts | 7 +- .../WindowVariablesValidator.spec.ts | 15 +- .../RuntimeSanity/SanityChecks.spec.ts | 14 +- .../FactoryValidatorConcreteTestRunner.ts | 18 +- .../bootstrapping/DependencyProvider.spec.ts | 15 +- ...c.ts => RuntimeSanityBootstrapper.spec.ts} | 19 ++- .../Steps/PlatformInstructionSteps.spec.ts | 7 +- .../CompositeMarkdownRenderer.spec.ts | 2 +- .../Node/Hierarchy/TreeNodeHierarchy.spec.ts | 4 +- .../Rendering/UseGradualNodeRendering.spec.ts | 2 +- .../NodeCollection/TreeInputParser.spec.ts | 2 +- .../Tree/TreeView/TreeRoot/TreeRootManager.ts | 41 ++++- .../UseSelectedScriptNodeIds.spec.ts | 3 +- .../UseExpandCollapseAnimation.spec.ts | 7 +- .../Hooks/Clipboard/UseClipboard.spec.ts | 16 +- .../Hooks/UseUserSelectionState.spec.ts | 7 +- .../electron/main/IpcRegistration.spec.ts | 2 +- .../RendererApiProvider.spec.ts | 2 +- .../shared/IpcChannelDefinitions.spec.ts | 3 +- tests/unit/shared/Stubs/ExpressionStub.ts | 2 +- .../shared/Stubs/SanityCheckOptionsStub.ts | 4 +- .../unit/shared/Stubs/SanityValidatorStub.ts | 10 +- .../Stubs/VueDependencyInjectionApiStub.ts | 2 +- tsconfig.json | 3 +- vite-config-helper.ts | 6 +- 77 files changed, 656 insertions(+), 332 deletions(-) delete mode 100644 src/infrastructure/RuntimeSanity/Common/ISanityValidator.ts rename src/infrastructure/RuntimeSanity/Common/{ISanityCheckOptions.ts => SanityCheckOptions.ts} (71%) create mode 100644 src/infrastructure/RuntimeSanity/Common/SanityValidator.ts create mode 100644 src/presentation/bootstrapping/Modules/RuntimeSanityBootstrapper.ts delete mode 100644 src/presentation/bootstrapping/Modules/RuntimeSanityValidator.ts create mode 100644 src/presentation/electron/main/Update/ProgressBar/ElectronProgressBarWithLifecycle.ts create mode 100644 src/presentation/electron/main/Update/ProgressBar/ProgressBarWithLifecycle.ts create mode 100644 src/presentation/electron/main/Update/ProgressBar/UpdateProgressBar.ts delete mode 100644 src/presentation/electron/main/Update/UpdateProgressBar.ts rename tests/unit/presentation/bootstrapping/Modules/{RuntimeSanityValidator.spec.ts => RuntimeSanityBootstrapper.spec.ts} (60%) diff --git a/package-lock.json b/package-lock.json index 9ba6192d..8fbaf00c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "privacy.sexy", - "version": "0.13.5", + "version": "0.13.6", "hasInstallScript": true, "dependencies": { "@floating-ui/vue": "^1.1.1", @@ -53,7 +53,7 @@ "start-server-and-test": "^2.0.4", "terser": "^5.31.3", "tslib": "^2.6.3", - "typescript": "^5.4.5", + "typescript": "~5.5.4", "vite": "^5.3.4", "vitest": "^2.0.3", "vue-tsc": "^2.0.26", @@ -15689,10 +15689,11 @@ "dev": true }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -28699,9 +28700,9 @@ "dev": true }, "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "devOptional": true }, "uc.micro": { diff --git a/package.json b/package.json index 91bbfdcb..4e803fe8 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "start-server-and-test": "^2.0.4", "terser": "^5.31.3", "tslib": "^2.6.3", - "typescript": "^5.4.5", + "typescript": "~5.5.4", "vite": "^5.3.4", "vitest": "^2.0.3", "vue-tsc": "^2.0.26", diff --git a/src/application/Common/Enum.ts b/src/application/Common/Enum.ts index 81b9384a..3688ed44 100644 --- a/src/application/Common/Enum.ts +++ b/src/application/Common/Enum.ts @@ -33,23 +33,25 @@ function parseEnumValue( if (!casedValue) { throw new Error(`unknown ${enumName}: "${value}"`); } - return enumVariable[casedValue as keyof typeof enumVariable]; + return enumVariable[casedValue as keyof EnumVariable]; } export function getEnumNames ( enumVariable: EnumVariable, -): string[] { +): (string & keyof EnumVariable)[] { return Object .values(enumVariable) - .filter((enumMember): enumMember is string => isString(enumMember)); + .filter(( + enumMember, + ): enumMember is string & (keyof EnumVariable) => isString(enumMember)); } export function getEnumValues( enumVariable: EnumVariable, ): TEnumValue[] { return getEnumNames(enumVariable) - .map((level) => enumVariable[level]) as TEnumValue[]; + .map((name) => enumVariable[name]) as TEnumValue[]; } export function assertInRange( diff --git a/src/application/Context/ApplicationContext.ts b/src/application/Context/ApplicationContext.ts index 4828947a..7c9cd289 100644 --- a/src/application/Context/ApplicationContext.ts +++ b/src/application/Context/ApplicationContext.ts @@ -17,7 +17,7 @@ export class ApplicationContext implements IApplicationContext { public currentOs: OperatingSystem; public get state(): ICategoryCollectionState { - return this.states[this.collection.os]; + return this.getState(this.collection.os); } private readonly states: StateMachine; @@ -26,30 +26,51 @@ export class ApplicationContext implements IApplicationContext { public readonly app: IApplication, initialContext: OperatingSystem, ) { + this.setContext(initialContext); this.states = initializeStates(app); - this.changeContext(initialContext); } public changeContext(os: OperatingSystem): void { - assertInRange(os, OperatingSystem); if (this.currentOs === os) { return; } - const collection = this.app.getCollection(os); - this.collection = collection; const event: IApplicationContextChangedEvent = { - newState: this.states[os], - oldState: this.states[this.currentOs], + newState: this.getState(os), + oldState: this.getState(this.currentOs), }; + this.setContext(os); this.contextChanged.notify(event); + } + + private setContext(os: OperatingSystem): void { + validateOperatingSystem(os, this.app); + this.collection = this.app.getCollection(os); this.currentOs = os; } + + private getState(os: OperatingSystem): ICategoryCollectionState { + const state = this.states.get(os); + if (!state) { + throw new Error(`Operating system "${OperatingSystem[os]}" state is unknown.`); + } + return state; + } +} + +function validateOperatingSystem( + os: OperatingSystem, + app: IApplication, +): void { + assertInRange(os, OperatingSystem); + if (!app.getSupportedOsList().includes(os)) { + throw new Error(`Operating system "${OperatingSystem[os]}" is not supported.`); + } } function initializeStates(app: IApplication): StateMachine { const machine = new Map(); for (const collection of app.collections) { - machine[collection.os] = new CategoryCollectionState(collection); + machine.set(collection.os, new CategoryCollectionState(collection)); } return machine; } diff --git a/src/application/Parser/Executable/CategoryParser.ts b/src/application/Parser/Executable/CategoryParser.ts index 1adba82e..80c7e8b8 100644 --- a/src/application/Parser/Executable/CategoryParser.ts +++ b/src/application/Parser/Executable/CategoryParser.ts @@ -82,7 +82,7 @@ function ensureValidCategory( }); validator.assertType((v) => v.assertObject({ value: category, - valueName: `Category '${category.category}'` ?? 'Category', + valueName: category.category ? `Category '${category.category}'` : 'Category', allowedProperties: [ 'docs', 'children', 'category', ], diff --git a/src/application/Parser/Executable/Script/ScriptParser.ts b/src/application/Parser/Executable/Script/ScriptParser.ts index 0eaf507c..05e6b8a8 100644 --- a/src/application/Parser/Executable/Script/ScriptParser.ts +++ b/src/application/Parser/Executable/Script/ScriptParser.ts @@ -106,7 +106,7 @@ function validateScript( ): asserts script is NonNullable { validator.assertType((v) => v.assertObject({ value: script, - valueName: `Script '${script.name}'` ?? 'Script', + valueName: script.name ? `Script '${script.name}'` : 'Script', allowedProperties: [ 'name', 'recommend', 'code', 'revertCode', 'call', 'docs', ], diff --git a/src/application/Parser/Executable/Script/Validation/Analyzers/AnalyzeDuplicateLines.ts b/src/application/Parser/Executable/Script/Validation/Analyzers/AnalyzeDuplicateLines.ts index 06256a1e..b41de254 100644 --- a/src/application/Parser/Executable/Script/Validation/Analyzers/AnalyzeDuplicateLines.ts +++ b/src/application/Parser/Executable/Script/Validation/Analyzers/AnalyzeDuplicateLines.ts @@ -15,7 +15,7 @@ export type DuplicateLinesAnalyzer = CodeValidationAnalyzer & { export const analyzeDuplicateLines: DuplicateLinesAnalyzer = ( lines: readonly CodeLine[], language: ScriptingLanguage, - syntaxFactory = createSyntax, + syntaxFactory: SyntaxFactory = createSyntax, ) => { const syntax = syntaxFactory(language); return lines diff --git a/src/infrastructure/RuntimeSanity/Common/FactoryValidator.ts b/src/infrastructure/RuntimeSanity/Common/FactoryValidator.ts index 8207d3b1..d6112aed 100644 --- a/src/infrastructure/RuntimeSanity/Common/FactoryValidator.ts +++ b/src/infrastructure/RuntimeSanity/Common/FactoryValidator.ts @@ -1,16 +1,16 @@ -import type { ISanityValidator } from './ISanityValidator'; -import type { ISanityCheckOptions } from './ISanityCheckOptions'; +import type { SanityValidator } from './SanityValidator'; +import type { SanityCheckOptions } from './SanityCheckOptions'; export type FactoryFunction = () => T; -export abstract class FactoryValidator implements ISanityValidator { +export abstract class FactoryValidator implements SanityValidator { private readonly factory: FactoryFunction; protected constructor(factory: FactoryFunction) { this.factory = factory; } - public abstract shouldValidate(options: ISanityCheckOptions): boolean; + public abstract shouldValidate(options: SanityCheckOptions): boolean; public abstract name: string; diff --git a/src/infrastructure/RuntimeSanity/Common/ISanityValidator.ts b/src/infrastructure/RuntimeSanity/Common/ISanityValidator.ts deleted file mode 100644 index 6de0c05b..00000000 --- a/src/infrastructure/RuntimeSanity/Common/ISanityValidator.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { ISanityCheckOptions } from './ISanityCheckOptions'; - -export interface ISanityValidator { - readonly name: string; - shouldValidate(options: ISanityCheckOptions): boolean; - collectErrors(): Iterable; -} diff --git a/src/infrastructure/RuntimeSanity/Common/ISanityCheckOptions.ts b/src/infrastructure/RuntimeSanity/Common/SanityCheckOptions.ts similarity index 71% rename from src/infrastructure/RuntimeSanity/Common/ISanityCheckOptions.ts rename to src/infrastructure/RuntimeSanity/Common/SanityCheckOptions.ts index 574bc3a8..16a004df 100644 --- a/src/infrastructure/RuntimeSanity/Common/ISanityCheckOptions.ts +++ b/src/infrastructure/RuntimeSanity/Common/SanityCheckOptions.ts @@ -1,4 +1,4 @@ -export interface ISanityCheckOptions { +export interface SanityCheckOptions { readonly validateEnvironmentVariables: boolean; readonly validateWindowVariables: boolean; } diff --git a/src/infrastructure/RuntimeSanity/Common/SanityValidator.ts b/src/infrastructure/RuntimeSanity/Common/SanityValidator.ts new file mode 100644 index 00000000..9c3f706e --- /dev/null +++ b/src/infrastructure/RuntimeSanity/Common/SanityValidator.ts @@ -0,0 +1,7 @@ +import type { SanityCheckOptions } from './SanityCheckOptions'; + +export interface SanityValidator { + readonly name: string; + shouldValidate(options: SanityCheckOptions): boolean; + collectErrors(): Iterable; +} diff --git a/src/infrastructure/RuntimeSanity/SanityChecks.ts b/src/infrastructure/RuntimeSanity/SanityChecks.ts index cc46ec2d..9b9c5bd7 100644 --- a/src/infrastructure/RuntimeSanity/SanityChecks.ts +++ b/src/infrastructure/RuntimeSanity/SanityChecks.ts @@ -1,16 +1,23 @@ import { EnvironmentVariablesValidator } from './Validators/EnvironmentVariablesValidator'; -import type { ISanityCheckOptions } from './Common/ISanityCheckOptions'; -import type { ISanityValidator } from './Common/ISanityValidator'; +import type { SanityCheckOptions } from './Common/SanityCheckOptions'; +import type { SanityValidator } from './Common/SanityValidator'; -const DefaultSanityValidators: ISanityValidator[] = [ +const DefaultSanityValidators: SanityValidator[] = [ new EnvironmentVariablesValidator(), ]; +export interface RuntimeSanityValidator { + ( + options: SanityCheckOptions, + validators?: readonly SanityValidator[], + ): void; +} + /* Helps to fail-fast on errors */ -export function validateRuntimeSanity( - options: ISanityCheckOptions, - validators: readonly ISanityValidator[] = DefaultSanityValidators, -): void { +export const validateRuntimeSanity: RuntimeSanityValidator = ( + options: SanityCheckOptions, + validators: readonly SanityValidator[] = DefaultSanityValidators, +) => { if (!validators.length) { throw new Error('missing validators'); } @@ -26,9 +33,9 @@ export function validateRuntimeSanity( if (errorMessages.length > 0) { throw new Error(`Sanity check failed.\n${errorMessages.join('\n---\n')}`); } -} +}; -function getErrorMessage(validator: ISanityValidator): string | undefined { +function getErrorMessage(validator: SanityValidator): string | undefined { const errorMessages = [...validator.collectErrors()]; if (!errorMessages.length) { return undefined; diff --git a/src/infrastructure/RuntimeSanity/Validators/EnvironmentVariablesValidator.ts b/src/infrastructure/RuntimeSanity/Validators/EnvironmentVariablesValidator.ts index 8c61d267..4cefe97c 100644 --- a/src/infrastructure/RuntimeSanity/Validators/EnvironmentVariablesValidator.ts +++ b/src/infrastructure/RuntimeSanity/Validators/EnvironmentVariablesValidator.ts @@ -1,7 +1,7 @@ import type { IEnvironmentVariables } from '@/infrastructure/EnvironmentVariables/IEnvironmentVariables'; import { EnvironmentVariablesFactory } from '@/infrastructure/EnvironmentVariables/EnvironmentVariablesFactory'; import { FactoryValidator, type FactoryFunction } from '../Common/FactoryValidator'; -import type { ISanityCheckOptions } from '../Common/ISanityCheckOptions'; +import type { SanityCheckOptions } from '../Common/SanityCheckOptions'; export class EnvironmentVariablesValidator extends FactoryValidator { constructor( @@ -14,7 +14,7 @@ export class EnvironmentVariablesValidator extends FactoryValidator { constructor(factory: FactoryFunction = () => window) { @@ -9,7 +9,7 @@ export class WindowVariablesValidator extends FactoryValidator public override name = 'window variables'; - public override shouldValidate(options: ISanityCheckOptions): boolean { + public override shouldValidate(options: SanityCheckOptions): boolean { return options.validateWindowVariables; } } diff --git a/src/presentation/bootstrapping/ApplicationBootstrapper.ts b/src/presentation/bootstrapping/ApplicationBootstrapper.ts index 90447a81..a94fec07 100644 --- a/src/presentation/bootstrapping/ApplicationBootstrapper.ts +++ b/src/presentation/bootstrapping/ApplicationBootstrapper.ts @@ -1,4 +1,4 @@ -import { RuntimeSanityValidator } from './Modules/RuntimeSanityValidator'; +import { RuntimeSanityBootstrapper } from './Modules/RuntimeSanityBootstrapper'; import { AppInitializationLogger } from './Modules/AppInitializationLogger'; import { DependencyBootstrapper } from './Modules/DependencyBootstrapper'; import { MobileSafariActivePseudoClassEnabler } from './Modules/MobileSafariActivePseudoClassEnabler'; @@ -17,7 +17,7 @@ export class ApplicationBootstrapper implements Bootstrapper { private static getAllBootstrappers(): Bootstrapper[] { return [ - new RuntimeSanityValidator(), + new RuntimeSanityBootstrapper(), new DependencyBootstrapper(), new AppInitializationLogger(), new MobileSafariActivePseudoClassEnabler(), diff --git a/src/presentation/bootstrapping/Modules/RuntimeSanityBootstrapper.ts b/src/presentation/bootstrapping/Modules/RuntimeSanityBootstrapper.ts new file mode 100644 index 00000000..79d67497 --- /dev/null +++ b/src/presentation/bootstrapping/Modules/RuntimeSanityBootstrapper.ts @@ -0,0 +1,15 @@ +import { validateRuntimeSanity, type RuntimeSanityValidator } from '@/infrastructure/RuntimeSanity/SanityChecks'; +import type { Bootstrapper } from '../Bootstrapper'; + +export class RuntimeSanityBootstrapper implements Bootstrapper { + constructor(private readonly validator: RuntimeSanityValidator = validateRuntimeSanity) { + + } + + public async bootstrap(): Promise { + this.validator({ + validateEnvironmentVariables: true, + validateWindowVariables: true, + }); + } +} diff --git a/src/presentation/bootstrapping/Modules/RuntimeSanityValidator.ts b/src/presentation/bootstrapping/Modules/RuntimeSanityValidator.ts deleted file mode 100644 index 3a6adde6..00000000 --- a/src/presentation/bootstrapping/Modules/RuntimeSanityValidator.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { validateRuntimeSanity } from '@/infrastructure/RuntimeSanity/SanityChecks'; -import type { Bootstrapper } from '../Bootstrapper'; - -export class RuntimeSanityValidator implements Bootstrapper { - constructor(private readonly validator = validateRuntimeSanity) { - - } - - public async bootstrap(): Promise { - this.validator({ - validateEnvironmentVariables: true, - validateWindowVariables: true, - }); - } -} diff --git a/src/presentation/components/Scripts/View/Tree/TreeView/Node/HierarchicalTreeNode.vue b/src/presentation/components/Scripts/View/Tree/TreeView/Node/HierarchicalTreeNode.vue index 5d04c734..add02e84 100644 --- a/src/presentation/components/Scripts/View/Tree/TreeView/Node/HierarchicalTreeNode.vue +++ b/src/presentation/components/Scripts/View/Tree/TreeView/Node/HierarchicalTreeNode.vue @@ -39,7 +39,7 @@ :tree-root="treeRoot" :rendering-strategy="renderingStrategy" > -