summaryrefslogtreecommitdiff
path: root/node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js
init commit
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js')
-rw-r--r--node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js b/node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js
new file mode 100644
index 0000000..cafcce8
--- /dev/null
+++ b/node_modules/@jet-app/app-store/tmp/src/foundation/media/data-structure.js
@@ -0,0 +1,84 @@
+/**
+ * Created by joel on 1/25/18.
+ */
+import * as serverData from "../json-parsing/server-data";
+import { ResponseMetadata } from "../network/network";
+export function dataFromDataContainer(objectGraph, dataContainer) {
+ const dataArray = serverData.asArrayOrEmpty(dataContainer, "data");
+ if (dataArray.length > 1) {
+ objectGraph.console.warn("tried to extract data from container but more than one member present");
+ }
+ if (dataArray.length !== 1) {
+ return null;
+ }
+ return dataArray[0];
+}
+export function dataCollectionFromDataContainer(dataContainer) {
+ return serverData.asArrayOrEmpty(dataContainer, "data");
+}
+/**
+ * Check whether or not a server vended `Data` object is hydrated or not.
+ * @param {Data} data to check if hydrated.
+ */
+export function isDataHydrated(data) {
+ return serverData.isDefinedNonNull(data.attributes);
+}
+/**
+ * Check whether or not a entire data collection contains elements that are fully hydrated.
+ * @param {Data[]} dataArray Data array to check.
+ */
+export function isDataCollectionHydrated(dataCollection) {
+ // Iterate from the back to determine if fully hydrated faster - unhydrated elements tend to be latter elements.
+ const lastIndex = dataCollection.length - 1;
+ for (let index = lastIndex; index >= 0; index--) {
+ const data = dataCollection[index];
+ if (!isDataHydrated(data)) {
+ return false;
+ }
+ }
+ return true;
+}
+/**
+ * Check whether or not a entire data collection at least has 1 element that is fully hydrated.
+ * @param {Data[]} dataArray Data array to check.
+ */
+export function isDataCollectionPartiallyHydrated(dataCollection) {
+ for (const data of dataCollection) {
+ if (isDataHydrated(data)) {
+ return true;
+ }
+ }
+ return false;
+}
+/**
+ * Check whether or not a today data module represents a today page on the heuristic that:
+ * - The "Today" modules have labels with value 'TodayForApps' as opposed to `WhatYouMissed`
+ * - Date marker "Today" modules have a 'date' field.
+ */
+export function isModuleTodayForApps(todayModule) {
+ const todayModuleId = "TodayForApps";
+ const date = serverData.traverse(todayModule, "date");
+ return todayModule.label === todayModuleId || serverData.isDefinedNonNull(date);
+}
+/**
+ * Get chart results from a server response. Always returns chart segments with valid data
+ */
+export function chartResultsFromServerResponse(response) {
+ const resultsArray = serverData.asArrayOrEmpty(response, "results.apps");
+ return resultsArray.filter((segment) => {
+ return !serverData.isNull(segment.data);
+ });
+}
+export function dataCollectionFromResultsListContainer(resultsListContainer) {
+ return serverData.asArrayOrEmpty(resultsListContainer, "results.contents");
+}
+/**
+ * Get the metrics dictionary included in the meta data of a mediaApi Data object.
+ * @param {MetaDataProviding} metaDataProvidingObject
+ * @returns {MapLike<string> | null}
+ */
+export function metricsFromMediaApiObject(metaDataProvidingObject) {
+ return serverData.asDictionary(metaDataProvidingObject, "meta.metrics");
+}
+// endregion
+//# sourceMappingURL=data-structure.js.map \ No newline at end of file