@breakside/jskit 2022.24.0 → 2022.26.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 (61) 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/JSFileManager+Node.js +2 -2
  7. package/Frameworks/Foundation.jsframework/JS/JSURL.js +3 -0
  8. package/Frameworks/Foundation.jsframework/JS/JSZip.js +97 -76
  9. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  10. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  11. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  12. package/Info.json +2 -2
  13. package/Node/io.breakside.jskit-bundle.js +2 -2
  14. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  15. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  16. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  17. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  18. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  19. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  20. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  21. package/Root/Frameworks/DOM/Info.yaml +1 -1
  22. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  23. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  24. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  25. package/Root/Frameworks/Foundation/JSFileManager+Node.js +2 -2
  26. package/Root/Frameworks/Foundation/JSURL.js +3 -0
  27. package/Root/Frameworks/Foundation/JSZip.js +97 -76
  28. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  29. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  30. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  31. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  32. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  33. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  34. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  35. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  36. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  37. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  38. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  39. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  40. package/Root/Frameworks/UIKit/UIBasicAnimation.js +1 -1
  41. package/Root/Frameworks/UIKit/UICursor.js +19 -4
  42. package/Root/Frameworks/UIKit/UIHTMLApplication.js +53 -15
  43. package/Root/Frameworks/UIKit/UIHTMLDisplayServerCanvasContext.js +2 -48
  44. package/Root/Frameworks/UIKit/UIHTMLDisplayServerContext.js +0 -6
  45. package/Root/Frameworks/UIKit/UIHTMLDisplayServerSVGContext.js +6 -77
  46. package/Root/Frameworks/UIKit/UIHTMLTextField.js +9 -3
  47. package/Root/Frameworks/UIKit/UIHTMLTextTypesetter.js +2 -29
  48. package/Root/Frameworks/UIKit/UIHTMLWindowServer.js +6 -79
  49. package/Root/Frameworks/UIKit/UIImageLayer.js +14 -7
  50. package/Root/Frameworks/UIKit/UILabel.js +74 -1
  51. package/Root/Frameworks/UIKit/UIMouseTrackingArea.js +55 -0
  52. package/Root/Frameworks/UIKit/UIState.js +23 -0
  53. package/Root/Frameworks/UIKit/UITextEditor.js +277 -76
  54. package/Root/Frameworks/UIKit/UITextEditorDelegate.js +3 -1
  55. package/Root/Frameworks/UIKit/UITextLayer.js +1 -1
  56. package/Root/Frameworks/UIKit/UIView.js +118 -46
  57. package/Root/Frameworks/UIKit/UIViewController.js +6 -0
  58. package/Root/Frameworks/UIKit/UIWindow.js +89 -0
  59. package/Root/Frameworks/UIKit/UIWindowServer.js +20 -79
  60. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  61. 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.24.0",
4
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
12
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
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.24.0",
6
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
14
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
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.24.0",
4
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
11
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
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.24.0",
6
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
13
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
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.24.0",
4
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
12
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
13
13
  }
