@qooxdoo/framework 7.5.0 → 7.5.1

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.
Files changed (43) hide show
  1. package/Manifest.json +1 -1
  2. package/bin/deploy/qx +7 -5
  3. package/lib/compiler/compile-info.json +75 -75
  4. package/lib/compiler/index.js +412 -393
  5. package/lib/resource/qx/tool/cli/templates/skeleton/desktop/source/class/custom/Application.tmpl.js +7 -7
  6. package/lib/resource/qx/tool/cli/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js +10 -10
  7. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/class/custom/Application.tmpl.js +6 -6
  8. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js +9 -9
  9. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js +5 -5
  10. package/lib/resource/qx/tool/cli/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js +7 -7
  11. package/lib/resource/qx/tool/cli/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js +10 -10
  12. package/lib/resource/qx/tool/cli/templates/skeleton/server/source/class/custom/Application.tmpl.js +6 -6
  13. package/lib/resource/qx/tool/cli/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js +12 -12
  14. package/lib/resource/qx/tool/website/src/about.md +1 -1
  15. package/package.json +2 -2
  16. package/source/class/qx/test/io/transport/Websocket.js +1 -1
  17. package/source/class/qx/theme/IndigoDark.js +1 -1
  18. package/source/class/qx/theme/indigo/DecorationDark.js +30 -0
  19. package/source/class/qx/tool/cli/Application.js +4 -1
  20. package/source/class/qx/tool/cli/Cli.js +22 -23
  21. package/source/class/qx/tool/cli/Watch.js +5 -6
  22. package/source/class/qx/tool/cli/commands/Compile.js +2 -1
  23. package/source/class/qx/tool/cli/commands/Lint.js +1 -1
  24. package/source/class/qx/tool/cli/commands/Run.js +6 -7
  25. package/source/class/qx/tool/cli/commands/Serve.js +29 -36
  26. package/source/class/qx/tool/cli/commands/Test.js +3 -2
  27. package/source/class/qx/tool/cli/commands/add/Script.js +3 -1
  28. package/source/class/qx/tool/cli/commands/package/Install.js +3 -0
  29. package/source/class/qx/tool/compiler/ClassFile.js +2 -1
  30. package/source/class/qx/tool/compiler/app/Cldr.js +63 -26
  31. package/source/class/qx/ui/basic/Image.js +6 -2
  32. package/source/class/qx/ui/core/Widget.js +13 -42
  33. package/source/resource/qx/mobile/scss/common/_gradients.scss +1 -1
  34. package/source/resource/qx/tool/cli/templates/skeleton/desktop/source/class/custom/Application.tmpl.js +7 -7
  35. package/source/resource/qx/tool/cli/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js +10 -10
  36. package/source/resource/qx/tool/cli/templates/skeleton/mobile/source/class/custom/Application.tmpl.js +6 -6
  37. package/source/resource/qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js +9 -9
  38. package/source/resource/qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js +5 -5
  39. package/source/resource/qx/tool/cli/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js +7 -7
  40. package/source/resource/qx/tool/cli/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js +10 -10
  41. package/source/resource/qx/tool/cli/templates/skeleton/server/source/class/custom/Application.tmpl.js +6 -6
  42. package/source/resource/qx/tool/cli/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js +12 -12
  43. package/source/resource/qx/tool/website/src/about.md +1 -1
