Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions android/capacitor/src/main/java/com/getcapacitor/Bridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,10 @@ private String getLegacyPluginName(Class<? extends Plugin> pluginClass) {
public void registerPlugin(Class<? extends Plugin> pluginClass) {
String pluginId = pluginId(pluginClass);
if (pluginId == null) return;

if (config.getPluginConfiguration(pluginId).getBoolean("disabled", false)) {
Logger.debug("Not registering disabled plugin: " + pluginId);
return;
}
try {
this.plugins.put(pluginId, new PluginHandle(this, pluginClass));
} catch (InvalidPluginException ex) {
Expand All @@ -720,7 +723,10 @@ public void registerPluginInstance(Plugin plugin) {
Class<? extends Plugin> clazz = plugin.getClass();
String pluginId = pluginId(clazz);
if (pluginId == null) return;

if (config.getPluginConfiguration(pluginId).getBoolean("disabled", false)) {
Logger.debug("Not registering disabled plugin: " + pluginId);
return;
}
try {
this.plugins.put(pluginId, new PluginHandle(this, plugin));
} catch (InvalidPluginException ex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public void setup() {
testPluginObject.put("var3", testPluginNestedObject);
testPluginObject.put("var4", 2);
testPluginObject.put("var5", testPluginArray);
testPluginObject.put("disabled", true);

pluginConfig.put(TEST_PLUGIN_NAME, testPluginObject);

Expand Down Expand Up @@ -89,6 +90,12 @@ public void getPluginBoolean() {
assertTrue(testBool);
}

@Test
public void getPluginDisabled() {
boolean disabled = config.getPluginConfiguration(TEST_PLUGIN_NAME).getBoolean("disabled", false);
assertTrue(disabled);
}

@Test
public void getPluginInt() {
int testInt = config.getPluginConfiguration(TEST_PLUGIN_NAME).getInt("var4", -1);
Expand Down
31 changes: 23 additions & 8 deletions cli/src/declarations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -725,20 +725,25 @@ export interface PluginsConfig {
/**
* Plugin configuration by class name.
*
* Set `disabled` to `true` in a plugin's configuration to prevent its native
* implementation from being registered and loaded. For example:
* `{ plugins: { MyPlugin: { disabled: true } } }`.
*
* This does not affect a plugin-specific `enabled` setting, which may have a
* different meaning.
*
* @since 1.0.0
*/
[key: string]:
| {
[key: string]: any;
}
| undefined;
[key: string]: PluginConfig & {
[key: string]: any;
} | undefined;

/**
* Capacitor Cookies plugin configuration
*
* @since 4.3.0
*/
CapacitorCookies?: {
CapacitorCookies?: PluginConfig & {
/**
* Enable CapacitorCookies to override the global `document.cookie` on native.
*
Expand All @@ -752,7 +757,7 @@ export interface PluginsConfig {
*
* @since 4.3.0
*/
CapacitorHttp?: {
CapacitorHttp?: PluginConfig & {
/**
* Enable CapacitorHttp to override the global `fetch` and `XMLHttpRequest` on native.
*
Expand All @@ -766,7 +771,7 @@ export interface PluginsConfig {
*
* @since 8.0.0
*/
SystemBars?: {
SystemBars?: PluginConfig & {
/**
* Specifies how to handle problematic insets on Android.
*
Expand Down Expand Up @@ -827,6 +832,16 @@ export interface PluginsConfig {
};
}

export interface PluginConfig {
/**
* Prevent this plugin's native implementation from being registered.
*
* @since 8.5.3
*/
disabled?: boolean;

}

export interface PackageOptions {
/**
* Create a symlink to the plugin folder instead of pointing to the plugin path.
Expand Down
8 changes: 8 additions & 0 deletions ios/Capacitor/Capacitor/CapacitorBridge.swift
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,10 @@ open class CapacitorBridge: NSObject, CAPBridgeProtocol {
if plugins[pluginInstance.jsName] != nil {
CAPLog.print("⚡️ Overriding existing registered plugin \(pluginInstance.classForCoder)")
}
guard !config.getPluginConfig(plugin.jsName).getBoolean("disabled", false) else {
CAPLog.print("⚡️ Not registering disabled plugin \(plugin.jsName)")
return
}
plugins[pluginInstance.jsName] = pluginInstance
pluginInstance.load(on: self)

Expand All @@ -398,6 +402,10 @@ open class CapacitorBridge: NSObject, CAPBridgeProtocol {
CAPLog.print("⚡️ Unable to load plugin \(type.classForCoder()). No such module found.")
return nil
}
guard !config.getPluginConfig(plugin.jsName).getBoolean("disabled", false) else {
CAPLog.print("⚡️ Not registering disabled plugin \(plugin.jsName)")
return nil
}
plugin.load(on: self)
plugins[plugin.jsName] = plugin
return plugin
Expand Down