node-red-contrib-web-worldmap 5.1.4 → 5.1.6

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 (248) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +5 -3
  3. package/examples/Moving Icons Demo & Builder.json +2 -2
  4. package/node-red-contrib-web-worldmap-5.1.6.tgz +0 -0
  5. package/node_modules/@types/geojson/README.md +1 -1
  6. package/node_modules/@types/geojson/index.d.ts +36 -2
  7. package/node_modules/@types/geojson/package.json +2 -2
  8. package/node_modules/{call-bind → call-bind-apply-helpers}/.eslintrc +1 -0
  9. package/node_modules/{has-property-descriptors → call-bind-apply-helpers}/.github/FUNDING.yml +1 -1
  10. package/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
  11. package/node_modules/{call-bind → call-bind-apply-helpers}/LICENSE +1 -1
  12. package/node_modules/call-bind-apply-helpers/README.md +62 -0
  13. package/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
  14. package/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
  15. package/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
  16. package/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
  17. package/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
  18. package/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
  19. package/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
  20. package/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
  21. package/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
  22. package/node_modules/call-bind-apply-helpers/index.js +15 -0
  23. package/node_modules/call-bind-apply-helpers/package.json +85 -0
  24. package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
  25. package/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
  26. package/node_modules/call-bind-apply-helpers/test/index.js +63 -0
  27. package/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
  28. package/node_modules/call-bound/.eslintrc +13 -0
  29. package/node_modules/{call-bind → call-bound}/.github/FUNDING.yml +1 -1
  30. package/node_modules/call-bound/CHANGELOG.md +42 -0
  31. package/node_modules/{has-property-descriptors → call-bound}/LICENSE +1 -1
  32. package/node_modules/call-bound/README.md +53 -0
  33. package/node_modules/call-bound/index.d.ts +94 -0
  34. package/node_modules/call-bound/index.js +19 -0
  35. package/node_modules/{call-bind → call-bound}/package.json +29 -25
  36. package/node_modules/{call-bind/test/callBound.js → call-bound/test/index.js} +12 -5
  37. package/node_modules/call-bound/tsconfig.json +10 -0
  38. package/node_modules/compression/HISTORY.md +9 -1
  39. package/node_modules/compression/README.md +103 -30
  40. package/node_modules/compression/index.js +55 -13
  41. package/node_modules/compression/package.json +3 -2
  42. package/node_modules/{define-data-property → dunder-proto}/.github/FUNDING.yml +1 -1
  43. package/node_modules/dunder-proto/CHANGELOG.md +24 -0
  44. package/node_modules/dunder-proto/LICENSE +21 -0
  45. package/node_modules/dunder-proto/README.md +54 -0
  46. package/node_modules/dunder-proto/get.d.ts +5 -0
  47. package/node_modules/dunder-proto/get.js +30 -0
  48. package/node_modules/{has-proto → dunder-proto}/package.json +34 -36
  49. package/node_modules/dunder-proto/set.d.ts +5 -0
  50. package/node_modules/dunder-proto/set.js +35 -0
  51. package/node_modules/dunder-proto/test/get.js +34 -0
  52. package/node_modules/dunder-proto/test/index.js +4 -0
  53. package/node_modules/dunder-proto/test/set.js +50 -0
  54. package/node_modules/dunder-proto/tsconfig.json +9 -0
  55. package/node_modules/es-define-property/CHANGELOG.md +14 -0
  56. package/node_modules/es-define-property/index.js +1 -3
  57. package/node_modules/es-define-property/package.json +12 -12
  58. package/node_modules/es-define-property/test/index.js +1 -0
  59. package/node_modules/es-define-property/tsconfig.json +2 -42
  60. package/node_modules/es-object-atoms/.eslintrc +16 -0
  61. package/node_modules/{set-function-length → es-object-atoms}/.github/FUNDING.yml +1 -1
  62. package/node_modules/es-object-atoms/CHANGELOG.md +37 -0
  63. package/node_modules/{define-data-property → es-object-atoms}/LICENSE +1 -1
  64. package/node_modules/es-object-atoms/README.md +63 -0
  65. package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
  66. package/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
  67. package/node_modules/es-object-atoms/ToObject.d.ts +7 -0
  68. package/node_modules/es-object-atoms/ToObject.js +10 -0
  69. package/node_modules/es-object-atoms/index.d.ts +3 -0
  70. package/node_modules/es-object-atoms/index.js +4 -0
  71. package/node_modules/es-object-atoms/isObject.d.ts +3 -0
  72. package/node_modules/es-object-atoms/isObject.js +6 -0
  73. package/node_modules/es-object-atoms/package.json +80 -0
  74. package/node_modules/es-object-atoms/test/index.js +38 -0
  75. package/node_modules/es-object-atoms/tsconfig.json +6 -0
  76. package/node_modules/get-intrinsic/.eslintrc +4 -0
  77. package/node_modules/get-intrinsic/CHANGELOG.md +43 -0
  78. package/node_modules/get-intrinsic/index.js +40 -21
  79. package/node_modules/get-intrinsic/package.json +24 -20
  80. package/node_modules/get-intrinsic/test/GetIntrinsic.js +2 -2
  81. package/node_modules/get-proto/.eslintrc +10 -0
  82. package/node_modules/{has-proto → get-proto}/.github/FUNDING.yml +1 -1
  83. package/node_modules/get-proto/.nycrc +9 -0
  84. package/node_modules/get-proto/CHANGELOG.md +21 -0
  85. package/node_modules/{has-proto → get-proto}/LICENSE +1 -1
  86. package/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
  87. package/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
  88. package/node_modules/get-proto/README.md +50 -0
  89. package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
  90. package/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
  91. package/node_modules/get-proto/index.d.ts +5 -0
  92. package/node_modules/get-proto/index.js +27 -0
  93. package/node_modules/{has-property-descriptors → get-proto}/package.json +35 -31
  94. package/node_modules/get-proto/test/index.js +68 -0
  95. package/node_modules/get-proto/tsconfig.json +9 -0
  96. package/node_modules/gopd/CHANGELOG.md +20 -0
  97. package/node_modules/gopd/gOPD.d.ts +1 -0
  98. package/node_modules/gopd/gOPD.js +4 -0
  99. package/node_modules/gopd/index.d.ts +5 -0
  100. package/node_modules/gopd/index.js +2 -3
  101. package/node_modules/gopd/package.json +16 -10
  102. package/node_modules/gopd/test/index.js +2 -1
  103. package/node_modules/has-symbols/CHANGELOG.md +16 -0
  104. package/node_modules/has-symbols/index.d.ts +3 -0
  105. package/node_modules/has-symbols/index.js +1 -0
  106. package/node_modules/has-symbols/package.json +19 -9
  107. package/node_modules/has-symbols/shams.d.ts +3 -0
  108. package/node_modules/has-symbols/shams.js +5 -2
  109. package/node_modules/has-symbols/test/shams/core-js.js +1 -0
  110. package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +1 -0
  111. package/node_modules/has-symbols/test/tests.js +4 -2
  112. package/node_modules/has-symbols/tsconfig.json +10 -0
  113. package/node_modules/http-parser-js/http-parser.d.ts +6 -0
  114. package/node_modules/http-parser-js/http-parser.js +16 -9
  115. package/node_modules/http-parser-js/package.json +1 -1
  116. package/node_modules/math-intrinsics/.eslintrc +16 -0
  117. package/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
  118. package/node_modules/math-intrinsics/CHANGELOG.md +24 -0
  119. package/node_modules/math-intrinsics/LICENSE +21 -0
  120. package/node_modules/math-intrinsics/README.md +50 -0
  121. package/node_modules/math-intrinsics/abs.d.ts +1 -0
  122. package/node_modules/math-intrinsics/abs.js +4 -0
  123. package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
  124. package/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
  125. package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
  126. package/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
  127. package/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
  128. package/node_modules/math-intrinsics/constants/maxValue.js +5 -0
  129. package/node_modules/math-intrinsics/floor.d.ts +1 -0
  130. package/node_modules/math-intrinsics/floor.js +4 -0
  131. package/node_modules/math-intrinsics/isFinite.d.ts +3 -0
  132. package/node_modules/math-intrinsics/isFinite.js +12 -0
  133. package/node_modules/math-intrinsics/isInteger.d.ts +3 -0
  134. package/node_modules/math-intrinsics/isInteger.js +16 -0
  135. package/node_modules/math-intrinsics/isNaN.d.ts +1 -0
  136. package/node_modules/math-intrinsics/isNaN.js +6 -0
  137. package/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
  138. package/node_modules/math-intrinsics/isNegativeZero.js +6 -0
  139. package/node_modules/math-intrinsics/max.d.ts +1 -0
  140. package/node_modules/math-intrinsics/max.js +4 -0
  141. package/node_modules/math-intrinsics/min.d.ts +1 -0
  142. package/node_modules/math-intrinsics/min.js +4 -0
  143. package/node_modules/math-intrinsics/mod.d.ts +3 -0
  144. package/node_modules/math-intrinsics/mod.js +9 -0
  145. package/node_modules/math-intrinsics/package.json +86 -0
  146. package/node_modules/math-intrinsics/pow.d.ts +1 -0
  147. package/node_modules/math-intrinsics/pow.js +4 -0
  148. package/node_modules/math-intrinsics/round.d.ts +1 -0
  149. package/node_modules/math-intrinsics/round.js +4 -0
  150. package/node_modules/math-intrinsics/sign.d.ts +3 -0
  151. package/node_modules/math-intrinsics/sign.js +11 -0
  152. package/node_modules/math-intrinsics/test/index.js +192 -0
  153. package/node_modules/math-intrinsics/tsconfig.json +3 -0
  154. package/node_modules/mime-db/HISTORY.md +21 -1
  155. package/node_modules/mime-db/README.md +7 -1
  156. package/node_modules/mime-db/db.json +252 -13
  157. package/node_modules/mime-db/package.json +4 -4
  158. package/node_modules/object-inspect/CHANGELOG.md +8 -0
  159. package/node_modules/object-inspect/index.js +10 -7
  160. package/node_modules/object-inspect/package.json +5 -4
  161. package/node_modules/object-inspect/test/values.js +50 -0
  162. package/node_modules/side-channel/.eslintrc +1 -0
  163. package/node_modules/side-channel/CHANGELOG.md +15 -0
  164. package/node_modules/side-channel/README.md +60 -1
  165. package/node_modules/side-channel/index.d.ts +9 -22
  166. package/node_modules/side-channel/index.js +20 -106
  167. package/node_modules/side-channel/package.json +20 -19
  168. package/node_modules/side-channel/test/index.js +76 -55
  169. package/node_modules/side-channel/tsconfig.json +2 -43
  170. package/node_modules/side-channel-list/.editorconfig +9 -0
  171. package/node_modules/side-channel-list/.eslintrc +11 -0
  172. package/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
  173. package/node_modules/side-channel-list/CHANGELOG.md +15 -0
  174. package/node_modules/side-channel-list/LICENSE +21 -0
  175. package/node_modules/side-channel-list/README.md +62 -0
  176. package/node_modules/side-channel-list/index.d.ts +13 -0
  177. package/node_modules/side-channel-list/index.js +113 -0
  178. package/node_modules/side-channel-list/list.d.ts +14 -0
  179. package/node_modules/side-channel-list/package.json +77 -0
  180. package/node_modules/side-channel-list/test/index.js +104 -0
  181. package/node_modules/side-channel-list/tsconfig.json +9 -0
  182. package/node_modules/side-channel-map/.editorconfig +9 -0
  183. package/node_modules/side-channel-map/.eslintrc +11 -0
  184. package/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
  185. package/node_modules/side-channel-map/.nycrc +13 -0
  186. package/node_modules/side-channel-map/CHANGELOG.md +22 -0
  187. package/node_modules/side-channel-map/LICENSE +21 -0
  188. package/node_modules/side-channel-map/README.md +62 -0
  189. package/node_modules/side-channel-map/index.d.ts +15 -0
  190. package/node_modules/side-channel-map/index.js +68 -0
  191. package/node_modules/side-channel-map/package.json +80 -0
  192. package/node_modules/side-channel-map/test/index.js +114 -0
  193. package/node_modules/side-channel-map/tsconfig.json +9 -0
  194. package/node_modules/side-channel-weakmap/.editorconfig +9 -0
  195. package/node_modules/side-channel-weakmap/.eslintrc +12 -0
  196. package/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
  197. package/node_modules/side-channel-weakmap/.nycrc +13 -0
  198. package/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
  199. package/node_modules/side-channel-weakmap/LICENSE +21 -0
  200. package/node_modules/side-channel-weakmap/README.md +62 -0
  201. package/node_modules/side-channel-weakmap/index.d.ts +15 -0
  202. package/node_modules/side-channel-weakmap/index.js +84 -0
  203. package/node_modules/side-channel-weakmap/package.json +87 -0
  204. package/node_modules/side-channel-weakmap/test/index.js +114 -0
  205. package/node_modules/side-channel-weakmap/tsconfig.json +9 -0
  206. package/package.json +2 -2
  207. package/worldmap/worldmap.js +18 -13
  208. package/worldmap.html +2 -2
  209. package/node_modules/call-bind/.eslintignore +0 -1
  210. package/node_modules/call-bind/CHANGELOG.md +0 -93
  211. package/node_modules/call-bind/README.md +0 -64
  212. package/node_modules/call-bind/callBound.js +0 -15
  213. package/node_modules/call-bind/index.js +0 -35
  214. package/node_modules/call-bind/test/index.js +0 -80
  215. package/node_modules/define-data-property/.eslintrc +0 -24
  216. package/node_modules/define-data-property/CHANGELOG.md +0 -70
  217. package/node_modules/define-data-property/README.md +0 -67
  218. package/node_modules/define-data-property/index.d.ts +0 -12
  219. package/node_modules/define-data-property/index.js +0 -56
  220. package/node_modules/define-data-property/package.json +0 -106
  221. package/node_modules/define-data-property/test/index.js +0 -392
  222. package/node_modules/define-data-property/tsconfig.json +0 -59
  223. package/node_modules/has-property-descriptors/.eslintrc +0 -13
  224. package/node_modules/has-property-descriptors/CHANGELOG.md +0 -35
  225. package/node_modules/has-property-descriptors/README.md +0 -43
  226. package/node_modules/has-property-descriptors/index.js +0 -22
  227. package/node_modules/has-property-descriptors/test/index.js +0 -57
  228. package/node_modules/has-proto/CHANGELOG.md +0 -38
  229. package/node_modules/has-proto/README.md +0 -38
  230. package/node_modules/has-proto/index.d.ts +0 -3
  231. package/node_modules/has-proto/index.js +0 -15
  232. package/node_modules/has-proto/test/index.js +0 -19
  233. package/node_modules/has-proto/tsconfig.json +0 -49
  234. package/node_modules/set-function-length/.eslintrc +0 -27
  235. package/node_modules/set-function-length/CHANGELOG.md +0 -70
  236. package/node_modules/set-function-length/LICENSE +0 -21
  237. package/node_modules/set-function-length/README.md +0 -56
  238. package/node_modules/set-function-length/env.d.ts +0 -9
  239. package/node_modules/set-function-length/env.js +0 -25
  240. package/node_modules/set-function-length/index.d.ts +0 -7
  241. package/node_modules/set-function-length/index.js +0 -42
  242. package/node_modules/set-function-length/package.json +0 -102
  243. /package/node_modules/{call-bind → call-bind-apply-helpers}/.nycrc +0 -0
  244. /package/node_modules/{has-property-descriptors → call-bound}/.nycrc +0 -0
  245. /package/node_modules/{has-proto → dunder-proto}/.eslintrc +0 -0
  246. /package/node_modules/{define-data-property → dunder-proto}/.nycrc +0 -0
  247. /package/node_modules/{set-function-length → gopd}/tsconfig.json +0 -0
  248. /package/node_modules/{set-function-length → side-channel-list}/.nycrc +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,7 @@
