toiljs 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) 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 +193 -68
  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/channel/channel.d.ts +23 -0
  26. package/build/client/channel/channel.js +94 -0
  27. package/build/client/error-boundary.d.ts +16 -0
  28. package/build/client/error-boundary.js +19 -0
  29. package/build/client/head/head.d.ts +26 -0
  30. package/build/client/head/head.js +87 -0
  31. package/build/client/head.d.ts +26 -0
  32. package/build/client/head.js +87 -0
  33. package/build/client/hooks.d.ts +17 -0
  34. package/build/client/hooks.js +48 -0
  35. package/build/client/index.d.ts +18 -6
  36. package/build/client/index.js +10 -3
  37. package/build/client/lazy.d.ts +16 -0
  38. package/build/client/lazy.js +53 -0
  39. package/build/client/match.js +7 -0
  40. package/build/client/mount.d.ts +2 -0
  41. package/build/client/mount.js +13 -0
  42. package/build/client/navigation/Link.d.ts +8 -0
  43. package/build/client/navigation/Link.js +44 -0
  44. package/build/client/navigation/NavLink.d.ts +14 -0
  45. package/build/client/navigation/NavLink.js +37 -0
  46. package/build/client/navigation/navigation.d.ts +13 -0
  47. package/build/client/navigation/navigation.js +97 -0
  48. package/build/client/navigation/prefetch.d.ts +11 -0
  49. package/build/client/navigation/prefetch.js +100 -0
  50. package/build/client/navigation/scroll.d.ts +8 -0
  51. package/build/client/navigation/scroll.js +36 -0
  52. package/build/client/navigation.d.ts +13 -0
  53. package/build/client/navigation.js +97 -0
  54. package/build/client/params-context.d.ts +2 -0
  55. package/build/client/params-context.js +2 -0
  56. package/build/client/prefetch.d.ts +11 -0
  57. package/build/client/prefetch.js +100 -0
  58. package/build/client/routing/Router.d.ts +7 -0
  59. package/build/client/routing/Router.js +55 -0
  60. package/build/client/routing/error-boundary.d.ts +16 -0
  61. package/build/client/routing/error-boundary.js +19 -0
  62. package/build/client/routing/hooks.d.ts +17 -0
  63. package/build/client/routing/hooks.js +48 -0
  64. package/build/client/routing/lazy.d.ts +16 -0
  65. package/build/client/routing/lazy.js +53 -0
  66. package/build/client/routing/match.d.ts +2 -0
  67. package/build/client/routing/match.js +32 -0
  68. package/build/client/routing/mount.d.ts +2 -0
  69. package/build/client/routing/mount.js +13 -0
  70. package/build/client/routing/params-context.d.ts +2 -0
  71. package/build/client/routing/params-context.js +2 -0
  72. package/build/client/scroll.d.ts +8 -0
  73. package/build/client/scroll.js +36 -0
  74. package/build/client/types.d.ts +27 -0
  75. package/build/client/types.js +1 -0
  76. package/build/compiler/.tsbuildinfo +1 -1
  77. package/build/compiler/config.d.ts +2 -0
  78. package/build/compiler/config.js +14 -2
  79. package/build/compiler/docs.d.ts +10 -0
  80. package/build/compiler/docs.js +59 -0
  81. package/build/compiler/generate.js +144 -16
  82. package/build/compiler/index.d.ts +4 -2
  83. package/build/compiler/index.js +4 -3
  84. package/build/compiler/plugin.js +16 -1
  85. package/build/compiler/routes.js +5 -1
  86. package/build/compiler/vite.d.ts +1 -1
  87. package/build/compiler/vite.js +17 -1
  88. package/build/io/.tsbuildinfo +1 -1
  89. package/build/io/BinaryWriter.js +2 -2
  90. package/eslint.config.js +1 -1
  91. package/examples/basic/.toil/docs/cli.md +3 -0
  92. package/examples/basic/.toil/docs/client.md +3 -0
  93. package/examples/basic/.toil/docs/index.md +3 -0
  94. package/examples/basic/.toil/docs/routing.md +3 -0
  95. package/examples/basic/.toil/docs/server.md +3 -0
  96. package/examples/basic/.toil/docs/styling.md +3 -0
  97. package/examples/basic/.toil/entry.tsx +3 -8
  98. package/examples/basic/.toil/globals.ts +6 -0
  99. package/examples/basic/.toil/index.html +16 -12
  100. package/examples/basic/.toil/public/images/.gitkeep +1 -0
  101. package/examples/basic/.toil/public/images/logo.svg +37 -0
  102. package/examples/basic/.toil/public/robots.txt +2 -0
  103. package/examples/basic/.toil/routes.ts +9 -7
  104. package/examples/basic/build/client/assets/404-Bq0jNTUo.js +1 -0
  105. package/examples/basic/build/client/assets/_...slug_-CXKf6qnB.js +1 -0
  106. package/examples/basic/build/client/assets/_id_-BadAyQnb.js +1 -0
  107. package/examples/basic/build/client/assets/about-BOhoEcEO.js +1 -0
  108. package/examples/basic/build/client/assets/get-started-BIXpcjkT.js +9 -0
  109. package/examples/basic/build/client/assets/index-BmqcTaBB.js +1 -0
  110. package/examples/basic/build/client/assets/io-DEVjjaJj.js +1 -0
  111. package/examples/basic/build/client/assets/layout-DJegirdz.js +1 -0
  112. package/examples/basic/build/client/assets/react-DEQrz1q7.js +9 -0
  113. package/examples/basic/build/client/assets/rolldown-runtime-KL5VtC6j.js +1 -0
  114. package/examples/basic/build/client/assets/routes-BYWn6TxK.js +1 -0
  115. package/examples/basic/build/client/css/style.css +2 -0
  116. package/examples/basic/build/client/images/.gitkeep +1 -0
  117. package/examples/basic/build/client/images/logo.svg +37 -0
  118. package/examples/basic/build/client/index.html +17 -0
  119. package/examples/basic/build/client/robots.txt +2 -0
  120. package/examples/basic/client/404.tsx +2 -5
  121. package/examples/basic/client/components/.gitkeep +1 -0
  122. package/examples/basic/client/components/Footer.tsx +8 -0
  123. package/examples/basic/client/components/HoneycombBackground.tsx +162 -0
  124. package/examples/basic/client/layout.tsx +43 -26
  125. package/examples/basic/client/public/favicon.ico +0 -0
  126. package/examples/basic/client/public/images/.gitkeep +1 -0
  127. package/examples/basic/client/public/images/logo.svg +37 -0
  128. package/examples/basic/client/public/index.html +16 -0
  129. package/examples/basic/client/public/robots.txt +2 -0
  130. package/examples/basic/client/routes/about.tsx +1 -3
  131. package/examples/basic/client/routes/blog/[id].tsx +2 -4
  132. package/examples/basic/client/routes/docs/[...slug].tsx +3 -6
  133. package/examples/basic/client/routes/get-started.tsx +84 -0
  134. package/examples/basic/client/routes/index.tsx +74 -7
  135. package/examples/basic/client/routes/io.tsx +3 -7
  136. package/examples/basic/client/styles/main.css +461 -0
  137. package/examples/basic/client/toil.tsx +7 -0
  138. package/examples/basic/node_modules/.bin/toilinit +16 -0
  139. package/examples/basic/node_modules/.bin/toilinit.cmd +17 -0
  140. package/examples/basic/node_modules/.bin/toilinit.ps1 +28 -0
  141. package/examples/basic/node_modules/.bin/toilscript +16 -0
  142. package/examples/basic/node_modules/.bin/toilscript.cmd +17 -0
  143. package/examples/basic/node_modules/.bin/toilscript.ps1 +28 -0
  144. package/examples/basic/node_modules/.bin/wasm-as +16 -0
  145. package/examples/basic/node_modules/.bin/wasm-as.cmd +17 -0
  146. package/examples/basic/node_modules/.bin/wasm-as.ps1 +28 -0
  147. package/examples/basic/node_modules/.bin/wasm-ctor-eval +16 -0
  148. package/examples/basic/node_modules/.bin/wasm-ctor-eval.cmd +17 -0
  149. package/examples/basic/node_modules/.bin/wasm-ctor-eval.ps1 +28 -0
  150. package/examples/basic/node_modules/.bin/wasm-dis +16 -0
  151. package/examples/basic/node_modules/.bin/wasm-dis.cmd +17 -0
  152. package/examples/basic/node_modules/.bin/wasm-dis.ps1 +28 -0
  153. package/examples/basic/node_modules/.bin/wasm-merge +16 -0
  154. package/examples/basic/node_modules/.bin/wasm-merge.cmd +17 -0
  155. package/examples/basic/node_modules/.bin/wasm-merge.ps1 +28 -0
  156. package/examples/basic/node_modules/.bin/wasm-metadce +16 -0
  157. package/examples/basic/node_modules/.bin/wasm-metadce.cmd +17 -0
  158. package/examples/basic/node_modules/.bin/wasm-metadce.ps1 +28 -0
  159. package/examples/basic/node_modules/.bin/wasm-opt +16 -0
  160. package/examples/basic/node_modules/.bin/wasm-opt.cmd +17 -0
  161. package/examples/basic/node_modules/.bin/wasm-opt.ps1 +28 -0
  162. package/examples/basic/node_modules/.bin/wasm-reduce +16 -0
  163. package/examples/basic/node_modules/.bin/wasm-reduce.cmd +17 -0
  164. package/examples/basic/node_modules/.bin/wasm-reduce.ps1 +28 -0
  165. package/examples/basic/node_modules/.bin/wasm-shell +16 -0
  166. package/examples/basic/node_modules/.bin/wasm-shell.cmd +17 -0
  167. package/examples/basic/node_modules/.bin/wasm-shell.ps1 +28 -0
  168. package/examples/basic/node_modules/.bin/wasm2js +16 -0
  169. package/examples/basic/node_modules/.bin/wasm2js.cmd +17 -0
  170. package/examples/basic/node_modules/.bin/wasm2js.ps1 +28 -0
  171. package/examples/basic/node_modules/.package-lock.json +49 -1
  172. package/examples/basic/node_modules/.vite/deps/_metadata.json +9 -9
  173. package/examples/basic/node_modules/binaryen/LICENSE +201 -0
  174. package/examples/basic/node_modules/binaryen/README.md +1362 -0
  175. package/examples/basic/node_modules/binaryen/bin/package.json +3 -0
  176. package/examples/basic/node_modules/binaryen/bin/wasm-as +0 -0
  177. package/examples/basic/node_modules/binaryen/bin/wasm-ctor-eval +0 -0
  178. package/examples/basic/node_modules/binaryen/bin/wasm-dis +0 -0
  179. package/examples/basic/node_modules/binaryen/bin/wasm-merge +0 -0
  180. package/examples/basic/node_modules/binaryen/bin/wasm-metadce +0 -0
  181. package/examples/basic/node_modules/binaryen/bin/wasm-opt +0 -0
  182. package/examples/basic/node_modules/binaryen/bin/wasm-reduce +0 -0
  183. package/examples/basic/node_modules/binaryen/bin/wasm-shell +0 -0
  184. package/examples/basic/node_modules/binaryen/bin/wasm2js +0 -0
  185. package/examples/basic/node_modules/binaryen/index.d.ts +2371 -0
  186. package/examples/basic/node_modules/binaryen/index.js +30552 -0
  187. package/examples/basic/node_modules/binaryen/package.json +50 -0
  188. package/examples/basic/node_modules/long/LICENSE +202 -0
  189. package/examples/basic/node_modules/long/README.md +286 -0
  190. package/examples/basic/node_modules/long/index.d.ts +2 -0
  191. package/examples/basic/node_modules/long/index.js +1581 -0
  192. package/examples/basic/node_modules/long/package.json +58 -0
  193. package/examples/basic/node_modules/long/types.d.ts +474 -0
  194. package/examples/basic/node_modules/long/umd/index.d.ts +3 -0
  195. package/examples/basic/node_modules/long/umd/index.js +1622 -0
  196. package/examples/basic/node_modules/long/umd/package.json +3 -0
  197. package/examples/basic/node_modules/long/umd/types.d.ts +474 -0
  198. package/examples/basic/node_modules/toilscript/LICENSE +201 -0
  199. package/examples/basic/node_modules/toilscript/NOTICE +94 -0
  200. package/examples/basic/node_modules/toilscript/README.md +66 -0
  201. package/examples/basic/node_modules/toilscript/bin/toilinit.js +468 -0
  202. package/examples/basic/node_modules/toilscript/bin/toilscript.js +35 -0
  203. package/examples/basic/node_modules/toilscript/dist/cli.d.ts +4 -0
  204. package/examples/basic/node_modules/toilscript/dist/cli.generated.d.ts +10027 -0
  205. package/examples/basic/node_modules/toilscript/dist/cli.js +24474 -0
  206. package/examples/basic/node_modules/toilscript/dist/cli.js.map +7 -0
  207. package/examples/basic/node_modules/toilscript/dist/importmap.json +9 -0
  208. package/examples/basic/node_modules/toilscript/dist/toilscript.d.ts +4 -0
  209. package/examples/basic/node_modules/toilscript/dist/toilscript.generated.d.ts +11242 -0
  210. package/examples/basic/node_modules/toilscript/dist/toilscript.js +337 -0
  211. package/examples/basic/node_modules/toilscript/dist/toilscript.js.map +7 -0
  212. package/examples/basic/node_modules/toilscript/dist/transform.cjs +1 -0
  213. package/examples/basic/node_modules/toilscript/dist/transform.d.ts +1 -0
  214. package/examples/basic/node_modules/toilscript/dist/transform.js +1 -0
  215. package/examples/basic/node_modules/toilscript/dist/web.js +22 -0
  216. package/examples/basic/node_modules/toilscript/lib/binaryen.d.ts +2 -0
  217. package/examples/basic/node_modules/toilscript/lib/binaryen.js +2 -0
  218. package/examples/basic/node_modules/toilscript/package.json +115 -0
  219. package/examples/basic/node_modules/toilscript/std/README.md +6 -0
  220. package/examples/basic/node_modules/toilscript/std/assembly/array.ts +550 -0
  221. package/examples/basic/node_modules/toilscript/std/assembly/arraybuffer.ts +77 -0
  222. package/examples/basic/node_modules/toilscript/std/assembly/atomics.ts +127 -0
  223. package/examples/basic/node_modules/toilscript/std/assembly/bindings/asyncify.ts +16 -0
  224. package/examples/basic/node_modules/toilscript/std/assembly/bindings/dom.ts +291 -0
  225. package/examples/basic/node_modules/toilscript/std/assembly/bindings/node.ts +6 -0
  226. package/examples/basic/node_modules/toilscript/std/assembly/bitflags.ts +53 -0
  227. package/examples/basic/node_modules/toilscript/std/assembly/builtins.ts +2650 -0
  228. package/examples/basic/node_modules/toilscript/std/assembly/byteslice.ts +177 -0
  229. package/examples/basic/node_modules/toilscript/std/assembly/compat.ts +2 -0
  230. package/examples/basic/node_modules/toilscript/std/assembly/console.ts +42 -0
  231. package/examples/basic/node_modules/toilscript/std/assembly/crypto.ts +9 -0
  232. package/examples/basic/node_modules/toilscript/std/assembly/dataview.ts +181 -0
  233. package/examples/basic/node_modules/toilscript/std/assembly/date.ts +375 -0
  234. package/examples/basic/node_modules/toilscript/std/assembly/diagnostics.ts +11 -0
  235. package/examples/basic/node_modules/toilscript/std/assembly/encoding.ts +151 -0
  236. package/examples/basic/node_modules/toilscript/std/assembly/endian.ts +45 -0
  237. package/examples/basic/node_modules/toilscript/std/assembly/error.ts +44 -0
  238. package/examples/basic/node_modules/toilscript/std/assembly/fixedarray.ts +173 -0
  239. package/examples/basic/node_modules/toilscript/std/assembly/fixedmap.ts +326 -0
  240. package/examples/basic/node_modules/toilscript/std/assembly/fixedset.ts +275 -0
  241. package/examples/basic/node_modules/toilscript/std/assembly/function.ts +42 -0
  242. package/examples/basic/node_modules/toilscript/std/assembly/index.d.ts +2892 -0
  243. package/examples/basic/node_modules/toilscript/std/assembly/iterator.ts +35 -0
  244. package/examples/basic/node_modules/toilscript/std/assembly/map.ts +269 -0
  245. package/examples/basic/node_modules/toilscript/std/assembly/math.ts +3289 -0
  246. package/examples/basic/node_modules/toilscript/std/assembly/memory.ts +123 -0
  247. package/examples/basic/node_modules/toilscript/std/assembly/number.ts +388 -0
  248. package/examples/basic/node_modules/toilscript/std/assembly/object.ts +36 -0
  249. package/examples/basic/node_modules/toilscript/std/assembly/performance.ts +9 -0
  250. package/examples/basic/node_modules/toilscript/std/assembly/pointer.ts +80 -0
  251. package/examples/basic/node_modules/toilscript/std/assembly/polyfills.ts +27 -0
  252. package/examples/basic/node_modules/toilscript/std/assembly/process.ts +50 -0
  253. package/examples/basic/node_modules/toilscript/std/assembly/reference.ts +48 -0
  254. package/examples/basic/node_modules/toilscript/std/assembly/regexp.ts +12 -0
  255. package/examples/basic/node_modules/toilscript/std/assembly/rt/README.md +83 -0
  256. package/examples/basic/node_modules/toilscript/std/assembly/rt/common.ts +81 -0
  257. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-incremental.ts +2 -0
  258. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-memory.ts +1 -0
  259. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-minimal.ts +2 -0
  260. package/examples/basic/node_modules/toilscript/std/assembly/rt/index-stub.ts +1 -0
  261. package/examples/basic/node_modules/toilscript/std/assembly/rt/index.d.ts +37 -0
  262. package/examples/basic/node_modules/toilscript/std/assembly/rt/itcms.ts +419 -0
  263. package/examples/basic/node_modules/toilscript/std/assembly/rt/memory-runtime.ts +94 -0
  264. package/examples/basic/node_modules/toilscript/std/assembly/rt/rtrace.ts +15 -0
  265. package/examples/basic/node_modules/toilscript/std/assembly/rt/stub.ts +133 -0
  266. package/examples/basic/node_modules/toilscript/std/assembly/rt/tcms.ts +254 -0
  267. package/examples/basic/node_modules/toilscript/std/assembly/rt/tlsf.ts +592 -0
  268. package/examples/basic/node_modules/toilscript/std/assembly/rt.ts +90 -0
  269. package/examples/basic/node_modules/toilscript/std/assembly/set.ts +225 -0
  270. package/examples/basic/node_modules/toilscript/std/assembly/shared/feature.ts +68 -0
  271. package/examples/basic/node_modules/toilscript/std/assembly/shared/runtime.ts +13 -0
  272. package/examples/basic/node_modules/toilscript/std/assembly/shared/target.ts +11 -0
  273. package/examples/basic/node_modules/toilscript/std/assembly/shared/tsconfig.json +11 -0
  274. package/examples/basic/node_modules/toilscript/std/assembly/shared/typeinfo.ts +72 -0
  275. package/examples/basic/node_modules/toilscript/std/assembly/staticarray.ts +423 -0
  276. package/examples/basic/node_modules/toilscript/std/assembly/string.ts +850 -0
  277. package/examples/basic/node_modules/toilscript/std/assembly/symbol.ts +114 -0
  278. package/examples/basic/node_modules/toilscript/std/assembly/table.ts +16 -0
  279. package/examples/basic/node_modules/toilscript/std/assembly/toilscript.ts +16 -0
  280. package/examples/basic/node_modules/toilscript/std/assembly/tsconfig.json +6 -0
  281. package/examples/basic/node_modules/toilscript/std/assembly/typedarray.ts +1954 -0
  282. package/examples/basic/node_modules/toilscript/std/assembly/uri.ts +17 -0
  283. package/examples/basic/node_modules/toilscript/std/assembly/util/bytes.ts +107 -0
  284. package/examples/basic/node_modules/toilscript/std/assembly/util/casemap.ts +497 -0
  285. package/examples/basic/node_modules/toilscript/std/assembly/util/error.ts +58 -0
  286. package/examples/basic/node_modules/toilscript/std/assembly/util/hash.ts +117 -0
  287. package/examples/basic/node_modules/toilscript/std/assembly/util/math.ts +1922 -0
  288. package/examples/basic/node_modules/toilscript/std/assembly/util/memory.ts +290 -0
  289. package/examples/basic/node_modules/toilscript/std/assembly/util/number.ts +873 -0
  290. package/examples/basic/node_modules/toilscript/std/assembly/util/sort.ts +313 -0
  291. package/examples/basic/node_modules/toilscript/std/assembly/util/string.ts +1202 -0
  292. package/examples/basic/node_modules/toilscript/std/assembly/util/uri.ts +275 -0
  293. package/examples/basic/node_modules/toilscript/std/assembly/vector.ts +4 -0
  294. package/examples/basic/node_modules/toilscript/std/assembly.json +16 -0
  295. package/examples/basic/node_modules/toilscript/std/portable/index.d.ts +461 -0
  296. package/examples/basic/node_modules/toilscript/std/portable/index.js +416 -0
  297. package/examples/basic/node_modules/toilscript/std/portable.json +11 -0
  298. package/examples/basic/node_modules/toilscript/std/types/assembly/index.d.ts +1 -0
  299. package/examples/basic/node_modules/toilscript/std/types/assembly/package.json +3 -0
  300. package/examples/basic/node_modules/toilscript/std/types/portable/index.d.ts +1 -0
  301. package/examples/basic/node_modules/toilscript/std/types/portable/package.json +3 -0
  302. package/examples/basic/node_modules/toilscript/tsconfig-base.json +13 -0
  303. package/examples/basic/node_modules/toilscript/util/README.md +23 -0
  304. package/examples/basic/node_modules/toilscript/util/browser/fs.js +1 -0
  305. package/examples/basic/node_modules/toilscript/util/browser/module.js +5 -0
  306. package/examples/basic/node_modules/toilscript/util/browser/path.js +520 -0
  307. package/examples/basic/node_modules/toilscript/util/browser/process.js +59 -0
  308. package/examples/basic/node_modules/toilscript/util/browser/url.js +23 -0
  309. package/examples/basic/node_modules/toilscript/util/cpu.d.ts +9 -0
  310. package/examples/basic/node_modules/toilscript/util/cpu.js +42 -0
  311. package/examples/basic/node_modules/toilscript/util/find.d.ts +6 -0
  312. package/examples/basic/node_modules/toilscript/util/find.js +20 -0
  313. package/examples/basic/node_modules/toilscript/util/node.d.ts +21 -0
  314. package/examples/basic/node_modules/toilscript/util/node.js +34 -0
  315. package/examples/basic/node_modules/toilscript/util/options.d.ts +70 -0
  316. package/examples/basic/node_modules/toilscript/util/options.js +262 -0
  317. package/examples/basic/node_modules/toilscript/util/terminal.d.ts +52 -0
  318. package/examples/basic/node_modules/toilscript/util/terminal.js +35 -0
  319. package/examples/basic/node_modules/toilscript/util/text.d.ts +26 -0
  320. package/examples/basic/node_modules/toilscript/util/text.js +114 -0
  321. package/examples/basic/node_modules/toilscript/util/tsconfig.json +9 -0
  322. package/examples/basic/node_modules/toilscript/util/web.d.ts +11 -0
  323. package/examples/basic/node_modules/toilscript/util/web.js +33 -0
  324. package/examples/basic/package-lock.json +50 -1
  325. package/examples/basic/package.json +5 -2
  326. package/examples/basic/server/index.ts +3 -0
  327. package/examples/basic/server/main.ts +6 -0
  328. package/examples/basic/server/tsconfig.json +7 -0
  329. package/examples/basic/toil-env.d.ts +20 -1
  330. package/examples/basic/toil.config.ts +2 -5
  331. package/examples/basic/toilconfig.json +30 -0
  332. package/package.json +2 -2
  333. package/presets/eslint.js +2 -7
  334. package/presets/no-uint8array-tostring.js +4 -5
  335. package/presets/prettier.json +8 -1
  336. package/src/backend/index.ts +11 -18
  337. package/src/cli/configure.ts +272 -0
  338. package/src/cli/create.ts +267 -82
  339. package/src/cli/features.ts +128 -0
  340. package/src/cli/index.ts +44 -3
  341. package/src/cli/proc.ts +20 -0
  342. package/src/cli/ui.ts +4 -6
  343. package/src/cli/validate.ts +31 -0
  344. package/src/client/head/head.ts +140 -0
  345. package/src/client/index.ts +39 -9
  346. package/src/client/navigation/Link.tsx +99 -0
  347. package/src/client/navigation/NavLink.tsx +86 -0
  348. package/src/client/navigation/navigation.ts +142 -0
  349. package/src/client/navigation/prefetch.ts +130 -0
  350. package/src/client/navigation/scroll.ts +53 -0
  351. package/src/client/routing/Router.tsx +95 -0
  352. package/src/client/routing/error-boundary.tsx +43 -0
  353. package/src/client/routing/hooks.ts +115 -0
  354. package/src/client/routing/lazy.ts +93 -0
  355. package/src/client/{match.ts → routing/match.ts} +11 -3
  356. package/src/client/routing/mount.tsx +28 -0
  357. package/src/client/routing/params-context.ts +10 -0
  358. package/src/client/types.ts +36 -0
  359. package/src/compiler/config.ts +26 -10
  360. package/src/compiler/docs.ts +87 -0
  361. package/src/compiler/generate.ts +180 -23
  362. package/src/compiler/index.ts +6 -4
  363. package/src/compiler/plugin.ts +22 -1
  364. package/src/compiler/routes.ts +13 -7
  365. package/src/compiler/vite.ts +28 -5
  366. package/src/io/BinaryReader.ts +1 -5
  367. package/src/io/BinaryWriter.ts +3 -3
  368. package/src/server/index.ts +3 -4
  369. package/src/server/tsconfig.json +4 -0
  370. package/templates/app/client/404.tsx +11 -0
  371. package/templates/app/client/components/.gitkeep +1 -0
  372. package/templates/app/client/components/Footer.tsx +8 -0
  373. package/templates/app/client/components/HoneycombBackground.tsx +162 -0
  374. package/templates/app/client/layout.tsx +53 -0
  375. package/templates/app/client/public/favicon.ico +0 -0
  376. package/templates/app/client/public/images/.gitkeep +1 -0
  377. package/templates/app/client/public/images/logo.svg +37 -0
  378. package/templates/app/client/public/index.html +16 -0
  379. package/templates/app/client/public/robots.txt +2 -0
  380. package/templates/app/client/routes/about.tsx +11 -0
  381. package/templates/app/client/routes/blog/[id].tsx +12 -0
  382. package/templates/app/client/routes/docs/[...slug].tsx +12 -0
  383. package/templates/app/client/routes/get-started.tsx +84 -0
  384. package/templates/app/client/routes/index.tsx +80 -0
  385. package/templates/app/client/routes/io.tsx +24 -0
  386. package/templates/app/client/styles/main.css +461 -0
  387. package/templates/app/client/toil.tsx +7 -0
  388. package/test/channel.test.ts +1 -1
  389. package/test/configure.test.ts +90 -0
  390. package/test/features.test.ts +111 -0
  391. package/test/head.test.ts +35 -0
  392. package/test/io.test.ts +8 -0
  393. package/test/navlink.test.ts +28 -0
  394. package/test/routes.test.ts +16 -1
  395. package/test/validate.test.ts +42 -0
  396. package/vitest.config.ts +1 -1
  397. package/examples/basic/dist/assets/404-D1bS2aH_.js +0 -1
  398. package/examples/basic/dist/assets/_...slug_-wR3shlWn.js +0 -1
  399. package/examples/basic/dist/assets/_id_-EWYvHfi2.js +0 -1
  400. package/examples/basic/dist/assets/about-Ddvj1tjF.js +0 -1
  401. package/examples/basic/dist/assets/index-CdG0me90.js +0 -1
  402. package/examples/basic/dist/assets/io-CODNJU57.js +0 -1
  403. package/examples/basic/dist/assets/layout-C15ZTPYI.js +0 -1
  404. package/examples/basic/dist/assets/react-JbAfoxYe.js +0 -9
  405. package/examples/basic/dist/assets/rolldown-runtime-1VNLd2iN.js +0 -1
  406. package/examples/basic/dist/assets/routes-GoydenoY.js +0 -1
  407. package/examples/basic/dist/index.html +0 -12
  408. package/src/client/runtime.tsx +0 -190
  409. /package/src/client/{channel.ts → channel/channel.ts} +0 -0
