Home Reference Source

src/demux/webworkify-webpack.js

  1. /*
  2. * Fork of webworkify-webpack with support for Webpack 5
  3. * https://github.com/wupeng-engineer/webworkify-webpack/blob/db0de7/index.js
  4. */
  5.  
  6. const webpackBootstrapFunc = function () {// webpackBootstrap
  7. /******/ var __webpack_modules__ = ENTRY_MODULE
  8. /************************************************************************/
  9. /******/ // The module cache
  10. /******/ var __webpack_module_cache__ = {};
  11. /******/
  12. /******/ // The require function
  13. /******/ var __webpack_require__ = function __webpack_require__(moduleId) {
  14. /******/ // Check if module is in cache
  15. /******/ var cachedModule = __webpack_module_cache__[moduleId];
  16. /******/ if (cachedModule !== undefined) {
  17. /******/ return cachedModule.exports;
  18. /******/ }
  19. /******/ // Create a new module (and put it into the cache)
  20. /******/ var module = __webpack_module_cache__[moduleId] = {
  21. /******/ // no module.id needed
  22. /******/ // no module.loaded needed
  23. /******/ exports: {}
  24. /******/ };
  25. /******/
  26. /******/ // Execute the module function
  27. /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  28. /******/
  29. /******/ // Return the exports of the module
  30. /******/ return module.exports;
  31. /******/ }
  32. /******/
  33. /******/ // expose the modules object (__webpack_modules__)
  34. /******/ __webpack_require__.m = __webpack_modules__;
  35. /******/
  36. /************************************************************************/
  37. /******/ /* webpack/runtime/compat get default export */
  38. /******/ (() => {
  39. /******/ // getDefaultExport function for compatibility with non-harmony modules
  40. /******/ __webpack_require__.n = (module) => {
  41. /******/ var getter = module && module.__esModule ?
  42. /******/ () => (module['default']) :
  43. /******/ () => (module);
  44. /******/ __webpack_require__.d(getter, { a: getter });
  45. /******/ return getter;
  46. /******/ };
  47. /******/ })();
  48. /******/
  49. /******/ /* webpack/runtime/define property getters */
  50. /******/ (() => {
  51. /******/ // define getter functions for harmony exports
  52. /******/ __webpack_require__.d = (exports, definition) => {
  53. /******/ for(var key in definition) {
  54. /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  55. /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
  56. /******/ }
  57. /******/ }
  58. /******/ };
  59. /******/ })();
  60. /******/
  61. /******/ /* webpack/runtime/hasOwnProperty shorthand */
  62. /******/ (() => {
  63. /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  64. /******/ })();
  65. /******/
  66. /******/ /* webpack/runtime/make namespace object */
  67. /******/ (() => {
  68. /******/ // define __esModule on exports
  69. /******/ __webpack_require__.r = (exports) => {
  70. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  71. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  72. /******/ }
  73. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  74. /******/ };
  75. /******/ })();
  76. /******/
  77. /************************************************************************/
  78. /******/
  79. /******/ // module factories are used so entry inlining is disabled
  80. /******/ // startup
  81. /******/ // Load entry module and return exports
  82. /******/ var result = __webpack_require__(ENTRY_MODULE)
  83. /******/ return result.default || result
  84. }
  85.  
  86. var webpackBootstrapFuncArr = webpackBootstrapFunc.toString().split('ENTRY_MODULE');
  87. var moduleNameReqExp = '[\\.|\\-|\\+|\\w|\/|@]+';
  88. var dependencyRegExp = '\\(\\s*(\/\\*.*?\\*\/)?\\s*.*?(' + moduleNameReqExp + ').*?\\)';
  89.  
  90. function quoteRegExp(str) {
  91. return (str + '').replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&');
  92. }
  93.  
  94. function isNumeric(n) {
  95. return !isNaN(1 * n);
  96. }
  97.  
  98. function getModuleDependencies(sources, module, queueName) {
  99. var retval = {};
  100. retval[queueName] = [];
  101. var fnString = module.toString().replace(/^"[^"]+"/,'function');;
  102. var wrapperSignature = fnString.match(/^function\s?\w*\(\w+,\s*\w+,\s*(\w+)\)/) || fnString.match(/^\(\w+,\s*\w+,\s*(\w+)\)\s?\=\s?\>/);
  103. if (!wrapperSignature) return retval;
  104. var webpackRequireName = wrapperSignature[1];
  105. var re = new RegExp('(\\\\n|\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g');
  106. var match;
  107. while ((match = re.exec(fnString))) {
  108. if (match[3] === 'dll-reference') continue;
  109. retval[queueName].push(match[3]);
  110. }
  111. re = new RegExp('\\(' + quoteRegExp(webpackRequireName) + '\\("(dll-reference\\s(' + moduleNameReqExp + '))"\\)\\)' + dependencyRegExp, 'g');
  112. while ((match = re.exec(fnString))) {
  113. if (!sources[match[2]]) {
  114. retval[queueName].push(match[1]);
  115. sources[match[2]] = __webpack_require__(match[1]).m;
  116. }
  117. retval[match[2]] = retval[match[2]] || [];
  118. retval[match[2]].push(match[4]);
  119. }
  120. var keys = Object.keys(retval);
  121. for (var i = 0; i < keys.length; i++) {
  122. for (var j = 0; j < retval[keys[i]].length; j++) {
  123. if (isNumeric(retval[keys[i]][j])) {
  124. retval[keys[i]][j] = 1 * retval[keys[i]][j];
  125. }
  126. }
  127. }
  128. return retval;
  129. }
  130.  
  131. function hasValuesInQueues(queues) {
  132. var keys = Object.keys(queues);
  133. return keys.reduce((hasValues, key) => hasValues || queues[key].length > 0, false);
  134. }
  135.  
  136. function getRequiredModules(sources, moduleId) {
  137. var modulesQueue = {
  138. main: [moduleId]
  139. };
  140. var requiredModules = {
  141. main: []
  142. };
  143. var seenModules = {
  144. main: {}
  145. };
  146. while (hasValuesInQueues(modulesQueue)) {
  147. var queues = Object.keys(modulesQueue);
  148. for (var i = 0; i < queues.length; i++) {
  149. var queueName = queues[i];
  150. var queue = modulesQueue[queueName];
  151. var moduleToCheck = queue.pop();
  152. seenModules[queueName] = seenModules[queueName] || {};
  153. if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue;
  154. seenModules[queueName][moduleToCheck] = true;
  155. requiredModules[queueName] = requiredModules[queueName] || [];
  156. requiredModules[queueName].push(moduleToCheck);
  157. var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName);
  158. var newModulesKeys = Object.keys(newModules);
  159. for (var j = 0; j < newModulesKeys.length; j++) {
  160. modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || [];
  161. modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]]);
  162. }
  163. }
  164. }
  165. return requiredModules;
  166. }
  167.  
  168. function getWebpackString(requiredModules, sources, entryModule, key) {
  169. const moduleString = requiredModules[key].map((id) => `"${id}": ${sources[key][id].toString().replace(/^"[^"]+"/,'function')}`).join(",");
  170. return `${webpackBootstrapFuncArr[0]}{${moduleString}}${webpackBootstrapFuncArr[1]}"${entryModule}"${webpackBootstrapFuncArr[2]}`;
  171. }
  172.  
  173. export default function (moduleId, options) {
  174. options = options || {};
  175. var sources = {
  176. main: __webpack_modules__
  177. };
  178. var requiredModules = options.all ? { main: Object.keys(sources.main) } : getRequiredModules(sources, moduleId);
  179. var src = '';
  180. Object.keys(requiredModules).filter((m) => m !== 'main').forEach((module) => {
  181. var entryModule = 0;
  182. while (requiredModules[module][entryModule]) {
  183. entryModule++;
  184. }
  185. requiredModules[module].push(entryModule);
  186. sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })';
  187. src = src + `var ${module} = (${getWebpackString(requiredModules, sources, entryModule, modules)})();\n`;
  188. });
  189. src = src + `new ((${getWebpackString(requiredModules, sources, moduleId, 'main')})())(self);`;
  190. var blob = new window.Blob([src], {
  191. type: 'text/javascript'
  192. });
  193. var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
  194. var workerUrl = URL.createObjectURL(blob);
  195. var worker = new window.Worker(workerUrl);
  196. worker.objectURL = workerUrl;
  197. return worker;
  198. }