1
1
  ### Change Log for Node-RED Worldmap
2
2
 
3
+ - v5.1.6 - Let Cot __milsym set the SIDC if present.
4
+ - v5.1.5 - Fix links to SIDC unitgenerator so it is now local.
3
5
  - v5.1.4 - Fix clearlayer for tracks node.
4
6
  - v5.1.2 - Fix for longer line msg properties.
5
7
  - v5.1.1 - Fix CoT inline image.
package/README.md CHANGED
@@ -13,6 +13,8 @@ Feel free to [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%
13
13
 
14
14
  ### Updates
15
15
 
16
+ - v5.1.6 - Let Cot __milsym set the SIDC if present.
17
+ - v5.1.5 - Fix links to SIDC unitgenerator so it is now local.
16
18
  - v5.1.4 - Fix clearlayer for tracks node.
17
19
  - v5.1.2 - Fix for longer line msg properties.
18
20
  - v5.1.1 - Fix CoT inline image.
@@ -130,7 +132,7 @@ To do this you need to supply a `msg.payload.SIDC` 2525 code instead of an icon,
130
132
  "options": { "fillOpacity":0.8, "additionalInformation":"Extra info" }
131
133
  }
132
134
 
133
- SIDC codes can be generated using the online tool - https://www.spatialillusions.com/unitgenerator-legacy/
135
+ SIDC codes can be generated using the built-in unitgenerator tool.
134
136
 
