-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.ts
28 lines (25 loc) · 1.09 KB
/
utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
export { getRawAnalyticsMetadata } from './testing-utils';
import { METADATA_DATA_ATTRIBUTE } from './attributes';
import { GeneratedAnalyticsMetadata, GeneratedAnalyticsMetadataFragment } from './interfaces';
import { findLogicalParent } from './dom-utils';
import { mergeMetadata, processMetadata } from './metadata-utils';
export const getGeneratedAnalyticsMetadata = (target: HTMLElement | null): GeneratedAnalyticsMetadata => {
let metadata: GeneratedAnalyticsMetadataFragment = {};
let currentNode = target;
while (currentNode) {
try {
const currentMetadataString = currentNode.dataset[METADATA_DATA_ATTRIBUTE];
if (currentMetadataString) {
const currentMetadata = JSON.parse(currentMetadataString);
metadata = mergeMetadata(metadata, processMetadata(currentNode, currentMetadata));
}
} catch (ex) {
/* empty */
} finally {
currentNode = findLogicalParent(currentNode);
}
}
return metadata as GeneratedAnalyticsMetadata;
};