neo.mjs 3.2.9 → 3.2.10

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/README.md CHANGED
@@ -54,7 +54,7 @@ neo.mjs offers two different setups which follow the exact same API.
54
54
  You can switch between <a href="https://developer.mozilla.org/en-US/docs/Web/API/Worker">dedicated</a> and
55
55
  <a href="https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker">shared</a> workers at any point.
56
56
 
57
- <img src="https://raw.githubusercontent.com/neomjs/pages/master/resources/images/workers-setup-canvas.png">
57
+ <img src="https://raw.githubusercontent.com/neomjs/pages/master/resources/images/workers-setup-v4.png">
58
58
 
59
59
  The dedicated workers setup uses 4 threads (CPUs).
60
60
  Most parts of the frameworks as well as your apps and components live within the app worker.
@@ -8,6 +8,12 @@ import ServiceBase from '../src/worker/ServiceBase.mjs';
8
8
  * @singleton
9
9
  */
10
10
  class ServiceWorker extends ServiceBase {
11
+ /**
12
+ * @member {String} workerId='service'
13
+ * @protected
14
+ */
15
+ workerId = 'service'
16
+
11
17
  static getConfig() {return {
12
18
  /**
13
19
  * @member {String} className='Neo.ServiceWorker'
@@ -18,12 +24,7 @@ class ServiceWorker extends ServiceBase {
18
24
  * @member {Boolean} singleton=true
19
25
  * @protected
20
26
  */
21
- singleton: true,
22
- /**
23
- * @member {String} workerId='service'
24
- * @protected
25
- */
26
- workerId: 'service'
27
+ singleton: true
27
28
  }}
28
29
  }
29
30
 
