@breakside/jskit 2026.27.0 → 2026.29.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 (42) 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/JS/FNTOpenTypeFont.js +44 -25
  5. package/Frameworks/FontKit.jsframework/io.breakside.JSKit.FontKit-bundle.js +2 -2
  6. package/Frameworks/Foundation.jsframework/Info.json +2 -2
  7. package/Frameworks/Foundation.jsframework/JS/JSPath.js +0 -3
  8. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  9. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  10. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  11. package/Info.json +2 -2
  12. package/Node/LintCommand.js +75 -0
  13. package/Node/io.breakside.jskit-bundle.js +2 -2
  14. package/Node/jskit +1 -0
  15. package/Node/main.js +1 -0
  16. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  17. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  18. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  19. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  20. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  21. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  22. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  23. package/Root/Frameworks/DOM/Info.yaml +1 -1
  24. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  25. package/Root/Frameworks/FontKit/FNTOpenTypeFont.js +44 -25
  26. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  27. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  28. package/Root/Frameworks/Foundation/JSPath.js +0 -3
  29. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  30. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  31. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  32. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  33. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  34. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  35. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  36. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  37. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  38. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  39. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  40. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  41. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  42. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
4
- "JSBundleVersion": "2026.27.0",
4
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
12
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
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": "2026.27.0",
6
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
14
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
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": "2026.27.0",
4
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
11
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
12
12
  }
