Skip to content

Commit

Permalink
feat(angular): add the removeMetadataProperty function
Browse files Browse the repository at this point in the history
  • Loading branch information
IKatsuba committed Sep 7, 2024
1 parent 77799d5 commit 34faea2
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`removeMetadataProperty > should remove the providers property 1`] = `
"
@Component({}) class AppComponent {}
"
`;
32 changes: 32 additions & 0 deletions packages/angular/src/lib/metadata/remove-metadata-property.spec.ts
Original file line number Diff line number Diff line change
@@ -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();
});
});
19 changes: 19 additions & 0 deletions packages/angular/src/lib/metadata/remove-metadata-property.ts
Original file line number Diff line number Diff line change
@@ -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<T extends MetadataProperty>(
klass: ClassDeclaration,
property: T,
): void {
const [metadata] = getMetadata(klass);

const prop = getObjectProperties(metadata, {
name: property as string,
}).at(0);

prop?.remove();
}

0 comments on commit 34faea2

Please sign in to comment.