@@ -28,15 +28,15 @@ qx.Class.define("${namespace}.Application",
28
28
  members :
29
29
  {
30
30
  /**
31
- * This method contains the initial application code and gets called
31
+ * This method contains the initial application code and gets called
32
32
  * during startup of the application
33
- *
33
+ *
34
34
  * @lint ignoreDeprecated(alert)
35
35
  */
36
- main : function()
36
+ main()
37
37
  {
38
38
  // Call super class
39
- this.base(arguments);
39
+ super.main();
40
40
 
41
41
  // Enable logging in debug variant
42
42
  if (qx.core.Environment.get("qx.debug"))
@@ -54,10 +54,10 @@ qx.Class.define("${namespace}.Application",
54
54
  */
55
55
 
56
56
  // Create a button
57
- var button1 = new qx.ui.form.Button("Click me", "${namespace_as_path}/test.png");
57
+ const button1 = new qx.ui.form.Button("Click me", "${namespace_as_path}/test.png");
58
58
 
59
59
  // Document is the application root
60
- var doc = this.getRoot();
60
+ const doc = this.getRoot();
61
61
 
62
62
  // Add button to document at fixed coordinates
63
63
  doc.add(button1, {left: 100, top: 50});
@@ -69,4 +69,4 @@ qx.Class.define("${namespace}.Application",
69
69
  });
70
70
  }
71
71
  }
72
- });
72
+ });
@@ -11,13 +11,13 @@
11
11
  /**
12
12
  * This class demonstrates how to define unit tests for your application.
13
13
  *
14
- * Execute <code>qx test</code> to generate a testrunner application
14
+ * Execute <code>qx test</code> to generate a testrunner application
15
15
  * and open it from <tt>test/index.html</tt>
16
16
  *
17
- * The methods that contain the tests are instance methods with a
18
- * <code>test</code> prefix. You can create an arbitrary number of test
19
- * classes like this one. They can be organized in a regular class hierarchy,
20
- * i.e. using deeper namespaces and a corresponding file structure within the
17
+ * The methods that contain the tests are instance methods with a
18
+ * <code>test</code> prefix. You can create an arbitrary number of test
19
+ * classes like this one. They can be organized in a regular class hierarchy,
20
+ * i.e. using deeper namespaces and a corresponding file structure within the
21
21
  * <tt>test</tt> folder.
22
22
  */
