qcobjects-cli 2.4.52 → 2.4.54

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 CHANGED
@@ -1 +1 @@
1
- 2.4.52
1
+ 2.4.54
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qcobjects-cli",
3
- "version": "2.4.52",
3
+ "version": "2.4.54",
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
- "qcobjects": "^2.4.87",
28
- "yaml": "^2.2.2",
29
- "qcobjects-sdk": "^2.4.55"
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.87",
48
- "qcobjects-sdk": "^2.4.55",
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.87",
53
- "qcobjects-sdk": "^2.4.55"
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 dependencies and peerDependencies...");
10
- expect(package_config.dependencies.qcobjects).toEqual(package_config.peerDependencies.qcobjects);
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
- var component = New(Component, {
295
- templateURI: "sw.js",
296
- basePath:templatePwaPath,
297
- name:"sw",
298
- cached:false,
299
- tplsource: "default",
300
- data: {
301
- appName: appName,
302
- appVersion: "1.0.0",
303
- filelist: fileListString
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 <appname>")
447
- .description("Generates the service worker <appname>")
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
  });
@@ -39,14 +39,22 @@ require(absolutePath + "/org.quickcorp.qcobjects.main.file.js");
39
39
  require(absolutePath+ "/org.qcobjects.common.pipelog.js");
40
40
 
41
41
  let ImportMicroservice = function (microservicePackage) {
42
+ var _ret_;
42
43
  var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + ".js");
43
44
  if (standardPath !== null) {
44
- Import(microservicePackage);
45
+ _ret_ = Import(microservicePackage);
45
46
  } else {
46
- Import(absolutePath + "/backend/" + microservicePackage);
47
+ var nonStandardPath = findPackageNodePath(absolutePath + "/backend/" + microservicePackage) || findPackageNodePath(absolutePath + "/backend/" + microservicePackage + ".js");
48
+ if (nonStandardPath !== null){
49
+ _ret_ = Import(absolutePath + "/backend/" + microservicePackage);
50
+ } else {
51
+ _ret_ = Promise.resolve(require (microservicePackage));
52
+ }
47
53
  }
54
+ return _ret_;
48
55
  };
49
56
 
57
+
50
58
  Package("org.quickcorp.qcobjects.main.http.gae.server", [
51
59
 
52
60
  class BackendMicroservice extends InheritClass {
@@ -44,12 +44,16 @@ let ImportMicroservice = function (microservicePackage) {
44
44
  if (standardPath !== null) {
45
45
  _ret_ = Import(microservicePackage);
46
46
  } else {
47
- _ret_ = Import(absolutePath + "/backend/" + microservicePackage);
47
+ var nonStandardPath = findPackageNodePath(absolutePath + "/backend/" + microservicePackage) || findPackageNodePath(absolutePath + "/backend/" + microservicePackage + ".js");
48
+ if (nonStandardPath !== null){
49
+ _ret_ = Import(absolutePath + "/backend/" + microservicePackage);
50
+ } else {
51
+ _ret_ = Promise.resolve(require (microservicePackage));
52
+ }
48
53
  }
49
54
  return _ret_;
50
55
  };
51
56
 
52
-
53
57
  Package("org.quickcorp.qcobjects.main.http.server",[
54
58
 
55
59
  class BackendMicroservice extends InheritClass {
@@ -45,11 +45,17 @@ let ImportMicroservice = function (microservicePackage) {
45
45
  if (standardPath !== null) {
46
46
  _ret_ = Import(microservicePackage);
47
47
  } else {
48
- _ret_ = Import(absolutePath + "/backend/" + microservicePackage);
48
+ var nonStandardPath = findPackageNodePath(absolutePath + "/backend/" + microservicePackage) || findPackageNodePath(absolutePath + "/backend/" + microservicePackage + ".js");
49
+ if (nonStandardPath !== null){
50
+ _ret_ = Import(absolutePath + "/backend/" + microservicePackage);
51
+ } else {
52
+ _ret_ = Promise.resolve(require (microservicePackage));
53
+ }
49
54
  }
50
55
  return _ret_;
51
56
  };
52
57
 
58
+
53
59
  Package("org.quickcorp.qcobjects.main.http2.server", [
54
60
 
55
61
  class HTTP2ServerResponse extends InheritClass {
@@ -1,6 +1,6 @@
1
1
  /**
2
- * QCObjects SDK 1.0
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 start_url = "/?homescreen=1";
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('install', e => {
91
+ self.addEventListener("install", e => {
33
92
  e.waitUntil(
34
93
  caches.open(cacheName).then(cache => {
35
- return cache.addAll([`${start_url}`,{{filelist}}])
36
- .then(() => self.skipWaiting());
94
+ return cache.addAll([`${startUrl}`,{{filelist}}])
95
+ .then(() => self.skipWaiting());
37
96
  })
38
97
  );
39
98
  });
40
99
 
41
- self.addEventListener('activate', event => {
100
+ self.addEventListener("activate", event => {
42
101
  event.waitUntil(self.clients.claim());
43
102
  });
44
103
 
45
- self.addEventListener('fetch', event => {
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
- return response || fetch(event.request);
51
- })
109
+ return response || fetch(event.request);
110
+ })
52
111
  );
53
112
  });