@@ -157,8 +157,8 @@ JSClass("JSNodeFileManager", JSFileManager, {
157
157
  if (!error){
158
158
  attrs = {
159
159
  itemType: JSFileManager.ItemType.fromStat(stats),
160
- created: Math.floor(stats.ctimeMs),
161
- modified: Math.floor(stats.mtimeMs),
160
+ created: Math.floor(stats.ctimeMs / 1000.0),
161
+ updated: Math.floor(stats.mtimeMs / 1000.0),
162
162
  size: stats.size
163
163
  };
164
164
  }
@@ -523,6 +523,9 @@ JSClass("JSURL", JSObject, {
523
523
  },
524
524
 
525
525
  isEqual: function(url){
526
+ if (url === null || url === undefined){
527
+ return false;
528
+ }
526
529
  if (this._scheme !== url._scheme){
527
530
  return false;
528
531
  }
@@ -1,6 +1,9 @@
1
1
  // #import "JSObject.js"
2
2
  // #import "Promise+JS.js"
3
3
  // #import "JSCRC32.js"
4
+ // #import "JSDate.js"
5
+ // #import "JSCalendar.js"
6
+ // #import "Deflate.js"
4
7
  "use strict";
5
8
 
6
9
  JSClass("JSZip", JSObject, {
@@ -14,61 +17,89 @@ JSClass("JSZip", JSObject, {
14
17
  offset: 0,
15
18
 
16
19
  addFile: function(file, completion, target){
20
+ return this.addFileInDirectory(file, "", {}, completion, target);
21
+ },
22
+
23
+ addFileInDirectory: function(file, directory, attributes, completion, target){
17
24
  if (!completion){
18
25
  completion = Promise.completion(Promise.resolveNull);
19
26
  }
27
+ if (directory.startsWith("/")){
28
+ directory = directory.substr(1);
29
+ }
30
+ if (directory.length > 1 && !directory.endsWith("/")){
31
+ directory = directory + "/";
32
+ }
20
33
  file.readData(function(data){
21
34
  if (data === null){
22
35
  completion.call(target, new Error("Failed to read file data"));
23
36
  return;
24
37
  }
25
- this.addDataForFilename(data, file.name, completion, target);
38
+ var error = null;
39
+ try{
40
+ this.addDataForFilename(data, directory + file.name, attributes);
41
+ }catch (e){
42
+ error = e;
43
+ }
44
+ completion.call(target, error);
26
45
  }, this);
27
46
  return completion.promise;
28
47
  },
29
48
 
30
- addDataForFilename: function(data, name, completion, target){
31
- if (!completion){
32
- completion = Promise.completion(Promise.resolveNull);
33
- }
34
- var error = null;
35
- try{
36
- var encodedName = name.utf8();
37
- var header = JSData.initWithLength(30 + encodedName.length);
38
- var dataView = header.dataView();
39
- var crc = JSCRC32(data);
40
- dataView.setUint32(0, 0x04034b50, true);
41
- dataView.setUint16(4, 20, true);
42
- dataView.setUint16(6, 0, true);
43
- dataView.setUint16(8, 0, true); // no compression
44
- dataView.setUint16(10, 0, true); // date
45
- dataView.setUint16(12, 0, true); // date
46
- dataView.setUint32(14, crc, true);
47
- dataView.setUint32(18, data.length, true);
48
- dataView.setUint32(22, data.length, true);
49
- dataView.setUint16(26, encodedName.length, true);
50
- dataView.setUint16(28, 0, true);
51
- encodedName.copyTo(header, 30);
52
- this.directory.push({
53
- name: name,
54
- offset: this.offset,
55
- header: header
56
- });
57
- this.addChunk(header);
58
- this.addChunk(data);
59
- }catch (e){
60
- error = e;
49
+ addDataForFilename: function(data, name, attributes, deflate){
50
+ var encodedName = name.utf8();
51
+ var header = JSData.initWithLength(30 + encodedName.length);
52
+ var dataView = header.dataView();
53
+ var crc = JSCRC32(data);
54
+ var dateComponents = JSCalendar.gregorian.componentsFromDate(JSCalendar.Unit.day | JSCalendar.Unit.month | JSCalendar.Unit.year | JSCalendar.Unit.hour | JSCalendar.Unit.minute | JSCalendar.Unit.second, attributes.updated !== undefined ? JSDate.initWithTimeIntervalSince1970(attributes.updated) : JSDate.now, JSTimeZone.local || JSTimeZone.utc);
55
+ var dosDate = ((dateComponents.year - 1980) << 9) | ((dateComponents.month) << 5) | (dateComponents.day);
56
+ var dosTime = ((dateComponents.hour) << 11) | ((dateComponents.minute) << 5) | (Math.floor(dateComponents.second / 2));
57
+ var storedData = data;
58
+ var method = 0;
59
+ if (deflate){
60
+ var stream = DeflateStream();
61
+ stream.input = data;
62
+ stream.output = JSData.initWithLength(data.length);
63
+ stream.deflate(true);
64
+ if (stream.state === DeflateStream.State.done){
65
+ storedData = stream.output.subdataInRange(JSRange(0, stream.outputOffset));
66
+ method = 8;
67
+ }
61
68
  }
62
- completion.call(target, error);
63
- return completion.promise;
69
+ // Local File Header (APPNOTE.txt 4.3.7)
70
+ // Everything is little-endian
71
+ dataView.setUint32(0, 0x04034b50, true); // signtature
72
+ dataView.setUint16(4, 0x0014, true); // version needed to extract (2.0)
73
+ dataView.setUint16(6, 0, true); // general purpose flags
74
+ dataView.setUint16(8, method, true); // compression method (0=none, 8=deflate)
75
+ dataView.setUint16(10, dosTime, true); // last modified time (MS-DOS)
76
+ dataView.setUint16(12, dosDate, true); // last modified date (MS-DOS)
77
+ dataView.setUint32(14, crc, true); // crc-32 (magic number 0xdebb20e3, preconditioned to 0xffffffff, post-conditioned by one's compliment)
78
+ dataView.setUint32(18, storedData.length, true); // compressed size
79
+ dataView.setUint32(22, data.length, true); // uncompressed size
80
+ dataView.setUint16(26, encodedName.length, true); // name length
81
+ dataView.setUint16(28, 0, true); // extra field length
82
+ encodedName.copyTo(header, 30); // name (NOT null-terminated)
83
+ this.directory.push({
84
+ name: name,
85
+ offset: this.offset,
86
+ header: header
87
+ });
88
+ this.chunks.push(header);
89
+ this.chunks.push(storedData);
90
+ this.offset += header.length + storedData.length;
91
+ this._data = null;
64
92
  },
65
93
 
66
- close: function(completion, target){
67
- if (!completion){
68
- completion = Promise.completion(Promise.resolveNull);
69
- }
70
- var error = null;
71
- try{
94
+ directory: null,
95
+
96
+ chunks: null,
97
+
98
+ data: JSReadOnlyProperty("_data", null),
99
+
100
+ getData: function(){
101
+ if (this._data === null){
102
+ var chunks = JSCopy(this.chunks);
72
103
  var i, l;
73
104
  var centralDirectoryOffset = this.offset;
74
105
  var centralDirectorySize = 0;
@@ -77,49 +108,39 @@ JSClass("JSZip", JSObject, {
77
108
  var dataView;
78
109
  var file;
79
110
  for (i = 0, l = this.directory.length; i < l; ++i){
111
+ // Central Directory File Header (APPNOTE.txt 4.3.12)
112
+ // Everything is little-endian
80
113
  file = this.directory[i];
81
114
  header = JSData.initWithLength(46 + (file.header.length - 30));
82
115
  dataView = header.dataView();
83
- dataView.setUint32(0, 0x02014b50, true);
84
- dataView.setUint16(4, 0, true);
85
- file.header.subdataInRange(JSRange(4, 26)).copyTo(header, 6);
86
- dataView.setUint16(32, 0, true);
87
- dataView.setUint16(34, 0, true);
88
- dataView.setUint16(36, 0, true);
89
- dataView.setUint32(38, 0, true);
90
- dataView.setUint32(42, file.offset, true);
91
- file.header.subdataInRange(JSRange(30, file.header.length - 30)).copyTo(header, 46);
116
+ dataView.setUint32(0, 0x02014b50, true); // signature
117
+ dataView.setUint16(4, 0x0314, true); // version made by (UNIX=3, 2.0)
118
+ file.header.subdataInRange(JSRange(4, 26)).copyTo(header, 6); // copy from local header
119
+ dataView.setUint16(32, 0, true); // commenet length
120
+ dataView.setUint16(34, 0, true); // disk number start
121
+ dataView.setUint16(36, 0, true); // internal file attributes
122
+ dataView.setUint32(38, 0, true); // external file attributes
123
+ dataView.setUint32(42, file.offset, true); // offset of local header relative to first disk
124
+ file.header.subdataInRange(JSRange(30, file.header.length - 30)).copyTo(header, 46); // name (ALWAYS forward slashes for directories)
92
125
  centralDirectorySize += header.length;
93
- this.addChunk(header);
126
+ chunks.push(header);
94
127
  }
128
+ // End of Central Directory Record (APPNOTE.txt 4.3.16)
129
+ // everything is little-endian
95
130
  var end = JSData.initWithLength(22);
96
131
  dataView = end.dataView();
97
- dataView.setUint32(0, 0x06054b50, true);
98
- dataView.setUint16(4, 0, true);
99
- dataView.setUint16(6, 0, true);
100
- dataView.setUint16(8, this.directory.length, true);
101
- dataView.setUint16(10, this.directory.length, true);
102
- dataView.setUint32(12, centralDirectorySize, true);
103
- dataView.setUint32(16, centralDirectoryOffset, true);
104
- dataView.setUint16(20, 0, true);
105
- this.addChunk(end);
106
- this._data = JSData.initWithChunks(this.chunks);
107
- }catch (e){
108
- error = e;
132
+ dataView.setUint32(0, 0x06054b50, true); // signature
133
+ dataView.setUint16(4, 0, true); // number of this disk
134
+ dataView.setUint16(6, 0, true); // number of the disk with the start of central directory
135
+ dataView.setUint16(8, this.directory.length, true); // number of central directory items on this disk
136
+ dataView.setUint16(10, this.directory.length, true); // number of central directory items total
137
+ dataView.setUint32(12, centralDirectorySize, true); // size of central directory
138
+ dataView.setUint32(16, centralDirectoryOffset, true); // offset to central directory with respect to starting disk
139
+ dataView.setUint16(20, 0, true); // zip file comemnt length
140
+ chunks.push(end);
141
+ this._data = JSData.initWithChunks(chunks);
109
142
  }
110
- completion.call(target, error);
111
- return completion.promise;
112
- },
113
-
114
- addChunk: function(chunk){
115
- this.chunks.push(chunk);
116
- this.offset += chunk.length;
117
- },
118
-
119
- directory: null,
120
-
121
- chunks: null,
122
-
123
- data: JSReadOnlyProperty("_data", null),
143
+ return this._data;
144
+ }
124
145
 
125
146
  });
@@ -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.24.0",
6
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
14
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
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.24.0",
4
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
12
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
13
13
  }
@@ -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.24.0",
6
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
14
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
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.24.0",
4
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
11
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
12
12
  }
@@ -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.24.0",
6
+ "JSBundleVersion": "2022.26.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": "384e6ac71d317262e4518508066ab61322409ba2"
13
+ "GitRevision": "3b75d216a80c0454a393c8c3ff93181ba854a6d5"
14
14
  },
15
15
  "Resources": [
16
16
  {
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKit
3
- JSBundleVersion: 2022.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.ChartKit
3
- JSBundleVersion: 2022.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.24.0
3
+ JSBundleVersion: 2022.26.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.Foundation
3
- JSBundleVersion: 2022.24.0
3
+ JSBundleVersion: 2022.26.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -157,8 +157,8 @@ JSClass("JSNodeFileManager", JSFileManager, {
157
157
  if (!error){
158
158
  attrs = {
159
159
  itemType: JSFileManager.ItemType.fromStat(stats),
160
- created: Math.floor(stats.ctimeMs),
161
- modified: Math.floor(stats.mtimeMs),
160
+ created: Math.floor(stats.ctimeMs / 1000.0),
161
+ updated: Math.floor(stats.mtimeMs / 1000.0),
162
162
  size: stats.size
163
163
  };
164
164
  }
@@ -523,6 +523,9 @@ JSClass("JSURL", JSObject, {
523
523
  },
524
524
 
525
525
  isEqual: function(url){
526
+ if (url === null || url === undefined){
527
+ return false;
528
+ }
526
529
  if (this._scheme !== url._scheme){
527
530
  return false;
528
531
  }