UNPKG

pxt-core

Version:

Microsoft MakeCode provides Blocks / JavaScript / Python tools and editors

1 lines 6.08 kB
var DisconnectResponse;function initWebappServiceWorker(){const e="@relprefix@".replace("---","").replace(/^\//,""),o=-1===e.indexOf("/"),t="makecode;"+e+";@pxtRelId@",i=["@targetUrl@/"+e,"@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/pxtblockly.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.0.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@"],n=a("@cachedHexFilesEncoded@"),c=a("@targetImagesEncoded@"),s=r(i.concat(c).map((e=>e.trim())).filter((e=>!!e&&0!==e.indexOf("@"))));let l=!1;function r(e){const o=[];for(const t of e)-1===o.indexOf(t)&&o.push(t);return o}function a(e){const o=String.fromCharCode(64)+"cdnUrl"+String.fromCharCode(64);return r(e.split(";").map((e=>decodeURIComponent(e).replace(o,"@cdnUrl@").trim())))}self.addEventListener("install",(e=>{o?(l=!0,console.log("Installing service worker..."),e.waitUntil(caches.open(t).then((e=>(console.log("Opened cache"),console.log("Caching:\n"+s.join("\n")),e.addAll(s).then((()=>e))))).then((e=>e.addAll(n).catch((e=>{console.log("Failed to cache hexfiles")})))).then((()=>self.skipWaiting())))):console.log("Skipping service worker install for unnamed endpoint")})),self.addEventListener("activate",(i=>{o?(console.log("Activating service worker..."),i.waitUntil(caches.keys().then((o=>{const i=o.filter((o=>{const i=function(e){const o=e.split(";");return 3!==o.length?null:o[1]}(o);return null===i||i===e&&o!==t}));return Promise.all(i.map((e=>caches.delete(e))))})).then((()=>l?(l=!1,function(){const o=self;return o.clients.claim().then((()=>o.clients.matchAll())).then((o=>{o.forEach((o=>o.postMessage({type:"serviceworker",state:"activated",ref:e})))}))}()):Promise.resolve())))):console.log("Skipping service worker activate for unnamed endpoint")})),self.addEventListener("fetch",(e=>{e.respondWith(caches.match(e.request).then((o=>o||fetch(e.request))))}))}function initWebUSB(){let e,o,t,i,n=0,c="idle";async function s(e){(await self.clients.matchAll()).forEach((o=>o.postMessage(e)))}function l(){let o;const i=new Promise((o=>{console.log("Waiting for disconnect "+e),t=o,s({type:"serviceworker",action:"packet-io-lock-disconnect",lock:e})})),n=new Promise((t=>{o=setTimeout((()=>{console.log("Timed-out disconnect request "+e),t(DisconnectResponse.TimedOut)}),5e3)}));return Promise.race([i,n]).then((e=>(clearTimeout(o),t=void 0,e)))}function r(e){return new Promise((o=>{setTimeout(o,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 o;const t=new Promise((e=>{console.log("check for existing lock"),i=e,s({type:"serviceworker",action:"packet-io-status"})})),n=new Promise((e=>{o=setTimeout((()=>{console.log("Timed-out check for existing lock"),e(void 0)}),1e3)}));return Promise.race([t,n]).then((e=>(clearTimeout(o),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 t=Date.now()-n;if(o=b.lock,t<4e3&&(c="waiting",console.log("Waiting to grant lock request "+b.lock),await r(4e3-t)),o!==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 l(),e===DisconnectResponse.Waiting&&(console.log("Waiting on disconnect request "+b.lock),await r(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,t&&t(DisconnectResponse.Disconnected)):"packet-io-lock-disconnect"===b.action?(console.log("Received disconnect response for "+e),b.didDisconnect&&(e=void 0),t&&t(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)}))}!function(e){e[e.Disconnected=0]="Disconnected",e[e.Waiting=1]="Waiting",e[e.TimedOut=2]="TimedOut"}(DisconnectResponse||(DisconnectResponse={})),initWebappServiceWorker(),initWebUSB();