135
137
  There are lots of extra options you can specify as `msg.payload.options` - see the <a href="https://spatialillusions.com/milsymbol/documentation.html" target="mapinfo">milsymbol docs here</a>.
136
138
 
@@ -418,8 +420,8 @@ You can also use the name "none" to completely remove the base layer,
418
420
 
419
421
  #### To clear all markers from a layer, or an overlay from the map
420
422
 
421
- msg.payload = { "command": { "clearlayer: "name of the layer/overlay you wish to clear" }};
422
- msg.payload = { "command": { "clearlayer: ["array","ofLayer","names","toClear"] }};
423
+ msg.payload = { "command": { "clearlayer": "name of the layer/overlay you wish to clear" }};
424
+ msg.payload = { "command": { "clearlayer": ["array","ofLayer","names","toClear"] }};
423
425
 
424
426
  Feeding this into the tracks node will also remove the tracks stored for that layer.
425
427
 
@@ -563,7 +563,7 @@
563
563
  "fieldType": "msg",
564
564
  "format": "html",
565
565
  "syntax": "mustache",
566
- "template": "<b>Update Object Properties</b><br/><br/>\n<table id='addTable' style=\"width:100%;\">\n<tr><td>Layer</td><td><input type='text' id='inLay' placeholder='unknown' value='{{menu.layer}}' /></td></tr>\n<tr><td>Draggable</td><td><input type='checkbox' id='inDrag' name='inDrag' {{menu.drag}}></td></tr>\n<tr><td>Track</td><td><input type='text' id='inTrack' value='{{menu.track}}' /></td></tr>\n<tr><td>Speed</td><td><input type='text' id='inSpeed' value='{{menu.speed}}' /></td></tr>\n<tr><td>Alt</td><td><input type='text' id='inAlt' value='{{menu.alt}}' /></td></tr>\n<tr><td>Lat</td><td><input type='text' id='inLat' value='{{menu.lat}}' /></td></tr>\n<tr><td>Lon</td><td><input type='text' id='inLon' value='{{menu.lon}}'/></td></tr>\n<tr><td>Label</td><td><input type='text' id='inLabel' value='{{menu.label}}' /></td></tr>\n<tr><td><a href=\"https://www.spatialillusions.com/unitgenerator-legacy/\" target=\"_blank\">SIDC</a></td>\n<td><input type='text' id='inSIDC' value='{{menu.SIDC}}' /></td></tr>\n<tr><td>SIDC Options</td><td><input type='text' id='inOptions' value='{{menu.options}}' /></td></tr>\n<tr><td>Icon Category</td><td>{{{menu.categories}}}</td></tr>\n<tr><td>Icon</td><td>{{{menu.icons}}}</td></tr>\n<tr>\n <td>iconSize</td>\n <td><input type='text' id='inSize' value='{{menu.iconSize}}' /></td>\n</tr>\n<tr><td>iconColor</td><td><input type='text' id='inColor' value='{{menu.iconColor}}' /></td></tr>\n<tr><td>toolTip</td><td><input type='text' id='inTool' value='{{menu.tooltip}}' /></td></tr>\n<tr><td>Payload</td><td><div id='payload'></div></td></tr>\n<tr><td></td><td><button id='addIcon' type='button' onclick=\n 'let _lat = document.getElementById(\"inLat\").value; _lat = parseFloat((_lat === \"\") ? rclk.lat.toFixed(6) : _lat);\n let _lon = document.getElementById(\"inLon\").value; _lon = parseFloat((_lon === \"\") ? rclk.lng.toFixed(6) : _lon);\n let _lay = document.getElementById(\"inLay\").value;\n let _drag = document.getElementById(\"inDrag\").checked;\n let _track = document.getElementById(\"inTrack\").value; _track = parseFloat((_track === \"\") ? 0 : _track);\n let _speed = document.getElementById(\"inSpeed\").value; _speed = parseFloat((_speed === \"\") ? 0 : _speed);\n let _alt = document.getElementById(\"inAlt\").value; _alt = parseFloat((_alt === \"\") ? 0 : _alt);\n let _icon = document.getElementById(\"iconsSelect\").value; _icon = (_icon === \"\") ? \"uav\" : _icon;\n let _label = document.getElementById(\"inLabel\").value || \"\";\n let _size = document.getElementById(\"inSize\").value || 32;\n let _color = document.getElementById(\"inColor\").value || \"\";\n let _tool = document.getElementById(\"inTool\").value;\n let _sidc = document.getElementById(\"inSIDC\").value;\n let _sidcOptions;\n try {_sidcOptions = JSON.parse(document.getElementById(\"inOptions\").value);} catch(e) {_sidcOptions = \"\";}\n _sidcOptions = (_sidc === \"\") ? \"\" : _sidcOptions;\n for (let key in _sidcOptions) {if ((_sidcOptions[key] === \"\") || (_sidcOptions[key] === 0)) {delete _sidcOptions[key];}}\n _sidcOptions = (Object.keys(_sidcOptions).length === 0 ) ? \"\" : _sidcOptions;\n _icon = (_sidc !== \"\") ? \"\" : _icon;\n let _fbData = {\"layer\": _lay,\"draggable\": _drag,\"track\":_track,\"speed\":_speed,\"alt\":_alt,\"lat\":_lat,\"lon\":_lon,\"icon\":_icon,\"iconSize\":_size,\"iconColor\":_color,\"tooltip\":_tool,\"label\":_label,\"SIDC\":_sidc,\"options\":_sidcOptions};\n for (let key in _fbData) {if (_fbData[key] === \"\") {delete _fbData[key];}}\n document.getElementById(\"payload\").innerHTML = JSON.stringify({\"name\" :\"{{payload.name}}\", ..._fbData},null,2);\n feedback(\"{{payload.name}}\",_fbData,\"updateObject\",false);'\n style='width: 100% !important;'>Update Object Data</button></td></tr>\n<tr><td></td><td><button id='addIcon' type='button' style='width:100%;background-color: red; color: white;' onclick='feedback(\"{{payload.name}}\",\"\",\"drawdelete\",true);'>Delete Object</button></td></tr>\n</table>",
566
+ "template": "<b>Update Object Properties</b><br/><br/>\n<table id='addTable' style=\"width:100%;\">\n<tr><td>Layer</td><td><input type='text' id='inLay' placeholder='unknown' value='{{menu.layer}}' /></td></tr>\n<tr><td>Draggable</td><td><input type='checkbox' id='inDrag' name='inDrag' {{menu.drag}}></td></tr>\n<tr><td>Track</td><td><input type='text' id='inTrack' value='{{menu.track}}' /></td></tr>\n<tr><td>Speed</td><td><input type='text' id='inSpeed' value='{{menu.speed}}' /></td></tr>\n<tr><td>Alt</td><td><input type='text' id='inAlt' value='{{menu.alt}}' /></td></tr>\n<tr><td>Lat</td><td><input type='text' id='inLat' value='{{menu.lat}}' /></td></tr>\n<tr><td>Lon</td><td><input type='text' id='inLon' value='{{menu.lon}}'/></td></tr>\n<tr><td>Label</td><td><input type='text' id='inLabel' value='{{menu.label}}' /></td></tr>\n<tr><td><a href=\"worldmap/unitgenerator.html\" target=\"_blank\">SIDC</a></td>\n<td><input type='text' id='inSIDC' value='{{menu.SIDC}}' /></td></tr>\n<tr><td>SIDC Options</td><td><input type='text' id='inOptions' value='{{menu.options}}' /></td></tr>\n<tr><td>Icon Category</td><td>{{{menu.categories}}}</td></tr>\n<tr><td>Icon</td><td>{{{menu.icons}}}</td></tr>\n<tr>\n <td>iconSize</td>\n <td><input type='text' id='inSize' value='{{menu.iconSize}}' /></td>\n</tr>\n<tr><td>iconColor</td><td><input type='text' id='inColor' value='{{menu.iconColor}}' /></td></tr>\n<tr><td>toolTip</td><td><input type='text' id='inTool' value='{{menu.tooltip}}' /></td></tr>\n<tr><td>Payload</td><td><div id='payload'></div></td></tr>\n<tr><td></td><td><button id='addIcon' type='button' onclick=\n 'let _lat = document.getElementById(\"inLat\").value; _lat = parseFloat((_lat === \"\") ? rclk.lat.toFixed(6) : _lat);\n let _lon = document.getElementById(\"inLon\").value; _lon = parseFloat((_lon === \"\") ? rclk.lng.toFixed(6) : _lon);\n let _lay = document.getElementById(\"inLay\").value;\n let _drag = document.getElementById(\"inDrag\").checked;\n let _track = document.getElementById(\"inTrack\").value; _track = parseFloat((_track === \"\") ? 0 : _track);\n let _speed = document.getElementById(\"inSpeed\").value; _speed = parseFloat((_speed === \"\") ? 0 : _speed);\n let _alt = document.getElementById(\"inAlt\").value; _alt = parseFloat((_alt === \"\") ? 0 : _alt);\n let _icon = document.getElementById(\"iconsSelect\").value; _icon = (_icon === \"\") ? \"uav\" : _icon;\n let _label = document.getElementById(\"inLabel\").value || \"\";\n let _size = document.getElementById(\"inSize\").value || 32;\n let _color = document.getElementById(\"inColor\").value || \"\";\n let _tool = document.getElementById(\"inTool\").value;\n let _sidc = document.getElementById(\"inSIDC\").value;\n let _sidcOptions;\n try {_sidcOptions = JSON.parse(document.getElementById(\"inOptions\").value);} catch(e) {_sidcOptions = \"\";}\n _sidcOptions = (_sidc === \"\") ? \"\" : _sidcOptions;\n for (let key in _sidcOptions) {if ((_sidcOptions[key] === \"\") || (_sidcOptions[key] === 0)) {delete _sidcOptions[key];}}\n _sidcOptions = (Object.keys(_sidcOptions).length === 0 ) ? \"\" : _sidcOptions;\n _icon = (_sidc !== \"\") ? \"\" : _icon;\n let _fbData = {\"layer\": _lay,\"draggable\": _drag,\"track\":_track,\"speed\":_speed,\"alt\":_alt,\"lat\":_lat,\"lon\":_lon,\"icon\":_icon,\"iconSize\":_size,\"iconColor\":_color,\"tooltip\":_tool,\"label\":_label,\"SIDC\":_sidc,\"options\":_sidcOptions};\n for (let key in _fbData) {if (_fbData[key] === \"\") {delete _fbData[key];}}\n document.getElementById(\"payload\").innerHTML = JSON.stringify({\"name\" :\"{{payload.name}}\", ..._fbData},null,2);\n feedback(\"{{payload.name}}\",_fbData,\"updateObject\",false);'\n style='width: 100% !important;'>Update Object Data</button></td></tr>\n<tr><td></td><td><button id='addIcon' type='button' style='width:100%;background-color: red; color: white;' onclick='feedback(\"{{payload.name}}\",\"\",\"drawdelete\",true);'>Delete Object</button></td></tr>\n</table>",
567
567
  "output": "str",
568
568
  "x": 1560,
569
569
  "y": 780,
@@ -682,7 +682,7 @@
682
682
  "fieldType": "msg",
683
683
  "format": "html",
684
684
  "syntax": "mustache",
685
- "template": "<b>Update Object Properties</b><br/><br/>\n<table id='addTable' style=\"width:100%;\">\n<tr><td>Name</td><td><input type='text' id='inName' value='' autofocus;/></td></tr>\n<tr><td>Layer</td><td><input type='text' id='inLay' placeholder='unknown' value='' /></td></tr>\n<tr><td>Draggable</td><td><input type='checkbox' id='inDrag' name='inDrag'></td></tr>\n<tr><td>Track</td><td><input type='text' id='inTrack' value=0 /></td></tr>\n<tr><td>Speed</td><td><input type='text' id='inSpeed' value=0 /></td></tr>\n<tr><td>Alt</td><td><input type='text' id='inAlt' value=0 /></td></tr>\n<tr><td>Lat</td><td><input type='text' id='inLat' placeholder='Value/Empty/dblClk' value='' ondblclick='this.value=rclk.lat.toFixed(6);' /></td></tr>\n<tr><td>Lon</td><td><input type='text' id='inLon' placeholder='Value/Empty/dblClk' value='' ondblclick='this.value=rclk.lng.toFixed(6);' /></td></tr>\n<tr><td>Label</td><td><input type='text' id='inLabel' value='' /></td></tr>\n<tr><td><a href=\"https://www.spatialillusions.com/unitgenerator-legacy/\" target=\"_blank\">SIDC</a></td>\n<td><input type='text' id='inSIDC' value='' /></td></tr>\n<tr><td>SIDC Options</td><td><input type='text' id='inOptions' value='{\"fillOpacity\":0,\"direction\":0,\"speed\":0,\"type\":\"\",\"infoSize\":0,\"infoFields\":\"\",\"staffComments\":\"\",\"altitudeDepth\":\"\",\"quantity\":0,\"additionalInformation\":\"\"}' /></td></tr>\n<tr><td>Icon Category</td><td>{{{flow.categoriesSelect}}}</td></tr>\n<tr><td>Icon</td><td>{{{flow.iconsSelect}}}</td></tr>\n<tr>\n <td>iconSize</td>\n <td><input type='text' id='inSize' value='' /></td>\n</tr>\n<tr><td>iconColor</td><td><input type='text' id='inColor' value='' /></td></tr>\n<tr><td>toolTip</td><td><input type='text' id='inTool' value='' /></td></tr>\n<tr><td>Payload</td><td><div id='payload'></div></td></tr>\n<tr><td></td><td><button id='addIcon' type='button' onclick=\n 'let _name = document.getElementById(\"inName\").value; _name = (_name === \"\") ? \"ID\"+Math.floor(Math.random() * 10000) : _name;\n let _lat = document.getElementById(\"inLat\").value; _lat = parseFloat((_lat === \"\") ? rclk.lat.toFixed(6) : _lat);\n let _lon = document.getElementById(\"inLon\").value; _lon = parseFloat((_lon === \"\") ? rclk.lng.toFixed(6) : _lon);\n let _lay = document.getElementById(\"inLay\").value;\n let _drag = document.getElementById(\"inDrag\").checked;\n let _track = document.getElementById(\"inTrack\").value; _track = parseFloat((_track === \"\") ? 0 : _track);\n let _speed = document.getElementById(\"inSpeed\").value; _speed = parseFloat((_speed === \"\") ? 0 : _speed);\n let _alt = document.getElementById(\"inAlt\").value; _alt = parseFloat((_alt === \"\") ? 0 : _alt);\n let _icon = document.getElementById(\"iconsSelect\").value; _icon = (_icon === \"\") ? \"uav\" : _icon;\n let _label = document.getElementById(\"inLabel\").value || \"\";\n let _size = document.getElementById(\"inSize\").value || 32;\n let _color = document.getElementById(\"inColor\").value || \"\";\n let _tool = document.getElementById(\"inTool\").value;\n let _sidc = document.getElementById(\"inSIDC\").value;\n let _sidcOptions;\n try {_sidcOptions = JSON.parse(document.getElementById(\"inOptions\").value);} catch(e) {_sidcOptions = \"\";}\n _sidcOptions = (_sidc === \"\") ? \"\" : _sidcOptions;\n for (let key in _sidcOptions) {if ((_sidcOptions[key] === \"\") || (_sidcOptions[key] === 0)) {delete _sidcOptions[key];}}\n _sidcOptions = (Object.keys(_sidcOptions).length === 0 ) ? \"\" : _sidcOptions;\n _icon = (_sidc !== \"\") ? \"\" : _icon;\n let _fbData = {\"layer\": _lay,\"draggable\": _drag,\"track\":_track,\"speed\":_speed,\"alt\":_alt,\"lat\":_lat,\"lon\":_lon,\"icon\":_icon,\"iconSize\": _size, \"iconColor\":_color,\"tooltip\":_tool,\"label\":_label,\"SIDC\":_sidc,\"options\":_sidcOptions};\n for (let key in _fbData) {if (_fbData[key] === \"\") {delete _fbData[key];}}\n document.getElementById(\"payload\").innerHTML = JSON.stringify({\"name\" :_name, ..._fbData},null,2);\n feedback(_name,_fbData,\"addObject\",false);'\n style='width: 100% !important;'>Add New Object</button></td></tr>\n</table>",
685
+ "template": "<b>Update Object Properties</b><br/><br/>\n<table id='addTable' style=\"width:100%;\">\n<tr><td>Name</td><td><input type='text' id='inName' value='' autofocus;/></td></tr>\n<tr><td>Layer</td><td><input type='text' id='inLay' placeholder='unknown' value='' /></td></tr>\n<tr><td>Draggable</td><td><input type='checkbox' id='inDrag' name='inDrag'></td></tr>\n<tr><td>Track</td><td><input type='text' id='inTrack' value=0 /></td></tr>\n<tr><td>Speed</td><td><input type='text' id='inSpeed' value=0 /></td></tr>\n<tr><td>Alt</td><td><input type='text' id='inAlt' value=0 /></td></tr>\n<tr><td>Lat</td><td><input type='text' id='inLat' placeholder='Value/Empty/dblClk' value='' ondblclick='this.value=rclk.lat.toFixed(6);' /></td></tr>\n<tr><td>Lon</td><td><input type='text' id='inLon' placeholder='Value/Empty/dblClk' value='' ondblclick='this.value=rclk.lng.toFixed(6);' /></td></tr>\n<tr><td>Label</td><td><input type='text' id='inLabel' value='' /></td></tr>\n<tr><td><a href=\"worldmap/unitgenerator.html\" target=\"_blank\">SIDC</a></td>\n<td><input type='text' id='inSIDC' value='' /></td></tr>\n<tr><td>SIDC Options</td><td><input type='text' id='inOptions' value='{\"fillOpacity\":0,\"direction\":0,\"speed\":0,\"type\":\"\",\"infoSize\":0,\"infoFields\":\"\",\"staffComments\":\"\",\"altitudeDepth\":\"\",\"quantity\":0,\"additionalInformation\":\"\"}' /></td></tr>\n<tr><td>Icon Category</td><td>{{{flow.categoriesSelect}}}</td></tr>\n<tr><td>Icon</td><td>{{{flow.iconsSelect}}}</td></tr>\n<tr>\n <td>iconSize</td>\n <td><input type='text' id='inSize' value='' /></td>\n</tr>\n<tr><td>iconColor</td><td><input type='text' id='inColor' value='' /></td></tr>\n<tr><td>toolTip</td><td><input type='text' id='inTool' value='' /></td></tr>\n<tr><td>Payload</td><td><div id='payload'></div></td></tr>\n<tr><td></td><td><button id='addIcon' type='button' onclick=\n 'let _name = document.getElementById(\"inName\").value; _name = (_name === \"\") ? \"ID\"+Math.floor(Math.random() * 10000) : _name;\n let _lat = document.getElementById(\"inLat\").value; _lat = parseFloat((_lat === \"\") ? rclk.lat.toFixed(6) : _lat);\n let _lon = document.getElementById(\"inLon\").value; _lon = parseFloat((_lon === \"\") ? rclk.lng.toFixed(6) : _lon);\n let _lay = document.getElementById(\"inLay\").value;\n let _drag = document.getElementById(\"inDrag\").checked;\n let _track = document.getElementById(\"inTrack\").value; _track = parseFloat((_track === \"\") ? 0 : _track);\n let _speed = document.getElementById(\"inSpeed\").value; _speed = parseFloat((_speed === \"\") ? 0 : _speed);\n let _alt = document.getElementById(\"inAlt\").value; _alt = parseFloat((_alt === \"\") ? 0 : _alt);\n let _icon = document.getElementById(\"iconsSelect\").value; _icon = (_icon === \"\") ? \"uav\" : _icon;\n let _label = document.getElementById(\"inLabel\").value || \"\";\n let _size = document.getElementById(\"inSize\").value || 32;\n let _color = document.getElementById(\"inColor\").value || \"\";\n let _tool = document.getElementById(\"inTool\").value;\n let _sidc = document.getElementById(\"inSIDC\").value;\n let _sidcOptions;\n try {_sidcOptions = JSON.parse(document.getElementById(\"inOptions\").value);} catch(e) {_sidcOptions = \"\";}\n _sidcOptions = (_sidc === \"\") ? \"\" : _sidcOptions;\n for (let key in _sidcOptions) {if ((_sidcOptions[key] === \"\") || (_sidcOptions[key] === 0)) {delete _sidcOptions[key];}}\n _sidcOptions = (Object.keys(_sidcOptions).length === 0 ) ? \"\" : _sidcOptions;\n _icon = (_sidc !== \"\") ? \"\" : _icon;\n let _fbData = {\"layer\": _lay,\"draggable\": _drag,\"track\":_track,\"speed\":_speed,\"alt\":_alt,\"lat\":_lat,\"lon\":_lon,\"icon\":_icon,\"iconSize\": _size, \"iconColor\":_color,\"tooltip\":_tool,\"label\":_label,\"SIDC\":_sidc,\"options\":_sidcOptions};\n for (let key in _fbData) {if (_fbData[key] === \"\") {delete _fbData[key];}}\n document.getElementById(\"payload\").innerHTML = JSON.stringify({\"name\" :_name, ..._fbData},null,2);\n feedback(_name,_fbData,\"addObject\",false);'\n style='width: 100% !important;'>Add New Object</button></td></tr>\n</table>",
686
686
  "output": "str",
687
687
  "x": 670,
688
688
  "y": 920,
@@ -8,7 +8,7 @@ This package contains type definitions for geojson (https://geojson.org/).
8
8
  Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/geojson.
9
9
 
10
10
  ### Additional Details
11
- * Last updated: Fri, 06 Dec 2024 13:37:42 GMT
11
+ * Last updated: Thu, 23 Jan 2025 18:36:51 GMT
12
12
  * Dependencies: none
13
13
 
14
14
  # Credits
@@ -27,8 +27,42 @@ export type BBox = [number, number, number, number] | [number, number, number, n
27
27
  * Array should contain between two and three elements.
28
28
  * The previous GeoJSON specification allowed more elements (e.g., which could be used to represent M values),
29
29
  * but the current specification only allows X, Y, and (optionally) Z to be defined.
30
- */
31
- export type Position = number[]; // [number, number] | [number, number, number];
30
+ *
31
+ * Note: the type will not be narrowed down to `[number, number] | [number, number, number]` due to
32
+ * marginal benefits and the large impact of breaking change.
33
+ *
34
+ * See previous discussions on the type narrowing:
35
+ * - {@link https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21590|Nov 2017}
36
+ * - {@link https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/67773|Dec 2023}
37
+ * - {@link https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/71441| Dec 2024}
38
+ *
39
+ * One can use a
40
+ * {@link https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates|user-defined type guard that returns a type predicate}
41
+ * to determine if a position is a 2D or 3D position.
42
+ *
43
+ * @example
44
+ * import type { Position } from 'geojson';
45
+ *
46
+ * type StrictPosition = [x: number, y: number] | [x: number, y: number, z: number]
47
+ *
48
+ * function isStrictPosition(position: Position): position is StrictPosition {
49
+ * return position.length === 2 || position.length === 3
50
+ * };
51
+ *
52
+ * let position: Position = [-116.91, 45.54];
53
+ *
54
+ * let x: number;
55
+ * let y: number;
56
+ * let z: number | undefined;
57
+ *
58
+ * if (isStrictPosition(position)) {
59
+ * // `tsc` would throw an error if we tried to destructure a fourth parameter
60
+ * [x, y, z] = position;
61
+ * } else {
62
+ * throw new TypeError("Position is not a 2D or 3D point");
63
+ * }
64
+ */
65
+ export type Position = number[];
32
66
 
33
67
  /**
34
68
  * The base GeoJSON object.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@types/geojson",
3
- "version": "7946.0.15",
3
+ "version": "7946.0.16",
4
4
  "description": "TypeScript definitions for geojson",
5
5
  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/geojson",
6
6
  "license": "MIT",
@@ -41,6 +41,6 @@
41
41
  "scripts": {},
42
42
  "dependencies": {},
43
43
  "peerDependencies": {},
44
- "typesPublisherContentHash": "02df8352d5727746ff9d35d4abccf719e7584d4724aa89d4293d996bed5b0469",
44
+ "typesPublisherContentHash": "e7997f4827a9a92b60c7a6cb27e8f18fa760803e9dd021965e95604338b72e88",
45
45
  "typeScriptVersion": "5.0"
46
46
  }
@@ -11,6 +11,7 @@
11
11
  "GetIntrinsic",
12
12
  ],
13
13
  }],
14
+ "no-extra-parens": 0,
14
15
  "no-magic-numbers": 0,
15
16
  },
16
17
  }
@@ -4,7 +4,7 @@ github: [ljharb]
4
4
  patreon: # Replace with a single Patreon username
5
5
  open_collective: # Replace with a single Open Collective username
6
6
  ko_fi: # Replace with a single Ko-fi username
7
- tidelift: npm/has-property-descriptors
7
+ tidelift: npm/call-bind-apply-helpers
8
8
  community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9
9
  liberapay: # Replace with a single Liberapay username
10
10
  issuehunt: # Replace with a single IssueHunt username
@@ -0,0 +1,30 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [v1.0.2](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.1...v1.0.2) - 2025-02-12
9
+
10
+ ### Commits
11
+
12
+ - [types] improve inferred types [`e6f9586`](https://github.com/ljharb/call-bind-apply-helpers/commit/e6f95860a3c72879cb861a858cdfb8138fbedec1)
13
+ - [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`e43d540`](https://github.com/ljharb/call-bind-apply-helpers/commit/e43d5409f97543bfbb11f345d47d8ce4e066d8c1)
14
+
15
+ ## [v1.0.1](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.0...v1.0.1) - 2024-12-08
16
+
17
+ ### Commits
18
+
19
+ - [types] `reflectApply`: fix types [`4efc396`](https://github.com/ljharb/call-bind-apply-helpers/commit/4efc3965351a4f02cc55e836fa391d3d11ef2ef8)
20
+ - [Fix] `reflectApply`: oops, Reflect is not a function [`83cc739`](https://github.com/ljharb/call-bind-apply-helpers/commit/83cc7395de6b79b7730bdf092f1436f0b1263c75)
21
+ - [Dev Deps] update `@arethetypeswrong/cli` [`80bd5d3`](https://github.com/ljharb/call-bind-apply-helpers/commit/80bd5d3ae58b4f6b6995ce439dd5a1bcb178a940)
22
+
23
+ ## v1.0.0 - 2024-12-05
24
+
25
+ ### Commits
26
+
27
+ - Initial implementation, tests, readme [`7879629`](https://github.com/ljharb/call-bind-apply-helpers/commit/78796290f9b7430c9934d6f33d94ae9bc89fce04)
28
+ - Initial commit [`3f1dc16`](https://github.com/ljharb/call-bind-apply-helpers/commit/3f1dc164afc43285631b114a5f9dd9137b2b952f)
29
+ - npm init [`081df04`](https://github.com/ljharb/call-bind-apply-helpers/commit/081df048c312fcee400922026f6e97281200a603)
30
+ - Only apps should have lockfiles [`5b9ca0f`](https://github.com/ljharb/call-bind-apply-helpers/commit/5b9ca0fe8101ebfaf309c549caac4e0a017ed930)
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020 Jordan Harband
3
+ Copyright (c) 2024 Jordan Harband
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,62 @@
1
+ # call-bind-apply-helpers <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
2
+
3
+ [![github actions][actions-image]][actions-url]
4
+ [![coverage][codecov-image]][codecov-url]
5
+ [![dependency status][deps-svg]][deps-url]
6
+ [![dev dependency status][dev-deps-svg]][dev-deps-url]
7
+ [![License][license-image]][license-url]
8
+ [![Downloads][downloads-image]][downloads-url]
9
+
10
+ [![npm badge][npm-badge-png]][package-url]
11
+
12
+ Helper functions around Function call/apply/bind, for use in `call-bind`.
13
+
14
+ The only packages that should likely ever use this package directly are `call-bind` and `get-intrinsic`.
15
+ Please use `call-bind` unless you have a very good reason not to.
16
+
17
+ ## Getting started
18
+
19
+ ```sh
20
+ npm install --save call-bind-apply-helpers
21
+ ```
22
+
23
+ ## Usage/Examples
24
+
25
+ ```js
26
+ const assert = require('assert');
27
+ const callBindBasic = require('call-bind-apply-helpers');
28
+
29
+ function f(a, b) {
30
+ assert.equal(this, 1);
31
+ assert.equal(a, 2);
32
+ assert.equal(b, 3);
33
+ assert.equal(arguments.length, 2);
34
+ }
35
+
36
+ const fBound = callBindBasic([f, 1]);
37
+
38
+ delete Function.prototype.call;
39
+ delete Function.prototype.bind;
40
+
41
+ fBound(2, 3);
42
+ ```
43
+
44
+ ## Tests
45
+
46
+ Clone the repo, `npm install`, and run `npm test`
47
+
48
+ [package-url]: https://npmjs.org/package/call-bind-apply-helpers
49
+ [npm-version-svg]: https://versionbadg.es/ljharb/call-bind-apply-helpers.svg
50
+ [deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers.svg
51
+ [deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers
52
+ [dev-deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers/dev-status.svg
53
+ [dev-deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers#info=devDependencies
54
+ [npm-badge-png]: https://nodei.co/npm/call-bind-apply-helpers.png?downloads=true&stars=true
55
+ [license-image]: https://img.shields.io/npm/l/call-bind-apply-helpers.svg
56
+ [license-url]: LICENSE
57
+ [downloads-image]: https://img.shields.io/npm/dm/call-bind-apply-helpers.svg
58
+ [downloads-url]: https://npm-stat.com/charts.html?package=call-bind-apply-helpers
59
+ [codecov-image]: https://codecov.io/gh/ljharb/call-bind-apply-helpers/branch/main/graphs/badge.svg
60
+ [codecov-url]: https://app.codecov.io/gh/ljharb/call-bind-apply-helpers/
61
+ [actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind-apply-helpers
62
+ [actions-url]: https://github.com/ljharb/call-bind-apply-helpers/actions
@@ -0,0 +1 @@
1
+ export = Reflect.apply;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var bind = require('function-bind');
4
+
5
+ var $apply = require('./functionApply');
6
+ var $call = require('./functionCall');
7
+ var $reflectApply = require('./reflectApply');
8
+
9
+ /** @type {import('./actualApply')} */
10
+ module.exports = $reflectApply || bind.call($call, $apply);
@@ -0,0 +1,19 @@
1
+ import actualApply from './actualApply';
2
+
3
+ type TupleSplitHead<T extends any[], N extends number> = T['length'] extends N
4
+ ? T
5
+ : T extends [...infer R, any]
6
+ ? TupleSplitHead<R, N>
7
+ : never
8
+
9
+ type TupleSplitTail<T, N extends number, O extends any[] = []> = O['length'] extends N
10
+ ? T
11
+ : T extends [infer F, ...infer R]
12
+ ? TupleSplitTail<[...R], N, [...O, F]>
13
+ : never
14
+
15
+ type TupleSplit<T extends any[], N extends number> = [TupleSplitHead<T, N>, TupleSplitTail<T, N>]
16
+
17
+ declare function applyBind(...args: TupleSplit<Parameters<typeof actualApply>, 2>[1]): ReturnType<typeof actualApply>;
18
+
19
+ export = applyBind;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var bind = require('function-bind');
4
+ var $apply = require('./functionApply');
5
+ var actualApply = require('./actualApply');
6
+
7
+ /** @type {import('./applyBind')} */
8
+ module.exports = function applyBind() {
9
+ return actualApply(bind, $apply, arguments);
10
+ };
@@ -0,0 +1 @@
1
+ export = Function.prototype.apply;
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ /** @type {import('./functionApply')} */
4
+ module.exports = Function.prototype.apply;
@@ -0,0 +1 @@
1
+ export = Function.prototype.call;
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ /** @type {import('./functionCall')} */
4
+ module.exports = Function.prototype.call;
@@ -0,0 +1,64 @@
1
+ type RemoveFromTuple<
2
+ Tuple extends readonly unknown[],
3
+ RemoveCount extends number,
4
+ Index extends 1[] = []
5
+ > = Index["length"] extends RemoveCount
6
+ ? Tuple
7
+ : Tuple extends [infer First, ...infer Rest]
8
+ ? RemoveFromTuple<Rest, RemoveCount, [...Index, 1]>
9
+ : Tuple;
10
+
11
+ type ConcatTuples<
12
+ Prefix extends readonly unknown[],
13
+ Suffix extends readonly unknown[]
14
+ > = [...Prefix, ...Suffix];
15
+
16
+ type ExtractFunctionParams<T> = T extends (this: infer TThis, ...args: infer P extends readonly unknown[]) => infer R
17
+ ? { thisArg: TThis; params: P; returnType: R }
18
+ : never;
19
+
20
+ type BindFunction<
21
+ T extends (this: any, ...args: any[]) => any,
22
+ TThis,
23
+ TBoundArgs extends readonly unknown[],
24
+ ReceiverBound extends boolean
25
+ > = ExtractFunctionParams<T> extends {
26
+ thisArg: infer OrigThis;
27
+ params: infer P extends readonly unknown[];
28
+ returnType: infer R;
29
+ }
30
+ ? ReceiverBound extends true
31
+ ? (...args: RemoveFromTuple<P, Extract<TBoundArgs["length"], number>>) => R extends [OrigThis, ...infer Rest]
32
+ ? [TThis, ...Rest] // Replace `this` with `thisArg`
33
+ : R
34
+ : <U, RemainingArgs extends RemoveFromTuple<P, Extract<TBoundArgs["length"], number>>>(
35
+ thisArg: U,
36
+ ...args: RemainingArgs
37
+ ) => R extends [OrigThis, ...infer Rest]
38
+ ? [U, ...ConcatTuples<TBoundArgs, Rest>] // Preserve bound args in return type
39
+ : R
40
+ : never;
41
+
42
+ declare function callBind<
43
+ const T extends (this: any, ...args: any[]) => any,
44
+ Extracted extends ExtractFunctionParams<T>,
45
+ const TBoundArgs extends Partial<Extracted["params"]> & readonly unknown[],
46
+ const TThis extends Extracted["thisArg"]
47
+ >(
48
+ args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs]
49
+ ): BindFunction<T, TThis, TBoundArgs, true>;
50
+
51
+ declare function callBind<
52
+ const T extends (this: any, ...args: any[]) => any,
53
+ Extracted extends ExtractFunctionParams<T>,
54
+ const TBoundArgs extends Partial<Extracted["params"]> & readonly unknown[]
55
+ >(
56
+ args: [fn: T, ...boundArgs: TBoundArgs]
57
+ ): BindFunction<T, Extracted["thisArg"], TBoundArgs, false>;
58
+
59
+ declare function callBind<const TArgs extends readonly unknown[]>(
60
+ args: [fn: Exclude<TArgs[0], Function>, ...rest: TArgs]
61
+ ): never;
62
+
63
+ // export as namespace callBind;
64
+ export = callBind;
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var bind = require('function-bind');
4
+ var $TypeError = require('es-errors/type');
5
+
6
+ var $call = require('./functionCall');
7
+ var $actualApply = require('./actualApply');
8
+
9
+ /** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */
10
+ module.exports = function callBindBasic(args) {
11
+ if (args.length < 1 || typeof args[0] !== 'function') {
12
+ throw new $TypeError('a function is required');
13
+ }
14
+ return $actualApply(bind, $call, args);
15
+ };
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "call-bind-apply-helpers",
3
+ "version": "1.0.2",
4
+ "description": "Helper functions around Function call/apply/bind, for use in `call-bind`",
5
+ "main": "index.js",
6
+ "exports": {
7
+ ".": "./index.js",
8
+ "./actualApply": "./actualApply.js",
9
+ "./applyBind": "./applyBind.js",
10
+ "./functionApply": "./functionApply.js",
11
+ "./functionCall": "./functionCall.js",
12
+ "./reflectApply": "./reflectApply.js",
13
+ "./package.json": "./package.json"
14
+ },
15
+ "scripts": {
16
+ "prepack": "npmignore --auto --commentLines=auto",
17
+ "prepublish": "not-in-publish || npm run prepublishOnly",
18
+ "prepublishOnly": "safe-publish-latest",
19
+ "prelint": "evalmd README.md",
20
+ "lint": "eslint --ext=.js,.mjs .",
21
+ "postlint": "tsc -p . && attw -P",
22
+ "pretest": "npm run lint",
23
+ "tests-only": "nyc tape 'test/**/*.js'",
24
+ "test": "npm run tests-only",
25
+ "posttest": "npx npm@'>=10.2' audit --production",
26
+ "version": "auto-changelog && git add CHANGELOG.md",
27
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/ljharb/call-bind-apply-helpers.git"
32
+ },
33
+ "author": "Jordan Harband <ljharb@gmail.com>",
34
+ "license": "MIT",
35
+ "bugs": {
36
+ "url": "https://github.com/ljharb/call-bind-apply-helpers/issues"
37
+ },
38
+ "homepage": "https://github.com/ljharb/call-bind-apply-helpers#readme",
39
+ "dependencies": {
40
+ "es-errors": "^1.3.0",
41
+ "function-bind": "^1.1.2"
42
+ },
43
+ "devDependencies": {
44
+ "@arethetypeswrong/cli": "^0.17.3",
45
+ "@ljharb/eslint-config": "^21.1.1",
46
+ "@ljharb/tsconfig": "^0.2.3",
47
+ "@types/for-each": "^0.3.3",
48
+ "@types/function-bind": "^1.1.10",
49
+ "@types/object-inspect": "^1.13.0",
50
+ "@types/tape": "^5.8.1",
51
+ "auto-changelog": "^2.5.0",
52
+ "encoding": "^0.1.13",
53
+ "es-value-fixtures": "^1.7.1",
54
+ "eslint": "=8.8.0",
55
+ "evalmd": "^0.0.19",
56
+ "for-each": "^0.3.5",
57
+ "has-strict-mode": "^1.1.0",
58
+ "in-publish": "^2.0.1",
59
+ "npmignore": "^0.3.1",
60
+ "nyc": "^10.3.2",
61
+ "object-inspect": "^1.13.4",
62
+ "safe-publish-latest": "^2.0.0",
63
+ "tape": "^5.9.0",
64
+ "typescript": "next"
65
+ },
66
+ "testling": {
67
+ "files": "test/index.js"
68
+ },
69
+ "auto-changelog": {
70
+ "output": "CHANGELOG.md",
71
+ "template": "keepachangelog",
72
+ "unreleased": false,
73
+ "commitLimit": false,
74
+ "backfillLimit": false,
75
+ "hideCredit": true
76
+ },
77
+ "publishConfig": {
78
+ "ignore": [
79
+ ".github/workflows"
80
+ ]
81
+ },
82
+ "engines": {
83
+ "node": ">= 0.4"
84
+ }
85
+ }
@@ -0,0 +1,3 @@
1
+ declare const reflectApply: false | typeof Reflect.apply;
2
+
3
+ export = reflectApply;
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ /** @type {import('./reflectApply')} */
4
+ module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ var callBind = require('../');
4
+ var hasStrictMode = require('has-strict-mode')();
5
+ var forEach = require('for-each');
6
+ var inspect = require('object-inspect');
7
+ var v = require('es-value-fixtures');
8
+
9
+ var test = require('tape');
10
+
11
+ test('callBindBasic', function (t) {
12
+ forEach(v.nonFunctions, function (nonFunction) {
13
+ t['throws'](
14
+ // @ts-expect-error
15
+ function () { callBind([nonFunction]); },
16
+ TypeError,
17
+ inspect(nonFunction) + ' is not a function'
18
+ );
19
+ });
20
+
21
+ var sentinel = { sentinel: true };
22
+ /** @type {<T, A extends number, B extends number>(this: T, a: A, b: B) => [T | undefined, A, B]} */
23
+ var func = function (a, b) {
24
+ // eslint-disable-next-line no-invalid-this
25
+ return [!hasStrictMode && this === global ? undefined : this, a, b];
26
+ };
27
+ t.equal(func.length, 2, 'original function length is 2');
28
+
29
+ /** type {(thisArg: unknown, a: number, b: number) => [unknown, number, number]} */
30
+ var bound = callBind([func]);
31
+ /** type {((a: number, b: number) => [typeof sentinel, typeof a, typeof b])} */
32
+ var boundR = callBind([func, sentinel]);
33
+ /** type {((b: number) => [typeof sentinel, number, typeof b])} */
34
+ var boundArg = callBind([func, sentinel, /** @type {const} */ (1)]);
35
+
36
+ // @ts-expect-error
37
+ t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with no args');
38
+
39
+ // @ts-expect-error
40
+ t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args');
41
+ // @ts-expect-error
42
+ t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func too few args');
43
+ // @ts-expect-error
44
+ t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args');
45
+ // @ts-expect-error
46
+ t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args');
47
+
48
+ t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args');
49
+ t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with right args');
50
+ t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args');
51
+ t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg');
52
+
53
+ // @ts-expect-error
54
+ t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args');
55
+ // @ts-expect-error
56
+ t.deepEqual(bound(1, 2, 3, 4), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args');
57
+ // @ts-expect-error
58
+ t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args');
59
+ // @ts-expect-error
60
+ t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args');
61
+
62
+ t.end();
63
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@ljharb/tsconfig",
3
+ "compilerOptions": {
4
+ "target": "es2021",
5
+ },
6
+ "exclude": [
7
+ "coverage",
8
+ ],
9
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "root": true,
3
+
4
+ "extends": "@ljharb",
5
+
6
+ "rules": {
7
+ "new-cap": [2, {
8
+ "capIsNewExceptions": [
9
+ "GetIntrinsic",
10
+ ],
11
+ }],
12
+ },
13
+ }