UNPKG

pxt-core

Version:

Microsoft MakeCode provides Blocks / JavaScript / Python tools and editors

1 lines • 6.5 kB
var DisconnectResponse;!function(e){e[e.Disconnected=0]="Disconnected",e[e.Waiting=1]="Waiting",e[e.TimedOut=2]="TimedOut"}(DisconnectResponse||(DisconnectResponse={}));const ref="@relprefix@".replace("---","").replace(/^\//,""),pageUrl="@targetUrl@/"+ref,refCacheName="makecode;"+ref+";@pxtRelId@";function initWebappServiceWorker(){const e=-1===ref.indexOf("/"),t=[pageUrl,"@simUrl@","/blb/semantic.js","/blb/main.js","/blb/pxtapp.js","/blb/typescript.js","/blb/marked/marked.min.js","/blb/highlight.js/highlight.pack.js","/blb/jquery.js","/blb/pxtlib.js","/blb/pxtcompiler.js","/blb/pxtpy.js","/blb/pxteditor.js","/blb/pxtsim.js","/blb/pxtembed.js","/blb/pxtworker.js","/blb/pxtweb.js","/blb/blockly.css","/blb/semantic.css","/blb/rtlsemantic.css","/cdn/blockly/media/sprites.png","/cdn/blockly/media/click.mp3","/cdn/blockly/media/disconnect.wav","/cdn/blockly/media/delete.mp3","/blb/vs/loader.js","/blb/vs/base/worker/workerMain.js","/blb/vs/basic-languages/bat/bat.js","/blb/vs/basic-languages/cpp/cpp.js","/blb/vs/basic-languages/python/python.js","/blb/vs/basic-languages/markdown/markdown.js","/blb/vs/editor/editor.main.css","/blb/vs/editor/editor.main.js","/blb/vs/editor/editor.main.nls.js","/blb/vs/language/json/jsonMode.js","/blb/vs/language/json/jsonWorker.js","/blb/smoothie/smoothie_compressed.js","/blb/images/Bars_black.gif","/blb/gifjs/gif.js","/blb/ai.2.min.js","/blb/target.js","/blb/music-editor/apple.png","/blb/music-editor/burger.png","/blb/music-editor/cake.png","/blb/music-editor/car.png","/blb/music-editor/cat.png","/blb/music-editor/cherry.png","/blb/music-editor/clam.png","/blb/music-editor/computer.png","/blb/music-editor/crab.png","/blb/music-editor/dog.png","/blb/music-editor/duck.png","/blb/music-editor/egg.png","/blb/music-editor/explosion.png","/blb/music-editor/fish.png","/blb/music-editor/ice-cream.png","/blb/music-editor/lemon.png","/blb/music-editor/snake.png","/blb/music-editor/star.png","/blb/music-editor/strawberry.png","/blb/music-editor/taco.png","/blb/music-editor/bass-clef.svg","/blb/music-editor/treble-clef.svg","@targetFieldEditorsJs@","@targetEditorJs@","@defaultLocaleStrings@","@targetUrl@@monacoworkerjs@","@targetUrl@@workerjs@"],o=r("@cachedHexFilesEncoded@"),i=r("@targetImagesEncoded@"),n=s(t.concat(i).map((e=>e.trim())).filter((e=>!!e&&0!==e.indexOf("@"))));let c=!1;function s(e){const t=[];for(const o of e)-1===t.indexOf(o)&&t.push(o);return t}function r(e){const t=String.fromCharCode(64)+"cdnUrl"+String.fromCharCode(64);return s(e.split(";").map((e=>decodeURIComponent(e).replace(t,"@cdnUrl@").trim())))}self.addEventListener("install",(t=>{e?(c=!0,console.log("Installing service worker..."),t.waitUntil(caches.open(refCacheName).then((e=>(console.log("Opened cache"),console.log("Caching:\n"+n.join("\n")),e.addAll(n).then((()=>e))))).then((e=>e.addAll(o).catch((e=>{console.log("Failed to cache hexfiles")})))).then((()=>self.skipWaiting())))):console.log("Skipping service worker install for unnamed endpoint")})),self.addEventListener("activate",(t=>{e?(console.log("Activating service worker..."),t.waitUntil(caches.keys().then((e=>{const t=e.filter((e=>{const t=function(e){const t=e.split(";");return 3!==t.length?null:t[1]}(e);return null===t||t===ref&&e!==refCacheName}));return Promise.all(t.map((e=>caches.delete(e))))})).then((()=>c?(c=!1,function(){const e=self;return e.clients.claim().then((()=>e.clients.matchAll())).then((e=>{e.forEach((e=>e.postMessage({type:"serviceworker",state:"activated",ref:ref})))}))}()):Promise.resolve())))):console.log("Skipping service worker activate for unnamed endpoint")})),self.addEventListener("fetch",(e=>{e.respondWith(async function(e){if(e.request.url.startsWith(pageUrl)){let t=e.request.url.slice(pageUrl.length);if(t.startsWith("/")&&(t=t.slice(1)),"?"===t.charAt(0)){let t;try{t=await fetch(e.request);(await caches.open(refCacheName)).put(e.request,t.clone())}catch(e){}if(t)return t;console.warn(`Unable to fetch ${e.request.url}, falling back to cache`)}}const t=await caches.match(e.request);if(t)return t;return fetch(e.request)}(e))}))}function initWebUSB(){let e,t,o,i,n=0,c="idle";async function s(e){(await self.clients.matchAll()).forEach((t=>t.postMessage(e)))}function r(){let t;const i=new Promise((t=>{console.log("Waiting for disconnect "+e),o=t,s({type:"serviceworker",action:"packet-io-lock-disconnect",lock:e})})),n=new Promise((o=>{t=setTimeout((()=>{console.log("Timed-out disconnect request "+e),o(DisconnectResponse.TimedOut)}),5e3)}));return Promise.race([i,n]).then((e=>(clearTimeout(t),o=void 0,e)))}function l(e){return new Promise((t=>{setTimeout(t,e)}))}self.addEventListener("message",(async a=>{const b=a.data;if("serviceworkerclient"===(null==b?void 0:b.type))if("request-packet-io-lock"===b.action){if(e||(e=await function(){if(e)return Promise.resolve(e);let t;const o=new Promise((e=>{console.log("check for existing lock"),i=e,s({type:"serviceworker",action:"packet-io-status"})})),n=new Promise((e=>{t=setTimeout((()=>{console.log("Timed-out check for existing lock"),e(void 0)}),1e3)}));return Promise.race([o,n]).then((e=>(clearTimeout(t),i=void 0,e)))}()),"granting"===c)return void await s({type:"serviceworker",action:"packet-io-lock-granted",granted:!1,lock:b.lock});console.log("Received lock request "+b.lock);const o=Date.now()-n;if(t=b.lock,o<4e3&&(c="waiting",console.log("Waiting to grant lock request "+b.lock),await l(4e3-o)),t!==b.lock)return console.log("Rejecting old lock request "+b.lock),void await s({type:"serviceworker",action:"packet-io-lock-granted",granted:!1,lock:b.lock});if(c="granting",e){let e;do{console.log("Sending disconnect request "+b.lock),e=await r(),e===DisconnectResponse.Waiting&&(console.log("Waiting on disconnect request "+b.lock),await l(1e3))}while(e===DisconnectResponse.Waiting)}console.log("Granted lock request "+b.lock),e=b.lock,await s({type:"serviceworker",action:"packet-io-lock-granted",granted:!0,lock:b.lock}),n=Date.now(),c="idle"}else"release-packet-io-lock"===b.action?(console.log("Received disconnect for "+e),e=void 0,o&&o(DisconnectResponse.Disconnected)):"packet-io-lock-disconnect"===b.action?(console.log("Received disconnect response for "+e),b.didDisconnect&&(e=void 0),o&&o(b.didDisconnect?DisconnectResponse.Disconnected:DisconnectResponse.Waiting)):"packet-io-supported"===b.action?await s({type:"serviceworker",action:"packet-io-supported",supported:!0}):"packet-io-status"===b.action&&b.hasLock&&i&&i(b.lock)}))}initWebappServiceWorker(),initWebUSB();