toiljs 0.0.3 → 0.0.5

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 (360) hide show
  1. package/.idea/prettier.xml +1 -0
  2. package/as-pect.config.js +1 -1
  3. package/build/backend/.tsbuildinfo +1 -1
  4. package/build/backend/index.js +1 -2
  5. package/build/cli/.tsbuildinfo +1 -1
  6. package/build/cli/configure.d.ts +15 -0
  7. package/build/cli/configure.js +201 -0
  8. package/build/cli/create.d.ts +4 -0
  9. package/build/cli/create.js +169 -56
  10. package/build/cli/features.d.ts +23 -0
  11. package/build/cli/features.js +85 -0
  12. package/build/cli/index.js +42 -2
  13. package/build/cli/proc.d.ts +1 -0
  14. package/build/cli/proc.js +11 -0
  15. package/build/cli/ui.js +1 -2
  16. package/build/cli/validate.d.ts +4 -0
  17. package/build/cli/validate.js +19 -0
  18. package/build/client/.tsbuildinfo +1 -1
  19. package/build/client/Link.d.ts +8 -0
  20. package/build/client/Link.js +44 -0
  21. package/build/client/NavLink.d.ts +14 -0
  22. package/build/client/NavLink.js +37 -0
  23. package/build/client/Router.d.ts +7 -0
  24. package/build/client/Router.js +55 -0
  25. package/build/client/error-boundary.d.ts +16 -0
  26. package/build/client/error-boundary.js +19 -0
  27. package/build/client/head.d.ts +26 -0
  28. package/build/client/head.js +87 -0
  29. package/build/client/hooks.d.ts +17 -0
  30. package/build/client/hooks.js +48 -0
  31. package/build/client/index.d.ts +14 -2
  32. package/build/client/index.js +8 -1
  33. package/build/client/lazy.d.ts +16 -0
  34. package/build/client/lazy.js +53 -0
  35. package/build/client/match.js +7 -0
  36. package/build/client/mount.d.ts +2 -0
  37. package/build/client/mount.js +13 -0
  38. package/build/client/navigation.d.ts +13 -0
  39. package/build/client/navigation.js +97 -0
  40. package/build/client/params-context.d.ts +2 -0
  41. package/build/client/params-context.js +2 -0
  42. package/build/client/prefetch.d.ts +11 -0
  43. package/build/client/prefetch.js +100 -0
  44. package/build/client/scroll.d.ts +8 -0
  45. package/build/client/scroll.js +36 -0
  46. package/build/client/types.d.ts +27 -0
  47. package/build/client/types.js +1 -0
  48. package/build/compiler/.tsbuildinfo +1 -1
  49. package/build/compiler/config.d.ts +2 -0
  50. package/build/compiler/config.js +4 -1
  51. package/build/compiler/docs.d.ts +10 -0
  52. package/build/compiler/docs.js +59 -0
  53. package/build/compiler/generate.d.ts +1 -0
  54. package/build/compiler/generate.js +139 -21
  55. package/build/compiler/index.d.ts +5 -2
  56. package/build/compiler/index.js +5 -3
  57. package/build/compiler/plugin.js +2 -1
  58. package/build/compiler/routes.js +5 -1
  59. package/build/compiler/vite.d.ts +1 -1
  60. package/build/compiler/vite.js +17 -1
  61. package/build/io/.tsbuildinfo +1 -1
  62. package/build/io/BinaryWriter.js +2 -2
  63. package/eslint.config.js +1 -1
  64. package/examples/basic/.toil/docs/cli.md +3 -0
  65. package/examples/basic/.toil/docs/client.md +3 -0
  66. package/examples/basic/.toil/docs/index.md +3 -0
  67. package/examples/basic/.toil/docs/routing.md +3 -0
  68. package/examples/basic/.toil/docs/server.md +3 -0
  69. package/examples/basic/.toil/docs/styling.md +3 -0
  70. package/examples/basic/.toil/entry.tsx +3 -8
  71. package/examples/basic/.toil/globals.ts +6 -0
  72. package/examples/basic/.toil/index.html +16 -12
  73. package/examples/basic/.toil/public/images/.gitkeep +1 -0
  74. package/examples/basic/.toil/public/images/logo.svg +37 -0
  75. package/examples/basic/.toil/public/robots.txt +2 -0
  76. package/examples/basic/.toil/routes.ts +9 -7
  77. package/examples/basic/build/client/assets/404-Bq0jNTUo.js +1 -0
  78. package/examples/basic/build/client/assets/_...slug_-CXKf6qnB.js +1 -0
  79. package/examples/basic/build/client/assets/_id_-BadAyQnb.js +1 -0
  80. package/examples/basic/build/client/assets/about-BOhoEcEO.js +1 -0
  81. package/examples/basic/build/client/assets/get-started-BIXpcjkT.js +9 -0
  82. package/examples/basic/build/client/assets/index-BmqcTaBB.js +1 -0
  83. package/examples/basic/build/client/assets/io-DEVjjaJj.js +1 -0
  84. package/examples/basic/build/client/assets/layout-DJegirdz.js +1 -0
  85. package/examples/basic/build/client/assets/react-DEQrz1q7.js +9 -0
  86. package/examples/basic/build/client/assets/rolldown-runtime-KL5VtC6j.js +1 -0
  87. package/examples/basic/build/client/assets/routes-BYWn6TxK.js +1 -0
  88. package/examples/basic/build/client/css/style.css +2 -0
  89. package/examples/basic/build/client/images/.gitkeep +1 -0
  90. package/examples/basic/build/client/images/logo.svg +37 -0
  91. package/examples/basic/build/client/index.html +17 -0
  92. package/examples/basic/build/client/robots.txt +2 -0
  93. package/examples/basic/client/404.tsx +2 -5
  94. package/examples/basic/client/components/.gitkeep +1 -0
  95. package/examples/basic/client/components/Footer.tsx +8 -0
  96. package/examples/basic/client/layout.tsx +39 -26
  97. package/examples/basic/client/public/images/.gitkeep +1 -0
  98. package/examples/basic/client/public/images/logo.svg +37 -0
  99. package/examples/basic/client/public/index.html +15 -0
  100. package/examples/basic/client/public/robots.txt +2 -0
  101. package/examples/basic/client/routes/about.tsx +1 -3
  102. package/examples/basic/client/routes/blog/[id].tsx +2 -4
  103. package/examples/basic/client/routes/docs/[...slug].tsx +3 -6
  104. package/examples/basic/client/routes/get-started.tsx +84 -0
  105. package/examples/basic/client/routes/index.tsx +74 -7
  106. package/examples/basic/client/routes/io.tsx +3 -7
  107. package/examples/basic/client/styles/main.css +461 -0
  108. package/examples/basic/client/toil.tsx +7 -0
  109. package/examples/basic/node_modules/.bin/toilinit +16 -0
  110. package/examples/basic/node_modules/.bin/toilinit.cmd +17 -0
  111. package/examples/basic/node_modules/.bin/toilinit.ps1 +28 -0
  112. package/examples/basic/node_modules/.bin/toilscript +16 -0
  113. package/examples/basic/node_modules/.bin/toilscript.cmd +17 -0
  114. package/examples/basic/node_modules/.bin/toilscript.ps1 +28 -0
  115. package/examples/basic/node_modules/.bin/wasm-as +16 -0
  116. package/examples/basic/node_modules/.bin/wasm-as.cmd +17 -0
  117. package/examples/basic/node_modules/.bin/wasm-as.ps1 +28 -0
  118. package/examples/basic/node_modules/.bin/wasm-ctor-eval +16 -0
  119. package/examples/basic/node_modules/.bin/wasm-ctor-eval.cmd +17 -0
  120. package/examples/basic/node_modules/.bin/wasm-ctor-eval.ps1 +28 -0
  121. package/examples/basic/node_modules/.bin/wasm-dis +16 -0
  122. package/examples/basic/node_modules/.bin/wasm-dis.cmd +17 -0
  123. package/examples/basic/node_modules/.bin/wasm-dis.ps1 +28 -0
  124. package/examples/basic/node_modules/.bin/wasm-merge +16 -0
  125. package/examples/basic/node_modules/.bin/wasm-merge.cmd +17 -0
  126. package/examples/basic/node_modules/.bin/wasm-merge.ps1 +28 -0
  127. package/examples/basic/node_modules/.bin/wasm-metadce +16 -0
  128. package/examples/basic/node_modules/.bin/wasm-metadce.cmd +17 -0
  129. package/examples/basic/node_modules/.bin/wasm-metadce.ps1 +28 -0
  130. package/examples/basic/node_modules/.bin/wasm-opt +16 -0
  131. package/examples/basic/node_modules/.bin/wasm-opt.cmd +17 -0
  132. package/examples/basic/node_modules/.bin/wasm-opt.ps1 +28 -0
  133. package/examples/basic/node_modules/.bin/wasm-reduce +16 -0
  134. package/examples/basic/node_modules/.bin/wasm-reduce.cmd +17 -0
  135. package/examples/basic/node_modules/.bin/wasm-reduce.ps1 +28 -0
  136. package/examples/basic/node_modules/.bin/wasm-shell +16 -0
  137. package/examples/basic/node_modules/.bin/wasm-shell.cmd +17 -0
  138. package/examples/basic/node_modules/.bin/wasm-shell.ps1 +28 -0
  139. package/examples/basic/node_modules/.bin/wasm2js +16 -0
  140. package/examples/basic/node_modules/.bin/wasm2js.cmd +17 -0
  141. package/examples/basic/node_modules/.bin/wasm2js.ps1 +28 -0
  142. package/examples/basic/node_modules/.package-lock.json +49 -1
  143. package/examples/basic/node_modules/.vite/deps/_metadata.json +9 -9
  144. package/examples/basic/node_modules/binaryen/LICENSE +201 -0
  145. package/examples/basic/node_modules/binaryen/README.md +1362 -0
  146. package/examples/basic/node_modules/binaryen/bin/package.json +3 -0
  147. package/examples/basic/node_modules/binaryen/bin/wasm-as +0 -0
  148. package/examples/basic/node_modules/binaryen/bin/wasm-ctor-eval +0 -0
  149. package/examples/basic/node_modules/binaryen/bin/wasm-dis +0 -0
  150. package/examples/basic/node_modules/binaryen/bin/wasm-merge +0 -0
  151. package/examples/basic/node_modules/binaryen/bin/wasm-metadce +0 -0
  152. package/examples/basic/node_modules/binaryen/bin/wasm-opt +0 -0
  153. package/examples/basic/node_modules/binaryen/bin/wasm-reduce +0 -0
  154. package/examples/basic/node_modules/binaryen/bin/wasm-shell +0 -0
  155. package/examples/basic/node_modules/binaryen/bin/wasm2js +0 -0
  156. package/examples/basic/node_modules/binaryen/index.d.ts +2371 -0
  157. package/examples/basic/node_modules/binaryen/index.js +30552 -0
  158. package/examples/basic/node_modules/binaryen/package.json +50 -0
  159. package/examples/basic/node_modules/long/LICENSE +202 -0
  160. package/examples/basic/node_modules/long/README.md +286 -0
  161. package/examples/basic/node_modules/long/index.d.ts +2 -0
  162. package/examples/basic/node_modules/long/index.js +1581 -0
  163. package/examples/basic/node_modules/long/package.json +58 -0
  164. package/examples/basic/node_modules/long/types.d.ts +474 -0
  165. package/examples/basic/node_modules/long/umd/index.d.ts +3 -0
  166. package/examples/basic/node_modules/long/umd/index.js +1622 -0
  167. package/examples/basic/node_modules/long/umd/package.json +3 -0
  168. package/examples/basic/node_modules/long/umd/types.d.ts +474 -0
  169. package/examples/basic/node_modules/toilscript/LICENSE +201 -0
  170. package/examples/basic/node_modules/toilscript/NOTICE +94 -0
  171. package/examples/basic/node_modules/toilscript/README.md +66 -0
  172. package/examples/basic/node_modules/toilscript/bin/toilinit.js +468 -0
  173. package/examples/basic/node_modules/toilscript/bin/toilscript.js +35 -0
  174. package/examples/basic/node_modules/toilscript/dist/cli.d.ts +4 -0
  175. package/examples/basic/node_modules/toilscript/dist/cli.generated.d.ts +10027 -0
  176. package/examples/basic/node_modules/toilscript/dist/cli.js +24474 -0
  177. package/examples/basic/node_modules/toilscript/dist/cli.js.map +7 -0
  178. package/examples/basic/node_modules/toilscript/dist/importmap.json +9 -0
  179. package/examples/basic/node_modules/toilscript/dist/toilscript.d.ts +4 -0
  180. package/examples/basic/node_modules/toilscript/dist/toilscript.generated.d.ts +11242 -0
  181. package/examples/basic/node_modules/toilscript/dist/toilscript.js +337 -0
  182. package/examples/basic/node_modules/toilscript/dist/toilscript.js.map +7 -0
  183. package/examples/basic/node_modules/toilscript/dist/transform.cjs +1 -0
  184. package/examples/basic/node_modules/toilscript/dist/transform.d.ts +1 -0
  185. package/examples/basic/node_modules/toilscript/dist/transform.js +1 -0
  186. package/examples/basic/node_modules/toilscript/dist/web.js +22 -0
  187. package/examples/basic/node_modules/toilscript/lib/binaryen.d.ts +2 -0
  188. package/examples/basic/node_modules/toilscript/lib/binaryen.js +2 -0
  189. package/examples/basic/node_modules/toilscript/package.json +115 -0
  190. package/examples/basic/node_modules/toilscript/std/README.md +6 -0
  191. package/examples/basic/node_modules/toilscript/std/assembly/array.ts +550 -0
  192. package/examples/basic/node_modules/toilscript/std/assembly/arraybuffer.ts +77 -0
  193. package/examples/basic/node_modules/toilscript/std/assembly/atomics.ts +127 -0
  194. package/examples/basic/node_modules/toilscript/std/assembly/bindings/asyncify.ts +16 -0
  195. package/examples/basic/node_modules/toilscript/std/assembly/bindings/dom.ts +291 -0
  196. package/examples/basic/node_modules/toilscript/std/assembly/bindings/node.ts +6 -0
  197. package/examples/basic/node_modules/toilscript/std/assembly/bitflags.ts +53 -0
  198. package/examples/basic/node_modules/toilscript/std/assembly/builtins.ts +2650 -0
  199. package/examples/basic/node_modules/toilscript/std/assembly/byteslice.ts +177 -0
  200. package/examples/basic/node_modules/toilscript/std/assembly/compat.ts +2 -0
  201. package/examples/basic/node_modules/toilscript/std/assembly/console.ts +42 -0
  202. package/examples/basic/node_modules/toilscript/std/assembly/crypto.ts +9 -0
  203. package/examples/basic/node_modules/toilscript/std/assembly/dataview.ts +181 -0
  204. package/examples/basic/node_modules/toilscript/std/assembly/date.ts +375 -0
  205. package/examples/basic/node_modules/toilscript/std/assembly/diagnostics.ts +11 -0
  206. package/examples/basic/node_modules/toilscript/std/assembly/encoding.ts +151 -0
  207. package/examples/basic/node_modules/toilscript/std/assembly/endian.ts +45 -0
  208. package/examples/basic/node_modules/toilscript/std/assembly/error.ts +44 -0
  209. package/examples/basic/node_modules/toilscript/std/assembly/fixedarray.ts +173 -0
  210. package/examples/basic/node_modules/toilscript/std/assembly/fixedmap.ts +326 -0
  211. package/examples/basic/node_modules/toilscript/std/assembly/fixedset.ts +275 -0
  212. package/examples/basic/node_modules/toilscript/std/assembly/function.ts +42 -0
  213. package/examples/basic/node_modules/toilscript/std/assembly/index.d.ts +2892 -0
  214. package/examples/basic/node_modules/toilscript/std/assembly/iterator.ts +35 -0
  215. package/examples/basic/node_modules/toilscript/std/assembly/map.ts +269 -0
  216. package/examples/basic/node_modules/toilscript/std/assembly/math.ts +3289 -0
  217. package/examples/basic/node_modules/toilscript/std/assembly/memory.ts +123 -0
  218. package/examples/basic/node_modules/toilscript/std/assembly/number.ts +388 -0
  219. package/examples/basic/node_modules/toilscript/std/assembly/object.ts +36 -0
  220. package/examples/basic/node_modules/toilscript/std/assembly/performance.ts +9 -0
  221. package/examples/basic/node_modules/toilscript/std/assembly/pointer.ts +80 -0
  222. package/examples/basic/node_modules/toilscript/std/assembly/polyfills.ts +27 -0
  223. package/examples/basic/node_modules/toilscript/std/assembly/process.ts +50 -0
  224. package/examples/basic/node_modules/toilscript/std/assembly/reference.ts +48 -0
  225. package/examples/basic/node_modules/toilscript/std/assembly/regexp.ts +12 -0
  226. package/examples/basic/node_modules/toilscript/std/assembly/rt/README.md +83 -0
  227. package/examples/basic/node_modules/toilscript/std/assembly/rt/common.ts +81 -0
  228. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-incremental.ts +2 -0
  229. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-memory.ts +1 -0
  230. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-minimal.ts +2 -0
  231. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-stub.ts +1 -0
  232. package/examples/basic/node_modules/toilscript/std/assembly/rt/index.d.ts +37 -0
  233. package/examples/basic/node_modules/toilscript/std/assembly/rt/itcms.ts +419 -0
  234. package/examples/basic/node_modules/toilscript/std/assembly/rt/memory-runtime.ts +94 -0
  235. package/examples/basic/node_modules/toilscript/std/assembly/rt/rtrace.ts +15 -0
  236. package/examples/basic/node_modules/toilscript/std/assembly/rt/stub.ts +133 -0
  237. package/examples/basic/node_modules/toilscript/std/assembly/rt/tcms.ts +254 -0
  238. package/examples/basic/node_modules/toilscript/std/assembly/rt/tlsf.ts +592 -0
  239. package/examples/basic/node_modules/toilscript/std/assembly/rt.ts +90 -0
  240. package/examples/basic/node_modules/toilscript/std/assembly/set.ts +225 -0
  241. package/examples/basic/node_modules/toilscript/std/assembly/shared/feature.ts +68 -0
  242. package/examples/basic/node_modules/toilscript/std/assembly/shared/runtime.ts +13 -0
  243. package/examples/basic/node_modules/toilscript/std/assembly/shared/target.ts +11 -0
  244. package/examples/basic/node_modules/toilscript/std/assembly/shared/tsconfig.json +11 -0
  245. package/examples/basic/node_modules/toilscript/std/assembly/shared/typeinfo.ts +72 -0
  246. package/examples/basic/node_modules/toilscript/std/assembly/staticarray.ts +423 -0
  247. package/examples/basic/node_modules/toilscript/std/assembly/string.ts +850 -0
  248. package/examples/basic/node_modules/toilscript/std/assembly/symbol.ts +114 -0
  249. package/examples/basic/node_modules/toilscript/std/assembly/table.ts +16 -0
  250. package/examples/basic/node_modules/toilscript/std/assembly/toilscript.ts +16 -0
  251. package/examples/basic/node_modules/toilscript/std/assembly/tsconfig.json +6 -0
  252. package/examples/basic/node_modules/toilscript/std/assembly/typedarray.ts +1954 -0
  253. package/examples/basic/node_modules/toilscript/std/assembly/uri.ts +17 -0
  254. package/examples/basic/node_modules/toilscript/std/assembly/util/bytes.ts +107 -0
  255. package/examples/basic/node_modules/toilscript/std/assembly/util/casemap.ts +497 -0
  256. package/examples/basic/node_modules/toilscript/std/assembly/util/error.ts +58 -0
  257. package/examples/basic/node_modules/toilscript/std/assembly/util/hash.ts +117 -0
  258. package/examples/basic/node_modules/toilscript/std/assembly/util/math.ts +1922 -0
  259. package/examples/basic/node_modules/toilscript/std/assembly/util/memory.ts +290 -0
  260. package/examples/basic/node_modules/toilscript/std/assembly/util/number.ts +873 -0
  261. package/examples/basic/node_modules/toilscript/std/assembly/util/sort.ts +313 -0
  262. package/examples/basic/node_modules/toilscript/std/assembly/util/string.ts +1202 -0
  263. package/examples/basic/node_modules/toilscript/std/assembly/util/uri.ts +275 -0
  264. package/examples/basic/node_modules/toilscript/std/assembly/vector.ts +4 -0
  265. package/examples/basic/node_modules/toilscript/std/assembly.json +16 -0
  266. package/examples/basic/node_modules/toilscript/std/portable/index.d.ts +461 -0
  267. package/examples/basic/node_modules/toilscript/std/portable/index.js +416 -0
  268. package/examples/basic/node_modules/toilscript/std/portable.json +11 -0
  269. package/examples/basic/node_modules/toilscript/std/types/assembly/index.d.ts +1 -0
  270. package/examples/basic/node_modules/toilscript/std/types/assembly/package.json +3 -0
  271. package/examples/basic/node_modules/toilscript/std/types/portable/index.d.ts +1 -0
  272. package/examples/basic/node_modules/toilscript/std/types/portable/package.json +3 -0
  273. package/examples/basic/node_modules/toilscript/tsconfig-base.json +13 -0
  274. package/examples/basic/node_modules/toilscript/util/README.md +23 -0
  275. package/examples/basic/node_modules/toilscript/util/browser/fs.js +1 -0
  276. package/examples/basic/node_modules/toilscript/util/browser/module.js +5 -0
  277. package/examples/basic/node_modules/toilscript/util/browser/path.js +520 -0
  278. package/examples/basic/node_modules/toilscript/util/browser/process.js +59 -0
  279. package/examples/basic/node_modules/toilscript/util/browser/url.js +23 -0
  280. package/examples/basic/node_modules/toilscript/util/cpu.d.ts +9 -0
  281. package/examples/basic/node_modules/toilscript/util/cpu.js +42 -0
  282. package/examples/basic/node_modules/toilscript/util/find.d.ts +6 -0
  283. package/examples/basic/node_modules/toilscript/util/find.js +20 -0
  284. package/examples/basic/node_modules/toilscript/util/node.d.ts +21 -0
  285. package/examples/basic/node_modules/toilscript/util/node.js +34 -0
  286. package/examples/basic/node_modules/toilscript/util/options.d.ts +70 -0
  287. package/examples/basic/node_modules/toilscript/util/options.js +262 -0
  288. package/examples/basic/node_modules/toilscript/util/terminal.d.ts +52 -0
  289. package/examples/basic/node_modules/toilscript/util/terminal.js +35 -0
  290. package/examples/basic/node_modules/toilscript/util/text.d.ts +26 -0
  291. package/examples/basic/node_modules/toilscript/util/text.js +114 -0
  292. package/examples/basic/node_modules/toilscript/util/tsconfig.json +9 -0
  293. package/examples/basic/node_modules/toilscript/util/web.d.ts +11 -0
  294. package/examples/basic/node_modules/toilscript/util/web.js +33 -0
  295. package/examples/basic/package-lock.json +50 -1
  296. package/examples/basic/package.json +5 -2
  297. package/examples/basic/server/index.ts +3 -0
  298. package/examples/basic/server/main.ts +6 -0
  299. package/examples/basic/server/tsconfig.json +7 -0
  300. package/examples/basic/toil-env.d.ts +20 -1
  301. package/examples/basic/toil.config.ts +2 -5
  302. package/examples/basic/toilconfig.json +30 -0
  303. package/package.json +1 -1
  304. package/presets/eslint.js +2 -7
  305. package/presets/no-uint8array-tostring.js +4 -5
  306. package/presets/prettier.json +8 -1
  307. package/src/backend/index.ts +11 -18
  308. package/src/cli/configure.ts +272 -0
  309. package/src/cli/create.ts +228 -67
  310. package/src/cli/features.ts +128 -0
  311. package/src/cli/index.ts +44 -3
  312. package/src/cli/proc.ts +20 -0
  313. package/src/cli/ui.ts +4 -6
  314. package/src/cli/validate.ts +31 -0
  315. package/src/client/Link.tsx +99 -0
  316. package/src/client/NavLink.tsx +86 -0
  317. package/src/client/Router.tsx +95 -0
  318. package/src/client/error-boundary.tsx +43 -0
  319. package/src/client/head.ts +140 -0
  320. package/src/client/hooks.ts +115 -0
  321. package/src/client/index.ts +35 -5
  322. package/src/client/lazy.ts +93 -0
  323. package/src/client/match.ts +11 -3
  324. package/src/client/mount.tsx +28 -0
  325. package/src/client/navigation.ts +142 -0
  326. package/src/client/params-context.ts +10 -0
  327. package/src/client/prefetch.ts +130 -0
  328. package/src/client/scroll.ts +53 -0
  329. package/src/client/types.ts +36 -0
  330. package/src/compiler/config.ts +15 -8
  331. package/src/compiler/docs.ts +87 -0
  332. package/src/compiler/generate.ts +180 -33
  333. package/src/compiler/index.ts +7 -4
  334. package/src/compiler/plugin.ts +3 -1
  335. package/src/compiler/routes.ts +13 -7
  336. package/src/compiler/vite.ts +28 -5
  337. package/src/io/BinaryReader.ts +1 -5
  338. package/src/io/BinaryWriter.ts +3 -3
  339. package/src/server/index.ts +3 -4
  340. package/src/server/tsconfig.json +4 -0
  341. package/test/configure.test.ts +90 -0
  342. package/test/features.test.ts +111 -0
  343. package/test/head.test.ts +35 -0
  344. package/test/io.test.ts +8 -0
  345. package/test/navlink.test.ts +28 -0
  346. package/test/routes.test.ts +15 -0
  347. package/test/validate.test.ts +42 -0
  348. package/vitest.config.ts +1 -1
  349. package/examples/basic/dist/assets/404-D1bS2aH_.js +0 -1
  350. package/examples/basic/dist/assets/_...slug_-wR3shlWn.js +0 -1
  351. package/examples/basic/dist/assets/_id_-EWYvHfi2.js +0 -1
  352. package/examples/basic/dist/assets/about-Ddvj1tjF.js +0 -1
  353. package/examples/basic/dist/assets/index-CdG0me90.js +0 -1
  354. package/examples/basic/dist/assets/io-CODNJU57.js +0 -1
  355. package/examples/basic/dist/assets/layout-C15ZTPYI.js +0 -1
  356. package/examples/basic/dist/assets/react-JbAfoxYe.js +0 -9
  357. package/examples/basic/dist/assets/rolldown-runtime-1VNLd2iN.js +0 -1
  358. package/examples/basic/dist/assets/routes-GoydenoY.js +0 -1
  359. package/examples/basic/dist/index.html +0 -12
  360. package/src/client/runtime.tsx +0 -190
