qcobjects-cli 2.4.51 → 2.4.53
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/VERSION +1 -1
- package/package.json +6 -8
- package/spec/testsSpec.js +2 -2
- package/src/org.quickcorp.qcobjects.cli.js +61 -35
- package/src/templates/pwa/sw.js +70 -11
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.4.
|
|
1
|
+
2.4.53
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qcobjects-cli",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.53",
|
|
4
4
|
"description": "qcobjects cli command line tool",
|
|
5
5
|
"main": "src/index.cjs",
|
|
6
6
|
"module": "src/index.mjs",
|
|
@@ -24,9 +24,7 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"commander": "^10.0.1",
|
|
26
26
|
"mime": "^2.4.7",
|
|
27
|
-
"
|
|
28
|
-
"yaml": "^2.2.2",
|
|
29
|
-
"qcobjects-sdk": "^2.4.53"
|
|
27
|
+
"yaml": "^2.2.2"
|
|
30
28
|
},
|
|
31
29
|
"devDependencies": {
|
|
32
30
|
"@types/qcobjects": "github:QCObjects/-types-qcobjects",
|
|
@@ -44,13 +42,13 @@
|
|
|
44
42
|
"eslint-plugin-n": "^15.7.0",
|
|
45
43
|
"eslint-plugin-promise": "^6.1.1",
|
|
46
44
|
"jasmine": "^3.99.0",
|
|
47
|
-
"qcobjects": "^2.4.
|
|
48
|
-
"qcobjects-sdk": "^2.4.
|
|
45
|
+
"qcobjects": "^2.4.92",
|
|
46
|
+
"qcobjects-sdk": "^2.4.60",
|
|
49
47
|
"qcobjects-tsconfig": "^2.4.10"
|
|
50
48
|
},
|
|
51
49
|
"peerDependencies": {
|
|
52
|
-
"qcobjects": "^2.4.
|
|
53
|
-
"qcobjects-sdk": "^2.4.
|
|
50
|
+
"qcobjects": "^2.4.92",
|
|
51
|
+
"qcobjects-sdk": "^2.4.60"
|
|
54
52
|
},
|
|
55
53
|
"repository": {
|
|
56
54
|
"type": "file",
|
package/spec/testsSpec.js
CHANGED
|
@@ -6,8 +6,8 @@ describe("QCObjects Integrity", function () {
|
|
|
6
6
|
const package_config = require(absolutePath+"/../package.json");
|
|
7
7
|
|
|
8
8
|
it("Verifying the version of CLI Tool", function () {
|
|
9
|
-
console.log("Verifying the version of QCObjects is required and same for
|
|
10
|
-
expect(package_config.
|
|
9
|
+
console.log("Verifying the version of QCObjects is required and same for devDependencies and peerDependencies...");
|
|
10
|
+
expect(package_config.devDependencies.qcobjects).toEqual(package_config.peerDependencies.qcobjects);
|
|
11
11
|
console.log("Verifying the version of CLI Tool... OK");
|
|
12
12
|
});
|
|
13
13
|
|
|
@@ -62,10 +62,11 @@ Package("org.quickcorp.qcobjects.cli",[
|
|
|
62
62
|
class SwitchCommander extends InheritClass {
|
|
63
63
|
|
|
64
64
|
choiceOption = {
|
|
65
|
-
generateSw(_appName){
|
|
65
|
+
generateSw(_appName, options){
|
|
66
|
+
let dirPrefix = options.dir;
|
|
66
67
|
let switchCommander = this;
|
|
67
68
|
let appName = (typeof _appName ==="undefined" || _appName === true)?("MyAppName"):(_appName);
|
|
68
|
-
switchCommander.generateServiceWorker(appName);
|
|
69
|
+
switchCommander.generateServiceWorker(appName, dirPrefix);
|
|
69
70
|
|
|
70
71
|
},
|
|
71
72
|
create(_appName, options){
|
|
@@ -282,46 +283,70 @@ Package("org.quickcorp.qcobjects.cli",[
|
|
|
282
283
|
});
|
|
283
284
|
}
|
|
284
285
|
|
|
285
|
-
generateServiceWorker(appName){
|
|
286
|
+
generateServiceWorker(appName, dirPrefix = "./"){
|
|
287
|
+
const writeContent = (component) => {
|
|
288
|
+
const parsedText = component.parseTemplate(component.template);
|
|
289
|
+
logger.debug("Starting to write the sw file...");
|
|
290
|
+
fs.writeFile(`${dirPrefix}/sw.js`, parsedText , (err) => {
|
|
291
|
+
if (err){
|
|
292
|
+
throw Error (err);
|
|
293
|
+
}
|
|
294
|
+
logger.info("Service Worker Generated");
|
|
295
|
+
console.log("");
|
|
296
|
+
console.log("Now simply put:");
|
|
297
|
+
console.log("CONFIG.set('serviceWorkerURI','/sw.js');");
|
|
298
|
+
console.log(" In your init.js file ");
|
|
299
|
+
console.log("");
|
|
300
|
+
console.log("To start your app in a local server ");
|
|
301
|
+
console.log("Execute the command: ");
|
|
302
|
+
console.log("> qcobjects launch <appname>");
|
|
303
|
+
console.log("");
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
class ServiceWorkerComponent extends Component {
|
|
310
|
+
cached = false;
|
|
311
|
+
templateURI= "sw.js";
|
|
312
|
+
basePath = templatePwaPath;
|
|
313
|
+
name ="sw";
|
|
314
|
+
tplsource= "default";
|
|
315
|
+
template = "";
|
|
316
|
+
|
|
317
|
+
done ({request, component}){
|
|
318
|
+
super.done({request, component});
|
|
319
|
+
writeContent(this);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
286
323
|
return new Promise( (resolve, reject) => {
|
|
287
|
-
var filelist = ["/"].concat(this.fileListRecursive(
|
|
324
|
+
var filelist = ["/"].concat(this.fileListRecursive(`${dirPrefix}`));
|
|
325
|
+
if (typeof dirPrefix !== "undefined" && dirPrefix !== "./" && dirPrefix !== "."){
|
|
326
|
+
filelist = filelist.map(f=>f.replace(new RegExp(`${dirPrefix}/`), ""));
|
|
327
|
+
}
|
|
288
328
|
filelist = filelist.filter(function (fl){return fl !== "sw.js" && (!fl.startsWith("node_modules/")); });
|
|
289
329
|
filelist = filelist.filter(fname => !fname.endsWith(".pem"));
|
|
290
330
|
filelist = filelist.filter(fname => !fname.endsWith(".sh"));
|
|
291
331
|
filelist = filelist.filter(fname => !(new RegExp("^package(.*).json$")).test(fname));
|
|
292
332
|
filelist = filelist.filter(fname => !fname.startsWith("."));
|
|
293
333
|
var fileListString = "\n\t\""+filelist.join("\",\n\t\"")+"\"";
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
},
|
|
305
|
-
done ({request, component}) {
|
|
306
|
-
return new Promise ((resolve, reject)=> {
|
|
307
|
-
fs.writeFile("./sw.js", component.parsedAssignmentText, err => {
|
|
308
|
-
logger.info("Service Worker Generated");
|
|
309
|
-
console.log("");
|
|
310
|
-
console.log("Now simply put:");
|
|
311
|
-
console.log("CONFIG.set('serviceWorkerURI','/sw.js');");
|
|
312
|
-
console.log(" In your init.js file ");
|
|
313
|
-
console.log("");
|
|
314
|
-
console.log("To start your app in a local server ");
|
|
315
|
-
console.log("Execute the command: ");
|
|
316
|
-
console.log("> qcobjects launch <appname>");
|
|
317
|
-
console.log("");
|
|
318
|
-
});
|
|
319
|
-
resolve({request, component});
|
|
334
|
+
let component;
|
|
335
|
+
|
|
336
|
+
new Promise ((resolve, reject)=> {
|
|
337
|
+
component = new ServiceWorkerComponent({
|
|
338
|
+
name: "sw",
|
|
339
|
+
data: {
|
|
340
|
+
appName: appName,
|
|
341
|
+
appVersion: "1.0.0",
|
|
342
|
+
filelist: fileListString
|
|
343
|
+
}
|
|
320
344
|
});
|
|
321
|
-
|
|
345
|
+
setTimeout(()=> {
|
|
346
|
+
component.done({request:null, component});
|
|
347
|
+
}, 1000);
|
|
322
348
|
});
|
|
323
|
-
|
|
324
|
-
} );
|
|
349
|
+
});
|
|
325
350
|
}
|
|
326
351
|
|
|
327
352
|
copyTemplate(source, dest){
|
|
@@ -443,8 +468,9 @@ Package("org.quickcorp.qcobjects.cli",[
|
|
|
443
468
|
.action(function(args, options){
|
|
444
469
|
switchCommander.choiceOption.upgradeToEnterprise.call(switchCommander,args,options);
|
|
445
470
|
});
|
|
446
|
-
switchCommander.program.command("generate-sw
|
|
447
|
-
.
|
|
471
|
+
switchCommander.program.command("generate-sw <appname>")
|
|
472
|
+
.option("-d, --dir <dirPrefix> ", "creates the service worker in a specific dir <dirPrefix>")
|
|
473
|
+
.description("Generates the service worker <appname>")
|
|
448
474
|
.action(function(args, options){
|
|
449
475
|
switchCommander.choiceOption.generateSw.call(switchCommander,args,options);
|
|
450
476
|
});
|
package/src/templates/pwa/sw.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* QCObjects
|
|
3
|
-
*
|
|
2
|
+
* QCObjects Framework
|
|
3
|
+
* ____________________________________
|
|
4
4
|
*
|
|
5
5
|
* Author: Jean Machuca <correojean@gmail.com>
|
|
6
6
|
*
|
|
@@ -23,31 +23,90 @@
|
|
|
23
23
|
* license document, but changing it is not allowed.
|
|
24
24
|
*/
|
|
25
25
|
"use strict";
|
|
26
|
+
// eslint-disable-next-line no-undef
|
|
27
|
+
|
|
28
|
+
/* eslint-disable no-undef */
|
|
29
|
+
// This is the service worker with the combined offline experience (Offline page + Offline copy of pages)
|
|
30
|
+
|
|
31
|
+
const CACHE = "{{appName}}-offline-page";
|
|
32
|
+
|
|
33
|
+
importScripts("https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js");
|
|
34
|
+
|
|
35
|
+
const offlineFallbackPage = "index-fallback.html";
|
|
36
|
+
|
|
37
|
+
self.addEventListener("message", (event) => {
|
|
38
|
+
if (event.data && event.data.type === "SKIP_WAITING") {
|
|
39
|
+
self.skipWaiting();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
self.addEventListener("install", async (event) => {
|
|
44
|
+
event.waitUntil(
|
|
45
|
+
caches.open(CACHE)
|
|
46
|
+
.then((cache) => cache.add(offlineFallbackPage))
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
if (workbox.navigationPreload.isSupported()) {
|
|
51
|
+
workbox.navigationPreload.enable();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
workbox.routing.registerRoute(
|
|
55
|
+
// eslint-disable-next-line prefer-regex-literals
|
|
56
|
+
new RegExp("/*"),
|
|
57
|
+
new workbox.strategies.StaleWhileRevalidate({
|
|
58
|
+
cacheName: CACHE
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
self.addEventListener("fetch", (event) => {
|
|
63
|
+
if (event.request.mode === "navigate") {
|
|
64
|
+
event.respondWith((async () => {
|
|
65
|
+
try {
|
|
66
|
+
const preloadResp = await event.preloadResponse;
|
|
67
|
+
|
|
68
|
+
if (preloadResp) {
|
|
69
|
+
return preloadResp;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const networkResp = await fetch(event.request);
|
|
73
|
+
return networkResp;
|
|
74
|
+
} catch (error) {
|
|
75
|
+
|
|
76
|
+
const cache = await caches.open(CACHE);
|
|
77
|
+
const cachedResp = await cache.match(offlineFallbackPage);
|
|
78
|
+
return cachedResp;
|
|
79
|
+
}
|
|
80
|
+
})());
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
|
|
26
85
|
const version = "{{appVersion}}";
|
|
27
86
|
const appName = "{{appName}}";
|
|
28
87
|
const cacheSufix = (Math.round(Date.now()/(1000*3600))).toString(); // 1 hour
|
|
29
88
|
const cacheName = `qcobjects-app-${appName}-${version}-${cacheSufix}`;
|
|
30
|
-
const
|
|
89
|
+
const startUrl = "/?homescreen=1";
|
|
31
90
|
caches.delete(cacheName); // force to reload cache for the first time the sw is loaded
|
|
32
|
-
self.addEventListener(
|
|
91
|
+
self.addEventListener("install", e => {
|
|
33
92
|
e.waitUntil(
|
|
34
93
|
caches.open(cacheName).then(cache => {
|
|
35
|
-
return cache.addAll([`${
|
|
36
|
-
|
|
94
|
+
return cache.addAll([`${startUrl}`,{{filelist}}])
|
|
95
|
+
.then(() => self.skipWaiting());
|
|
37
96
|
})
|
|
38
97
|
);
|
|
39
98
|
});
|
|
40
99
|
|
|
41
|
-
self.addEventListener(
|
|
100
|
+
self.addEventListener("activate", event => {
|
|
42
101
|
event.waitUntil(self.clients.claim());
|
|
43
102
|
});
|
|
44
103
|
|
|
45
|
-
self.addEventListener(
|
|
104
|
+
self.addEventListener("fetch", event => {
|
|
46
105
|
event.respondWith(
|
|
47
106
|
caches.open(cacheName)
|
|
48
|
-
.then(cache => cache.match(event.request, {ignoreSearch: true}))
|
|
107
|
+
.then(cache => cache.match(event.request, { ignoreSearch: true }))
|
|
49
108
|
.then(response => {
|
|
50
|
-
|
|
51
|
-
|
|
109
|
+
return response || fetch(event.request);
|
|
110
|
+
})
|
|
52
111
|
);
|
|
53
112
|
});
|