@forge/lint

6.0.0-next.116.0.0-next.12
manifest-declarative-permission-handling.js
+manifest-declarative-permission-handling.jsNew file
+57
Index: manifest-declarative-permission-handling.js
===================================================================
--- manifest-declarative-permission-handling.js
+++ manifest-declarative-permission-handling.js
@@ -0,0 +1,57 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.manifestDeclaresDeclarativePermissionHandling = void 0;
+const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
+const moduleEntryUsesPermissionDisplayConditions = (entry) => {
+    if (!isRecord(entry))
+        return false;
+    const displayConditions = entry.displayConditions;
+    if (!isRecord(displayConditions))
+        return false;
+    return Object.prototype.hasOwnProperty.call(displayConditions, 'permissions');
+};
+const expressionReferencesEventPermissions = (expression) => typeof expression === 'string' && expression.includes('event.permissions');
+const triggerEntryUsesEventPermissionsFilter = (entry) => {
+    if (!isRecord(entry))
+        return false;
+    const topFilter = entry.filter;
+    if (isRecord(topFilter) && expressionReferencesEventPermissions(topFilter.expression)) {
+        return true;
+    }
+    const events = entry.events;
+    if (!Array.isArray(events))
+        return false;
+    for (const ev of events) {
+        if (!isRecord(ev))
+            continue;
+        const filter = ev.filter;
+        if (isRecord(filter) && expressionReferencesEventPermissions(filter.expression)) {
+            return true;
+        }
+    }
+    return false;
+};
+const manifestDeclaresDeclarativePermissionHandling = (manifest) => {
+    const modules = manifest.modules;
+    if (!isRecord(modules))
+        return false;
+    for (const value of Object.values(modules)) {
+        if (!Array.isArray(value))
+            continue;
+        for (const entry of value) {
+            if (moduleEntryUsesPermissionDisplayConditions(entry)) {
+                return true;
+            }
+        }
+    }
+    const triggers = modules.trigger;
+    if (Array.isArray(triggers)) {
+        for (const entry of triggers) {
+            if (triggerEntryUsesEventPermissionsFilter(entry)) {
+                return true;
+            }
+        }
+    }
+    return false;
+};
+exports.manifestDeclaresDeclarativePermissionHandling = manifestDeclaresDeclarativePermissionHandling;