@@ -15,8 +15,10 @@ export default env => {
15
15
 
16
16
  if (filenameConfig.workers) {
17
17
  Object.entries(filenameConfig.workers).forEach(([key, value]) => {
18
+ // Inside a neo workspace, we want to use the SW inside the top level apps folder,
19
+ // to allow overriding its logic
18
20
  if (key === env.worker) {
19
- entry[key] = path.resolve(neoPath, value.input);
21
+ entry[key] = path.resolve(key === 'service' && !insideNeo ? cwd : neoPath, value.input);
20
22
  }
21
23
  });
22
24
  }
@@ -15,8 +15,10 @@ export default env => {
15
15
 
16
16
  if (filenameConfig.workers) {
17
17
  Object.entries(filenameConfig.workers).forEach(([key, value]) => {
18
+ // Inside a neo workspace, we want to use the SW inside the top level apps folder,
19
+ // to allow overriding its logic
18
20
  if (key === env.worker) {
19
- entry[key] = path.resolve(neoPath, value.input);
21
+ entry[key] = path.resolve(key === 'service' && !insideNeo ? cwd : neoPath, value.input);
20
22
  }
21
23
  });
22
24
  }
@@ -8,6 +8,12 @@ import ServiceBase from '../src/worker/ServiceBase.mjs';
8
8
  * @singleton
9
9
  */
10
10
  class ServiceWorker extends ServiceBase {
11
+ /**
12
+ * @member {String} workerId='service'
13
+ * @protected
14
+ */
15
+ workerId = 'service'
16
+
11
17
  static getConfig() {return {
12
18
  /**
13
19
  * @member {String} className='Neo.ServiceWorker'
@@ -18,12 +24,7 @@ class ServiceWorker extends ServiceBase {
18
24
  * @member {Boolean} singleton=true
19
25
  * @protected
20
26
  */
21
- singleton: true,
22
- /**
23
- * @member {String} workerId='service'
24
- * @protected
25
- */
26
- workerId: 'service'
27
+ singleton: true
27
28
  }}
28
29
  }
29
30
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "3.2.9",
3
+ "version": "3.2.10",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -34,21 +34,21 @@
34
34
  },
35
35
  "homepage": "https://neomjs.github.io/pages/",
36
36
  "dependencies": {
37
- "@fortawesome/fontawesome-free": "^6.0.0",
37
+ "@fortawesome/fontawesome-free": "^6.1.0",
38
38
  "@material/mwc-button": "^0.25.3",
39
39
  "@material/mwc-textfield": "^0.25.3",
40
- "autoprefixer": "^10.4.2",
41
- "chalk": "^5.0.0",
40
+ "autoprefixer": "^10.4.4",
41
+ "chalk": "^5.0.1",
42
42
  "clean-webpack-plugin": "^4.0.0",
43
- "commander": "^9.0.0",
44
- "cssnano": "^5.1.0",
43
+ "commander": "^9.1.0",
44
+ "cssnano": "^5.1.4",
45
45
  "envinfo": "^7.8.1",
46
46
  "fs-extra": "^10.0.1",
47
47
  "highlightjs-line-numbers.js": "^2.8.0",
48
- "inquirer": "^8.1.5",
48
+ "inquirer": "^8.2.1",
49
49
  "neo-jsdoc": "^1.0.1",
50
50
  "neo-jsdoc-x": "^1.0.4",
51
- "postcss": "^8.4.7",
51
+ "postcss": "^8.4.12",
52
52
  "sass": "^1.49.9",
53
53
  "webpack": "^5.70.0",
54
54
  "webpack-cli": "^4.9.2",
@@ -8,6 +8,19 @@ import RemoteMethodAccess from './mixin/RemoteMethodAccess.mjs';
8
8
  * @abstract
9
9
  */
10
10
  class ServiceBase extends Base {
11
+ /**
12
+ * @member {String} cacheName='neo-runtime'
13
+ */
14
+ cacheName = 'neo-runtime'
15
+ /**
16
+ * @member {String[]} cachePaths
17
+ */
18
+ cachePaths = [
19
+ 'raw.githubusercontent.com/',
20
+ '/dist/production/',
21
+ '/fontawesome',
22
+ '/resources/'
23
+ ]
11
24
  /**
12
25
  * @member {Object[]|null} channelPorts=null
13
26
  * @protected
@@ -28,6 +41,11 @@ class ServiceBase extends Base {
28
41
  * @protected
29
42
  */
30
43
  remotes = []
44
+ /**
45
+ * @member {String|null} workerId=null
46
+ * @protected
47
+ */
48
+ workerId = null
31
49
 
32
50
  static getConfig() {return {
33
51
  /**
@@ -35,19 +53,6 @@ class ServiceBase extends Base {
35
53
  * @protected
36
54
  */
37
55
  className: 'Neo.worker.ServiceBase',
38
- /**
39
- * @member {String} cacheName='neo-runtime'
40
- */
41
- cacheName: 'neo-runtime',
42
- /**
43
- * @member {String[]|null} cachePaths
44
- */
45
- cachePaths: [
46
- 'raw.githubusercontent.com/',
47
- '/dist/production/',
48
- '/fontawesome',
49
- '/resources/'
50
- ],
51
56
  /**
52
57
  * @member {String[]|Neo.core.Base[]|null} mixins=[RemoteMethodAccess]
53
58
  */
@@ -61,14 +66,10 @@ class ServiceBase extends Base {
61
66
  app: [
62
67
  'clearCache',
63
68
  'clearCaches',
64
- 'preloadAssets'
69
+ 'preloadAssets',
70
+ 'removeAssets'
65
71
  ]
66
- },
67
- /**
68
- * @member {String|null} workerId=null
69
- * @protected
70
- */
71
- workerId: null
72
+ }
72
73
  }}
73
74
 
74
75
  /**
@@ -95,19 +96,20 @@ class ServiceBase extends Base {
95
96
 
96
97
  /**
97
98
  * @param {String} name=this.cacheName
99
+ * @returns {Object}
98
100
  */
99
- clearCache(name=this.cacheName) {
100
- caches.keys()
101
- .then(cacheNames => cacheNames.filter(cacheName => cacheName === name))
102
- .then(cachesToDelete => Promise.all(cachesToDelete.map(cacheToDelete => caches.delete(cacheToDelete))))
101
+ async clearCache(name=this.cacheName) {
102
+ await caches.delete(name);
103
+ return {success: true}
103
104
  }
104
105
 
105
106
  /**
106
- *
107
+ * @returns {Object}
107
108
  */
108
- clearCaches() {
109
- caches.keys()
110
- .then(cachesToDelete => Promise.all(cachesToDelete.map(cacheToDelete => caches.delete(cacheToDelete))))
109
+ async clearCaches() {
110
+ let keys = await caches.keys();
111
+ await Promise.all(keys.map(name => caches.delete(name)));
112
+ return {success: true}
111
113
  }
112
114
 
113
115
  /**
@@ -280,9 +282,7 @@ class ServiceBase extends Base {
280
282
  hasMatch = !!asset;
281
283
  }
282
284
 
283
- if (!hasMatch) {
284
- items.push(item);
285
- }
285
+ !hasMatch && items.push(item);
286
286
  }
287
287
 
288
288
  if (items.length > 0) {
@@ -311,6 +311,44 @@ class ServiceBase extends Base {
311
311
  });
312
312
  }
313
313
 
314
+ /**
315
+ * You can either pass an url, an array of urls or an object with additional options
316
+ * See: https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete
317
+ * @param {String|String[]|Object} data
318
+ * @param {String|String[]} data.assets
319
+ * @param {String} data.cacheName=this.cacheName
320
+ * @param {Object} data.options
321
+ * @param {Boolean} data.options.ignoreMethod=false
322
+ * @param {Boolean} data.options.ignoreSearch=false
323
+ * @param {Boolean} data.options.ignoreVary=false
324
+ * @returns {Object}
325
+ */
326
+ async removeAssets(data) {
327
+ if (!Neo.isObject(data)) {
328
+ data = {
329
+ assets: data
330
+ };
331
+ }
332
+
333
+ let assets = data.assets,
334
+ cacheName = data.cacheName || this.cacheName,
335
+ options = data.options || {},
336
+ cache = await caches.open(cacheName),
337
+ promises = [];
338
+
339
+ if (!Array.isArray(assets)) {
340
+ assets = [assets];
341
+ }
342
+
343
+ assets.forEach(asset => {
344
+ promises.push(cache.delete(asset, options));
345
+ });
346
+
347
+ await Promise.all(promises);
348
+
349
+ return {success: true};
350
+ }
351
+
314
352
  /**
315
353
  * @param {String} dest app, data, main or vdom (excluding the current worker)
316
354
  * @param {Object} opts configs for Neo.worker.Message