23
23
  qx.Class.define("${namespace}.test.DemoTest",
@@ -31,11 +31,11 @@ qx.Class.define("${namespace}.test.DemoTest",
31
31
  TESTS
32
32
  ---------------------------------------------------------------------------
33
33
  */
34
-
34
+
35
35
  /**
36
36
  * Here are some simple tests
37
37
  */
38
- testSimple : function()
38
+ testSimple()
39
39
  {
40
40
  this.assertEquals(4, 3+1, "This should never fail!");
41
41
  this.assertFalse(false, "Can false be true?!");
@@ -44,10 +44,10 @@ qx.Class.define("${namespace}.test.DemoTest",
44
44
  /**
45
45
  * Here are some more advanced tests
46
46
  */
47
- testAdvanced: function ()
47
+ testAdvanced()
48
48
  {
49
- var a = 3;
50
- var b = a;
49
+ let a = 3;
50
+ let b = a;
51
51
  this.assertIdentical(a, b, "A rose by any other name is still a rose");
52
52
  this.assertInRange(3, 1, 10, "You must be kidding, 3 can never be outside [1,10]!");
53
53
  }
@@ -25,10 +25,10 @@ qx.Class.define("${namespace}.Application",
25
25
  * This method contains the initial application code and gets called
26
26
  * during startup of the application
27
27
  */
28
- main : function()
28
+ main()
29
29
  {
30
30
  // Call super class
31
- this.base(arguments);
31
+ super.main();
32
32
 
33
33
  // Enable logging in debug variant
34
34
  if (qx.core.Environment.get("qx.debug"))
@@ -47,11 +47,11 @@ qx.Class.define("${namespace}.Application",
47
47
  -------------------------------------------------------------------------
48
48
  */
49
49
 
50
- var login = new ${namespace}.page.Login();
51
- var overview = new ${namespace}.page.Overview();
50
+ const login = new ${namespace}.page.Login();
51
+ const overview = new ${namespace}.page.Overview();
52
52
 
53
53
  // Add the pages to the page manager.
54
- var manager = new qx.ui.mobile.page.Manager(false);
54
+ const manager = new qx.ui.mobile.page.Manager(false);
55
55
  manager.addDetail([
56
56
  login,
57
57
  overview
@@ -69,7 +69,7 @@ qx.Class.define("${namespace}.Application",
69
69
  * Default behaviour when a route matches. Displays the corresponding page on screen.
70
70
  * @param data {Map} the animation properties
71
71
  */
72
- _show : function(data) {
72
+ _show(data) {
73
73
  this.show(data.customData);
74
74
  }
75
75
  }
@@ -15,9 +15,9 @@ qx.Class.define("${namespace}.page.Login",
15
15
  {
16
16
  extend : qx.ui.mobile.page.NavigationPage,
17
17
 
18
- construct : function()
18
+ construct()
19
19
  {
20
- this.base(arguments);
20
+ super();
21
21
  this.setTitle("Login");
22
22
  },
23
23
 
@@ -28,22 +28,22 @@ qx.Class.define("${namespace}.page.Login",
28
28
 
29
29
 
30
30
  // overridden
31
- _initialize: function() {
32
- this.base(arguments);
31
+ _initialize() {
32
+ super._initialize();
33
33
 
34
34
  // Username
35
- var user = new qx.ui.mobile.form.TextField();
35
+ const user = new qx.ui.mobile.form.TextField();
36
36
  user.setRequired(true);
37
37
 
38
38
  // Password
39
- var pwd = new qx.ui.mobile.form.PasswordField();
39
+ const pwd = new qx.ui.mobile.form.PasswordField();
40
40
  pwd.setRequired(true);
41
41
 
42
42
  // Login Button
43
- var loginButton = new qx.ui.mobile.form.Button("Login");
43
+ const loginButton = new qx.ui.mobile.form.Button("Login");
44
44
  loginButton.addListener("tap", this._onButtonTap, this);
45
45
 
46
- var loginForm = this.__form = new qx.ui.mobile.form.Form();
46
+ const loginForm = this.__form = new qx.ui.mobile.form.Form();
47
47
  loginForm.add(user, "Username");
48
48
  loginForm.add(pwd, "Password");
49
49
 
@@ -56,7 +56,7 @@ qx.Class.define("${namespace}.page.Login",
56
56
  /**
57
57
  * Event handler for <code>tap</code> on the login button.
58
58
  */
59
- _onButtonTap: function() {
59
+ _onButtonTap() {
60
60
  // use form validation
61
61
  if (this.__form.validate()) {
62
62
  qx.core.Init.getApplication().getRouting().executeGet("/overview");
@@ -15,9 +15,9 @@ qx.Class.define("${namespace}.page.Overview",
15
15
  {
16
16
  extend : qx.ui.mobile.page.NavigationPage,
17
17
 
18
- construct : function()
18
+ construct()
19
19
  {
20
- this.base(arguments);
20
+ super();
21
21
  this.setTitle("Overview");
22
22
  this.setShowBackButton(true);
23
23
  this.setBackButtonText("Back");
@@ -27,16 +27,16 @@ qx.Class.define("${namespace}.page.Overview",
27
27
  members :
28
28
  {
29
29
  // overridden
30
- _initialize : function()
30
+ _initialize()
31
31
  {
32
- this.base(arguments);
32
+ super._initialize(arguments);
33
33
 
34
34
  this.getContent().add(new qx.ui.mobile.basic.Label("Your first app."));
35
35
  },
36
36
 
37
37
 
38
38
  // overridden
39
- _back : function(triggeredByKeyEvent)
39
+ _back(triggeredByKeyEvent)
40
40
  {
41
41
  qx.core.Init.getApplication().getRouting().back();
42
42
  }
@@ -24,15 +24,15 @@ qx.Class.define("${namespace}.demo.Application",
24
24
  members :
25
25
  {
26
26
  /**
27
- * This method contains the initial application code and gets called
27
+ * This method contains the initial application code and gets called
28
28
  * during startup of the application
29
- *
29
+ *
30
30
  * @lint ignoreDeprecated(alert)
31
31
  */
32
- main : function()
32
+ main()
33
33
  {
34
34
  // Call super class
35
- this.base(arguments);
35
+ super.main();
36
36
 
37
37
  // Enable logging in debug variant
38
38
  if (qx.core.Environment.get("qx.debug"))
@@ -50,10 +50,10 @@ qx.Class.define("${namespace}.demo.Application",
50
50
  */
51
51
 
52
52
  // Create a button
53
- var button1 = new ${namespace}.Button("Very special button", "${namespace_as_path}/test.png");
53
+ const button1 = new ${namespace}.Button("Very special button", "${namespace_as_path}/test.png");
54
54
 
55
55
  // Document is the application root
56
- var doc = this.getRoot();
56
+ const doc = this.getRoot();
57
57
 
58
58
  // Add button to document at fixed coordinates
59
59
  doc.add(button1, {left: 100, top: 50});
@@ -64,4 +64,4 @@ qx.Class.define("${namespace}.demo.Application",
64
64
  });
65
65
  }
66
66
  }
67
- });
67
+ });
@@ -11,13 +11,13 @@
11
11
  /**
12
12
  * This class demonstrates how to define unit tests for your application.
13
13
  *
14
- * Execute <code>qx test</code> to generate a testrunner application
14
+ * Execute <code>qx test</code> to generate a testrunner application
15
15
  * and open it from <tt>test/index.html</tt>
16
16
  *
17
- * The methods that contain the tests are instance methods with a
18
- * <code>test</code> prefix. You can create an arbitrary number of test
19
- * classes like this one. They can be organized in a regular class hierarchy,
20
- * i.e. using deeper namespaces and a corresponding file structure within the
17
+ * The methods that contain the tests are instance methods with a
18
+ * <code>test</code> prefix. You can create an arbitrary number of test
19
+ * classes like this one. They can be organized in a regular class hierarchy,
20
+ * i.e. using deeper namespaces and a corresponding file structure within the
21
21
  * <tt>test</tt> folder.
22
22
  */
23
23
  qx.Class.define("${namespace}.test.DemoTest",
@@ -31,11 +31,11 @@ qx.Class.define("${namespace}.test.DemoTest",
31
31
  TESTS
32
32
  ---------------------------------------------------------------------------
33
33
  */
34
-
34
+
35
35
  /**
36
36
  * Here are some simple tests
37
37
  */
38
- testSimple : function()
38
+ testSimple()
39
39
  {
40
40
  this.assertEquals(4, 3+1, "This should never fail!");
41
41
  this.assertFalse(false, "Can false be true?!");
@@ -44,10 +44,10 @@ qx.Class.define("${namespace}.test.DemoTest",
44
44
  /**
45
45
  * Here are some more advanced tests
46
46
  */
47
- testAdvanced: function ()
47
+ testAdvanced()
48
48
  {
49
- var a = 3;
50
- var b = a;
49
+ let a = 3;
50
+ let b = a;
51
51
  this.assertIdentical(a, b, "A rose by any other name is still a rose");
52
52
  this.assertInRange(3, 1, 10, "You must be kidding, 3 can never be outside [1,10]!");
53
53
  }
@@ -34,7 +34,7 @@ qx.Class.define("${namespace}.Application",
34
34
  * This method contains the initial application code and gets called
35
35
  * during startup of the application
36
36
  */
37
- main : function()
37
+ main()
38
38
  {
39
39
  if (qx.core.Environment.get("runtime.name") == "rhino") {
40
40
  qx.log.Logger.register(qx.log.appender.RhinoConsole);
@@ -59,10 +59,10 @@ qx.Class.define("${namespace}.Application",
59
59
  *
60
60
  * @param args {String[]} Rhino arguments object
61
61
  */
62
- _argumentsToSettings : function(args)
62
+ _argumentsToSettings(args)
63
63
  {
64
- var opts;
65
- for (var i=0, l=args.length; i<l; i++) {
64
+ let opts;
65
+ for (let i=0, l=args.length; i<l; i++) {
66
66
  if (args[i].indexOf("settings=") == 0) {
67
67
  opts = args[i].substr(9);
68
68
  break;
@@ -75,8 +75,8 @@ qx.Class.define("${namespace}.Application",
75
75
  if (opts) {
76
76
  opts = opts.replace(/\\\{/g, "{").replace(/\\\}/g, "}");
77
77
  opts = qx.lang.Json.parse(opts);
78
- for (var prop in opts) {
79
- var value = opts[prop];
78
+ for (let prop in opts) {
79
+ let value = opts[prop];
80
80
  if (typeof value == "string") {
81
81
  value = value.replace(/\$$/g, " ");
82
82
  }
@@ -11,13 +11,13 @@
11
11
  /**
12
12
  * This class demonstrates how to define unit tests for your application.
13
13
  *
14
- * Execute <code>qx test</code> to generate a testrunner application
14
+ * Execute <code>qx test</code> to generate a testrunner application
15
15
  * and open it from <tt>test/index.html</tt>
16
16
  *
17
- * The methods that contain the tests are instance methods with a
18
- * <code>test</code> prefix. You can create an arbitrary number of test
19
- * classes like this one. They can be organized in a regular class hierarchy,
20
- * i.e. using deeper namespaces and a corresponding file structure within the
17
+ * The methods that contain the tests are instance methods with a
18
+ * <code>test</code> prefix. You can create an arbitrary number of test
19
+ * classes like this one. They can be organized in a regular class hierarchy,
20
+ * i.e. using deeper namespaces and a corresponding file structure within the
21
21
  * <tt>test</tt> folder.
22
22
  */
23
23
  qx.Class.define("${namespace}.test.DemoTest",
@@ -33,11 +33,11 @@ qx.Class.define("${namespace}.test.DemoTest",
33
33
  TESTS
34
34
  ---------------------------------------------------------------------------
35
35
  */
36
-
36
+
37
37
  /**
38
38
  * Here are some simple tests
39
39
  */
40
- testSimple : function()
40
+ testSimple()
41
41
  {
42
42
  this.assertEquals(4, 3+1, "This should never fail!");
43
43
  this.assertFalse(false, "Can false be true?!");
@@ -46,20 +46,20 @@ qx.Class.define("${namespace}.test.DemoTest",
46
46
  /**
47
47
  * Here are some more advanced tests
48
48
  */
49
- testAdvanced: function ()
49
+ testAdvanced()
50
50
  {
51
- var a = 3;
52
- var b = a;
51
+ let a = 3;
52
+ let b = a;
53
53
  this.assertIdentical(a, b, "A rose by any other name is still a rose");
54
54
  this.assertInRange(3, 1, 10, "You must be kidding, 3 can never be outside [1,10]!");
55
55
  },
56
56
 
57
- hasNodeJs : function()
57
+ hasNodeJs()
58
58
  {
59
59
  return qx.core.Environment.get("runtime.name") == "node.js";
60
60
  },
61
61
 
62
- testNodeJs : function()
62
+ testNodeJs()
63
63
  {
64
64
  this.require(["nodeJs"]);
65
65
  // test node stuff
@@ -8,7 +8,7 @@ This is the built in web server for Qooxdoo, serving your application.
8
8
 
9
9
  You can find Qooxdoo on the web at http://www.qooxdoo.org and on GitHub at http://github.com/qooxdoo/qooxdoo.
10
10
 
11
- If you have questions, please ask them at [StackOverflow](https://stackoverflow.com/questions/tagged/qooxdoo) and make sure you use the "qooxdoo" tag when you post.
11
+ If you have questions, please ask them at [Stack Overflow](https://stackoverflow.com/questions/tagged/qooxdoo) and make sure you use the "qooxdoo" tag when you post.
12
12
 
13
13
  If you want to discuss anything, please contact us using Gitter in the [qooxdoo/qooxdoo](http://gitter.im/qooxdoo/qooxdoo) group, either [via a web browser](http://gitter.im/qooxdoo/qooxdoo) or via the Gitter app.
14
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qooxdoo/framework",
3
- "version": "7.5.0",
3
+ "version": "7.5.1",
4
4
  "description": "The JS Framework for Coders",
5
5
  "author": "The qooxdoo project",
6
6
  "keywords": [
@@ -118,7 +118,7 @@
118
118
  "tmp": "0.2.1",
119
119
  "unset-value": "^1.0.0",
120
120
  "upath": "^1.2.0",
121
- "update-notifier": "^4.1.3",
121
+ "update-notifier": "^6.0.2",
122
122
  "xml2js": "^0.4.23",
123
123
  "yargs": "^15.4.1"
124
124
  },
@@ -24,7 +24,7 @@ qx.Class.define("qx.test.io.transport.Websocket", {
24
24
  extend: qx.dev.unit.TestCase,
25
25
 
26
26
  statics: {
27
- TEST_ENDPOINT: "socketsbay.com/wss/v2/2/demo/"
27
+ TEST_ENDPOINT: "ws.postman-echo.com/raw/"
28
28
  },
29
29
 
30
30
  members: {
@@ -20,7 +20,7 @@ qx.Theme.define("qx.theme.IndigoDark", {
20
20
 
21
21
  meta: {
22
22
  color: qx.theme.indigo.ColorDark,
23
- decoration: qx.theme.indigo.Decoration,
23
+ decoration: qx.theme.indigo.DecorationDark,
24
24
  font: qx.theme.indigo.Font,
25
25
  appearance: qx.theme.indigo.AppearanceDark,
26
26
  icon: qx.theme.icon.Tango
@@ -0,0 +1,30 @@
1
+ /* ************************************************************************
2
+
3
+ qooxdoo - the new era of web development
4
+
5
+ http://qooxdoo.org
6
+
7
+ License:
8
+ MIT: https://opensource.org/licenses/MIT
9
+ See the LICENSE file in the project's top-level directory for details.
10
+
11
+ Authors:
12
+ * Scott Knick (sknick)
13
+ * Dmitrii Zolotov (goldim)
14
+
15
+ ************************************************************************ */
16
+
17
+ /**
18
+ * The indigo dark qooxdoo decoration theme.
19
+ */
20
+ qx.Theme.define("qx.theme.indigo.DecorationDark", {
21
+ extend: qx.theme.indigo.Decoration,
22
+
23
+ decorations: {
24
+ "menubar-button-hovered": {
25
+ style: {
26
+ backgroundColor: "background"
27
+ }
28
+ }
29
+ }
30
+ });
@@ -29,11 +29,14 @@ qx.Class.define("qx.tool.cli.Application", {
29
29
  * during startup of the application
30
30
  */
31
31
  async main() {
32
+ process.exitCode = 0;
32
33
  try {
33
34
  await new qx.tool.cli.Cli().run();
34
35
  } catch (e) {
35
36
  qx.tool.compiler.Console.error("Error: " + (e.stack || e.message));
36
- process.exit(1);
37
+ process.exitCode = 1;
38
+ } finally {
39
+ process.exit();
37
40
  }
38
41
  }
39
42
  },
@@ -25,6 +25,11 @@ const semver = require("semver");
25
25
  */
26
26
  qx.Class.define("qx.tool.cli.Cli", {
27
27
  extend: qx.core.Object,
28
+ properties: {
29
+ command: {
30
+ apply: "__applyCommand"
31
+ }
32
+ },
28
33
 
29
34
  construct() {
30
35
  super();
@@ -53,14 +58,16 @@ qx.Class.define("qx.tool.cli.Cli", {
53
58
  _compileJsonFilename: null,
54
59
 
55
60
  /** @type {Object} Parsed arguments */
56
- _parsedArgs: null,
57
-
58
- /** @type {Promise} Promise that resolves to the _parsedArgs, but only when completely finished parsing them */
59
- __promiseParseArgs: null,
61
+ __parsedArgs: null,
60
62
 
61
63
  /** @type {Boolean} Whether libraries have had their `.load()` method called yet */
62
64
  __librariesNotified: false,
63
65
 
66
+ __applyCommand(command) {
67
+ command.setCompilerApi(this._compilerApi);
68
+ this._compilerApi.setCommand(command);
69
+ },
70
+
64
71
  /**
65
72
  * Creates an instance of yargs, with minimal options
66
73
  *
@@ -241,18 +248,10 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
241
248
  */
242
249
  async processCommand(command) {
243
250
  qx.tool.compiler.Console.getInstance().setVerbose(this.argv.verbose);
244
- command.setCompilerApi(this._compilerApi);
245
- this._compilerApi.setCommand(command);
246
251
  await this.__notifyLibraries();
247
- try {
248
- const res = await command.process();
249
- await this._compilerApi.afterProcessFinished(command, res);
250
- return res;
251
- } catch (e) {
252
- qx.tool.compiler.Console.error("Error: " + (e.stack || e.message));
253
- process.exit(1);
254
- return null;
255
- }
252
+ const res = await command.process();
253
+ await this._compilerApi.afterProcessFinished(command, res);
254
+ return res;
256
255
  },
257
256
 
258
257
  /**
@@ -260,8 +259,8 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
260
259
  *
261
260
  * @return {Object}
262
261
  */
263
- async getParsedArgs() {
264
- return await this.__promiseParseArgs;
262
+ getParsedArgs() {
263
+ return this.__parsedArgs;
265
264
  },
266
265
 
267
266
  /**
@@ -283,8 +282,8 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
283
282
  var args = qx.lang.Array.clone(process.argv);
284
283
  args.shift();
285
284
  process.title = args.join(" ");
286
- this.__promiseParseArgs = this.__parseArgsImpl();
287
- await this.__promiseParseArgs;
285
+ await this.__parseArgsImpl();
286
+ return this.processCommand(this.getCommand());
288
287
  },
289
288
 
290
289
  /**
@@ -356,7 +355,7 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
356
355
  (await qx.tool.utils.Json.loadJsonAsync(name)) || lockfileContent;
357
356
  } catch (ex) {
358
357
  // Nothing
359
- }
358
+ }
360
359
  // check semver-type compatibility (i.e. compatible as long as major version stays the same)
361
360
  let schemaVersion = semver.coerce(
362
361
  qx.tool.config.Lockfile.getInstance().getVersion(),
@@ -569,8 +568,8 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
569
568
  config.serve.listenPort || this.argv.listenPort;
570
569
  }
571
570
 
572
- this._parsedArgs = await compilerApi.getConfiguration();
573
- return this._parsedArgs;
571
+ this.__parsedArgs = await compilerApi.getConfiguration();
572
+ return this.__parsedArgs;
574
573
  },
575
574
 
576
575
  /**
@@ -692,7 +691,7 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
692
691
  if (data) {
693
692
  if (data.handler === undefined) {
694
693
  data.handler = argv =>
695
- qx.tool.cli.Cli.getInstance().processCommand(new Clazz(argv));
694
+ qx.tool.cli.Cli.getInstance().setCommand(new Clazz(argv));
696
695
  }
697
696
  yargs.command(data);
698
697
  }
@@ -103,11 +103,9 @@ qx.Class.define("qx.tool.cli.Watch", {
103
103
  }
104
104
  config._process = null;
105
105
  }
106
-
107
106
  console.log(
108
107
  "Starting application: " + config._cmd + " " + config._args.join(" ")
109
108
  );
110
-
111
109
  config._processPromise = new qx.Promise((resolve, reject) => {
112
110
  let child = (config._process = require("child_process").spawn(
113
111
  config._cmd,
@@ -229,12 +227,10 @@ qx.Class.define("qx.tool.cli.Watch", {
229
227
  watcher.on("change", filename =>
230
228
  this.__onFileChange("change", filename)
231
229
  );
232
-
233
230
  watcher.on("add", filename => this.__onFileChange("add", filename));
234
231
  watcher.on("unlink", filename =>
235
232
  this.__onFileChange("unlink", filename)
236
233
  );
237
-
238
234
  watcher.on("ready", () => {
239
235
  qx.tool.compiler.Console.log(`Start watching ...`);
240
236
  this.__watcherReady = true;
@@ -249,6 +245,9 @@ qx.Class.define("qx.tool.cli.Watch", {
249
245
  });
250
246
  });
251
247
  });
248
+ process.on("beforeExit", this.__onStop.bind(this));
249
+ process.on("exit", this.__onStop.bind(this));
250
+ return this.__runningPromise;
252
251
  },
253
252
 
254
253
  async stop() {
@@ -352,8 +351,8 @@ qx.Class.define("qx.tool.cli.Watch", {
352
351
  }
353
352
  return null;
354
353
  });
355
-
356
- return (this.__making = runIt());
354
+ this.__making = runIt();
355
+ return this.__making;
357
356
  },
358
357
 
359
358
  __scheduleMake() {
@@ -685,7 +685,7 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
685
685
  );
686
686
 
687
687
  watch.setConfigFilenames(arr);
688
- return await watch.start();
688
+ return watch.start();
689
689
  })
690
690
  );
691
691
  },
@@ -1230,6 +1230,7 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
1230
1230
  data.localModules || {},
1231
1231
  false
1232
1232
  );
1233
+
1233
1234
  if (!qx.lang.Object.isEmpty(appConfig.localModules)) {
1234
1235
  app.setLocalModules(appConfig.localModules);
1235
1236
  }
@@ -113,7 +113,7 @@ qx.Class.define("qx.tool.cli.commands.Lint", {
113
113
  helperFilePath = path.dirname(helperFilePath);
114
114
  }
115
115
 
116
- let config = await qx.tool.cli.Cli.getInstance().getParsedArgs();
116
+ let config = qx.tool.cli.Cli.getInstance().getParsedArgs();
117
117
  let lintOptions = config.eslintConfig || {};
118
118
  lintOptions.extends = lintOptions.extends || ["@qooxdoo/qx/browser"];
119
119
  lintOptions.globals = Object.assign(