@breakside/jskit 2022.49.1 → 2022.52.0

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 (66) hide show
  1. package/Frameworks/DOM.jsframework/Info.json +2 -2
  2. package/Frameworks/DOM.jsframework/io.breakside.JSKit.DOM-bundle.js +2 -2
  3. package/Frameworks/FontKit.jsframework/Info.json +2 -2
  4. package/Frameworks/FontKit.jsframework/io.breakside.JSKit.FontKit-bundle.js +2 -2
  5. package/Frameworks/Foundation.jsframework/Info.json +2 -2
  6. package/Frameworks/Foundation.jsframework/JS/Error+JS.js +6 -1
  7. package/Frameworks/Foundation.jsframework/JS/JSObject.js +5 -4
  8. package/Frameworks/Foundation.jsframework/JS/JSTextFramesetter.js +1 -1
  9. package/Frameworks/Foundation.jsframework/JS/Number+JS.js +3 -1
  10. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  11. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  12. package/Frameworks/SecurityKit.jsframework/JS/SECSign+Node.js +1 -1
  13. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  14. package/Info.json +2 -2
  15. package/Node/HTMLBuilder.js +9 -8
  16. package/Node/KeyCommand.js +1 -1
  17. package/Node/KeypairCommand.js +73 -0
  18. package/Node/io.breakside.jskit-bundle.js +2 -2
  19. package/Node/jskit +1 -0
  20. package/Node/main.js +1 -0
  21. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  22. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  23. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  24. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  25. package/Root/Frameworks/ChartKit/CHBarChart.js +1 -1
  26. package/Root/Frameworks/ChartKit/CHStackedAreaChart.js +0 -2
  27. package/Root/Frameworks/ChartKit/CHStackedBarChart.js +0 -2
  28. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  29. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  30. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  31. package/Root/Frameworks/DOM/Info.yaml +1 -1
  32. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  33. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  34. package/Root/Frameworks/Foundation/Error+JS.js +6 -1
  35. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  36. package/Root/Frameworks/Foundation/JSObject.js +5 -4
  37. package/Root/Frameworks/Foundation/JSTextFramesetter.js +1 -1
  38. package/Root/Frameworks/Foundation/Number+JS.js +3 -1
  39. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  40. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  41. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  42. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  43. package/Root/Frameworks/NotificationKit/NKHTMLUserNotificationCenter.js +2 -2
  44. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  45. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  46. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  47. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  48. package/Root/Frameworks/SecurityKit/SECSign+Node.js +1 -1
  49. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  50. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  51. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  52. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  53. package/Root/Frameworks/UIKit/UIDevice+HTML.js +29 -18
  54. package/Root/Frameworks/UIKit/UIDevice.js +15 -1
  55. package/Root/Frameworks/UIKit/UIHTMLApplication.js +36 -21
  56. package/Root/Frameworks/UIKit/UIListView.js +20 -2
  57. package/Root/Frameworks/UIKit/UIMenuView.js +1 -0
  58. package/Root/Frameworks/UIKit/UIScrollGestureRecognizer.js +184 -0
  59. package/Root/Frameworks/UIKit/UIStackView.js +4 -0
  60. package/Root/Frameworks/UIKit/UIWindow.js +3 -0
  61. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  62. package/Root/Templates/html/${PROJECT_NAME}/MainWindow.spec.yaml +2 -4
  63. package/Root/Templates/html/${PROJECT_NAME}/www/HTMLAppBootstrapper.js +24 -9
  64. package/Root/Templates/html/${PROJECT_NAME}/www/index.html +45 -30
  65. package/Root/Templates/html/${PROJECT_NAME}/www/service-worker.js +6 -5
  66. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
4
- "JSBundleVersion": "2022.49.1",
4
+ "JSBundleVersion": "2022.52.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "DOM+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
12
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
13
13
  }
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
6
- "JSBundleVersion": "2022.49.1",
6
+ "JSBundleVersion": "2022.52.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
11
11
  "node": "DOM+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
14
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
15
15
  },
16
16
  "Resources": [],
