goscript 0.1.0 → 0.1.1

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 (327) hide show
  1. package/README.md +267 -255
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/main.go +1 -0
  5. package/compiler/build-flags.go +38 -0
  6. package/compiler/compile-request.go +2 -0
  7. package/compiler/compliance_test.go +0 -8
  8. package/compiler/gotest/owner.go +24 -0
  9. package/compiler/gotest/package-result.go +67 -0
  10. package/compiler/gotest/request.go +145 -0
  11. package/compiler/gotest/result.go +28 -0
  12. package/compiler/gotest/runner.go +588 -0
  13. package/compiler/gotest/runner_test.go +627 -0
  14. package/compiler/gotest/test.go +9 -0
  15. package/compiler/index.test.ts +1 -1
  16. package/compiler/lowered-program.go +71 -19
  17. package/compiler/lowering.go +5065 -569
  18. package/compiler/override-facts.go +307 -0
  19. package/compiler/override-registry.go +50 -189
  20. package/compiler/override-registry_test.go +47 -0
  21. package/compiler/package-graph.go +50 -27
  22. package/compiler/package-graph_test.go +37 -2
  23. package/compiler/package-test-function.go +9 -0
  24. package/compiler/package-test-graph-package.go +40 -0
  25. package/compiler/package-test-graph-variant.go +105 -0
  26. package/compiler/package-test-graph.go +117 -0
  27. package/compiler/package-test-graph_test.go +144 -0
  28. package/compiler/runtime-contract.go +189 -29
  29. package/compiler/runtime-contract_test.go +44 -30
  30. package/compiler/semantic-model-types.go +9 -6
  31. package/compiler/semantic-model.go +538 -38
  32. package/compiler/semantic-model_test.go +55 -0
  33. package/compiler/service.go +1 -1
  34. package/compiler/skeleton_test.go +679 -49
  35. package/compiler/tsworkspace/owner.go +334 -0
  36. package/compiler/tsworkspace/owner_test.go +93 -0
  37. package/compiler/tsworkspace/result.go +17 -0
  38. package/compiler/typescript-emitter.go +459 -82
  39. package/compiler/wasm/compile.go +1 -1
  40. package/compiler/wasm/compile_test.go +61 -11
  41. package/compiler/wasm_api.go +172 -7
  42. package/dist/gs/builtin/builtin.d.ts +20 -2
  43. package/dist/gs/builtin/builtin.js +194 -6
  44. package/dist/gs/builtin/builtin.js.map +1 -1
  45. package/dist/gs/builtin/channel.d.ts +8 -0
  46. package/dist/gs/builtin/channel.js +12 -0
  47. package/dist/gs/builtin/channel.js.map +1 -1
  48. package/dist/gs/builtin/slice.d.ts +22 -2
  49. package/dist/gs/builtin/slice.js +216 -44
  50. package/dist/gs/builtin/slice.js.map +1 -1
  51. package/dist/gs/builtin/type.d.ts +5 -2
  52. package/dist/gs/builtin/type.js +83 -24
  53. package/dist/gs/builtin/type.js.map +1 -1
  54. package/dist/gs/builtin/varRef.d.ts +5 -0
  55. package/dist/gs/builtin/varRef.js +23 -0
  56. package/dist/gs/builtin/varRef.js.map +1 -1
  57. package/dist/gs/bytes/buffer.gs.js +48 -44
  58. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  59. package/dist/gs/bytes/reader.gs.js +20 -18
  60. package/dist/gs/bytes/reader.gs.js.map +1 -1
  61. package/dist/gs/context/context.d.ts +5 -4
  62. package/dist/gs/context/context.js +10 -10
  63. package/dist/gs/context/context.js.map +1 -1
  64. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  65. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  66. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  67. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  68. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  69. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  70. package/dist/gs/embed/index.d.ts +7 -0
  71. package/dist/gs/embed/index.js +16 -0
  72. package/dist/gs/embed/index.js.map +1 -0
  73. package/dist/gs/encoding/json/index.d.ts +1 -0
  74. package/dist/gs/encoding/json/index.js +18 -0
  75. package/dist/gs/encoding/json/index.js.map +1 -1
  76. package/dist/gs/errors/errors.d.ts +4 -0
  77. package/dist/gs/errors/errors.js +81 -0
  78. package/dist/gs/errors/errors.js.map +1 -1
  79. package/dist/gs/fmt/fmt.d.ts +4 -4
  80. package/dist/gs/fmt/fmt.js +42 -11
  81. package/dist/gs/fmt/fmt.js.map +1 -1
  82. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +35 -0
  83. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +211 -1
  84. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  85. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  86. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  87. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  88. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  89. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  90. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  91. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  92. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  93. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  94. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  95. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  96. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  97. package/dist/gs/go/scanner/index.d.ts +13 -0
  98. package/dist/gs/go/scanner/index.js +35 -0
  99. package/dist/gs/go/scanner/index.js.map +1 -1
  100. package/dist/gs/go/token/index.d.ts +156 -0
  101. package/dist/gs/go/token/index.js +500 -4
  102. package/dist/gs/go/token/index.js.map +1 -1
  103. package/dist/gs/internal/abi/index.d.ts +4 -0
  104. package/dist/gs/internal/abi/index.js +10 -0
  105. package/dist/gs/internal/abi/index.js.map +1 -1
  106. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  107. package/dist/gs/internal/bytealg/index.js +14 -0
  108. package/dist/gs/internal/bytealg/index.js.map +1 -1
  109. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  110. package/dist/gs/internal/byteorder/index.js +56 -25
  111. package/dist/gs/internal/byteorder/index.js.map +1 -1
  112. package/dist/gs/internal/godebug/index.d.ts +12 -0
  113. package/dist/gs/internal/godebug/index.js +30 -0
  114. package/dist/gs/internal/godebug/index.js.map +1 -0
  115. package/dist/gs/io/fs/index.d.ts +1 -0
  116. package/dist/gs/io/fs/index.js +1 -0
  117. package/dist/gs/io/fs/index.js.map +1 -1
  118. package/dist/gs/io/fs/readlink.d.ts +8 -0
  119. package/dist/gs/io/fs/readlink.js +64 -0
  120. package/dist/gs/io/fs/readlink.js.map +1 -0
  121. package/dist/gs/io/fs/walk.d.ts +3 -3
  122. package/dist/gs/io/fs/walk.js +7 -7
  123. package/dist/gs/io/fs/walk.js.map +1 -1
  124. package/dist/gs/io/io.d.ts +40 -6
  125. package/dist/gs/io/io.js +151 -26
  126. package/dist/gs/io/io.js.map +1 -1
  127. package/dist/gs/maps/iter.d.ts +3 -3
  128. package/dist/gs/maps/iter.js +3 -3
  129. package/dist/gs/maps/iter.js.map +1 -1
  130. package/dist/gs/maps/maps.d.ts +2 -2
  131. package/dist/gs/maps/maps.js +1 -1
  132. package/dist/gs/maps/maps.js.map +1 -1
  133. package/dist/gs/math/bits/index.d.ts +13 -4
  134. package/dist/gs/math/bits/index.js +66 -34
  135. package/dist/gs/math/bits/index.js.map +1 -1
  136. package/dist/gs/math/const.gs.d.ts +5 -5
  137. package/dist/gs/math/const.gs.js +4 -4
  138. package/dist/gs/math/const.gs.js.map +1 -1
  139. package/dist/gs/mime/index.d.ts +1 -0
  140. package/dist/gs/mime/index.js +50 -0
  141. package/dist/gs/mime/index.js.map +1 -0
  142. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  143. package/dist/gs/net/http/httptest/index.js +21 -0
  144. package/dist/gs/net/http/httptest/index.js.map +1 -0
  145. package/dist/gs/net/http/index.d.ts +27 -0
  146. package/dist/gs/net/http/index.js +61 -0
  147. package/dist/gs/net/http/index.js.map +1 -0
  148. package/dist/gs/os/dir_unix.gs.js +2 -2
  149. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  150. package/dist/gs/os/types_js.gs.js.map +1 -1
  151. package/dist/gs/path/filepath/match.js +165 -3
  152. package/dist/gs/path/filepath/match.js.map +1 -1
  153. package/dist/gs/path/filepath/path.d.ts +3 -1
  154. package/dist/gs/path/filepath/path.js +133 -4
  155. package/dist/gs/path/filepath/path.js.map +1 -1
  156. package/dist/gs/path/path.d.ts +4 -1
  157. package/dist/gs/path/path.js +16 -4
  158. package/dist/gs/path/path.js.map +1 -1
  159. package/dist/gs/reflect/index.d.ts +1 -1
  160. package/dist/gs/reflect/index.js +1 -1
  161. package/dist/gs/reflect/index.js.map +1 -1
  162. package/dist/gs/reflect/map.js +3 -0
  163. package/dist/gs/reflect/map.js.map +1 -1
  164. package/dist/gs/reflect/type.d.ts +7 -4
  165. package/dist/gs/reflect/type.js +148 -7
  166. package/dist/gs/reflect/type.js.map +1 -1
  167. package/dist/gs/runtime/debug/index.d.ts +2 -0
  168. package/dist/gs/runtime/debug/index.js +8 -0
  169. package/dist/gs/runtime/debug/index.js.map +1 -0
  170. package/dist/gs/runtime/runtime.d.ts +35 -3
  171. package/dist/gs/runtime/runtime.js +72 -0
  172. package/dist/gs/runtime/runtime.js.map +1 -1
  173. package/dist/gs/slices/slices.d.ts +24 -5
  174. package/dist/gs/slices/slices.js +214 -5
  175. package/dist/gs/slices/slices.js.map +1 -1
  176. package/dist/gs/sort/slice.gs.d.ts +3 -3
  177. package/dist/gs/sort/slice.gs.js +6 -6
  178. package/dist/gs/sort/slice.gs.js.map +1 -1
  179. package/dist/gs/sort/sort.gs.d.ts +4 -4
  180. package/dist/gs/sort/sort.gs.js +11 -8
  181. package/dist/gs/sort/sort.gs.js.map +1 -1
  182. package/dist/gs/strings/builder.d.ts +1 -1
  183. package/dist/gs/strings/builder.js +3 -2
  184. package/dist/gs/strings/builder.js.map +1 -1
  185. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  186. package/dist/gs/sync/atomic/type.gs.js +0 -2
  187. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  188. package/dist/gs/sync/sync.d.ts +2 -0
  189. package/dist/gs/sync/sync.js +27 -0
  190. package/dist/gs/sync/sync.js.map +1 -1
  191. package/dist/gs/syscall/constants.d.ts +36 -24
  192. package/dist/gs/syscall/constants.js +12 -0
  193. package/dist/gs/syscall/constants.js.map +1 -1
  194. package/dist/gs/syscall/errors.d.ts +2 -0
  195. package/dist/gs/syscall/errors.js +8 -0
  196. package/dist/gs/syscall/errors.js.map +1 -1
  197. package/dist/gs/syscall/fs.d.ts +43 -0
  198. package/dist/gs/syscall/fs.js +102 -0
  199. package/dist/gs/syscall/fs.js.map +1 -1
  200. package/dist/gs/syscall/js/index.d.ts +90 -0
  201. package/dist/gs/syscall/js/index.js +375 -0
  202. package/dist/gs/syscall/js/index.js.map +1 -0
  203. package/dist/gs/syscall/types.d.ts +22 -0
  204. package/dist/gs/syscall/types.js +45 -1
  205. package/dist/gs/syscall/types.js.map +1 -1
  206. package/dist/gs/testing/index.d.ts +1 -0
  207. package/dist/gs/testing/index.js +2 -0
  208. package/dist/gs/testing/index.js.map +1 -0
  209. package/dist/gs/testing/testing.d.ts +77 -0
  210. package/dist/gs/testing/testing.js +301 -0
  211. package/dist/gs/testing/testing.js.map +1 -0
  212. package/dist/gs/time/time.d.ts +41 -4
  213. package/dist/gs/time/time.js +205 -36
  214. package/dist/gs/time/time.js.map +1 -1
  215. package/dist/gs/unicode/unicode.d.ts +23 -1
  216. package/dist/gs/unicode/unicode.js +79 -10
  217. package/dist/gs/unicode/unicode.js.map +1 -1
  218. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  219. package/dist/gs/unicode/utf8/utf8.js +24 -11
  220. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  221. package/dist/gs/unique/index.d.ts +11 -0
  222. package/dist/gs/unique/index.js +71 -0
  223. package/dist/gs/unique/index.js.map +1 -0
  224. package/go.sum +9 -0
  225. package/gs/builtin/builtin.ts +239 -8
  226. package/gs/builtin/channel.ts +22 -0
  227. package/gs/builtin/runtime-contract.test.ts +126 -0
  228. package/gs/builtin/slice.ts +259 -50
  229. package/gs/builtin/type.ts +109 -34
  230. package/gs/builtin/varRef.ts +38 -1
  231. package/gs/bytes/buffer.gs.ts +48 -44
  232. package/gs/bytes/meta.json +8 -3
  233. package/gs/bytes/reader.gs.ts +20 -19
  234. package/gs/context/context.test.ts +41 -0
  235. package/gs/context/context.ts +22 -26
  236. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  237. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  238. package/gs/embed/index.ts +20 -0
  239. package/gs/embed/meta.json +5 -0
  240. package/gs/encoding/json/index.test.ts +15 -1
  241. package/gs/encoding/json/index.ts +24 -0
  242. package/gs/errors/errors.test.ts +82 -0
  243. package/gs/errors/errors.ts +104 -0
  244. package/gs/fmt/fmt.ts +56 -16
  245. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +73 -1
  246. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +297 -1
  247. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  248. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  249. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  250. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  251. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  252. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  253. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  254. package/gs/go/internal/scannerhooks/index.ts +9 -0
  255. package/gs/go/scanner/index.test.ts +22 -0
  256. package/gs/go/scanner/index.ts +47 -0
  257. package/gs/go/token/index.test.ts +47 -1
  258. package/gs/go/token/index.ts +570 -4
  259. package/gs/internal/abi/index.test.ts +18 -0
  260. package/gs/internal/abi/index.ts +14 -0
  261. package/gs/internal/bytealg/index.test.ts +18 -0
  262. package/gs/internal/bytealg/index.ts +16 -0
  263. package/gs/internal/byteorder/index.test.ts +39 -0
  264. package/gs/internal/byteorder/index.ts +100 -27
  265. package/gs/internal/godebug/index.test.ts +16 -0
  266. package/gs/internal/godebug/index.ts +35 -0
  267. package/gs/io/fs/index.ts +1 -0
  268. package/gs/io/fs/meta.json +5 -0
  269. package/gs/io/fs/readlink.test.ts +43 -0
  270. package/gs/io/fs/readlink.ts +77 -0
  271. package/gs/io/fs/walk.test.ts +61 -0
  272. package/gs/io/fs/walk.ts +9 -9
  273. package/gs/io/io.ts +174 -31
  274. package/gs/io/meta.json +10 -2
  275. package/gs/maps/iter.ts +12 -6
  276. package/gs/maps/maps.ts +8 -6
  277. package/gs/math/bits/index.ts +103 -47
  278. package/gs/math/const.gs.test.ts +11 -5
  279. package/gs/math/const.gs.ts +5 -6
  280. package/gs/mime/index.ts +54 -0
  281. package/gs/net/http/httptest/index.ts +25 -0
  282. package/gs/net/http/index.test.ts +20 -0
  283. package/gs/net/http/index.ts +81 -0
  284. package/gs/os/dir_unix.gs.ts +2 -3
  285. package/gs/os/types_js.gs.ts +2 -2
  286. package/gs/path/filepath/match.test.ts +31 -12
  287. package/gs/path/filepath/match.ts +178 -3
  288. package/gs/path/filepath/path.test.ts +25 -0
  289. package/gs/path/filepath/path.ts +159 -5
  290. package/gs/path/path.ts +20 -5
  291. package/gs/reflect/index.ts +1 -0
  292. package/gs/reflect/map.test.ts +19 -0
  293. package/gs/reflect/map.ts +4 -0
  294. package/gs/reflect/type.ts +197 -17
  295. package/gs/runtime/debug/index.test.ts +24 -0
  296. package/gs/runtime/debug/index.ts +8 -0
  297. package/gs/runtime/runtime.test.ts +19 -0
  298. package/gs/runtime/runtime.ts +98 -3
  299. package/gs/slices/slices.test.ts +94 -0
  300. package/gs/slices/slices.ts +245 -5
  301. package/gs/sort/meta.json +7 -0
  302. package/gs/sort/slice.gs.ts +16 -7
  303. package/gs/sort/sort.gs.ts +16 -13
  304. package/gs/strings/builder.ts +4 -3
  305. package/gs/sync/atomic/type.gs.ts +13 -14
  306. package/gs/sync/meta.json +3 -1
  307. package/gs/sync/sync.test.ts +13 -1
  308. package/gs/sync/sync.ts +27 -0
  309. package/gs/syscall/constants.ts +39 -24
  310. package/gs/syscall/errors.ts +10 -0
  311. package/gs/syscall/fs.ts +195 -0
  312. package/gs/syscall/js/index.ts +458 -0
  313. package/gs/syscall/js/meta.json +4 -0
  314. package/gs/syscall/net.test.ts +85 -0
  315. package/gs/syscall/types.ts +56 -0
  316. package/gs/testing/index.ts +1 -0
  317. package/gs/testing/meta.json +5 -0
  318. package/gs/testing/testing.test.ts +90 -0
  319. package/gs/testing/testing.ts +382 -0
  320. package/gs/time/time.test.ts +106 -0
  321. package/gs/time/time.ts +278 -57
  322. package/gs/unicode/unicode.test.ts +25 -0
  323. package/gs/unicode/unicode.ts +119 -9
  324. package/gs/unicode/utf8/utf8.test.ts +13 -0
  325. package/gs/unicode/utf8/utf8.ts +28 -16
  326. package/gs/unique/index.ts +91 -0
  327. package/package.json +2 -1
