1function setupWebWorker() { 2 if (window.Worker) { 3 const workerScript = apiWebWorker.toString().match(/function[^{]+\{([\s\S]*)\}$/)[1]; 4 let blob; 5 try { 6 // Creating js file using blob 7 blob = new Blob([workerScript], { type: 'application/javascript' }); 8 } catch (e) { // Backwards-compatibility 9 window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; 10 blob = new BlobBuilder(); 11 blob.append(workerScript); 12 blob = blob.getBlob(); 13 } 14 15 const worker = new Worker(URL.createObjectURL(blob)); 16 return worker; 17 } else { 18 console.error("Web Workers are not supported in your browser."); 19 return null; 20 } 21} 22 23function apiWebWorker() { 24 self.addEventListener('message', function (e) { 25 const { url, method, headers, body, entitlement } = e.data; 26 27 let serializedBody; 28 if (entitlement) { 29 serializedBody = method === 'POST' ? Object.keys(body).map(key => encodeURIComponent(key) + '=' + encodeURIComponent(body[key])).join('&') : null; 30 } 31 else { 32 serializedBody = method === 'POST' ? body : null; 33 } 34 fetch(url, { 35 method: method, 36 headers: headers, 37 dataType: 'json', 38 body: serializedBody 39 }) 40 .then(response => response.json()) 41 .then(data => { 42 self.postMessage({ status: 'success', data: data }); 43 }) 44 .catch(error => { 45 self.postMessage({ status: 'error', error: error.message }); 46 }); 47 }); 48} 49// Function to perform API calls using the Web Worker 50async function apiCallWorker(worker, url, method, headers, body, entitlement) { 51 52 return new Promise((resolve, reject) => { 53 if (!worker) { 54 reject('Worker not initialized'); 55 return; 56 } 57 // Setup message handling from the worker 58 worker.onmessage = function (e) { 59 const { status, data, error } = e.data || {}; 60 if (status === 'success') { 61 resolve(data); 62 } else { 63 reject(error); 64 } 65 }; 66 // Setup error handling from the worker 67 worker.onerror = function (error) { 68 reject('Worker error: ' + error.message); 69 }; 70 // Post the request data to the worker 71 worker.postMessage({ url, method, headers, body, entitlement }); 72 73 }); 74} 75 76if (typeof module !== 'undefined' && module.exports) { 77 module.exports = { 78 setupWebWorker, 79 apiCallWorker, 80 }; 81} 82var Web_Worker_Util = (function () { 83 var _getAPIWebWorkerInstance = function (apiMethod) { 84 if (!window.Worker) { 85 console.error("Web Workers are not supported in your browser."); 86 return null; 87 } 88 89 let workerScript; 90 91 switch (apiMethod) { 92 case 'POST': 93 workerScript = _postApiWebWorker.toString().match(/function[^{]+\{([\s\S]*)\}$/)[1]; 94 break; 95 case 'GET': 96 workerScript = _getApiWebWorker.toString().match(/function[^{]+\{([\s\S]*)\}$/)[1]; 97 break; 98 } 99 100 if (!workerScript) { 101 return null; 102 } 103 104 let blob; 105 try { 106 blob = new Blob([workerScript], { type: 'application/javascript' }); 107 } catch (e) { 108 const BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; 109 const blobBuilder = new BlobBuilder(); 110 blobBuilder.append(workerScript); 111 blob = blobBuilder.getBlob(); 112 } 113 114 try { 115 return new Worker(URL.createObjectURL(blob)); 116 } catch (error) { 117 console.log("cannot create web worker instance"); 118 } 119 120 return null; 121 }; 122 123 return { 124 // return the util functions to Search Module context 125 _getAPIWebWorkerInstance: _getAPIWebWorkerInstance, 126 }; 127})(); 128 129function _postApiWebWorker() { 130 self.addEventListener('message', function (e) { 131 const { url, headers, body, dataType, serialization } = e.data; 132 133 const serializeBody = (body) => { 134 return Object.keys(body) 135 .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(body[key])}`) 136 .join('&'); 137 }; 138 139 const serializedBody = serialization ? serializeBody(body) : JSON.stringify(body); 140 141 const options = { 142 method: 'POST', 143 headers: headers, 144 body: serializedBody 145 }; 146 147 if (dataType) { 148 options.dataType = dataType; 149 } 150 151 fetch(url, options) 152 .then(response => response.json()) 153 .then(data => { 154 self.postMessage({ status: 'success', data }); 155 }) 156 .catch(error => { 157 self.postMessage({ status: 'error', error: error.message }); 158 }); 159 }); 160} 161 162function _getApiWebWorker() { 163 self.addEventListener('message', function (e) { 164 const { url, headers, body, dataType, serialization } = e.data; 165 166 const options = { 167 method: 'GET', 168 headers: headers 169 }; 170 171 if (body) { 172 const serializeBody = (body) => { 173 return Object.keys(body) 174 .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(body[key])}`) 175 .join('&'); 176 }; 177 178 const serializedBody = serialization ? serializeBody(body) : JSON.stringify(body); 179 180 options.body = serializedBody; 181 } 182 183 if (dataType) { 184 options.dataType = dataType; 185 } 186 187 fetch(url, options) 188 .then(response => { 189 if (dataType && dataType === 'html') { 190 return response.text(); 191 } else { 192 return response.json(); 193 } 194 }) 195 .then(data => { 196 self.postMessage({ status: 'success', data }); 197 }) 198 .catch(error => { 199 self.postMessage({ status: 'error', error: error.message }); 200 }); 201 }); 202} 203 204if (typeof module !== 'undefined' && module.exports) { 205 module.exports = { 206 Web_Worker_Util, 207 _postApiWebWorker, 208 _getApiWebWorker, 209 }; 210} 211
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.