diff --git a/.eslintrc.json b/.eslintrc.json index b8d46e0ebf..1cc9b2fbce 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -100,7 +100,6 @@ ], /* TODO: evaluate usage of these rules and fix issues as needed */ - "no-case-declarations": "off", "@typescript-eslint/ban-types": "off", "@typescript-eslint/no-implied-eval": "off", "@typescript-eslint/no-var-requires": "off", @@ -124,6 +123,7 @@ "rules": { "import/no-extraneous-dependencies": ["error", { "devDependencies": true }], "max-lines-per-function": "off", + "no-case-declarations": "off", "no-console": "off" } } diff --git a/packages/angular/build/src/builders/extract-i18n/builder.ts b/packages/angular/build/src/builders/extract-i18n/builder.ts index b741647583..78ced2c7e1 100644 --- a/packages/angular/build/src/builders/extract-i18n/builder.ts +++ b/packages/angular/build/src/builders/extract-i18n/builder.ts @@ -153,13 +153,16 @@ async function createSerializer( case Format.LegacyMigrate: return new LegacyMessageIdMigrationSerializer(diagnostics); case Format.Arb: - const fileSystem = { - relative(from: string, to: string): string { - return path.relative(from, to); - }, - }; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return new ArbTranslationSerializer(sourceLocale, basePath as any, fileSystem as any); + return new ArbTranslationSerializer( + sourceLocale, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + basePath as any, + { + relative(from: string, to: string): string { + return path.relative(from, to); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any, + ); } } diff --git a/packages/angular/build/src/tools/angular/transformers/jit-bootstrap-transformer.ts b/packages/angular/build/src/tools/angular/transformers/jit-bootstrap-transformer.ts index 90b36b4605..89b96244b7 100644 --- a/packages/angular/build/src/tools/angular/transformers/jit-bootstrap-transformer.ts +++ b/packages/angular/build/src/tools/angular/transformers/jit-bootstrap-transformer.ts @@ -145,9 +145,8 @@ export function elideImports( let symbol: ts.Symbol | undefined; switch (node.kind) { case ts.SyntaxKind.Identifier: - const parent = node.parent; - if (parent && ts.isShorthandPropertyAssignment(parent)) { - const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(parent); + if (node.parent && ts.isShorthandPropertyAssignment(node.parent)) { + const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(node.parent); if (shorthandSymbol) { symbol = shorthandSymbol; } diff --git a/packages/angular/build/src/tools/angular/transformers/jit-resource-transformer.ts b/packages/angular/build/src/tools/angular/transformers/jit-resource-transformer.ts index bd33a06f1d..3d78783785 100644 --- a/packages/angular/build/src/tools/angular/transformers/jit-resource-transformer.ts +++ b/packages/angular/build/src/tools/angular/transformers/jit-resource-transformer.ts @@ -210,7 +210,7 @@ function visitComponentMetadata( return node; - case 'styleUrls': + case 'styleUrls': { if (!ts.isArrayLiteralExpression(node.initializer)) { return node; } @@ -234,6 +234,7 @@ function visitComponentMetadata( // The external styles will be added afterwards in combination with any inline styles return undefined; + } default: // All other elements are passed through return node; diff --git a/packages/angular/build/src/utils/index-file/inline-fonts.ts b/packages/angular/build/src/utils/index-file/inline-fonts.ts index a6f9e8452d..c89b5240c5 100644 --- a/packages/angular/build/src/utils/index-file/inline-fonts.ts +++ b/packages/angular/build/src/utils/index-file/inline-fonts.ts @@ -145,7 +145,7 @@ export class InlineFontsProcessor { } break; - case 'link': + case 'link': { const hrefAttr = attrs.some(({ name, value }) => name === 'rel' && value === 'stylesheet') && attrs.find(({ name, value }) => name === 'href' && hrefsContent.has(value)); @@ -157,7 +157,7 @@ export class InlineFontsProcessor { rewriter.emitStartTag(tag); } break; - + } default: rewriter.emitStartTag(tag); diff --git a/packages/angular/cli/src/command-builder/schematics-command-module.ts b/packages/angular/cli/src/command-builder/schematics-command-module.ts index 6f92b46141..b1c88c6d8f 100644 --- a/packages/angular/cli/src/command-builder/schematics-command-module.ts +++ b/packages/angular/cli/src/command-builder/schematics-command-module.ts @@ -193,27 +193,25 @@ export abstract class SchematicsCommandModule continue; } - const choices = definition.items?.map((item) => { - return typeof item == 'string' - ? { - name: item, - value: item, - } - : { - name: item.label, - value: item.value, - }; - }); - answers[definition.id] = await ( definition.multiselect ? prompts.checkbox : prompts.select )({ message: definition.message, default: definition.default, - choices, + choices: definition.items?.map((item) => + typeof item == 'string' + ? { + name: item, + value: item, + } + : { + name: item.label, + value: item.value, + }, + ), }); break; - case 'input': + case 'input': { let finalValue: JsonValue | undefined; answers[definition.id] = await prompts.input({ message: definition.message, @@ -258,6 +256,7 @@ export abstract class SchematicsCommandModule answers[definition.id] = finalValue; } break; + } } } diff --git a/packages/angular/cli/src/command-builder/utilities/schematic-workflow.ts b/packages/angular/cli/src/command-builder/utilities/schematic-workflow.ts index 7df95063e5..f5caa0754d 100644 --- a/packages/angular/cli/src/command-builder/utilities/schematic-workflow.ts +++ b/packages/angular/cli/src/command-builder/utilities/schematic-workflow.ts @@ -10,6 +10,10 @@ import { logging } from '@angular-devkit/core'; import { NodeWorkflow } from '@angular-devkit/schematics/tools'; import { colors } from '../../utilities/color'; +function removeLeadingSlash(value: string): string { + return value[0] === '/' ? value.slice(1) : value; +} + export function subscribeToWorkflow( workflow: NodeWorkflow, logger: logging.LoggerApi, @@ -24,13 +28,14 @@ export function subscribeToWorkflow( const reporterSubscription = workflow.reporter.subscribe((event) => { // Strip leading slash to prevent confusion. - const eventPath = event.path.charAt(0) === '/' ? event.path.substring(1) : event.path; + const eventPath = removeLeadingSlash(event.path); switch (event.kind) { case 'error': error = true; - const desc = event.description == 'alreadyExist' ? 'already exists' : 'does not exist'; - logger.error(`ERROR! ${eventPath} ${desc}.`); + logger.error( + `ERROR! ${eventPath} ${event.description == 'alreadyExist' ? 'already exists' : 'does not exist'}.`, + ); break; case 'update': logs.push(`${colors.cyan('UPDATE')} ${eventPath} (${event.content.length} bytes)`); @@ -45,8 +50,7 @@ export function subscribeToWorkflow( files.add(eventPath); break; case 'rename': - const eventToPath = event.to.charAt(0) === '/' ? event.to.substring(1) : event.to; - logs.push(`${colors.blue('RENAME')} ${eventPath} => ${eventToPath}`); + logs.push(`${colors.blue('RENAME')} ${eventPath} => ${removeLeadingSlash(event.to)}`); files.add(eventPath); break; } diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts index 0a32b45599..e115ada85c 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts @@ -168,13 +168,16 @@ async function createSerializer( case Format.LegacyMigrate: return new LegacyMessageIdMigrationSerializer(diagnostics); case Format.Arb: - const fileSystem = { - relative(from: string, to: string): string { - return path.relative(from, to); - }, - }; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return new ArbTranslationSerializer(sourceLocale, basePath as any, fileSystem as any); + return new ArbTranslationSerializer( + sourceLocale, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + basePath as any, + { + relative(from: string, to: string): string { + return path.relative(from, to); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any, + ); } } diff --git a/packages/angular_devkit/core/src/workspace/json/reader.ts b/packages/angular_devkit/core/src/workspace/json/reader.ts index 095ef7f21a..cc258bf00e 100644 --- a/packages/angular_devkit/core/src/workspace/json/reader.ts +++ b/packages/angular_devkit/core/src/workspace/json/reader.ts @@ -191,7 +191,7 @@ function parseProject( for (const [name, value] of Object.entries(projectNodeValue)) { switch (name) { case 'targets': - case 'architect': + case 'architect': { const nodes = findNodeAtLocation(projectNode, [name]); if (!isJsonObject(value) || !nodes) { context.error(`Invalid "${name}" field found; expected an object.`, value); @@ -201,6 +201,7 @@ function parseProject( targets = parseTargetsObject(projectName, nodes, context); jsonMetadata.hasLegacyTargetsName = name === 'architect'; break; + } case 'prefix': case 'root': case 'sourceRoot': diff --git a/packages/angular_devkit/core/src/workspace/json/writer.ts b/packages/angular_devkit/core/src/workspace/json/writer.ts index 8d1b5674c4..e2b117abbd 100644 --- a/packages/angular_devkit/core/src/workspace/json/writer.ts +++ b/packages/angular_devkit/core/src/workspace/json/writer.ts @@ -132,16 +132,18 @@ function normalizeValue( switch (type) { case 'project': return convertJsonProject(value as ProjectDefinition); - case 'projectcollection': + case 'projectcollection': { const projects = convertJsonProjectCollection(value as Iterable<[string, ProjectDefinition]>); return isEmpty(projects) ? undefined : projects; + } case 'target': return convertJsonTarget(value as TargetDefinition); - case 'targetcollection': + case 'targetcollection': { const targets = convertJsonTargetCollection(value as Iterable<[string, TargetDefinition]>); return isEmpty(targets) ? undefined : targets; + } default: return value as JsonValue; } diff --git a/packages/angular_devkit/schematics/src/engine/engine.ts b/packages/angular_devkit/schematics/src/engine/engine.ts index e8aa63b98f..15af120f7c 100644 --- a/packages/angular_devkit/schematics/src/engine/engine.ts +++ b/packages/angular_devkit/schematics/src/engine/engine.ts @@ -370,14 +370,14 @@ export class SchematicEngine new NullTree(); case 'empty:': return () => empty(); - default: - const hostSource = this._host.createSourceFromUrl(url, context); - if (!hostSource) { - throw new UnknownUrlSourceProtocol(url.toString()); - } - - return hostSource; } + + const hostSource = this._host.createSourceFromUrl(url, context); + if (!hostSource) { + throw new UnknownUrlSourceProtocol(url.toString()); + } + + return hostSource; } executePostTasks(): Observable { diff --git a/packages/angular_devkit/schematics/src/tree/action.ts b/packages/angular_devkit/schematics/src/tree/action.ts index 7c78685571..008aa6b64c 100644 --- a/packages/angular_devkit/schematics/src/tree/action.ts +++ b/packages/angular_devkit/schematics/src/tree/action.ts @@ -72,7 +72,7 @@ export class ActionList implements Iterable { toDelete.add(action.path); break; - case 'r': + case 'r': { const maybeCreate = toCreate.get(action.path); const maybeOverwrite = toOverwrite.get(action.path); if (maybeCreate) { @@ -100,6 +100,7 @@ export class ActionList implements Iterable { toRename.set(action.path, action.to); } break; + } } } diff --git a/packages/angular_devkit/schematics_cli/bin/schematics.ts b/packages/angular_devkit/schematics_cli/bin/schematics.ts index e921b803e8..d370edf982 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics.ts +++ b/packages/angular_devkit/schematics_cli/bin/schematics.ts @@ -47,6 +47,10 @@ function parseSchematicName(str: string | null): { collection: string; schematic return { collection, schematic }; } +function removeLeadingSlash(value: string): string { + return value[0] === '/' ? value.slice(1) : value; +} + export interface MainOptions { args: string[]; stdout?: ProcessOutput; @@ -87,27 +91,25 @@ function _createPromptProvider(): schema.PromptProvider { continue; } - const choices = definition.items?.map((item) => { - return typeof item == 'string' - ? { - name: item, - value: item, - } - : { - name: item.label, - value: item.value, - }; - }); - answers[definition.id] = await ( definition.multiselect ? prompts.checkbox : prompts.select )({ message: definition.message, default: definition.default, - choices, + choices: definition.items.map((item) => + typeof item == 'string' + ? { + name: item, + value: item, + } + : { + name: item.label, + value: item.value, + }, + ), }); break; - case 'input': + case 'input': { let finalValue: JsonValue | undefined; answers[definition.id] = await prompts.input({ message: definition.message, @@ -152,6 +154,7 @@ function _createPromptProvider(): schema.PromptProvider { answers[definition.id] = finalValue; } break; + } } } @@ -287,14 +290,14 @@ export async function main({ workflow.reporter.subscribe((event) => { nothingDone = false; // Strip leading slash to prevent confusion. - const eventPath = event.path.startsWith('/') ? event.path.slice(1) : event.path; + const eventPath = removeLeadingSlash(event.path); switch (event.kind) { case 'error': error = true; - - const desc = event.description == 'alreadyExist' ? 'already exists' : 'does not exist'; - logger.error(`ERROR! ${eventPath} ${desc}.`); + logger.error( + `ERROR! ${eventPath} ${event.description == 'alreadyExist' ? 'already exists' : 'does not exist'}.`, + ); break; case 'update': loggingQueue.push(`${colors.cyan('UPDATE')} ${eventPath} (${event.content.length} bytes)`); @@ -306,8 +309,9 @@ export async function main({ loggingQueue.push(`${colors.yellow('DELETE')} ${eventPath}`); break; case 'rename': - const eventToPath = event.to.startsWith('/') ? event.to.slice(1) : event.to; - loggingQueue.push(`${colors.blue('RENAME')} ${eventPath} => ${eventToPath}`); + loggingQueue.push( + `${colors.blue('RENAME')} ${eventPath} => ${removeLeadingSlash(event.to)}`, + ); break; } }); diff --git a/packages/ngtools/webpack/src/transformers/elide_imports.ts b/packages/ngtools/webpack/src/transformers/elide_imports.ts index ea0dfdf66a..856511db16 100644 --- a/packages/ngtools/webpack/src/transformers/elide_imports.ts +++ b/packages/ngtools/webpack/src/transformers/elide_imports.ts @@ -62,9 +62,8 @@ export function elideImports( let symbol: ts.Symbol | undefined; switch (node.kind) { case ts.SyntaxKind.Identifier: - const parent = node.parent; - if (parent && ts.isShorthandPropertyAssignment(parent)) { - const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(parent); + if (node.parent && ts.isShorthandPropertyAssignment(node.parent)) { + const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(node.parent); if (shorthandSymbol) { symbol = shorthandSymbol; } diff --git a/packages/ngtools/webpack/src/transformers/replace_resources.ts b/packages/ngtools/webpack/src/transformers/replace_resources.ts index a9f62380c3..a821946601 100644 --- a/packages/ngtools/webpack/src/transformers/replace_resources.ts +++ b/packages/ngtools/webpack/src/transformers/replace_resources.ts @@ -158,7 +158,7 @@ function visitComponentMetadata( case 'moduleId': return undefined; - case 'templateUrl': + case 'templateUrl': { const url = getResourceUrl(node.initializer); if (!url) { return node; @@ -179,9 +179,10 @@ function visitComponentMetadata( nodeFactory.createIdentifier('template'), importName, ); + } case 'styles': case 'styleUrl': - case 'styleUrls': + case 'styleUrls': { const isInlineStyle = name === 'styles'; let styles: Iterable; @@ -219,6 +220,7 @@ function visitComponentMetadata( } return undefined; + } default: return node; }