From 34faea27f5665f83eacc475d84c9c7d8375d75a9 Mon Sep 17 00:00:00 2001 From: Igor Katsuba Date: Sat, 7 Sep 2024 20:26:05 +0300 Subject: [PATCH] feat(angular): add the `removeMetadataProperty` function --- .../remove-metadata-property.spec.ts.snap | 7 ++++ .../metadata/remove-metadata-property.spec.ts | 32 +++++++++++++++++++ .../lib/metadata/remove-metadata-property.ts | 19 +++++++++++ 3 files changed, 58 insertions(+) create mode 100644 packages/angular/src/lib/metadata/__snapshots__/remove-metadata-property.spec.ts.snap create mode 100644 packages/angular/src/lib/metadata/remove-metadata-property.spec.ts create mode 100644 packages/angular/src/lib/metadata/remove-metadata-property.ts diff --git a/packages/angular/src/lib/metadata/__snapshots__/remove-metadata-property.spec.ts.snap b/packages/angular/src/lib/metadata/__snapshots__/remove-metadata-property.spec.ts.snap new file mode 100644 index 0000000..ed5ce53 --- /dev/null +++ b/packages/angular/src/lib/metadata/__snapshots__/remove-metadata-property.spec.ts.snap @@ -0,0 +1,7 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`removeMetadataProperty > should remove the providers property 1`] = ` +" +@Component({}) class AppComponent {} +" +`; diff --git a/packages/angular/src/lib/metadata/remove-metadata-property.spec.ts b/packages/angular/src/lib/metadata/remove-metadata-property.spec.ts new file mode 100644 index 0000000..28e2cb2 --- /dev/null +++ b/packages/angular/src/lib/metadata/remove-metadata-property.spec.ts @@ -0,0 +1,32 @@ +import { Tree } from '@angular-devkit/schematics'; + +import { createSourceFile, readFileSync, saveProject } from '@mutates/core'; + +import { createTestingTree } from '../../testing'; +import { getComponents } from '../component'; +import { createAngularProject } from '../create-angular-project'; +import { removeMetadataProperty } from './remove-metadata-property'; + +describe('removeMetadataProperty', () => { + let host: Tree; + beforeEach(() => { + host = createTestingTree(); + + createAngularProject(host); + }); + + it('should remove the providers property', () => { + createSourceFile( + 'src/main.ts', + ` +@Component({providers: [Set, Map]}) class AppComponent {} +`, + ); + + removeMetadataProperty(getComponents('src/main.ts').at(0)!, 'providers'); + + saveProject(); + + expect(readFileSync('src/main.ts')).matchSnapshot(); + }); +}); diff --git a/packages/angular/src/lib/metadata/remove-metadata-property.ts b/packages/angular/src/lib/metadata/remove-metadata-property.ts new file mode 100644 index 0000000..76a5704 --- /dev/null +++ b/packages/angular/src/lib/metadata/remove-metadata-property.ts @@ -0,0 +1,19 @@ +import { ClassDeclaration } from 'ts-morph'; + +import { getObjectProperties } from '@mutates/core'; + +import { MetadataProperty } from '../types/metadata-property'; +import { getMetadata } from './get-metadata'; + +export function removeMetadataProperty( + klass: ClassDeclaration, + property: T, +): void { + const [metadata] = getMetadata(klass); + + const prop = getObjectProperties(metadata, { + name: property as string, + }).at(0); + + prop?.remove(); +}