diff --git a/renderer/src/modules/api/webpack.js b/renderer/src/modules/api/webpack.js index 037468a6..16db9ce3 100644 --- a/renderer/src/modules/api/webpack.js +++ b/renderer/src/modules/api/webpack.js @@ -78,6 +78,13 @@ const Webpack = { */ byDisplayName(name) {return Filters.byDisplayName(name);}, + /** + * Generates a function that filters by a specific internal Store name. + * @param {string} name Name the store should have + * @returns {function} A filter that checks for a Store name match + */ + byStoreName(name) {return Filters.byStoreName(name);}, + /** * Generates a combined function from a list of filters. * @param {...function} filters A list of filters @@ -112,23 +119,26 @@ const Webpack = { * @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack exports * @return {any} */ - get(filter, options = {}) { + getModule(filter, options = {}) { if (("first" in options) && typeof(options.first) !== "boolean") return Logger.error("BdApi.Webpack~get", "Unsupported type used for options.first", options.first, "boolean expected."); - if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~get", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected."); - if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~get", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected."); + if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~getModule", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected."); + if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~getModule", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected."); return WebpackModules.getModule(filter, options); }, /** * Finds all modules matching a filter function. * @param {Function} filter A function to use to filter modules + * @param {object} [options] Options to configure the search + * @param {Boolean} [options.defaultExport=true] Whether to return default export when matching the default export + * @param {Boolean} [options.searchExports=false] Whether to execute the filter on webpack exports + * @return {any[]} */ - getAll(filter) {return WebpackModules.getModule(filter, {first: false});}, - - /** - * @deprecated - */ - getModule() {return Webpack.get(...arguments);}, + getModules(filter, options = {}) { + if (("defaultExport" in options) && typeof(options.defaultExport) !== "boolean") return Logger.error("BdApi.Webpack~getModules", "Unsupported type used for options.defaultExport", options.defaultExport, "boolean expected."); + if (("searchExports" in options) && typeof(options.searchExports) !== "boolean") return Logger.error("BdApi.Webpack~getModules", "Unsupported type used for options.searchExports", options.searchExports, "boolean expected."); + return WebpackModules.getModule(filter, Object.assign(options, {first: false})); + }, /** * Finds multiple modules using multiple filters. @@ -232,7 +242,7 @@ const Webpack = { * @param {...String} props Strings to use to filter modules * @return {Any} */ - getByString(...strings) { + getByStrings(...strings) { const options = getOptions(strings); return WebpackModules.getModule(Filters.byStrings(...strings), options); @@ -243,11 +253,18 @@ const Webpack = { * @param {...String} strings Strings to use to filter modules * @return {Any[]} */ - getAllByString(...strings) { + getAllByStrings(...strings) { const options = getOptions(strings, {first: false}); return WebpackModules.getModule(Filters.byStrings(...strings), options); }, + + /** + * Finds an internal Store module using the name. + * @param {String} name Name of the store to find (usually includes "Store") + * @return {Any} + */ + getStore(name) {return WebpackModules.getModule(Filters.byStoreName(name));}, }; Object.freeze(Webpack); diff --git a/renderer/src/modules/webpackmodules.js b/renderer/src/modules/webpackmodules.js index 8cc303a8..b8e5652b 100644 --- a/renderer/src/modules/webpackmodules.js +++ b/renderer/src/modules/webpackmodules.js @@ -94,7 +94,6 @@ export class Filters { /** * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties. * @param {string} name - Name the module should have - * @param {module:WebpackModules.Filters~filter} filter - Additional filter * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties */ static byDisplayName(name) { @@ -103,6 +102,17 @@ export class Filters { }; } + /** + * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties. + * @param {string} name - Name the store should have (usually includes the word Store) + * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties + */ + static byStoreName(name) { + return module => { + return module?._dispatchToken && module?.getName?.() === name; + }; + } + /** * Generates a combined {@link module:WebpackModules.Filters~filter} from a list of filters. * @param {...module:WebpackModules.Filters~filter} filters - A list of filters