17
17
  "ResourceLookup": {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.FontKit",
4
- "JSBundleVersion": "2022.49.1",
4
+ "JSBundleVersion": "2022.52.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
8
8
  "html": "FontKit+HTML.js"
9
9
  },
10
10
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
11
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
11
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
12
12
  }
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.JSKit.FontKit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.FontKit",
6
- "JSBundleVersion": "2022.49.1",
6
+ "JSBundleVersion": "2022.52.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
10
10
  "html": "FontKit+HTML.js"
11
11
  },
12
12
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
13
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
13
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
14
14
  },
15
15
  "Resources": [],
16
16
  "ResourceLookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.Foundation",
4
- "JSBundleVersion": "2022.49.1",
4
+ "JSBundleVersion": "2022.52.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "Foundation+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
12
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
13
13
  }
@@ -75,16 +75,21 @@ var patterns = [chromeLikePattern, chromeMethodlessPattern, firefoxLikePattern,
75
75
  var frameFromLine = function(line){
76
76
  var matches;
77
77
  var pattern;
78
+ var frame;
78
79
  for (var i = 0, l = patterns.length; i < l; ++i){
79
80
  pattern = patterns[i];
80
81
  matches = line.match(pattern.regex);
81
82
  if (matches){
82
- return {
83
+ frame = {
83
84
  method: pattern.groups.method > 0 ? matches[pattern.groups.method] : '',
84
85
  filename: matches[pattern.groups.filename],
85
86
  lineno: parseInt(matches[pattern.groups.lineno]),
86
87
  colno: parseInt(matches[pattern.groups.colno])
87
88
  };
89
+ if (frame.filename && frame.filename[0] == "@"){
90
+ frame.filename = frame.filename.substr(1);
91
+ }
92
+ return frame;
88
93
  }
89
94
  }
90
95
  };
@@ -15,6 +15,7 @@
15
15
 
16
16
  // #import "JSClass.js"
17
17
  // #import "JSValueTransformer.js"
18
+ // #import "Number+JS.js"
18
19
  /* global JSSpec */
19
20
  'use strict';
20
21
 
@@ -156,21 +157,21 @@ JSObject.definePropertiesFromExtensions({
156
157
  this._updateValueForBinding(context.binding);
157
158
  }else if (change.type == JSObject.KeyValueChange.Insertion){
158
159
  key = bindingInfo.binding;
159
- change.indexes.sort();
160
+ change.indexes.sort(Number.jskitCompare);
160
161
  for (i = 0, l = change.indexes.length; i < l; ++i){
161
162
  index = change.indexes[i];
162
163
  this.silentlyInsertObjectInKeyAtIndex(change.sourceObject.objectInKeyAtIndex(change.sourceKey, index), key, index);
163
164
  }
164
165
  }else if (change.type == JSObject.KeyValueChange.Removal){
165
166
  key = bindingInfo.binding;
166
- change.indexes.sort();
167
+ change.indexes.sort(Number.jskitCompare);
167
168
  for (i = change.indexes.length - 1; i >= 0; --i){
168
169
  index = change.indexes[i];
169
170
  this.silentlyRemoveObjectFromKeyAtIndex(key, index);
170
171
  }
171
172
  }else if (change.type == JSObject.KeyValueChange.Replacement){
172
173
  key = bindingInfo.binding;
173
- change.indexes.sort();
174
+ change.indexes.sort(Number.jskitCompare);
174
175
  for (i = 0, l = change.indexes.length; i < l; ++i){
175
176
  index = change.indexes[i];
176
177
  this.silentlyReplaceObjectInKeyAtIndexWithObject(key, index, change.sourceObject.objectInKeyAtIndex(change.sourceKey, index));
@@ -613,7 +614,7 @@ JSObject.definePropertiesFromExtensions({
613
614
  targetObject = targetObject.valueForKeyPath(keyParts.join('.'));
614
615
  }
615
616
  if (targetObject){
616
- indexes.sort();
617
+ indexes.sort(Number.jskitCompare);
617
618
  if (change == JSObject.KeyValueChange.Insertion){
618
619
  for (i = 0, l = indexes.length; i < l; ++i){
619
620
  index = indexes[i];
@@ -175,7 +175,7 @@ JSClass("JSTextFramesetter", JSObject, {
175
175
  attributes: JSReadOnlyProperty("_attributes", null),
176
176
 
177
177
  getAttributes: function(){
178
- logger.warn("JSTextFramesetter.attributes is deprecated");
178
+ logger.warn("JSTextFramesetter.attributes is deprecated, use JSTextFramesetter.defaultParagraphStyle");
179
179
  if (this._attributes === null){
180
180
  var framesetter = this;
181
181
  this._attributes = Object.create({}, {
@@ -17,4 +17,6 @@
17
17
 
18
18
  Number.prototype.parseNumberArray = function(){
19
19
  return [this];
20
- };
20
+ };
21
+
22
+ Number.jskitCompare = function(a, b){ return a - b; };
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.Foundation",
6
- "JSBundleVersion": "2022.49.1",
6
+ "JSBundleVersion": "2022.52.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
11
11
  "node": "Foundation+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
14
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
15
15
  },
16
16
  "Resources": [
17
17
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
4
- "JSBundleVersion": "2022.49.1",
4
+ "JSBundleVersion": "2022.52.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "SecurityKit+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
12
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
13
13
  }
@@ -376,7 +376,7 @@ nodeNamedCurves[SECSign.EllipticCurve.p521] = "secp521r1";
376
376
  var derNamedCurves = {};
377
377
  derNamedCurves[SECSign.EllipticCurve.p256] = "1.2.840.10045.3.1.7";
378
378
  derNamedCurves[SECSign.EllipticCurve.p384] = "1.3.132.0.34";
379
- derNamedCurves[SECSign.EllipticCurve.p512] = "1.3.132.0.35";
379
+ derNamedCurves[SECSign.EllipticCurve.p521] = "1.3.132.0.35";
380
380
 
381
381
  var nodeAlgorithms = {};
382
382
  nodeAlgorithms[SECSign.Algorithm.rsaSHA256] = {name: 'rsa', hash: 'sha256'};
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
6
- "JSBundleVersion": "2022.49.1",
6
+ "JSBundleVersion": "2022.52.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
11
11
  "node": "SecurityKit+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
14
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
15
15
  },
16
16
  "Resources": [],
17
17
  "ResourceLookup": {
package/Info.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "JSBundleType": "node",
3
3
  "JSBundleIdentifier": "io.breakside.jskit",
4
- "JSBundleVersion": "2022.49.1",
4
+ "JSBundleVersion": "2022.52.0",
5
5
  "JSExecutableName": "jskit",
6
6
  "NPMOrganization": "breakside",
7
7
  "JSResources": [
8
8
  "Tests/HTMLTestRunner.js",
9
9
  "Tests/NodeTestRunner.js"
10
10
  ],
11
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
11
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
12
12
  }
@@ -722,35 +722,36 @@ JSClass("HTMLBuilder", Builder, {
722
722
  return;
723
723
  }
724
724
  this.printer.setStatus("Creating service worker...");
725
- var sources = {'./': {required: true}};
725
+ var sources = {'./': {required: true, cache: "no-store"}};
726
726
  for (let i = 0, l = this.wwwPaths.length; i < l; ++i){
727
- sources[this.wwwPaths[i]] = {required: true};
727
+ sources[this.wwwPaths[i]] = {required: true, cache: "no-store"};
728
728
  }
729
729
  for (let i = 0, l = this.wwwJavascriptPaths.length; i < l; ++i){
730
- sources[this.wwwJavascriptPaths[i]] = {required: true};
730
+ sources[this.wwwJavascriptPaths[i]] = {required: true, cache: "no-store"};
731
731
  }
732
732
  if (this.preflightURL !== null){
733
733
  let path = this.preflightURL.encodedStringRelativeTo(this.wwwURL);
734
- sources[path] = {required: true};
734
+ sources[path] = {required: true, cache: "default"};
735
735
  }
736
736
  if (this.workerURL !== null && this.hasLinkedDispatchFramework){
737
737
  let path = this.workerURL.encodedStringRelativeTo(this.wwwURL);
738
- sources[path] = {required: true};
738
+ sources[path] = {required: true, cache: "no-store"};
739
739
  }
740
740
  for (let i = 0, l = this.wwwResourcePaths.length; i < l; ++i){
741
- sources[this.wwwResourcePaths[i]] = {required: true};
741
+ sources[this.wwwResourcePaths[i]] = {required: true, cache: "default"};
742
742
  }
743
743
  for (let i = 0, l = this.wwwCSSPaths.length; i < l; ++i){
744
- sources[this.wwwCSSPaths[i]] = {required: true};
744
+ sources[this.wwwCSSPaths[i]] = {required: true, cache: "no-store"};
745
745
  }
746
746
  for (let i = 0, l = this.uncachedWWWPaths.length; i < l; ++i){
747
- sources[this.uncachedWWWPaths[i]] = {required: false};
747
+ sources[this.uncachedWWWPaths[i]] = {required: false, cache: "default"};
748
748
  }
749
749
  var params = {
750
750
  JSKIT_APP: JSON.stringify({
751
751
  buildId: this.buildId,
752
752
  environment: this.project.info.HTMLApplicationEnvironment,
753
753
  sources: sources,
754
+ debug: this.debug
754
755
  }, null, 2)
755
756
  };
756
757
  var workerConents = await this.fileManager.contentsAtURL(this.serviceWorkerSourceURL);
@@ -21,7 +21,7 @@
21
21
  JSClass("KeyCommand", Command, {
22
22
 
23
23
  name: "key",
24
- help: "Create an encryption key",
24
+ help: "Create a symmetric encryption key",
25
25
 
26
26
  options: {
27
27
  format: {default: "raw", help: "The format for the key", allowed: ["jwk", "raw"]},
@@ -0,0 +1,73 @@
1
+ // Copyright 2020 Breakside Inc.
2
+ //
3
+ // Licensed under the Breakside Public License, Version 1.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // If a copy of the License was not distributed with this file, you may
6
+ // obtain a copy at
7
+ //
8
+ // http://breakside.io/licenses/LICENSE-1.0.txt
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+
16
+ // #import "Command.js"
17
+ // #import "Printer.js"
18
+ // #import SecurityKit
19
+ 'use strict';
20
+
21
+ JSClass("KeypairCommand", Command, {
22
+
23
+ name: "keypair",
24
+ help: "Create an asymmetric encryption key pair",
25
+
26
+ options: {
27
+ format: {default: "pem", help: "The format for the key", allowed: ["jwk", "pem"]},
28
+ algorithm: {default: "ecdh", help: "The encryption algorithm to use", allowed: ["ecdh", "rsa"]},
29
+ bits: {default: 512, valueType: "integer", allowed: [256, 384, 512], help: "The bit length of the key data"}
30
+ },
31
+
32
+ run: async function(){
33
+ var workspaceURL = this.workingDirectoryURL;
34
+ var printer = Printer.initWithLabel('key');
35
+ var algorithm;
36
+ switch (this.arguments.algorithm){
37
+ case "ecdh":
38
+ switch (this.arguments.bits){
39
+ case 256: algorithm = SECSign.Algorithm.ellipticCurveSHA256; break;
40
+ case 384: algorithm = SECSign.Algorithm.ellipticCurveSHA384; break;
41
+ case 512: algorithm = SECSign.Algorithm.ellipticCurveSHA512; break;
42
+ default: throw new Error("Unsupported algorithm/bits combination");
43
+ }
44
+ break;
45
+ case "rsa":
46
+ switch (this.arguments.bits){
47
+ case 256: algorithm = SECSign.Algorithm.rsaSHA256; break;
48
+ case 384: algorithm = SECSign.Algorithm.rsaSHA384; break;
49
+ case 512: algorithm = SECSign.Algorithm.rsaSHA512; break;
50
+ default: throw new Error("Unsupported algorithm/bits combination");
51
+ }
52
+ break;
53
+ default:
54
+ throw new Error("Unsupported algorithm/bits combination");
55
+ }
56
+ var sign = SECSign.initWithAlgorithm(algorithm);
57
+ var pair;
58
+ if (this.arguments.format === "jwk"){
59
+ pair = await sign.createJWKPair({});
60
+ printer.print("public: %s\n".sprintf(JSON.stringify(pair.public).utf8().base64URLStringRepresentation()));
61
+ printer.print("private: %s\n".sprintf(JSON.stringify(pair.private).utf8().base64URLStringRepresentation()));
62
+ }else if (this.arguments.format === "pem"){
63
+ pair = await sign.createKeyPair({});
64
+ var data = await pair.public.getData();
65
+ printer.print(data.stringByDecodingUTF8());
66
+ printer.print("\n");
67
+ data = await pair.private.getData();
68
+ printer.print(data.stringByDecodingUTF8());
69
+ printer.print("\n");
70
+ }
71
+ },
72
+
73
+ });
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.jskit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "node",
5
5
  "JSBundleIdentifier": "io.breakside.jskit",
6
- "JSBundleVersion": "2022.49.1",
6
+ "JSBundleVersion": "2022.52.0",
7
7
  "JSExecutableName": "jskit",
8
8
  "NPMOrganization": "breakside",
9
9
  "JSResources": [
10
10
  "Tests/HTMLTestRunner.js",
11
11
  "Tests/NodeTestRunner.js"
12
12
  ],
13
- "GitRevision": "55add1449a151d1f7a666032d4fb8b77c26bb221"
13
+ "GitRevision": "3213efb27c72a7671fd5594e83d81a41f9979a0a"
14
14
  },
15
15
  "Resources": [
16
16
  {
package/Node/jskit CHANGED
@@ -217,6 +217,7 @@ require("./Documentation.js");
217
217
  require("./DocCommand.js");
218
218
  require("./GlobalsCommand.js");
219
219
  require("./KeyCommand.js");
220
+ require("./KeypairCommand.js");
220
221
  var entry = require("./main.js").main;
221
222
 
222
223
  var path = require("path");
package/Node/main.js CHANGED
@@ -21,6 +21,7 @@
21
21
  // #import "DocCommand.js"
22
22
  // #import "GlobalsCommand.js"
23
23
  // #import "KeyCommand.js"
24
+ // #import "KeypairCommand.js"
24
25
  'use strict';
25
26
 
26
27
  var options = {
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKit
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSIncludeDirectories:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKitTesting
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.AuthKit
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.CSSOM
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -21,7 +21,7 @@ JSClass("CHBarChart", CHCategoryChart, {
21
21
 
22
22
  initWithTheme: function(theme){
23
23
  CHBarChart.$super.initWithTheme.call(this, theme);
24
- this.categoryAxis.labelPosition = CHAxisStyle.LabelPosition.betweenTickMarks;
24
+ this.categoryAxis.style.labelPosition = CHAxisStyle.LabelPosition.betweenTickMarks;
25
25
  this.defaultSeriesStyle = theme.barStyle.styleWithColor(null);
26
26
  },
27
27
 
@@ -23,8 +23,6 @@ JSClass("CHStackedAreaChart", CHAreaChart, {
23
23
  CHStackedAreaChart.$super.initWithTheme.call(this, theme);
24
24
  },
25
25
 
26
- cornerRadius: 1,
27
-
28
26
  drawValuesInContext: function(context, rect){
29
27
  context.save();
30
28
  context.addRect(rect);
@@ -23,8 +23,6 @@ JSClass("CHStackedBarChart", CHBarChart, {
23
23
  CHStackedBarChart.$super.initWithTheme.call(this, theme);
24
24
  },
25
25
 
26
- cornerRadius: 1,
27
-
28
26
  drawValuesInContext: function(context, rect){
29
27
  context.save();
30
28
  context.addRect(rect);
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ChartKit
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2021 Breakside Inc.
6
6
  # JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ConferenceKit
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.DBKit
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.DOM
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Dispatch
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSCopyright: Copyright © 2020 Breakside Inc.
5
5
  JSBundleEnvironments:
6
6
  html: Dispatch+HTML.js
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.FontKit
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -75,16 +75,21 @@ var patterns = [chromeLikePattern, chromeMethodlessPattern, firefoxLikePattern,
75
75
  var frameFromLine = function(line){
76
76
  var matches;
77
77
  var pattern;
78
+ var frame;
78
79
  for (var i = 0, l = patterns.length; i < l; ++i){
79
80
  pattern = patterns[i];
80
81
  matches = line.match(pattern.regex);
81
82
  if (matches){
82
- return {
83
+ frame = {
83
84
  method: pattern.groups.method > 0 ? matches[pattern.groups.method] : '',
84
85
  filename: matches[pattern.groups.filename],
85
86
  lineno: parseInt(matches[pattern.groups.lineno]),
86
87
  colno: parseInt(matches[pattern.groups.colno])
87
88
  };
89
+ if (frame.filename && frame.filename[0] == "@"){
90
+ frame.filename = frame.filename.substr(1);
91
+ }
92
+ return frame;
88
93
  }
89
94
  }
90
95
  };
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Foundation
3
- JSBundleVersion: 2022.49.1
3
+ JSBundleVersion: 2022.52.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -15,6 +15,7 @@
15
15
 
16
16
  // #import "JSClass.js"
17
17
  // #import "JSValueTransformer.js"
18
+ // #import "Number+JS.js"
18
19
  /* global JSSpec */
19
20
  'use strict';
20
21
 
@@ -156,21 +157,21 @@ JSObject.definePropertiesFromExtensions({
156
157
  this._updateValueForBinding(context.binding);
157
158
  }else if (change.type == JSObject.KeyValueChange.Insertion){
158
159
  key = bindingInfo.binding;
159
- change.indexes.sort();
160
+ change.indexes.sort(Number.jskitCompare);
160
161
  for (i = 0, l = change.indexes.length; i < l; ++i){
161
162
  index = change.indexes[i];
162
163
  this.silentlyInsertObjectInKeyAtIndex(change.sourceObject.objectInKeyAtIndex(change.sourceKey, index), key, index);
163
164
  }
164
165
  }else if (change.type == JSObject.KeyValueChange.Removal){
165
166
  key = bindingInfo.binding;
166
- change.indexes.sort();
167
+ change.indexes.sort(Number.jskitCompare);
167
168
  for (i = change.indexes.length - 1; i >= 0; --i){
168
169
  index = change.indexes[i];
169
170
  this.silentlyRemoveObjectFromKeyAtIndex(key, index);
170
171
  }
171
172
  }else if (change.type == JSObject.KeyValueChange.Replacement){
172
173
  key = bindingInfo.binding;
173
- change.indexes.sort();
174
+ change.indexes.sort(Number.jskitCompare);
174
175
  for (i = 0, l = change.indexes.length; i < l; ++i){
175
176
  index = change.indexes[i];
176
177
  this.silentlyReplaceObjectInKeyAtIndexWithObject(key, index, change.sourceObject.objectInKeyAtIndex(change.sourceKey, index));
@@ -613,7 +614,7 @@ JSObject.definePropertiesFromExtensions({
613
614
  targetObject = targetObject.valueForKeyPath(keyParts.join('.'));
614
615
  }
615
616
  if (targetObject){
616
- indexes.sort();
617
+ indexes.sort(Number.jskitCompare);
617
618
  if (change == JSObject.KeyValueChange.Insertion){
618
619
  for (i = 0, l = indexes.length; i < l; ++i){
619
620
  index = indexes[i];
@@ -175,7 +175,7 @@ JSClass("JSTextFramesetter", JSObject, {
175
175
  attributes: JSReadOnlyProperty("_attributes", null),
176
176
 
177
177
  getAttributes: function(){
178
- logger.warn("JSTextFramesetter.attributes is deprecated");
178
+ logger.warn("JSTextFramesetter.attributes is deprecated, use JSTextFramesetter.defaultParagraphStyle");
179
179
  if (this._attributes === null){
180
180
  var framesetter = this;
181
181
  this._attributes = Object.create({}, {