goscript 0.1.1 → 0.1.2

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 (356) hide show
  1. package/cmd/goscript/cmd-test.go +104 -11
  2. package/cmd/goscript/cmd-test_test.go +1 -1
  3. package/cmd/goscript/cmd_compile.go +9 -0
  4. package/compiler/compile-request.go +31 -0
  5. package/compiler/compiler.go +1 -1
  6. package/compiler/compliance_test.go +0 -2
  7. package/compiler/config.go +2 -0
  8. package/compiler/gotest/package-result.go +2 -0
  9. package/compiler/gotest/request.go +85 -20
  10. package/compiler/gotest/runner.go +733 -96
  11. package/compiler/gotest/runner_test.go +647 -3
  12. package/compiler/lowered-program.go +9 -2
  13. package/compiler/lowering.go +2001 -345
  14. package/compiler/override-facts.go +77 -27
  15. package/compiler/override-registry.go +5 -4
  16. package/compiler/override-registry_test.go +135 -0
  17. package/compiler/package-graph_test.go +62 -7
  18. package/compiler/package-test-graph-variant.go +40 -16
  19. package/compiler/package-test-graph.go +0 -5
  20. package/compiler/package-test-graph_test.go +61 -3
  21. package/compiler/runtime-contract.go +40 -0
  22. package/compiler/semantic-model-types.go +16 -0
  23. package/compiler/semantic-model.go +336 -91
  24. package/compiler/semantic-model_test.go +50 -1
  25. package/compiler/service.go +9 -3
  26. package/compiler/skeleton_test.go +1921 -298
  27. package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
  28. package/compiler/tsworkspace/owner.go +8 -0
  29. package/compiler/tsworkspace/tool-process-other.go +14 -0
  30. package/compiler/tsworkspace/tool-process-unix.go +19 -0
  31. package/compiler/typescript-emitter.go +122 -9
  32. package/dist/gs/builtin/builtin.d.ts +20 -1
  33. package/dist/gs/builtin/builtin.js +246 -26
  34. package/dist/gs/builtin/builtin.js.map +1 -1
  35. package/dist/gs/builtin/channel.d.ts +24 -10
  36. package/dist/gs/builtin/channel.js +107 -25
  37. package/dist/gs/builtin/channel.js.map +1 -1
  38. package/dist/gs/builtin/defer.d.ts +1 -0
  39. package/dist/gs/builtin/defer.js +12 -2
  40. package/dist/gs/builtin/defer.js.map +1 -1
  41. package/dist/gs/builtin/hostio.d.ts +9 -0
  42. package/dist/gs/builtin/hostio.js +25 -0
  43. package/dist/gs/builtin/hostio.js.map +1 -1
  44. package/dist/gs/builtin/map.js +40 -6
  45. package/dist/gs/builtin/map.js.map +1 -1
  46. package/dist/gs/builtin/print.js.map +1 -1
  47. package/dist/gs/builtin/slice.d.ts +43 -9
  48. package/dist/gs/builtin/slice.js +437 -234
  49. package/dist/gs/builtin/slice.js.map +1 -1
  50. package/dist/gs/builtin/type.d.ts +2 -0
  51. package/dist/gs/builtin/type.js +47 -7
  52. package/dist/gs/builtin/type.js.map +1 -1
  53. package/dist/gs/builtin/varRef.d.ts +2 -0
  54. package/dist/gs/builtin/varRef.js.map +1 -1
  55. package/dist/gs/bytes/buffer.gs.js +28 -28
  56. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  57. package/dist/gs/bytes/iter.gs.js +13 -13
  58. package/dist/gs/bytes/iter.gs.js.map +1 -1
  59. package/dist/gs/compress/zlib/index.d.ts +26 -0
  60. package/dist/gs/compress/zlib/index.js +168 -0
  61. package/dist/gs/compress/zlib/index.js.map +1 -0
  62. package/dist/gs/context/context.d.ts +1 -1
  63. package/dist/gs/context/context.js +8 -3
  64. package/dist/gs/context/context.js.map +1 -1
  65. package/dist/gs/crypto/ecdh/index.d.ts +52 -0
  66. package/dist/gs/crypto/ecdh/index.js +226 -0
  67. package/dist/gs/crypto/ecdh/index.js.map +1 -0
  68. package/dist/gs/crypto/ed25519/index.d.ts +34 -0
  69. package/dist/gs/crypto/ed25519/index.js +160 -0
  70. package/dist/gs/crypto/ed25519/index.js.map +1 -0
  71. package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
  72. package/dist/gs/crypto/internal/constanttime/index.js +18 -0
  73. package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
  74. package/dist/gs/crypto/rand/index.d.ts +2 -0
  75. package/dist/gs/crypto/rand/index.js +85 -0
  76. package/dist/gs/crypto/rand/index.js.map +1 -1
  77. package/dist/gs/crypto/sha256/index.d.ts +8 -0
  78. package/dist/gs/crypto/sha256/index.js +118 -0
  79. package/dist/gs/crypto/sha256/index.js.map +1 -0
  80. package/dist/gs/crypto/sha512/index.d.ts +14 -0
  81. package/dist/gs/crypto/sha512/index.js +129 -0
  82. package/dist/gs/crypto/sha512/index.js.map +1 -0
  83. package/dist/gs/encoding/json/index.d.ts +3 -0
  84. package/dist/gs/encoding/json/index.js +15 -0
  85. package/dist/gs/encoding/json/index.js.map +1 -1
  86. package/dist/gs/errors/errors.js +29 -6
  87. package/dist/gs/errors/errors.js.map +1 -1
  88. package/dist/gs/fmt/fmt.js.map +1 -1
  89. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +7 -7
  90. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +52 -18
  91. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  92. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +56 -20
  93. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -1
  94. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +57 -3
  95. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +366 -1
  96. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -1
  97. package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
  98. package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
  99. package/dist/gs/github.com/aperturerobotics/util/conc/index.js.map +1 -0
  100. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  101. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.d.ts +3 -0
  102. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
  103. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
  104. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +3 -2
  105. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -1
  106. package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
  107. package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
  108. package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
  109. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
  110. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
  111. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
  112. package/dist/gs/go/token/index.js +11 -4
  113. package/dist/gs/go/token/index.js.map +1 -1
  114. package/dist/gs/hash/fnv/index.d.ts +57 -0
  115. package/dist/gs/hash/fnv/index.js +299 -0
  116. package/dist/gs/hash/fnv/index.js.map +1 -0
  117. package/dist/gs/hash/index.d.ts +17 -0
  118. package/dist/gs/hash/index.js +94 -0
  119. package/dist/gs/hash/index.js.map +1 -0
  120. package/dist/gs/io/fs/readlink.js +2 -6
  121. package/dist/gs/io/fs/readlink.js.map +1 -1
  122. package/dist/gs/io/fs/walk.js.map +1 -1
  123. package/dist/gs/io/io.js.map +1 -1
  124. package/dist/gs/iter/iter.d.ts +3 -2
  125. package/dist/gs/iter/iter.js.map +1 -1
  126. package/dist/gs/maps/iter.d.ts +5 -5
  127. package/dist/gs/maps/iter.js +48 -21
  128. package/dist/gs/maps/iter.js.map +1 -1
  129. package/dist/gs/maps/maps.d.ts +6 -6
  130. package/dist/gs/math/bits/index.js +14 -24
  131. package/dist/gs/math/bits/index.js.map +1 -1
  132. package/dist/gs/mime/index.js +3 -1
  133. package/dist/gs/mime/index.js.map +1 -1
  134. package/dist/gs/net/http/httptest/index.d.ts +20 -1
  135. package/dist/gs/net/http/httptest/index.js +83 -3
  136. package/dist/gs/net/http/httptest/index.js.map +1 -1
  137. package/dist/gs/net/http/index.d.ts +110 -6
  138. package/dist/gs/net/http/index.js +262 -16
  139. package/dist/gs/net/http/index.js.map +1 -1
  140. package/dist/gs/net/http/pprof/index.d.ts +8 -0
  141. package/dist/gs/net/http/pprof/index.js +59 -0
  142. package/dist/gs/net/http/pprof/index.js.map +1 -0
  143. package/dist/gs/os/error.gs.js +9 -7
  144. package/dist/gs/os/error.gs.js.map +1 -1
  145. package/dist/gs/os/types_js.gs.js +95 -15
  146. package/dist/gs/os/types_js.gs.js.map +1 -1
  147. package/dist/gs/path/filepath/match.js.map +1 -1
  148. package/dist/gs/path/filepath/path.d.ts +5 -3
  149. package/dist/gs/path/filepath/path.js +65 -10
  150. package/dist/gs/path/filepath/path.js.map +1 -1
  151. package/dist/gs/reflect/index.d.ts +3 -2
  152. package/dist/gs/reflect/index.js +2 -1
  153. package/dist/gs/reflect/index.js.map +1 -1
  154. package/dist/gs/reflect/iter.js +2 -2
  155. package/dist/gs/reflect/iter.js.map +1 -1
  156. package/dist/gs/reflect/map.js +26 -0
  157. package/dist/gs/reflect/map.js.map +1 -1
  158. package/dist/gs/reflect/type.d.ts +24 -5
  159. package/dist/gs/reflect/type.js +390 -38
  160. package/dist/gs/reflect/type.js.map +1 -1
  161. package/dist/gs/reflect/types.d.ts +1 -0
  162. package/dist/gs/reflect/types.js +3 -1
  163. package/dist/gs/reflect/types.js.map +1 -1
  164. package/dist/gs/reflect/value.d.ts +4 -1
  165. package/dist/gs/reflect/value.js +39 -1
  166. package/dist/gs/reflect/value.js.map +1 -1
  167. package/dist/gs/reflect/visiblefields.js +1 -1
  168. package/dist/gs/reflect/visiblefields.js.map +1 -1
  169. package/dist/gs/runtime/debug/index.d.ts +39 -0
  170. package/dist/gs/runtime/debug/index.js +58 -0
  171. package/dist/gs/runtime/debug/index.js.map +1 -1
  172. package/dist/gs/runtime/pprof/index.d.ts +20 -0
  173. package/dist/gs/runtime/pprof/index.js +85 -0
  174. package/dist/gs/runtime/pprof/index.js.map +1 -0
  175. package/dist/gs/runtime/trace/index.d.ts +19 -0
  176. package/dist/gs/runtime/trace/index.js +64 -0
  177. package/dist/gs/runtime/trace/index.js.map +1 -0
  178. package/dist/gs/slices/slices.d.ts +24 -9
  179. package/dist/gs/slices/slices.js +229 -24
  180. package/dist/gs/slices/slices.js.map +1 -1
  181. package/dist/gs/sort/slice.gs.d.ts +5 -3
  182. package/dist/gs/sort/slice.gs.js +55 -17
  183. package/dist/gs/sort/slice.gs.js.map +1 -1
  184. package/dist/gs/strings/builder.js +26 -17
  185. package/dist/gs/strings/builder.js.map +1 -1
  186. package/dist/gs/strings/iter.js +140 -75
  187. package/dist/gs/strings/iter.js.map +1 -1
  188. package/dist/gs/strings/replace.js +2 -2
  189. package/dist/gs/strings/replace.js.map +1 -1
  190. package/dist/gs/strings/strings.js +52 -6
  191. package/dist/gs/strings/strings.js.map +1 -1
  192. package/dist/gs/sync/sync.d.ts +6 -3
  193. package/dist/gs/sync/sync.js +39 -11
  194. package/dist/gs/sync/sync.js.map +1 -1
  195. package/dist/gs/syscall/errors.d.ts +116 -112
  196. package/dist/gs/syscall/errors.js +38 -1
  197. package/dist/gs/syscall/errors.js.map +1 -1
  198. package/dist/gs/syscall/fs.d.ts +2 -8
  199. package/dist/gs/syscall/fs.js.map +1 -1
  200. package/dist/gs/syscall/js/index.js +20 -12
  201. package/dist/gs/syscall/js/index.js.map +1 -1
  202. package/dist/gs/syscall/types.d.ts +4 -1
  203. package/dist/gs/syscall/types.js.map +1 -1
  204. package/dist/gs/testing/testing.d.ts +4 -3
  205. package/dist/gs/testing/testing.js +21 -4
  206. package/dist/gs/testing/testing.js.map +1 -1
  207. package/dist/gs/time/time.js +22 -0
  208. package/dist/gs/time/time.js.map +1 -1
  209. package/dist/gs/unicode/unicode.js.map +1 -1
  210. package/dist/gs/unique/index.js +7 -2
  211. package/dist/gs/unique/index.js.map +1 -1
  212. package/go.mod +8 -8
  213. package/go.sum +14 -23
  214. package/gs/builtin/builtin.ts +364 -37
  215. package/gs/builtin/channel.ts +161 -29
  216. package/gs/builtin/defer.ts +13 -2
  217. package/gs/builtin/hostio.test.ts +1 -0
  218. package/gs/builtin/hostio.ts +38 -0
  219. package/gs/builtin/map.ts +46 -6
  220. package/gs/builtin/print.ts +12 -3
  221. package/gs/builtin/runtime-contract.test.ts +257 -10
  222. package/gs/builtin/slice.test.ts +70 -0
  223. package/gs/builtin/slice.ts +566 -255
  224. package/gs/builtin/type.ts +53 -9
  225. package/gs/builtin/varRef.ts +2 -0
  226. package/gs/bytes/buffer.gs.ts +28 -28
  227. package/gs/bytes/iter.gs.ts +13 -14
  228. package/gs/compress/zlib/index.test.ts +28 -0
  229. package/gs/compress/zlib/index.ts +200 -0
  230. package/gs/compress/zlib/meta.json +3 -0
  231. package/gs/context/context.test.ts +31 -1
  232. package/gs/context/context.ts +9 -4
  233. package/gs/crypto/ecdh/index.test.ts +43 -0
  234. package/gs/crypto/ecdh/index.ts +274 -0
  235. package/gs/crypto/ed25519/index.test.ts +41 -0
  236. package/gs/crypto/ed25519/index.ts +238 -0
  237. package/gs/crypto/ed25519/meta.json +13 -0
  238. package/gs/crypto/internal/constanttime/index.test.ts +25 -0
  239. package/gs/crypto/internal/constanttime/index.ts +22 -0
  240. package/gs/crypto/rand/index.test.ts +89 -1
  241. package/gs/crypto/rand/index.ts +103 -1
  242. package/gs/crypto/rand/meta.json +4 -1
  243. package/gs/crypto/sha256/index.test.ts +78 -0
  244. package/gs/crypto/sha256/index.ts +150 -0
  245. package/gs/crypto/sha256/meta.json +9 -0
  246. package/gs/crypto/sha512/index.test.ts +31 -0
  247. package/gs/crypto/sha512/index.ts +161 -0
  248. package/gs/crypto/sha512/meta.json +11 -0
  249. package/gs/encoding/json/index.test.ts +25 -3
  250. package/gs/encoding/json/index.ts +21 -3
  251. package/gs/errors/errors.test.ts +4 -1
  252. package/gs/errors/errors.ts +32 -8
  253. package/gs/fmt/fmt.test.ts +3 -1
  254. package/gs/fmt/fmt.ts +1 -5
  255. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +62 -7
  256. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +78 -36
  257. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +32 -11
  258. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +122 -43
  259. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
  260. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +518 -4
  261. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +6 -0
  262. package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
  263. package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
  264. package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
  265. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
  266. package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
  267. package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
  268. package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
  269. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +2 -1
  270. package/gs/github.com/klauspost/compress/internal/le/index.ts +6 -5
  271. package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
  272. package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
  273. package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
  274. package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
  275. package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -0
  276. package/gs/go/token/index.ts +17 -4
  277. package/gs/hash/fnv/index.test.ts +67 -0
  278. package/gs/hash/fnv/index.ts +351 -0
  279. package/gs/hash/fnv/meta.json +3 -0
  280. package/gs/hash/index.test.ts +37 -0
  281. package/gs/hash/index.ts +118 -0
  282. package/gs/hash/meta.json +5 -0
  283. package/gs/internal/byteorder/index.test.ts +6 -6
  284. package/gs/io/fs/readlink.ts +40 -48
  285. package/gs/io/fs/walk.ts +10 -2
  286. package/gs/io/io.ts +4 -1
  287. package/gs/iter/iter.ts +8 -2
  288. package/gs/maps/iter.ts +69 -26
  289. package/gs/maps/maps.test.ts +23 -0
  290. package/gs/maps/maps.ts +6 -6
  291. package/gs/math/bits/index.test.ts +20 -0
  292. package/gs/math/bits/index.ts +15 -28
  293. package/gs/mime/index.ts +8 -2
  294. package/gs/net/http/httptest/index.test.ts +53 -0
  295. package/gs/net/http/httptest/index.ts +98 -3
  296. package/gs/net/http/index.test.ts +129 -1
  297. package/gs/net/http/index.ts +370 -19
  298. package/gs/net/http/meta.json +6 -0
  299. package/gs/net/http/pprof/index.test.ts +47 -0
  300. package/gs/net/http/pprof/index.ts +65 -0
  301. package/gs/os/error.gs.ts +9 -10
  302. package/gs/os/error.test.ts +41 -0
  303. package/gs/os/file_unix_js.test.ts +55 -0
  304. package/gs/os/tempfile.gs.test.ts +37 -10
  305. package/gs/os/types_js.gs.ts +94 -15
  306. package/gs/path/filepath/match.ts +4 -1
  307. package/gs/path/filepath/meta.json +6 -0
  308. package/gs/path/filepath/path.test.ts +57 -2
  309. package/gs/path/filepath/path.ts +91 -12
  310. package/gs/reflect/field.test.ts +63 -0
  311. package/gs/reflect/index.ts +4 -1
  312. package/gs/reflect/iter.ts +2 -2
  313. package/gs/reflect/map.test.ts +24 -2
  314. package/gs/reflect/map.ts +35 -0
  315. package/gs/reflect/type.ts +543 -60
  316. package/gs/reflect/typefor.test.ts +100 -0
  317. package/gs/reflect/types.ts +3 -1
  318. package/gs/reflect/value.ts +50 -1
  319. package/gs/reflect/visiblefields.ts +1 -1
  320. package/gs/runtime/debug/index.test.ts +22 -1
  321. package/gs/runtime/debug/index.ts +88 -0
  322. package/gs/runtime/pprof/index.test.ts +36 -0
  323. package/gs/runtime/pprof/index.ts +104 -0
  324. package/gs/runtime/pprof/meta.json +6 -0
  325. package/gs/runtime/trace/index.test.ts +45 -0
  326. package/gs/runtime/trace/index.ts +97 -0
  327. package/gs/runtime/trace/meta.json +7 -0
  328. package/gs/slices/meta.json +2 -1
  329. package/gs/slices/slices.test.ts +86 -0
  330. package/gs/slices/slices.ts +284 -37
  331. package/gs/sort/slice.gs.ts +73 -23
  332. package/gs/sort/slice.test.ts +40 -0
  333. package/gs/strings/builder.test.ts +8 -0
  334. package/gs/strings/builder.ts +29 -17
  335. package/gs/strings/iter.test.ts +5 -7
  336. package/gs/strings/iter.ts +146 -71
  337. package/gs/strings/replace.test.ts +1 -4
  338. package/gs/strings/replace.ts +6 -6
  339. package/gs/strings/strings.test.ts +4 -0
  340. package/gs/strings/strings.ts +54 -6
  341. package/gs/sync/sync.test.ts +57 -1
  342. package/gs/sync/sync.ts +45 -13
  343. package/gs/syscall/errors.ts +158 -115
  344. package/gs/syscall/fs.ts +8 -8
  345. package/gs/syscall/js/index.ts +49 -22
  346. package/gs/syscall/net.test.ts +26 -0
  347. package/gs/syscall/types.ts +7 -2
  348. package/gs/testing/testing.test.ts +56 -0
  349. package/gs/testing/testing.ts +27 -10
  350. package/gs/time/meta.json +2 -2
  351. package/gs/time/time.test.ts +4 -0
  352. package/gs/time/time.ts +33 -2
  353. package/gs/unicode/unicode.test.ts +14 -3
  354. package/gs/unicode/unicode.ts +1 -5
  355. package/gs/unique/index.ts +9 -2
  356. package/package.json +3 -3