@@ -1958,43 +1958,62 @@ JSClass("FNTOpenTypeSimpleGlyph", FNTOpenTypeGlyph, {
1958
1958
  }
1959
1959
  var flags;
1960
1960
  var point;
1961
- var i, j, k;
1961
+ var i;
1962
1962
  var p0;
1963
1963
  var path = JSPath.init();
1964
1964
  var cp = null;
1965
- j = 0;
1965
+ var pointIndex;
1966
+ var startPointIndex;
1967
+ var endPointIndex;
1968
+ var pointCount;
1969
+ var pointCounter;
1966
1970
  var points = this.points;
1971
+ pointIndex = 0;
1967
1972
  for (i = 0; i < this.numberOfCountours; ++i){
1968
- flags = this.flags[j];
1969
- point = points[j];
1970
- p0 = point;
1971
- if ((flags & 0x01) === 0){
1972
- throw new Error("first point is off-curve");
1973
+ startPointIndex = pointIndex;
1974
+ endPointIndex = this.endPointIndexes[i];
1975
+ pointCount = endPointIndex - startPointIndex;
1976
+ // The specs aren't totally clear here, but some contours
1977
+ // start with a point that is off-curve. In order to draw
1978
+ // a path, we want to start with a `moveToPoint()` for a
1979
+ // point that is on-curve. Therefore, we'll loop until we
1980
+ // find the first on-curve point, and use it as our starting point.
1981
+ while (pointIndex <= endPointIndex && ((this.flags[pointIndex] & 0x01) === 0)){
1982
+ ++pointIndex;
1973
1983
  }
1974
- path.moveToPoint(point, transform);
1975
- ++j;
1976
- for (k = this.endPointIndexes[i]; j <= k; ++j){
1977
- flags = this.flags[j];
1978
- point = points[j];
1979
- if ((flags & 0x01) === 0){
1980
- if (cp !== null){
1981
- path.addQuadraticCurveToPoint(cp.interpolation(point, 0.5), cp, transform);
1984
+ if (pointIndex <= endPointIndex){
1985
+ flags = this.flags[pointIndex];
1986
+ point = points[pointIndex];
1987
+ p0 = point;
1988
+ path.moveToPoint(point, transform);
1989
+ ++pointIndex;
1990
+ for (pointCounter = 1; pointCounter <= pointCount; ++pointCounter, ++pointIndex){
1991
+ if (pointIndex > endPointIndex){
1992
+ pointIndex = startPointIndex;
1982
1993
  }
1983
- cp = point;
1984
- }else{
1985
- if (cp !== null){
1986
- path.addQuadraticCurveToPoint(point, cp, transform);
1994
+ flags = this.flags[pointIndex];
1995
+ point = points[pointIndex];
1996
+ if ((flags & 0x01) === 0){
1997
+ if (cp !== null){
1998
+ path.addQuadraticCurveToPoint(cp.interpolation(point, 0.5), cp, transform);
1999
+ }
2000
+ cp = point;
1987
2001
  }else{
1988
- path.addLineToPoint(point, transform);
2002
+ if (cp !== null){
2003
+ path.addQuadraticCurveToPoint(point, cp, transform);
2004
+ }else{
2005
+ path.addLineToPoint(point, transform);
2006
+ }
2007
+ cp = null;
1989
2008
  }
2009
+ }
2010
+ if (cp !== null){
2011
+ path.addQuadraticCurveToPoint(p0, cp, transform);
1990
2012
  cp = null;
1991
2013
  }
2014
+ path.closeSubpath();
1992
2015
  }
1993
- if (cp !== null){
1994
- path.addQuadraticCurveToPoint(p0, cp, transform);
1995
- cp = null;
1996
- }
1997
- path.closeSubpath();
2016
+ pointIndex = endPointIndex + 1;
1998
2017
  }
1999
2018
  return path;
2000
2019
  },
@@ -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": "2026.27.0",
6
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
13
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
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": "2026.27.0",
4
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
12
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
13
13
  }
@@ -571,9 +571,6 @@ JSClass("JSPath", JSObject, {
571
571
  }else{
572
572
  clockwise = endAngle - startAngle <= Math.PI;
573
573
  }
574
- if (Math.abs(t1.x - this._currentPoint.x) > 0.00001 || Math.abs(t1.y - this._currentPoint.y) > 0.00001){
575
- this.moveToPoint(t1);
576
- }
577
574
  this.addArc(center, radius, startAngle, endAngle, clockwise);
578
575
  },
579
576
 
@@ -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": "2026.27.0",
6
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
14
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
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": "2026.27.0",
4
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
12
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
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": "2026.27.0",
6
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
14
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
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": "2026.27.0",
4
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
11
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
12
12
  }
@@ -0,0 +1,75 @@
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 "Project.js"
18
+ 'use strict';
19
+
20
+ JSClass("LintCommand", Command, {
21
+
22
+ name: "lint",
23
+ help: "Lint a JavaScript file, with understanding of JSKit globals",
24
+
25
+ options: {
26
+ file: {kind: "positional", help: "The file to lint"},
27
+ },
28
+
29
+ run: async function(){
30
+ let filename = this.arguments.file;
31
+ let fileURL = null;
32
+ let project = null;
33
+ fileURL = this.fileManager.urlForPath(filename, this.workingDirectoryURL);
34
+ project = await Project.projectForFile(fileURL);
35
+ let data = await this.fileManager.contentsAtURL(fileURL);
36
+ let globals = await project.globals([fileURL], true);
37
+ globals.unshift("JSGlobalObject");
38
+ let config = await this.configForFileURL(fileURL);
39
+ if (!config.predef){
40
+ config.predef = [];
41
+ }
42
+ config.predef = config.predef.concat(globals);
43
+ const jshint = require("jshint");
44
+ jshint.JSHINT(data.stringByDecodingUTF8(), config);
45
+ if (jshint.JSHINT.errors.length > 0){
46
+ for (let error of jshint.JSHINT.errors){
47
+ let line = "%s: line %d, col %d, %s (%s)\n".sprintf(filename, error.line, error.character, error.reason, error.code);
48
+ process.stdout.write(line);
49
+ }
50
+ process.stdout.write("\n");
51
+ if (jshint.JSHINT.errors.length === 1){
52
+ process.stdout.write("1 errors\n");
53
+ }else{
54
+ process.stdout.write("%d errors\n".sprintf(jshint.JSHINT.errors.length));
55
+ }
56
+ process.exitCode = 2;
57
+ }
58
+ },
59
+
60
+ configForFileURL: async function(fileURL){
61
+ let folderURL = fileURL.removingLastPathComponent();
62
+ let configURL = folderURL.appendingPathComponent(".jshintrc");
63
+ let exists = await this.fileManager.itemExistsAtURL(configURL);
64
+ if (exists){
65
+ let data = await this.fileManager.contentsAtURL(configURL);
66
+ let config = JSON.parse(data.stringByDecodingUTF8());
67
+ return config;
68
+ }
69
+ if (folderURL.pathComponents.length > 1){
70
+ return await this.configForFileURL(folderURL);
71
+ }
72
+ return {};
73
+ },
74
+
75
+ });
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.jskit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "node",
5
5
  "JSBundleIdentifier": "io.breakside.jskit",
6
- "JSBundleVersion": "2026.27.0",
6
+ "JSBundleVersion": "2026.29.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": "f25bf439a7b48f4536a7f4a44d2f1ec39c46208d"
13
+ "GitRevision": "bc39d23f46fe859bd278d5d0c46c6174fd41303f"
14
14
  },
15
15
  "Resources": [
16
16
  {
package/Node/jskit CHANGED
@@ -223,6 +223,7 @@ require("./DocCommand.js");
223
223
  require("./GlobalsCommand.js");
224
224
  require("./KeyCommand.js");
225
225
  require("./KeypairCommand.js");
226
+ require("./LintCommand.js");
226
227
  var entry = require("./main.js").main;
227
228
 
228
229
  var path = require("path");
package/Node/main.js CHANGED
@@ -22,6 +22,7 @@
22
22
  // #import "GlobalsCommand.js"
23
23
  // #import "KeyCommand.js"
24
24
  // #import "KeypairCommand.js"
25
+ // #import "LintCommand.js"
25
26
  'use strict';
26
27
 
27
28
  var options = {
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.0
4
4
  JSCopyright: Copyright © 2020 Breakside Inc.
5
5
  JSBundleEnvironments:
6
6
  html: Dispatch+HTML.js
@@ -1958,43 +1958,62 @@ JSClass("FNTOpenTypeSimpleGlyph", FNTOpenTypeGlyph, {
1958
1958
  }
1959
1959
  var flags;
1960
1960
  var point;
1961
- var i, j, k;
1961
+ var i;
1962
1962
  var p0;
1963
1963
  var path = JSPath.init();
1964
1964
  var cp = null;
1965
- j = 0;
1965
+ var pointIndex;
1966
+ var startPointIndex;
1967
+ var endPointIndex;
1968
+ var pointCount;
1969
+ var pointCounter;
1966
1970
  var points = this.points;
1971
+ pointIndex = 0;
1967
1972
  for (i = 0; i < this.numberOfCountours; ++i){
1968
- flags = this.flags[j];
1969
- point = points[j];
1970
- p0 = point;
1971
- if ((flags & 0x01) === 0){
1972
- throw new Error("first point is off-curve");
1973
+ startPointIndex = pointIndex;
1974
+ endPointIndex = this.endPointIndexes[i];
1975
+ pointCount = endPointIndex - startPointIndex;
1976
+ // The specs aren't totally clear here, but some contours
1977
+ // start with a point that is off-curve. In order to draw
1978
+ // a path, we want to start with a `moveToPoint()` for a
1979
+ // point that is on-curve. Therefore, we'll loop until we
1980
+ // find the first on-curve point, and use it as our starting point.
1981
+ while (pointIndex <= endPointIndex && ((this.flags[pointIndex] & 0x01) === 0)){
1982
+ ++pointIndex;
1973
1983
  }
1974
- path.moveToPoint(point, transform);
1975
- ++j;
1976
- for (k = this.endPointIndexes[i]; j <= k; ++j){
1977
- flags = this.flags[j];
1978
- point = points[j];
1979
- if ((flags & 0x01) === 0){
1980
- if (cp !== null){
1981
- path.addQuadraticCurveToPoint(cp.interpolation(point, 0.5), cp, transform);
1984
+ if (pointIndex <= endPointIndex){
1985
+ flags = this.flags[pointIndex];
1986
+ point = points[pointIndex];
1987
+ p0 = point;
1988
+ path.moveToPoint(point, transform);
1989
+ ++pointIndex;
1990
+ for (pointCounter = 1; pointCounter <= pointCount; ++pointCounter, ++pointIndex){
1991
+ if (pointIndex > endPointIndex){
1992
+ pointIndex = startPointIndex;
1982
1993
  }
1983
- cp = point;
1984
- }else{
1985
- if (cp !== null){
1986
- path.addQuadraticCurveToPoint(point, cp, transform);
1994
+ flags = this.flags[pointIndex];
1995
+ point = points[pointIndex];
1996
+ if ((flags & 0x01) === 0){
1997
+ if (cp !== null){
1998
+ path.addQuadraticCurveToPoint(cp.interpolation(point, 0.5), cp, transform);
1999
+ }
2000
+ cp = point;
1987
2001
  }else{
1988
- path.addLineToPoint(point, transform);
2002
+ if (cp !== null){
2003
+ path.addQuadraticCurveToPoint(point, cp, transform);
2004
+ }else{
2005
+ path.addLineToPoint(point, transform);
2006
+ }
2007
+ cp = null;
1989
2008
  }
2009
+ }
2010
+ if (cp !== null){
2011
+ path.addQuadraticCurveToPoint(p0, cp, transform);
1990
2012
  cp = null;
1991
2013
  }
2014
+ path.closeSubpath();
1992
2015
  }
1993
- if (cp !== null){
1994
- path.addQuadraticCurveToPoint(p0, cp, transform);
1995
- cp = null;
1996
- }
1997
- path.closeSubpath();
2016
+ pointIndex = endPointIndex + 1;
1998
2017
  }
1999
2018
  return path;
2000
2019
  },
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.FontKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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: 2026.27.0
3
+ JSBundleVersion: 2026.29.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -571,9 +571,6 @@ JSClass("JSPath", JSObject, {
571
571
  }else{
572
572
  clockwise = endAngle - startAngle <= Math.PI;
573
573
  }
574
- if (Math.abs(t1.x - this._currentPoint.x) > 0.00001 || Math.abs(t1.y - this._currentPoint.y) > 0.00001){
575
- this.moveToPoint(t1);
576
- }
577
574
  this.addArc(center, radius, startAngle, endAngle, clockwise);
578
575
  },
579
576
 
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ImageKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.MediaKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.MediaKitUI
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.NotificationKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.PDFKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.QRKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.SearchKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.SecurityKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.ServerKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.ServerKitTesting
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.TestKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.UIKit
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.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.UIKitTesting
3
- JSBundleVersion: 2026.27.0
3
+ JSBundleVersion: 2026.29.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "node": ">=10.10.0"
13
13
  },
14
14
  "name": "@breakside/jskit",
15
- "version": "2026.27.0",
15
+ "version": "2026.29.0",
16
16
  "license": "SEE LICENSE IN LICENSE.txt",
17
17
  "files": [
18
18
  "*"