neo.mjs 4.3.11 → 4.3.12

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.
@@ -24,7 +24,11 @@ class ServiceWorker extends ServiceBase {
24
24
  * @member {Boolean} singleton=true
25
25
  * @protected
26
26
  */
27
- singleton: true
27
+ singleton: true,
28
+ /**
29
+ * @member {String} version='4.3.11'
30
+ */
31
+ version: '4.3.11'
28
32
  }}
29
33
  }
30
34
 
@@ -15,15 +15,19 @@ const
15
15
  neoPath = insideNeo ? './' : './node_modules/neo.mjs/',
16
16
  programName = `${packageJson.name} inject-package-version`;
17
17
 
18
- let startDate = new Date(),
19
- configPath = path.join(__dirname, 'src/DefaultConfig.mjs'),
20
- contentArray = fs.readFileSync(configPath).toString().split(os.EOL),
21
- i = 0,
22
- len = contentArray.length,
23
- versionString = `'${packageJson.version}'`;
18
+ let startDate = new Date(),
19
+ configPath = path.join(__dirname, 'src/DefaultConfig.mjs'),
20
+ contentArray = fs.readFileSync(configPath).toString().split(os.EOL),
21
+ i = 0,
22
+ len = contentArray.length,
23
+ serviceWorkerFolders = ['apps'],
24
+ versionString = `'${packageJson.version}'`,
25
+ serviceContentArray, serviceWorkerPath
24
26
 
25
27
  if (!insideNeo) {
26
28
  // todo
29
+ } else {
30
+ serviceWorkerFolders.push('examples');
27
31
  }
28
32
 
29
33
  for (; i < len; i++) {
@@ -37,6 +41,25 @@ for (; i < len; i++) {
37
41
 
38
42
  fs.writeFileSync(configPath, contentArray.join(os.EOL));
39
43
 
44
+ serviceWorkerFolders.forEach(folder => {
45
+ serviceWorkerPath = path.join(__dirname, folder, 'ServiceWorker.mjs');
46
+ serviceContentArray = fs.readFileSync(serviceWorkerPath).toString().split(os.EOL);
47
+
48
+ i = 0;
49
+ len = serviceContentArray.length;
50
+
51
+ for (; i < len; i++) {
52
+ if (serviceContentArray[i].includes('version:')) {
53
+ // we want to update the comment inside ServiceWorker.mjs as well
54
+ serviceContentArray[i - 2] = serviceContentArray[i - 2].replace(/'\d.+'/, versionString);
55
+ serviceContentArray[i] = serviceContentArray[i] .replace(/'\d.+'/, versionString);
56
+ break;
57
+ }
58
+ }
59
+
60
+ fs.writeFileSync(serviceWorkerPath, serviceContentArray.join(os.EOL));
61
+ });
62
+
40
63
  const processTime = (Math.round((new Date - startDate) * 100) / 100000).toFixed(2);
41
64
  console.log(`\nTotal time for ${programName}: ${processTime}s`);
42
65
 
@@ -24,7 +24,11 @@ class ServiceWorker extends ServiceBase {
24
24
  * @member {Boolean} singleton=true
25
25
  * @protected
26
26
  */
27
- singleton: true
27
+ singleton: true,
28
+ /**
29
+ * @member {String} version='4.3.11'
30
+ */
31
+ version: '4.3.11'
28
32
  }}
29
33
  }
30
34
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "4.3.11",
3
+ "version": "4.3.12",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -229,12 +229,12 @@ const DefaultConfig = {
229
229
  useVdomWorker: true,
230
230
  /**
231
231
  * buildScripts/injectPackageVersion.mjs will update this value
232
- * @default '4.3.10'
232
+ * @default '4.3.11'
233
233
  * @memberOf! module:Neo
234
234
  * @name config.version
235
235
  * @type String
236
236
  */
237
- version: '4.3.10'
237
+ version: '4.3.11'
238
238
  };
239
239
 
240
240
  Object.assign(DefaultConfig, {
@@ -42,10 +42,19 @@ class ServiceWorker extends Base {
42
42
  serviceWorker.ready.then(() => {
43
43
  serviceWorker.onmessage = WorkerManager.onWorkerMessage.bind(WorkerManager);
44
44
 
45
+ if (!WorkerManager.getWorker('service')) {
46
+ /*
47
+ * navigator.serviceWorker.controller can be null in case we load a page for the first time
48
+ * or in case of a force refresh.
49
+ * See: https://www.w3.org/TR/service-workers/#navigator-service-worker-controller
50
+ */
51
+ WorkerManager.serviceWorker = registration.active;
52
+ }
53
+
45
54
  WorkerManager.sendMessage('service', {
46
55
  action: 'registerNeoConfig',
47
56
  data : config
48
- });
57
+ })
49
58
  });
50
59
  })
51
60
  }
@@ -16,6 +16,15 @@ const NeoConfig = Neo.config,
16
16
  * @singleton
17
17
  */
18
18
  class Manager extends Base {
19
+ /**
20
+ * navigator.serviceWorker.controller can be null in case we load a page for the first time
21
+ * or in case of a force refresh.
22
+ * See: https://www.w3.org/TR/service-workers/#navigator-service-worker-controller
23
+ * Only in this case main.addon.ServiceWorker will store the active registration once ready here.
24
+ * @member {ServiceWorker|null} serviceWorker=null
25
+ */
26
+ serviceWorker = null
27
+
19
28
  static getConfig() {return {
20
29
  /**
21
30
  * @member {String} className='Neo.worker.Manager'
@@ -224,7 +233,7 @@ class Manager extends Base {
224
233
  */
225
234
  getWorker(name) {
226
235
  if (name === 'service') {
227
- return navigator.serviceWorker?.controller;
236
+ return navigator.serviceWorker?.controller || this.serviceWorker;
228
237
  }
229
238
 
230
239
  return name instanceof Worker ? name : this.workers[name].worker;
@@ -250,11 +250,17 @@ class ServiceBase extends Base {
250
250
  * @param {Object} msg
251
251
  * @param {ExtendableMessageEvent} event
252
252
  */
253
- onRegisterNeoConfig(msg, event) {
253
+ async onRegisterNeoConfig(msg, event) {
254
+ let me = this;
255
+
254
256
  Neo.config = Neo.config || {};
255
257
  Object.assign(Neo.config, msg.data);
256
258
 
257
- this.onConnect(event.source);
259
+ if (me.version !== Neo.config.version) {
260
+ await me.clearCaches()
261
+ }
262
+
263
+ me.onConnect(event.source);
258
264
  }
259
265
 
260
266
  /**