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 +1 -1
- package/apps/ServiceWorker.mjs +7 -6
- package/buildScripts/webpack/development/webpack.config.worker.mjs +3 -1
- package/buildScripts/webpack/production/webpack.config.worker.mjs +3 -1
- package/examples/ServiceWorker.mjs +7 -6
- package/package.json +8 -8
- package/src/worker/ServiceBase.mjs +69 -31
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-
|
|
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.
|
package/apps/ServiceWorker.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
41
|
-
"chalk": "^5.0.
|
|
40
|
+
"autoprefixer": "^10.4.4",
|
|
41
|
+
"chalk": "^5.0.1",
|
|
42
42
|
"clean-webpack-plugin": "^4.0.0",
|
|
43
|
-
"commander": "^9.
|
|
44
|
-
"cssnano": "^5.1.
|
|
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
|
|
48
|
+
"inquirer": "^8.2.1",
|
|
49
49
|
"neo-jsdoc": "^1.0.1",
|
|
50
50
|
"neo-jsdoc-x": "^1.0.4",
|
|
51
|
-
"postcss": "^8.4.
|
|
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.
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|