@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;