cline 1.0.1 → 1.0.3

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 (299) hide show
  1. package/bin/cline +0 -0
  2. package/bin/cline-darwin-amd64 +0 -0
  3. package/bin/cline-darwin-arm64 +0 -0
  4. package/bin/cline-host +0 -0
  5. package/bin/cline-host-darwin-amd64 +0 -0
  6. package/bin/cline-host-darwin-arm64 +0 -0
  7. package/bin/cline-host-linux-amd64 +0 -0
  8. package/bin/cline-host-linux-arm64 +0 -0
  9. package/bin/cline-linux-amd64 +0 -0
  10. package/bin/cline-linux-arm64 +0 -0
  11. package/cline-core.js +24143 -16610
  12. package/extension/package.json +12 -4
  13. package/node_modules/b4a/LICENSE +201 -0
  14. package/node_modules/b4a/README.md +153 -0
  15. package/node_modules/b4a/browser.js +563 -0
  16. package/node_modules/b4a/index.js +188 -0
  17. package/node_modules/b4a/lib/ascii.js +31 -0
  18. package/node_modules/b4a/lib/base64.js +65 -0
  19. package/node_modules/b4a/lib/hex.js +51 -0
  20. package/node_modules/b4a/lib/utf16le.js +40 -0
  21. package/node_modules/b4a/lib/utf8.js +141 -0
  22. package/node_modules/b4a/package.json +49 -0
  23. package/node_modules/b4a/react-native.js +5 -0
  24. package/node_modules/bare-events/LICENSE +201 -0
  25. package/node_modules/bare-events/README.md +25 -0
  26. package/node_modules/bare-events/global.d.ts +15 -0
  27. package/node_modules/bare-events/global.js +5 -0
  28. package/node_modules/bare-events/index.d.ts +94 -0
  29. package/node_modules/bare-events/index.js +355 -0
  30. package/node_modules/bare-events/lib/errors.js +32 -0
  31. package/node_modules/bare-events/package.json +61 -0
  32. package/node_modules/bare-events/web.d.ts +79 -0
  33. package/node_modules/bare-events/web.js +347 -0
  34. package/node_modules/bare-fs/CMakeLists.txt +13 -0
  35. package/node_modules/bare-fs/LICENSE +201 -0
  36. package/node_modules/bare-fs/README.md +29 -0
  37. package/node_modules/bare-fs/binding.c +2238 -0
  38. package/node_modules/bare-fs/binding.js +1 -0
  39. package/node_modules/bare-fs/index.d.ts +1115 -0
  40. package/node_modules/bare-fs/index.js +2330 -0
  41. package/node_modules/bare-fs/lib/constants.d.ts +49 -0
  42. package/node_modules/bare-fs/lib/constants.js +49 -0
  43. package/node_modules/bare-fs/lib/errors.d.ts +11 -0
  44. package/node_modules/bare-fs/lib/errors.js +55 -0
  45. package/node_modules/bare-fs/package.json +71 -0
  46. package/node_modules/bare-fs/prebuilds/android-arm/bare-fs.bare +0 -0
  47. package/node_modules/bare-fs/prebuilds/android-arm64/bare-fs.bare +0 -0
  48. package/node_modules/bare-fs/prebuilds/android-ia32/bare-fs.bare +0 -0
  49. package/node_modules/bare-fs/prebuilds/android-x64/bare-fs.bare +0 -0
  50. package/node_modules/bare-fs/prebuilds/darwin-arm64/bare-fs.bare +0 -0
  51. package/node_modules/bare-fs/prebuilds/darwin-x64/bare-fs.bare +0 -0
  52. package/node_modules/bare-fs/prebuilds/ios-arm64/bare-fs.bare +0 -0
  53. package/node_modules/bare-fs/prebuilds/ios-arm64-simulator/bare-fs.bare +0 -0
  54. package/node_modules/bare-fs/prebuilds/ios-x64-simulator/bare-fs.bare +0 -0
  55. package/node_modules/bare-fs/prebuilds/linux-arm64/bare-fs.bare +0 -0
  56. package/node_modules/bare-fs/prebuilds/linux-x64/bare-fs.bare +0 -0
  57. package/node_modules/bare-fs/prebuilds/win32-arm64/bare-fs.bare +0 -0
  58. package/node_modules/bare-fs/prebuilds/win32-x64/bare-fs.bare +0 -0
  59. package/node_modules/bare-fs/promises.d.ts +282 -0
  60. package/node_modules/bare-fs/promises.js +90 -0
  61. package/node_modules/bare-os/CMakeLists.txt +13 -0
  62. package/node_modules/bare-os/LICENSE +201 -0
  63. package/node_modules/bare-os/README.md +11 -0
  64. package/node_modules/bare-os/binding.c +1119 -0
  65. package/node_modules/bare-os/binding.js +1 -0
  66. package/node_modules/bare-os/index.d.ts +109 -0
  67. package/node_modules/bare-os/index.js +99 -0
  68. package/node_modules/bare-os/lib/constants.js +6 -0
  69. package/node_modules/bare-os/lib/errors.js +22 -0
  70. package/node_modules/bare-os/package.json +46 -0
  71. package/node_modules/bare-os/prebuilds/android-arm/bare-os.bare +0 -0
  72. package/node_modules/bare-os/prebuilds/android-arm64/bare-os.bare +0 -0
  73. package/node_modules/bare-os/prebuilds/android-ia32/bare-os.bare +0 -0
  74. package/node_modules/bare-os/prebuilds/android-x64/bare-os.bare +0 -0
  75. package/node_modules/bare-os/prebuilds/darwin-arm64/bare-os.bare +0 -0
  76. package/node_modules/bare-os/prebuilds/darwin-x64/bare-os.bare +0 -0
  77. package/node_modules/bare-os/prebuilds/ios-arm64/bare-os.bare +0 -0
  78. package/node_modules/bare-os/prebuilds/ios-arm64-simulator/bare-os.bare +0 -0
  79. package/node_modules/bare-os/prebuilds/ios-x64-simulator/bare-os.bare +0 -0
  80. package/node_modules/bare-os/prebuilds/linux-arm64/bare-os.bare +0 -0
  81. package/node_modules/bare-os/prebuilds/linux-x64/bare-os.bare +0 -0
  82. package/node_modules/bare-os/prebuilds/win32-arm64/bare-os.bare +0 -0
  83. package/node_modules/bare-os/prebuilds/win32-x64/bare-os.bare +0 -0
  84. package/node_modules/bare-path/LICENSE +201 -0
  85. package/node_modules/bare-path/NOTICE +28 -0
  86. package/node_modules/bare-path/README.md +19 -0
  87. package/node_modules/bare-path/index.js +11 -0
  88. package/node_modules/bare-path/lib/constants.js +11 -0
  89. package/node_modules/bare-path/lib/posix.js +242 -0
  90. package/node_modules/bare-path/lib/shared.js +67 -0
  91. package/node_modules/bare-path/lib/win32.js +513 -0
  92. package/node_modules/bare-path/package.json +36 -0
  93. package/node_modules/bare-stream/LICENSE +201 -0
  94. package/node_modules/bare-stream/README.md +15 -0
  95. package/node_modules/bare-stream/global.js +8 -0
  96. package/node_modules/bare-stream/index.d.ts +237 -0
  97. package/node_modules/bare-stream/index.js +355 -0
  98. package/node_modules/bare-stream/package.json +61 -0
  99. package/node_modules/bare-stream/promises.js +3 -0
  100. package/node_modules/bare-stream/web.d.ts +73 -0
  101. package/node_modules/bare-stream/web.js +229 -0
  102. package/node_modules/bare-url/CMakeLists.txt +27 -0
  103. package/node_modules/bare-url/LICENSE +201 -0
  104. package/node_modules/bare-url/README.md +19 -0
  105. package/node_modules/bare-url/binding.c +188 -0
  106. package/node_modules/bare-url/binding.js +1 -0
  107. package/node_modules/bare-url/global.d.ts +12 -0
  108. package/node_modules/bare-url/global.js +2 -0
  109. package/node_modules/bare-url/index.d.ts +39 -0
  110. package/node_modules/bare-url/index.js +450 -0
  111. package/node_modules/bare-url/lib/errors.d.ts +8 -0
  112. package/node_modules/bare-url/lib/errors.js +38 -0
  113. package/node_modules/bare-url/lib/url-search-params.d.ts +21 -0
  114. package/node_modules/bare-url/lib/url-search-params.js +176 -0
  115. package/node_modules/bare-url/package.json +51 -0
  116. package/node_modules/bare-url/prebuilds/android-arm/bare-url.bare +0 -0
  117. package/node_modules/bare-url/prebuilds/android-arm64/bare-url.bare +0 -0
  118. package/node_modules/bare-url/prebuilds/android-ia32/bare-url.bare +0 -0
  119. package/node_modules/bare-url/prebuilds/android-x64/bare-url.bare +0 -0
  120. package/node_modules/bare-url/prebuilds/darwin-arm64/bare-url.bare +0 -0
  121. package/node_modules/bare-url/prebuilds/darwin-x64/bare-url.bare +0 -0
  122. package/node_modules/bare-url/prebuilds/ios-arm64/bare-url.bare +0 -0
  123. package/node_modules/bare-url/prebuilds/ios-arm64-simulator/bare-url.bare +0 -0
  124. package/node_modules/bare-url/prebuilds/ios-x64-simulator/bare-url.bare +0 -0
  125. package/node_modules/bare-url/prebuilds/linux-arm64/bare-url.bare +0 -0
  126. package/node_modules/bare-url/prebuilds/linux-x64/bare-url.bare +0 -0
  127. package/node_modules/bare-url/prebuilds/win32-arm64/bare-url.bare +0 -0
  128. package/node_modules/bare-url/prebuilds/win32-x64/bare-url.bare +0 -0
  129. package/node_modules/better-sqlite3/deps/download.sh +1 -1
  130. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +122 -81
  131. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +45 -45
  132. package/node_modules/better-sqlite3/lib/database.js +1 -1
  133. package/node_modules/better-sqlite3/package.json +4 -7
  134. package/node_modules/better-sqlite3/src/addon.cpp +47 -0
  135. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +44 -2164
  136. package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
  137. package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
  138. package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
  139. package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
  140. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
  141. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
  142. package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
  143. package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
  144. package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
  145. package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
  146. package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
  147. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
  148. package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
  149. package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
  150. package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
  151. package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
  152. package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
  153. package/node_modules/better-sqlite3/src/util/macros.cpp +63 -0
  154. package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
  155. package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
  156. package/node_modules/events-universal/LICENSE +201 -0
  157. package/node_modules/events-universal/README.md +17 -0
  158. package/node_modules/events-universal/bare.js +1 -0
  159. package/node_modules/events-universal/default.js +1 -0
  160. package/node_modules/events-universal/index.js +1 -0
  161. package/node_modules/events-universal/package.json +39 -0
  162. package/node_modules/events-universal/react-native.js +1 -0
  163. package/node_modules/{fs-constants → fast-fifo}/LICENSE +1 -1
  164. package/node_modules/fast-fifo/README.md +78 -0
  165. package/node_modules/fast-fifo/fixed-size.js +39 -0
  166. package/node_modules/fast-fifo/index.js +48 -0
  167. package/node_modules/fast-fifo/package.json +28 -0
  168. package/node_modules/{base64-js → streamx}/LICENSE +1 -1
  169. package/node_modules/streamx/README.md +489 -0
  170. package/node_modules/streamx/index.js +1184 -0
  171. package/node_modules/streamx/package.json +34 -0
  172. package/node_modules/tar-fs/README.md +23 -34
  173. package/node_modules/tar-fs/index.js +211 -184
  174. package/node_modules/tar-fs/package.json +27 -7
  175. package/node_modules/tar-stream/README.md +34 -19
  176. package/node_modules/tar-stream/constants.js +14 -0
  177. package/node_modules/tar-stream/extract.js +341 -192
  178. package/node_modules/tar-stream/headers.js +201 -175
  179. package/node_modules/tar-stream/pack.js +226 -194
  180. package/node_modules/tar-stream/package.json +23 -46
  181. package/node_modules/text-decoder/LICENSE +201 -0
  182. package/node_modules/text-decoder/README.md +36 -0
  183. package/node_modules/text-decoder/index.js +64 -0
  184. package/node_modules/text-decoder/lib/browser-decoder.js +17 -0
  185. package/node_modules/text-decoder/lib/pass-through-decoder.js +19 -0
  186. package/node_modules/text-decoder/lib/utf8-decoder.js +104 -0
  187. package/node_modules/text-decoder/package.json +38 -0
  188. package/package.json +1 -1
  189. package/proto/cline/account.proto +10 -8
  190. package/proto/cline/browser.proto +3 -1
  191. package/proto/cline/checkpoints.proto +5 -3
  192. package/proto/cline/commands.proto +4 -2
  193. package/proto/cline/common.proto +5 -7
  194. package/proto/cline/dictation.proto +3 -1
  195. package/proto/cline/file.proto +36 -34
  196. package/proto/cline/hooks.proto +3 -2
  197. package/proto/cline/mcp.proto +6 -4
  198. package/proto/cline/models.proto +189 -19
  199. package/proto/cline/oca_account.proto +6 -7
  200. package/proto/cline/slash.proto +3 -1
  201. package/proto/cline/state.proto +144 -292
  202. package/proto/cline/task.proto +4 -2
  203. package/proto/cline/ui.proto +25 -24
  204. package/proto/cline/web.proto +3 -1
  205. package/proto/descriptor_set.pb +0 -0
  206. package/proto/host/diff.proto +5 -4
  207. package/proto/host/env.proto +8 -7
  208. package/proto/host/testing.proto +3 -3
  209. package/proto/host/window.proto +2 -2
  210. package/proto/host/workspace.proto +13 -12
  211. package/node_modules/base64-js/README.md +0 -34
  212. package/node_modules/base64-js/base64js.min.js +0 -1
  213. package/node_modules/base64-js/index.d.ts +0 -3
  214. package/node_modules/base64-js/index.js +0 -150
  215. package/node_modules/base64-js/package.json +0 -47
  216. package/node_modules/better-sqlite3/src/better_sqlite3.hpp +0 -1036
  217. package/node_modules/bl/.travis.yml +0 -17
  218. package/node_modules/bl/BufferList.js +0 -396
  219. package/node_modules/bl/LICENSE.md +0 -13
  220. package/node_modules/bl/README.md +0 -247
  221. package/node_modules/bl/bl.js +0 -84
  222. package/node_modules/bl/package.json +0 -37
  223. package/node_modules/bl/test/convert.js +0 -21
  224. package/node_modules/bl/test/indexOf.js +0 -492
  225. package/node_modules/bl/test/isBufferList.js +0 -32
  226. package/node_modules/bl/test/test.js +0 -869
  227. package/node_modules/buffer/AUTHORS.md +0 -70
  228. package/node_modules/buffer/LICENSE +0 -21
  229. package/node_modules/buffer/README.md +0 -410
  230. package/node_modules/buffer/index.d.ts +0 -186
  231. package/node_modules/buffer/index.js +0 -1817
  232. package/node_modules/buffer/package.json +0 -96
  233. package/node_modules/chownr/LICENSE +0 -15
  234. package/node_modules/chownr/README.md +0 -3
  235. package/node_modules/chownr/chownr.js +0 -167
  236. package/node_modules/chownr/package.json +0 -29
  237. package/node_modules/fs-constants/README.md +0 -26
  238. package/node_modules/fs-constants/browser.js +0 -1
  239. package/node_modules/fs-constants/index.js +0 -1
  240. package/node_modules/fs-constants/package.json +0 -19
  241. package/node_modules/ieee754/LICENSE +0 -11
  242. package/node_modules/ieee754/README.md +0 -51
  243. package/node_modules/ieee754/index.d.ts +0 -10
  244. package/node_modules/ieee754/index.js +0 -85
  245. package/node_modules/ieee754/package.json +0 -52
  246. package/node_modules/inherits/LICENSE +0 -16
  247. package/node_modules/inherits/README.md +0 -42
  248. package/node_modules/inherits/inherits.js +0 -9
  249. package/node_modules/inherits/inherits_browser.js +0 -27
  250. package/node_modules/inherits/package.json +0 -29
  251. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  252. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  253. package/node_modules/readable-stream/LICENSE +0 -47
  254. package/node_modules/readable-stream/README.md +0 -106
  255. package/node_modules/readable-stream/errors-browser.js +0 -127
  256. package/node_modules/readable-stream/errors.js +0 -116
  257. package/node_modules/readable-stream/experimentalWarning.js +0 -17
  258. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  259. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  260. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  261. package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  262. package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  263. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  264. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  265. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  266. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  267. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  268. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  269. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  270. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  271. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  272. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  273. package/node_modules/readable-stream/package.json +0 -68
  274. package/node_modules/readable-stream/readable-browser.js +0 -9
  275. package/node_modules/readable-stream/readable.js +0 -16
  276. package/node_modules/string_decoder/LICENSE +0 -48
  277. package/node_modules/string_decoder/README.md +0 -47
  278. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  279. package/node_modules/string_decoder/package.json +0 -34
  280. package/node_modules/tar-fs/.travis.yml +0 -6
  281. package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  282. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  283. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  284. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  285. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  286. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  287. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  288. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  289. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  290. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  291. package/node_modules/tar-fs/test/index.js +0 -346
  292. package/node_modules/tar-stream/sandbox.js +0 -11
  293. package/node_modules/util-deprecate/History.md +0 -16
  294. package/node_modules/util-deprecate/LICENSE +0 -24
  295. package/node_modules/util-deprecate/README.md +0 -53
  296. package/node_modules/util-deprecate/browser.js +0 -67
  297. package/node_modules/util-deprecate/node.js +0 -6
  298. package/node_modules/util-deprecate/package.json +0 -27
  299. package/test-startup.sh +0 -14
