Skip to content

Commit 721a476

Browse files
authored
chore: Add additional metadata to reporting (#132)
1 parent fd512d9 commit 721a476

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

src/internal/base-component/__tests__/use-component-metadata.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,28 @@ test('should attach readonly metadata to the returned root DOM node', () => {
1818
expect(Object.isFrozen(rootNode[COMPONENT_METADATA_KEY])).toBe(true);
1919
});
2020

21+
test('should attach package metadata to the DOM node', () => {
22+
function TestComponent() {
23+
const ref = useComponentMetadata('test-component', {
24+
packageName: 'component-toolkit',
25+
version: '1.0.0',
26+
theme: 'default',
27+
});
28+
return <div ref={ref}>Test</div>;
29+
}
30+
31+
const { container } = render(<TestComponent />);
32+
const rootNode: any = container.firstChild;
33+
34+
expect(rootNode[COMPONENT_METADATA_KEY]).toEqual({
35+
name: 'test-component',
36+
packageName: 'component-toolkit',
37+
version: '1.0.0',
38+
theme: 'default',
39+
});
40+
expect(Object.isFrozen(rootNode[COMPONENT_METADATA_KEY])).toBe(true);
41+
});
42+
2143
test('should include analytics property when provided', () => {
2244
function TestComponent() {
2345
const ref = useComponentMetadata('test-component', '3.0.0', { instanceId: '123' });

src/internal/base-component/component-metadata.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,36 @@ import { AnalyticsMetadata } from './metrics/interfaces';
66

77
export const COMPONENT_METADATA_KEY = '__awsuiMetadata__';
88

9-
interface AwsUiMetadata {
10-
name: string;
9+
interface PackageMetadata {
10+
packageName?: string;
1111
version: string;
12+
theme?: string;
13+
}
14+
15+
interface ComponentMetadata extends PackageMetadata {
16+
name: string;
1217
analytics?: AnalyticsMetadata;
1318
}
1419

1520
interface HTMLMetadataElement extends HTMLElement {
16-
[COMPONENT_METADATA_KEY]: AwsUiMetadata;
21+
[COMPONENT_METADATA_KEY]: ComponentMetadata;
1722
}
1823

1924
export function useComponentMetadata<T = any>(
2025
componentName: string,
21-
packageVersion: string,
26+
packageMetadata: PackageMetadata | string,
2227
analyticsMetadata?: AnalyticsMetadata
2328
) {
2429
const elementRef = useRef<T>(null);
2530

2631
useEffect(() => {
2732
if (elementRef.current) {
33+
const pkgMetadata = typeof packageMetadata === 'string' ? { version: packageMetadata } : packageMetadata;
34+
2835
const node = elementRef.current as unknown as HTMLMetadataElement;
29-
const metadata: AwsUiMetadata = {
36+
const metadata: ComponentMetadata = {
37+
...pkgMetadata,
3038
name: componentName,
31-
version: packageVersion,
3239
};
3340

3441
// Only add analytics property to metadata if analytics property is non-empty

0 commit comments

Comments
 (0)