@jarenjs/core 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/ARCHITECTURE.md +800 -0
  2. package/LICENSE +21 -0
  3. package/README.md +68 -0
  4. package/dist/types/array.d.ts +28 -0
  5. package/dist/types/bigint.d.ts +5 -0
  6. package/dist/types/dates.d.ts +79 -0
  7. package/dist/types/float.d.ts +32 -0
  8. package/dist/types/function.d.ts +22 -0
  9. package/dist/types/index.d.ts +119 -0
  10. package/dist/types/integer.d.ts +24 -0
  11. package/dist/types/math/float64.d.ts +121 -0
  12. package/dist/types/math/index.d.ts +5 -0
  13. package/dist/types/math/int32.d.ts +41 -0
  14. package/dist/types/math/vec2f64.d.ts +346 -0
  15. package/dist/types/math/vec2i32.d.ts +43 -0
  16. package/dist/types/math/vec3f64.d.ts +61 -0
  17. package/dist/types/number.d.ts +39 -0
  18. package/dist/types/object.d.ts +44 -0
  19. package/dist/types/scan.d.ts +64 -0
  20. package/dist/types/string.d.ts +65 -0
  21. package/dist/types/text/base64.d.ts +4 -0
  22. package/dist/types/text/basic.d.ts +5 -0
  23. package/dist/types/text/email.d.ts +3 -0
  24. package/dist/types/text/host.d.ts +14 -0
  25. package/dist/types/text/i18n.d.ts +13 -0
  26. package/dist/types/text/identifiers.d.ts +5 -0
  27. package/dist/types/text/index.d.ts +8 -0
  28. package/dist/types/text/iregexp.d.ts +36 -0
  29. package/dist/types/text/misc.d.ts +4 -0
  30. package/dist/types/text/punycode.d.ts +86 -0
  31. package/package.json +101 -0
  32. package/src/array.js +57 -0
  33. package/src/bigint.js +30 -0
  34. package/src/dates.js +371 -0
  35. package/src/float.js +107 -0
  36. package/src/function.js +56 -0
  37. package/src/index.js +223 -0
  38. package/src/integer.js +77 -0
  39. package/src/math/float64.js +316 -0
  40. package/src/math/index.js +5 -0
  41. package/src/math/int32.js +235 -0
  42. package/src/math/vec2f64.js +706 -0
  43. package/src/math/vec2i32.js +250 -0
  44. package/src/math/vec3f64.js +225 -0
  45. package/src/number.js +63 -0
  46. package/src/object.js +240 -0
  47. package/src/scan.js +96 -0
  48. package/src/string.js +194 -0
  49. package/src/text/base64.js +54 -0
  50. package/src/text/basic.js +23 -0
  51. package/src/text/email.js +61 -0
  52. package/src/text/host.js +335 -0
  53. package/src/text/i18n.js +294 -0
  54. package/src/text/identifiers.js +27 -0
  55. package/src/text/index.js +11 -0
  56. package/src/text/iregexp.js +308 -0
  57. package/src/text/misc.js +19 -0
  58. package/src/text/punycode.js +407 -0
