@itee/client 10.0.0

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 (61) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/LICENSE.md +23 -0
  3. package/README.md +76 -0
  4. package/builds/itee-client.cjs.js +6517 -0
  5. package/builds/itee-client.cjs.js.map +1 -0
  6. package/builds/itee-client.cjs.min.js +125 -0
  7. package/builds/itee-client.esm.js +6468 -0
  8. package/builds/itee-client.esm.js.map +1 -0
  9. package/builds/itee-client.esm.min.js +124 -0
  10. package/builds/itee-client.iife.js +6524 -0
  11. package/builds/itee-client.iife.js.map +1 -0
  12. package/builds/itee-client.iife.min.js +125 -0
  13. package/package.json +87 -0
  14. package/sources/client.js +14 -0
  15. package/sources/cores/TAbstractFactory.js +42 -0
  16. package/sources/cores/TCloningFactory.js +39 -0
  17. package/sources/cores/TConstants.js +433 -0
  18. package/sources/cores/TInstancingFactory.js +41 -0
  19. package/sources/cores/TStore.js +303 -0
  20. package/sources/cores/_cores.js +13 -0
  21. package/sources/input_devices/TKeyboardController.js +158 -0
  22. package/sources/input_devices/TMouseController.js +31 -0
  23. package/sources/input_devices/_inputDevices.js +11 -0
  24. package/sources/loaders/TBinaryConverter.js +35 -0
  25. package/sources/loaders/TBinaryReader.js +1029 -0
  26. package/sources/loaders/TBinarySerializer.js +258 -0
  27. package/sources/loaders/TBinaryWriter.js +429 -0
  28. package/sources/loaders/_loaders.js +21 -0
  29. package/sources/loaders/converters/ArrayBinaryConverter.js +33 -0
  30. package/sources/loaders/converters/BooleanBinaryConverter.js +24 -0
  31. package/sources/loaders/converters/DateBinaryConverter.js +21 -0
  32. package/sources/loaders/converters/NullBinaryConverter.js +13 -0
  33. package/sources/loaders/converters/NumberBinaryConverter.js +15 -0
  34. package/sources/loaders/converters/ObjectBinaryConverter.js +101 -0
  35. package/sources/loaders/converters/RegExBinaryConverter.js +11 -0
  36. package/sources/loaders/converters/StringBinaryConverter.js +26 -0
  37. package/sources/loaders/converters/UndefinedBinaryConverter.js +13 -0
  38. package/sources/managers/TDataBaseManager.js +1649 -0
  39. package/sources/managers/_managers.js +10 -0
  40. package/sources/utils/TIdFactory.js +84 -0
  41. package/sources/utils/_utils.js +9 -0
  42. package/sources/webapis/WebAPI.js +773 -0
  43. package/sources/webapis/WebAPIOrigin.js +141 -0
  44. package/sources/webapis/_webapis.js +10 -0
  45. package/sources/webapis/messages/WebAPIMessage.js +75 -0
  46. package/sources/webapis/messages/WebAPIMessageData.js +51 -0
  47. package/sources/webapis/messages/WebAPIMessageError.js +79 -0
  48. package/sources/webapis/messages/WebAPIMessageEvent.js +58 -0
  49. package/sources/webapis/messages/WebAPIMessageProgress.js +91 -0
  50. package/sources/webapis/messages/WebAPIMessageReady.js +66 -0
  51. package/sources/webapis/messages/WebAPIMessageRequest.js +94 -0
  52. package/sources/webapis/messages/WebAPIMessageResponse.js +80 -0
  53. package/sources/webapis/messages/_messages.js +16 -0
  54. package/sources/workers/AbstractWorker.js +149 -0
  55. package/sources/workers/_workers.js +10 -0
  56. package/sources/workers/messages/WorkerMessage.js +33 -0
  57. package/sources/workers/messages/WorkerMessageData.js +30 -0
  58. package/sources/workers/messages/WorkerMessageError.js +32 -0
  59. package/sources/workers/messages/WorkerMessageMethodCall.js +60 -0
  60. package/sources/workers/messages/WorkerMessageProgress.js +67 -0
  61. package/sources/workers/messages/_messages.js +14 -0