@@ -0,0 +1,1119 @@
1
+ #include <assert.h>
2
+ #include <bare.h>
3
+ #include <js.h>
4
+ #include <stdlib.h>
5
+ #include <utf.h>
6
+ #include <uv.h>
7
+
8
+ static uv_rwlock_t bare_os_env_lock;
9
+
10
+ static uv_once_t bare_os_env_lock_guard = UV_ONCE_INIT;
11
+
12
+ static void
13
+ bare_os__on_env_lock_init(void) {
14
+ int err = uv_rwlock_init(&bare_os_env_lock);
15
+ assert(err == 0);
16
+ }
17
+
18
+ static js_value_t *
19
+ bare_os_type(js_env_t *env, js_callback_info_t *info) {
20
+ int err;
21
+
22
+ uv_utsname_t buffer;
23
+ err = uv_os_uname(&buffer);
24
+ if (err < 0) {
25
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
26
+ return NULL;
27
+ }
28
+
29
+ js_value_t *result;
30
+ err = js_create_string_utf8(env, (utf8_t *) buffer.sysname, -1, &result);
31
+ assert(err == 0);
32
+
33
+ return result;
34
+ }
35
+
36
+ static js_value_t *
37
+ bare_os_version(js_env_t *env, js_callback_info_t *info) {
38
+ int err;
39
+
40
+ uv_utsname_t buffer;
41
+ err = uv_os_uname(&buffer);
42
+ if (err < 0) {
43
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
44
+ return NULL;
45
+ }
46
+
47
+ js_value_t *result;
48
+ err = js_create_string_utf8(env, (utf8_t *) buffer.version, -1, &result);
49
+ assert(err == 0);
50
+
51
+ return result;
52
+ }
53
+
54
+ static js_value_t *
55
+ bare_os_release(js_env_t *env, js_callback_info_t *info) {
56
+ int err;
57
+
58
+ uv_utsname_t buffer;
59
+ err = uv_os_uname(&buffer);
60
+ if (err < 0) {
61
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
62
+ return NULL;
63
+ }
64
+
65
+ js_value_t *result;
66
+ err = js_create_string_utf8(env, (utf8_t *) buffer.release, -1, &result);
67
+ assert(err == 0);
68
+
69
+ return result;
70
+ }
71
+
72
+ static js_value_t *
73
+ bare_os_machine(js_env_t *env, js_callback_info_t *info) {
74
+ int err;
75
+
76
+ uv_utsname_t buffer;
77
+ err = uv_os_uname(&buffer);
78
+ if (err < 0) {
79
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
80
+ return NULL;
81
+ }
82
+
83
+ js_value_t *result;
84
+ err = js_create_string_utf8(env, (utf8_t *) buffer.machine, -1, &result);
85
+ assert(err == 0);
86
+
87
+ return result;
88
+ }
89
+
90
+ static js_value_t *
91
+ bare_os_exec_path(js_env_t *env, js_callback_info_t *info) {
92
+ int err;
93
+
94
+ size_t len = 4096;
95
+ char exec_path[4096];
96
+
97
+ err = uv_exepath(exec_path, &len);
98
+ if (err < 0) {
99
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
100
+ return NULL;
101
+ }
102
+
103
+ js_value_t *result;
104
+ err = js_create_string_utf8(env, (utf8_t *) exec_path, len, &result);
105
+ assert(err == 0);
106
+
107
+ return result;
108
+ }
109
+
110
+ static js_value_t *
111
+ bare_os_pid(js_env_t *env, js_callback_info_t *info) {
112
+ int err;
113
+
114
+ js_value_t *result;
115
+ err = js_create_uint32(env, uv_os_getpid(), &result);
116
+ assert(err == 0);
117
+
118
+ return result;
119
+ }
120
+
121
+ static js_value_t *
122
+ bare_os_ppid(js_env_t *env, js_callback_info_t *info) {
123
+ int err;
124
+
125
+ js_value_t *result;
126
+ err = js_create_uint32(env, uv_os_getppid(), &result);
127
+ assert(err == 0);
128
+
129
+ return result;
130
+ }
131
+
132
+ static js_value_t *
133
+ bare_os_cwd(js_env_t *env, js_callback_info_t *info) {
134
+ int err;
135
+
136
+ size_t len = 4096;
137
+ char cwd[4096];
138
+
139
+ err = uv_cwd(cwd, &len);
140
+ if (err < 0) {
141
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
142
+ return NULL;
143
+ }
144
+
145
+ js_value_t *result;
146
+ err = js_create_string_utf8(env, (utf8_t *) cwd, len, &result);
147
+ assert(err == 0);
148
+
149
+ return result;
150
+ }
151
+
152
+ static js_value_t *
153
+ bare_os_chdir(js_env_t *env, js_callback_info_t *info) {
154
+ int err;
155
+
156
+ size_t argc = 1;
157
+ js_value_t *argv[1];
158
+
159
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
160
+ assert(err == 0);
161
+
162
+ assert(argc == 1);
163
+
164
+ utf8_t dir[4096];
165
+ err = js_get_value_string_utf8(env, argv[0], dir, 4096, NULL);
166
+ assert(err == 0);
167
+
168
+ err = uv_chdir((char *) dir);
169
+ if (err < 0) {
170
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
171
+ return NULL;
172
+ }
173
+
174
+ return NULL;
175
+ }
176
+
177
+ static js_value_t *
178
+ bare_os_tmpdir(js_env_t *env, js_callback_info_t *info) {
179
+ int err;
180
+
181
+ size_t len = 4096;
182
+ char tmpdir[4096];
183
+
184
+ err = uv_os_tmpdir(tmpdir, &len);
185
+ if (err < 0) {
186
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
187
+ return NULL;
188
+ }
189
+
190
+ js_value_t *result;
191
+ err = js_create_string_utf8(env, (utf8_t *) tmpdir, len, &result);
192
+ assert(err == 0);
193
+
194
+ return result;
195
+ }
196
+
197
+ static js_value_t *
198
+ bare_os_homedir(js_env_t *env, js_callback_info_t *info) {
199
+ int err;
200
+
201
+ size_t len = 4096;
202
+ char homedir[4096];
203
+
204
+ err = uv_os_homedir(homedir, &len);
205
+ if (err < 0) {
206
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
207
+ return NULL;
208
+ }
209
+
210
+ js_value_t *result;
211
+ err = js_create_string_utf8(env, (utf8_t *) homedir, len, &result);
212
+ assert(err == 0);
213
+
214
+ return result;
215
+ }
216
+
217
+ static js_value_t *
218
+ bare_os_hostname(js_env_t *env, js_callback_info_t *info) {
219
+ int err;
220
+
221
+ size_t len = UV_MAXHOSTNAMESIZE;
222
+ char hostname[UV_MAXHOSTNAMESIZE];
223
+
224
+ err = uv_os_gethostname(hostname, &len);
225
+ if (err < 0) {
226
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
227
+ return NULL;
228
+ }
229
+
230
+ js_value_t *result;
231
+ err = js_create_string_utf8(env, (utf8_t *) hostname, len, &result);
232
+ assert(err == 0);
233
+
234
+ return result;
235
+ }
236
+
237
+ static js_value_t *
238
+ bare_os_user_info(js_env_t *env, js_callback_info_t *info) {
239
+ int err;
240
+
241
+ uv_passwd_t pwd;
242
+ err = uv_os_get_passwd(&pwd);
243
+ if (err != 0) {
244
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
245
+ return NULL;
246
+ }
247
+
248
+ js_value_t *result;
249
+ err = js_create_object(env, &result);
250
+ assert(err == 0);
251
+
252
+ js_value_t *uid;
253
+ err = js_create_int32(env, pwd.uid, &uid);
254
+ assert(err == 0);
255
+
256
+ err = js_set_named_property(env, result, "uid", uid);
257
+ assert(err == 0);
258
+
259
+ js_value_t *gid;
260
+ err = js_create_int32(env, pwd.gid, &gid);
261
+ assert(err == 0);
262
+
263
+ err = js_set_named_property(env, result, "gid", gid);
264
+ assert(err == 0);
265
+
266
+ js_value_t *username;
267
+ err = js_create_string_utf8(env, (utf8_t *) pwd.username, strlen(pwd.username), &username);
268
+ assert(err == 0);
269
+
270
+ err = js_set_named_property(env, result, "username", username);
271
+ assert(err == 0);
272
+
273
+ js_value_t *homedir;
274
+ err = js_create_string_utf8(env, (utf8_t *) pwd.homedir, strlen(pwd.homedir), &homedir);
275
+ assert(err == 0);
276
+
277
+ err = js_set_named_property(env, result, "homedir", homedir);
278
+ assert(err == 0);
279
+
280
+ js_value_t *shell;
281
+
282
+ if (pwd.shell == NULL) {
283
+ err = js_get_null(env, &shell);
284
+ assert(err == 0);
285
+ } else {
286
+ err = js_create_string_utf8(env, (utf8_t *) pwd.shell, -1, &shell);
287
+ assert(err == 0);
288
+ }
289
+
290
+ err = js_set_named_property(env, result, "shell", shell);
291
+ assert(err == 0);
292
+
293
+ uv_os_free_passwd(&pwd);
294
+
295
+ return result;
296
+ }
297
+
298
+ static js_value_t *
299
+ bare_os_kill(js_env_t *env, js_callback_info_t *info) {
300
+ int err;
301
+
302
+ size_t argc = 2;
303
+ js_value_t *argv[2];
304
+
305
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
306
+ assert(err == 0);
307
+
308
+ assert(argc == 2);
309
+
310
+ uint32_t pid;
311
+ err = js_get_value_uint32(env, argv[0], &pid);
312
+ assert(err == 0);
313
+
314
+ uint32_t signum;
315
+ err = js_get_value_uint32(env, argv[1], &signum);
316
+ assert(err == 0);
317
+
318
+ err = uv_kill(pid, signum);
319
+ if (err < 0) {
320
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
321
+ return NULL;
322
+ }
323
+
324
+ return NULL;
325
+ }
326
+
327
+ static js_value_t *
328
+ bare_os_available_parallelism(js_env_t *env, js_callback_info_t *info) {
329
+ int err;
330
+
331
+ js_value_t *result;
332
+ err = js_create_int64(env, uv_available_parallelism(), &result);
333
+ assert(err == 0);
334
+
335
+ return result;
336
+ }
337
+
338
+ static js_value_t *
339
+ bare_os_cpu_usage(js_env_t *env, js_callback_info_t *info) {
340
+ int err;
341
+
342
+ uv_rusage_t usage;
343
+ err = uv_getrusage(&usage);
344
+ assert(err == 0);
345
+
346
+ js_value_t *result;
347
+ err = js_create_object(env, &result);
348
+ assert(err == 0);
349
+
350
+ #define V(name, property) \
351
+ { \
352
+ uv_timeval_t time = usage.ru_##property; \
353
+ \
354
+ js_value_t *value; \
355
+ err = js_create_int64(env, time.tv_sec * 1e6 + time.tv_usec, &value); \
356
+ assert(err == 0); \
357
+ \
358
+ err = js_set_named_property(env, result, name, value); \
359
+ assert(err == 0); \
360
+ }
361
+
362
+ V("user", utime)
363
+ V("system", stime)
364
+ #undef V
365
+
366
+ return result;
367
+ }
368
+
369
+ static js_value_t *
370
+ bare_os_cpu_usage_thread(js_env_t *env, js_callback_info_t *info) {
371
+ int err;
372
+
373
+ uv_rusage_t usage;
374
+ err = uv_getrusage_thread(&usage);
375
+ assert(err == 0);
376
+
377
+ js_value_t *result;
378
+ err = js_create_object(env, &result);
379
+ assert(err == 0);
380
+
381
+ #define V(name, property) \
382
+ { \
383
+ uv_timeval_t time = usage.ru_##property; \
384
+ \
385
+ js_value_t *value; \
386
+ err = js_create_int64(env, time.tv_sec * 1e6 + time.tv_usec, &value); \
387
+ assert(err == 0); \
388
+ \
389
+ err = js_set_named_property(env, result, name, value); \
390
+ assert(err == 0); \
391
+ }
392
+
393
+ V("user", utime)
394
+ V("system", stime)
395
+ #undef V
396
+
397
+ return result;
398
+ }
399
+
400
+ static js_value_t *
401
+ bare_os_resource_usage(js_env_t *env, js_callback_info_t *info) {
402
+ int err;
403
+
404
+ uv_rusage_t usage;
405
+ err = uv_getrusage(&usage);
406
+ assert(err == 0);
407
+
408
+ js_value_t *result;
409
+ err = js_create_object(env, &result);
410
+ assert(err == 0);
411
+
412
+ #define V(name, property) \
413
+ { \
414
+ uv_timeval_t time = usage.ru_##property; \
415
+ \
416
+ js_value_t *value; \
417
+ err = js_create_int64(env, time.tv_sec * 1e6 + time.tv_usec, &value); \
418
+ assert(err == 0); \
419
+ \
420
+ err = js_set_named_property(env, result, name, value); \
421
+ assert(err == 0); \
422
+ }
423
+
424
+ V("userCPUTime", utime)
425
+ V("systemCPUTime", stime)
426
+ #undef V
427
+
428
+ #define V(name, property) \
429
+ { \
430
+ js_value_t *value; \
431
+ err = js_create_int64(env, usage.ru_##property, &value); \
432
+ assert(err == 0); \
433
+ \
434
+ err = js_set_named_property(env, result, name, value); \
435
+ assert(err == 0); \
436
+ }
437
+
438
+ V("maxRSS", maxrss)
439
+ V("sharedMemorySize", ixrss)
440
+ V("unsharedDataSize", idrss)
441
+ V("unsharedStackSize", isrss)
442
+ V("minorPageFault", minflt)
443
+ V("majorPageFault", majflt)
444
+ V("swappedOut", nswap)
445
+ V("fsRead", inblock)
446
+ V("fsWrite", oublock)
447
+ V("ipcSent", msgsnd)
448
+ V("ipcReceived", msgrcv)
449
+ V("signalsCount", nsignals)
450
+ V("voluntaryContextSwitches", nvcsw)
451
+ V("involuntaryContextSwitches", nivcsw)
452
+ #undef V
453
+
454
+ return result;
455
+ }
456
+
457
+ static js_value_t *
458
+ bare_os_memory_usage(js_env_t *env, js_callback_info_t *info) {
459
+ int err;
460
+
461
+ js_heap_statistics_t stats = {
462
+ .version = 1,
463
+
464
+ // Since 0
465
+ .total_heap_size = -1,
466
+ .used_heap_size = -1,
467
+
468
+ // Since 1
469
+ .external_memory = -1,
470
+ };
471
+
472
+ err = js_get_heap_statistics(env, &stats);
473
+ assert(err == 0);
474
+
475
+ js_value_t *result;
476
+ err = js_create_object(env, &result);
477
+ assert(err == 0);
478
+
479
+ size_t rss;
480
+ err = uv_resident_set_memory(&rss);
481
+ assert(err == 0);
482
+
483
+ js_value_t *value;
484
+ err = js_create_int64(env, rss, &value);
485
+ assert(err == 0);
486
+
487
+ err = js_set_named_property(env, result, "rss", value);
488
+ assert(err == 0);
489
+
490
+ #define V(name, property) \
491
+ { \
492
+ if (stats.property != (size_t) -1) { \
493
+ js_value_t *value; \
494
+ err = js_create_int64(env, stats.property, &value); \
495
+ assert(err == 0); \
496
+ \
497
+ err = js_set_named_property(env, result, name, value); \
498
+ assert(err == 0); \
499
+ } \
500
+ }
501
+
502
+ V("heapTotal", total_heap_size)
503
+ V("heapUsed", used_heap_size)
504
+ V("external", external_memory)
505
+ #undef V
506
+
507
+ return result;
508
+ }
509
+
510
+ static js_value_t *
511
+ bare_os_freemem(js_env_t *env, js_callback_info_t *info) {
512
+ int err;
513
+
514
+ js_value_t *result;
515
+ err = js_create_int64(env, uv_get_free_memory(), &result);
516
+ assert(err == 0);
517
+
518
+ return result;
519
+ }
520
+
521
+ static js_value_t *
522
+ bare_os_totalmem(js_env_t *env, js_callback_info_t *info) {
523
+ int err;
524
+
525
+ js_value_t *result;
526
+ err = js_create_int64(env, uv_get_total_memory(), &result);
527
+ assert(err == 0);
528
+
529
+ return result;
530
+ }
531
+
532
+ static js_value_t *
533
+ bare_os_uptime(js_env_t *env, js_callback_info_t *info) {
534
+ int err;
535
+
536
+ double uptime;
537
+ err = uv_uptime(&uptime);
538
+ assert(err == 0);
539
+
540
+ js_value_t *result;
541
+ err = js_create_double(env, uptime, &result);
542
+ assert(err == 0);
543
+
544
+ return result;
545
+ }
546
+
547
+ static js_value_t *
548
+ bare_os_loadavg(js_env_t *env, js_callback_info_t *info) {
549
+ int err;
550
+
551
+ double *data;
552
+
553
+ js_value_t *arraybuffer;
554
+ err = js_create_arraybuffer(env, sizeof(double) * 3, (void **) &data, &arraybuffer);
555
+ assert(err == 0);
556
+
557
+ js_value_t *result;
558
+ err = js_create_typedarray(env, js_float64array, 3, arraybuffer, 0, &result);
559
+ assert(err == 0);
560
+
561
+ uv_loadavg(data);
562
+
563
+ return result;
564
+ }
565
+
566
+ static js_value_t *
567
+ bare_os_cpus(js_env_t *env, js_callback_info_t *info) {
568
+ int err;
569
+
570
+ uv_cpu_info_t *cpus;
571
+ int len;
572
+ err = uv_cpu_info(&cpus, &len);
573
+ if (err < 0) {
574
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
575
+ return NULL;
576
+ }
577
+
578
+ js_value_t *result;
579
+ err = js_create_array_with_length(env, len, &result);
580
+ assert(err == 0);
581
+
582
+ for (uint32_t i = 0, n = len; i < n; i++) {
583
+ uv_cpu_info_t cpu = cpus[i];
584
+
585
+ js_value_t *item;
586
+ err = js_create_object(env, &item);
587
+ assert(err == 0);
588
+
589
+ err = js_set_element(env, result, i, item);
590
+ assert(err == 0);
591
+
592
+ #define V(name, type, ...) \
593
+ { \
594
+ js_value_t *val; \
595
+ err = type(env, ##__VA_ARGS__, &val); \
596
+ assert(err == 0); \
597
+ err = js_set_named_property(env, item, name, val); \
598
+ assert(err == 0); \
599
+ }
600
+
601
+ V("model", js_create_string_utf8, (const utf8_t *) cpu.model, -1)
602
+ V("speed", js_create_double, cpu.speed)
603
+ V("times", js_create_object)
604
+ #undef V
605
+
606
+ js_value_t *times;
607
+ err = js_get_named_property(env, item, "times", &times);
608
+ assert(err == 0);
609
+
610
+ #define V(name) \
611
+ { \
612
+ js_value_t *val; \
613
+ err = js_create_int64(env, cpu.cpu_times.name, &val); \
614
+ assert(err == 0); \
615
+ err = js_set_named_property(env, times, #name, val); \
616
+ assert(err == 0); \
617
+ }
618
+
619
+ V(user)
620
+ V(nice)
621
+ V(sys)
622
+ V(idle)
623
+ V(irq)
624
+ #undef V
625
+ }
626
+
627
+ uv_free_cpu_info(cpus, len);
628
+
629
+ return result;
630
+ }
631
+
632
+ static js_value_t *
633
+ bare_os_get_process_title(js_env_t *env, js_callback_info_t *info) {
634
+ int err;
635
+
636
+ char title[256];
637
+ err = uv_get_process_title(title, 256);
638
+ if (err < 0) {
639
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
640
+ return NULL;
641
+ }
642
+
643
+ js_value_t *result;
644
+ err = js_create_string_utf8(env, (utf8_t *) title, -1, &result);
645
+ assert(err == 0);
646
+
647
+ return result;
648
+ }
649
+
650
+ static js_value_t *
651
+ bare_os_set_process_title(js_env_t *env, js_callback_info_t *info) {
652
+ int err;
653
+
654
+ size_t argc = 1;
655
+ js_value_t *argv[1];
656
+
657
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
658
+ assert(err == 0);
659
+
660
+ assert(argc == 1);
661
+
662
+ utf8_t data[256];
663
+ err = js_get_value_string_utf8(env, argv[0], data, 256, NULL);
664
+ assert(err == 0);
665
+
666
+ err = uv_set_process_title((char *) data);
667
+ assert(err == 0);
668
+
669
+ return NULL;
670
+ }
671
+
672
+ static js_value_t *
673
+ bare_os_get_env_keys(js_env_t *env, js_callback_info_t *info) {
674
+ int err;
675
+
676
+ uv_env_item_t *items;
677
+ int len;
678
+
679
+ uv_rwlock_rdlock(&bare_os_env_lock);
680
+
681
+ err = uv_os_environ(&items, &len);
682
+
683
+ uv_rwlock_rdunlock(&bare_os_env_lock);
684
+
685
+ if (err < 0) {
686
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
687
+ return NULL;
688
+ }
689
+
690
+ js_value_t *result;
691
+ err = js_create_array_with_length(env, len, &result);
692
+ assert(err == 0);
693
+
694
+ for (int i = 0; i < len; i++) {
695
+ uv_env_item_t *item = &items[i];
696
+
697
+ js_value_t *val;
698
+ err = js_create_string_utf8(env, (utf8_t *) item->name, -1, &val);
699
+ assert(err == 0);
700
+
701
+ err = js_set_element(env, result, i, val);
702
+ assert(err == 0);
703
+ }
704
+
705
+ uv_os_free_environ(items, len);
706
+
707
+ return result;
708
+ }
709
+
710
+ static js_value_t *
711
+ bare_os_get_env(js_env_t *env, js_callback_info_t *info) {
712
+ int err;
713
+
714
+ size_t argc = 1;
715
+ js_value_t *argv[1];
716
+
717
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
718
+ assert(err == 0);
719
+
720
+ assert(argc == 1);
721
+
722
+ size_t name_len;
723
+ err = js_get_value_string_utf8(env, argv[0], NULL, 0, &name_len);
724
+ assert(err == 0);
725
+
726
+ name_len += 1 /* NULL */;
727
+
728
+ utf8_t *name = malloc(name_len);
729
+ err = js_get_value_string_utf8(env, argv[0], name, name_len, &name_len);
730
+ assert(err == 0);
731
+
732
+ uv_rwlock_rdlock(&bare_os_env_lock);
733
+
734
+ size_t value_len = 256;
735
+ char *value = malloc(value_len);
736
+ err = uv_os_getenv((char *) name, value, &value_len);
737
+
738
+ js_value_t *result;
739
+
740
+ if (err == UV_ENOENT) {
741
+ err = js_get_undefined(env, &result);
742
+ assert(err == 0);
743
+ } else {
744
+ if (err == UV_ENOBUFS) {
745
+ value = realloc(value, value_len);
746
+
747
+ err = uv_os_getenv((char *) name, value, &value_len);
748
+ assert(err == 0);
749
+ } else if (err < 0) {
750
+ uv_rwlock_rdunlock(&bare_os_env_lock);
751
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
752
+ free(name);
753
+ return NULL;
754
+ }
755
+
756
+ err = js_create_string_utf8(env, (utf8_t *) value, value_len, &result);
757
+ assert(err == 0);
758
+ }
759
+
760
+ uv_rwlock_rdunlock(&bare_os_env_lock);
761
+
762
+ free(name);
763
+ free(value);
764
+
765
+ return result;
766
+ }
767
+
768
+ static js_value_t *
769
+ bare_os_has_env(js_env_t *env, js_callback_info_t *info) {
770
+ int err;
771
+
772
+ size_t argc = 1;
773
+ js_value_t *argv[1];
774
+
775
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
776
+ assert(err == 0);
777
+
778
+ assert(argc == 1);
779
+
780
+ size_t name_len;
781
+ err = js_get_value_string_utf8(env, argv[0], NULL, 0, &name_len);
782
+ assert(err == 0);
783
+
784
+ utf8_t *name = malloc(++name_len);
785
+ err = js_get_value_string_utf8(env, argv[0], name, name_len, &name_len);
786
+ assert(err == 0);
787
+
788
+ uv_rwlock_rdlock(&bare_os_env_lock);
789
+
790
+ size_t value_len = 1;
791
+ char value[1];
792
+ err = uv_os_getenv((char *) name, value, &value_len);
793
+
794
+ uv_rwlock_rdunlock(&bare_os_env_lock);
795
+
796
+ if (err != 0 && err != UV_ENOENT && err != UV_ENOBUFS) {
797
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
798
+ free(name);
799
+ return NULL;
800
+ }
801
+
802
+ free(name);
803
+
804
+ js_value_t *result;
805
+ err = js_get_boolean(env, err != UV_ENOENT, &result);
806
+ assert(err == 0);
807
+
808
+ return result;
809
+ }
810
+
811
+ static js_value_t *
812
+ bare_os_set_env(js_env_t *env, js_callback_info_t *info) {
813
+ int err;
814
+
815
+ size_t argc = 2;
816
+ js_value_t *argv[2];
817
+
818
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
819
+ assert(err == 0);
820
+
821
+ assert(argc == 2);
822
+
823
+ size_t name_len;
824
+ err = js_get_value_string_utf8(env, argv[0], NULL, 0, &name_len);
825
+ assert(err == 0);
826
+
827
+ utf8_t *name = malloc(++name_len);
828
+ err = js_get_value_string_utf8(env, argv[0], name, name_len, &name_len);
829
+ assert(err == 0);
830
+
831
+ size_t value_len;
832
+ err = js_get_value_string_utf8(env, argv[1], NULL, 0, &value_len);
833
+ assert(err == 0);
834
+
835
+ utf8_t *value = malloc(++value_len);
836
+ err = js_get_value_string_utf8(env, argv[1], value, value_len, &value_len);
837
+ assert(err == 0);
838
+
839
+ uv_rwlock_wrlock(&bare_os_env_lock);
840
+
841
+ err = uv_os_setenv((char *) name, (char *) value);
842
+
843
+ uv_rwlock_wrunlock(&bare_os_env_lock);
844
+
845
+ if (err < 0) {
846
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
847
+ free(name);
848
+ free(value);
849
+ return NULL;
850
+ }
851
+
852
+ free(name);
853
+ free(value);
854
+
855
+ return NULL;
856
+ }
857
+
858
+ static js_value_t *
859
+ bare_os_unset_env(js_env_t *env, js_callback_info_t *info) {
860
+ int err;
861
+
862
+ size_t argc = 1;
863
+ js_value_t *argv[1];
864
+
865
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
866
+ assert(err == 0);
867
+
868
+ assert(argc == 1);
869
+
870
+ size_t name_len;
871
+ err = js_get_value_string_utf8(env, argv[0], NULL, 0, &name_len);
872
+ assert(err == 0);
873
+
874
+ utf8_t *name = malloc(++name_len);
875
+ err = js_get_value_string_utf8(env, argv[0], name, name_len, &name_len);
876
+ assert(err == 0);
877
+
878
+ uv_rwlock_wrlock(&bare_os_env_lock);
879
+
880
+ err = uv_os_unsetenv((char *) name);
881
+
882
+ uv_rwlock_wrunlock(&bare_os_env_lock);
883
+
884
+ if (err < 0) {
885
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
886
+ free(name);
887
+ return NULL;
888
+ }
889
+
890
+ free(name);
891
+
892
+ return NULL;
893
+ }
894
+
895
+ static js_value_t *
896
+ bare_os_exports(js_env_t *env, js_value_t *exports) {
897
+ uv_once(&bare_os_env_lock_guard, bare_os__on_env_lock_init);
898
+
899
+ int err;
900
+
901
+ #define V(name, str) \
902
+ { \
903
+ js_value_t *val; \
904
+ err = js_create_string_utf8(env, (utf8_t *) str, -1, &val); \
905
+ assert(err == 0); \
906
+ err = js_set_named_property(env, exports, name, val); \
907
+ assert(err == 0); \
908
+ }
909
+
910
+ V("platform", BARE_PLATFORM)
911
+ V("arch", BARE_ARCH)
912
+ #undef V
913
+
914
+ #define V(name, fn) \
915
+ { \
916
+ js_value_t *val; \
917
+ err = js_create_function(env, name, -1, fn, NULL, &val); \
918
+ assert(err == 0); \
919
+ err = js_set_named_property(env, exports, name, val); \
920
+ assert(err == 0); \
921
+ }
922
+
923
+ V("type", bare_os_type)
924
+ V("version", bare_os_version)
925
+ V("release", bare_os_release)
926
+ V("machine", bare_os_machine)
927
+ V("execPath", bare_os_exec_path)
928
+ V("pid", bare_os_pid)
929
+ V("ppid", bare_os_ppid)
930
+ V("cwd", bare_os_cwd)
931
+ V("chdir", bare_os_chdir)
932
+ V("tmpdir", bare_os_tmpdir)
933
+ V("homedir", bare_os_homedir)
934
+ V("hostname", bare_os_hostname)
935
+ V("kill", bare_os_kill)
936
+ V("availableParallelism", bare_os_available_parallelism)
937
+ V("cpuUsage", bare_os_cpu_usage)
938
+ V("threadCpuUsage", bare_os_cpu_usage_thread)
939
+ V("resourceUsage", bare_os_resource_usage)
940
+ V("memoryUsage", bare_os_memory_usage)
941
+ V("freemem", bare_os_freemem)
942
+ V("totalmem", bare_os_totalmem)
943
+ V("uptime", bare_os_uptime)
944
+ V("loadavg", bare_os_loadavg)
945
+ V("cpus", bare_os_cpus)
946
+ V("getProcessTitle", bare_os_get_process_title)
947
+ V("setProcessTitle", bare_os_set_process_title)
948
+ V("getEnvKeys", bare_os_get_env_keys)
949
+ V("getEnv", bare_os_get_env)
950
+ V("hasEnv", bare_os_get_env)
951
+ V("setEnv", bare_os_set_env)
952
+ V("unsetEnv", bare_os_unset_env)
953
+ V("userInfo", bare_os_user_info)
954
+ #undef V
955
+
956
+ const union {
957
+ uint8_t u8[2];
958
+ uint16_t u16;
959
+ } byte_order = {{1, 0}};
960
+
961
+ js_value_t *is_little_endian;
962
+ err = js_get_boolean(env, byte_order.u16 == 1, &is_little_endian);
963
+ assert(err == 0);
964
+
965
+ err = js_set_named_property(env, exports, "isLittleEndian", is_little_endian);
966
+ assert(err == 0);
967
+
968
+ js_value_t *signals;
969
+ err = js_create_object(env, &signals);
970
+ assert(err == 0);
971
+
972
+ err = js_set_named_property(env, exports, "signals", signals);
973
+ assert(err == 0);
974
+
975
+ #define V(name) \
976
+ { \
977
+ js_value_t *val; \
978
+ err = js_create_uint32(env, name, &val); \
979
+ assert(err == 0); \
980
+ err = js_set_named_property(env, signals, #name, val); \
981
+ assert(err == 0); \
982
+ }
983
+
984
+ #ifdef SIGHUP
985
+ V(SIGHUP);
986
+ #endif
987
+ #ifdef SIGINT
988
+ V(SIGINT);
989
+ #endif
990
+ #ifdef SIGQUIT
991
+ V(SIGQUIT);
992
+ #endif
993
+ #ifdef SIGILL
994
+ V(SIGILL);
995
+ #endif
996
+ #ifdef SIGTRAP
997
+ V(SIGTRAP);
998
+ #endif
999
+ #ifdef SIGABRT
1000
+ V(SIGABRT);
1001
+ #endif
1002
+ #ifdef SIGIOT
1003
+ V(SIGIOT);
1004
+ #endif
1005
+ #ifdef SIGBUS
1006
+ V(SIGBUS);
1007
+ #endif
1008
+ #ifdef SIGFPE
1009
+ V(SIGFPE);
1010
+ #endif
1011
+ #ifdef SIGKILL
1012
+ V(SIGKILL);
1013
+ #endif
1014
+ #ifdef SIGUSR1
1015
+ V(SIGUSR1);
1016
+ #endif
1017
+ #ifdef SIGSEGV
1018
+ V(SIGSEGV);
1019
+ #endif
1020
+ #ifdef SIGUSR2
1021
+ V(SIGUSR2);
1022
+ #endif
1023
+ #ifdef SIGPIPE
1024
+ V(SIGPIPE);
1025
+ #endif
1026
+ #ifdef SIGALRM
1027
+ V(SIGALRM);
1028
+ #endif
1029
+ #ifdef SIGTERM
1030
+ V(SIGTERM);
1031
+ #endif
1032
+ #ifdef SIGCHLD
1033
+ V(SIGCHLD);
1034
+ #endif
1035
+ #ifdef SIGSTKFLT
1036
+ V(SIGSTKFLT);
1037
+ #endif
1038
+ #ifdef SIGCONT
1039
+ V(SIGCONT);
1040
+ #endif
1041
+ #ifdef SIGSTOP
1042
+ V(SIGSTOP);
1043
+ #endif
1044
+ #ifdef SIGTSTP
1045
+ V(SIGTSTP);
1046
+ #endif
1047
+ #ifdef SIGBREAK
1048
+ V(SIGBREAK);
1049
+ #endif
1050
+ #ifdef SIGTTIN
1051
+ V(SIGTTIN);
1052
+ #endif
1053
+ #ifdef SIGTTOU
1054
+ V(SIGTTOU);
1055
+ #endif
1056
+ #ifdef SIGURG
1057
+ V(SIGURG);
1058
+ #endif
1059
+ #ifdef SIGXCPU
1060
+ V(SIGXCPU);
1061
+ #endif
1062
+ #ifdef SIGXFSZ
1063
+ V(SIGXFSZ);
1064
+ #endif
1065
+ #ifdef SIGVTALRM
1066
+ V(SIGVTALRM);
1067
+ #endif
1068
+ #ifdef SIGPROF
1069
+ V(SIGPROF);
1070
+ #endif
1071
+ #ifdef SIGWINCH
1072
+ V(SIGWINCH);
1073
+ #endif
1074
+ #ifdef SIGIO
1075
+ V(SIGIO);
1076
+ #endif
1077
+ #ifdef SIGPOLL
1078
+ V(SIGPOLL);
1079
+ #endif
1080
+ #ifdef SIGLOST
1081
+ V(SIGLOST);
1082
+ #endif
1083
+ #ifdef SIGPWR
1084
+ V(SIGPWR);
1085
+ #endif
1086
+ #ifdef SIGINFO
1087
+ V(SIGINFO);
1088
+ #endif
1089
+ #ifdef SIGSYS
1090
+ V(SIGSYS);
1091
+ #endif
1092
+ #ifdef SIGUNUSED
1093
+ V(SIGUNUSED);
1094
+ #endif
1095
+ #undef V
1096
+
1097
+ js_value_t *errnos;
1098
+ err = js_create_object(env, &errnos);
1099
+ assert(err == 0);
1100
+
1101
+ err = js_set_named_property(env, exports, "errnos", errnos);
1102
+ assert(err == 0);
1103
+
1104
+ #define V(name, msg) \
1105
+ { \
1106
+ js_value_t *val; \
1107
+ err = js_create_int32(env, UV_##name, &val); \
1108
+ assert(err == 0); \
1109
+ err = js_set_named_property(env, errnos, #name, val); \
1110
+ assert(err == 0); \
1111
+ }
1112
+
1113
+ UV_ERRNO_MAP(V);
1114
+ #undef V
1115
+
1116
+ return exports;
1117
+ }
1118
+
1119
+ BARE_MODULE(bare_os, bare_os_exports)