@@ -0,0 +1,235 @@
1
+ import { mathf64_random } from './float64.js';
2
+
3
+ export const mathi32_MULTIPLIER = 10000;
4
+
5
+ export const mathi32_abs = Math.abs;
6
+ export const mathi32_round = Math.round;
7
+ export const mathi32_ceil = Math.ceil;
8
+ export const mathi32_floor = Math.floor;
9
+ export const mathi32_min = Math.min;
10
+ export const mathi32_max = Math.max;
11
+
12
+ export const mathi32_sqrt = Math.sqrt;
13
+ export const mathi32_asin = Math.asin;
14
+ export const mathi32_atan2 = Math.atan2;
15
+
16
+ export const mathi32_PI = (Math.PI * mathi32_MULTIPLIER) | 0;
17
+ export const mathi32_PI2 = (mathi32_PI * 2) | 0;
18
+ export const mathi32_PI1H = (mathi32_PI / 2) | 0;
19
+ export const mathi32_PI41 = ((4 / Math.PI) * mathi32_MULTIPLIER) | 0;
20
+ export const mathi32_PI42 =
21
+ ((4 / (Math.PI * Math.PI)) * mathi32_MULTIPLIER) | 0;
22
+
23
+ let random_seed = mathi32_abs(
24
+ Date.now() ^ (+mathf64_random() * Number.MAX_SAFE_INTEGER),
25
+ );
26
+
27
+ export class Int32 {
28
+ static random() {
29
+ const x = Math.sin(random_seed++) * mathi32_MULTIPLIER;
30
+ return x - Math.floor(x);
31
+ }
32
+
33
+ //#region mutliplier functions
34
+
35
+ static sqrt(n = 0) {
36
+ n = n | 0;
37
+ return mathi32_sqrt(n) | 0;
38
+ }
39
+
40
+ static sqrtEx(n = 0) {
41
+ n = n | 0;
42
+ return (mathi32_MULTIPLIER * mathi32_sqrt(n)) | 0;
43
+ }
44
+
45
+ static fib(n = 0) {
46
+ n = n | 0;
47
+ if (n < 1) return 0;
48
+ let c = 0;
49
+ let x = 1;
50
+ let i = 1;
51
+ for (; i !== n; i += 1) {
52
+ const t = (c + x) | 0;
53
+ c = x | 0;
54
+ x = t | 0;
55
+ }
56
+ return x | 0;
57
+ }
58
+
59
+ static mag2(dx = 0, dy = 0) {
60
+ dx = dx | 0;
61
+ dy = dy | 0;
62
+ return (dx * dx + dy * dy) | 0;
63
+ }
64
+
65
+ static hypot(dx = 0, dy = 0) {
66
+ dx = dx | 0;
67
+ dy = dy | 0;
68
+ return Int32.sqrt(dx * dx + dy * dy) | 0;
69
+ }
70
+
71
+ static hypotEx(dx = 0, dy = 0) {
72
+ dx = dx | 0;
73
+ dy = dy | 0;
74
+ return Int32.sqrtEx(dx * dx + dy * dy) | 0;
75
+ }
76
+
77
+ static dot(ax = 0, ay = 0, bx = 0, by = 0) {
78
+ ax = ax | 0;
79
+ ay = ay | 0;
80
+ bx = bx | 0;
81
+ by = by | 0;
82
+ return (ax * bx + ay * by) | 0;
83
+ }
84
+
85
+ static cross(ax = 0, ay = 0, bx = 0, by = 0) {
86
+ ax = ax | 0;
87
+ ay = ay | 0;
88
+ bx = bx | 0;
89
+ by = by | 0;
90
+ return (ax * by - bx * ay) | 0;
91
+ }
92
+
93
+ static norm(value = 0, min = 0, max = 0) {
94
+ value = value | 0;
95
+ min = min | 0;
96
+ max = max | 0;
97
+ return ((value - min) / (max - min)) | 0;
98
+ }
99
+
100
+ static lerp(norm = 0, min = 0, max = 0) {
101
+ norm = norm | 0;
102
+ min = min | 0;
103
+ max = max | 0;
104
+ return ((max - min) * (norm + min)) | 0;
105
+ }
106
+
107
+ static map(value = 0, smin = 0, smax = 0, dmin = 0, dmax = 0) {
108
+ value = value | 0;
109
+ smin = smin | 0;
110
+ smax = smax | 0;
111
+ dmin = dmin | 0;
112
+ dmax = dmax | 0;
113
+ // return int32_lerp(int32_norm(value, smin, smax), dmin, dmax) | 0;
114
+ return (
115
+ mathi32_round(((value - smin) * (dmax - dmin)) / (smax - smin) + dmin) | 0
116
+ );
117
+ }
118
+
119
+ static clamp(value = 0, min = 0, max = 0) {
120
+ value = value | 0;
121
+ min = min | 0;
122
+ max = max | 0;
123
+ return (
124
+ mathi32_min(
125
+ mathi32_max(value, mathi32_min(min, max)),
126
+ mathi32_max(min, max),
127
+ ) | 0
128
+ );
129
+ }
130
+ static clampu(value = 0, min = 0, max = 0) {
131
+ value = value | 0;
132
+ min = min | 0;
133
+ max = max | 0;
134
+ // return mathi32_min(mathi32_max(value, min), max)|0;
135
+ return mathi32_max(min, mathi32_min(value, max)) | 0;
136
+ }
137
+ static clampu_u8a(value = 0) {
138
+ value = value | 0;
139
+ return -(
140
+ (((255 - value) & ((value - 255) >> 31)) - 255) &
141
+ ((((255 - value) & ((value - 255) >> 31)) - 255) >> 31)
142
+ ) | 0;
143
+ }
144
+ static clampu_u8b(value = 0) {
145
+ value = value | 0;
146
+ value &= -(value >= 0);
147
+ return (value | ~-!(value & -256)) & 0xff;
148
+ }
149
+
150
+ static inRange(value = 0, min = 0, max = 0) {
151
+ value = value | 0;
152
+ min = min | 0;
153
+ max = max | 0;
154
+ min = mathi32_min(min, max) | 0;
155
+ max = mathi32_max(min, max) | 0;
156
+ return value >= min && value <= max;
157
+ }
158
+
159
+ //#endregion
160
+
161
+ //#region collision
162
+ static intersectsRange(smin = 0, smax = 0, dmin = 0, dmax = 0) {
163
+ smin = smin | 0;
164
+ smax = smax | 0;
165
+ dmin = dmin | 0;
166
+ dmax = dmax | 0;
167
+ const _smin = mathi32_min(smin, smax) | 0;
168
+ const _smax = mathi32_max(smin, smax) | 0;
169
+ const _dmin = mathi32_min(dmin, dmax) | 0;
170
+ const _dmax = mathi32_max(dmin, dmax) | 0;
171
+ return _smax >= _dmin && _smin <= _dmax
172
+ }
173
+
174
+ static intersectsRect(
175
+ ax = 0,
176
+ ay = 0,
177
+ aw = 0,
178
+ ah = 0,
179
+ bx = 0,
180
+ by = 0,
181
+ bw = 0,
182
+ bh = 0,
183
+ ) {
184
+ ax = ax | 0;
185
+ ay = ay | 0;
186
+ aw = aw | 0;
187
+ ah = ah | 0;
188
+ bx = bx | 0;
189
+ by = by | 0;
190
+ bw = bw | 0;
191
+ bh = bh | 0;
192
+ const ix = Int32.intersectsRange(ax | 0, (ax + aw) | 0, bx | 0, (bx + bw) | 0);
193
+ const iy = Int32.intersectsRange(ay | 0, (ay + ah) | 0, by | 0, (by + bh) | 0);
194
+
195
+ return ix && iy;
196
+ }
197
+
198
+ //#endregion
199
+
200
+ //#region trigonometry
201
+
202
+ static toRadianEx(degrees = 0) {
203
+ degrees = degrees | 0;
204
+ return ((degrees * mathi32_PI) / 180) | 0;
205
+ }
206
+
207
+ static toDegreesEx(radians = 0) {
208
+ radians = radians | 0;
209
+ return ((mathi32_MULTIPLIER * radians * 180) / mathi32_PI) | 0;
210
+ }
211
+
212
+ static wrapRadians(r = 0) {
213
+ r = r | 0;
214
+ if (r > mathi32_PI) return (r - mathi32_PI2) | 0;
215
+ else if (r < -mathi32_PI) return (r + mathi32_PI2) | 0;
216
+ return r | 0;
217
+ }
218
+
219
+ static sinLpEx(r = 0) {
220
+ r = r | 0;
221
+ // r and the result are radians/sine scaled by the multiplier; the
222
+ // quadratic term therefore needs a double division to stay in scale.
223
+ const linear = (mathi32_PI41 * r) / mathi32_MULTIPLIER;
224
+ const quad = (((mathi32_PI42 * r) / mathi32_MULTIPLIER) * r) / mathi32_MULTIPLIER;
225
+ return (r < 0 ? linear + quad : linear - quad) | 0;
226
+ }
227
+
228
+ static sinLp(r = 0) {
229
+ r = r | 0;
230
+ //always wrap input angle between -PI and PI
231
+ return Int32.sinLpEx(Int32.wrapRadians(r)) | 0;
232
+ }
233
+
234
+ //#endregion
235
+ }