@carbonenginejs/runtime-utils 0.1.1 → 0.1.3

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 (104) hide show
  1. package/LICENSE +21 -21
  2. package/NOTICE +23 -23
  3. package/README.md +69 -69
  4. package/THIRD-PARTY-NOTICES.md +64 -64
  5. package/docs/README.md +74 -73
  6. package/docs/architecture.md +101 -101
  7. package/docs/concepts/foundation-consolidation.md +85 -85
  8. package/docs/concepts/model-lifecycle.md +111 -0
  9. package/docs/const-kb.md +85 -87
  10. package/docs/core-types/DECORATOR-TODOS.md +25 -25
  11. package/docs/core-types/README.md +229 -168
  12. package/docs/reference/api.md +105 -102
  13. package/docs/reference/classes/README.md +135 -135
  14. package/package.json +139 -139
  15. package/src/arrays.js +5 -5
  16. package/src/audio/audioFormats.js +34 -34
  17. package/src/audio/index.js +1 -1
  18. package/src/box3.js +331 -331
  19. package/src/bytes.js +56 -56
  20. package/src/compression.js +56 -56
  21. package/src/constants/index.js +7 -7
  22. package/src/constants/trinity.js +13 -13
  23. package/src/constants.js +15 -15
  24. package/src/curve.js +79 -79
  25. package/src/d3d/dxgiFormats.js +46 -46
  26. package/src/d3d/index.js +2 -2
  27. package/src/d3d/primitiveTopology.js +11 -11
  28. package/src/document/CjsCarbonDocument.js +212 -212
  29. package/src/document/CjsClassRegistry.js +373 -373
  30. package/src/document/CjsDocumentDehydrator.js +142 -142
  31. package/src/document/CjsDocumentHydrator.js +156 -156
  32. package/src/document/CjsStructRegistry.js +348 -348
  33. package/src/document/hydrationAdapter.js +129 -129
  34. package/src/document/index.js +6 -6
  35. package/src/errors/CjsError.js +286 -286
  36. package/src/errors/index.js +5 -5
  37. package/src/geometry/box.js +22 -22
  38. package/src/geometry/cylinder.js +22 -22
  39. package/src/geometry/helpers/earcut.js +1 -1
  40. package/src/geometry/helpers/misc.js +3 -3
  41. package/src/geometry/index.js +8 -8
  42. package/src/geometry/json.js +67 -67
  43. package/src/geometry/lathe.js +44 -44
  44. package/src/geometry/plane.js +14 -14
  45. package/src/geometry/shape.js +4 -4
  46. package/src/geometry/sphere.js +24 -24
  47. package/src/geometry/torus.js +14 -14
  48. package/src/graphics/colorSpaces.js +22 -22
  49. package/src/graphics/index.js +4 -4
  50. package/src/graphics/pixelFormats.js +158 -158
  51. package/src/graphics/textureDimensions.js +22 -22
  52. package/src/graphics/trinityEnums.js +87 -87
  53. package/src/index.js +62 -62
  54. package/src/is.js +108 -46
  55. package/src/json.js +23 -23
  56. package/src/lifecycle/CjsLifecycleState.js +77 -77
  57. package/src/lifecycle/index.js +1 -1
  58. package/src/lne3.js +70 -70
  59. package/src/lookup.js +48 -48
  60. package/src/mat3.js +51 -51
  61. package/src/mat4.js +699 -699
  62. package/src/math/index.js +25 -25
  63. package/src/math/scalar.js +63 -63
  64. package/src/media/index.js +1 -1
  65. package/src/media/mediaTypes.js +50 -50
  66. package/src/mesh.js +424 -424
  67. package/src/model/CjsEventEmitter.js +333 -333
  68. package/src/model/CjsModel.js +1589 -1544
  69. package/src/model/CjsModelState.js +72 -72
  70. package/src/model/index.js +4 -4
  71. package/src/model/sourceRecordUtils.js +54 -54
  72. package/src/noise.js +310 -310
  73. package/src/num.js +827 -827
  74. package/src/object.js +39 -39
  75. package/src/path.js +53 -53
  76. package/src/pln.js +125 -125
  77. package/src/pool.js +9 -9
  78. package/src/quat.js +144 -144
  79. package/src/ray3.js +188 -188
  80. package/src/renderContext/formats.js +145 -145
  81. package/src/renderContext/index.js +5 -5
  82. package/src/renderContext/presentation.js +125 -125
  83. package/src/renderContext/resources.js +27 -27
  84. package/src/renderContext/upscaling.js +22 -22
  85. package/src/renderContext/window.js +20 -20
  86. package/src/runtime/CjsRuntimeState.js +50 -50
  87. package/src/schema/CjsSchema.js +555 -318
  88. package/src/schema/index.js +4 -4
  89. package/src/shader/index.js +1 -1
  90. package/src/shader/shaderStages.js +37 -37
  91. package/src/sph3.js +181 -181
  92. package/src/tangent.js +288 -288
  93. package/src/text.js +40 -40
  94. package/src/tri3.js +98 -98
  95. package/src/types/carbonTypes.js +635 -635
  96. package/src/types/index.js +2 -2
  97. package/src/utils.js +58 -58
  98. package/src/validation.js +46 -46
  99. package/src/vec2.js +229 -229
  100. package/src/vec3.js +1188 -1172
  101. package/src/vec4.js +347 -347
  102. package/src/vertex.js +108 -108
  103. package/src/webgpu/index.js +1 -1
  104. package/src/webgpu/textureFormats.js +121 -121