@@ -0,0 +1,825 @@
1
+ import * as $ from '../../../../builtin/index.js';
2
+ import * as time from '../../../../time/index.js';
3
+ export class JsonStream {
4
+ chunks = [];
5
+ err = null;
6
+ constructor(_writer) { }
7
+ Error() {
8
+ return this.err;
9
+ }
10
+ Write(p) {
11
+ this.chunks.push(bytesToString(p));
12
+ return [$.len(p), null];
13
+ }
14
+ WriteArrayEnd() {
15
+ this.chunks.push(']');
16
+ }
17
+ WriteArrayStart() {
18
+ this.chunks.push('[');
19
+ }
20
+ WriteBool(b) {
21
+ this.chunks.push(JSON.stringify(b));
22
+ }
23
+ WriteFloat32(f) {
24
+ this.WriteFloat64(f);
25
+ }
26
+ WriteFloat64(f) {
27
+ if (Number.isNaN(f)) {
28
+ this.WriteString('NaN');
29
+ return;
30
+ }
31
+ if (f === Infinity) {
32
+ this.WriteString('Infinity');
33
+ return;
34
+ }
35
+ if (f === -Infinity) {
36
+ this.WriteString('-Infinity');
37
+ return;
38
+ }
39
+ this.chunks.push(JSON.stringify(f));
40
+ }
41
+ WriteInt32(i) {
42
+ this.chunks.push(JSON.stringify(i));
43
+ }
44
+ WriteMore() {
45
+ this.chunks.push(',');
46
+ }
47
+ WriteNil() {
48
+ this.chunks.push('null');
49
+ }
50
+ WriteObjectEnd() {
51
+ this.chunks.push('}');
52
+ }
53
+ WriteObjectField(field) {
54
+ this.WriteString(field);
55
+ this.chunks.push(':');
56
+ }
57
+ WriteObjectStart() {
58
+ this.chunks.push('{');
59
+ }
60
+ WriteString(str) {
61
+ this.chunks.push(JSON.stringify(str));
62
+ }
63
+ WriteUint32(u) {
64
+ this.chunks.push(JSON.stringify(u));
65
+ }
66
+ String() {
67
+ return this.chunks.join('');
68
+ }
69
+ }
70
+ export class MarshalerConfig {
71
+ EnumsAsInts = true;
72
+ AnyTypeResolver = null;
73
+ constructor(init) {
74
+ Object.assign(this, init);
75
+ }
76
+ clone() {
77
+ return new MarshalerConfig({
78
+ EnumsAsInts: this.EnumsAsInts,
79
+ AnyTypeResolver: this.AnyTypeResolver,
80
+ });
81
+ }
82
+ Marshal(m) {
83
+ const stream = new JsonStream();
84
+ const state = new MarshalState({ config: this, stream });
85
+ if (m == null) {
86
+ state.WriteNil();
87
+ }
88
+ else {
89
+ m.MarshalProtoJSON(state);
90
+ }
91
+ if (state.Err() != null) {
92
+ return [null, state.Err()];
93
+ }
94
+ return [stringToBytes(stream.String()), null];
95
+ }
96
+ }
97
+ export class UnmarshalerConfig {
98
+ AnyTypeResolver = null;
99
+ constructor(init) {
100
+ Object.assign(this, init);
101
+ }
102
+ clone() {
103
+ return new UnmarshalerConfig({ AnyTypeResolver: this.AnyTypeResolver });
104
+ }
105
+ Unmarshal(data, m) {
106
+ const state = NewUnmarshalState(data, this);
107
+ if (state == null) {
108
+ return $.newError('json: failed to allocate unmarshal state');
109
+ }
110
+ m?.UnmarshalProtoJSON(state);
111
+ return state.Err();
112
+ }
113
+ }
114
+ export const DefaultMarshalerConfig = new MarshalerConfig();
115
+ export const DefaultUnmarshalerConfig = new UnmarshalerConfig();
116
+ export class MarshalState {
117
+ configValue;
118
+ stream;
119
+ err = null;
120
+ fields = new Set();
121
+ constructor(init) {
122
+ this.configValue = init?.config?.clone() ?? DefaultMarshalerConfig.clone();
123
+ this.stream = init?.stream ?? new JsonStream();
124
+ }
125
+ AnyTypeResolver() {
126
+ return this.configValue.AnyTypeResolver;
127
+ }
128
+ Config() {
129
+ return this.configValue.clone();
130
+ }
131
+ Err() {
132
+ return this.err ?? this.stream.Error();
133
+ }
134
+ HasField(field) {
135
+ return this.fields.has(field);
136
+ }
137
+ SetError(err) {
138
+ this.err = err;
139
+ }
140
+ SetErrorf(format, ...args) {
141
+ this.err = $.newError(formatError(format, args));
142
+ }
143
+ Sub(js) {
144
+ return new MarshalState({ config: this.configValue, stream: js ?? new JsonStream() });
145
+ }
146
+ WithField(field) {
147
+ const next = new MarshalState({ config: this.configValue, stream: this.stream });
148
+ next.fields = new Set(this.fields);
149
+ next.fields.add(field);
150
+ return next;
151
+ }
152
+ WithFieldMask(...paths) {
153
+ const next = new MarshalState({ config: this.configValue, stream: this.stream });
154
+ next.fields = new Set([...this.fields, ...paths]);
155
+ return next;
156
+ }
157
+ Write(v) {
158
+ return this.stream.Write(v);
159
+ }
160
+ WriteArrayEnd() {
161
+ this.stream.WriteArrayEnd();
162
+ }
163
+ WriteArrayStart() {
164
+ this.stream.WriteArrayStart();
165
+ }
166
+ WriteBool(v) {
167
+ this.stream.WriteBool(v);
168
+ }
169
+ WriteBoolArray(vs) {
170
+ this.writeArray(vs, (v) => this.WriteBool(v));
171
+ }
172
+ WriteBytes(v) {
173
+ this.WriteString(base64Encode(v));
174
+ }
175
+ WriteBytesArray(vs) {
176
+ this.writeArray(vs, (v) => this.WriteBytes(v));
177
+ }
178
+ WriteDuration(x) {
179
+ this.WriteString(`${x}s`);
180
+ }
181
+ WriteEnum(x, ...valueMaps) {
182
+ if (this.configValue.EnumsAsInts) {
183
+ this.WriteEnumNumber(x);
184
+ return;
185
+ }
186
+ this.WriteEnumString(x, ...valueMaps);
187
+ }
188
+ WriteEnumNumber(x) {
189
+ this.WriteInt32(x);
190
+ }
191
+ WriteEnumString(x, ...valueMaps) {
192
+ const value = enumStringValue(x, valueMaps);
193
+ if (value == null) {
194
+ this.WriteEnumNumber(x);
195
+ return;
196
+ }
197
+ this.WriteString(value);
198
+ }
199
+ WriteFieldMask(x) {
200
+ this.WriteString(sliceValues(x?.GetPaths()).join(','));
201
+ }
202
+ WriteFloat32(v) {
203
+ this.stream.WriteFloat32(v);
204
+ }
205
+ WriteFloat32Array(vs) {
206
+ this.writeArray(vs, (v) => this.WriteFloat32(v));
207
+ }
208
+ WriteFloat64(v) {
209
+ this.stream.WriteFloat64(v);
210
+ }
211
+ WriteFloat64Array(vs) {
212
+ this.writeArray(vs, (v) => this.WriteFloat64(v));
213
+ }
214
+ WriteInt32(v) {
215
+ this.stream.WriteInt32(v);
216
+ }
217
+ WriteInt32Array(vs) {
218
+ this.writeArray(vs, (v) => this.WriteInt32(v));
219
+ }
220
+ WriteInt64(v) {
221
+ this.WriteString(String(Math.trunc(v)));
222
+ }
223
+ WriteInt64Array(vs) {
224
+ this.writeArray(vs, (v) => this.WriteInt64(v));
225
+ }
226
+ WriteLegacyFieldMask(x) {
227
+ this.WriteFieldMask(x);
228
+ }
229
+ WriteMore() {
230
+ this.stream.WriteMore();
231
+ }
232
+ WriteMoreIf(b) {
233
+ const value = typeof b === 'boolean' ? b : b.value;
234
+ if (value) {
235
+ this.WriteMore();
236
+ return;
237
+ }
238
+ if (typeof b !== 'boolean') {
239
+ b.value = true;
240
+ }
241
+ }
242
+ WriteNil() {
243
+ this.stream.WriteNil();
244
+ }
245
+ WriteObjectBoolField(field) {
246
+ this.WriteObjectField(String(field));
247
+ }
248
+ WriteObjectEnd() {
249
+ this.stream.WriteObjectEnd();
250
+ }
251
+ WriteObjectField(field) {
252
+ this.stream.WriteObjectField(field);
253
+ }
254
+ WriteObjectInt32Field(field) {
255
+ this.WriteObjectField(String(Math.trunc(field)));
256
+ }
257
+ WriteObjectInt64Field(field) {
258
+ this.WriteObjectField(String(Math.trunc(field)));
259
+ }
260
+ WriteObjectStart() {
261
+ this.stream.WriteObjectStart();
262
+ }
263
+ WriteObjectStringField(field) {
264
+ this.WriteObjectField(field);
265
+ }
266
+ WriteObjectUint32Field(field) {
267
+ this.WriteObjectField(String(Math.trunc(field)));
268
+ }
269
+ WriteObjectUint64Field(field) {
270
+ this.WriteObjectField(String(Math.trunc(field)));
271
+ }
272
+ WriteString(v) {
273
+ this.stream.WriteString(v);
274
+ }
275
+ WriteStringArray(vs) {
276
+ this.writeArray(vs, (v) => this.WriteString(v));
277
+ }
278
+ WriteTime(x) {
279
+ this.WriteString($.pointerValue(x).Format(time.RFC3339Nano));
280
+ }
281
+ WriteUint32(v) {
282
+ this.stream.WriteUint32(v);
283
+ }
284
+ WriteUint32Array(vs) {
285
+ this.writeArray(vs, (v) => this.WriteUint32(v));
286
+ }
287
+ WriteUint64(v) {
288
+ this.WriteString(String(Math.trunc(v)));
289
+ }
290
+ WriteUint64Array(vs) {
291
+ this.writeArray(vs, (v) => this.WriteUint64(v));
292
+ }
293
+ writeArray(values, writeValue) {
294
+ this.WriteArrayStart();
295
+ let wrote = false;
296
+ for (const value of sliceValues(values)) {
297
+ if (wrote) {
298
+ this.WriteMore();
299
+ }
300
+ wrote = true;
301
+ writeValue(value);
302
+ }
303
+ this.WriteArrayEnd();
304
+ }
305
+ }
306
+ export class UnmarshalState {
307
+ configValue;
308
+ value;
309
+ root;
310
+ err = null;
311
+ fieldMaskPaths;
312
+ path;
313
+ objectEntries = null;
314
+ objectIndex = 0;
315
+ constructor(init) {
316
+ this.configValue = init?.config?.clone() ?? DefaultUnmarshalerConfig.clone();
317
+ this.value = init?.value ?? null;
318
+ this.root = init?.root ?? this;
319
+ this.fieldMaskPaths = init?.fieldMaskPaths ?? new Set();
320
+ this.path = init?.path ?? [];
321
+ }
322
+ AddField(field) {
323
+ this.fieldMaskPaths.add([...this.path, field].join('.'));
324
+ }
325
+ AnyTypeResolver() {
326
+ return this.configValue.AnyTypeResolver;
327
+ }
328
+ Config() {
329
+ return this.configValue.clone();
330
+ }
331
+ Err() {
332
+ return this.root.err;
333
+ }
334
+ FieldMask() {
335
+ const paths = Array.from(this.fieldMaskPaths);
336
+ return { GetPaths: () => $.arrayToSlice(paths) };
337
+ }
338
+ ReadArray(cb) {
339
+ if (!Array.isArray(this.value)) {
340
+ this.SetErrorf('expected JSON array');
341
+ return;
342
+ }
343
+ const original = this.value;
344
+ for (const item of this.value) {
345
+ this.value = item;
346
+ cb?.();
347
+ if (this.Err() != null) {
348
+ break;
349
+ }
350
+ }
351
+ this.value = original;
352
+ }
353
+ ReadBool() {
354
+ return this.value === true;
355
+ }
356
+ ReadBoolArray() {
357
+ return this.readArrayValues(() => this.ReadBool());
358
+ }
359
+ ReadBoolMap(cb) {
360
+ this.readMapKeys((key) => {
361
+ const parsed = parseBoolMapKey(key);
362
+ if (parsed == null) {
363
+ this.SetErrorf('invalid map key %q for bool map', key);
364
+ return;
365
+ }
366
+ cb?.(parsed);
367
+ });
368
+ }
369
+ ReadBytes() {
370
+ return base64Decode(this.ReadString());
371
+ }
372
+ ReadBytesArray() {
373
+ return this.readArrayValues(() => this.ReadBytes());
374
+ }
375
+ ReadDuration() {
376
+ return $.varRef(numberFromJSON(this.value));
377
+ }
378
+ ReadEnum(...valueMaps) {
379
+ if (typeof this.value === 'number') {
380
+ return Math.trunc(this.value);
381
+ }
382
+ if (typeof this.value === 'string') {
383
+ for (const valueMap of valueMaps) {
384
+ const mapped = lookupStringMap(valueMap, this.value);
385
+ if (mapped !== undefined) {
386
+ return mapped;
387
+ }
388
+ }
389
+ return Math.trunc(Number(this.value) || 0);
390
+ }
391
+ return 0;
392
+ }
393
+ ReadFieldMask() {
394
+ const paths = typeof this.value === 'string'
395
+ ? this.value.split(',').filter((part) => part !== '')
396
+ : Array.isArray(recordValue(this.value)?.paths)
397
+ ? sliceValues(recordValue(this.value)?.paths)
398
+ : [];
399
+ return { GetPaths: () => $.arrayToSlice(paths) };
400
+ }
401
+ ReadFloat32() {
402
+ return numberFromJSON(this.value);
403
+ }
404
+ ReadFloat32Array() {
405
+ return this.readArrayValues(() => this.ReadFloat32());
406
+ }
407
+ ReadFloat64() {
408
+ return numberFromJSON(this.value);
409
+ }
410
+ ReadFloat64Array() {
411
+ return this.readArrayValues(() => this.ReadFloat64());
412
+ }
413
+ ReadInt32() {
414
+ return Math.trunc(numberFromJSON(this.value));
415
+ }
416
+ ReadInt32Array() {
417
+ return this.readArrayValues(() => this.ReadInt32());
418
+ }
419
+ ReadInt32Map(cb) {
420
+ this.readMapKeys((key) => {
421
+ const parsed = parseSignedMapKey(key, 32);
422
+ if (parsed == null) {
423
+ this.SetErrorf('invalid map key %q for int32 map', key);
424
+ return;
425
+ }
426
+ cb?.(parsed);
427
+ });
428
+ }
429
+ ReadInt64() {
430
+ return Math.trunc(numberFromJSON(this.value));
431
+ }
432
+ ReadInt64Array() {
433
+ return this.readArrayValues(() => this.ReadInt64());
434
+ }
435
+ ReadInt64Map(cb) {
436
+ this.readMapKeys((key) => {
437
+ const parsed = parseSignedMapKey(key, 64);
438
+ if (parsed == null) {
439
+ this.SetErrorf('invalid map key %q for int64 map', key);
440
+ return;
441
+ }
442
+ cb?.(parsed);
443
+ });
444
+ }
445
+ ReadNil() {
446
+ return this.value === null;
447
+ }
448
+ ReadObject(cb) {
449
+ const record = recordValue(this.value);
450
+ if (record == null) {
451
+ this.SetErrorf('expected JSON object');
452
+ return;
453
+ }
454
+ const original = this.value;
455
+ for (const key of Object.keys(record)) {
456
+ this.value = record[key];
457
+ cb?.(key);
458
+ if (this.Err() != null) {
459
+ break;
460
+ }
461
+ }
462
+ this.value = original;
463
+ }
464
+ ReadObjectField() {
465
+ const record = recordValue(this.value);
466
+ if (record == null) {
467
+ this.SetErrorf('expected JSON object');
468
+ return '';
469
+ }
470
+ if (this.objectEntries == null) {
471
+ this.objectEntries = Object.entries(record);
472
+ this.objectIndex = 0;
473
+ }
474
+ if (this.objectIndex >= this.objectEntries.length) {
475
+ return '';
476
+ }
477
+ const [key, value] = this.objectEntries[this.objectIndex];
478
+ this.objectIndex++;
479
+ this.value = value;
480
+ return key;
481
+ }
482
+ ReadString() {
483
+ if (typeof this.value === 'string') {
484
+ return this.value;
485
+ }
486
+ if (this.value == null) {
487
+ return '';
488
+ }
489
+ return String(this.value);
490
+ }
491
+ ReadStringArray() {
492
+ return this.readArrayValues(() => this.ReadString());
493
+ }
494
+ ReadStringMap(cb) {
495
+ this.readMapKeys((key) => cb?.(key));
496
+ }
497
+ ReadTime() {
498
+ const [parsed, err] = time.Parse(time.RFC3339, this.ReadString());
499
+ if (err != null) {
500
+ this.SetError(err);
501
+ }
502
+ return $.varRef($.markAsStructValue($.cloneStructValue(parsed)));
503
+ }
504
+ ReadUint32() {
505
+ return Math.trunc(Math.max(0, numberFromJSON(this.value)));
506
+ }
507
+ ReadUint32Array() {
508
+ return this.readArrayValues(() => this.ReadUint32());
509
+ }
510
+ ReadUint32Map(cb) {
511
+ this.readMapKeys((key) => {
512
+ const parsed = parseUnsignedMapKey(key, 32);
513
+ if (parsed == null) {
514
+ this.SetErrorf('invalid map key %q for uint32 map', key);
515
+ return;
516
+ }
517
+ cb?.(parsed);
518
+ });
519
+ }
520
+ ReadUint64() {
521
+ return this.ReadUint32();
522
+ }
523
+ ReadUint64Array() {
524
+ return this.readArrayValues(() => this.ReadUint64());
525
+ }
526
+ ReadUint64Map(cb) {
527
+ this.readMapKeys((key) => {
528
+ const parsed = parseUnsignedMapKey(key, 64);
529
+ if (parsed == null) {
530
+ this.SetErrorf('invalid map key %q for uint64 map', key);
531
+ return;
532
+ }
533
+ cb?.(parsed);
534
+ });
535
+ }
536
+ ReadWrappedBool() { return this.readWrapped(() => this.ReadBool()); }
537
+ ReadWrappedBytes() { return this.readWrapped(() => this.ReadBytes()); }
538
+ ReadWrappedFloat32() { return this.readWrapped(() => this.ReadFloat32()); }
539
+ ReadWrappedFloat64() { return this.readWrapped(() => this.ReadFloat64()); }
540
+ ReadWrappedInt32() { return this.readWrapped(() => this.ReadInt32()); }
541
+ ReadWrappedInt64() { return this.readWrapped(() => this.ReadInt64()); }
542
+ ReadWrappedString() { return this.readWrapped(() => this.ReadString()); }
543
+ ReadWrappedUint32() { return this.readWrapped(() => this.ReadUint32()); }
544
+ ReadWrappedUint64() { return this.readWrapped(() => this.ReadUint64()); }
545
+ SetError(err) {
546
+ this.root.err = err;
547
+ }
548
+ SetErrorf(format, ...args) {
549
+ this.SetError($.newError(formatError(format, args)));
550
+ }
551
+ Skip() { }
552
+ SkipAndAppendBytes(p) {
553
+ const encoded = new TextEncoder().encode(JSON.stringify(this.value));
554
+ return $.append(p, encoded);
555
+ }
556
+ SkipAndReturnBytes() {
557
+ return stringToBytes(JSON.stringify(this.value));
558
+ }
559
+ Sub(data) {
560
+ return NewUnmarshalState(data, this.configValue);
561
+ }
562
+ WhatIsNext() {
563
+ if (this.value === null) {
564
+ return 0;
565
+ }
566
+ if (Array.isArray(this.value)) {
567
+ return 1;
568
+ }
569
+ if (typeof this.value === 'object') {
570
+ return 2;
571
+ }
572
+ if (typeof this.value === 'string') {
573
+ return 3;
574
+ }
575
+ if (typeof this.value === 'number') {
576
+ return 4;
577
+ }
578
+ if (typeof this.value === 'boolean') {
579
+ return 5;
580
+ }
581
+ return 0;
582
+ }
583
+ WithField(_field, _mask = true) {
584
+ return new UnmarshalState({
585
+ config: this.configValue,
586
+ value: this.value,
587
+ root: this.root,
588
+ fieldMaskPaths: _mask ? this.fieldMaskPaths : new Set(),
589
+ path: [...this.path, _field],
590
+ });
591
+ }
592
+ readArrayValues(read) {
593
+ const values = [];
594
+ this.ReadArray(() => {
595
+ values.push(read());
596
+ });
597
+ return $.arrayToSlice(values);
598
+ }
599
+ readMapKeys(cb) {
600
+ const record = recordValue(this.value);
601
+ if (record == null) {
602
+ this.SetErrorf('expected JSON object');
603
+ return;
604
+ }
605
+ const original = this.value;
606
+ for (const key of Object.keys(record)) {
607
+ this.value = record[key];
608
+ cb(key);
609
+ if (this.Err() != null) {
610
+ break;
611
+ }
612
+ }
613
+ this.value = original;
614
+ }
615
+ readWrapped(read) {
616
+ const record = recordValue(this.value);
617
+ if (record == null) {
618
+ return read();
619
+ }
620
+ if (!Object.hasOwn(record, 'value')) {
621
+ this.SetErrorf('first field in wrapped value is not value');
622
+ return read();
623
+ }
624
+ const keys = Object.keys(record);
625
+ if (keys.length !== 1) {
626
+ this.SetErrorf('unexpected %q field in wrapped value', keys.find((key) => key !== 'value') ?? '');
627
+ return read();
628
+ }
629
+ const original = this.value;
630
+ this.value = record.value;
631
+ const value = read();
632
+ this.value = original;
633
+ return value;
634
+ }
635
+ }
636
+ export function NewJsonStream(wr) {
637
+ return new JsonStream(wr);
638
+ }
639
+ export function NewMarshalState(config, stream) {
640
+ return new MarshalState({ config, stream: stream ?? new JsonStream() });
641
+ }
642
+ export function NewUnmarshalState(data, config) {
643
+ try {
644
+ return new UnmarshalState({ config, value: JSON.parse(bytesToString(data)) });
645
+ }
646
+ catch (err) {
647
+ const state = new UnmarshalState({ config });
648
+ state.SetError($.newError(err instanceof Error ? err.message : String(err)));
649
+ return state;
650
+ }
651
+ }
652
+ export function Marshal(c, m) {
653
+ return c.Marshal(m);
654
+ }
655
+ export function MarshalMap(_typeArgs, c, mm) {
656
+ const stream = new JsonStream();
657
+ const state = new MarshalState({ config: c, stream });
658
+ state.WriteObjectStart();
659
+ const keys = mm instanceof Map ? Array.from(mm.keys()) : Object.keys(mm);
660
+ keys.sort();
661
+ keys.forEach((key, idx) => {
662
+ if (idx !== 0) {
663
+ state.WriteMore();
664
+ }
665
+ state.WriteObjectField(key);
666
+ const value = mm instanceof Map ? mm.get(key) : mm[key];
667
+ value?.MarshalProtoJSON(state);
668
+ });
669
+ state.WriteObjectEnd();
670
+ return state.Err() == null ? [stringToBytes(stream.String()), null] : [null, state.Err()];
671
+ }
672
+ export function MarshalSlice(_typeArgs, c, ms) {
673
+ const stream = new JsonStream();
674
+ const state = new MarshalState({ config: c, stream });
675
+ state.WriteArrayStart();
676
+ sliceValues(ms).forEach((value, idx) => {
677
+ if (idx !== 0) {
678
+ state.WriteMore();
679
+ }
680
+ value?.MarshalProtoJSON(state);
681
+ });
682
+ state.WriteArrayEnd();
683
+ return state.Err() == null ? [stringToBytes(stream.String()), null] : [null, state.Err()];
684
+ }
685
+ export function GetEnumString(x, ...valueMaps) {
686
+ return enumStringValue(x, valueMaps) ?? String(x);
687
+ }
688
+ export function ParseEnumString(v, ...valueMaps) {
689
+ for (const valueMap of valueMaps) {
690
+ const value = lookupStringMap(valueMap, v);
691
+ if (value !== undefined) {
692
+ return [value, null];
693
+ }
694
+ }
695
+ const parsed = Number(v);
696
+ return Number.isFinite(parsed) ? [parsed, null] : [0, $.newError(`invalid enum ${v}`)];
697
+ }
698
+ function sliceValues(values) {
699
+ return Array.from((values ?? []));
700
+ }
701
+ function bytesToString(bytes) {
702
+ return new TextDecoder().decode(new Uint8Array(sliceValues(bytes)));
703
+ }
704
+ function stringToBytes(value) {
705
+ return $.arrayToSlice(Array.from(new TextEncoder().encode(value)));
706
+ }
707
+ function recordValue(value) {
708
+ if (value == null || Array.isArray(value) || typeof value !== 'object') {
709
+ return null;
710
+ }
711
+ return value;
712
+ }
713
+ function numberFromJSON(value) {
714
+ if (typeof value === 'number') {
715
+ return value;
716
+ }
717
+ if (typeof value === 'string') {
718
+ switch (value) {
719
+ case 'NaN':
720
+ return NaN;
721
+ case 'Infinity':
722
+ return Infinity;
723
+ case '-Infinity':
724
+ return -Infinity;
725
+ default:
726
+ return Number(value) || 0;
727
+ }
728
+ }
729
+ return 0;
730
+ }
731
+ function parseBoolMapKey(key) {
732
+ switch (key) {
733
+ case 'true':
734
+ return true;
735
+ case 'false':
736
+ return false;
737
+ default:
738
+ return null;
739
+ }
740
+ }
741
+ function parseSignedMapKey(key, bits) {
742
+ if (!/^-?(0|[1-9]\d*)$/.test(key)) {
743
+ return null;
744
+ }
745
+ const parsed = Number(key);
746
+ if (!Number.isSafeInteger(parsed)) {
747
+ return null;
748
+ }
749
+ if (bits === 32 && (parsed < -2147483648 || parsed > 2147483647)) {
750
+ return null;
751
+ }
752
+ return parsed;
753
+ }
754
+ function parseUnsignedMapKey(key, bits) {
755
+ if (!/^(0|[1-9]\d*)$/.test(key)) {
756
+ return null;
757
+ }
758
+ const parsed = Number(key);
759
+ if (!Number.isSafeInteger(parsed)) {
760
+ return null;
761
+ }
762
+ if (bits === 32 && parsed > 4294967295) {
763
+ return null;
764
+ }
765
+ return parsed;
766
+ }
767
+ function enumStringValue(x, valueMaps) {
768
+ for (const valueMap of valueMaps) {
769
+ if (valueMap == null) {
770
+ continue;
771
+ }
772
+ const value = valueMap instanceof Map ? valueMap.get(x) : valueMap[x];
773
+ if (value !== undefined) {
774
+ return value;
775
+ }
776
+ }
777
+ return null;
778
+ }
779
+ function lookupStringMap(valueMap, key) {
780
+ if (valueMap == null) {
781
+ return undefined;
782
+ }
783
+ return valueMap instanceof Map ? valueMap.get(key) : valueMap[key];
784
+ }
785
+ function formatError(format, args) {
786
+ return format.replace(/%[vqsd]/g, () => String(args.shift()));
787
+ }
788
+ const base64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
789
+ function base64Encode(bytes) {
790
+ const data = sliceValues(bytes);
791
+ let out = '';
792
+ for (let idx = 0; idx < data.length; idx += 3) {
793
+ const a = data[idx] ?? 0;
794
+ const b = data[idx + 1] ?? 0;
795
+ const c = data[idx + 2] ?? 0;
796
+ const triple = (a << 16) | (b << 8) | c;
797
+ out += base64Alphabet[(triple >> 18) & 0x3f];
798
+ out += base64Alphabet[(triple >> 12) & 0x3f];
799
+ out += idx + 1 < data.length ? base64Alphabet[(triple >> 6) & 0x3f] : '=';
800
+ out += idx + 2 < data.length ? base64Alphabet[triple & 0x3f] : '=';
801
+ }
802
+ return out;
803
+ }
804
+ function base64Decode(value) {
805
+ const normalized = value.replace(/-/g, '+').replace(/_/g, '/');
806
+ const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);
807
+ const bytes = [];
808
+ for (let idx = 0; idx < padded.length; idx += 4) {
809
+ const chars = padded.slice(idx, idx + 4);
810
+ const a = base64Alphabet.indexOf(chars[0]);
811
+ const b = base64Alphabet.indexOf(chars[1]);
812
+ const c = chars[2] === '=' ? 0 : base64Alphabet.indexOf(chars[2]);
813
+ const d = chars[3] === '=' ? 0 : base64Alphabet.indexOf(chars[3]);
814
+ const triple = (a << 18) | (b << 12) | (c << 6) | d;
815
+ bytes.push((triple >> 16) & 0xff);
816
+ if (chars[2] !== '=') {
817
+ bytes.push((triple >> 8) & 0xff);
818
+ }
819
+ if (chars[3] !== '=') {
820
+ bytes.push(triple & 0xff);
821
+ }
822
+ }
823
+ return $.arrayToSlice(bytes);
824
+ }
825
+ //# sourceMappingURL=index.js.map