@@ -0,0 +1,850 @@
1
+ /// <reference path="./rt/index.d.ts" />
2
+
3
+ import { OBJECT, BLOCK_MAXSIZE, TOTAL_OVERHEAD } from "./rt/common";
4
+ import { Runtime } from "shared/runtime";
5
+ import { compareImpl, strtol, strtod, isSpace, isAscii, isFinalSigma, toLower8, toUpper8 } from "./util/string";
6
+ import { SPECIALS_UPPER, casemap, bsearch } from "./util/casemap";
7
+ import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_UNPAIRED_SURROGATE } from "./util/error";
8
+ import { idof } from "./builtins";
9
+ import { Array } from "./array";
10
+
11
+ @final export abstract class String {
12
+
13
+ @lazy static readonly MAX_LENGTH: i32 = <i32>(BLOCK_MAXSIZE >>> alignof<u16>());
14
+
15
+ static fromCharCode(unit: i32, surr: i32 = -1): String {
16
+ let hasSur = surr > 0;
17
+ let out = changetype<String>(__new(2 << i32(hasSur), idof<String>()));
18
+ store<u16>(changetype<usize>(out), <u16>unit);
19
+ if (hasSur) store<u16>(changetype<usize>(out), <u16>surr, 2);
20
+ return out;
21
+ }
22
+
23
+ static fromCharCodes(units: Array<i32>): String {
24
+ let length = units.length;
25
+ let out = changetype<String>(__new(<usize>length << 1, idof<String>()));
26
+ let ptr = units.dataStart;
27
+ for (let i = 0; i < length; ++i) {
28
+ store<u16>(changetype<usize>(out) + (<usize>i << 1), load<i32>(ptr + (<usize>i << 2)));
29
+ }
30
+ return out;
31
+ }
32
+
33
+ static fromCodePoint(code: i32): String {
34
+ let hasSur = <u32>code > 0xFFFF;
35
+ let out = changetype<String>(__new(2 << i32(hasSur), idof<String>()));
36
+ if (!hasSur) {
37
+ store<u16>(changetype<usize>(out), <u16>code);
38
+ } else {
39
+ // Checks valid code point range
40
+ assert(<u32>code <= 0x10FFFF);
41
+ code -= 0x10000;
42
+ let hi = (code & 0x03FF) | 0xDC00;
43
+ let lo = code >>> 10 | 0xD800;
44
+ store<u32>(changetype<usize>(out), lo | hi << 16);
45
+ }
46
+ return out;
47
+ }
48
+
49
+ @builtin static raw(parts: TemplateStringsArray, ...args: unknown[]): string { return unreachable(); }
50
+
51
+ get length(): i32 {
52
+ return changetype<OBJECT>(changetype<usize>(this) - TOTAL_OVERHEAD).rtSize >> 1;
53
+ }
54
+
55
+ at(pos: i32): String {
56
+ let len = this.length;
57
+ pos += select(0, len, pos >= 0);
58
+ if (<u32>pos >= <u32>len) throw new RangeError(E_INDEXOUTOFRANGE);
59
+ let out = __new(2, idof<String>());
60
+ store<u16>(out, load<u16>(changetype<usize>(this) + (<usize>pos << 1)));
61
+ return changetype<String>(out); // retains
62
+ }
63
+
64
+ @operator("[]") charAt(pos: i32): String {
65
+ if (<u32>pos >= <u32>this.length) return changetype<String>("");
66
+ let out = changetype<String>(__new(2, idof<String>()));
67
+ store<u16>(changetype<usize>(out), load<u16>(changetype<usize>(this) + (<usize>pos << 1)));
68
+ return out;
69
+ }
70
+
71
+ charCodeAt(pos: i32): i32 {
72
+ if (<u32>pos >= <u32>this.length) return -1; // (NaN)
73
+ return load<u16>(changetype<usize>(this) + (<usize>pos << 1));
74
+ }
75
+
76
+ codePointAt(pos: i32): i32 {
77
+ let len = this.length;
78
+ if (<u32>pos >= <u32>len) return -1; // (undefined)
79
+ let first = <i32>load<u16>(changetype<usize>(this) + (<usize>pos << 1));
80
+ if ((first & 0xFC00) != 0xD800 || pos + 1 == len) return first;
81
+ let second = <i32>load<u16>(changetype<usize>(this) + (<usize>pos << 1), 2);
82
+ if ((second & 0xFC00) != 0xDC00) return first;
83
+ return (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
84
+ }
85
+
86
+ @operator("+") private static __concat(left: String, right: String): String {
87
+ return left.concat(right);
88
+ }
89
+
90
+ concat(other: String): String {
91
+ let thisSize: isize = this.length << 1;
92
+ let otherSize: isize = other.length << 1;
93
+ let outSize: usize = thisSize + otherSize;
94
+ if (outSize == 0) return changetype<String>("");
95
+ let out = changetype<String>(__new(outSize, idof<String>()));
96
+ memory.copy(changetype<usize>(out), changetype<usize>(this), thisSize);
97
+ memory.copy(changetype<usize>(out) + thisSize, changetype<usize>(other), otherSize);
98
+ return out;
99
+ }
100
+
101
+ endsWith(search: String, end: i32 = String.MAX_LENGTH): bool {
102
+ end = min(max(end, 0), this.length);
103
+ let searchLength = <isize>search.length;
104
+ let searchStart = <isize>end - searchLength;
105
+ if (searchStart < 0) return false;
106
+ // @ts-ignore: string <-> String
107
+ return !compareImpl(this, searchStart, search, 0, searchLength);
108
+ }
109
+
110
+ @operator("==") private static __eq(left: String | null, right: String | null): bool {
111
+ if (changetype<usize>(left) == changetype<usize>(right)) return true;
112
+ if (changetype<usize>(left) == 0 || changetype<usize>(right) == 0) return false;
113
+ let leftLength = changetype<string>(left).length;
114
+ if (leftLength != changetype<string>(right).length) return false;
115
+ // @ts-ignore: string <-> String
116
+ return !compareImpl(left, 0, right, 0, leftLength);
117
+ }
118
+
119
+ @operator.prefix("!")
120
+ private static __not(str: String | null): bool {
121
+ return changetype<usize>(str) == 0 || !changetype<string>(str).length;
122
+ }
123
+
124
+ @operator("!=")
125
+ private static __ne(left: String | null, right: String | null): bool {
126
+ return !this.__eq(left, right);
127
+ }
128
+
129
+ @operator(">") private static __gt(left: String, right: String): bool {
130
+ if (changetype<usize>(left) == changetype<usize>(right)) return false;
131
+ let leftLength = left.length;
132
+ if (!leftLength) return false;
133
+ let rightLength = right.length;
134
+ if (!rightLength) return true;
135
+ // @ts-ignore: string <-> String
136
+ let res = compareImpl(left, 0, right, 0, min(leftLength, rightLength));
137
+ return res ? res > 0 : leftLength > rightLength;
138
+ }
139
+
140
+ @operator(">=") private static __gte(left: String, right: String): bool {
141
+ return !this.__lt(left, right);
142
+ }
143
+
144
+ @operator("<") private static __lt(left: String, right: String): bool {
145
+ if (changetype<usize>(left) == changetype<usize>(right)) return false;
146
+ let rightLength = right.length;
147
+ if (!rightLength) return false;
148
+ let leftLength = left.length;
149
+ if (!leftLength) return true;
150
+ // @ts-ignore: string <-> String
151
+ let res = compareImpl(left, 0, right, 0, min(leftLength, rightLength));
152
+ return res ? res < 0 : leftLength < rightLength;
153
+ }
154
+
155
+ @operator("<=") private static __lte(left: String, right: String): bool {
156
+ return !this.__gt(left, right);
157
+ }
158
+
159
+ includes(search: String, start: i32 = 0): bool {
160
+ return this.indexOf(search, start) != -1;
161
+ }
162
+
163
+ indexOf(search: String, start: i32 = 0): i32 {
164
+ let searchLen = <isize>search.length;
165
+ if (!searchLen) return 0;
166
+ let len = <isize>this.length;
167
+ if (!len) return -1;
168
+ let searchStart = min(max(<isize>start, 0), len);
169
+ for (len -= searchLen; searchStart <= len; ++searchStart) {
170
+ // @ts-ignore: string <-> String
171
+ if (!compareImpl(this, searchStart, search, 0, searchLen)) return <i32>searchStart;
172
+ }
173
+ return -1;
174
+ }
175
+
176
+ lastIndexOf(search: String, start: i32 = i32.MAX_VALUE): i32 {
177
+ let searchLen = <isize>search.length;
178
+ if (!searchLen) return this.length;
179
+ let len = this.length;
180
+ if (!len) return -1;
181
+ let searchStart = min(max(<isize>start, 0), <isize>len - searchLen);
182
+ for (; searchStart >= 0; --searchStart) {
183
+ // @ts-ignore: string <-> String
184
+ if (!compareImpl(this, searchStart, search, 0, searchLen)) return <i32>searchStart;
185
+ }
186
+ return -1;
187
+ }
188
+
189
+ // TODO: implement full locale comparison with locales and Collator options
190
+ localeCompare(other: String): i32 {
191
+ if (changetype<usize>(other) == changetype<usize>(this)) return 0;
192
+ let alen = this.length;
193
+ let blen = other.length;
194
+ // @ts-ignore: string <-> String
195
+ let res = compareImpl(this, 0, other, 0, <usize>min(alen, blen));
196
+ res = res ? res : alen - blen;
197
+ // normalize to [-1, 1] range
198
+ return i32(res > 0) - i32(res < 0);
199
+ }
200
+
201
+ startsWith(search: String, start: i32 = 0): bool {
202
+ let len = <isize>this.length;
203
+ let searchStart = min(max(<isize>start, 0), len);
204
+ let searchLength = <isize>search.length;
205
+ if (searchLength + searchStart > len) return false;
206
+ // @ts-ignore: string <-> String
207
+ return !compareImpl(this, searchStart, search, 0, searchLength);
208
+ }
209
+
210
+ substr(start: i32, length: i32 = i32.MAX_VALUE): String { // legacy
211
+ let intStart: isize = start;
212
+ let end: isize = length;
213
+ let len: isize = this.length;
214
+ if (intStart < 0) intStart = max(len + intStart, 0);
215
+ let size = min(max(end, 0), len - intStart) << 1;
216
+ if (size <= 0) return changetype<String>("");
217
+ let out = changetype<String>(__new(size, idof<String>()));
218
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + (intStart << 1), size);
219
+ return out;
220
+ }
221
+
222
+ substring(start: i32, end: i32 = i32.MAX_VALUE): String {
223
+ let len: isize = this.length;
224
+ let finalStart = min<isize>(max(start, 0), len);
225
+ let finalEnd = min<isize>(max(end, 0), len);
226
+ let fromPos = min<isize>(finalStart, finalEnd) << 1;
227
+ let toPos = max<isize>(finalStart, finalEnd) << 1;
228
+ let size = toPos - fromPos;
229
+ if (!size) return changetype<String>("");
230
+ if (!fromPos && toPos == len << 1) return this;
231
+ let out = changetype<String>(__new(size, idof<String>()));
232
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + fromPos, size);
233
+ return out;
234
+ }
235
+
236
+ trim(): String {
237
+ let len = this.length;
238
+ let size: usize = len << 1;
239
+ while (size && isSpace(load<u16>(changetype<usize>(this) + size - 2))) {
240
+ size -= 2;
241
+ }
242
+ let offset: usize = 0;
243
+ while (offset < size && isSpace(load<u16>(changetype<usize>(this) + offset))) {
244
+ offset += 2; size -= 2;
245
+ }
246
+ if (!size) return changetype<String>("");
247
+ if (!offset && size == len << 1) return this;
248
+ let out = changetype<String>(__new(size, idof<String>()));
249
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + offset, size);
250
+ return out;
251
+ }
252
+
253
+ @inline
254
+ trimLeft(): String {
255
+ return this.trimStart();
256
+ }
257
+
258
+ @inline
259
+ trimRight(): String {
260
+ return this.trimEnd();
261
+ }
262
+
263
+ trimStart(): String {
264
+ let size = <usize>this.length << 1;
265
+ let offset: usize = 0;
266
+ while (offset < size && isSpace(load<u16>(changetype<usize>(this) + offset))) {
267
+ offset += 2;
268
+ }
269
+ if (!offset) return this;
270
+ size -= offset;
271
+ if (!size) return changetype<String>("");
272
+ let out = changetype<String>(__new(size, idof<String>()));
273
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + offset, size);
274
+ return out;
275
+ }
276
+
277
+ trimEnd(): String {
278
+ let originalSize = <usize>this.length << 1;
279
+ let size = originalSize;
280
+ while (size && isSpace(load<u16>(changetype<usize>(this) + size - 2))) {
281
+ size -= 2;
282
+ }
283
+ if (!size) return changetype<String>("");
284
+ if (size == originalSize) return this;
285
+ let out = changetype<String>(__new(size, idof<String>()));
286
+ memory.copy(changetype<usize>(out), changetype<usize>(this), size);
287
+ return out;
288
+ }
289
+
290
+ padStart(length: i32, pad: string = " "): String {
291
+ let thisSize = <usize>this.length << 1;
292
+ let targetSize = <usize>length << 1;
293
+ let padSize = <usize>pad.length << 1;
294
+ if (targetSize < thisSize || !padSize) return this;
295
+ let prependSize = targetSize - thisSize;
296
+ let out = changetype<String>(__new(targetSize, idof<String>()));
297
+ if (prependSize > padSize) {
298
+ let repeatCount = (prependSize - 2) / padSize;
299
+ let restBase = repeatCount * padSize;
300
+ let restSize = prependSize - restBase;
301
+ memory.repeat(changetype<usize>(out), changetype<usize>(pad), padSize, repeatCount);
302
+ memory.copy(changetype<usize>(out) + restBase, changetype<usize>(pad), restSize);
303
+ } else {
304
+ memory.copy(changetype<usize>(out), changetype<usize>(pad), prependSize);
305
+ }
306
+ memory.copy(changetype<usize>(out) + prependSize, changetype<usize>(this), thisSize);
307
+ return out;
308
+ }
309
+
310
+ padEnd(length: i32, pad: string = " "): String {
311
+ let thisSize = <usize>this.length << 1;
312
+ let targetSize = <usize>length << 1;
313
+ let padSize = <usize>pad.length << 1;
314
+ if (targetSize < thisSize || !padSize) return this;
315
+ let appendSize = targetSize - thisSize;
316
+ let out = changetype<String>(__new(targetSize, idof<String>()));
317
+ memory.copy(changetype<usize>(out), changetype<usize>(this), thisSize);
318
+ if (appendSize > padSize) {
319
+ let repeatCount = (appendSize - 2) / padSize;
320
+ let restBase = repeatCount * padSize;
321
+ let restSize = appendSize - restBase;
322
+ memory.repeat(changetype<usize>(out) + thisSize, changetype<usize>(pad), padSize, repeatCount);
323
+ memory.copy(changetype<usize>(out) + thisSize + restBase, changetype<usize>(pad), restSize);
324
+ } else {
325
+ memory.copy(changetype<usize>(out) + thisSize, changetype<usize>(pad), appendSize);
326
+ }
327
+ return out;
328
+ }
329
+
330
+ repeat(count: i32 = 0): String {
331
+ let length = this.length;
332
+
333
+ // Most browsers can't handle strings 1 << 28 chars or longer
334
+ if (count < 0 || <u64>length * count > (1 << 28)) {
335
+ throw new RangeError(E_INVALIDLENGTH);
336
+ }
337
+
338
+ if (count == 0 || !length) return changetype<String>("");
339
+ if (count == 1) return this;
340
+ let out = changetype<String>(__new((length * count) << 1, idof<String>()));
341
+ memory.repeat(changetype<usize>(out), changetype<usize>(this), <usize>length << 1, count);
342
+ return out;
343
+ }
344
+
345
+ replace(search: String, replacement: String): String {
346
+ let len: usize = this.length;
347
+ let slen: usize = search.length;
348
+ if (len <= slen) {
349
+ return len < slen ? this : select<String>(replacement, this, search == this);
350
+ }
351
+ let index: isize = this.indexOf(search);
352
+ if (~index) {
353
+ let rlen: usize = replacement.length;
354
+ len -= slen;
355
+ let olen = len + rlen;
356
+ if (olen) {
357
+ let out = changetype<String>(__new(olen << 1, idof<String>()));
358
+ memory.copy(changetype<usize>(out), changetype<usize>(this), index << 1);
359
+ memory.copy(
360
+ changetype<usize>(out) + (index << 1),
361
+ changetype<usize>(replacement),
362
+ rlen << 1
363
+ );
364
+ memory.copy(
365
+ changetype<usize>(out) + ((index + rlen) << 1),
366
+ changetype<usize>(this) + ((index + slen) << 1),
367
+ (len - index) << 1
368
+ );
369
+ return out;
370
+ }
371
+ }
372
+ return this;
373
+ }
374
+
375
+ replaceAll(search: String, replacement: String): String {
376
+ let thisLen: usize = this.length;
377
+ let searchLen: usize = search.length;
378
+ if (thisLen <= searchLen) {
379
+ return thisLen < searchLen
380
+ ? this
381
+ : select<String>(replacement, this, search == this);
382
+ }
383
+ let replaceLen: usize = replacement.length;
384
+ if (!searchLen) {
385
+ if (!replaceLen) return this;
386
+ // Special case: 'abc'.replaceAll('', '-') -> '-a-b-c-'
387
+ let out = changetype<String>(__new((thisLen + (thisLen + 1) * replaceLen) << 1, idof<String>()));
388
+ memory.copy(changetype<usize>(out), changetype<usize>(replacement), replaceLen << 1);
389
+ let offset = replaceLen;
390
+ for (let i: usize = 0; i < thisLen; ++i) {
391
+ store<u16>(
392
+ changetype<usize>(out) + (offset++ << 1),
393
+ load<u16>(changetype<usize>(this) + (i << 1))
394
+ );
395
+ memory.copy(
396
+ changetype<usize>(out) + (offset << 1),
397
+ changetype<usize>(replacement),
398
+ replaceLen << 1
399
+ );
400
+ offset += replaceLen;
401
+ }
402
+ return out;
403
+ }
404
+ let prev: isize = 0, next: isize = 0;
405
+ if (searchLen == replaceLen) {
406
+ // Fast path when search and replacement have same length
407
+ let outSize = thisLen << 1;
408
+ let out = changetype<String>(__new(outSize, idof<String>()));
409
+ memory.copy(changetype<usize>(out), changetype<usize>(this), outSize);
410
+ while (~(next = <isize>this.indexOf(search, <i32>prev))) {
411
+ memory.copy(changetype<usize>(out) + (next << 1), changetype<usize>(replacement), replaceLen << 1);
412
+ prev = next + searchLen;
413
+ }
414
+ return out;
415
+ }
416
+ let out: String | null = null, offset: usize = 0, outSize = thisLen;
417
+ while (~(next = <isize>this.indexOf(search, <i32>prev))) {
418
+ if (!out) out = changetype<String>(__new(thisLen << 1, idof<String>()));
419
+ let chunk = next - prev;
420
+ if (offset + chunk + replaceLen > outSize) {
421
+ outSize <<= 1;
422
+ out = changetype<String>(__renew(changetype<usize>(out), outSize << 1));
423
+ }
424
+ memory.copy(
425
+ changetype<usize>(out) + (offset << 1),
426
+ changetype<usize>(this) + (prev << 1),
427
+ chunk << 1
428
+ );
429
+ offset += chunk;
430
+ memory.copy(
431
+ changetype<usize>(out) + (offset << 1),
432
+ changetype<usize>(replacement),
433
+ replaceLen << 1
434
+ );
435
+ offset += replaceLen;
436
+ prev = next + searchLen;
437
+ }
438
+ if (out) {
439
+ let rest = thisLen - prev;
440
+ if (offset + rest > outSize) {
441
+ outSize <<= 1;
442
+ out = changetype<String>(__renew(changetype<usize>(out), outSize << 1));
443
+ }
444
+ if (rest) {
445
+ memory.copy(
446
+ changetype<usize>(out) + (offset << 1),
447
+ changetype<usize>(this) + (prev << 1),
448
+ rest << 1
449
+ );
450
+ }
451
+ rest += offset;
452
+ if (outSize > rest) {
453
+ out = changetype<String>(__renew(changetype<usize>(out), rest << 1));
454
+ }
455
+ return out;
456
+ }
457
+ return this;
458
+ }
459
+
460
+ slice(start: i32, end: i32 = i32.MAX_VALUE): String {
461
+ let len = this.length;
462
+ start = start < 0 ? max(start + len, 0) : min(start, len);
463
+ end = end < 0 ? max(end + len, 0) : min(end, len);
464
+ len = end - start;
465
+ if (len <= 0) return changetype<String>("");
466
+ let out = changetype<String>(__new(len << 1, idof<String>()));
467
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + (<usize>start << 1), <usize>len << 1);
468
+ return out;
469
+ }
470
+
471
+ split(separator: String | null = null, limit: i32 = i32.MAX_VALUE): String[] {
472
+ if (!limit) return changetype<String[]>(__newArray(0, alignof<String>(), idof<Array<String>>()));
473
+ if (changetype<usize>(separator) == 0) return [ this ];
474
+ let length: isize = this.length;
475
+ let sepLen = changetype<string>(separator).length;
476
+ if (limit < 0) limit = i32.MAX_VALUE;
477
+ if (!sepLen) {
478
+ if (!length) return changetype<String[]>(__newArray(0, alignof<String>(), idof<Array<String>>()));
479
+ // split by chars
480
+ length = min<isize>(length, <isize>limit);
481
+ let result = changetype<String[]>(__newArray(<i32>length, alignof<String>(), idof<Array<String>>()));
482
+ // @ts-ignore: cast
483
+ let resultStart = result.dataStart as usize;
484
+ for (let i: isize = 0; i < length; ++i) {
485
+ let charStr = changetype<String>(__new(2, idof<String>()));
486
+ store<u16>(changetype<usize>(charStr), load<u16>(changetype<usize>(this) + (<usize>i << 1)));
487
+ store<usize>(resultStart + (<usize>i << alignof<usize>()), changetype<usize>(charStr)); // result[i] = charStr
488
+ if (ASC_RUNTIME != Runtime.Memory) {
489
+ __link(changetype<usize>(result), changetype<usize>(charStr), true);
490
+ }
491
+ }
492
+ return result;
493
+ } else if (!length) {
494
+ let result = changetype<String[]>(__newArray(1, alignof<String>(), idof<Array<String>>()));
495
+ // @ts-ignore: cast
496
+ store<usize>(result.dataStart as usize, changetype<usize>("")); // static ""
497
+ return result;
498
+ }
499
+ let result = changetype<String[]>(__newArray(0, alignof<String>(), idof<Array<String>>()));
500
+ let end = 0, start = 0, i = 0;
501
+ while (~(end = this.indexOf(changetype<string>(separator), start))) {
502
+ let len = end - start;
503
+ if (len > 0) {
504
+ let out = changetype<String>(__new(<usize>len << 1, idof<String>()));
505
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + (<usize>start << 1), <usize>len << 1);
506
+ result.push(out);
507
+ } else {
508
+ result.push(changetype<String>(""));
509
+ }
510
+ if (++i == limit) return result;
511
+ start = end + sepLen;
512
+ }
513
+ if (!start) { // also means: loop above didn't do anything
514
+ result.push(this);
515
+ return result;
516
+ }
517
+ let len = length - start;
518
+ if (len > 0) {
519
+ let out = changetype<String>(__new(<usize>len << 1, idof<String>()));
520
+ memory.copy(changetype<usize>(out), changetype<usize>(this) + (<usize>start << 1), <usize>len << 1);
521
+ result.push(out);
522
+ } else {
523
+ result.push(changetype<String>("")); // static ""
524
+ }
525
+ return result;
526
+ }
527
+
528
+ toLowerCase(): String {
529
+ let len = <usize>this.length;
530
+ if (!len) return this;
531
+ let codes = changetype<String>(__new(len * 2 * 2, idof<String>()));
532
+ let j: usize = 0;
533
+ for (let i: usize = 0; i < len; ++i, ++j) {
534
+ let c = <u32>load<u16>(changetype<usize>(this) + (i << 1));
535
+ if (isAscii(c)) {
536
+ store<u16>(changetype<usize>(codes) + (j << 1), toLower8(c));
537
+ } else {
538
+ // check and read surrogate pair
539
+ if ((c - 0xD7FF < 0xDC00 - 0xD7FF) && i < len - 1) {
540
+ let c1 = <u32>load<u16>(changetype<usize>(this) + (i << 1), 2);
541
+ if (c1 - 0xDBFF < 0xE000 - 0xDBFF) {
542
+ let c0 = c;
543
+ c = (((c & 0x03FF) << 10) | (c1 & 0x03FF)) + 0x10000;
544
+ ++i;
545
+ if (c >= 0x20000) {
546
+ store<u32>(changetype<usize>(codes) + (j << 1), c0 | (c1 << 16));
547
+ ++j;
548
+ continue;
549
+ }
550
+ }
551
+ }
552
+ // check special casing for lower table. It has one ently so instead lookup we just inline this.
553
+ if (c == 0x0130) {
554
+ // 0x0130 -> [0x0069, 0x0307]
555
+ store<u32>(changetype<usize>(codes) + (j << 1), (0x0307 << 16) | 0x0069);
556
+ ++j;
557
+ } else if (c == 0x03A3) { // 'Σ'
558
+ // Σ maps to σ but except at the end of a word where it maps to ς
559
+ let sigma = 0x03C3; // σ
560
+ if (len > 1 && isFinalSigma(changetype<usize>(this), i, len)) {
561
+ sigma = 0x03C2; // ς
562
+ }
563
+ store<u16>(changetype<usize>(codes) + (j << 1), sigma);
564
+ } else if (c - 0x24B6 <= 0x24CF - 0x24B6) {
565
+ // Range 0x24B6 <= c <= 0x24CF not covered by casemap and require special early handling
566
+ store<u16>(changetype<usize>(codes) + (j << 1), c + 26);
567
+ } else {
568
+ let code = casemap(c, 0) & 0x1FFFFF;
569
+ if (code < 0x10000) {
570
+ store<u16>(changetype<usize>(codes) + (j << 1), code);
571
+ } else {
572
+ // store as surrogare pair
573
+ code -= 0x10000;
574
+ let lo = (code >>> 10) | 0xD800;
575
+ let hi = (code & 0x03FF) | 0xDC00;
576
+ store<u32>(changetype<usize>(codes) + (j << 1), lo | (hi << 16));
577
+ ++j;
578
+ }
579
+ }
580
+ }
581
+ }
582
+ return changetype<String>(__renew(changetype<usize>(codes), j << 1));
583
+ }
584
+
585
+ toUpperCase(): String {
586
+ let len = <usize>this.length;
587
+ if (!len) return this;
588
+ let codes = changetype<String>(__new(len * 3 * 2, idof<String>()));
589
+ let specialsPtr = changetype<usize>(SPECIALS_UPPER);
590
+ let specialsLen = SPECIALS_UPPER.length;
591
+ let j: usize = 0;
592
+ for (let i: usize = 0; i < len; ++i, ++j) {
593
+ let c = <u32>load<u16>(changetype<usize>(this) + (i << 1));
594
+ if (isAscii(c)) {
595
+ store<u16>(changetype<usize>(codes) + (j << 1), toUpper8(c));
596
+ } else {
597
+ // check and read surrogate pair
598
+ if ((c - 0xD7FF < 0xDC00 - 0xD7FF) && i < len - 1) {
599
+ let c1 = <u32>load<u16>(changetype<usize>(this) + (i << 1), 2);
600
+ if (c1 - 0xDBFF < 0xE000 - 0xDBFF) {
601
+ let c0 = c;
602
+ c = (((c & 0x03FF) << 10) | (c1 & 0x03FF)) + 0x10000;
603
+ ++i;
604
+ if (c >= 0x20000) {
605
+ store<u32>(changetype<usize>(codes) + (j << 1), c0 | (c1 << 16));
606
+ ++j;
607
+ continue;
608
+ }
609
+ }
610
+ }
611
+ // Range 0x24D0 <= c <= 0x24E9 not covered by casemap and require special early handling
612
+ if (c - 0x24D0 <= 0x24E9 - 0x24D0) {
613
+ // monkey patch
614
+ store<u16>(changetype<usize>(codes) + (j << 1), c - 26);
615
+ } else {
616
+ let index: usize = -1;
617
+ // Fast range check. See first and last rows in specialsUpper table
618
+ if (c - 0x00DF <= 0xFB17 - 0x00DF) {
619
+ index = <usize>bsearch(c, specialsPtr, specialsLen);
620
+ }
621
+ if (~index) {
622
+ // load next 3 code points from row with `index` offset for specialsUpper table
623
+ let ab = load<u32>(specialsPtr + (index << 1), 2);
624
+ let cc = load<u16>(specialsPtr + (index << 1), 6);
625
+ store<u32>(changetype<usize>(codes) + (j << 1), ab, 0);
626
+ store<u16>(changetype<usize>(codes) + (j << 1), cc, 4);
627
+ j += 1 + usize(cc != 0);
628
+ } else {
629
+ let code = casemap(c, 1) & 0x1FFFFF;
630
+ if (code < 0x10000) {
631
+ store<u16>(changetype<usize>(codes) + (j << 1), code);
632
+ } else {
633
+ // store as surrogare pair
634
+ code -= 0x10000;
635
+ let lo = (code >>> 10) | 0xD800;
636
+ let hi = (code & 0x03FF) | 0xDC00;
637
+ store<u32>(changetype<usize>(codes) + (j << 1), lo | (hi << 16));
638
+ ++j;
639
+ }
640
+ }
641
+ }
642
+ }
643
+ }
644
+ return changetype<String>(__renew(changetype<usize>(codes), j << 1));
645
+ }
646
+
647
+ toString(): String {
648
+ return this;
649
+ }
650
+ }
651
+
652
+ // @ts-ignore: nolib
653
+ export type string = String;
654
+
655
+ export function parseInt(str: string, radix: i32 = 0): f64 {
656
+ return strtol<f64>(str, radix);
657
+ }
658
+
659
+ export function parseFloat(str: string): f64 {
660
+ return strtod(str);
661
+ }
662
+
663
+ // Encoding helpers
664
+ export namespace String {
665
+
666
+ export namespace UTF8 {
667
+
668
+ export const enum ErrorMode {
669
+ WTF8,
670
+ REPLACE,
671
+ ERROR
672
+ }
673
+
674
+ export function byteLength(str: string, nullTerminated: bool = false): i32 {
675
+ let strOff = changetype<usize>(str);
676
+ let strEnd = strOff + <usize>changetype<OBJECT>(changetype<usize>(str) - TOTAL_OVERHEAD).rtSize;
677
+ let bufLen = i32(nullTerminated);
678
+ while (strOff < strEnd) {
679
+ let c1 = <u32>load<u16>(strOff);
680
+ if (c1 < 128) {
681
+ // @ts-ignore: cast
682
+ if (nullTerminated & !c1) break;
683
+ bufLen += 1;
684
+ } else if (c1 < 2048) {
685
+ bufLen += 2;
686
+ } else {
687
+ if ((c1 & 0xFC00) == 0xD800 && strOff + 2 < strEnd) {
688
+ if ((<u32>load<u16>(strOff, 2) & 0xFC00) == 0xDC00) {
689
+ bufLen += 4; strOff += 4;
690
+ continue;
691
+ }
692
+ }
693
+ bufLen += 3;
694
+ }
695
+ strOff += 2;
696
+ }
697
+ return bufLen;
698
+ }
699
+
700
+ export function encode(str: string, nullTerminated: bool = false, errorMode: ErrorMode = ErrorMode.WTF8): ArrayBuffer {
701
+ let buf = changetype<ArrayBuffer>(__new(<usize>byteLength(str, nullTerminated), idof<ArrayBuffer>()));
702
+ encodeUnsafe(changetype<usize>(str), str.length, changetype<usize>(buf), nullTerminated, errorMode);
703
+ return buf;
704
+ }
705
+
706
+ // @ts-ignore: decorator
707
+ @unsafe
708
+ export function encodeUnsafe(str: usize, len: i32, buf: usize, nullTerminated: bool = false, errorMode: ErrorMode = ErrorMode.WTF8): usize {
709
+ let strEnd = str + (<usize>len << 1);
710
+ let bufOff = buf;
711
+ while (str < strEnd) {
712
+ let c1 = <u32>load<u16>(str);
713
+ if (c1 < 128) {
714
+ store<u8>(bufOff, c1);
715
+ bufOff++;
716
+ // @ts-ignore: cast
717
+ if (nullTerminated & !c1) return bufOff - buf;
718
+ } else if (c1 < 2048) {
719
+ let b0 = c1 >> 6 | 192;
720
+ let b1 = c1 & 63 | 128;
721
+ store<u16>(bufOff, b1 << 8 | b0);
722
+ bufOff += 2;
723
+ } else {
724
+ // D800: 11011 0 0000000000 Lead
725
+ // DBFF: 11011 0 1111111111
726
+ // DC00: 11011 1 0000000000 Trail
727
+ // DFFF: 11011 1 1111111111
728
+ // F800: 11111 0 0000000000 Mask
729
+ // FC00: 11111 1 0000000000
730
+ if ((c1 & 0xF800) == 0xD800) {
731
+ if (c1 < 0xDC00 && str + 2 < strEnd) {
732
+ let c2 = <u32>load<u16>(str, 2);
733
+ if ((c2 & 0xFC00) == 0xDC00) {
734
+ c1 = 0x10000 + ((c1 & 0x03FF) << 10) | (c2 & 0x03FF);
735
+ let b0 = c1 >> 18 | 240;
736
+ let b1 = c1 >> 12 & 63 | 128;
737
+ let b2 = c1 >> 6 & 63 | 128;
738
+ let b3 = c1 & 63 | 128;
739
+ store<u32>(bufOff, b3 << 24 | b2 << 16 | b1 << 8 | b0);
740
+ bufOff += 4; str += 4;
741
+ continue;
742
+ }
743
+ }
744
+ if (errorMode != ErrorMode.WTF8) { // unlikely
745
+ if (errorMode == ErrorMode.ERROR) throw new Error(E_UNPAIRED_SURROGATE);
746
+ c1 = 0xFFFD;
747
+ }
748
+ }
749
+ let b0 = c1 >> 12 | 224;
750
+ let b1 = c1 >> 6 & 63 | 128;
751
+ let b2 = c1 & 63 | 128;
752
+ store<u16>(bufOff, b1 << 8 | b0);
753
+ store<u8>(bufOff, b2, 2);
754
+ bufOff += 3;
755
+ }
756
+ str += 2;
757
+ }
758
+ if (nullTerminated) {
759
+ store<u8>(bufOff++, 0);
760
+ }
761
+ return bufOff - buf;
762
+ }
763
+
764
+ export function decode(buf: ArrayBuffer, nullTerminated: bool = false): String {
765
+ return decodeUnsafe(changetype<usize>(buf), buf.byteLength, nullTerminated);
766
+ }
767
+
768
+ // @ts-ignore: decorator
769
+ @unsafe
770
+ export function decodeUnsafe(buf: usize, len: usize, nullTerminated: bool = false): String {
771
+ let bufOff = buf;
772
+ let bufEnd = buf + len;
773
+ assert(bufEnd >= bufOff); // guard wraparound
774
+ let str = changetype<String>(__new(len << 1, idof<String>())); // max is one u16 char per u8 byte
775
+ let strOff = changetype<usize>(str);
776
+ while (bufOff < bufEnd) {
777
+ let u0 = <u32>load<u8>(bufOff); ++bufOff;
778
+ if (!(u0 & 128)) {
779
+ // @ts-ignore: cast
780
+ if (nullTerminated & !u0) break;
781
+ store<u16>(strOff, u0);
782
+ } else {
783
+ if (bufEnd == bufOff) break;
784
+ let u1 = <u32>load<u8>(bufOff) & 63; ++bufOff;
785
+ if ((u0 & 224) == 192) {
786
+ store<u16>(strOff, (u0 & 31) << 6 | u1);
787
+ } else {
788
+ if (bufEnd == bufOff) break;
789
+ let u2 = <u32>load<u8>(bufOff) & 63; ++bufOff;
790
+ if ((u0 & 240) == 224) {
791
+ u0 = (u0 & 15) << 12 | u1 << 6 | u2;
792
+ } else {
793
+ if (bufEnd == bufOff) break;
794
+ u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | <u32>load<u8>(bufOff) & 63;
795
+ ++bufOff;
796
+ }
797
+ if (u0 < 0x10000) {
798
+ store<u16>(strOff, u0);
799
+ } else {
800
+ u0 -= 0x10000;
801
+ let lo = u0 >> 10 | 0xD800;
802
+ let hi = (u0 & 0x03FF) | 0xDC00;
803
+ store<u32>(strOff, lo | (hi << 16));
804
+ strOff += 2;
805
+ }
806
+ }
807
+ }
808
+ strOff += 2;
809
+ }
810
+ return changetype<String>(__renew(changetype<usize>(str), strOff - changetype<usize>(str)));
811
+ }
812
+ }
813
+
814
+ export namespace UTF16 {
815
+
816
+ export function byteLength(str: string): i32 {
817
+ return changetype<OBJECT>(changetype<usize>(str) - TOTAL_OVERHEAD).rtSize;
818
+ }
819
+
820
+ export function encode(str: string): ArrayBuffer {
821
+ let buf = changetype<ArrayBuffer>(__new(<usize>byteLength(str), idof<ArrayBuffer>()));
822
+ encodeUnsafe(changetype<usize>(str), str.length, changetype<usize>(buf));
823
+ return buf;
824
+ }
825
+
826
+ // @ts-ignore: decorator
827
+ @unsafe
828
+ export function encodeUnsafe(str: usize, len: i32, buf: usize): usize {
829
+ let size = <usize>len << 1;
830
+ memory.copy(buf, changetype<usize>(str), size);
831
+ return size;
832
+ }
833
+
834
+ export function decode(buf: ArrayBuffer): String {
835
+ return decodeUnsafe(changetype<usize>(buf), buf.byteLength);
836
+ }
837
+
838
+ // @ts-ignore: decorator
839
+ @unsafe
840
+ export function decodeUnsafe(buf: usize, len: usize): String {
841
+ let str = changetype<String>(__new(len &= ~1, idof<String>()));
842
+ memory.copy(changetype<usize>(str), buf, len);
843
+ return str;
844
+ }
845
+ }
846
+ }
847
+
848
+ export class TemplateStringsArray extends Array<string> {
849
+ readonly raw: string[];
850
+ }