@@ -1,2 +1,2 @@
1
- export * from "./carbonTypes.js";
2
- export * from "../schema/index.js";
1
+ export * from "./carbonTypes.js";
2
+ export * from "../schema/index.js";
package/src/utils.js CHANGED
@@ -1,58 +1,58 @@
1
-
2
- /**
3
- * Convert a nullable, scalar, or array-like value into an array.
4
- *
5
- * Kept local so geometry helpers do not depend on the old ccpwgl `utils`
6
- * webpack alias.
7
- *
8
- * @param {any} value Value to normalize.
9
- * @returns {Array} Normalized array.
10
- */
11
- export function toArray(value)
12
- {
13
- if (value === undefined || value === null) return [];
14
- return Array.isArray(value) ? value : [ value ];
15
- }
16
-
17
- /**
18
- * Copies array-like values into a writable indexed target.
19
- *
20
- * @template T
21
- * @param {T} target Writable indexed target.
22
- * @param {ArrayLike<any>} value Source values.
23
- * @returns {T} The target.
24
- */
25
- export function copyArrayLike(target, value)
26
- {
27
- const
28
- length = Math.min(target.length, value.length),
29
- source = new Array(length);
30
-
31
- for (let i = 0; i < length; i++)
32
- {
33
- source[i] = value[i];
34
- }
35
-
36
- for (let i = 0; i < length; i++)
37
- {
38
- target[i] = source[i];
39
- }
40
- return target;
41
- }
42
-
43
- /**
44
- * Fills a writable indexed target with a scalar value.
45
- *
46
- * @template T
47
- * @param {T} target Writable indexed target.
48
- * @param {number} value Fill value.
49
- * @returns {T} The target.
50
- */
51
- export function fillArrayLike(target, value)
52
- {
53
- for (let i = 0; i < target.length; i++)
54
- {
55
- target[i] = value;
56
- }
57
- return target;
58
- }
1
+
2
+ /**
3
+ * Convert a nullable, scalar, or array-like value into an array.
4
+ *
5
+ * Kept local so geometry helpers do not depend on the old ccpwgl `utils`
6
+ * webpack alias.
7
+ *
8
+ * @param {any} value Value to normalize.
9
+ * @returns {Array} Normalized array.
10
+ */
11
+ export function toArray(value)
12
+ {
13
+ if (value === undefined || value === null) return [];
14
+ return Array.isArray(value) ? value : [ value ];
15
+ }
16
+
17
+ /**
18
+ * Copies array-like values into a writable indexed target.
19
+ *
20
+ * @template T
21
+ * @param {T} target Writable indexed target.
22
+ * @param {ArrayLike<any>} value Source values.
23
+ * @returns {T} The target.
24
+ */
25
+ export function copyArrayLike(target, value)
26
+ {
27
+ const
28
+ length = Math.min(target.length, value.length),
29
+ source = new Array(length);
30
+
31
+ for (let i = 0; i < length; i++)
32
+ {
33
+ source[i] = value[i];
34
+ }
35
+
36
+ for (let i = 0; i < length; i++)
37
+ {
38
+ target[i] = source[i];
39
+ }
40
+ return target;
41
+ }
42
+
43
+ /**
44
+ * Fills a writable indexed target with a scalar value.
45
+ *
46
+ * @template T
47
+ * @param {T} target Writable indexed target.
48
+ * @param {number} value Fill value.
49
+ * @returns {T} The target.
50
+ */
51
+ export function fillArrayLike(target, value)
52
+ {
53
+ for (let i = 0; i < target.length; i++)
54
+ {
55
+ target[i] = value;
56
+ }
57
+ return target;
58
+ }
package/src/validation.js CHANGED
@@ -1,46 +1,46 @@
1
- import { isPlainObject } from "./is.js";
2
-
3
- export { isPlainObject } from "./is.js";
4
-
5
- /** Returns a plain object or throws a labelled TypeError. */
6
- export function assertPlainObject(value, label = "value")
7
- {
8
- if (!isPlainObject(value))
9
- {
10
- throw new TypeError(`${label} must be a plain object.`);
11
- }
12
-
13
- return value;
14
- }
15
-
16
- /** Returns a trimmed non-empty string or throws a labelled TypeError. */
17
- export function assertNonEmptyString(value, label = "value")
18
- {
19
- if (typeof value !== "string" || value.trim() === "")
20
- {
21
- throw new TypeError(`${label} must be a non-empty string.`);
22
- }
23
-
24
- return value.trim();
25
- }
26
-
27
- /** Normalizes and validates a non-negative safe-integer version. */
28
- export function assertSupportedVersion(value, supportedVersions, label = "version")
29
- {
30
- const version = Number(value);
31
- const supported = Array.from(supportedVersions, Number);
32
-
33
- if (!Number.isSafeInteger(version) || version < 0)
34
- {
35
- throw new TypeError(`${label} must be a non-negative safe integer.`);
36
- }
37
-
38
- if (!supported.includes(version))
39
- {
40
- throw new RangeError(
41
- `Unsupported ${label} ${JSON.stringify(value)}; expected one of ${supported.join(", ")}.`
42
- );
43
- }
44
-
45
- return version;
46
- }
1
+ import { isPlainObject } from "./is.js";
2
+
3
+ export { isPlainObject } from "./is.js";
4
+
5
+ /** Returns a plain object or throws a labelled TypeError. */
6
+ export function assertPlainObject(value, label = "value")
7
+ {
8
+ if (!isPlainObject(value))
9
+ {
10
+ throw new TypeError(`${label} must be a plain object.`);
11
+ }
12
+
13
+ return value;
14
+ }
15
+
16
+ /** Returns a trimmed non-empty string or throws a labelled TypeError. */
17
+ export function assertNonEmptyString(value, label = "value")
18
+ {
19
+ if (typeof value !== "string" || value.trim() === "")
20
+ {
21
+ throw new TypeError(`${label} must be a non-empty string.`);
22
+ }
23
+
24
+ return value.trim();
25
+ }
26
+
27
+ /** Normalizes and validates a non-negative safe-integer version. */
28
+ export function assertSupportedVersion(value, supportedVersions, label = "version")
29
+ {
30
+ const version = Number(value);
31
+ const supported = Array.from(supportedVersions, Number);
32
+
33
+ if (!Number.isSafeInteger(version) || version < 0)
34
+ {
35
+ throw new TypeError(`${label} must be a non-negative safe integer.`);
36
+ }
37
+
38
+ if (!supported.includes(version))
39
+ {
40
+ throw new RangeError(
41
+ `Unsupported ${label} ${JSON.stringify(value)}; expected one of ${supported.join(", ")}.`
42
+ );
43
+ }
44
+
45
+ return version;
46
+ }
package/src/vec2.js CHANGED
@@ -1,229 +1,229 @@
1
- import * as glVec2 from "gl-matrix/esm/vec2.js";
2
- import { pool } from "./pool.js";
3
-
4
- const vec2 = { ...glVec2 };
5
-
6
- export { vec2 };
7
-
8
- /**
9
- *
10
- * @returns {Float32Array}
11
- */
12
- vec2.alloc = function()
13
- {
14
- return pool.allocF32(2);
15
- };
16
-
17
- /**
18
- *
19
- * @param a
20
- */
21
- vec2.unalloc = function(a)
22
- {
23
- pool.freeType(a);
24
- };
25
-
26
- /**
27
- * Adds a scalar to a vec2
28
- *
29
- * @param {vec2} out
30
- * @param {vec2} a
31
- * @param {Number} s
32
- * @returns {vec2} out
33
- */
34
- vec2.addScalar = function(out, a, s)
35
- {
36
- out[0] = a[0] + s;
37
- out[1] = a[1] + s;
38
- return out;
39
- };
40
-
41
- /**
42
- * Checks if a vector2 is empty
43
- * @param {vec2} a
44
- * @returns {boolean}
45
- */
46
- vec2.isEmpty = function(a)
47
- {
48
- return a[0] === 0 && a[1] === 0;
49
- };
50
-
51
- /**
52
- * Divides a vec2 by a scalar
53
- *
54
- * @param {vec2} out
55
- * @param {vec2} a
56
- * @param {Number} s
57
- * @returns {vec2} out
58
- */
59
- vec2.divideScalar = function(out, a, s)
60
- {
61
- return vec2.multiplyScalar(out, a, 1 / s);
62
- };
63
-
64
-
65
- /**
66
- * Multiplies a vec2 by a scalar
67
- *
68
- * @param {vec2} out
69
- * @param {vec2} a
70
- * @param {Number} s
71
- * @returns {vec2} out
72
- */
73
- vec2.multiplyScalar = function(out, a, s)
74
- {
75
- out[0] = a[0] * s;
76
- out[1] = a[1] * s;
77
- return out;
78
- };
79
-
80
- /**
81
- * Sets a vec2 from a scalar
82
- *
83
- * @param {vec2} out
84
- * @param {Number} s
85
- * @returns {vec2} out
86
- */
87
- vec2.setScalar = function(out, s)
88
- {
89
- out[0] = s;
90
- out[1] = s;
91
- return out;
92
- };
93
-
94
- /**
95
- * Subtracts a scalar from a vec2
96
- *
97
- * @param {vec2} out
98
- * @param {vec2} a
99
- * @param {Number} s
100
- * @returns {vec2} out
101
- */
102
- vec2.subtractScalar = function(out, a, s)
103
- {
104
- out[0] = a[0] - s;
105
- out[1] = a[1] - s;
106
- return out;
107
- };
108
-
109
- /**
110
- * Sets a vec2 from an array with an optional offset
111
- * @param {vec3} out
112
- * @param {TypedArray|Array} array
113
- * @param {Number} [offset=0]
114
- * @returns {vec3} out
115
- */
116
- vec2.fromArray = function(out, array, offset=0)
117
- {
118
- out[0] = array[offset];
119
- out[1] = array[offset + 1];
120
- return out;
121
- };
122
-
123
- /**
124
- * Gets mouse position from a mouse event
125
- * @param {vec2} out
126
- * @param {MouseEvent} event
127
- * @returns {vec2} out - mouse coordinates
128
- */
129
- vec2.mousePositionFromEvent = function(out, event)
130
- {
131
- out[0] = event.clientX;
132
- out[1] = event.clientY;
133
- return out;
134
- };
135
-
136
- /**
137
- * Gets CSS position from an event
138
- * @param {vec2} out
139
- * @param {MouseEvent} event
140
- * @param {HTMLElement} [element=element.target]
141
- * @returns {vec2} out - css coordinates
142
- */
143
- vec2.cssPositionFromEvent = function(out, event, element=event.target)
144
- {
145
- const rect = element.getBoundingClientRect();
146
- out[0] = event.clientX - rect.left;
147
- out[1] = event.clientY - rect.top;
148
- return out;
149
- };
150
-
151
- /**
152
- * Gets the pixel coordinates from an element event
153
- * @param {vec2} out
154
- * @param {MouseEvent} event
155
- * @param {HTMLElement} [element=element.target]
156
- * @returns {vec2} out - the pixel coordinates
157
- */
158
- vec2.pixelPositionFromEvent = function(out, event, element=event.target)
159
- {
160
- const
161
- rect = element.getBoundingClientRect(),
162
- cssX = event.clientX - rect.left,
163
- cssY = event.clientY - rect.top;
164
-
165
- out[0] = cssX * element.width / element.clientWidth;
166
- out[1] = element.height - cssY * element.height / element.clientHeight - 1;
167
- return out;
168
- };
169
-
170
- export const {
171
- add,
172
- angle,
173
- ceil,
174
- clone,
175
- copy,
176
- create,
177
- cross,
178
- dist,
179
- distance,
180
- div,
181
- divide,
182
- dot,
183
- equals,
184
- exactEquals,
185
- floor,
186
- forEach,
187
- fromValues,
188
- inverse,
189
- len,
190
- length,
191
- lerp,
192
- max,
193
- min,
194
- mul,
195
- multiply,
196
- negate,
197
- normalize,
198
- random,
199
- rotate,
200
- round,
201
- scale,
202
- scaleAndAdd,
203
- set,
204
- signedAngle,
205
- sqrDist,
206
- sqrLen,
207
- squaredDistance,
208
- squaredLength,
209
- str,
210
- sub,
211
- subtract,
212
- transformMat2,
213
- transformMat2d,
214
- transformMat3,
215
- transformMat4,
216
- zero,
217
- alloc,
218
- unalloc,
219
- addScalar,
220
- isEmpty,
221
- divideScalar,
222
- multiplyScalar,
223
- setScalar,
224
- subtractScalar,
225
- fromArray,
226
- mousePositionFromEvent,
227
- cssPositionFromEvent,
228
- pixelPositionFromEvent
229
- } = vec2;
1
+ import * as glVec2 from "gl-matrix/esm/vec2.js";
2
+ import { pool } from "./pool.js";
3
+
4
+ const vec2 = { ...glVec2 };
5
+
6
+ export { vec2 };
7
+
8
+ /**
9
+ *
10
+ * @returns {Float32Array}
11
+ */
12
+ vec2.alloc = function()
13
+ {
14
+ return pool.allocF32(2);
15
+ };
16
+
17
+ /**
18
+ *
19
+ * @param a
20
+ */
21
+ vec2.unalloc = function(a)
22
+ {
23
+ pool.freeType(a);
24
+ };
25
+
26
+ /**
27
+ * Adds a scalar to a vec2
28
+ *
29
+ * @param {vec2} out
30
+ * @param {vec2} a
31
+ * @param {Number} s
32
+ * @returns {vec2} out
33
+ */
34
+ vec2.addScalar = function(out, a, s)
35
+ {
36
+ out[0] = a[0] + s;
37
+ out[1] = a[1] + s;
38
+ return out;
39
+ };
40
+
41
+ /**
42
+ * Checks if a vector2 is empty
43
+ * @param {vec2} a
44
+ * @returns {boolean}
45
+ */
46
+ vec2.isEmpty = function(a)
47
+ {
48
+ return a[0] === 0 && a[1] === 0;
49
+ };
50
+
51
+ /**
52
+ * Divides a vec2 by a scalar
53
+ *
54
+ * @param {vec2} out
55
+ * @param {vec2} a
56
+ * @param {Number} s
57
+ * @returns {vec2} out
58
+ */
59
+ vec2.divideScalar = function(out, a, s)
60
+ {
61
+ return vec2.multiplyScalar(out, a, 1 / s);
62
+ };
63
+
64
+
65
+ /**
66
+ * Multiplies a vec2 by a scalar
67
+ *
68
+ * @param {vec2} out
69
+ * @param {vec2} a
70
+ * @param {Number} s
71
+ * @returns {vec2} out
72
+ */
73
+ vec2.multiplyScalar = function(out, a, s)
74
+ {
75
+ out[0] = a[0] * s;
76
+ out[1] = a[1] * s;
77
+ return out;
78
+ };
79
+
80
+ /**
81
+ * Sets a vec2 from a scalar
82
+ *
83
+ * @param {vec2} out
84
+ * @param {Number} s
85
+ * @returns {vec2} out
86
+ */
87
+ vec2.setScalar = function(out, s)
88
+ {
89
+ out[0] = s;
90
+ out[1] = s;
91
+ return out;
92
+ };
93
+
94
+ /**
95
+ * Subtracts a scalar from a vec2
96
+ *
97
+ * @param {vec2} out
98
+ * @param {vec2} a
99
+ * @param {Number} s
100
+ * @returns {vec2} out
101
+ */
102
+ vec2.subtractScalar = function(out, a, s)
103
+ {
104
+ out[0] = a[0] - s;
105
+ out[1] = a[1] - s;
106
+ return out;
107
+ };
108
+
109
+ /**
110
+ * Sets a vec2 from an array with an optional offset
111
+ * @param {vec3} out
112
+ * @param {TypedArray|Array} array
113
+ * @param {Number} [offset=0]
114
+ * @returns {vec3} out
115
+ */
116
+ vec2.fromArray = function(out, array, offset=0)
117
+ {
118
+ out[0] = array[offset];
119
+ out[1] = array[offset + 1];
120
+ return out;
121
+ };
122
+
123
+ /**
124
+ * Gets mouse position from a mouse event
125
+ * @param {vec2} out
126
+ * @param {MouseEvent} event
127
+ * @returns {vec2} out - mouse coordinates
128
+ */
129
+ vec2.mousePositionFromEvent = function(out, event)
130
+ {
131
+ out[0] = event.clientX;
132
+ out[1] = event.clientY;
133
+ return out;
134
+ };
135
+
136
+ /**
137
+ * Gets CSS position from an event
138
+ * @param {vec2} out
139
+ * @param {MouseEvent} event
140
+ * @param {HTMLElement} [element=element.target]
141
+ * @returns {vec2} out - css coordinates
142
+ */
143
+ vec2.cssPositionFromEvent = function(out, event, element=event.target)
144
+ {
145
+ const rect = element.getBoundingClientRect();
146
+ out[0] = event.clientX - rect.left;
147
+ out[1] = event.clientY - rect.top;
148
+ return out;
149
+ };
150
+
151
+ /**
152
+ * Gets the pixel coordinates from an element event
153
+ * @param {vec2} out
154
+ * @param {MouseEvent} event
155
+ * @param {HTMLElement} [element=element.target]
156
+ * @returns {vec2} out - the pixel coordinates
157
+ */
158
+ vec2.pixelPositionFromEvent = function(out, event, element=event.target)
159
+ {
160
+ const
161
+ rect = element.getBoundingClientRect(),
162
+ cssX = event.clientX - rect.left,
163
+ cssY = event.clientY - rect.top;
164
+
165
+ out[0] = cssX * element.width / element.clientWidth;
166
+ out[1] = element.height - cssY * element.height / element.clientHeight - 1;
167
+ return out;
168
+ };
169
+
170
+ export const {
171
+ add,
172
+ angle,
173
+ ceil,
174
+ clone,
175
+ copy,
176
+ create,
177
+ cross,
178
+ dist,
179
+ distance,
180
+ div,
181
+ divide,
182
+ dot,
183
+ equals,
184
+ exactEquals,
185
+ floor,
186
+ forEach,
187
+ fromValues,
188
+ inverse,
189
+ len,
190
+ length,
191
+ lerp,
192
+ max,
193
+ min,
194
+ mul,
195
+ multiply,
196
+ negate,
197
+ normalize,
198
+ random,
199
+ rotate,
200
+ round,
201
+ scale,
202
+ scaleAndAdd,
203
+ set,
204
+ signedAngle,
205
+ sqrDist,
206
+ sqrLen,
207
+ squaredDistance,
208
+ squaredLength,
209
+ str,
210
+ sub,
211
+ subtract,
212
+ transformMat2,
213
+ transformMat2d,
214
+ transformMat3,
215
+ transformMat4,
216
+ zero,
217
+ alloc,
218
+ unalloc,
219
+ addScalar,
220
+ isEmpty,
221
+ divideScalar,
222
+ multiplyScalar,
223
+ setScalar,
224
+ subtractScalar,
225
+ fromArray,
226
+ mousePositionFromEvent,
227
+ cssPositionFromEvent,
228
+ pixelPositionFromEvent
229
+ } = vec2;