@@ -0,0 +1,20 @@
1
+ import * as $ from '@goscript/builtin/index.js';
2
+ import * as io from '@goscript/io/index.js';
3
+ type WriterArg = io.Writer | $.VarRef<io.Writer> | null | undefined;
4
+ export declare class Profile {
5
+ name: string;
6
+ constructor(name?: string);
7
+ Name(): string;
8
+ Count(): number;
9
+ WriteTo(w: WriterArg, debug: number): $.GoError;
10
+ }
11
+ export declare function Lookup(name: string): Profile | null;
12
+ export declare function Profiles(): $.Slice<Profile | null>;
13
+ export declare function StartCPUProfile(w: WriterArg): $.GoError;
14
+ export declare function StopCPUProfile(): void;
15
+ export declare function SetGoroutineLabels(_ctx: unknown): void;
16
+ export declare function Do(_ctx: unknown, _labels: unknown, fn: (() => void) | null): void;
17
+ export declare function ForLabels(_ctx: unknown, _f: unknown): void;
18
+ export declare function WithLabels(ctx: unknown, _labels: unknown): unknown;
19
+ export declare function Labels(...args: string[]): Map<string, string>;
20
+ export {};
@@ -0,0 +1,85 @@
1
+ import * as $ from '@goscript/builtin/index.js';
2
+ import * as errors from '@goscript/errors/index.js';
3
+ let activeCPUWriter = null;
4
+ export class Profile {
5
+ name;
6
+ constructor(name = '') {
7
+ this.name = name;
8
+ }
9
+ Name() {
10
+ return this.name;
11
+ }
12
+ Count() {
13
+ return this.name === '' ? 0 : 1;
14
+ }
15
+ WriteTo(w, debug) {
16
+ return writeProfile(w, `goscript pprof ${this.name} debug=${debug}\n`);
17
+ }
18
+ }
19
+ export function Lookup(name) {
20
+ switch (name) {
21
+ case 'heap':
22
+ case 'allocs':
23
+ case 'goroutine':
24
+ case 'threadcreate':
25
+ case 'block':
26
+ case 'mutex':
27
+ return new Profile(name);
28
+ default:
29
+ return null;
30
+ }
31
+ }
32
+ export function Profiles() {
33
+ return $.arrayToSlice([
34
+ new Profile('allocs'),
35
+ new Profile('block'),
36
+ new Profile('goroutine'),
37
+ new Profile('heap'),
38
+ new Profile('mutex'),
39
+ new Profile('threadcreate'),
40
+ ]);
41
+ }
42
+ export function StartCPUProfile(w) {
43
+ const writer = writerFromArg(w);
44
+ if (writer == null) {
45
+ return errors.New('runtime/pprof: nil profile writer');
46
+ }
47
+ if (activeCPUWriter != null) {
48
+ return errors.New('runtime/pprof: CPU profiling already active');
49
+ }
50
+ activeCPUWriter = writer;
51
+ return writeProfile(writer, 'goscript cpu profile start\n');
52
+ }
53
+ export function StopCPUProfile() {
54
+ if (activeCPUWriter != null) {
55
+ writeProfile(activeCPUWriter, 'goscript cpu profile stop\n');
56
+ activeCPUWriter = null;
57
+ }
58
+ }
59
+ export function SetGoroutineLabels(_ctx) { }
60
+ export function Do(_ctx, _labels, fn) {
61
+ fn?.();
62
+ }
63
+ export function ForLabels(_ctx, _f) { }
64
+ export function WithLabels(ctx, _labels) {
65
+ return ctx;
66
+ }
67
+ export function Labels(...args) {
68
+ const labels = new Map();
69
+ for (let i = 0; i + 1 < args.length; i += 2) {
70
+ labels.set(args[i], args[i + 1]);
71
+ }
72
+ return labels;
73
+ }
74
+ function writerFromArg(w) {
75
+ return $.pointerValueOrNil(w);
76
+ }
77
+ function writeProfile(w, text) {
78
+ const writer = writerFromArg(w);
79
+ if (writer == null) {
80
+ return errors.New('runtime/pprof: nil profile writer');
81
+ }
82
+ const [, err] = writer.Write($.stringToBytes(text));
83
+ return err;
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../gs/runtime/pprof/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as $ from '@goscript/builtin/index.js';
2
+ import * as context from '@goscript/context/index.js';
3
+ import * as io from '@goscript/io/index.js';
4
+ export declare class Task {
5
+ id: number;
6
+ constructor(id?: number);
7
+ End(): void;
8
+ }
9
+ export declare class Region {
10
+ End(): void;
11
+ }
12
+ export declare function NewTask(pctx: context.Context | null, _taskType: string): [context.Context | null, Task];
13
+ export declare function Log(_ctx: context.Context | null, category: string, message: string): void;
14
+ export declare function Logf(_ctx: context.Context | null, _category: string, _format: string, ..._args: unknown[]): void;
15
+ export declare function WithRegion(_ctx: context.Context | null, _regionType: string, fn: (() => void) | null): void;
16
+ export declare function StartRegion(_ctx: context.Context | null, _regionType: string): Region;
17
+ export declare function IsEnabled(): boolean;
18
+ export declare function Start(w: io.Writer | $.VarRef<io.Writer> | null): $.GoError;
19
+ export declare function Stop(): void;
@@ -0,0 +1,64 @@
1
+ import * as $ from '@goscript/builtin/index.js';
2
+ import * as context from '@goscript/context/index.js';
3
+ import * as errors from '@goscript/errors/index.js';
4
+ class traceContextKey {
5
+ }
6
+ const traceState = {
7
+ activeWriter: null,
8
+ nextTaskID: 0,
9
+ };
10
+ export class Task {
11
+ id;
12
+ constructor(id = 0) {
13
+ this.id = id;
14
+ }
15
+ End() { }
16
+ }
17
+ export class Region {
18
+ End() { }
19
+ }
20
+ export function NewTask(pctx, _taskType) {
21
+ const parent = pctx ?? context.Background();
22
+ const task = new Task(++traceState.nextTaskID);
23
+ return [
24
+ context.WithValue(parent, $.interfaceValue(new traceContextKey(), 'trace.traceContextKey'), $.interfaceValue(task, '*trace.Task')),
25
+ task,
26
+ ];
27
+ }
28
+ export function Log(_ctx, category, message) {
29
+ writeTrace(`log ${category} ${message}\n`);
30
+ }
31
+ export function Logf(_ctx, _category, _format, ..._args) { }
32
+ export function WithRegion(_ctx, _regionType, fn) {
33
+ fn?.();
34
+ }
35
+ export function StartRegion(_ctx, _regionType) {
36
+ return new Region();
37
+ }
38
+ export function IsEnabled() {
39
+ return false;
40
+ }
41
+ export function Start(w) {
42
+ const writer = $.pointerValueOrNil(w);
43
+ if (writer == null) {
44
+ return errors.New('runtime/trace: nil trace writer');
45
+ }
46
+ if (traceState.activeWriter != null) {
47
+ return errors.New('runtime/trace: trace already active');
48
+ }
49
+ traceState.activeWriter = writer;
50
+ return writeTrace('goscript trace start\n');
51
+ }
52
+ export function Stop() {
53
+ writeTrace('goscript trace stop\n');
54
+ traceState.activeWriter = null;
55
+ }
56
+ function writeTrace(text) {
57
+ const writer = traceState.activeWriter;
58
+ if (writer == null) {
59
+ return null;
60
+ }
61
+ const [, err] = writer.Write($.stringToBytes(text));
62
+ return err;
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../gs/runtime/trace/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAA;AAC/C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAA;AACrD,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAA;AAGnD,MAAM,eAAe;CAAG;AAExB,MAAM,UAAU,GAAG;IACjB,YAAY,EAAE,IAAwB;IACtC,UAAU,EAAE,CAAC;CACd,CAAA;AAED,MAAM,OAAO,IAAI;IACR,EAAE,CAAQ;IAEjB,YAAY,EAAE,GAAG,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAEM,GAAG,KAAU,CAAC;CACtB;AAED,MAAM,OAAO,MAAM;IACV,GAAG,KAAU,CAAC;CACtB;AAED,MAAM,UAAU,OAAO,CACrB,IAA4B,EAC5B,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;IAC9C,OAAO;QACL,OAAO,CAAC,SAAS,CACf,MAAM,EACN,CAAC,CAAC,cAAc,CAAC,IAAI,eAAe,EAAE,EAAE,uBAAuB,CAAC,EAChE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CACtC;QACD,IAAI;KACL,CAAA;AACH,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAA4B,EAAE,QAAgB,EAAE,OAAe;IACjF,UAAU,CAAC,OAAO,QAAQ,IAAI,OAAO,IAAI,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAA4B,EAC5B,SAAiB,EACjB,OAAe,EACf,GAAG,KAAgB,IACZ,CAAC;AAEV,MAAM,UAAU,UAAU,CACxB,IAA4B,EAC5B,WAAmB,EACnB,EAAuB;IAEvB,EAAE,EAAE,EAAE,CAAA;AACR,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAA4B,EAC5B,WAAmB;IAEnB,OAAO,IAAI,MAAM,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAyC;IAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,UAAU,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;IAC1D,CAAC;IACD,UAAU,CAAC,YAAY,GAAG,MAAM,CAAA;IAChC,OAAO,UAAU,CAAC,wBAAwB,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,UAAU,CAAC,uBAAuB,CAAC,CAAA;IACnC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAA;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAA;IACtC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import * as $ from '@goscript/builtin/index.js';
2
2
  import * as cmp from '../cmp/index.js';
3
3
  import * as iter from '../iter/index.js';
4
+ type SyncCallbackResult<T> = T | globalThis.Promise<T>;
5
+ type CompareCallback<T, U = T> = ((v1: T, v2: U) => SyncCallbackResult<number>) | null;
6
+ type PredicateCallback<T> = ((value: T) => SyncCallbackResult<boolean>) | null;
7
+ type EqualCallback<T, U = T> = ((v1: T, v2: U) => SyncCallbackResult<boolean>) | null;
4
8
  /**
5
9
  * Compare compares the elements of s1 and s2 using cmp.Compare.
6
10
  * The elements are compared sequentially, starting at index 0,
@@ -14,23 +18,28 @@ import * as iter from '../iter/index.js';
14
18
  * @returns -1, 0, or 1
15
19
  */
16
20
  export declare function Compare<T extends string | number>(s1: $.Slice<T>, s2: $.Slice<T>): number;
21
+ export declare function CompareFunc<T, U>(s1: $.Slice<T>, s2: $.Slice<U>, compare: CompareCallback<T, U>): number;
17
22
  /**
18
23
  * Clone returns a shallow copy of s while preserving nilness.
19
24
  * @param s The slice to clone
20
25
  * @returns A new slice with the same elements, or null for a nil slice
21
26
  */
22
27
  export declare function Clone<T>(s: $.Slice<T>): $.Slice<T>;
28
+ export declare function Concat<T>(...slices: $.Slice<T>[]): $.Slice<T>;
23
29
  /**
24
30
  * All returns an iterator over index-value pairs in the slice.
25
31
  * This is equivalent to Go's slices.All function.
26
32
  * @param s The slice to iterate over
27
33
  * @returns An iterator function that yields index-value pairs
28
34
  */
29
- export declare function All<T>(s: $.Slice<T>): (yieldFunc: (index: number, value: T) => boolean) => void;
35
+ export declare function All<T>(s: $.Slice<T>): (yieldFunc: (index: number, value: T) => iter.YieldResult) => void | globalThis.Promise<void>;
30
36
  export declare function Backward<T>(s: $.Slice<T>): (_yield: (index: number, value: T) => boolean | globalThis.Promise<boolean>) => void | globalThis.Promise<void>;
31
37
  export declare function Sort<T extends string | number>(s: $.Slice<T>): void;
32
38
  export declare function IsSorted<T extends string | number>(x: $.Slice<T>): boolean;
33
39
  export declare function Max<T extends cmp.Ordered>(x: $.Slice<T>): T;
40
+ export declare function Min<T extends cmp.Ordered>(x: $.Slice<T>): T;
41
+ export declare function MaxFunc<T>(x: $.Slice<T>, compare: CompareCallback<T>): T;
42
+ export declare function MinFunc<T>(x: $.Slice<T>, compare: CompareCallback<T>): T;
34
43
  export declare function Collect<T>(seq: iter.Seq<T>): $.Slice<T>;
35
44
  export declare function Sorted<T extends string | number>(seq: iter.Seq<T>): $.Slice<T>;
36
45
  /**
@@ -43,13 +52,17 @@ export declare function Sorted<T extends string | number>(seq: iter.Seq<T>): $.S
43
52
  * @returns The modified slice
44
53
  */
45
54
  export declare function Delete<T>(s: $.Slice<T>, i: number, j: number): $.Slice<T>;
46
- export declare function DeleteFunc<T>(s: $.Slice<T>, del: (value: T) => boolean): $.Slice<T>;
55
+ export declare function DeleteFunc<T>(s: $.Slice<T>, del: PredicateCallback<T>): $.Slice<T>;
56
+ export declare function Replace<T>(s: $.Slice<T>, i: number, j: number, ...v: T[]): $.Slice<T>;
57
+ export declare function Compact<T>(s: $.Slice<T>): $.Slice<T>;
58
+ export declare function CompactFunc<T>(s: $.Slice<T>, eq: EqualCallback<T>): $.Slice<T>;
59
+ export declare function Clip<T>(s: $.Slice<T>): $.Slice<T>;
47
60
  export declare function Equal<T>(s1: $.Slice<T>, s2: $.Slice<T>): boolean;
48
- export declare function EqualFunc<T, U>(s1: $.Slice<T>, s2: $.Slice<U>, eq: (v1: T, v2: U) => boolean): boolean;
61
+ export declare function EqualFunc<T, U>(s1: $.Slice<T>, s2: $.Slice<U>, eq: EqualCallback<T, U>): boolean;
49
62
  export declare function Index<T>(s: $.Slice<T>, v: T): number;
50
- export declare function IndexFunc<T>(s: $.Slice<T>, f: (v: T) => boolean): number;
63
+ export declare function IndexFunc<T>(s: $.Slice<T>, f: PredicateCallback<T>): number;
51
64
  export declare function Contains<T>(s: $.Slice<T>, v: T): boolean;
52
- export declare function ContainsFunc<T>(s: $.Slice<T>, f: (v: T) => boolean): boolean;
65
+ export declare function ContainsFunc<T>(s: $.Slice<T>, f: PredicateCallback<T>): boolean;
53
66
  export declare function Insert<T>(s: $.Slice<T>, i: number, ...v: T[]): $.Slice<T>;
54
67
  export declare function Reverse<T>(s: $.Slice<T>): void;
55
68
  /**
@@ -70,9 +83,9 @@ export declare function Grow<T>(s: $.Slice<T>, n: number): $.Slice<T>;
70
83
  * @param s The slice to sort in place
71
84
  * @param cmp Comparison function
72
85
  */
73
- export declare function SortFunc<T>(s: $.Slice<T>, cmp: (a: T, b: T) => number): void;
74
- export declare function IsSortedFunc<T>(x: $.Slice<T>, cmp: (a: T, b: T) => number): boolean;
75
- export declare function SortStableFunc<T>(s: $.Slice<T>, cmp: (a: T, b: T) => number): void;
86
+ export declare function SortFunc<T>(s: $.Slice<T>, cmp: CompareCallback<T>): void;
87
+ export declare function IsSortedFunc<T>(x: $.Slice<T>, cmp: CompareCallback<T>): boolean;
88
+ export declare function SortStableFunc<T>(s: $.Slice<T>, cmp: CompareCallback<T>): void;
76
89
  /**
77
90
  * BinarySearchFunc works like BinarySearch, but uses a custom comparison function.
78
91
  * The slice must be sorted in increasing order, where "increasing" is defined by cmp.
@@ -85,4 +98,6 @@ export declare function SortStableFunc<T>(s: $.Slice<T>, cmp: (a: T, b: T) => nu
85
98
  * @param cmp Comparison function
86
99
  * @returns A tuple of [index, found] where index is the position and found indicates if target was found
87
100
  */
88
- export declare function BinarySearchFunc<E, T>(x: $.Slice<E>, target: T, cmp: (a: E, b: T) => number): [number, boolean];
101
+ export declare function BinarySearchFunc<E, T>(x: $.Slice<E>, target: T, cmp: CompareCallback<E, T>): [number, boolean];
102
+ export declare function BinarySearch<T extends cmp.Ordered>(x: $.Slice<T>, target: T): [number, boolean];
103
+ export {};
@@ -34,6 +34,27 @@ export function Compare(s1, s2) {
34
34
  }
35
35
  return 0;
36
36
  }
37
+ export function CompareFunc(s1, s2, compare) {
38
+ if (compare == null) {
39
+ throw new Error('slices.CompareFunc: nil comparison function');
40
+ }
41
+ const len1 = $.len(s1);
42
+ const len2 = $.len(s2);
43
+ const minLen = len1 < len2 ? len1 : len2;
44
+ for (let i = 0; i < minLen; i++) {
45
+ const result = syncNumber(compare(s1[i], s2[i]));
46
+ if (result !== 0) {
47
+ return result;
48
+ }
49
+ }
50
+ if (len1 < len2) {
51
+ return -1;
52
+ }
53
+ if (len1 > len2) {
54
+ return 1;
55
+ }
56
+ return 0;
57
+ }
37
58
  /**
38
59
  * Clone returns a shallow copy of s while preserving nilness.
39
60
  * @param s The slice to clone
@@ -50,6 +71,38 @@ export function Clone(s) {
50
71
  }
51
72
  return out;
52
73
  }
74
+ export function Concat(...slices) {
75
+ let size = 0;
76
+ let byteSlice = false;
77
+ for (const slice of slices) {
78
+ size += $.len(slice);
79
+ byteSlice = byteSlice || slice instanceof Uint8Array;
80
+ }
81
+ if (size === 0) {
82
+ return null;
83
+ }
84
+ if (byteSlice) {
85
+ const out = new Uint8Array(size);
86
+ let pos = 0;
87
+ for (const slice of slices) {
88
+ const length = $.len(slice);
89
+ for (let i = 0; i < length; i++) {
90
+ out[pos++] = slice[i];
91
+ }
92
+ }
93
+ return out;
94
+ }
95
+ const out = $.makeSlice(size);
96
+ let pos = 0;
97
+ for (const slice of slices) {
98
+ const length = $.len(slice);
99
+ for (let i = 0; i < length; i++) {
100
+ ;
101
+ out[pos++] = slice[i];
102
+ }
103
+ }
104
+ return out;
105
+ }
53
106
  /**
54
107
  * All returns an iterator over index-value pairs in the slice.
55
108
  * This is equivalent to Go's slices.All function.
@@ -59,12 +112,23 @@ export function Clone(s) {
59
112
  export function All(s) {
60
113
  return function (_yield) {
61
114
  const length = $.len(s);
62
- for (let i = 0; i < length; i++) {
63
- const value = s[i]; // Use proper indexing to avoid type issues
64
- if (!_yield(i, value)) {
65
- break;
115
+ const walk = (i) => {
116
+ for (; i < length; i++) {
117
+ const value = s[i]; // Use proper indexing to avoid type issues
118
+ const keepGoing = _yield(i, value);
119
+ if (keepGoing instanceof Promise) {
120
+ return keepGoing.then((next) => {
121
+ if (next) {
122
+ return walk(i + 1);
123
+ }
124
+ });
125
+ }
126
+ if (!keepGoing) {
127
+ return;
128
+ }
66
129
  }
67
- }
130
+ };
131
+ return walk(0);
68
132
  };
69
133
  }
70
134
  export function Backward(s) {
@@ -115,6 +179,51 @@ export function Max(x) {
115
179
  }
116
180
  return max;
117
181
  }
182
+ export function Min(x) {
183
+ if ($.len(x) === 0) {
184
+ throw new Error('slices.Min: empty list');
185
+ }
186
+ let min = x[0];
187
+ for (let i = 1; i < $.len(x); i++) {
188
+ const value = x[i];
189
+ if (cmp.Compare(value, min) < 0) {
190
+ min = value;
191
+ }
192
+ }
193
+ return min;
194
+ }
195
+ export function MaxFunc(x, compare) {
196
+ if (compare == null) {
197
+ throw new Error('slices.MaxFunc: nil comparison function');
198
+ }
199
+ if ($.len(x) === 0) {
200
+ throw new Error('slices.MaxFunc: empty list');
201
+ }
202
+ let max = x[0];
203
+ for (let i = 1; i < $.len(x); i++) {
204
+ const value = x[i];
205
+ if (syncNumber(compare(max, value)) < 0) {
206
+ max = value;
207
+ }
208
+ }
209
+ return max;
210
+ }
211
+ export function MinFunc(x, compare) {
212
+ if (compare == null) {
213
+ throw new Error('slices.MinFunc: nil comparison function');
214
+ }
215
+ if ($.len(x) === 0) {
216
+ throw new Error('slices.MinFunc: empty list');
217
+ }
218
+ let min = x[0];
219
+ for (let i = 1; i < $.len(x); i++) {
220
+ const value = x[i];
221
+ if (syncNumber(compare(value, min)) < 0) {
222
+ min = value;
223
+ }
224
+ }
225
+ return min;
226
+ }
118
227
  export function Collect(seq) {
119
228
  const out = [];
120
229
  seq((value) => {
@@ -160,13 +269,16 @@ export function Delete(s, i, j) {
160
269
  return $.goSlice(s, 0, length - deleteCount);
161
270
  }
162
271
  export function DeleteFunc(s, del) {
272
+ if (del == null) {
273
+ throw new Error('slices.DeleteFunc: nil delete function');
274
+ }
163
275
  if (s === null || s === undefined) {
164
276
  return s;
165
277
  }
166
278
  let w = 0;
167
279
  for (let i = 0; i < s.length; i++) {
168
280
  const value = s[i];
169
- if (!del(value)) {
281
+ if (!syncBoolean(del(value))) {
170
282
  ;
171
283
  s[w] = value;
172
284
  w++;
@@ -178,6 +290,77 @@ export function DeleteFunc(s, del) {
178
290
  }
179
291
  return $.goSlice(s, 0, w);
180
292
  }
293
+ export function Replace(s, i, j, ...v) {
294
+ const length = $.len(s);
295
+ if (i < 0 || j < i || j > length) {
296
+ throw new Error(`slice bounds out of range [${i}:${j}] with length ${length}`);
297
+ }
298
+ const out = $.makeSlice(length - (j - i) + v.length);
299
+ let pos = 0;
300
+ for (let idx = 0; idx < i; idx++) {
301
+ ;
302
+ out[pos++] = s[idx];
303
+ }
304
+ for (const value of v) {
305
+ ;
306
+ out[pos++] = value;
307
+ }
308
+ for (let idx = j; idx < length; idx++) {
309
+ ;
310
+ out[pos++] = s[idx];
311
+ }
312
+ return out;
313
+ }
314
+ export function Compact(s) {
315
+ if (s === null || s === undefined || $.len(s) < 2) {
316
+ return s;
317
+ }
318
+ let w = 1;
319
+ for (let i = 1; i < $.len(s); i++) {
320
+ if (s[i] !== s[i - 1]) {
321
+ ;
322
+ s[w] = s[i];
323
+ w++;
324
+ }
325
+ }
326
+ for (let i = w; i < $.len(s); i++) {
327
+ ;
328
+ s[i] = clearValue(s);
329
+ }
330
+ return $.goSlice(s, 0, w);
331
+ }
332
+ export function CompactFunc(s, eq) {
333
+ if (eq == null) {
334
+ throw new Error('slices.CompactFunc: nil equality function');
335
+ }
336
+ if (s === null || s === undefined || $.len(s) < 2) {
337
+ return s;
338
+ }
339
+ let w = 1;
340
+ for (let i = 1; i < $.len(s); i++) {
341
+ if (!syncBoolean(eq(s[i - 1], s[i]))) {
342
+ ;
343
+ s[w] = s[i];
344
+ w++;
345
+ }
346
+ }
347
+ for (let i = w; i < $.len(s); i++) {
348
+ ;
349
+ s[i] = clearValue(s);
350
+ }
351
+ return $.goSlice(s, 0, w);
352
+ }
353
+ export function Clip(s) {
354
+ if (s == null) {
355
+ return null;
356
+ }
357
+ const out = $.makeSlice($.len(s), $.len(s));
358
+ for (let i = 0; i < $.len(s); i++) {
359
+ ;
360
+ out[i] = s[i];
361
+ }
362
+ return out;
363
+ }
181
364
  export function Equal(s1, s2) {
182
365
  const len1 = $.len(s1);
183
366
  if (len1 !== $.len(s2)) {
@@ -191,12 +374,15 @@ export function Equal(s1, s2) {
191
374
  return true;
192
375
  }
193
376
  export function EqualFunc(s1, s2, eq) {
377
+ if (eq == null) {
378
+ throw new Error('slices.EqualFunc: nil equality function');
379
+ }
194
380
  const len1 = $.len(s1);
195
381
  if (len1 !== $.len(s2)) {
196
382
  return false;
197
383
  }
198
384
  for (let i = 0; i < len1; i++) {
199
- if (!eq(s1[i], s2[i])) {
385
+ if (!syncBoolean(eq(s1[i], s2[i]))) {
200
386
  return false;
201
387
  }
202
388
  }
@@ -211,8 +397,11 @@ export function Index(s, v) {
211
397
  return -1;
212
398
  }
213
399
  export function IndexFunc(s, f) {
400
+ if (f == null) {
401
+ throw new Error('slices.IndexFunc: nil predicate function');
402
+ }
214
403
  for (let i = 0; i < $.len(s); i++) {
215
- if (f(s[i])) {
404
+ if (syncBoolean(f(s[i]))) {
216
405
  return i;
217
406
  }
218
407
  }
@@ -295,37 +484,35 @@ export function Grow(s, n) {
295
484
  * @param cmp Comparison function
296
485
  */
297
486
  export function SortFunc(s, cmp) {
487
+ if (cmp == null) {
488
+ throw new Error('slices.SortFunc: nil comparison function');
489
+ }
298
490
  if (s === null || s === undefined) {
299
491
  return;
300
492
  }
301
493
  const arr = s;
302
- arr.sort(cmp);
494
+ arr.sort((a, b) => syncNumber(cmp(a, b)));
303
495
  }
304
496
  export function IsSortedFunc(x, cmp) {
497
+ if (cmp == null) {
498
+ throw new Error('slices.IsSortedFunc: nil comparison function');
499
+ }
305
500
  for (let i = $.len(x) - 1; i > 0; i--) {
306
- if (cmp(x[i], x[i - 1]) < 0) {
501
+ if (syncNumber(cmp(x[i], x[i - 1])) < 0) {
307
502
  return false;
308
503
  }
309
504
  }
310
505
  return true;
311
506
  }
312
507
  export function SortStableFunc(s, cmp) {
508
+ if (cmp == null) {
509
+ throw new Error('slices.SortStableFunc: nil comparison function');
510
+ }
313
511
  if (s === null || s === undefined) {
314
512
  return;
315
513
  }
316
- const sorted = s
317
- .map((value, index) => ({ value, index }))
318
- .sort((a, b) => {
319
- const result = cmp(a.value, b.value);
320
- if (result !== 0) {
321
- return result;
322
- }
323
- return a.index - b.index;
324
- });
325
- for (let i = 0; i < sorted.length; i++) {
326
- ;
327
- s[i] = sorted[i].value;
328
- }
514
+ ;
515
+ s.sort((a, b) => syncNumber(cmp(a, b)));
329
516
  }
330
517
  function clearValue(s) {
331
518
  if (s instanceof Uint8Array) {
@@ -359,11 +546,14 @@ function clearValue(s) {
359
546
  * @returns A tuple of [index, found] where index is the position and found indicates if target was found
360
547
  */
361
548
  export function BinarySearchFunc(x, target, cmp) {
549
+ if (cmp == null) {
550
+ throw new Error('slices.BinarySearchFunc: nil comparison function');
551
+ }
362
552
  let left = 0;
363
553
  let right = $.len(x);
364
554
  while (left < right) {
365
555
  const mid = Math.floor((left + right) / 2);
366
- const result = cmp(x[mid], target);
556
+ const result = syncNumber(cmp(x[mid], target));
367
557
  if (result < 0) {
368
558
  left = mid + 1;
369
559
  }
@@ -376,4 +566,19 @@ export function BinarySearchFunc(x, target, cmp) {
376
566
  }
377
567
  return [left, false];
378
568
  }
569
+ function syncNumber(value) {
570
+ if (value instanceof Promise) {
571
+ throw new Error('slices: asynchronous callback result is not supported');
572
+ }
573
+ return value;
574
+ }
575
+ function syncBoolean(value) {
576
+ if (value instanceof Promise) {
577
+ throw new Error('slices: asynchronous callback result is not supported');
578
+ }
579
+ return value;
580
+ }
581
+ export function BinarySearch(x, target) {
582
+ return BinarySearchFunc(x, target, cmp.Compare);
583
+ }
379
584
  //# sourceMappingURL=slices.js.map