@@ -0,0 +1,258 @@
1
+ /**
2
+ * @author [Tristan Valcke]{@link https://github.com/Itee}
3
+ * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}
4
+ */
5
+
6
+ import {
7
+ isArray,
8
+ isBoolean,
9
+ isNotDefined,
10
+ isNull,
11
+ isNumber,
12
+ isObject,
13
+ isString,
14
+ isUndefined
15
+ } from '@itee/validators'
16
+ import { ArrayBinaryConverter } from './converters/ArrayBinaryConverter.js'
17
+ import { BooleanBinaryConverter } from './converters/BooleanBinaryConverter.js'
18
+ import { DateBinaryConverter } from './converters/DateBinaryConverter.js'
19
+ import { NullBinaryConverter } from './converters/NullBinaryConverter.js'
20
+ import { NumberBinaryConverter } from './converters/NumberBinaryConverter.js'
21
+ import { ObjectBinaryConverter } from './converters/ObjectBinaryConverter.js'
22
+ import { RegExBinaryConverter } from './converters/RegExBinaryConverter.js'
23
+ import { StringBinaryConverter } from './converters/StringBinaryConverter.js'
24
+ import { UndefinedBinaryConverter } from './converters/UndefinedBinaryConverter.js'
25
+ import { TBinaryReader } from './TBinaryReader.js'
26
+ import { TBinaryWriter } from './TBinaryWriter.js'
27
+
28
+ //const BinaryType = toEnum( {
29
+ // Null: 0,
30
+ // Boolean: 1,
31
+ // Number: 2,
32
+ // String: 3,
33
+ // Date: 4,
34
+ // RegExp: 5,
35
+ // Object: 6,
36
+ // Array: 7,
37
+ // UserDefined: 8
38
+ //} )
39
+
40
+ const BinaryType = {
41
+ Null: 0,
42
+ Undefined: 1,
43
+ Boolean: 2,
44
+ Number: 3,
45
+ String: 4,
46
+ Date: 5,
47
+ RegEx: 6,
48
+ Array: 7,
49
+ Object: 8,
50
+ UserDefined: 255
51
+ }
52
+
53
+ function isDate( value ) {
54
+ if ( isNotDefined( value ) ) {
55
+ return false
56
+ }
57
+
58
+ switch ( typeof value ) {
59
+ case 'number':
60
+ return true
61
+ case 'string':
62
+ return !isNaN( Date.parse( value ) )
63
+ case 'object':
64
+ if ( value instanceof Date ) {
65
+ return !isNaN( value.getTime() )
66
+ } else {
67
+ return false
68
+ }
69
+ default:
70
+ return false
71
+ }
72
+ }
73
+
74
+ function isRegEx( value ) {
75
+ if ( isNotDefined( value ) ) {
76
+ return false
77
+ }
78
+
79
+ return value instanceof RegExp
80
+ }
81
+
82
+ class TBinarySerializer {
83
+
84
+ constructor() {
85
+
86
+ this.reader = new TBinaryReader()
87
+ this.writer = new TBinaryWriter()
88
+
89
+ this.converters = new Map( [
90
+ [ BinaryType.Null, new NullBinaryConverter( this ) ],
91
+ [ BinaryType.Undefined, new UndefinedBinaryConverter( this ) ],
92
+ [ BinaryType.Boolean, new BooleanBinaryConverter( this ) ],
93
+ [ BinaryType.Number, new NumberBinaryConverter( this ) ],
94
+ [ BinaryType.String, new StringBinaryConverter( this ) ],
95
+ [ BinaryType.Date, new DateBinaryConverter( this ) ],
96
+ [ BinaryType.RegEx, new RegExBinaryConverter( this ) ],
97
+ [ BinaryType.Array, new ArrayBinaryConverter( this ) ],
98
+ [ BinaryType.Object, new ObjectBinaryConverter( null, this ) ],
99
+ [ BinaryType.UserDefined, new Map( [] ) ]
100
+ ] )
101
+
102
+ // this.converters.set( BinaryType.Boolean, new BooleanBinaryConverter() )
103
+ // this.converters.set( 'String', new StringBinaryConverter() )
104
+ }
105
+
106
+ addConverter( converter ) {
107
+
108
+ converter.serializer = this
109
+
110
+ const userDefinedConverters = this.converters.get( BinaryType.UserDefined )
111
+ userDefinedConverters.set( converter.targetCtor.name, converter )
112
+
113
+ }
114
+ removeConverter( converter ) {
115
+ const userDefinedConverters = this.converters.get( BinaryType.UserDefined )
116
+ userDefinedConverters.remove( converter.targetCtor.name )
117
+ }
118
+
119
+ serialize( instance, options = {} ) {
120
+
121
+ // Reset writer buffer
122
+ this.writer.buffer = new ArrayBuffer( 1024 )
123
+ const buffer = this._serialize( instance )
124
+
125
+ // // Clip buffer to current offset
126
+ // const writerOffset = this.writer.offset
127
+ // console.log( writerOffset )
128
+ // const clippedBuffer = buffer.slice( 0, writerOffset )
129
+ //
130
+ // return clippedBuffer
131
+ //
132
+
133
+ // Clip buffer to current writer offset
134
+ return buffer.slice( 0, this.writer.offset )
135
+ }
136
+ _serialize( instance ) {
137
+ const binaryType = this._getBinaryTypeOf( instance )
138
+
139
+ // Prepend internal binary type for deserialization process to be able to target correct converter
140
+ this.writer.setUint8( binaryType )
141
+
142
+ // Get local converters and in case where binary type is userdefined, search in specific converter or use default (unoptimized)
143
+ let converter = this.converters.get( binaryType )
144
+ if ( binaryType === BinaryType.UserDefined ) {
145
+
146
+ // Prepend class name for deserialization (like BinaryType for primitives)
147
+ const ctor = instance.constructor
148
+ const ctorName = ctor.name
149
+ this.writer.setUint8( ctorName.length )
150
+ this.writer.setString( ctorName )
151
+
152
+ if ( !converter.has( ctorName ) ) {
153
+ console.info( `Need to create new converter for ${ ctorName } serialization. The serialization of this class could be optimized using it's own dedicated serializer that extend TBinaryConverter and add it to serializer converters.` )
154
+ converter.set( ctorName, new ObjectBinaryConverter( ctor, this ) )
155
+ }
156
+ converter = converter.get( ctorName )
157
+ }
158
+
159
+ converter.to( this.writer, instance )
160
+
161
+ return this.writer.buffer
162
+ }
163
+ _getBinaryTypeOf( instance ) {
164
+ let binaryType
165
+ if ( isNull( instance ) ) {
166
+ binaryType = BinaryType.Null
167
+ } else if ( isUndefined( instance ) ) {
168
+ binaryType = BinaryType.Undefined
169
+ } else if ( isBoolean( instance ) ) {
170
+ binaryType = BinaryType.Boolean
171
+ } else if ( isNumber( instance ) ) {
172
+ binaryType = BinaryType.Number
173
+ } else if ( isString( instance ) ) {
174
+ binaryType = BinaryType.String
175
+ } else if ( isDate( instance ) ) {
176
+ binaryType = BinaryType.Date
177
+ } else if ( isRegEx( instance ) ) {
178
+ binaryType = BinaryType.RegEx
179
+ } else if ( isArray( instance ) ) {
180
+ binaryType = BinaryType.Array
181
+ } else if ( isObject( instance ) ) { // Todo: care it should be isPlainObject !!!
182
+ binaryType = BinaryType.Object
183
+ } else { // UserDefined check in registered converters
184
+ binaryType = BinaryType.UserDefined
185
+ }
186
+
187
+ return binaryType
188
+ }
189
+
190
+ deserialize( buffer ) {
191
+ if ( isNotDefined( buffer ) || buffer.length === 0 ) { return }
192
+
193
+ // Reset writer buffer
194
+ this.reader.setBuffer( buffer, 0, buffer.length )
195
+
196
+ return this._deserialize()
197
+
198
+ }
199
+ _deserialize() {
200
+
201
+ const binaryType = this.reader.getUint8()
202
+
203
+ let converter = this.converters.get( binaryType )
204
+ if ( binaryType === BinaryType.UserDefined ) {
205
+
206
+ const ctorNameLength = this.reader.getUint8()
207
+ const ctorName = this.reader.getString( ctorNameLength )
208
+
209
+ // var ctor = this._getCtorOf( ctorName )
210
+
211
+ converter = converter.has( ctorName )
212
+ ? converter.get( ctorName )
213
+ : null //converter.get( null )
214
+
215
+ // Get specific or create default converter for userdefined type
216
+ // const ctorNameLength = this.reader.getUint8()
217
+ // const ctorName = this.reader.getString( ctorNameLength )
218
+ //
219
+ // if ( !converter.has( ctorName ) ) {
220
+ // console.info( `Need to create new converter for ${ ctorName } serialization. The serialization of this class could be optimized using it's own dedicated serializer that extend TBinaryConverter and add it to serializer
221
+ // converters.` ) converter.set( ctorName, new ObjectBinaryConverter( ctor ) ) } converter = converter.get( ctorName )
222
+ }
223
+
224
+ if ( !converter ) {
225
+ throw new TypeError( `Unable to found appropriate converter for deserialize type: ${ binaryType }` )
226
+ }
227
+
228
+ return converter.from( this.reader )
229
+
230
+ }
231
+ // _getCtorOf ( typeName ) {
232
+ // var stringToFunction = function ( str ) {
233
+ // var arr = str.split( '.' )
234
+ //
235
+ // var fn = ( window || this )
236
+ // for ( var i = 0, len = arr.length ; i < len ; i++ ) {
237
+ // fn = fn[ arr[ i ] ]
238
+ // }
239
+ //
240
+ // if ( typeof fn !== 'function' ) {
241
+ // throw new Error( 'function not found' )
242
+ // }
243
+ //
244
+ // return fn
245
+ // }
246
+ // }
247
+
248
+ }
249
+
250
+ const binarySerializerInstance = /*#__PURE__*/new TBinarySerializer()
251
+
252
+ export {
253
+ isDate,
254
+ isRegEx,
255
+ binarySerializerInstance as DefaultBinarySerializer,
256
+ TBinarySerializer,
257
+ BinaryType
258
+ }
@@ -0,0 +1,429 @@
1
+ import {
2
+ isNotArrayBuffer,
3
+ isNotBoolean,
4
+ isNotNumber,
5
+ isNull,
6
+ isUndefined
7
+ } from '@itee/validators'
8
+ import {
9
+ Byte,
10
+ Endianness
11
+ } from './TBinaryReader.js'
12
+
13
+ /**
14
+ * @author [Tristan Valcke]{@link https://github.com/Itee}
15
+ * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}
16
+ */
17
+
18
+ class TBinaryWriter {
19
+
20
+ constructor( {
21
+ buffer = new ArrayBuffer( 1024 ),
22
+ endianness = Endianness.Little
23
+ } = {} ) {
24
+
25
+ this.buffer = buffer
26
+ this.endianness = endianness
27
+
28
+ // Todo: For bit writing use same approche than byte
29
+ // this._bits = {
30
+ // buffer: null,
31
+ // offset: 0,
32
+ // length: 0
33
+ // }
34
+
35
+ this._updateDataView()
36
+ }
37
+ /**
38
+ *
39
+ * @returns {*}
40
+ */
41
+ get buffer() {
42
+ return this._buffer
43
+ }
44
+ set buffer( value ) {
45
+
46
+ const memberName = 'Buffer'
47
+ const expect = 'Expect an instance of ArrayBuffer.'
48
+
49
+ if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }
50
+ if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }
51
+ if ( isNotArrayBuffer( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }
52
+
53
+ this._buffer = value
54
+ this._offset = 0
55
+ this._length = value.byteLength
56
+
57
+ this._updateDataView()
58
+
59
+ }
60
+ /**
61
+ *
62
+ * @returns {*}
63
+ */
64
+ get offset() {
65
+ return this._offset
66
+ }
67
+ set offset( value ) {
68
+
69
+ const memberName = 'Offset'
70
+ const expect = 'Expect a number.'
71
+
72
+ if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }
73
+ if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }
74
+ if ( isNotNumber( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }
75
+
76
+ this._offset = value
77
+
78
+ this._updateDataView()
79
+
80
+ }
81
+ /**
82
+ *
83
+ * @param value
84
+ */
85
+ get length() {
86
+ return this._length
87
+ }
88
+ set length( value ) {
89
+
90
+ const memberName = 'Length'
91
+ const expect = 'Expect a number.'
92
+
93
+ if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }
94
+ if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }
95
+ if ( isNotNumber( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }
96
+
97
+ this._length = value
98
+
99
+ this._updateDataView()
100
+
101
+ }
102
+ /**
103
+ *
104
+ * @returns {*}
105
+ */
106
+ get endianness() {
107
+ return this._endianness
108
+ }
109
+ set endianness( value ) {
110
+
111
+ const memberName = 'Endianness'
112
+ const expect = 'Expect a boolean.'
113
+
114
+ if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }
115
+ if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }
116
+ if ( isNotBoolean( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }
117
+
118
+ this._endianness = value
119
+ }
120
+ /**
121
+ *
122
+ * @param buffer
123
+ * @param offset
124
+ * @param length
125
+ * @returns {TBinaryReader}
126
+ */
127
+ setBuffer( buffer, offset, length ) {
128
+
129
+ this.buffer = buffer
130
+ this.offset = offset || 0
131
+ this.length = length || buffer.byteLength
132
+
133
+ return this
134
+
135
+ }
136
+
137
+ /**
138
+ *
139
+ * @param value
140
+ * @returns {TBinaryReader}
141
+ */
142
+ setOffset( value ) {
143
+
144
+ this.offset = value
145
+ return this
146
+
147
+ }
148
+
149
+ /**
150
+ *
151
+ * @param value
152
+ * @returns {TBinaryReader}
153
+ */
154
+ setLength( value ) {
155
+
156
+ this.length = value
157
+ return this
158
+
159
+ }
160
+
161
+ /**
162
+ *
163
+ * @param endianess
164
+ * @returns {TBinaryReader}
165
+ */
166
+ setEndianess( endianess ) {
167
+
168
+ this.endianness = endianess
169
+ return this
170
+
171
+ }
172
+
173
+ /**
174
+ *
175
+ * @param increment
176
+ * @returns {*}
177
+ * @private
178
+ */
179
+ _getAndUpdateOffsetBy( increment ) {
180
+
181
+ const currentOffset = this._offset
182
+ this._offset += increment
183
+
184
+ // Manage buffer overflow, and auto-extend if needed
185
+ const bufferByteLength = this._buffer.byteLength
186
+ if ( this._offset >= bufferByteLength ) {
187
+
188
+ // Create new buffer and view with extended size
189
+ const newBuffer = new ArrayBuffer( bufferByteLength + 1024 )
190
+ const newDataView = new DataView( newBuffer, 0, newBuffer.byteLength )
191
+
192
+ // Copy data from current to new
193
+ for ( let i = 0 ; i < bufferByteLength ; i++ ) {
194
+ newDataView.setUint8( i, this._dataView.getUint8( i ) )
195
+ }
196
+
197
+ // Update local
198
+ this._buffer = newBuffer
199
+ this._dataView = newDataView
200
+
201
+ }
202
+
203
+ return currentOffset
204
+
205
+ }
206
+
207
+ /**
208
+ *
209
+ * @private
210
+ */
211
+ _updateDataView() {
212
+
213
+ this._dataView = new DataView( this._buffer, this._offset, this._length )
214
+
215
+ }
216
+
217
+ /**
218
+ *
219
+ * @returns {boolean}
220
+ */
221
+ isEndOfFile() {
222
+
223
+ return ( this._offset === this._length )
224
+
225
+ }
226
+
227
+ _iterArray( values, func, moveNext ) {
228
+
229
+ const currentOffset = this._offset
230
+
231
+ for ( let value of values ) {
232
+ func( value )
233
+ }
234
+
235
+ if ( !moveNext ) {
236
+ this._offset = currentOffset
237
+ }
238
+
239
+ }
240
+
241
+ // Bytes
242
+
243
+ /**
244
+ *
245
+ * @param offset
246
+ */
247
+ skipOffsetTo( offset ) {
248
+
249
+ this._offset = offset
250
+
251
+ }
252
+
253
+ /**
254
+ *
255
+ * @param nBytes
256
+ */
257
+ skipOffsetOf( nBytes ) {
258
+
259
+ this._offset += nBytes
260
+
261
+ }
262
+
263
+ setBoolean( value, moveNext = true ) {
264
+
265
+ this.setUint8( ( ( value & 1 ) === 1 ), moveNext )
266
+
267
+ }
268
+
269
+ setBooleanArray( values, moveNext = true ) {
270
+
271
+ this._iterArray( values, this.setBoolean.bind( this ), moveNext )
272
+
273
+ }
274
+
275
+ setInt8( value, moveNext = true ) {
276
+
277
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.One ) : this._offset
278
+ this._dataView.setInt8( offset, value )
279
+
280
+ }
281
+
282
+ setInt8Array( values, moveNext = true ) {
283
+
284
+ this._iterArray( values, this.setInt8.bind( this ), moveNext )
285
+
286
+ }
287
+
288
+ setUint8( value, moveNext = true ) {
289
+
290
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.One ) : this._offset
291
+ this._dataView.setUint8( offset, value )
292
+
293
+ }
294
+
295
+ setUint8Array( values, moveNext = true ) {
296
+
297
+ this._iterArray( values, this.setUint8.bind( this ), moveNext )
298
+
299
+ }
300
+
301
+ setInt16( value, moveNext = true ) {
302
+
303
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Two ) : this._offset
304
+ this._dataView.setInt16( offset, value, this._endianness )
305
+
306
+ }
307
+
308
+ setInt16Array( values, moveNext = true ) {
309
+
310
+ this._iterArray( values, this.setInt16.bind( this ), moveNext )
311
+
312
+ }
313
+
314
+ setUint16( value, moveNext = true ) {
315
+
316
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Two ) : this._offset
317
+ this._dataView.setUint16( offset, value, this._endianness )
318
+
319
+ }
320
+
321
+ setUint16Array( values, moveNext = true ) {
322
+
323
+ this._iterArray( values, this.setUint16.bind( this ), moveNext )
324
+
325
+ }
326
+
327
+ setInt32( value, moveNext = true ) {
328
+
329
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset
330
+ this._dataView.setInt32( offset, value, this._endianness )
331
+
332
+ }
333
+
334
+ setInt32Array( values, moveNext = true ) {
335
+
336
+ this._iterArray( values, this.setInt32.bind( this ), moveNext )
337
+
338
+ }
339
+
340
+ setUint32( value, moveNext = true ) {
341
+
342
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset
343
+ this._dataView.setUint32( offset, value, this._endianness )
344
+
345
+ }
346
+
347
+ setUint32Array( values, moveNext = true ) {
348
+
349
+ this._iterArray( values, this.setUint32.bind( this ), moveNext )
350
+
351
+ }
352
+
353
+ setInt64( /*value, moveNext = true*/ ) {
354
+
355
+ // From THREE.FBXLoader
356
+ // JavaScript doesn't support 64-bit integer so attempting to calculate by ourselves.
357
+ // 1 << 32 will return 1 so using multiply operation instead here.
358
+ // There'd be a possibility that this method returns wrong value if the value
359
+ // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.
360
+ // TODO: safely handle 64-bit integer using bigint ?
361
+
362
+ throw new Error( 'Not implemented, sorry... any help is welcome !' )
363
+ }
364
+
365
+ setInt64Array( values, moveNext = true ) {
366
+
367
+ this._iterArray( values, this.setInt64.bind( this ), moveNext )
368
+
369
+ }
370
+
371
+ setUint64( /*value, moveNext = true*/ ) {
372
+ // Note: see setInt64() comment
373
+ throw new Error( 'Not implemented, sorry... any help is welcome !' )
374
+ }
375
+
376
+ setUint64Array( values, moveNext = true ) {
377
+
378
+ this._iterArray( values, this.setUint64.bind( this ), moveNext )
379
+
380
+ }
381
+
382
+ setFloat32( value, moveNext = true ) {
383
+
384
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset
385
+ this._dataView.setFloat32( offset, value, this._endianness )
386
+
387
+ }
388
+
389
+ setFloat32Array( values, moveNext = true ) {
390
+
391
+ this._iterArray( values, this.setFloat32.bind( this ), moveNext )
392
+
393
+ }
394
+
395
+ setFloat64( value, moveNext = true ) {
396
+
397
+ const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Eight ) : this._offset
398
+ this._dataView.setFloat64( offset, value, this._endianness )
399
+
400
+ }
401
+
402
+ setFloat64Array( values, moveNext = true ) {
403
+
404
+ this._iterArray( values, this.setFloat64.bind( this ), moveNext )
405
+
406
+ }
407
+
408
+ setChar( value, moveNext = true ) {
409
+
410
+ this.setUint8( value.charCodeAt( 0 ), moveNext )
411
+
412
+ }
413
+
414
+ setString( values, moveNext = true ) {
415
+
416
+ this._iterArray( values, this.setChar.bind( this ), moveNext )
417
+
418
+ }
419
+
420
+ // setArrayBuffer ( value, moveNext = true ) {
421
+ //
422
+ // const offset = this._getAndUpdateOffsetBy( size )
423
+ // this._dataView.buffer.slice( offset, offset + size )
424
+ //
425
+ // }
426
+
427
+ }
428
+
429
+ export { TBinaryWriter }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @module Loaders
3
+ * @description Intermediary export file for loaders. Export [TBinaryReader]{@link TBinaryReader}, [Endianness]{@link Endianness}, and [Byte]{@link Byte}
4
+ *
5
+ * @author [Tristan Valcke]{@link https://github.com/Itee}
6
+ * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}
7
+ */
8
+
9
+ export * from './TBinaryConverter.js'
10
+ export * from './TBinaryReader.js'
11
+ export * from './TBinarySerializer.js'
12
+ export * from './TBinaryWriter.js'
13
+ export * from './converters/NullBinaryConverter.js'
14
+ export * from './converters/UndefinedBinaryConverter.js'
15
+ export * from './converters/NumberBinaryConverter.js'
16
+ export * from './converters/StringBinaryConverter.js'
17
+ export * from './converters/DateBinaryConverter.js'
18
+ export * from './converters/RegExBinaryConverter.js'
19
+ export * from './converters/ArrayBinaryConverter.js'
20
+ export * from './converters/ObjectBinaryConverter.js'
21
+