diff --git a/README.md b/README.md
index 15a178e..a985046 100644
--- a/README.md
+++ b/README.md
@@ -13,9 +13,9 @@ $ npm install moduleraid
Or if you directly want to use it in the browser
```html
-
+
-
+
```
Alternatively, just copy the script from `moduleraid.js` and run it in a devtool console
@@ -42,11 +42,15 @@ Once `moduleRaid` is run or included on a page that includes a Webpack build (us
will return a object, containing:
* `modules`: An object containing all modules we could get from Webpack
+* `constructors`: An array containing all module constructor functions
* `get(id)`: Get the module from the specified `id`
* `findModule(query)`: Return the module that has `query` as a key in its exports
+* `findFunction(query)`: Return functions that include `query` (`query` can be either a string or a function)
If you run the code in devtools or load it as external script from unpkg/etc. the `moduleRaid` object can be found in `window.mR` by default.
+**Note:** If moduleRaid had to get modules through iteration, `constructors` will be empty and so `findFunction` will not work.
+
## How it works
There already was a script basically doing the same as `moduleRaid` some months earlier, called [`webcrack`](https://gist.github.com/no-boot-device/cb63762000e606e50690911cac1bcead) (made by [no-boot-device](https://github.com/no-boot-device)), which was rendered obsolute due to structural changes in how you can access Webpack modules from the outside.
diff --git a/moduleraid.js b/moduleraid.js
index 2ca64d7..0fa1324 100644
--- a/moduleraid.js
+++ b/moduleraid.js
@@ -8,19 +8,22 @@
const moduleRaid = function () {
moduleRaid.mObj = {};
+ moduleRaid.cArr = [];
moduleRaid.args = [
[[0], [function(e, t, i) {
mCac = i.c;
- Object.keys(mCac).forEach(function(mod) {
+ Object.keys(mCac).forEach (function(mod) {
moduleRaid.mObj[mod] = mCac[mod].exports;
})
+ moduleRaid.cArr = i.m;
}]],
[[], {'moduleraid': function(e, t, i) {
mCac = i.c;
- Object.keys(mCac).forEach(function(mod) {
+ Object.keys(mCac).forEach (function(mod) {
moduleRaid.mObj[mod] = mCac[mod].exports;
})
+ moduleRaid.cArr = i.m;
}}, ['moduleraid']]
]
@@ -34,7 +37,7 @@ const moduleRaid = function () {
mIter = 0;
if (!webpackJsonp([],[],[mIter])) {
- throw 'Unknown Webpack structure';
+ throw Error("Unknown Webpack structure");
}
while (!mEnd) {
@@ -57,10 +60,10 @@ const moduleRaid = function () {
findModule = function findModule (query) {
results = [];
- modules = Object.keys(moduleRaid.mObj)
+ modules = Object.keys(moduleRaid.mObj);
modules.forEach(function(mKey) {
- mod = moduleRaid.mObj[mKey]
+ mod = moduleRaid.mObj[mKey];
if (typeof mod !== 'undefined') {
if (typeof mod.default === "object") {
@@ -78,9 +81,41 @@ const moduleRaid = function () {
return results;
}
- return {
- modules: moduleRaid.mObj,
- findModule: findModule,
+ findFunction = function(query) {
+ if (moduleRaid.cArr.length == 0) {
+ throw Error("No module constructors to search through!");
+ }
+
+ results = [];
+
+ if (typeof query === "string") {
+ moduleRaid.cArr.forEach(function (ctor, index) {
+ if (ctor.toString().includes(query)) {
+ results.push(moduleRaid.mObj[index]);
+ }
+ })
+ } else if (typeof query === "function") {
+ modules = Object.keys(moduleRaid.mObj);
+
+ modules.forEach(function(mKey, index) {
+ mod = moduleRaid.mObj[mKey];
+
+ if (query(mod)) {
+ results.push(moduleRaid.mObj[index]);
+ }
+ })
+ } else {
+ throw new TypeError('findFunction can only find via string and function, ' + (typeof query) + ' was passed');
+ }
+
+ return results;
+ }
+
+ return {
+ modules: moduleRaid.mObj,
+ constructors: moduleRaid.cArr,
+ findModule: findModule,
+ findFunction: findFunction,
get: get
}
}
diff --git a/moduleraid.min.js b/moduleraid.min.js
index 4fde76c..48a5024 100644
--- a/moduleraid.min.js
+++ b/moduleraid.min.js
@@ -1 +1 @@
-(function moduleRaid(){moduleRaid.mObj={};moduleRaid.args=[[[0],[function(e,t,i){mCac=i.c;Object.keys(mCac).forEach(function(mod){moduleRaid.mObj[mod]=mCac[mod].exports})}]],[[],{'moduleraid':function(e,t,i){mCac=i.c;Object.keys(mCac).forEach(function(mod){moduleRaid.mObj[mod]=mCac[mod].exports})}},['moduleraid']]];fillModuleArray=function(){moduleRaid.args.forEach(function(argument){webpackJsonp(...argument)});if(moduleRaid.mObj.length==0){mEnd=false;mIter=0;if(!webpackJsonp([],[],[mIter])){throw 'Unknown Webpack structure'}while(!mEnd){try{moduleRaid.mObj[mIter]=webpackJsonp([],[],[mIter]);mIter+=1}catch(err){mEnd=true}}}};fillModuleArray();get=function get(id){return moduleRaid.mObj[id]};findModule=function findModule(query){results=[];modules=Object.keys(moduleRaid.mObj);modules.forEach(function(mKey){mod=moduleRaid.mObj[mKey];if(typeof mod!=='undefined'){if(typeof mod.default==="object"){for(key in mod.default){if(key==query){results.push(mod)}}}for(key in mod){if(key==query){results.push(mod)}}}});return results};window.mR={modules:moduleRaid.mObj,findModule:findModule,get:get}})();
\ No newline at end of file
+!function o(){o.mObj={},o.cArr=[],o.args=[[[0],[function(n,r,t){mCac=t.c,Object.keys(mCac).forEach(function(n){o.mObj[n]=mCac[n].exports}),o.cArr=t.m}]],[[],{moduleraid:function(n,r,t){mCac=t.c,Object.keys(mCac).forEach(function(n){o.mObj[n]=mCac[n].exports}),o.cArr=t.m}},["moduleraid"]]],fillModuleArray=function(){if(o.args.forEach(function(o){webpackJsonp(...o)}),0==o.mObj.length){if(mEnd=!1,mIter=0,!webpackJsonp([],[],[mIter]))throw Error("Unknown Webpack structure");for(;!mEnd;)try{o.mObj[mIter]=webpackJsonp([],[],[mIter]),mIter++}catch(o){mEnd=!0}}},fillModuleArray(),get=function(n){return o.mObj[n]},findModule=function(n){return results=[],modules=Object.keys(o.mObj),modules.forEach(function(r){if(mod=o.mObj[r],"undefined"!=typeof mod){if("object"==typeof mod.default)for(key in mod.default)key==n&&results.push(mod);for(key in mod)key==n&&results.push(mod)}}),results},findFunction=function(n){if(0==o.cArr.length)throw Error("No module constructors to search through!");if(results=[],"string"==typeof n)o.cArr.forEach(function(r,t){r.toString().includes(n)&&results.push(o.mObj[t])});else{if("function"!=typeof n)throw new TypeError("findFunction can only find via string and function, "+typeof n+" was passed");modules=Object.keys(o.mObj),modules.forEach(function(r,t){mod=o.mObj[r],n(mod)&&results.push(o.mObj[t])})}return results},window.mR={modules:o.mObj,constructors:o.cArr,findModule:findModule,findFunction:findFunction,get:get}}();
\ No newline at end of file
diff --git a/package.json b/package.json
index 7cd2bb7..d76dec4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "moduleraid",
- "version": "3.0.0",
+ "version": "3.1.0",
"description": "Get modules from webpackJsonp",
"main": "moduleraid.js",
"scripts": {