@@ -0,0 +1,873 @@
1
+ /// <reference path="../rt/index.d.ts" />
2
+
3
+ import { idof } from "../builtins";
4
+ import { CharCode } from "./string";
5
+
6
+ // @ts-ignore: decorator
7
+ @inline
8
+ export const MAX_DOUBLE_LENGTH = 28;
9
+
10
+ // @ts-ignore: decorator
11
+ @lazy @inline const POWERS10 = memory.data<u32>([
12
+ 1,
13
+ 10,
14
+ 100,
15
+ 1000,
16
+ 10000,
17
+ 100000,
18
+ 1000000,
19
+ 10000000,
20
+ 100000000,
21
+ 1000000000
22
+ ]);
23
+
24
+ /*
25
+ Lookup table for pairwise char codes in range [0-99]
26
+
27
+ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09",
28
+ "10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
29
+ "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
30
+ "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
31
+ "40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
32
+ "50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
33
+ "60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
34
+ "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
35
+ "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
36
+ "90", "91", "92", "93", "94", "95", "96", "97", "98", "99"
37
+ */
38
+ // @ts-ignore: decorator
39
+ @lazy @inline const DIGITS = memory.data<u32>([
40
+ 0x00300030, 0x00310030, 0x00320030, 0x00330030, 0x00340030,
41
+ 0x00350030, 0x00360030, 0x00370030, 0x00380030, 0x00390030,
42
+ 0x00300031, 0x00310031, 0x00320031, 0x00330031, 0x00340031,
43
+ 0x00350031, 0x00360031, 0x00370031, 0x00380031, 0x00390031,
44
+ 0x00300032, 0x00310032, 0x00320032, 0x00330032, 0x00340032,
45
+ 0x00350032, 0x00360032, 0x00370032, 0x00380032, 0x00390032,
46
+ 0x00300033, 0x00310033, 0x00320033, 0x00330033, 0x00340033,
47
+ 0x00350033, 0x00360033, 0x00370033, 0x00380033, 0x00390033,
48
+ 0x00300034, 0x00310034, 0x00320034, 0x00330034, 0x00340034,
49
+ 0x00350034, 0x00360034, 0x00370034, 0x00380034, 0x00390034,
50
+ 0x00300035, 0x00310035, 0x00320035, 0x00330035, 0x00340035,
51
+ 0x00350035, 0x00360035, 0x00370035, 0x00380035, 0x00390035,
52
+ 0x00300036, 0x00310036, 0x00320036, 0x00330036, 0x00340036,
53
+ 0x00350036, 0x00360036, 0x00370036, 0x00380036, 0x00390036,
54
+ 0x00300037, 0x00310037, 0x00320037, 0x00330037, 0x00340037,
55
+ 0x00350037, 0x00360037, 0x00370037, 0x00380037, 0x00390037,
56
+ 0x00300038, 0x00310038, 0x00320038, 0x00330038, 0x00340038,
57
+ 0x00350038, 0x00360038, 0x00370038, 0x00380038, 0x00390038,
58
+ 0x00300039, 0x00310039, 0x00320039, 0x00330039, 0x00340039,
59
+ 0x00350039, 0x00360039, 0x00370039, 0x00380039, 0x00390039
60
+ ]);
61
+
62
+ // Lookup table for pairwise char codes in range [0x00-0xFF]
63
+ // @ts-ignore: decorator
64
+ @lazy @inline const HEX_DIGITS =
65
+ "000102030405060708090a0b0c0d0e0f\
66
+ 101112131415161718191a1b1c1d1e1f\
67
+ 202122232425262728292a2b2c2d2e2f\
68
+ 303132333435363738393a3b3c3d3e3f\
69
+ 404142434445464748494a4b4c4d4e4f\
70
+ 505152535455565758595a5b5c5d5e5f\
71
+ 606162636465666768696a6b6c6d6e6f\
72
+ 707172737475767778797a7b7c7d7e7f\
73
+ 808182838485868788898a8b8c8d8e8f\
74
+ 909192939495969798999a9b9c9d9e9f\
75
+ a0a1a2a3a4a5a6a7a8a9aaabacadaeaf\
76
+ b0b1b2b3b4b5b6b7b8b9babbbcbdbebf\
77
+ c0c1c2c3c4c5c6c7c8c9cacbcccdcecf\
78
+ d0d1d2d3d4d5d6d7d8d9dadbdcdddedf\
79
+ e0e1e2e3e4e5e6e7e8e9eaebecedeeef\
80
+ f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
81
+
82
+ // @ts-ignore: decorator
83
+ @lazy @inline const ANY_DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz";
84
+
85
+ // @ts-ignore: decorator
86
+ @lazy @inline const EXP_POWERS = memory.data<i16>([/* eslint-disable indent */
87
+ -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980,
88
+ -954, -927, -901, -874, -847, -821, -794, -768, -741, -715,
89
+ -688, -661, -635, -608, -582, -555, -529, -502, -475, -449,
90
+ -422, -396, -369, -343, -316, -289, -263, -236, -210, -183,
91
+ -157, -130, -103, -77, -50, -24, 3, 30, 56, 83,
92
+ 109, 136, 162, 189, 216, 242, 269, 295, 322, 348,
93
+ 375, 402, 428, 455, 481, 508, 534, 561, 588, 614,
94
+ 641, 667, 694, 720, 747, 774, 800, 827, 853, 880,
95
+ 907, 933, 960, 986, 1013, 1039, 1066
96
+ /* eslint-enable indent */]);
97
+
98
+ // 1e-348, 1e-340, ..., 1e340
99
+ // @ts-ignore: decorator
100
+ @lazy @inline const FRC_POWERS = memory.data<u64>([
101
+ 0xFA8FD5A0081C0288, 0xBAAEE17FA23EBF76, 0x8B16FB203055AC76, 0xCF42894A5DCE35EA,
102
+ 0x9A6BB0AA55653B2D, 0xE61ACF033D1A45DF, 0xAB70FE17C79AC6CA, 0xFF77B1FCBEBCDC4F,
103
+ 0xBE5691EF416BD60C, 0x8DD01FAD907FFC3C, 0xD3515C2831559A83, 0x9D71AC8FADA6C9B5,
104
+ 0xEA9C227723EE8BCB, 0xAECC49914078536D, 0x823C12795DB6CE57, 0xC21094364DFB5637,
105
+ 0x9096EA6F3848984F, 0xD77485CB25823AC7, 0xA086CFCD97BF97F4, 0xEF340A98172AACE5,
106
+ 0xB23867FB2A35B28E, 0x84C8D4DFD2C63F3B, 0xC5DD44271AD3CDBA, 0x936B9FCEBB25C996,
107
+ 0xDBAC6C247D62A584, 0xA3AB66580D5FDAF6, 0xF3E2F893DEC3F126, 0xB5B5ADA8AAFF80B8,
108
+ 0x87625F056C7C4A8B, 0xC9BCFF6034C13053, 0x964E858C91BA2655, 0xDFF9772470297EBD,
109
+ 0xA6DFBD9FB8E5B88F, 0xF8A95FCF88747D94, 0xB94470938FA89BCF, 0x8A08F0F8BF0F156B,
110
+ 0xCDB02555653131B6, 0x993FE2C6D07B7FAC, 0xE45C10C42A2B3B06, 0xAA242499697392D3,
111
+ 0xFD87B5F28300CA0E, 0xBCE5086492111AEB, 0x8CBCCC096F5088CC, 0xD1B71758E219652C,
112
+ 0x9C40000000000000, 0xE8D4A51000000000, 0xAD78EBC5AC620000, 0x813F3978F8940984,
113
+ 0xC097CE7BC90715B3, 0x8F7E32CE7BEA5C70, 0xD5D238A4ABE98068, 0x9F4F2726179A2245,
114
+ 0xED63A231D4C4FB27, 0xB0DE65388CC8ADA8, 0x83C7088E1AAB65DB, 0xC45D1DF942711D9A,
115
+ 0x924D692CA61BE758, 0xDA01EE641A708DEA, 0xA26DA3999AEF774A, 0xF209787BB47D6B85,
116
+ 0xB454E4A179DD1877, 0x865B86925B9BC5C2, 0xC83553C5C8965D3D, 0x952AB45CFA97A0B3,
117
+ 0xDE469FBD99A05FE3, 0xA59BC234DB398C25, 0xF6C69A72A3989F5C, 0xB7DCBF5354E9BECE,
118
+ 0x88FCF317F22241E2, 0xCC20CE9BD35C78A5, 0x98165AF37B2153DF, 0xE2A0B5DC971F303A,
119
+ 0xA8D9D1535CE3B396, 0xFB9B7CD9A4A7443C, 0xBB764C4CA7A44410, 0x8BAB8EEFB6409C1A,
120
+ 0xD01FEF10A657842C, 0x9B10A4E5E9913129, 0xE7109BFBA19C0C9D, 0xAC2820D9623BF429,
121
+ 0x80444B5E7AA7CF85, 0xBF21E44003ACDD2D, 0x8E679C2F5E44FF8F, 0xD433179D9C8CB841,
122
+ 0x9E19DB92B4E31BA9, 0xEB96BF6EBADF77D9, 0xAF87023B9BF0EE6B
123
+ ]);
124
+
125
+ // @ts-ignore: decorator
126
+ @inline
127
+ export function isPowerOf2<T extends number>(value: T): bool {
128
+ return popcnt<T>(value) == 1;
129
+ }
130
+
131
+ // Count number of decimals for u32 values
132
+ // In our case input value always non-zero so we can simplify some parts
133
+ export function decimalCount32(value: u32): u32 {
134
+ if (value < 100000) {
135
+ if (value < 100) {
136
+ return 1 + u32(value >= 10);
137
+ } else {
138
+ return 3 + u32(value >= 10000) + u32(value >= 1000);
139
+ }
140
+ } else {
141
+ if (value < 10000000) {
142
+ return 6 + u32(value >= 1000000);
143
+ } else {
144
+ return 8 + u32(value >= 1000000000) + u32(value >= 100000000);
145
+ }
146
+ }
147
+ }
148
+
149
+ // Count number of decimals for u64 values
150
+ // In our case input value always greater than 2^32-1 so we can skip some parts
151
+ export function decimalCount64High(value: u64): u32 {
152
+ if (value < 1000000000000000) {
153
+ if (value < 1000000000000) {
154
+ return 10 + u32(value >= 100000000000) + u32(value >= 10000000000);
155
+ } else {
156
+ return 13 + u32(value >= 100000000000000) + u32(value >= 10000000000000);
157
+ }
158
+ } else {
159
+ if (value < 100000000000000000) {
160
+ return 16 + u32(value >= 10000000000000000);
161
+ } else {
162
+ return 18 + u32(value >= 10000000000000000000) + u32(value >= 1000000000000000000);
163
+ }
164
+ }
165
+ }
166
+
167
+ function ulog_base(num: u64, base: i32): u32 {
168
+ if (isPowerOf2(base)) {
169
+ return (63 - <u32>clz(num)) / (31 - <u32>clz(base)) + 1;
170
+ }
171
+ let b64 = u64(base), b = b64, e: u32 = 1;
172
+ while (num >= b) {
173
+ num /= b;
174
+ b *= b;
175
+ e <<= 1;
176
+ }
177
+ while (num >= 1) {
178
+ num /= b64;
179
+ e++;
180
+ }
181
+ return e - 1;
182
+ }
183
+
184
+ function utoa32_dec_lut(buffer: usize, num: u32, offset: usize): void {
185
+ while (num >= 10000) {
186
+ // in most VMs i32/u32 div and modulo by constant can be shared and simplificate
187
+ let t = num / 10000;
188
+ let r = num % 10000;
189
+ num = t;
190
+
191
+ let d1 = r / 100;
192
+ let d2 = r % 100;
193
+
194
+ let digits1 = <u64>load<u32>(DIGITS + (<usize>d1 << alignof<u32>()));
195
+ let digits2 = <u64>load<u32>(DIGITS + (<usize>d2 << alignof<u32>()));
196
+
197
+ offset -= 4;
198
+ store<u64>(buffer + (offset << 1), digits1 | (digits2 << 32));
199
+ }
200
+
201
+ if (num >= 100) {
202
+ let t = num / 100;
203
+ let d1 = num % 100;
204
+ num = t;
205
+ offset -= 2;
206
+ let digits = load<u32>(DIGITS + (<usize>d1 << alignof<u32>()));
207
+ store<u32>(buffer + (offset << 1), digits);
208
+ }
209
+
210
+ if (num >= 10) {
211
+ offset -= 2;
212
+ let digits = load<u32>(DIGITS + (<usize>num << alignof<u32>()));
213
+ store<u32>(buffer + (offset << 1), digits);
214
+ } else {
215
+ offset -= 1;
216
+ let digit = CharCode._0 + num;
217
+ store<u16>(buffer + (offset << 1), digit);
218
+ }
219
+ }
220
+
221
+ function utoa64_dec_lut(buffer: usize, num: u64, offset: usize): void {
222
+ while (num >= 100000000) {
223
+ let t = num / 100000000;
224
+ let r = <usize>(num - t * 100000000);
225
+ num = t;
226
+
227
+ let b = r / 10000;
228
+ let c = r % 10000;
229
+
230
+ let b1 = b / 100;
231
+ let b2 = b % 100;
232
+ let c1 = c / 100;
233
+ let c2 = c % 100;
234
+
235
+ let digits1 = <u64>load<u32>(DIGITS + (<usize>c1 << alignof<u32>()));
236
+ let digits2 = <u64>load<u32>(DIGITS + (<usize>c2 << alignof<u32>()));
237
+
238
+ offset -= 4;
239
+ store<u64>(buffer + (offset << 1), digits1 | (digits2 << 32));
240
+
241
+ digits1 = <u64>load<u32>(DIGITS + (<usize>b1 << alignof<u32>()));
242
+ digits2 = <u64>load<u32>(DIGITS + (<usize>b2 << alignof<u32>()));
243
+
244
+ offset -= 4;
245
+ store<u64>(buffer + (offset << 1), digits1 | (digits2 << 32));
246
+ }
247
+
248
+ utoa32_dec_lut(buffer, <u32>num, offset);
249
+ }
250
+
251
+ function utoa_hex_lut(buffer: usize, num: u64, offset: usize): void {
252
+ const lut = changetype<usize>(HEX_DIGITS);
253
+ while (offset >= 2) {
254
+ offset -= 2;
255
+ store<u32>(
256
+ buffer + (offset << 1),
257
+ load<u32>(lut + ((<usize>num & 0xFF) << alignof<u32>()))
258
+ );
259
+ num >>= 8;
260
+ }
261
+ if (offset & 1) {
262
+ store<u16>(buffer, load<u16>(lut + (<usize>num << 6)));
263
+ }
264
+ }
265
+
266
+ function utoa_dec_simple<T extends number>(buffer: usize, num: T, offset: usize): void {
267
+ do {
268
+ let t = num / 10;
269
+ let r = <u32>(num % 10);
270
+ num = changetype<T>(t);
271
+ offset--;
272
+ store<u16>(buffer + (offset << 1), CharCode._0 + r);
273
+ } while (num);
274
+ }
275
+
276
+ function utoa_hex_simple<T extends number>(buffer: usize, num: T, offset: usize): void {
277
+ do {
278
+ let d = num & 0x0F | CharCode._0;
279
+ d += select<T>(<T>0x27, <T>0, d > <T>CharCode._9);
280
+ offset--;
281
+ store<u16>(buffer + (offset << 1), d);
282
+ // @ts-ignore: type
283
+ num >>= 4;
284
+ } while (num);
285
+ }
286
+
287
+ // @ts-ignore: decorator
288
+ @inline
289
+ export function utoa32_dec_core(buffer: usize, num: u32, offset: usize): void {
290
+ if (ASC_SHRINK_LEVEL >= 1) {
291
+ utoa_dec_simple<u32>(buffer, num, offset);
292
+ } else {
293
+ utoa32_dec_lut(buffer, num, offset);
294
+ }
295
+ }
296
+
297
+ // @ts-ignore: decorator
298
+ @inline
299
+ function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void {
300
+ if (ASC_SHRINK_LEVEL >= 1) {
301
+ utoa_hex_simple<u32>(buffer, num, offset);
302
+ } else {
303
+ utoa_hex_lut(buffer, num, offset);
304
+ }
305
+ }
306
+
307
+ // @ts-ignore: decorator
308
+ @inline
309
+ function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void {
310
+ if (ASC_SHRINK_LEVEL >= 1) {
311
+ utoa_dec_simple<u64>(buffer, num, offset);
312
+ } else {
313
+ utoa64_dec_lut(buffer, num, offset);
314
+ }
315
+ }
316
+
317
+ // @ts-ignore: decorator
318
+ @inline
319
+ function utoa64_hex_core(buffer: usize, num: u64, offset: usize): void {
320
+ if (ASC_SHRINK_LEVEL >= 1) {
321
+ utoa_hex_simple<u64>(buffer, num, offset);
322
+ } else {
323
+ utoa_hex_lut(buffer, num, offset);
324
+ }
325
+ }
326
+
327
+ function utoa64_any_core(buffer: usize, num: u64, offset: usize, radix: i32): void {
328
+ const lut = changetype<usize>(ANY_DIGITS);
329
+ let base = u64(radix);
330
+ if ((radix & (radix - 1)) == 0) { // for radix which pow of two
331
+ let shift = u64(ctz(radix) & 7);
332
+ let mask = base - 1;
333
+ do {
334
+ offset--;
335
+ store<u16>(buffer + (offset << 1), load<u16>(lut + (usize(num & mask) << 1)));
336
+ num >>= shift;
337
+ } while (num);
338
+ } else {
339
+ do {
340
+ offset--;
341
+ let q = num / base;
342
+ store<u16>(buffer + (offset << 1), load<u16>(lut + (usize(num - q * base) << 1)));
343
+ num = q;
344
+ } while (num);
345
+ }
346
+ }
347
+
348
+ export function utoa32(value: u32, radix: i32): String {
349
+ if (radix < 2 || radix > 36) {
350
+ throw new RangeError("toString() radix argument must be between 2 and 36");
351
+ }
352
+ if (!value) return "0";
353
+ let out: String;
354
+
355
+ if (radix == 10) {
356
+ let decimals = decimalCount32(value);
357
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
358
+ utoa32_dec_core(changetype<usize>(out), value, decimals);
359
+ } else if (radix == 16) {
360
+ let decimals = (31 - clz(value) >> 2) + 1;
361
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
362
+ utoa32_hex_core(changetype<usize>(out), value, decimals);
363
+ } else {
364
+ let decimals = ulog_base(value, radix);
365
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
366
+ utoa64_any_core(changetype<usize>(out), value, decimals, radix);
367
+ }
368
+ return out;
369
+ }
370
+
371
+ export function itoa32(value: i32, radix: i32): String {
372
+ if (radix < 2 || radix > 36) {
373
+ throw new RangeError("toString() radix argument must be between 2 and 36");
374
+ }
375
+ if (!value) return "0";
376
+
377
+ let sign = (value >>> 31) << 1;
378
+ if (sign) value = -value;
379
+ let out: String;
380
+
381
+ if (radix == 10) {
382
+ let decimals = decimalCount32(value);
383
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
384
+ utoa32_dec_core(changetype<usize>(out) + sign, value, decimals);
385
+ } else if (radix == 16) {
386
+ let decimals = (31 - clz(value) >> 2) + 1;
387
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
388
+ utoa32_hex_core(changetype<usize>(out) + sign, value, decimals);
389
+ } else {
390
+ let val32 = u32(value);
391
+ let decimals = ulog_base(val32, radix);
392
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
393
+ utoa64_any_core(changetype<usize>(out) + sign, val32, decimals, radix);
394
+ }
395
+ if (sign) store<u16>(changetype<usize>(out), CharCode.MINUS);
396
+ return out;
397
+ }
398
+
399
+ export function utoa64(value: u64, radix: i32): String {
400
+ if (radix < 2 || radix > 36) {
401
+ throw new RangeError("toString() radix argument must be between 2 and 36");
402
+ }
403
+ if (!value) return "0";
404
+ let out: String;
405
+
406
+ if (radix == 10) {
407
+ if (value <= u32.MAX_VALUE) {
408
+ let val32 = <u32>value;
409
+ let decimals = decimalCount32(val32);
410
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
411
+ utoa32_dec_core(changetype<usize>(out), val32, decimals);
412
+ } else {
413
+ let decimals = decimalCount64High(value);
414
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
415
+ utoa64_dec_core(changetype<usize>(out), value, decimals);
416
+ }
417
+ } else if (radix == 16) {
418
+ let decimals = (63 - u32(clz(value)) >> 2) + 1;
419
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
420
+ utoa64_hex_core(changetype<usize>(out), value, decimals);
421
+ } else {
422
+ let decimals = ulog_base(value, radix);
423
+ out = changetype<String>(__new(decimals << 1, idof<String>()));
424
+ utoa64_any_core(changetype<usize>(out), value, decimals, radix);
425
+ }
426
+ return out;
427
+ }
428
+
429
+ export function itoa64(value: i64, radix: i32): String {
430
+ if (radix < 2 || radix > 36) {
431
+ throw new RangeError("toString() radix argument must be between 2 and 36");
432
+ }
433
+ if (!value) return "0";
434
+
435
+ let sign = u32(value >>> 63) << 1;
436
+ if (sign) value = -value;
437
+ let out: String;
438
+
439
+ if (radix == 10) {
440
+ if (<u64>value <= <u64>u32.MAX_VALUE) {
441
+ let val32 = <u32>value;
442
+ let decimals = decimalCount32(val32);
443
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
444
+ utoa32_dec_core(changetype<usize>(out) + sign, val32, decimals);
445
+ } else {
446
+ let decimals = decimalCount64High(value);
447
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
448
+ utoa64_dec_core(changetype<usize>(out) + sign, value, decimals);
449
+ }
450
+ } else if (radix == 16) {
451
+ let decimals = (63 - u32(clz(value)) >> 2) + 1;
452
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
453
+ utoa64_hex_core(changetype<usize>(out) + sign, value, decimals);
454
+ } else {
455
+ let decimals = ulog_base(value, radix);
456
+ out = changetype<String>(__new((decimals << 1) + sign, idof<String>()));
457
+ utoa64_any_core(changetype<usize>(out) + sign, value, decimals, radix);
458
+ }
459
+ if (sign) store<u16>(changetype<usize>(out), CharCode.MINUS);
460
+ return out;
461
+ }
462
+
463
+ // @ts-ignore: decorator
464
+ @lazy let _K: i32 = 0;
465
+
466
+ // // @ts-ignore: decorator
467
+ // @lazy
468
+ // let _frc: u64 = 0;
469
+
470
+ // @ts-ignore: decorator
471
+ @lazy let _exp: i32 = 0;
472
+
473
+ // @ts-ignore: decorator
474
+ @lazy let _frc_minus: u64 = 0;
475
+
476
+ // @ts-ignore: decorator
477
+ @lazy let _frc_plus: u64 = 0;
478
+
479
+ // @ts-ignore: decorator
480
+ @lazy let _frc_pow: u64 = 0;
481
+
482
+ // @ts-ignore: decorator
483
+ @lazy let _exp_pow: i32 = 0;
484
+
485
+ // @ts-ignore: decorator
486
+ @inline
487
+ function umul64f(u: u64, v: u64): u64 {
488
+ let u0 = u & 0xFFFFFFFF;
489
+ let v0 = v & 0xFFFFFFFF;
490
+
491
+ let u1 = u >> 32;
492
+ let v1 = v >> 32;
493
+
494
+ let l = u0 * v0;
495
+ let t = u1 * v0 + (l >> 32);
496
+ let w = u0 * v1 + (t & 0xFFFFFFFF);
497
+
498
+ w += 0x7FFFFFFF; // rounding
499
+
500
+ t >>= 32;
501
+ w >>= 32;
502
+
503
+ return u1 * v1 + t + w;
504
+ }
505
+
506
+ // @ts-ignore: decorator
507
+ @inline
508
+ function umul64e(e1: i32, e2: i32): i32 {
509
+ return e1 + e2 + 64; // where 64 is significand size
510
+ }
511
+
512
+ // @ts-ignore: decorator
513
+ @inline
514
+ function normalizedBoundaries(f: u64, e: i32, isSingle: bool): void {
515
+ let frc = (f << 1) + 1;
516
+ let exp = e - 1;
517
+ let off = <i32>clz<u64>(frc);
518
+ frc <<= off;
519
+ exp -= off;
520
+
521
+ let m = 1 + i32(f == (isSingle ? 0x00800000 : 0x0010000000000000));
522
+
523
+ _frc_plus = frc;
524
+ _frc_minus = ((f << m) - 1) << e - m - exp;
525
+ _exp = exp;
526
+ }
527
+
528
+ // @ts-ignore: decorator
529
+ @inline
530
+ function grisuRound(buffer: usize, len: i32, delta: u64, rest: u64, ten_kappa: u64, wp_w: u64): void {
531
+ let lastp = buffer + ((len - 1) << 1);
532
+ let digit = load<u16>(lastp);
533
+ while (
534
+ rest < wp_w &&
535
+ delta - rest >= ten_kappa && (
536
+ rest + ten_kappa < wp_w ||
537
+ wp_w - rest > rest + ten_kappa - wp_w
538
+ )
539
+ ) {
540
+ --digit;
541
+ rest += ten_kappa;
542
+ }
543
+ store<u16>(lastp, digit);
544
+ }
545
+
546
+ // @ts-ignore: decorator
547
+ @inline
548
+ function getCachedPower(minExp: i32): void {
549
+ const c = reinterpret<f64>(0x3FD34413509F79FE); // 1 / lg(10) = 0.30102999566398114
550
+ let dk = (-61 - minExp) * c + 347; // dk must be positive, so can do ceiling in positive
551
+ let k = <i32>dk;
552
+ k += i32(k != dk); // conversion with ceil
553
+
554
+ let index = (k >> 3) + 1;
555
+ _K = 348 - (index << 3); // decimal exponent no need lookup table
556
+ _frc_pow = load<u64>(FRC_POWERS + (<usize>index << alignof<u64>()));
557
+ _exp_pow = load<i16>(EXP_POWERS + (<usize>index << alignof<i16>()));
558
+ }
559
+
560
+ // @ts-ignore: decorator
561
+ @inline
562
+ function grisu2(value: f64, buffer: usize, sign: i32, isSingle: bool): i32 {
563
+ let frc: u64;
564
+ let exp: i32;
565
+
566
+ // frexp routine
567
+ if (isSingle) {
568
+ let uv = reinterpret<u32>(<f32>value);
569
+ exp = (uv & 0x7F800000) >>> 23;
570
+ let sid = uv & 0x007FFFFF;
571
+ frc = (u64(exp != 0) << 23) + sid;
572
+ exp = (exp || 1) - (0x7F + 23);
573
+ } else {
574
+ let uv = reinterpret<u64>(value);
575
+ exp = i32((uv & 0x7FF0000000000000) >>> 52);
576
+ let sid = uv & 0x000FFFFFFFFFFFFF;
577
+ frc = (u64(exp != 0) << 52) + sid;
578
+ exp = (exp || 1) - (0x3FF + 52);
579
+ }
580
+
581
+ normalizedBoundaries(frc, exp, isSingle);
582
+ getCachedPower(_exp);
583
+
584
+ // normalize
585
+ let off = <i32>clz<u64>(frc);
586
+ frc <<= off;
587
+ exp -= off;
588
+
589
+ let frc_pow = _frc_pow;
590
+ let exp_pow = _exp_pow;
591
+
592
+ let w_frc = umul64f(frc, frc_pow);
593
+ let w_exp = umul64e(exp, exp_pow);
594
+
595
+ let wp_frc = umul64f(_frc_plus, frc_pow) - 1;
596
+ let wp_exp = umul64e(_exp, exp_pow);
597
+
598
+ let wm_frc = umul64f(_frc_minus, frc_pow) + 1;
599
+ let delta = wp_frc - wm_frc;
600
+
601
+ return genDigits(buffer, w_frc, w_exp, wp_frc, wp_exp, delta, sign);
602
+ }
603
+
604
+ function genDigits(buffer: usize, w_frc: u64, w_exp: i32, mp_frc: u64, mp_exp: i32, delta: u64, sign: i32): i32 {
605
+ let one_exp = -mp_exp;
606
+ let one_frc = (<u64>1) << one_exp;
607
+ let mask = one_frc - 1;
608
+
609
+ let wp_w_frc = mp_frc - w_frc;
610
+
611
+ let p1 = u32(mp_frc >> one_exp);
612
+ let p2 = mp_frc & mask;
613
+
614
+ let kappa = <i32>decimalCount32(p1);
615
+ let len = sign;
616
+
617
+ while (kappa > 0) {
618
+ let d: u32;
619
+ switch (kappa) {
620
+ case 10: { d = p1 / 1000000000; p1 %= 1000000000; break; }
621
+ case 9: { d = p1 / 100000000; p1 %= 100000000; break; }
622
+ case 8: { d = p1 / 10000000; p1 %= 10000000; break; }
623
+ case 7: { d = p1 / 1000000; p1 %= 1000000; break; }
624
+ case 6: { d = p1 / 100000; p1 %= 100000; break; }
625
+ case 5: { d = p1 / 10000; p1 %= 10000; break; }
626
+ case 4: { d = p1 / 1000; p1 %= 1000; break; }
627
+ case 3: { d = p1 / 100; p1 %= 100; break; }
628
+ case 2: { d = p1 / 10; p1 %= 10; break; }
629
+ case 1: { d = p1; p1 = 0; break; }
630
+ default: { d = 0; break; }
631
+ }
632
+
633
+ if (d | len) store<u16>(buffer + (len++ << 1), CharCode._0 + <u16>d);
634
+
635
+ --kappa;
636
+ let tmp = ((<u64>p1) << one_exp) + p2;
637
+ if (tmp <= delta) {
638
+ _K += kappa;
639
+ grisuRound(buffer, len, delta, tmp, <u64>load<u32>(POWERS10 + (<usize>kappa << alignof<u32>())) << one_exp, wp_w_frc);
640
+ return len;
641
+ }
642
+ }
643
+
644
+ while (true) {
645
+ p2 *= 10;
646
+ delta *= 10;
647
+
648
+ let d = p2 >> one_exp;
649
+ if (d | len) store<u16>(buffer + (len++ << 1), CharCode._0 + <u16>d);
650
+
651
+ p2 &= mask;
652
+ --kappa;
653
+ if (p2 < delta) {
654
+ _K += kappa;
655
+ wp_w_frc *= <u64>load<u32>(POWERS10 + (<usize>-kappa << alignof<u32>()));
656
+ grisuRound(buffer, len, delta, p2, one_frc, wp_w_frc);
657
+ return len;
658
+ }
659
+ }
660
+ }
661
+
662
+ // @ts-ignore: decorator
663
+ @inline
664
+ function genExponent(buffer: usize, k: i32): i32 {
665
+ let sign = k < 0;
666
+ if (sign) k = -k;
667
+ let decimals = decimalCount32(k) + 1;
668
+ utoa32_dec_core(buffer, k, decimals);
669
+ store<u16>(buffer, <u16>select<u32>(CharCode.MINUS, CharCode.PLUS, sign));
670
+ return decimals;
671
+ }
672
+
673
+ function prettify(buffer: usize, length: i32, k: i32): i32 {
674
+ if (!k) {
675
+ store<u32>(buffer + (length << 1), CharCode.DOT | (CharCode._0 << 16));
676
+ return length + 2;
677
+ }
678
+
679
+ let kk = length + k;
680
+ if (length <= kk && kk <= 21) {
681
+ // 1234e7 -> 12340000000
682
+ for (let i = length; i < kk; ++i) {
683
+ store<u16>(buffer + (i << 1), CharCode._0);
684
+ }
685
+ store<u32>(buffer + (kk << 1), CharCode.DOT | (CharCode._0 << 16));
686
+ return kk + 2;
687
+ } else if (kk > 0 && kk <= 21) {
688
+ // 1234e-2 -> 12.34
689
+ let ptr = buffer + (kk << 1);
690
+ memory.copy(
691
+ ptr + 2,
692
+ ptr,
693
+ -k << 1
694
+ );
695
+ store<u16>(buffer + (kk << 1), CharCode.DOT);
696
+ return length + 1;
697
+ } else if (-6 < kk && kk <= 0) {
698
+ // 1234e-6 -> 0.001234
699
+ let offset = 2 - kk;
700
+ memory.copy(
701
+ buffer + (offset << 1),
702
+ buffer,
703
+ length << 1
704
+ );
705
+ store<u32>(buffer, CharCode._0 | (CharCode.DOT << 16));
706
+ for (let i = 2; i < offset; ++i) {
707
+ store<u16>(buffer + (i << 1), CharCode._0);
708
+ }
709
+ return length + offset;
710
+ } else if (length == 1) {
711
+ // 1e30
712
+ store<u16>(buffer, CharCode.e, 2);
713
+ length = genExponent(buffer + 4, kk - 1);
714
+ return length + 2;
715
+ } else {
716
+ let len = length << 1;
717
+ memory.copy(
718
+ buffer + 4,
719
+ buffer + 2,
720
+ len - 2
721
+ );
722
+ store<u16>(buffer, CharCode.DOT, 2);
723
+ store<u16>(buffer + len, CharCode.e, 2);
724
+ length += genExponent(buffer + len + 4, kk - 1);
725
+ return length + 2;
726
+ }
727
+ }
728
+
729
+ function dtoa_core(buffer: usize, value: f64, isSingle: bool): i32 {
730
+ let sign = i32(value < 0);
731
+ if (sign) {
732
+ value = -value;
733
+ store<u16>(buffer, CharCode.MINUS);
734
+ }
735
+ // assert(value > 0 && value <= (isSingle ? f32.MAX_VALUE : f64.MAX_VALUE));
736
+ let len = grisu2(value, buffer, sign, isSingle);
737
+ len = prettify(buffer + (sign << 1), len - sign, _K);
738
+ return len + sign;
739
+ }
740
+
741
+ // @ts-ignore: decorator
742
+ @lazy @inline const dtoa_buf = memory.data(MAX_DOUBLE_LENGTH << 1);
743
+
744
+ export function dtoa<T extends number>(value: T): String {
745
+ const isSingle = isFloat<T>() && sizeof<T>() == 4;
746
+ return dtoa_impl(value, isSingle);
747
+ }
748
+
749
+ // @ts-ignore: decorator
750
+ @inline
751
+ function dtoa_impl(value: f64, isSingle: bool): String {
752
+ if (value == 0) return "0.0";
753
+ if (!isFinite(value)) {
754
+ if (isNaN(value)) return "NaN";
755
+ return select<String>("-Infinity", "Infinity", value < 0);
756
+ }
757
+ let size = dtoa_core(dtoa_buf, value, isSingle) << 1;
758
+ let result = changetype<String>(__new(size, idof<String>()));
759
+ memory.copy(changetype<usize>(result), dtoa_buf, size);
760
+ return result;
761
+ }
762
+
763
+ export function itoa_buffered<T extends number>(buffer: usize, value: T): u32 {
764
+ let sign: u32 = 0;
765
+ if (isSigned<T>()) {
766
+ sign = u32(value < 0);
767
+ if (sign) {
768
+ if (sizeof<T>() == 1) {
769
+ if (value == -0x80) {
770
+ // -0x80 -> -128
771
+ store<u64>(buffer,
772
+ <u64>CharCode.MINUS |
773
+ <u64>(CharCode._0 + 1) << 16 |
774
+ <u64>(CharCode._0 + 2) << 32 |
775
+ <u64>(CharCode._0 + 8) << 48
776
+ );
777
+ return 4;
778
+ }
779
+ }
780
+ if (sizeof<T>() == 2) {
781
+ if (value == -0x8000) {
782
+ // -0x8000 -> -32768
783
+ store<u64>(buffer,
784
+ <u64>CharCode.MINUS |
785
+ <u64>(CharCode._0 + 3) << 16 |
786
+ <u64>(CharCode._0 + 2) << 32 |
787
+ <u64>(CharCode._0 + 7) << 48
788
+ ); // -327
789
+ store<u32>(buffer + 8,
790
+ (CharCode._0 + 6) << 0 |
791
+ (CharCode._0 + 8) << 16
792
+ ); // 68
793
+ return 6;
794
+ }
795
+ }
796
+ store<u16>(buffer, CharCode.MINUS);
797
+ // @ts-ignore
798
+ value = -value;
799
+ }
800
+ }
801
+ let dest = buffer + (sign << 1);
802
+ if (ASC_SHRINK_LEVEL <= 1) {
803
+ if (isSigned<T>()) {
804
+ if (sizeof<T>() <= 4) {
805
+ if (<u32>value < 10) {
806
+ store<u16>(dest, value | CharCode._0);
807
+ return 1 + sign;
808
+ }
809
+ } else {
810
+ if (<u64>value < 10) {
811
+ store<u16>(dest, value | CharCode._0);
812
+ return 1 + sign;
813
+ }
814
+ }
815
+ } else {
816
+ if (value < 10) {
817
+ store<u16>(buffer, value | CharCode._0);
818
+ return 1;
819
+ }
820
+ }
821
+ }
822
+ let decimals: u32 = 0;
823
+ if (sizeof<T>() <= 4) {
824
+ let val32 = <u32>value;
825
+ decimals = decimalCount32(val32);
826
+ utoa32_dec_core(dest, val32, decimals);
827
+ } else {
828
+ if (<u64>value <= <u64>u32.MAX_VALUE) {
829
+ let val32 = <u32>value;
830
+ decimals = decimalCount32(val32);
831
+ utoa32_dec_core(dest, val32, decimals);
832
+ } else {
833
+ let val64 = <u64>value;
834
+ decimals = decimalCount64High(val64);
835
+ utoa64_dec_core(dest, val64, decimals);
836
+ }
837
+ }
838
+ return sign + decimals;
839
+ }
840
+
841
+ export function dtoa_buffered<T extends number>(buffer: usize, value: T): u32 {
842
+ const isSingle = isFloat<T>() && sizeof<T>() == 4;
843
+ return dtoa_buffered_impl(buffer, value, isSingle);
844
+ }
845
+
846
+ // @ts-ignore: decorator
847
+ @inline
848
+ function dtoa_buffered_impl(buffer: usize, value: f64, isSingle: bool): u32 {
849
+ if (value == 0) {
850
+ store<u16>(buffer, CharCode._0);
851
+ store<u16>(buffer, CharCode.DOT, 2);
852
+ store<u16>(buffer, CharCode._0, 4);
853
+ return 3;
854
+ }
855
+ if (!isFinite(value)) {
856
+ if (isNaN(value)) {
857
+ store<u16>(buffer, CharCode.N);
858
+ store<u16>(buffer, CharCode.a, 2);
859
+ store<u16>(buffer, CharCode.N, 4);
860
+ return 3;
861
+ } else {
862
+ let sign = value < 0;
863
+ if (sign) {
864
+ store<u16>(buffer, CharCode.MINUS); // -
865
+ buffer += 2;
866
+ }
867
+ store<u64>(buffer, 0x690066006E0049, 0); // ifnI
868
+ store<u64>(buffer, 0x7900740069006E, 8); // ytin
869
+ return 8 + u32(sign);
870
+ }
871
+ }
872
+ return dtoa_core(buffer, value, isSingle);
873
+ }