@jsenv/core 27.0.0-alpha.56 → 27.0.0-alpha.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/core",
3
- "version": "27.0.0-alpha.56",
3
+ "version": "27.0.0-alpha.57",
4
4
  "description": "Tool to develop, test and build js projects",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -785,22 +785,88 @@
785
785
  (function () {
786
786
  // worker or service worker
787
787
  if (typeof WorkerGlobalScope === 'function' && self instanceof WorkerGlobalScope) {
788
- // auto import first register
789
- var messageEvents = []
790
- var messageCallback = (event) => {
791
- messageEvents.push(event)
788
+ /*
789
+ * SystemJs loads X files before executing the worker/service worker main file
790
+ * It mean events dispatched during this phase could be missed
791
+ * A warning like the one below is displayed in chrome devtools:
792
+ * "Event handler of 'install' event must be added on the initial evaluation of worker script"
793
+ * To fix that code below listen for these events early and redispatch them later
794
+ * once the worker file is executed (the listeners are installed)
795
+ */
796
+ var firstRegisterCallbacks = []
797
+ var isServiceWorker = typeof self.skipWaiting === 'function'
798
+ if (isServiceWorker) {
799
+ // for service worker there is more events to listen
800
+ // and, to get rid of the warning, we override self.addEventListener
801
+ var eventsToCatch = ['message', 'install', 'activate', 'fetch']
802
+ var eventCallbackProxies = {}
803
+ var firstRegisterPromise = new Promise((resolve) => {
804
+ firstRegisterCallbacks.push(resolve)
805
+ })
806
+ eventsToCatch.forEach(function(eventName) {
807
+ var eventsToDispatch = []
808
+ var eventCallback = function (event) {
809
+ const eventCallbackProxy = eventCallbackProxies[event.type]
810
+ if (eventCallbackProxy) {
811
+ eventCallbackProxy(event)
812
+ }
813
+ else {
814
+ eventsToDispatch.push(event)
815
+ event.waitUntil(firstRegisterPromise)
816
+ }
817
+ }
818
+ self.addEventListener(eventName, eventCallback)
819
+ firstRegisterCallbacks.push(function() {
820
+ if (eventsToDispatch.length) {
821
+ const eventCallbackProxy = eventCallbackProxies[eventsToDispatch[0].type]
822
+ if (eventCallbackProxy) {
823
+ eventsToDispatch.forEach(function (event) {
824
+ eventCallbackProxy(event)
825
+ })
826
+ }
827
+ eventsToDispatch.length = 0
828
+ }
829
+ })
830
+ })
831
+
832
+ var addEventListener = self.addEventListener
833
+ self.addEventListener = function (eventName, callback, options) {
834
+ if (eventsToCatch.indexOf(eventName) > -1) {
835
+ eventCallbackProxies[eventName] = callback
836
+ return
837
+ }
838
+ return addEventListener.call(self, eventName, callback, options)
839
+ }
840
+ }
841
+ else {
842
+ var eventsToCatch = ['message']
843
+ eventsToCatch.forEach(function (eventName) {
844
+ var eventQueue = []
845
+ var eventCallback = (event) => {
846
+ eventQueue.push(event)
847
+ }
848
+ self.addEventListener(eventName, eventCallback)
849
+ firstRegisterCallbacks.push(function() {
850
+ self.removeEventListener(eventName, eventCallback)
851
+ eventQueue.forEach(function (event) {
852
+ self.dispatchEvent(event)
853
+ })
854
+ eventQueue.length = 0
855
+ })
856
+ })
792
857
  }
793
- self.addEventListener('message', messageCallback)
858
+
859
+
860
+ // auto import first register
794
861
  var register = System.register;
795
862
  System.register = function(deps, declare) {
796
863
  System.register = register;
797
864
  System.registerRegistry[self.location.href] = [deps, declare];
798
865
  return System.import(self.location.href).then((result) => {
799
- self.removeEventListener('message', messageCallback)
800
- messageEvents.forEach((messageEvent) => {
801
- self.dispatchEvent(messageEvent)
866
+ firstRegisterCallbacks.forEach(firstRegisterCallback => {
867
+ firstRegisterCallback()
802
868
  })
803
- messageEvents = null
869
+ firstRegisterCallbacks.length = 0
804
870
  return result
805
871
  })
806
872
  }