@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 @@
1
+ {"version":3,"file":"itee-client.esm.js","sources":["../sources/cores/TConstants.js","../sources/cores/TStore.js","../sources/cores/TAbstractFactory.js","../sources/cores/TCloningFactory.js","../sources/cores/TInstancingFactory.js","../sources/input_devices/TKeyboardController.js","../sources/input_devices/TMouseController.js","../sources/loaders/TBinaryConverter.js","../sources/loaders/TBinaryReader.js","../sources/loaders/converters/ArrayBinaryConverter.js","../sources/loaders/converters/BooleanBinaryConverter.js","../sources/loaders/converters/DateBinaryConverter.js","../sources/loaders/converters/NullBinaryConverter.js","../sources/loaders/converters/NumberBinaryConverter.js","../sources/loaders/converters/ObjectBinaryConverter.js","../sources/loaders/converters/RegExBinaryConverter.js","../sources/loaders/converters/StringBinaryConverter.js","../sources/loaders/converters/UndefinedBinaryConverter.js","../sources/loaders/TBinaryWriter.js","../sources/loaders/TBinarySerializer.js","../sources/managers/TDataBaseManager.js","../sources/utils/TIdFactory.js","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../sources/webapis/messages/WebAPIMessage.js","../sources/webapis/messages/WebAPIMessageData.js","../sources/webapis/messages/WebAPIMessageError.js","../sources/webapis/messages/WebAPIMessageEvent.js","../sources/webapis/messages/WebAPIMessageReady.js","../sources/webapis/messages/WebAPIMessageRequest.js","../sources/webapis/messages/WebAPIMessageResponse.js","../sources/webapis/WebAPIOrigin.js","../sources/webapis/WebAPI.js","../sources/webapis/messages/WebAPIMessageProgress.js","../sources/workers/messages/WorkerMessage.js","../sources/workers/messages/WorkerMessageData.js","../sources/workers/messages/WorkerMessageError.js","../sources/workers/messages/WorkerMessageProgress.js","../sources/workers/AbstractWorker.js","../sources/workers/messages/WorkerMessageMethodCall.js"],"sourcesContent":["/**\n * A freezed javascript object used like an enum.\n * @typedef {object} Enum\n * @constant\n * @example\n * var Meal = toEnum( {\n * Food: 'Tartiflette',\n * Drink: 'Saint-Emilion',\n * Dessert: 'Mousse au chocolat'\n * } )\n *\n * if( Foo.includes('Tartiflette') {\n * // Happy\n * }\n *\n * var myDrink = 'coke'\n * if( myDrink === Meal.Drink ) {\n *\n * } else {\n * // Your life is a pain\n * }\n *\n * var MealTypes = Meal.types\n * // ['Tartiflette', 'Saint-Emilion', 'Mousse au chocolat' ]\n *\n */\nimport { toEnum } from 'itee-utils'\n\n/**\n * @typedef {Enum} FileFormat\n * @property {String} Asc=\"asc\" - The ascii file format\n * @property {String} Dae=\"dae\" - The dae file format\n * @property {String} Dbf=\"dbf\" - The dbf file format\n * @property {String} Fbx=\"fbx\" - The fbx file format\n * @property {String} Mtl=\"mtl\" - The material file format\n * @property {String} Json=\"json\" - The json file format\n * @property {String} Obj=\"obj\" - The object file format\n * @property {String} Shp=\"shp\" - The shape file format\n * @property {String} Stl=\"stl\" - The stereolithographie file format\n *\n * @constant\n * @type {FileFormat}\n * @description The FileFormat Enum give some commonly used file format in 3d context\n */\nconst FileFormat = /*#__PURE__*/toEnum( {\n Asc: { value: 'asc' },\n Dae: { value: 'dae' },\n Dbf: { value: 'dbf' },\n Fbx: { value: 'fbx' },\n Mtl: { value: 'mtl' },\n Json: { value: 'json' },\n Obj: { value: 'obj' },\n Shp: { value: 'shp' },\n Stl: { value: 'stl' }\n} )\n\n/**\n * @typedef {Enum} HttpStatusCode\n * @property {number} Continue=100 - Waiting for the continuation of the request.\n * @property {number} SwitchingProtocols=101 - The requester has asked the server to switch protocols and the server has agreed to do so.\n * @property {number} Processing=102 - WebDAV: Processing in progress (prevents the client from exceeding the limited waiting time).\n * @property {number} Ok=200 - Query successfully processed.\n * @property {number} Created=201 - Query successfully processed and a document was created.\n * @property {number} Accepted=202 - Query processed, but without guarantee of result.\n * @property {number} NonAuthoritativeInformation=203 - Information returned, but generated by an uncertified source.\n * @property {number} NoContent=204 - Query successfully processed but no information returned.\n * @property {number} ResetContent=205 - Query successfully processed, the current page can be cleared.\n * @property {number} PartialContent=206 - Only part of the resource has been transmitted.\n * @property {number} MultiStatus=207 - WebDAV: Multiple Response.\n * @property {number} AlreadyReported=208 - WebDAV: The document was previously sent to this collection.\n * @property {number} ContentDifferent=210 - WebDAV: The copy of the client-side resource differs from that of the server (content or properties).\n * @property {number} IMUsed=226 - The server has completed the request for the resource, and the response is a representation of the result of one or more instance manipulations applied to the\n * current instance.\n * @property {number} MultipleChoices=300 - The requested URI refers to multiple resources.\n * @property {number} MovedPermanently=301 - Document moved permanently.\n * @property {number} Found=302 - Document moved temporarily.\n * @property {number} SeeOther=303 - The answer to this query is elsewhere.\n * @property {number} NotModified=304 - Document not modified since the last request.\n * @property {number} UseProxy=305 - The request must be re-addressed to the proxy.\n * @property {number} Unused=306 - Code used by an older version of RFC 2616, now reserved.\n * @property {number} TemporaryRedirect=307 - The request must be temporarily redirected to the specified URI.\n * @property {number} PermanentRedirect=308 - The request must be redirected permanently to the specified URI.\n * @property {number} TooManyRedirects=310 - The request must be redirected too many times, or is the victim of a redirection loop.\n * @property {number} BadRequest=400 - The syntax of the query is wrong.\n * @property {number} Unauthorized=401 - Authentication is required to access the resource.\n * @property {number} PaymentRequired=402 - Payment required to access the resource.\n * @property {number} Forbidden=403 - The server understood the request, but refuses to execute it. Unlike error 401, authenticating will not make any difference. On servers where authentication is\n * required, this usually means that authentication has been accepted but access rights do not allow the client to access the resource.\n * @property {number} NotFound=404 - Resource not found.\n * @property {number} MethodNotAllowed=405 - Unauthorized request method.\n * @property {number} NotAcceptable=406 - The requested resource is not available in a format that would respect the \"Accept\" headers of the request.\n * @property {number} ProxyAuthenticationRequired=407 - Access to the authorized resource by identification with the proxy.\n * @property {number} RequestTimeOut=408 - Waiting time for an elapsed client request.\n * @property {number} Conflict=409 - The request can not be processed in the current state.\n * @property {number} Gone=410 - The resource is no longer available and no redirection address is known.\n * @property {number} LengthRequired=411 - The length of the request has not been specified.\n * @property {number} PreconditionFailed=412 - Preconditions sent by the query unverified.\n * @property {number} RequestEntityTooLarge=413 - Abandoned processing due to excessive request\n * @property {number} RequestURITooLong=414 - URI too long\n * @property {number} UnsupportedMediaType=415 - Unsupported query format for a given method and resource.\n * @property {number} RequestRangeUnsatisfiable=416 - Invalid \"range\" request header fields.\n * @property {number} ExpectationFailed=417 - Expected behavior and defined in the header of the unsatisfactory request.\n * @property {number} ImATeapot=418 - \"I am a teapot\". This code is defined in RFC 2324 dated April 1, 1998, Hyper Text Coffee Pot Control Protocol.\n * @property {number} BadMapping=421 - The request was sent to a server that is not able to produce a response (for example, because a connection has been reused).\n * @property {number} UnprocessableEntity=422 - WebDAV: The entity provided with the request is incomprehensible or incomplete.\n * @property {number} Locked=423 - WebDAV: The operation can not take place because the resource is locked.\n * @property {number} MethodFailure=424 - WebDAV: A method of the transaction failed.\n * @property {number} UnorderedCollection=425 - WebDAV RFC 3648. This code is defined in the WebDAV Advanced Collections Protocol draft , but is absent from the Web Distributed Authoring and\n * Versioning (WebDAV) Ordered Collections Protocol.\n * @property {number} UpgradeRequired=426 - RFC 2817 The client should change protocol, for example to TLS / 1.0 .\n * @property {number} PreconditionRequired=428 - RFC 6585 The request must be conditional.\n * @property {number} TooManyRequests=429 - RFC 6585 The client has issued too many requests within a given time.\n * @property {number} RequestHeaderFieldsTooLarge=431 - RFC 6585 HTTP headers issued exceed the maximum size allowed by the server.\n * @property {number} NoResponse=444 - Indicates that the server did not return any information to the client and closed the connection.\n * @property {number} RetryWith=449 - Code defined by Microsoft . The request should be returned after performing an action.\n * @property {number} BlockedByWindowsParentalControls=450 - Code defined by Microsoft. This error is generated when Windows Parental Control tools are enabled and block access to the page.\n * @property {number} UnavailableForLegalReasons=451 - This error code indicates that the requested resource is inaccessible for legal reasons\n * @property {number} UnrecoverableError=456 - WebDAV: Fatal error.\n * @property {number} SSLCertificateError=495 - An extension of the 400 Bad Request error, used when the client provided an invalid certificate.\n * @property {number} SSLCertificateRequired=496 - An extension of the 400 Bad Request error, used when a required client certificate is not provided.\n * @property {number} HTTPRequestSentToHTTPSPort=497 - An extension of the 400 Bad Request error, used when the client sends an HTTP request to port 443 normally intended for HTTPS requests.\n * @property {number} ClientClosedRequest=499 - The client closed the connection before receiving the response. This error occurs when the processing is too long on the server side.\n * @property {number} InternalServerError=500 - Internal server error.\n * @property {number} NotImplemented=501 - Functionality claimed not supported by the server.\n * @property {number} BadGateway=502 - Wrong response sent to an intermediate server by another server.\n * @property {number} ServiceUnavailable=503 - Service temporarily unavailable or under maintenance.\n * @property {number} GatewayTimeOut=504 - Waiting time for a response from a server to an intermediate server that has elapsed.\n * @property {number} HTTPVersionNotSupported=505 - HTTP version not managed by the server.\n * @property {number} VariantAlsoNegotiates=506 - RFC 2295: Negotiation Error. Transparent content negociation.\n * @property {number} InsufficientStorage=507 - WebDAV: Insufficient space to modify properties or build the collection.\n * @property {number} LoopDetected=508 - WebDAV: Loop in a Resource Match\n * @property {number} BandwidthLimitExceeded=509 - Used by many servers to indicate a quota overrun.\n * @property {number} NotExtended=510 - RFC 2774: The request does not respect the policy for accessing extended HTTP resources.\n * @property {number} NetworkAuthenticationRequired=511 - RFC 6585: The client must authenticate to access the network. Used by captive portals to redirect clients to the authentication page.\n * @property {number} UnknownError=520 - Error 520 is used as a wildcard response when the origin server returns an unexpected result.\n * @property {number} WebServerIsDown=521 - The server has refused the connection from Cloudflare.\n * @property {number} ConnectionTimedOut=522 - Cloudflare could not negotiate a TCP handshake with the origin server.\n * @property {number} OriginIsUnreachable=523 - Cloudflare failed to reach the origin server. This can occur if DNS server name resolution fails.\n * @property {number} ATimeoutOccured=524 - Cloudflare established a TCP connection with the origin server but did not receive an HTTP response before the login timeout.\n * @property {number} SSLHandshakeFailed=525 - Cloudflare could not negotiate SSL / TLS handshake with the origin server.\n * @property {number} InvalidSSLCertificate=526 - Cloudflare could not validate the SSL certificate presented by the origin server.\n * @property {number} RailgunError=527 - Error 527 indicates that the request has timed out or failed after the WAN connection was established.\n *\n * @constant\n * @type {HttpStatusCode}\n * @description HttpStatusCode contains all http status code available to check and process correctly server response.\n * @see {@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes} for further information.\n */\nconst HttpStatusCode = /*#__PURE__*/toEnum( {\n\n // 100\n Continue: { value: 100 },\n SwitchingProtocols: { value: 101 },\n Processing: { value: 102 },\n\n // 200\n Ok: { value: 200 },\n Created: { value: 201 },\n Accepted: { value: 202 },\n NonAuthoritativeInformation: { value: 203 },\n NoContent: { value: 204 },\n ResetContent: { value: 205 },\n PartialContent: { value: 206 },\n MultiStatus: { value: 207 },\n AlreadyReported: { value: 208 },\n ContentDifferent: { value: 210 },\n IMUsed: { value: 226 },\n\n // 300\n MultipleChoices: { value: 300 },\n MovedPermanently: { value: 301 },\n Found: { value: 302 },\n SeeOther: { value: 303 },\n NotModified: { value: 304 },\n UseProxy: { value: 305 },\n Unused: { value: 306 },\n TemporaryRedirect: { value: 307 },\n PermanentRedirect: { value: 308 },\n TooManyRedirects: { value: 310 },\n\n // 400\n BadRequest: { value: 400 },\n Unauthorized: { value: 401 },\n PaymentRequired: { value: 402 },\n Forbidden: { value: 403 },\n NotFound: { value: 404 },\n MethodNotAllowed: { value: 405 },\n NotAcceptable: { value: 406 },\n ProxyAuthenticationRequired: { value: 407 },\n RequestTimeOut: { value: 408 },\n Conflict: { value: 409 },\n Gone: { value: 410 },\n LengthRequired: { value: 411 },\n PreconditionFailed: { value: 412 },\n RequestEntityTooLarge: { value: 413 },\n RequestRangeUnsatisfiable: { value: 416 },\n ExpectationFailed: { value: 417 },\n ImATeapot: { value: 418 },\n BadMapping: { value: 421 },\n UnprocessableEntity: { value: 422 },\n Locked: { value: 423 },\n MethodFailure: { value: 424 },\n UnorderedCollection: { value: 425 },\n UpgradeRequired: { value: 426 },\n PreconditionRequired: { value: 428 },\n TooManyRequests: { value: 429 },\n RequestHeaderFieldsTooLarge: { value: 431 },\n NoResponse: { value: 444 },\n RetryWith: { value: 449 },\n BlockedByWindowsParentalControls: { value: 450 },\n UnavailableForLegalReasons: { value: 451 },\n UnrecoverableError: { value: 456 },\n SSLCertificateError: { value: 495 },\n SSLCertificateRequired: { value: 496 },\n HTTPRequestSentToHTTPSPort: { value: 497 },\n ClientClosedRequest: { value: 499 },\n\n // 500\n InternalServerError: { value: 500 },\n NotImplemented: { value: 501 },\n BadGateway: { value: 502 },\n ServiceUnavailable: { value: 503 },\n GatewayTimeOut: { value: 504 },\n HTTPVersionNotSupported: { value: 505 },\n VariantAlsoNegotiates: { value: 506 },\n InsufficientStorage: { value: 507 },\n LoopDetected: { value: 508 },\n BandwidthLimitExceeded: { value: 509 },\n NotExtended: { value: 510 },\n NetworkAuthenticationRequired: { value: 511 },\n UnknownError: { value: 520 },\n WebServerIsDown: { value: 521 },\n ConnectionTimedOut: { value: 522 },\n OriginIsUnreachable: { value: 523 },\n ATimeoutOccured: { value: 524 },\n SSLHandshakeFailed: { value: 525 },\n InvalidSSLCertificate: { value: 526 },\n RailgunError: { value: 527 }\n\n} )\n\n/**\n * @typedef {Enum} HttpVerb\n * @property {String} Create=\"PUT\" - Corresponding to the create http verb for an itee server, namely \"PUT\".\n * @property {String} Read=\"POST\" - Corresponding to the read http verb for an itee server, namely \"POST\".\n * @property {String} Update=\"PATCH\" - Corresponding to the update http verb for an itee server, namely \"PATCH\".\n * @property {String} Delete=\"DELETE\" - Corresponding to the delete http verb for an itee server, namely \"DELETE\".\n *\n * @constant\n * @type {HttpVerb}\n * @description HttpVerb contains the CRUD actions with corresponding http verb to request an itee server.\n * @see {@link https://en.wikipedia.org/wiki/Create,_read,_update_and_delete} for further information.\n */\nconst HttpVerb = /*#__PURE__*/toEnum( {\n Create: { value: 'PUT' },\n Read: { value: 'POST' },\n Update: { value: 'PATCH' },\n Delete: { value: 'DELETE' }\n} )\n\n/**\n * @typedef {Enum} Keys\n * @property {Number} BACKSPACE=8 - The backspace key code\n * @property {Number} TAB=9 - The tab key code\n * @property {Number} ENTER=13 - The enter key code\n * @property {Number} Etc...=* - All the rest\n *\n * @constant\n * @type {Keys}\n * @description Keys contains common keyboard key values, this allow to write semantic code instead of integer when dealing with key codes.\n */\nconst Keys = /*#__PURE__*/toEnum( {\n BACKSPACE: { value: 8 },\n TAB: { value: 9 },\n ENTER: { value: 13 },\n SHIFT: { value: 16 },\n CTRL: { value: 17 },\n ALT: { value: 18 },\n PAUSE: { value: 19 },\n CAPS_LOCK: { value: 20 },\n ESCAPE: { value: 27 },\n SPACE: { value: 32 },\n PAGE_UP: { value: 33 },\n PAGE_DOWN: { value: 34 },\n END: { value: 35 },\n HOME: { value: 36 },\n LEFT_ARROW: { value: 37 },\n UP_ARROW: { value: 38 },\n RIGHT_ARROW: { value: 39 },\n DOWN_ARROW: { value: 40 },\n INSERT: { value: 45 },\n DELETE: { value: 46 },\n ZERO: { value: 48 },\n ONE: { value: 49 },\n TWO: { value: 50 },\n THREE: { value: 51 },\n FOUR: { value: 52 },\n FIVE: { value: 53 },\n SIX: { value: 54 },\n SEVEN: { value: 55 },\n HEIGHT: { value: 56 },\n NINE: { value: 57 },\n A: { value: 65 },\n B: { value: 66 },\n C: { value: 67 },\n D: { value: 68 },\n E: { value: 69 },\n F: { value: 70 },\n G: { value: 71 },\n H: { value: 72 },\n I: { value: 73 },\n J: { value: 74 },\n K: { value: 75 },\n L: { value: 76 },\n M: { value: 77 },\n N: { value: 78 },\n O: { value: 79 },\n P: { value: 80 },\n Q: { value: 81 },\n R: { value: 82 },\n S: { value: 83 },\n T: { value: 84 },\n U: { value: 85 },\n V: { value: 86 },\n W: { value: 87 },\n X: { value: 88 },\n Y: { value: 89 },\n Z: { value: 90 },\n LEFT_WINDOW_KEY: { value: 91 },\n RIGHT_WINDOW_KEY: { value: 92 },\n SELECT_KEY: { value: 93 },\n NUMPAD_0: { value: 96 },\n NUMPAD_1: { value: 97 },\n NUMPAD_2: { value: 98 },\n NUMPAD_3: { value: 99 },\n NUMPAD_4: { value: 100 },\n NUMPAD_5: { value: 101 },\n NUMPAD_6: { value: 102 },\n NUMPAD_7: { value: 103 },\n NUMPAD_8: { value: 104 },\n NUMPAD_9: { value: 105 },\n MULTIPLY: { value: 106 },\n ADD: { value: 107 },\n SUBSTRACT: { value: 109 },\n DECIMAL_POINT: { value: 110 },\n DIVIDE: { value: 111 },\n F1: { value: 112 },\n F2: { value: 113 },\n F3: { value: 114 },\n F4: { value: 115 },\n F5: { value: 116 },\n F6: { value: 117 },\n F7: { value: 118 },\n F8: { value: 119 },\n F9: { value: 120 },\n F10: { value: 121 },\n F11: { value: 122 },\n F12: { value: 123 },\n NUM_LOCK: { value: 144 },\n SCROLL_LOCK: { value: 145 },\n SEMICOLON: { value: 186 },\n EQUAL: { value: 187 },\n COMMA: { value: 188 },\n DASH: { value: 189 },\n PERIODE: { value: 190 },\n SLASH: { value: 191 },\n GRAVE_ACCENT: { value: 192 },\n OPEN_SQUARE_BRACKET: { value: 219 },\n BACKSLASH: { value: 220 },\n CLOSE_SQUARE_BRACKET: { value: 221 },\n SINGLE_QUOTE: { value: 222 }\n} )\n\n/**\n * @typedef {Enum} MimeType\n * @property {Number} ...\n *\n * @constant\n * @type {MimeType}\n * @description Todo...\n */\nconst MimeType = /*#__PURE__*/toEnum( {} )\n\n/**\n * @typedef {Enum} Mouse\n * @property {Number} Wheel=-1 - The enter key code\n * @property {Number} Left=0 - The enter key code\n * @property {Number} Middle=1 - The enter key code\n * @property {Number} Right=2 - The enter key code\n *\n * @constant\n * @type {Mouse}\n * @description This Mouse Enum expose 4 common state of mouse button values (Wheel, Left, Middle and Right), this allow to write semantic code instead of integer when dealing with mouse button codes.\n */\nconst Mouse = /*#__PURE__*/toEnum( {\n Wheel: { value: -1 },\n Left: { value: 0 },\n Middle: { value: 1 },\n Right: { value: 2 }\n} )\n\n/**\n * @typedef {Enum} ResponseType\n * @property {String} ArrayBuffer=\"arraybuffer\" - The \"arraybuffer\" server response type.\n * @property {String} Blob=\"blob\" - The \"blob\" server response type.\n * @property {String} Document=\"document\" - The \"document\" server response type.\n * @property {String} Json=\"json\" - The \"json\" server response type.\n * @property {String} DOMString=\"text\" - The \"text\" server response type.\n * @property {String} Default=\"text\" - The \"\" server response type ( equivalent to DOMString ).\n *\n * @constant\n * @type {ResponseType}\n * @description ResponseType allow to filter wich type of response is recieved from the server.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType} for further information.\n */\nconst ResponseType = /*#__PURE__*/toEnum( {\n ArrayBuffer: { value: 'arraybuffer' },\n Blob: { value: 'blob' },\n Document: { value: 'document' },\n Json: { value: 'json' },\n DOMString: { value: 'text' },\n Default: { value: '' }\n} )\n\nexport {\n FileFormat,\n HttpStatusCode,\n HttpVerb,\n Keys,\n MimeType,\n Mouse,\n ResponseType\n}\n","import {\n isFunction,\n isNotArray,\n isNotBoolean,\n isNotObject,\n isNotUndefined,\n isNull,\n isString,\n isUndefined\n} from 'itee-validators'\n\n/**\n * @class\n * @classdesc TStore is a simple javascript object whose purpose is to store some ket/value data to future usage. It could be enable/disable.\n *\n * @example {@lang javascript}\n * var cache = new TCache()\n * cache.add( 'foo', 'bar' )\n * TLogger.log( cache.get('foo') ) // 'bar'\n *\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nclass TStore {\n\n /**\n * @constructor\n * @param {Object} [parameters={}]\n * @param {Object} [parameters.collection={}]\n * @param {Boolean} [parameters.allowOverride=false]\n * @param {Array.<function>} [parameters.keyValidators=[]]\n * @param {Array.<function>} [parameters.valueValidators=[]]\n */\n constructor( parameters = {} ) {\n\n const _parameters = {\n ...{\n collection: {},\n allowOverride: false,\n keyValidators: [],\n valueValidators: []\n }, ...parameters\n }\n\n this.collection = _parameters.collection\n this.allowOverride = _parameters.allowOverride\n this.keyValidators = _parameters.keyValidators\n this.valueValidators = _parameters.valueValidators\n\n }\n /**\n *\n * @return {{}}\n */\n get collection() {\n\n return this._collection\n\n }\n set collection( value ) {\n\n const memberName = 'Collection'\n const expect = 'Expect an object.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotObject( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._collection = value\n\n }\n /**\n *\n * @return {*}\n */\n get allowOverride() {\n\n return this._allowOverride\n\n }\n set allowOverride( value ) {\n\n const memberName = 'Allow override'\n const expect = 'Expect a boolean.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotBoolean( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._allowOverride = value\n\n }\n /**\n *\n * @return {*}\n */\n get keyValidators() {\n\n return this._keyValidators\n\n }\n set keyValidators( value ) {\n\n const memberName = 'Keys validators'\n const expect = 'Expect an array of TValidator or an empty array.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotArray( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._keyValidators = value\n\n }\n /**\n *\n * @return {*}\n */\n get valueValidators() {\n return this._valueValidators\n }\n set valueValidators( value ) {\n\n const memberName = 'Values validators'\n const expect = 'Expect an array of TValidator or an empty array.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotArray( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._valueValidators = value\n\n }\n /**\n *\n * @return {string[]}\n */\n get keys() {\n\n return Object.keys( this._collection )\n\n }\n /**\n *\n * @return {unknown[] | any[]}\n */\n get values() {\n\n return Object.values( this._collection )\n\n }\n /**\n *\n * @param value\n * @param validators\n * @private\n */\n static _validate( value, validators ) {\n\n for ( let validatorIndex = 0, numberOfValidators = validators.length ; validatorIndex < numberOfValidators ; validatorIndex++ ) {\n\n let validator = validators[ validatorIndex ]\n\n if ( !validator.validator( value ) ) {\n\n const error = validator.error\n if ( isString( error ) ) {\n throw new TypeError( error )\n } else if ( isFunction( error ) ) {\n throw new TypeError( error( value ) )\n } else {\n throw new TypeError( `${ value } is invalid.` )\n }\n\n }\n\n }\n\n }\n /**\n *\n * @param value\n * @return {TStore} The current instance (this)\n */\n setCollection( value ) {\n\n this.collection = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @return {TStore} The current instance (this)\n */\n setAllowOverride( value ) {\n\n this.allowOverride = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @return {TStore} The current instance (this)\n */\n setKeyValidators( value ) {\n\n this.keyValidators( value )\n return this\n\n }\n\n /**\n *\n * @param value\n * @return {TStore} The current instance (this)\n */\n setValueValidators( value ) {\n\n this.valueValidators( value )\n return this\n\n }\n\n /**\n * Allow to add new key value pair, the key cannot be null, undefined, or an empty string.\n * In case the key already exist, the value will be overwritten if force params is true or this\n * allow overriding else it throw an TypeError.\n *\n * @param {*} key\n * @param {*} value\n * @param {Boolean} force\n * @return {TStore} The current instance (this)\n */\n add( key, value, force = false ) {\n\n if ( this.contain( key ) && ( !this._allowOverride && !force ) ) {\n throw new TypeError( `Item with key (${ key }) already exist in collection !` )\n }\n\n TStore._validate( key, this._keyValidators )\n TStore._validate( value, this._valueValidators )\n\n this._collection[ key ] = value\n\n return this\n\n }\n\n /**\n *\n * @param key\n * @return {boolean}\n */\n contain( key ) {\n\n return isNotUndefined( this._collection[ key ] )\n\n }\n\n /**\n * Return the value associated to the key.\n *\n * @param key\n * @returns {*}\n */\n get( key ) {\n\n return this._collection[ key ]\n\n }\n\n /**\n * Remove to value from the cache. Does nothing if the key does not exist.\n *\n * @param key\n * @return {TStore} The current instance (this)\n */\n remove( key ) {\n\n delete this._collection[ key ]\n\n return this\n\n }\n\n /**\n * Clear the cache and reset collection to an empty object.\n * @return {TStore} The current instance (this)\n */\n clear() {\n\n this._collection = {}\n\n return this\n\n }\n\n}\n\nexport { TStore }\n","import { TStore } from './TStore.js'\n\n/**\n * @class\n * @classdesc The abstract class to create factory\n * @abstract\n * @extends TStore\n *\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nclass TAbstractFactory extends TStore {\n\n /**\n * @constructor\n * @param parameters\n */\n constructor( parameters = {} ) {\n\n const _parameters = { ...{}, ...parameters }\n\n super( _parameters )\n\n }\n\n\n /**\n * The create factory method. It allow to automate Class creation by constructor key, and parameters to pass for initialized the instance.\n * @abstract\n * @param {*} key\n * @param parameters\n */\n // eslint-disable-next-line no-unused-vars\n create( key, ...parameters ) {\n\n // Need to be reimplemented\n\n }\n\n}\n\nexport { TAbstractFactory }\n","import { TAbstractFactory } from './TAbstractFactory.js'\n\n/**\n * @class\n * @classdesc The TCloningFactory is a kind a factory that performe instanciation by cloning a base instance.\n * @extends TAbstractFactory\n *\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nclass TCloningFactory extends TAbstractFactory {\n\n /**\n * @param parameters\n */\n constructor( parameters = {} ) {\n\n const _parameters = { ...{}, ...parameters }\n\n super( _parameters )\n\n }\n\n /**\n *\n * @param key\n * @param parameters\n * @returns {*}\n */\n create( key, ...parameters ) {\n super.create( key, ...parameters )\n\n return this.get( key ).clone( ...parameters )\n\n }\n}\n\nexport { TCloningFactory }\n\n","import { TAbstractFactory } from './TAbstractFactory.js'\n\n/**\n * @class\n * @classdesc The TInstancingFactory is a kind a factory that performe instanciation based on registred constructor.\n * @extends TAbstractFactory\n *\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nclass TInstancingFactory extends TAbstractFactory {\n\n /**\n * The ctor description\n * @param parameters\n */\n constructor( parameters = {} ) {\n\n const _parameters = { ...{}, ...parameters }\n\n super( _parameters )\n\n }\n\n /**\n *\n * @param key\n * @param parameters\n * @returns {*}\n */\n create( key, ...parameters ) {\n super.create( key, ...parameters )\n\n return new this.get( key )( ...parameters )\n\n }\n\n}\n\nexport { TInstancingFactory }\n\n","/* eslint-env browser */\n\nimport { DefaultLogger as TLogger } from 'itee-core'\nimport { Keys } from '../cores/TConstants.js'\n\n/**\n * @class\n * @classdesc TKeyboardController allow single source of thruth for keyboard state checking (based on Lee Stemkoski work).\n * See TKeyboardController.k object data below for names of keys whose state can be polled\n *\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n * @example {@lang javascript}\n * // (1) create a global variable:\n * var keyboard = new TKeyboardController();\n *\n * // (2) during main loop:\n * keyboard.update();\n *\n * // (3) check state of keys:\n * keyboard.down(\"A\") -- true for one update cycle after key is pressed\n * keyboard.pressed(\"A\") -- true as long as key is being pressed\n * keyboard.up(\"A\") -- true for one update cycle after key is released\n */\nclass TKeyboardController {\n\n /**\n *\n * @param parameters\n */\n // eslint-disable-next-line no-unused-vars\n constructor( parameters = {} ) {\n\n // const _parameters = {\n // ...{},\n // ...parameters\n // }\n\n // bind keyEvents\n document.addEventListener( 'keydown', TKeyboardController.onKeyDown, false )\n document.addEventListener( 'keyup', TKeyboardController.onKeyUp, false )\n\n }\n /**\n *\n * @param keyCode\n * @return {string}\n */\n static keyName( keyCode ) {\n return ( TKeyboardController.k[ keyCode ] !== null ) ?\n TKeyboardController.k[ keyCode ] :\n String.fromCharCode( keyCode )\n }\n /**\n *\n * @param event\n */\n static onKeyUp( event ) {\n var key = TKeyboardController.keyName( event.keyCode )\n if ( TKeyboardController.status[ key ] ) {\n TKeyboardController.status[ key ].pressed = false\n }\n }\n /**\n *\n * @param event\n */\n static onKeyDown( event ) {\n var key = TKeyboardController.keyName( event.keyCode )\n if ( !TKeyboardController.status[ key ] ) {\n TKeyboardController.status[ key ] = {\n down: false,\n pressed: false,\n up: false,\n updatedPreviously: false\n }\n }\n }\n /**\n *\n */\n update() {\n for ( var key in TKeyboardController.status ) {\n // insure that every keypress has \"down\" status exactly once\n if ( !TKeyboardController.status[ key ].updatedPreviously ) {\n TKeyboardController.status[ key ].down = true\n TKeyboardController.status[ key ].pressed = true\n TKeyboardController.status[ key ].updatedPreviously = true\n } else { // updated previously\n TKeyboardController.status[ key ].down = false\n }\n\n // key has been flagged as \"up\" since last update\n if ( TKeyboardController.status[ key ].up ) {\n delete TKeyboardController.status[ key ]\n continue // move on to next key\n }\n\n if ( !TKeyboardController.status[ key ].pressed ) // key released\n {\n TKeyboardController.status[ key ].up = true\n }\n }\n }\n\n /**\n *\n * @param keyName\n * @return {*}\n */\n down( keyName ) {\n return ( TKeyboardController.status[ keyName ] && TKeyboardController.status[ keyName ].down )\n }\n\n /**\n *\n * @param keyName\n * @return {*|pressed|boolean}\n */\n pressed( keyName ) {\n return ( TKeyboardController.status[ keyName ] && TKeyboardController.status[ keyName ].pressed )\n }\n\n /**\n *\n * @param keyName\n * @return {*}\n */\n up( keyName ) {\n return ( TKeyboardController.status[ keyName ] && TKeyboardController.status[ keyName ].up )\n }\n\n /**\n *\n */\n debug() {\n var list = 'Keys active: '\n for ( var arg in TKeyboardController.status ) {\n list += ' ' + arg\n }\n TLogger.log( list )\n }\n\n}\n\n/**\n *\n * @type {Keys}\n */\nTKeyboardController.k = Keys\n\n/**\n *\n * @type {{}}\n */\nTKeyboardController.status = {}\n\nexport { TKeyboardController }\n","/* eslint-env browser */\n\n/**\n * @class\n * @classdesc TMouseController allow single source of thruth for mouse state checking\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n * @example\n * (1) create a global variable:\n * var keyboard = new TKeyboardController();\n * (2) during main loop:\n * keyboard.update();\n * (3) check state of keys:\n * keyboard.down(\"A\") -- true for one update cycle after key is pressed\n * keyboard.pressed(\"A\") -- true as long as key is being pressed\n * keyboard.up(\"A\") -- true for one update cycle after key is released\n *\n * See TKeyboardController.k object data below for names of keys whose state can be polled\n */\nclass TMouseController {\n\n /**\n * @constructor\n */\n constructor( /*parameters = {}*/ ) {\n\n }\n\n}\n\nexport { TMouseController }\n","//import { DefaultBinarySerializer } from './TBinarySerializer'\n\nclass TBinaryConverter {\n\n constructor( targetType, serializer = null ) {\n// constructor ( targetType, serializer = DefaultBinarySerializer ) {\n\n this.targetCtor = targetType\n this.serializer = serializer\n\n }\n\n /**\n *\n * @param {TBinaryWriter} writer\n * @param instance\n * @param options\n */\n to( writer, instance, options = {} ) { }\n\n /**\n *\n * @param {TBinaryReader} reader\n * @param options\n * @returns {*}\n */\n from( reader, options = {} ) {\n\n return new this.targetCtor()\n\n }\n\n}\n\nexport { TBinaryConverter }\n","import { toEnum } from 'itee-utils'\nimport {\n isNotArrayBuffer,\n isNotBoolean,\n isNotNumber,\n isNull,\n isUndefined\n} from 'itee-validators'\n\n/* eslint-env browser */\n\n/**\n * @typedef {Enum} Endianness\n * @property {Boolean} Little=true - The Little endianess\n * @property {Number} Big=false - The Big endianess\n *\n * @constant\n * @type {Endianness}\n * @description Endianness enum allow semantic usage.\n */\nconst Endianness = /*#__PURE__*/toEnum( {\n Little: true,\n Big: false\n} )\n\n/**\n * @typedef {Enum} Byte\n * @property {Number} One=1 - Octet\n * @property {Number} Two=2 - Doublet\n * @property {Number} Four=4 - Quadlet\n * @property {Number} Height=8 - Octlet\n *\n * @constant\n * @type {Byte}\n * @description Byte allow semantic meaning of quantity of bytes based on power of two.\n */\nconst Byte = /*#__PURE__*/toEnum( {\n One: 1,\n Two: 2,\n Four: 4,\n Eight: 8\n} )\n\n\n/**\n * @class\n * @classdesc TBinaryReader is design to perform fast binary read/write\n *\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nclass TBinaryReader {\n\n /**\n * @constructor\n * @param [parameters]\n * @param parameters.buffer\n * @param parameters.offset\n * @param parameters.length\n * @param parameters.endianness\n */\n constructor( parameters = {} ) {\n\n const _parameters = {\n ...{\n buffer: new ArrayBuffer( 0 ),\n offset: 0,\n length: 0,\n endianness: Endianness.Little\n },\n ...parameters\n }\n\n this.buffer = _parameters.buffer\n // this.offset = _parameters.offset\n // this.length = _parameters.length\n this.endianness = _parameters.endianness\n\n // For bit reading use same approche than byte\n this._bits = {\n buffer: null,\n offset: 0,\n length: 0\n }\n\n this._updateDataView()\n\n }\n\n /**\n *\n * @returns {*}\n */\n get buffer() {\n return this._buffer\n }\n\n set buffer( value ) {\n\n const memberName = 'Buffer'\n const expect = 'Expect an instance of ArrayBuffer.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotArrayBuffer( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._buffer = value\n this._offset = 0\n this._length = value.byteLength\n\n this._updateDataView()\n\n }\n\n /**\n *\n * @returns {*}\n */\n get offset() {\n return this._offset\n }\n\n set offset( value ) {\n\n const memberName = 'Offset'\n const expect = 'Expect a number.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotNumber( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._offset = value\n\n this._updateDataView()\n\n }\n\n get length() {\n return this._length\n }\n\n /**\n *\n * @param value\n */\n set length( value ) {\n\n const memberName = 'Length'\n const expect = 'Expect a number.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotNumber( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._length = value\n\n this._updateDataView()\n\n }\n\n /**\n *\n * @returns {*}\n */\n get endianness() {\n return this._endianness\n }\n\n set endianness( value ) {\n\n const memberName = 'Endianness'\n const expect = 'Expect a boolean.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotBoolean( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._endianness = value\n }\n\n /**\n *\n * @param buffer\n * @param offset\n * @param length\n * @returns {TBinaryReader}\n */\n setBuffer( buffer, offset, length ) {\n\n this.buffer = buffer\n this.offset = offset || 0\n this.length = length || buffer.byteLength\n\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TBinaryReader}\n */\n setOffset( value ) {\n\n this.offset = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TBinaryReader}\n */\n setLength( value ) {\n\n this.length = value\n return this\n\n }\n\n /**\n *\n * @param endianness\n * @returns {TBinaryReader}\n */\n setEndianness( endianness ) {\n\n this.endianness = endianness\n return this\n\n }\n\n /**\n *\n * @param increment\n * @returns {*}\n * @private\n */\n _getAndUpdateOffsetBy( increment ) {\n\n const currentOffset = this._offset\n this._offset += increment\n\n return currentOffset\n\n }\n\n /**\n *\n * @private\n */\n _updateDataView() {\n\n this._dataView = new DataView( this._buffer, this._offset, this._length )\n\n }\n\n /**\n *\n * @returns {boolean}\n */\n isEndOfFile() {\n\n return ( this._offset === this._length )\n\n }\n\n // Bits\n\n _isNullBitBuffer() {\n\n return this._bits.buffer === null\n\n }\n _nextBit() {\n this._bits.offset += 1\n }\n _isEndOfBitBuffer() {\n\n return this._bits.offset === this._bits.length\n\n }\n _isOutOfRangeBitOffset( offset ) {\n return offset > this._bits.length\n }\n _readBit8() {\n this._bits.buffer = this.getUint8()\n this._bits.length = 8\n this._bits.offset = 0\n }\n _readBit16() {\n this._bits.buffer = this.getUint16()\n this._bits.length = 16\n this._bits.offset = 0\n }\n _readBit32() {\n this._bits.buffer = this.getUint32()\n this._bits.length = 32\n this._bits.offset = 0\n }\n _getBitAt( bitOffset ) {\n\n return ( this._bits.buffer & ( 1 << bitOffset ) ) === 0 ? 0 : 1\n\n }\n _resetBits() {\n this._bits.buffer = null\n this._bits.length = 0\n this._bits.offset = 0\n }\n\n skipBitOffsetTo( bitOffset ) {\n //todo is positive bitoffset\n\n // In case we start directly by a skip offset try to determine which kind of data is expected\n if ( this._isNullBitBuffer() ) {\n\n if ( bitOffset <= 8 ) {\n\n this._readBit8()\n\n } else if ( 8 < bitOffset && bitOffset <= 16 ) {\n\n this._readBit16()\n\n } else if ( 16 < bitOffset && bitOffset <= 32 ) {\n\n this._readBit32()\n\n } else {\n\n throw new RangeError( 'You cannot skip more than 32 bits. Please use skipOffsetOf instead !' )\n\n }\n\n } else if ( this._isOutOfRangeBitOffset( bitOffset ) ) { throw new RangeError( 'Bit offset is out of range of the current bits field.' ) }\n\n this._bits.offset = bitOffset\n if ( this._isEndOfBitBuffer() ) {\n this._resetBits()\n }\n\n }\n\n skipBitOffsetOf( nBits ) {\n\n this.skipBitOffsetTo( this._bits.offset + nBits )\n\n }\n\n getBit8( moveNext = true ) {\n\n if ( this._isNullBitBuffer() ) {\n this._readBit8()\n }\n\n const bitValue = this._getBitAt( this._bits.offset )\n\n if ( moveNext ) {\n this._nextBit()\n if ( this._isEndOfBitBuffer() ) {\n this._resetBits()\n }\n }\n\n return bitValue\n\n }\n\n getBits8( numberOfBitToRead, moveNext = true ) {\n\n const currentOffset = this._bits.offset\n\n let bits = 0\n\n // In last turn avoid bits reset if move next is false,\n // else the skipBitOffset will be based on reseted/null bit buffer\n for ( let i = 0 ; i < numberOfBitToRead ; i++ ) {\n if ( i === numberOfBitToRead - 1 ) {\n bits |= ( this.getBit8( moveNext ) << i )\n } else {\n bits |= ( this.getBit8() << i )\n }\n }\n\n if ( !moveNext ) {\n this.skipBitOffsetTo( currentOffset )\n }\n\n return bits\n\n }\n\n getBit16( moveNext = true ) {\n\n if ( this._isNullBitBuffer() ) {\n this._readBit16()\n }\n\n const bitValue = this._getBitAt( this._bits.offset )\n\n if ( moveNext ) {\n this._nextBit()\n if ( this._isEndOfBitBuffer() ) {\n this._resetBits()\n }\n }\n\n return bitValue\n\n }\n\n getBits16( numberOfBitToRead, moveNext = true ) {\n\n const currentOffset = this._bits.offset\n\n let bits = 0\n\n // In last turn avoid bits reset if move next is false,\n // else the skipBitOffset will be based on reseted/null bit buffer\n for ( let i = 0 ; i < numberOfBitToRead ; i++ ) {\n if ( i === numberOfBitToRead - 1 ) {\n bits |= ( this.getBit16( moveNext ) << i )\n } else {\n bits |= ( this.getBit16() << i )\n }\n }\n\n if ( !moveNext ) {\n this.skipBitOffsetTo( currentOffset )\n }\n\n return bits\n\n }\n\n getBit32( moveNext = true ) {\n\n if ( this._isNullBitBuffer() ) {\n this._readBit32()\n }\n\n const bitValue = this._getBitAt( this._bits.offset )\n\n if ( moveNext ) {\n this._nextBit()\n if ( this._isEndOfBitBuffer() ) {\n this._resetBits()\n }\n }\n\n return bitValue\n\n }\n\n getBits32( numberOfBitToRead, moveNext = true ) {\n\n const currentOffset = this._bits.offset\n\n let bits = 0\n\n // In last turn avoid bits reset if move next is false,\n // else the skipBitOffset will be based on reseted/null bit buffer\n for ( let i = 0 ; i < numberOfBitToRead ; i++ ) {\n if ( i === numberOfBitToRead - 1 ) {\n bits |= ( this.getBit32( moveNext ) << i )\n } else {\n bits |= ( this.getBit32() << i )\n }\n }\n\n if ( !moveNext ) {\n this.skipBitOffsetTo( currentOffset )\n }\n\n return bits\n\n }\n\n // Bytes\n\n /**\n *\n * @param offset\n */\n skipOffsetTo( offset ) {\n\n this._offset = offset\n\n }\n\n /**\n *\n * @param nBytes\n */\n skipOffsetOf( nBytes ) {\n\n this._offset += nBytes\n\n }\n\n /**\n *\n * @returns {boolean}\n */\n getBoolean( moveNext = true ) {\n\n return ( ( this.getUint8( moveNext ) & 1 ) === 1 )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getBooleanArray( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getBoolean() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getInt8( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.One ) : this._offset\n return this._dataView.getInt8( offset )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getInt8Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getInt8() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getUint8( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.One ) : this._offset\n return this._dataView.getUint8( offset )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getUint8Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getUint8() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getInt16( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Two ) : this._offset\n return this._dataView.getInt16( offset, this._endianness )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getInt16Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getInt16() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getUint16( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Two ) : this._offset\n return this._dataView.getUint16( offset, this._endianness )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getUint16Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getUint16() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getInt32( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset\n return this._dataView.getInt32( offset, this._endianness )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getInt32Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getInt32() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getUint32( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset\n return this._dataView.getUint32( offset, this._endianness )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getUint32Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getUint32() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getInt64( moveNext = true ) {\n\n // From THREE.FBXLoader\n // JavaScript doesn't support 64-bit integer so attempting to calculate by ourselves.\n // 1 << 32 will return 1 so using multiply operation instead here.\n // There'd be a possibility that this method returns wrong value if the value\n // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n // TODO: safely handle 64-bit integer\n\n let low = null\n let high = null\n\n if ( this._endianness === Endianness.Little ) {\n\n if ( moveNext ) {\n low = this.getUint32()\n high = this.getUint32()\n } else {\n const currentOffset = this._offset\n low = this.getUint32()\n high = this.getUint32()\n this.skipOffsetTo( currentOffset )\n }\n\n } else {\n\n if ( moveNext ) {\n high = this.getUint32()\n low = this.getUint32()\n } else {\n const currentOffset = this._offset\n high = this.getUint32()\n low = this.getUint32()\n this.skipOffsetTo( currentOffset )\n }\n\n }\n\n // calculate negative value\n if ( high & 0x80000000 ) {\n\n high = ~high & 0xFFFFFFFF\n low = ~low & 0xFFFFFFFF\n\n if ( low === 0xFFFFFFFF ) {\n high = ( high + 1 ) & 0xFFFFFFFF\n }\n\n low = ( low + 1 ) & 0xFFFFFFFF\n\n return -( high * 0x100000000 + low )\n\n }\n\n return high * 0x100000000 + low\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getInt64Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getInt64() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getUint64( moveNext = true ) {\n // Note: see getInt64() comment\n\n let low = null\n let high = null\n\n if ( this._endianness === Endianness.Little ) {\n\n if ( moveNext ) {\n low = this.getUint32()\n high = this.getUint32()\n } else {\n const currentOffset = this._offset\n low = this.getUint32()\n high = this.getUint32()\n this.skipOffsetTo( currentOffset )\n }\n\n } else {\n\n if ( moveNext ) {\n high = this.getUint32()\n low = this.getUint32()\n } else {\n const currentOffset = this._offset\n high = this.getUint32()\n low = this.getUint32()\n this.skipOffsetTo( currentOffset )\n }\n\n }\n\n return high * 0x100000000 + low\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getUint64Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getUint64() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {number}\n */\n getFloat32( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset\n return this._dataView.getFloat32( offset, this._endianness )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getFloat32Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getFloat32() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @return {number}\n */\n getFloat64( moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Eight ) : this._offset\n return this._dataView.getFloat64( offset, this._endianness )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @returns {Array}\n */\n getFloat64Array( length, moveNext = true ) {\n\n const currentOffset = this._offset\n const array = []\n\n for ( let i = 0 ; i < length ; i++ ) {\n\n array.push( this.getFloat64() )\n\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return array\n\n }\n\n /**\n *\n * @returns {string}\n */\n getChar( moveNext = true ) {\n\n return String.fromCharCode( this.getUint8( moveNext ) )\n\n }\n\n /**\n *\n * @param length\n * @param moveNext\n * @return {string}\n */\n getString( length, moveNext = true ) {\n\n const currentOffset = this._offset\n let string = ''\n\n for ( let i = 0 ; i < length ; i++ ) {\n string += String.fromCharCode( this.getUint8() )\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n return string\n\n }\n\n /**\n *\n * @param size\n * @returns {ArrayBuffer}\n */\n getArrayBuffer( size ) {\n\n const offset = this._getAndUpdateOffsetBy( size )\n return this._dataView.buffer.slice( offset, offset + size )\n\n }\n\n}\n\nexport {\n TBinaryReader,\n Endianness,\n Byte\n}\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\n// import { DefaultBinarySerializer } from '../TBinarySerializer'\n\nclass ArrayBinaryConverter extends TBinaryConverter {\n constructor( serializer ) { super( Array, serializer ) }\n\n to( writer, instance, options = {} ) {\n\n const numberOfElements = instance.length\n writer.setUint32( numberOfElements )\n for ( let instanceElement of instance ) {\n // DefaultBinarySerializer._serialize( instanceElement )\n this.serializer._serialize( instanceElement )\n }\n\n }\n from( reader, options = {} ) {\n\n const numberOfElements = reader.getUint32()\n const result = []\n for ( let i = 0 ; i < numberOfElements ; i++ ) {\n // const element = DefaultBinarySerializer._deserialize()\n const element = this.serializer._deserialize()\n result.push( element )\n }\n\n return result\n\n }\n}\n\nexport { ArrayBinaryConverter }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nimport { TBinaryConverter } from '../TBinaryConverter.js'\n\nclass BooleanBinaryConverter extends TBinaryConverter {\n\n constructor( serializer ) { super( Boolean, serializer ) }\n\n to( writer, instance, options = {} ) {\n\n writer.setBoolean( instance )\n\n }\n\n from( reader, options = {} ) {\n\n return reader.getBoolean()\n\n }\n}\n\nexport { BooleanBinaryConverter }\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\n// import { DefaultBinarySerializer } from '../TBinarySerializer'\n\nclass DateBinaryConverter extends TBinaryConverter {\n constructor( serializer ) { super( Date, serializer ) }\n\n to( writer, instance, options = {} ) {\n const utc = instance.toUTCString()\n this.serializer._serialize( utc )\n// DefaultBinarySerializer._serialize( utc )\n }\n\n from( reader, options = {} ) {\n const utcString = this.serializer._deserialize()\n// const utcString = DefaultBinarySerializer._deserialize()\n return new Date( utcString )\n }\n}\n\nexport { DateBinaryConverter }\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\nclass NullBinaryConverter extends TBinaryConverter {\n constructor( serializer ) { super( null, serializer ) }\n\n to( writer, instance, options = {} ) {}\n\n from( reader, options = {} ) {\n return null\n }\n}\n\nexport { NullBinaryConverter }\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\nclass NumberBinaryConverter extends TBinaryConverter {\n constructor( serializer ) { super( Number, serializer ) }\n\n to( writer, instance, options = {} ) {\n writer.setFloat64( instance )\n }\n\n from( reader, options = {} ) {\n return reader.getFloat64()\n }\n}\n\nexport { NumberBinaryConverter }\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\n// import { DefaultBinarySerializer } from '../TBinarySerializer'\n\nclass ObjectBinaryConverter extends TBinaryConverter {\n constructor( subType, serializer ) { super( subType || Object, serializer ) }\n\n to( writer, instance, options = {} ) {\n\n // Keep only writable properties from instance\n // Read-only property are considered as it ! And won't be serialized.\n const descriptors = Object.getOwnPropertyDescriptors( instance )\n const writablePropertyEntries = Object.values( descriptors )\n .filter( ( value ) => value.writable && value.enumerable )\n\n // Store number of writable properties of object for future deserialization loop\n writer.setUint8( writablePropertyEntries.length )\n\n for ( let [ key, property ] of writablePropertyEntries ) {\n // console.log( key, property.value )\n\n writer.setUint32( key.length )\n writer.setString( key )\n\n // target private method to allow buffer clipping on serialization\n this.serializer._serialize( property.value )\n// DefaultBinarySerializer._serialize( property.value )\n }\n\n // const instanceKeys = Object.keys( instance )\n // console.log( instanceKeys )\n //\n // const instanceEntries = Object.entries( instance )\n // console.log( instanceEntries )\n //\n // const descriptors = Object.getOwnPropertyDescriptors( instance )\n // for ( let descriptor in descriptors ) {\n // if ( !instanceKeys.includes( descriptor ) ) { continue }\n //\n //\n // if ( !descriptor.writable ) { continue }\n //\n //\n // }\n //\n // const descKeys = Object.keys( descriptors )\n // console.log( descKeys )\n //\n // const descEntries = Object.entries( descriptors )\n // console.log( descEntries )\n //\n // const filteredVals = Object.values( descriptors )\n // .filter( value => value.writable )\n // console.log( filteredVals )\n //\n // const filtered = descEntries.filter( ( [ key, value ] ) => value.writable && value.enumerable )\n // console.log( filtered )\n\n // Store number of object keys for deserialization loop\n // const keys = Object.keys( instance )\n // writer.setUint8( keys.length )\n //\n // for ( let key of keys ) {\n // if ( !instance.hasOwnProperty( key ) ) { continue }\n //\n // writer.setUint32( key.length )\n // writer.setString( key )\n //\n // TBinarySerializer.serialize( instance[ key ] )\n // }\n\n }\n\n from( reader, options = {} ) {\n const instance = super.from( reader, options )\n\n\n // const descriptors = Object.getOwnPropertyDescriptors( instance )\n // const result = {}\n const numberOfProperties = reader.getUint8()\n for ( let i = 0 ; i < numberOfProperties ; i++ ) {\n const keyLength = reader.getUint32()\n const keyName = reader.getString( keyLength )\n\n instance[ keyName ] = this.serializer._deserialize()\n// instance[ keyName ] = DefaultBinarySerializer._deserialize()\n //\n // const descriptor = descriptors[ keyName ]\n //\n // if ( descriptor.writable ) {\n // instance[ keyName ] = TBinarySerializer._deserialize()\n // } else {\n // var deseri = TBinarySerializer._deserialize()\n // }\n }\n return instance\n\n }\n}\n\nexport { ObjectBinaryConverter }\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\nclass RegExBinaryConverter extends TBinaryConverter {\n constructor( serializer ) { super( RegExp, serializer ) }\n\n from( reader, options = {} ) {\n return new RegExp()\n }\n}\n\nexport { RegExBinaryConverter }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\nimport { TBinaryConverter } from '../TBinaryConverter.js'\n\nclass StringBinaryConverter extends TBinaryConverter {\n\n constructor( serializer ) { super( String, serializer ) }\n\n to( writer, instance, options = {} ) {\n\n writer.setUint32( instance.length )\n writer.setString( instance )\n\n }\n\n from( reader, options = {} ) {\n\n const stringLength = reader.getUint32()\n return reader.getString( stringLength )\n\n }\n}\n\nexport { StringBinaryConverter }\n","import { TBinaryConverter } from '../TBinaryConverter.js'\n\nclass UndefinedBinaryConverter extends TBinaryConverter {\n constructor( serializer ) { super( null, serializer ) }\n\n to( writer, instance, options = {} ) {}\n\n from( reader, options = {} ) {\n return undefined\n }\n}\n\nexport { UndefinedBinaryConverter }\n","import {\n isNotArrayBuffer,\n isNotBoolean,\n isNotNumber,\n isNull,\n isUndefined\n} from 'itee-validators'\nimport {\n Byte,\n Endianness\n} from './TBinaryReader.js'\n\n/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\n\nclass TBinaryWriter {\n\n constructor( {\n buffer = new ArrayBuffer( 1024 ),\n endianness = Endianness.Little\n } = {} ) {\n\n this.buffer = buffer\n this.endianness = endianness\n\n // Todo: For bit writing use same approche than byte\n // this._bits = {\n // buffer: null,\n // offset: 0,\n // length: 0\n // }\n\n this._updateDataView()\n }\n /**\n *\n * @returns {*}\n */\n get buffer() {\n return this._buffer\n }\n set buffer( value ) {\n\n const memberName = 'Buffer'\n const expect = 'Expect an instance of ArrayBuffer.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotArrayBuffer( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._buffer = value\n this._offset = 0\n this._length = value.byteLength\n\n this._updateDataView()\n\n }\n /**\n *\n * @returns {*}\n */\n get offset() {\n return this._offset\n }\n set offset( value ) {\n\n const memberName = 'Offset'\n const expect = 'Expect a number.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotNumber( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._offset = value\n\n this._updateDataView()\n\n }\n /**\n *\n * @param value\n */\n get length() {\n return this._length\n }\n set length( value ) {\n\n const memberName = 'Length'\n const expect = 'Expect a number.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotNumber( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._length = value\n\n this._updateDataView()\n\n }\n /**\n *\n * @returns {*}\n */\n get endianness() {\n return this._endianness\n }\n set endianness( value ) {\n\n const memberName = 'Endianness'\n const expect = 'Expect a boolean.'\n\n if ( isNull( value ) ) { throw new TypeError( `${ memberName } cannot be null ! ${ expect }` ) }\n if ( isUndefined( value ) ) { throw new TypeError( `${ memberName } cannot be undefined ! ${ expect }` ) }\n if ( isNotBoolean( value ) ) { throw new TypeError( `${ memberName } cannot be an instance of ${ value.constructor.name } ! ${ expect }` ) }\n\n this._endianness = value\n }\n /**\n *\n * @param buffer\n * @param offset\n * @param length\n * @returns {TBinaryReader}\n */\n setBuffer( buffer, offset, length ) {\n\n this.buffer = buffer\n this.offset = offset || 0\n this.length = length || buffer.byteLength\n\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TBinaryReader}\n */\n setOffset( value ) {\n\n this.offset = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TBinaryReader}\n */\n setLength( value ) {\n\n this.length = value\n return this\n\n }\n\n /**\n *\n * @param endianess\n * @returns {TBinaryReader}\n */\n setEndianess( endianess ) {\n\n this.endianness = endianess\n return this\n\n }\n\n /**\n *\n * @param increment\n * @returns {*}\n * @private\n */\n _getAndUpdateOffsetBy( increment ) {\n\n const currentOffset = this._offset\n this._offset += increment\n\n // Manage buffer overflow, and auto-extend if needed\n const bufferByteLength = this._buffer.byteLength\n if ( this._offset >= bufferByteLength ) {\n\n // Create new buffer and view with extended size\n const newBuffer = new ArrayBuffer( bufferByteLength + 1024 )\n const newDataView = new DataView( newBuffer, 0, newBuffer.byteLength )\n\n // Copy data from current to new\n for ( let i = 0 ; i < bufferByteLength ; i++ ) {\n newDataView.setUint8( i, this._dataView.getUint8( i ) )\n }\n\n // Update local\n this._buffer = newBuffer\n this._dataView = newDataView\n\n }\n\n return currentOffset\n\n }\n\n /**\n *\n * @private\n */\n _updateDataView() {\n\n this._dataView = new DataView( this._buffer, this._offset, this._length )\n\n }\n\n /**\n *\n * @returns {boolean}\n */\n isEndOfFile() {\n\n return ( this._offset === this._length )\n\n }\n\n _iterArray( values, func, moveNext ) {\n\n const currentOffset = this._offset\n\n for ( let value of values ) {\n func( value )\n }\n\n if ( !moveNext ) {\n this._offset = currentOffset\n }\n\n }\n\n // Bytes\n\n /**\n *\n * @param offset\n */\n skipOffsetTo( offset ) {\n\n this._offset = offset\n\n }\n\n /**\n *\n * @param nBytes\n */\n skipOffsetOf( nBytes ) {\n\n this._offset += nBytes\n\n }\n\n setBoolean( value, moveNext = true ) {\n\n this.setUint8( ( ( value & 1 ) === 1 ), moveNext )\n\n }\n\n setBooleanArray( values, moveNext = true ) {\n\n this._iterArray( values, this.setBoolean.bind( this ), moveNext )\n\n }\n\n setInt8( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.One ) : this._offset\n this._dataView.setInt8( offset, value )\n\n }\n\n setInt8Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setInt8.bind( this ), moveNext )\n\n }\n\n setUint8( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.One ) : this._offset\n this._dataView.setUint8( offset, value )\n\n }\n\n setUint8Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setUint8.bind( this ), moveNext )\n\n }\n\n setInt16( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Two ) : this._offset\n this._dataView.setInt16( offset, value, this._endianness )\n\n }\n\n setInt16Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setInt16.bind( this ), moveNext )\n\n }\n\n setUint16( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Two ) : this._offset\n this._dataView.setUint16( offset, value, this._endianness )\n\n }\n\n setUint16Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setUint16.bind( this ), moveNext )\n\n }\n\n setInt32( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset\n this._dataView.setInt32( offset, value, this._endianness )\n\n }\n\n setInt32Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setInt32.bind( this ), moveNext )\n\n }\n\n setUint32( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset\n this._dataView.setUint32( offset, value, this._endianness )\n\n }\n\n setUint32Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setUint32.bind( this ), moveNext )\n\n }\n\n setInt64( /*value, moveNext = true*/ ) {\n\n // From THREE.FBXLoader\n // JavaScript doesn't support 64-bit integer so attempting to calculate by ourselves.\n // 1 << 32 will return 1 so using multiply operation instead here.\n // There'd be a possibility that this method returns wrong value if the value\n // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n // TODO: safely handle 64-bit integer using bigint ?\n\n throw new Error( 'Not implemented, sorry... any help is welcome !' )\n }\n\n setInt64Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setInt64.bind( this ), moveNext )\n\n }\n\n setUint64( /*value, moveNext = true*/ ) {\n // Note: see setInt64() comment\n throw new Error( 'Not implemented, sorry... any help is welcome !' )\n }\n\n setUint64Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setUint64.bind( this ), moveNext )\n\n }\n\n setFloat32( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Four ) : this._offset\n this._dataView.setFloat32( offset, value, this._endianness )\n\n }\n\n setFloat32Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setFloat32.bind( this ), moveNext )\n\n }\n\n setFloat64( value, moveNext = true ) {\n\n const offset = ( moveNext ) ? this._getAndUpdateOffsetBy( Byte.Eight ) : this._offset\n this._dataView.setFloat64( offset, value, this._endianness )\n\n }\n\n setFloat64Array( values, moveNext = true ) {\n\n this._iterArray( values, this.setFloat64.bind( this ), moveNext )\n\n }\n\n setChar( value, moveNext = true ) {\n\n this.setUint8( value.charCodeAt( 0 ), moveNext )\n\n }\n\n setString( values, moveNext = true ) {\n\n this._iterArray( values, this.setChar.bind( this ), moveNext )\n\n }\n\n // setArrayBuffer ( value, moveNext = true ) {\n //\n // const offset = this._getAndUpdateOffsetBy( size )\n // this._dataView.buffer.slice( offset, offset + size )\n //\n // }\n\n}\n\nexport { TBinaryWriter }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\n\nimport {\n isArray,\n isBoolean,\n isNotDefined,\n isNull,\n isNumber,\n isObject,\n isString,\n isUndefined\n} from 'itee-validators'\nimport { ArrayBinaryConverter } from './converters/ArrayBinaryConverter.js'\nimport { BooleanBinaryConverter } from './converters/BooleanBinaryConverter.js'\nimport { DateBinaryConverter } from './converters/DateBinaryConverter.js'\nimport { NullBinaryConverter } from './converters/NullBinaryConverter.js'\nimport { NumberBinaryConverter } from './converters/NumberBinaryConverter.js'\nimport { ObjectBinaryConverter } from './converters/ObjectBinaryConverter.js'\nimport { RegExBinaryConverter } from './converters/RegExBinaryConverter.js'\nimport { StringBinaryConverter } from './converters/StringBinaryConverter.js'\nimport { UndefinedBinaryConverter } from './converters/UndefinedBinaryConverter.js'\nimport { TBinaryReader } from './TBinaryReader.js'\nimport { TBinaryWriter } from './TBinaryWriter.js'\n\n//const BinaryType = toEnum( {\n// Null: 0,\n// Boolean: 1,\n// Number: 2,\n// String: 3,\n// Date: 4,\n// RegExp: 5,\n// Object: 6,\n// Array: 7,\n// UserDefined: 8\n//} )\n\nconst BinaryType = {\n Null: 0,\n Undefined: 1,\n Boolean: 2,\n Number: 3,\n String: 4,\n Date: 5,\n RegEx: 6,\n Array: 7,\n Object: 8,\n UserDefined: 255\n}\n\nfunction isDate( value ) {\n if ( isNotDefined( value ) ) {\n return false\n }\n\n switch ( typeof value ) {\n case 'number':\n return true\n case 'string':\n return !isNaN( Date.parse( value ) )\n case 'object':\n if ( value instanceof Date ) {\n return !isNaN( value.getTime() )\n } else {\n return false\n }\n default:\n return false\n }\n}\n\nfunction isRegEx( value ) {\n if ( isNotDefined( value ) ) {\n return false\n }\n\n return value instanceof RegExp\n}\n\nclass TBinarySerializer {\n\n constructor() {\n\n this.reader = new TBinaryReader()\n this.writer = new TBinaryWriter()\n\n this.converters = new Map( [\n [ BinaryType.Null, new NullBinaryConverter( this ) ],\n [ BinaryType.Undefined, new UndefinedBinaryConverter( this ) ],\n [ BinaryType.Boolean, new BooleanBinaryConverter( this ) ],\n [ BinaryType.Number, new NumberBinaryConverter( this ) ],\n [ BinaryType.String, new StringBinaryConverter( this ) ],\n [ BinaryType.Date, new DateBinaryConverter( this ) ],\n [ BinaryType.RegEx, new RegExBinaryConverter( this ) ],\n [ BinaryType.Array, new ArrayBinaryConverter( this ) ],\n [ BinaryType.Object, new ObjectBinaryConverter( null, this ) ],\n [ BinaryType.UserDefined, new Map( [] ) ]\n ] )\n\n // this.converters.set( BinaryType.Boolean, new BooleanBinaryConverter() )\n // this.converters.set( 'String', new StringBinaryConverter() )\n }\n\n addConverter( converter ) {\n\n converter.serializer = this\n\n const userDefinedConverters = this.converters.get( BinaryType.UserDefined )\n userDefinedConverters.set( converter.targetCtor.name, converter )\n\n }\n removeConverter( converter ) {\n const userDefinedConverters = this.converters.get( BinaryType.UserDefined )\n userDefinedConverters.remove( converter.targetCtor.name )\n }\n\n serialize( instance, options = {} ) {\n\n // Reset writer buffer\n this.writer.buffer = new ArrayBuffer( 1024 )\n const buffer = this._serialize( instance )\n\n// // Clip buffer to current offset\n// const writerOffset = this.writer.offset\n// console.log( writerOffset )\n// const clippedBuffer = buffer.slice( 0, writerOffset )\n//\n// return clippedBuffer\n//\n\n // Clip buffer to current writer offset\n return buffer.slice( 0, this.writer.offset )\n }\n _serialize( instance ) {\n const binaryType = this._getBinaryTypeOf( instance )\n\n // Prepend internal binary type for deserialization process to be able to target correct converter\n this.writer.setUint8( binaryType )\n\n // Get local converters and in case where binary type is userdefined, search in specific converter or use default (unoptimized)\n let converter = this.converters.get( binaryType )\n if ( binaryType === BinaryType.UserDefined ) {\n\n // Prepend class name for deserialization (like BinaryType for primitives)\n const ctor = instance.constructor\n const ctorName = ctor.name\n this.writer.setUint8( ctorName.length )\n this.writer.setString( ctorName )\n\n if ( !converter.has( ctorName ) ) {\n 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.` )\n converter.set( ctorName, new ObjectBinaryConverter( ctor, this ) )\n }\n converter = converter.get( ctorName )\n }\n\n converter.to( this.writer, instance )\n\n return this.writer.buffer\n }\n _getBinaryTypeOf( instance ) {\n let binaryType\n if ( isNull( instance ) ) {\n binaryType = BinaryType.Null\n } else if ( isUndefined( instance ) ) {\n binaryType = BinaryType.Undefined\n } else if ( isBoolean( instance ) ) {\n binaryType = BinaryType.Boolean\n } else if ( isNumber( instance ) ) {\n binaryType = BinaryType.Number\n } else if ( isString( instance ) ) {\n binaryType = BinaryType.String\n } else if ( isDate( instance ) ) {\n binaryType = BinaryType.Date\n } else if ( isRegEx( instance ) ) {\n binaryType = BinaryType.RegEx\n } else if ( isArray( instance ) ) {\n binaryType = BinaryType.Array\n } else if ( isObject( instance ) ) { // Todo: care it should be isPlainObject !!!\n binaryType = BinaryType.Object\n } else { // UserDefined check in registered converters\n binaryType = BinaryType.UserDefined\n }\n\n return binaryType\n }\n\n deserialize( buffer ) {\n if ( isNotDefined( buffer ) || buffer.length === 0 ) { return }\n\n // Reset writer buffer\n this.reader.setBuffer( buffer, 0, buffer.length )\n\n return this._deserialize()\n\n }\n _deserialize() {\n\n const binaryType = this.reader.getUint8()\n\n let converter = this.converters.get( binaryType )\n if ( binaryType === BinaryType.UserDefined ) {\n\n const ctorNameLength = this.reader.getUint8()\n const ctorName = this.reader.getString( ctorNameLength )\n\n // var ctor = this._getCtorOf( ctorName )\n\n converter = converter.has( ctorName )\n ? converter.get( ctorName )\n : null //converter.get( null )\n\n // Get specific or create default converter for userdefined type\n // const ctorNameLength = this.reader.getUint8()\n // const ctorName = this.reader.getString( ctorNameLength )\n //\n // if ( !converter.has( ctorName ) ) {\n // 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\n // converters.` ) converter.set( ctorName, new ObjectBinaryConverter( ctor ) ) } converter = converter.get( ctorName )\n }\n\n if ( !converter ) {\n throw new TypeError( `Unable to found appropriate converter for deserialize type: ${ binaryType }` )\n }\n\n return converter.from( this.reader )\n\n }\n // _getCtorOf ( typeName ) {\n // var stringToFunction = function ( str ) {\n // var arr = str.split( '.' )\n //\n // var fn = ( window || this )\n // for ( var i = 0, len = arr.length ; i < len ; i++ ) {\n // fn = fn[ arr[ i ] ]\n // }\n //\n // if ( typeof fn !== 'function' ) {\n // throw new Error( 'function not found' )\n // }\n //\n // return fn\n // }\n // }\n\n}\n\nconst binarySerializerInstance = /*#__PURE__*/new TBinarySerializer()\n\nexport {\n isDate,\n isRegEx,\n binarySerializerInstance as DefaultBinarySerializer,\n TBinarySerializer,\n BinaryType\n}\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n *\n * @class TDataBaseManager\n * @classdesc The base class of database managers. Give the basic interface about database call.\n *\n * @requires {@link HttpVerb}\n * @requires {@link ResponseType}\n * @requires {@link HttpStatusCode}\n * @requires {@link TOrchestrator}\n * @requires {@link TStore}\n *\n * @example Todo\n *\n */\n\n/* eslint-env browser */\n\nimport {\n DefaultLogger,\n TLogger\n} from 'itee-core'\nimport { toEnum } from 'itee-utils'\nimport {\n isArray,\n isArrayOfSingleElement,\n isBlankString,\n isDefined,\n isEmptyObject,\n isEmptyString,\n isNotBlankString,\n isNotDefined,\n isNotEmptyArray,\n isNotEmptyObject,\n isNotEmptyString,\n isNotNumber,\n isNotObject,\n isNotString,\n isNull,\n isNumberNegative,\n isNumberPositive,\n isObject,\n isString,\n isUndefined,\n isZero\n} from 'itee-validators'\nimport {\n HttpStatusCode,\n HttpVerb,\n ResponseType\n} from '../cores/TConstants.js'\nimport { TStore } from '../cores/TStore.js'\n\n\n/**\n * @deprecated\n */\nclass IdGenerator {\n\n constructor() {\n this._id = 0\n }\n\n get id() {\n this._id += 1\n return this._id\n }\n\n}\n\nconst Generate = new IdGenerator()\n\n/**\n *\n * @type {ReadonlyArray<unknown>}\n */\nconst RequestType = /*#__PURE__*/toEnum( {\n CreateOne: 0,\n CreateMany: 1,\n ReadOne: 2,\n ReadMany: 3,\n ReadWhere: 4,\n ReadAll: 5,\n UpdateOne: 6,\n UpdateMany: 7,\n UpdateWhere: 8,\n UpdateAll: 9,\n DeleteOne: 10,\n DeleteMany: 11,\n DeleteWhere: 12,\n DeleteAll: 13\n} )\n\n/**\n * @class\n */\nclass TDataBaseManager {\n\n /**\n *\n * @param parameters\n */\n constructor( parameters = {} ) {\n\n const _parameters = {\n ...{\n basePath: '/',\n responseType: ResponseType.Json,\n bunchSize: 500,\n requestAggregationTime: 200,\n requestsConcurrency: 6,\n logger: DefaultLogger\n }, ...parameters\n }\n\n this.basePath = _parameters.basePath\n this.responseType = _parameters.responseType\n this.bunchSize = _parameters.bunchSize\n this.requestAggregationTime = _parameters.requestAggregationTime\n this.requestsConcurrency = _parameters.requestsConcurrency\n this.logger = _parameters.logger\n\n this._cache = new TStore()\n this._waitingQueue = []\n this._aggregateQueue = []\n this._requestQueue = []\n this._processQueue = []\n this._aggregationTimeoutId = null\n\n this._idToRequest = []\n\n }\n /**\n *\n * @returns {number}\n */\n static get requestId() {\n TDataBaseManager._requestId++\n return TDataBaseManager._requestId\n }\n /**\n *\n * @returns {*}\n */\n get basePath() {\n return this._basePath\n }\n\n set basePath( value ) {\n\n if ( isNull( value ) ) { throw new TypeError( 'Base path cannot be null ! Expect a non empty string.' ) }\n if ( isUndefined( value ) ) { throw new TypeError( 'Base path cannot be undefined ! Expect a non empty string.' ) }\n if ( isNotString( value ) ) { throw new TypeError( `Base path cannot be an instance of ${ value.constructor.name } ! Expect a non empty string.` ) }\n if ( isEmptyString( value ) ) { throw new TypeError( 'Base path cannot be empty ! Expect a non empty string.' ) }\n if ( isBlankString( value ) ) { throw new TypeError( 'Base path cannot contain only whitespace ! Expect a non empty string.' ) }\n\n this._basePath = value\n\n }\n\n /**\n *\n * @returns {*}\n */\n get responseType() {\n return this._responseType\n }\n\n set responseType( value ) {\n\n if ( isNull( value ) ) { throw new Error( 'TDataBaseManager: responseType cannot be null !' ) }\n if ( isNull( value ) ) { throw new TypeError( 'Response type cannot be null ! Expect a non empty string.' ) }\n if ( isUndefined( value ) ) { throw new TypeError( 'Response type cannot be undefined ! Expect a non empty string.' ) }\n // if ( !( value instanceof ResponseType ) ) { throw new TypeError( `Response type cannot be an instance of ${value.constructor.name} ! Expect a value from ResponseType enum.` ) }\n\n this._responseType = value\n\n }\n\n /**\n *\n * @returns {*}\n */\n get bunchSize() {\n return this._bunchSize\n }\n\n set bunchSize( value ) {\n\n if ( isNull( value ) ) { throw new TypeError( 'Bunch size cannot be null ! Expect a positive number.' ) }\n if ( isUndefined( value ) ) { throw new TypeError( 'Bunch size cannot be undefined ! Expect a positive number.' ) }\n if ( isNotNumber( value ) ) { throw new TypeError( `Bunch size cannot be an instance of ${ value.constructor.name } ! Expect a positive number.` ) }\n if ( !isNumberPositive( value ) ) { throw new TypeError( `Bunch size cannot be lower or equal to zero ! Expect a positive number.` ) }\n\n this._bunchSize = value\n\n }\n\n /**\n *\n * @returns {*}\n */\n get requestAggregationTime() {\n return this._requestAggregationTime\n }\n\n set requestAggregationTime( value ) {\n\n if ( isNull( value ) ) {\n throw new TypeError( 'Requests aggregation time cannot be null ! Expect a positive number.' )\n }\n\n if ( isUndefined( value ) ) {\n throw new TypeError( 'Requests aggregation time cannot be undefined ! Expect a positive number.' )\n }\n\n if ( isNotNumber( value ) ) {\n throw new TypeError( `Requests aggregation time cannot be an instance of ${ value.constructor.name } ! Expect a positive number.` )\n }\n\n if ( isNumberNegative( value ) ) {\n throw new TypeError( 'Requests aggregation time cannot be lower or equal to zero ! Expect a positive number.' )\n }\n\n this._requestAggregationTime = value\n\n }\n\n /**\n *\n * @returns {*}\n */\n get requestsConcurrency() {\n return this._requestsConcurrency\n }\n\n set requestsConcurrency( value ) {\n\n if ( isNull( value ) ) {\n throw new TypeError( 'Minimum of simultaneous request cannot be null ! Expect a positive number.' )\n }\n\n if ( isUndefined( value ) ) {\n throw new TypeError( 'Minimum of simultaneous request cannot be undefined ! Expect a positive number.' )\n }\n\n if ( isNotNumber( value ) ) {\n throw new TypeError( `Minimum of simultaneous request cannot be an instance of ${ value.constructor.name } ! Expect a positive number.` )\n }\n\n if ( isZero( value ) || isNumberNegative( value ) ) {\n throw new TypeError( 'Minimum of simultaneous request cannot be lower or equal to zero ! Expect a positive number.' )\n }\n\n this._requestsConcurrency = value\n\n }\n\n /**\n *\n * @returns {TLogger}\n */\n get logger() {\n return this._logger\n }\n\n set logger( value ) {\n\n if ( isNull( value ) ) { throw new TypeError( 'Progress manager cannot be null ! Expect an instance of TProgressManager.' ) }\n if ( isUndefined( value ) ) { throw new TypeError( 'Progress manager cannot be undefined ! Expect an instance of TProgressManager.' ) }\n if ( !( value instanceof TLogger ) ) { throw new TypeError( `Progress manager cannot be an instance of ${ value.constructor.name } ! Expect an instance of TProgressManager.` ) }\n\n this._logger = value\n\n }\n\n /**\n *\n * @param value\n * @returns {TDataBaseManager}\n */\n setBasePath( value ) {\n\n this.basePath = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TDataBaseManager}\n */\n setResponseType( value ) {\n\n this.responseType = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TDataBaseManager}\n */\n setBunchSize( value ) {\n\n this.bunchSize = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TDataBaseManager}\n */\n setRequestAggregationTime( value ) {\n\n this.requestAggregationTime = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TDataBaseManager}\n */\n setRequestsConcurrency( value ) {\n\n this.requestsConcurrency = value\n return this\n\n }\n\n /**\n *\n * @param value\n * @returns {TDataBaseManager}\n */\n setLogger( value ) {\n\n this.logger = value\n return this\n\n }\n\n /**\n *\n */\n aggregateQueue() {\n\n clearTimeout( this._aggregationTimeoutId )\n\n this._aggregationTimeoutId = setTimeout( () => {\n\n const datasToRequest = this._idToRequest\n let idBunch = []\n for ( let idIndex = datasToRequest.length - 1 ; idIndex >= 0 ; idIndex-- ) {\n\n idBunch.push( datasToRequest.pop() )\n\n if ( idBunch.length === this._bunchSize || idIndex === 0 ) {\n\n this._requestQueue.push( {\n _id: `readMany_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.ReadMany,\n method: HttpVerb.Read.value,\n url: this._basePath,\n data: {\n ids: idBunch\n },\n responseType: this._responseType\n } )\n\n idBunch = []\n }\n\n }\n\n this.processQueue.call( this )\n\n }, this._requestAggregationTime )\n\n }\n\n /**\n *\n */\n processQueue() {\n\n while ( this._requestQueue.length > 0 && this._processQueue.length < this._requestsConcurrency ) {\n\n const requestSkull = this._requestQueue.pop()\n this._processQueue.push( requestSkull )\n\n const request = new XMLHttpRequest()\n request.onloadstart = _onLoadStart.bind( this )\n request.onload = this._onLoad.bind(\n this,\n requestSkull,\n this._onEnd.bind( this, requestSkull, requestSkull.onLoad ),\n this._onProgress.bind( this, requestSkull.onProgress ),\n this._onError.bind( this, requestSkull, requestSkull.onError )\n )\n request.onloadend = _onLoadEnd.bind( this )\n request.onprogress = this._onProgress.bind( this, requestSkull.onProgress )\n request.onreadystatechange = _onReadyStateChange.bind( this )\n request.onabort = _onAbort.bind( this )\n request.onerror = this._onError.bind( this, requestSkull, requestSkull.onError )\n request.ontimeout = _onTimeout.bind( this )\n request.open( requestSkull.method, requestSkull.url, true )\n request.setRequestHeader( 'Content-Type', 'application/json' )\n request.setRequestHeader( 'Accept', 'application/json' )\n request.responseType = requestSkull.responseType.value\n\n const dataToSend = ( requestSkull.data && requestSkull.responseType === ResponseType.Json ) ? JSON.stringify( requestSkull.data ) : requestSkull.data\n request.send( dataToSend )\n\n }\n\n function _onLoadStart( loadStartEvent ) { this.logger.progress( loadStartEvent ) }\n\n function _onLoadEnd( loadEndEvent ) { this.logger.progress( loadEndEvent ) }\n\n function _onReadyStateChange( readyStateEvent ) { this.logger.debug( readyStateEvent ) }\n\n function _onAbort( abortEvent ) { this.logger.error( abortEvent ) }\n\n function _onTimeout( timeoutEvent ) { this.logger.error( timeoutEvent ) }\n\n }\n\n // Publics\n /**\n * The create method allow to create a new ressource on the server. Providing a single object that match a database schema, or an array of them.\n *\n * @param {object|array.<object>} data - The data to send for create new objects.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n create( data, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n if ( isArray( data ) && isNotEmptyArray( data ) ) {\n\n if ( isArrayOfSingleElement( data ) ) {\n\n this._createOne( data[ 0 ], onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._createMany( data, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else if ( isObject( data ) && isNotEmptyObject( data ) ) {\n\n this._createOne( data, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n onErrorCallback( 'TDataBaseManager.create: Invalid data type, expect object or array of objects.' )\n\n }\n\n }\n\n /**\n * The read method allow to retrieve data from the server, using a single id or an array of them.\n *\n * @param {string|array.<string>} condition - The ids of objects to retrieve.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n read( condition, projection, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n if ( isString( condition ) && isNotEmptyString( condition ) && isNotBlankString( condition ) ) {\n\n this._readOne( condition, projection, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else if ( isArray( condition ) && isNotEmptyArray( condition ) ) {\n\n if ( isArrayOfSingleElement( condition ) ) {\n\n this._readOne( condition[ 0 ], projection, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._readMany( condition, projection, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else if ( isObject( condition ) ) {\n\n if ( isEmptyObject( condition ) ) {\n\n this._readAll( projection, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._readWhere( condition, projection, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else {\n\n onErrorCallback( 'TDataBaseManager.read: Invalid data type, expect string, object or array of objects.' )\n\n }\n\n }\n\n /**\n * The update method allow to update data on the server, using a single id or an array of them, and a corresponding object about the data to update.\n *\n * @param {string|array.<string>} condition - The ids of objects to update.\n * @param {object} update - The update data ( need to match the related database schema ! ). In case of multiple ids they will be updated with the same given data.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n update( condition, update, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n if ( isNotDefined( update ) ) {\n onErrorCallback( 'TDataBaseManager.update: Update data cannot be null or undefined !' )\n return\n }\n\n if ( isNotObject( update ) ) {\n onErrorCallback( 'TDataBaseManager.update: Invalid update data type. Expect an object.' )\n return\n }\n\n if ( isString( condition ) && isNotEmptyString( condition ) && isNotBlankString( condition ) ) {\n\n this._updateOne( condition, update, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else if ( isArray( condition ) && isNotEmptyArray( condition ) ) {\n\n if ( isArrayOfSingleElement( condition ) ) {\n\n this._updateOne( condition[ 0 ], update, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._updateMany( condition, update, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else if ( isObject( condition ) ) {\n\n if ( isEmptyObject( condition ) ) {\n\n this._updateAll( update, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._updateWhere( condition, update, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else {\n\n onErrorCallback( 'TDataBaseManager.update: Invalid data type, expect string, object or array of objects.' )\n\n }\n\n }\n\n /**\n * The delete method allow to remove data from the server, using a single id or an array of them.\n *\n * @param {string|array.<string>|object|null} condition - The ids of objects to delete.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n delete( condition, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n if ( isString( condition ) && isNotEmptyString( condition ) && isNotBlankString( condition ) ) {\n\n this._deleteOne( condition, onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else if ( isArray( condition ) && isNotEmptyArray( condition ) ) {\n\n if ( isArrayOfSingleElement( condition ) ) {\n\n this._deleteOne( condition[ 0 ], onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._deleteMany( condition, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else if ( isObject( condition ) ) {\n\n if ( isEmptyObject( condition ) ) {\n\n this._deleteAll( onLoadCallback, onProgressCallback, onErrorCallback )\n\n } else {\n\n this._deleteWhere( condition, onLoadCallback, onProgressCallback, onErrorCallback )\n\n }\n\n } else {\n\n onErrorCallback( 'TDataBaseManager.delete: Invalid data type, expect null, string, object or array of objects.' )\n\n }\n\n }\n\n // Privates\n\n //// Events\n\n /**\n * The private _onLoad method allow to process the server response in an abstract way to check against error and wrong status code.\n * It will bind user callback on each type of returns, and dispatch in sub methods in function of the response type.\n *\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n * @param {object} loadEvent - The server response object to parse.\n * @private\n */\n _onLoad( request, onLoadCallback, onProgressCallback, onErrorCallback, loadEvent ) {\n\n const target = loadEvent.target\n const status = target.status\n const response = target.response\n const responseType = target.responseType\n\n switch ( status ) {\n\n // 100\n // case HttpStatusCode.Continue.value:\n // case HttpStatusCode.SwitchingProtocols.value:\n // case HttpStatusCode.Processing.value:\n\n // 200\n case HttpStatusCode.Ok.value:\n this._dispatchResponse( response, responseType, onLoadCallback, onProgressCallback, onErrorCallback )\n break\n // case HttpStatusCode.Created.value:\n // case HttpStatusCode.Accepted.value:\n\n case HttpStatusCode.NonAuthoritativeInformation.value:\n case HttpStatusCode.NoContent.value:\n case HttpStatusCode.ResetContent.value:\n case HttpStatusCode.PartialContent.value:\n case HttpStatusCode.MultiStatus.value:\n case HttpStatusCode.AlreadyReported.value:\n case HttpStatusCode.ContentDifferent.value:\n case HttpStatusCode.IMUsed.value:\n case HttpStatusCode.MultipleChoices.value:\n case HttpStatusCode.MovedPermanently.value:\n case HttpStatusCode.Found.value:\n case HttpStatusCode.SeeOther.value:\n case HttpStatusCode.NotModified.value:\n case HttpStatusCode.UseProxy.value:\n case HttpStatusCode.Unused.value:\n case HttpStatusCode.TemporaryRedirect.value:\n case HttpStatusCode.PermanentRedirect.value:\n case HttpStatusCode.TooManyRedirects.value:\n case HttpStatusCode.BadRequest.value:\n case HttpStatusCode.Unauthorized.value:\n case HttpStatusCode.PaymentRequired.value:\n case HttpStatusCode.Forbidden.value:\n case HttpStatusCode.NotFound.value:\n case HttpStatusCode.MethodNotAllowed.value:\n case HttpStatusCode.NotAcceptable.value:\n case HttpStatusCode.ProxyAuthenticationRequired.value:\n case HttpStatusCode.RequestTimeOut.value:\n case HttpStatusCode.Conflict.value:\n case HttpStatusCode.Gone.value:\n case HttpStatusCode.LengthRequired.value:\n case HttpStatusCode.PreconditionFailed.value:\n case HttpStatusCode.RequestEntityTooLarge.value:\n case HttpStatusCode.RequestRangeUnsatisfiable.value:\n case HttpStatusCode.ExpectationFailed.value:\n case HttpStatusCode.ImATeapot.value:\n case HttpStatusCode.BadMapping.value:\n case HttpStatusCode.UnprocessableEntity.value:\n case HttpStatusCode.Locked.value:\n case HttpStatusCode.MethodFailure.value:\n case HttpStatusCode.UnorderedCollection.value:\n case HttpStatusCode.UpgradeRequired.value:\n case HttpStatusCode.PreconditionRequired.value:\n case HttpStatusCode.TooManyRequests.value:\n case HttpStatusCode.RequestHeaderFieldsTooLarge.value:\n case HttpStatusCode.NoResponse.value:\n case HttpStatusCode.RetryWith.value:\n case HttpStatusCode.BlockedByWindowsParentalControls.value:\n case HttpStatusCode.UnavailableForLegalReasons.value:\n case HttpStatusCode.UnrecoverableError.value:\n case HttpStatusCode.SSLCertificateError.value:\n case HttpStatusCode.SSLCertificateRequired.value:\n case HttpStatusCode.HTTPRequestSentToHTTPSPort.value:\n case HttpStatusCode.ClientClosedRequest.value:\n case HttpStatusCode.InternalServerError.value:\n case HttpStatusCode.NotImplemented.value:\n case HttpStatusCode.BadGateway.value:\n case HttpStatusCode.ServiceUnavailable.value:\n case HttpStatusCode.GatewayTimeOut.value:\n case HttpStatusCode.HTTPVersionNotSupported.value:\n case HttpStatusCode.VariantAlsoNegotiates.value:\n case HttpStatusCode.InsufficientStorage.value:\n case HttpStatusCode.LoopDetected.value:\n case HttpStatusCode.BandwidthLimitExceeded.value:\n case HttpStatusCode.NotExtended.value:\n case HttpStatusCode.NetworkAuthenticationRequired.value:\n case HttpStatusCode.UnknownError.value:\n case HttpStatusCode.WebServerIsDown.value:\n case HttpStatusCode.ConnectionTimedOut.value:\n case HttpStatusCode.OriginIsUnreachable.value:\n case HttpStatusCode.ATimeoutOccured.value:\n case HttpStatusCode.SSLHandshakeFailed.value:\n case HttpStatusCode.InvalidSSLCertificate.value:\n case HttpStatusCode.RailgunError.value:\n onErrorCallback( response )\n break\n\n default:\n throw new RangeError( `Unmanaged HttpStatusCode: ${ status }` )\n\n }\n\n }\n\n /**\n * The private _onProgress method will handle all progress event from server and submit them to the logger if exist else to the user onProgressCallback\n *\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {object} progressEvent - The server progress event.\n * @private\n */\n _onProgress( onProgressCallback, progressEvent ) {\n\n if ( isDefined( this.logger ) ) {\n\n this.logger.progress( progressEvent, onProgressCallback )\n\n } else if ( isDefined( onProgressCallback ) ) {\n\n onProgressCallback( progressEvent )\n\n }\n\n }\n\n /**\n * The private _onError method will handle all error event from server and submit them to the logger if exist else to the user onErrorCallback\n *\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n * @param {object} errorEvent - A server error event\n * @private\n */\n _onError( request, onErrorCallback, errorEvent ) {\n\n this._closeRequest( request )\n\n if ( isDefined( this.logger ) ) {\n\n this.logger.error( errorEvent, onErrorCallback )\n\n } else if ( isDefined( onErrorCallback ) ) {\n\n onErrorCallback( errorEvent )\n\n }\n\n }\n\n /**\n * The private _onEnd method is call after all other callback and perform request type checking in view to upadte cache, waitingqueue and callback if needed,\n * to finally close the request\n *\n * @param request\n * @param onLoadCallback\n * @param response\n * @private\n */\n _onEnd( request, onLoadCallback, response ) {\n\n const type = request._type\n\n switch ( type ) {\n\n case RequestType.ReadOne:\n case RequestType.ReadMany:\n this._updateCache( response )\n this._updateWaitingQueue()\n break\n\n case RequestType.ReadWhere:\n case RequestType.ReadAll:\n this._updateCache( response )\n this._updateWaitingQueue()\n onLoadCallback( response )\n break\n\n case RequestType.CreateOne:\n case RequestType.CreateMany:\n case RequestType.UpdateOne:\n case RequestType.UpdateMany:\n case RequestType.UpdateWhere:\n case RequestType.UpdateAll:\n case RequestType.DeleteOne:\n case RequestType.DeleteMany:\n case RequestType.DeleteWhere:\n case RequestType.DeleteAll:\n onLoadCallback( response )\n break\n\n default:\n throw new RangeError( `Invalid request type: ${ type }` )\n\n }\n\n this._closeRequest( request )\n\n }\n\n //// Data parsing\n // Expect that methods were reimplemented when TDataBaseManager is inherited\n\n /**\n * Dispatch response to the correct handler in function of response type\n *\n * @param response\n * @param responseType\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _dispatchResponse( response, responseType, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n switch ( responseType ) {\n\n case ResponseType.ArrayBuffer.value:\n this._onArrayBuffer(\n response,\n onLoadCallback,\n onProgressCallback,\n onErrorCallback\n )\n break\n\n case ResponseType.Blob.value:\n this._onBlob(\n response,\n onLoadCallback,\n onProgressCallback,\n onErrorCallback\n )\n break\n\n case ResponseType.Json.value:\n this._onJson(\n response,\n onLoadCallback,\n onProgressCallback,\n onErrorCallback\n )\n break\n\n case ResponseType.DOMString.value:\n case ResponseType.Default.value:\n this._onText(\n response,\n onLoadCallback,\n onProgressCallback,\n onErrorCallback\n )\n break\n\n default:\n throw new Error( `Unknown response type: ${ responseType }` )\n\n }\n\n }\n\n /**\n * Will remove the request from the process queue\n *\n * @param request\n * @private\n */\n _closeRequest( request ) {\n\n this._processQueue.splice( this._processQueue.indexOf( request ), 1 )\n\n if ( Window.Itee && Window.Itee.Debug ) {\n\n const diff = new Date().valueOf() - request._timeStart.valueOf()\n const message = `${ this.constructor.name } close request [${ request._id }] on ${ diff }ms.` +\n `Waiting queue: ${ this._waitingQueue.length }` +\n `Request queue: ${ this._requestQueue.length }` +\n `Process queue: ${ this._processQueue.length }` +\n `==========================`\n this.logger.debug( message )\n\n }\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param ids\n * @returns {Object}\n * @private\n */\n _retrieveCachedValues( ids ) {\n\n let results = {}\n let underRequest = []\n let toRequest = []\n\n for ( let idIndex = 0, numberOfIds = ids.length ; idIndex < numberOfIds ; idIndex++ ) {\n\n const id = ids[ idIndex ]\n const cachedValue = this._cache.get( id )\n\n if ( isDefined( cachedValue ) ) {\n results[ id ] = cachedValue\n } else if ( isNull( cachedValue ) ) { // In request\n underRequest.push( id )\n } else {\n toRequest.push( id )\n }\n\n }\n\n return {\n results,\n underRequest,\n toRequest\n }\n\n }\n\n /**\n *\n * @param datas\n * @private\n */\n _updateCache( datas ) {\n\n if ( isNull( datas ) ) { throw new TypeError( 'Data cannot be null ! Expect an array of object.' ) }\n if ( isUndefined( datas ) ) { throw new TypeError( 'Data cannot be undefined ! Expect an array of object.' ) }\n\n let _datas = {}\n if ( isArray( datas ) ) {\n\n for ( let key in datas ) {\n _datas[ datas[ key ]._id ] = datas[ key ]\n }\n\n } else {\n\n _datas = datas\n\n }\n\n for ( let [ id, data ] of Object.entries( _datas ) ) {\n\n const cachedResult = this._cache.get( id )\n\n if ( isNull( cachedResult ) ) {\n this._cache.add( id, data, true )\n } else if ( isUndefined( cachedResult ) ) {\n this.logger.warn( 'Cache was not pre-allocated with null value.' )\n this._cache.add( id, data )\n } else {\n this.logger.error( 'Cached value already exist !' )\n }\n\n }\n\n }\n\n /**\n *\n * @private\n */\n _updateWaitingQueue() {\n\n const haveNoRequestToProcess = ( this._requestQueue.length === 0 && this._processQueue.length === 0 )\n\n for ( let requestIndex = this._waitingQueue.length - 1 ; requestIndex >= 0 ; requestIndex-- ) {\n\n const demand = this._waitingQueue[ requestIndex ]\n\n // Update requested datas\n for ( let dataIndex = demand.underRequest.length - 1 ; dataIndex >= 0 ; dataIndex-- ) {\n\n const id = demand.underRequest[ dataIndex ]\n const cachedResult = this._cache.get( id )\n\n if ( isNotDefined( cachedResult ) ) { continue }\n\n // Assign the cached value\n demand.results[ id ] = cachedResult\n\n // Remove the requested object that is now added\n demand.underRequest.splice( demand.underRequest.indexOf( id ), 1 )\n\n }\n\n // Check if request is now fullfilled\n const demandIsComplet = ( demand.underRequest.length === 0 )\n if ( demandIsComplet ) {\n\n this._waitingQueue.splice( requestIndex, 1 )\n demand.onLoadCallback( demand.results )\n\n } else if ( !demandIsComplet && haveNoRequestToProcess /* && haveTryAgainManyTimesButFail */ ) {\n\n this.logger.warn( 'Incomplet demand but empty request/process queue' )\n this._waitingQueue.splice( requestIndex, 1 )\n demand.onLoadCallback( demand.results )\n\n } else {\n\n // Wait next response\n\n }\n\n }\n\n }\n\n /**\n * The abstract private _onArrayBuffer method must be overridden in case the parser expect an array buffer as input data.\n *\n * @private\n * @abstract\n * @param {ArrayBuffer} data - The retrieved data to parse.\n * @param {function} onSuccess - The onLoad callback, which is call when parser parse with success the data.\n * @param {function} onProgress - The onProgress callback, which is call during the parsing.\n * @param {function} onError - The onError callback, which is call when parser throw an error during parsing.\n */\n // eslint-disable-next-line no-unused-vars\n _onArrayBuffer( data, onSuccess, onProgress, onError ) {}\n\n /**\n * The abstract private _onBlob method must be overridden in case the parser expect a blob as input data.\n *\n * @private\n * @abstract\n * @param {Blob} data - The retrieved data to parse.\n * @param {function} onSuccess - The onLoad callback, which is call when parser parse with success the data.\n * @param {function} onProgress - The onProgress callback, which is call during the parsing.\n * @param {function} onError - The onError callback, which is call when parser throw an error during parsing.\n */\n // eslint-disable-next-line no-unused-vars\n _onBlob( data, onSuccess, onProgress, onError ) {}\n\n /**\n * The abstract private _onJson method must be overridden in case the parser expect json as input data.\n *\n * @private\n * @abstract\n * @param {json} data - The retrieved data to parse.\n * @param {function} onSuccess - The onLoad callback, which is call when parser parse with success the data.\n * @param {function} onProgress - The onProgress callback, which is call during the parsing.\n * @param {function} onError - The onError callback, which is call when parser throw an error during parsing.\n */\n // eslint-disable-next-line no-unused-vars\n _onJson( data, onSuccess, onProgress, onError ) {}\n\n /**\n * The abstract private _onText method must be overridden in case the parser expect a string/text as input data.\n *\n * @private\n * @abstract\n * @param {string} data - The retrieved data to parse.\n * @param {function} onSuccess - The onLoad callback, which is call when parser parse with success the data.\n * @param {function} onProgress - The onProgress callback, which is call during the parsing.\n * @param {function} onError - The onError callback, which is call when parser throw an error during parsing.\n */\n // eslint-disable-next-line no-unused-vars\n _onText( data, onSuccess, onProgress, onError ) {}\n\n // REST Api calls\n /**\n * The private _create method allow to format a server request to create objects with the given data and get creation result with given callbacks.\n *\n * @private\n * @param {object} data - The data to send.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n _createOne( data, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `createOne_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.CreateOne,\n method: HttpVerb.Create.value,\n url: this._basePath,\n data: data,\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param datas\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _createMany( datas, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `createMany_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.CreateMany,\n method: HttpVerb.Create.value,\n url: this._basePath,\n data: datas,\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n * The private _updateOne method will format a server request to get a single object with the given id.\n *\n * @private\n * @param {string} id - The object's id of the object to retrieve.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n _readOne( id, projection, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n // Filter requested values by cached values\n const datas = this._retrieveCachedValues( [ id ] )\n\n // retrieveLocalStorageValues...\n\n // getDatabaseValues()\n\n if ( datas.toRequest.length === 0 ) {\n\n if ( datas.underRequest.length === 0 ) {\n\n onLoadCallback( datas.results )\n\n } else {\n\n datas[ 'onLoadCallback' ] = onLoadCallback\n datas[ 'onProgressCallback' ] = onProgressCallback\n datas[ 'onErrorCallback' ] = onErrorCallback\n this._waitingQueue.push( datas )\n\n }\n\n } else {\n\n datas[ 'onLoadCallback' ] = onLoadCallback\n datas[ 'onProgressCallback' ] = onProgressCallback\n datas[ 'onErrorCallback' ] = onErrorCallback\n this._waitingQueue.push( datas )\n\n try {\n this._cache.add( id, null )\n datas.underRequest.push( id )\n datas.toRequest.splice( datas.toRequest.indexOf( id ), 1 )\n } catch ( error ) {\n this.logger.error( error )\n }\n\n this._idToRequest.push( id )\n this.aggregateQueue()\n\n }\n\n }\n\n /**\n * The private _readMany method will format a server request to get objects with id in the ids array.\n *\n * @private\n * @param {array.<string>} ids - The ids of objects to retrieve.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n */\n _readMany( ids, projection, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n // Filter requested values by cached values\n const datas = this._retrieveCachedValues( ids )\n\n // retrieveLocalStorageValues...\n\n // getDatabaseValues()\n\n if ( datas.toRequest.length === 0 ) {\n\n if ( datas.underRequest.length === 0 ) {\n\n onLoadCallback( datas.results )\n\n } else {\n\n datas[ 'onLoadCallback' ] = onLoadCallback\n datas[ 'onProgressCallback' ] = onProgressCallback\n datas[ 'onErrorCallback' ] = onErrorCallback\n this._waitingQueue.push( datas )\n\n }\n\n } else {\n\n datas[ 'onLoadCallback' ] = onLoadCallback\n datas[ 'onProgressCallback' ] = onProgressCallback\n datas[ 'onErrorCallback' ] = onErrorCallback\n this._waitingQueue.push( datas )\n\n const datasToRequest = datas.toRequest\n let id = undefined\n for ( let idIndex = datasToRequest.length - 1 ; idIndex >= 0 ; idIndex-- ) {\n\n id = datasToRequest[ idIndex ]\n\n // Prepare entry for id to request\n try {\n this._cache.add( id, null )\n datas.underRequest.push( id )\n datas.toRequest.splice( datas.toRequest.indexOf( id ), 1 )\n } catch ( error ) {\n this.logger.error( error )\n }\n\n this._idToRequest.push( id )\n\n }\n\n this.aggregateQueue()\n\n }\n\n }\n\n /**\n *\n * @param query\n * @param projection\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _readWhere( query, projection, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n // // Filter requested values by cached values\n // const datas = {\n // results: {},\n // underRequest: [],\n // toRequest: []\n // }\n //\n // datas[ 'onLoadCallback' ] = onLoadCallback\n // this._waitingQueue.push( datas )\n\n this._requestQueue.push( {\n _id: `readWhere_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.ReadWhere,\n method: HttpVerb.Read.value,\n url: this._basePath,\n data: {\n query,\n projection\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param projection\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _readAll( projection, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n // const datas = {\n // results: {},\n // underRequest: [],\n // toRequest: []\n // }\n //\n // datas[ 'onLoadCallback' ] = onLoadCallback\n // this._waitingQueue.push( datas )\n\n const query = {}\n\n this._requestQueue.push( {\n _id: `readAll_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.ReadAll,\n method: HttpVerb.Read.value,\n url: this._basePath,\n data: {\n query,\n projection\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n * The private _updateOne method will format a server request to update a single object with the given id.\n *\n * @param {string} id - The object's id of the object to update.\n * @param update\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n * @private\n */\n _updateOne( id, update, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `updateOne_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.UpdateOne,\n method: HttpVerb.Update.value,\n url: `${ this._basePath }/${ id }`,\n data: {\n update\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n * The private _updateMany method will format a server request to update objects with id in the ids array.\n *\n * @param {array.<string>} ids - The ids of objects to update.\n * @param update\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n * @private\n */\n _updateMany( ids, update, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `updateMany_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.UpdateMany,\n method: HttpVerb.Update.value,\n url: this._basePath,\n data: {\n ids,\n update\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param query\n * @param update\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _updateWhere( query, update, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `updateWhere_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.UpdateWhere,\n method: HttpVerb.Update.value,\n url: this._basePath,\n data: {\n query,\n update\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param update\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _updateAll( update, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n const query = {}\n\n this._requestQueue.push( {\n _id: `updateAll_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.UpdateAll,\n method: HttpVerb.Update.value,\n url: this._basePath,\n data: {\n query,\n update\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n * The private _deleteOne method will format a server request to delete a single object with the given id.\n *\n * @param {string} id - The object's id of the object to delete.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n * @private\n */\n _deleteOne( id, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `deleteOne_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.DeleteOne,\n method: HttpVerb.Delete.value,\n url: `${ this._basePath }/${ id }`,\n data: null,\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n * The private _deleteMany method will format a server request to delete objects with id in the ids array.\n *\n * @param {array.<string>} ids - The ids of objects to delete.\n * @param {function} onLoadCallback - The onLoad callback, which is call when server respond with success to the request.\n * @param {function} onProgressCallback - The onProgress callback, which is call during the response incoming.\n * @param {function} onErrorCallback - The onError callback, which is call when server respond with an error to the request.\n * @private\n */\n _deleteMany( ids, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `deleteMany_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.DeleteMany,\n method: HttpVerb.Delete.value,\n url: this._basePath,\n data: {\n ids\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param query\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _deleteWhere( query, onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n this._requestQueue.push( {\n _id: `deleteWhere_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.DeleteWhere,\n method: HttpVerb.Delete.value,\n url: this._basePath,\n data: {\n query\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n /**\n *\n * @param onLoadCallback\n * @param onProgressCallback\n * @param onErrorCallback\n * @private\n */\n _deleteAll( onLoadCallback, onProgressCallback, onErrorCallback ) {\n\n const query = {}\n\n this._requestQueue.push( {\n _id: `deleteAll_${ Generate.id }`,\n _timeStart: new Date(),\n _type: RequestType.DeleteAll,\n method: HttpVerb.Delete.value,\n url: this._basePath,\n data: {\n query\n },\n onLoad: onLoadCallback,\n onProgress: onProgressCallback,\n onError: onErrorCallback,\n responseType: this._responseType\n } )\n\n this.processQueue()\n\n }\n\n}\n\n// Static stuff\n/**\n *\n * @type {number}\n * @private\n */\nTDataBaseManager._requestId = 0\n\n/**\n *\n * @type {Object}\n * @private\n */\nTDataBaseManager._requests = {\n /**\n * The global waiting queue to process\n */\n waitingQueue: {},\n /**\n * The objects not requested yet\n */\n toProcess: {\n create: {},\n read: {},\n update: {},\n delete: {}\n },\n /**\n * The object currently under request\n */\n underProcess: {\n create: {},\n read: {},\n update: {},\n delete: {}\n },\n /**\n * The objects already processed\n */\n processed: {\n create: {},\n read: {},\n update: {},\n delete: {}\n }\n}\n//TDataBaseManager._orchestrator = TOrchestrator\n\nexport { TDataBaseManager }\n","import { toEnum } from 'itee-utils'\nimport {\n isNotNumber,\n isNotString,\n isNull,\n isUndefined\n} from 'itee-validators'\n\n/**\n * @deprecated\n * @type {ReadonlyArray<unknown>}\n */\nconst TIdFactoryType = /*#__PURE__*/toEnum( {\n Number: 0,\n String: 1,\n Uuid: 2\n} )\n\n/**\n * @deprecated\n */\nclass TIdFactory {\n\n constructor( type = TIdFactoryType.Number, base = null ) {\n\n this.type = type\n this.base = base\n\n this._counter = 0\n\n }\n\n get type() {\n return this._type\n }\n\n set type( value ) {\n\n if ( isNull( value ) ) { throw new Error( `Type cannot be null ! Expect an value from TIdFactoryType enum: ${ TIdFactoryType.types() }` ) }\n if ( isUndefined( value ) ) { throw new Error( `Type cannot be undefined ! Expect an value from TIdFactoryType enum: ${ TIdFactoryType.types() }` ) }\n if ( !TIdFactoryType.includes( value ) ) { throw new Error( `Invalide type ! Expect an value from TIdFactoryType enum: ${ TIdFactoryType.types() }` ) }\n\n this._type = value\n }\n\n get base() {\n return this._base\n }\n\n set base( value ) {\n\n if ( isUndefined( value ) ) { throw new Error( 'Base cannot be undefined ! Expect an instance of Object3D.' ) }\n\n if ( ( this._type === TIdFactoryType.Number ) && isNotNumber( value ) ) { throw new Error( 'Invalide Base ! It does not match the type.' ) }\n if ( ( this._type === TIdFactoryType.String ) && isNotString( value ) ) { throw new Error( 'Invalide Base ! It does not match the type.' ) }\n // if( (this._type === TIdFactoryType.Uuid) && isNotUuid( value ) ) { throw new Error( 'Invalide Base ! It does not match the type.' ) }\n\n this._base = value\n }\n\n setType( value ) {\n\n this.type = value\n return this\n\n }\n\n setBase( value ) {\n\n this.base = value\n return this\n\n }\n\n createId() {\n return this._base + this._counter++\n }\n\n}\n\nexport {\n TIdFactory,\n TIdFactoryType\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isEmptyString,\n isNotString\n} from 'itee-validators'\nimport { v4 as uuidv4 } from 'uuid'\n\n/**\n * @typedef {Object} WebAPIMessageSerialized\n * @property {string} id\n * @property {string} type\n */\n\n/**\n * @class\n * @classdesc The base class for all web api message\n */\nclass WebAPIMessage {\n\n /**\n * @static\n * @type {boolean}\n */\n static isWebAPIMessage = true\n\n /**\n *\n * @param {string} type\n */\n constructor( type ) {\n this._id = uuidv4()\n this.type = type\n }\n\n /**\n *\n */\n get id() {\n return this._id\n }\n\n /**\n *\n * @returns {string}\n */\n get type() {\n return this._type\n }\n\n set type( value ) {\n if ( isNotString( value ) ) { throw new ReferenceError( 'WebAPIMessage type cannot be null or undefined !' )}\n if ( isEmptyString( value ) ) { throw new TypeError( 'WebAPIMessage type cannot be an empty string !' )}\n\n this._type = value\n }\n\n /**\n *\n * @returns {{id: String, type: String}}\n */\n toJSON() {\n\n return {\n id: this.id,\n type: this.type\n }\n\n }\n\n}\n\nexport { WebAPIMessage }\n","import { WebAPIMessage } from './WebAPIMessage.js'\n\n/**\n * @typedef {Object} WebAPIMessageDataSerialized\n * @property {object} data\n * @instance\n */\n\n/**\n * @class\n * @classdesc The web api message for serializable data transfert\n * @extends WebAPIMessage\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\nclass WebAPIMessageData extends WebAPIMessage {\n\n /**\n * @static\n * @type {boolean}\n */\n static isWebAPIMessageData = true\n\n /**\n *\n * @param data\n */\n constructor( data ) {\n super( '_data' )\n\n this.data = data\n }\n\n /**\n *\n * @returns {{id: String, type: String, data: String}}\n */\n toJSON() {\n\n const isPlainObject = this.data === Object( this.data )\n return {\n ...super.toJSON(),\n ...{\n data: isPlainObject ? JSON.stringify( this.data ) : this.data\n }\n }\n\n }\n\n}\n\nexport { WebAPIMessageData }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isDefined,\n isNotDefined,\n isObject,\n isString\n} from 'itee-validators'\nimport { WebAPIMessage } from './WebAPIMessage.js'\n\nclass WebAPIMessageError extends WebAPIMessage {\n\n static isWebAPIMessageError = true\n /**\n *\n * @param error\n */\n constructor( error ) {\n super( '_error' )\n\n /**\n * The internal error to send\n * @type {{stack: string, name: string, message: string}}\n */\n this.error = error\n }\n get error() {\n return this._error\n }\n set error( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( `Expect a string, or Error like. But got value of '${ typeof value }' type: ${ JSON.stringify( value, null, 4 ) }` ) }\n\n if ( isString( value ) ) {\n\n this._error = {\n name: 'UnknownError',\n message: value\n }\n\n } else if ( WebAPIMessageError.isError( value ) ) {\n\n this._error = {\n name: value.name,\n message: value.message,\n stack: value.stack\n }\n\n } else {\n\n throw new TypeError( `Expect a string, or Error like. But got value of '${ typeof value }' type: ${ JSON.stringify( value, null, 4 ) }` )\n\n }\n\n }\n // Utils\n static isError( value ) {\n return value instanceof Error || isObject( value ) && ( isDefined( value.name ) || isDefined( value.message ) || isDefined( value.stack ) )\n }\n // Serialization\n /**\n *\n * @returns {{id: String, type: String, name: String, stack: String, message: String}}\n */\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n error: this.error\n }\n }\n\n }\n\n}\n\nexport { WebAPIMessageError }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\n\nimport { WebAPIMessage } from './WebAPIMessage.js'\n\n/**\n * @typedef {Object} WebAPIMessageDataSerialized\n * @property {object} data\n * @instance\n */\n\n/**\n * @class\n * @classdesc The web api message for serializable data transfert\n * @extends WebAPIMessage\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\nclass WebAPIMessageEvent extends WebAPIMessage {\n\n /**\n * @static\n * @type {boolean}\n */\n static isWebAPIMessageEvent = true\n\n /**\n *\n * @param data\n */\n constructor( name, data ) {\n super( '_event' )\n\n this.name = name\n this.data = data\n }\n\n /**\n *\n * @returns {{id: String, type: String, data: String}}\n */\n toJSON() {\n\n const isPlainObject = this.data === Object( this.data )\n return {\n ...super.toJSON(),\n ...{\n name: this.name,\n data: isPlainObject ? JSON.stringify( this.data ) : this.data\n }\n }\n\n }\n\n}\n\nexport { WebAPIMessageEvent }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isNotBoolean,\n isNotDefined\n} from 'itee-validators'\nimport { WebAPIMessage } from './WebAPIMessage.js'\n\n/**\n * @class\n * @classdesc Internal ready message to broadcast for prevent bad or dead messager\n */\nclass WebAPIMessageReady extends WebAPIMessage {\n\n /**\n * @static\n * @type {boolean}\n */\n static isWebAPIMessageReady = true\n\n /**\n *\n */\n constructor( parameters = {} ) {\n super( '_ready' )\n\n const _parameters = {\n ...{\n isBind: false\n },\n ...parameters\n }\n\n this.isBind = _parameters.isBind\n }\n\n get isBind() {\n return this._isBind\n }\n\n set isBind( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( 'WebAPIMessageReady isBind cannot be null or undefined ! Expect a boolean value.' )}\n if ( isNotBoolean( value ) ) { throw new TypeError( 'WebAPIMessageReady isBind expect a boolean value.' )}\n\n this._isBind = value\n }\n\n /**\n *\n * @returns {{id: String, type: String, isBind: Boolean}}\n */\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n isBind: this.isBind\n }\n }\n\n }\n}\n\nexport { WebAPIMessageReady }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isBlankString,\n isEmptyString,\n isNotArray,\n isNotDefined,\n isNotString\n} from 'itee-validators'\nimport { WebAPIMessage } from './WebAPIMessage.js'\n\n/**\n * @class\n * @classdesc Special message to request a distant method and expect result.\n */\nclass WebAPIMessageRequest extends WebAPIMessage {\n\n /**\n * @static\n * @type {boolean}\n */\n static isWebAPIMessageRequest = true\n\n /**\n *\n * @param method\n * @param parameters\n */\n constructor( method, parameters = [] ) {\n super( '_request' )\n\n this.method = method\n this.parameters = parameters\n }\n\n /**\n *\n * @returns {String}\n */\n get method() {\n return this._method\n }\n\n /**\n *\n * @param value {String}\n */\n set method( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( 'Expect a string that represent a api method name, but got undefined or null value.' ) }\n if ( isNotString( value ) ) { throw new TypeError( `Expect a string that represent a api method name, but got value of '${ typeof value }' type: ${ JSON.stringify( value, null, 4 ) }` ) }\n if ( isEmptyString( value ) || isBlankString( value ) ) { throw new TypeError( 'Expect a string that represent a api method name, but got empty or blank string.' ) }\n\n this._method = value\n }\n\n /**\n *\n * @returns {Array<*>}\n */\n get parameters() {\n return this._parameters\n }\n\n /**\n *\n * @param value {Array<*>}\n */\n set parameters( value ) {\n if ( isNotArray( value ) ) { throw new TypeError( `Expect an array of parameters, but got value of '${ typeof value }' type: ${ JSON.stringify( value, null, 4 ) }` ) }\n\n this._parameters = value\n }\n\n /**\n *\n * @returns {{method: String, parameters: Array<*>}}\n */\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n method: this.method,\n parameters: this.parameters\n }\n }\n\n }\n\n}\n\nexport { WebAPIMessageRequest }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isNull,\n isUndefined\n} from 'itee-validators'\nimport { WebAPIMessage } from './WebAPIMessage.js'\n\n/**\n * @class\n * @classdesc The message response to a message request\n */\nclass WebAPIMessageResponse extends WebAPIMessage {\n\n /**\n *\n * @type {boolean}\n */\n static isWebApiMessageResponse = true\n\n /**\n *\n * @param request\n * @param result\n */\n constructor( request, result ) {\n super( '_response' )\n\n this.request = request\n this.result = result\n }\n\n /**\n *\n * @returns {*}\n */\n get request() {\n return this._request\n }\n\n set request( value ) {\n if ( isNull( value ) ) { return }\n if ( isUndefined( value ) ) { return }\n\n this._request = value\n }\n\n /**\n *\n * @returns {*}\n */\n get result() {\n return this._result\n }\n\n set result( value ) {\n this._result = value\n }\n\n /**\n *\n * @returns {{result: *, request: *}}\n */\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n request: this.request,\n result: this.result\n }\n }\n\n }\n\n}\n\nexport { WebAPIMessageResponse }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}\n */\n\nimport {\n isDefined,\n isEmptyArray,\n isEmptyString,\n isNotArray,\n isNotBoolean,\n isNotDefined,\n isNotString\n} from 'itee-validators'\nimport { v4 as uuidv4 } from 'uuid'\n\nclass WebAPIOrigin {\n\n constructor( parameters = {} ) {\n\n const _parameters = {\n ...{\n uri: '',\n allowedMethods: [ '*' ],\n window: null,\n messageQueue: [],\n isReachable: true,\n isReady: false\n },\n ...parameters,\n ...{\n id: isDefined( parameters.id ) ? parameters.id : uuidv4()\n }\n }\n\n this._id = _parameters.id\n this.uri = _parameters.uri\n this.allowedMethods = _parameters.allowedMethods // Todo: use Set instead\n this.window = _parameters.window\n this.isReachable = _parameters.isReachable\n this.isReady = _parameters.isReady\n this.messageQueue = _parameters.messageQueue\n\n }\n\n /**\n *\n */\n get id() {\n return this._id\n }\n\n get uri() {\n return this._uri\n }\n set uri( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( 'WebAPIOrigin uri cannot be null or undefined !' )}\n if ( isNotString( value ) ) { throw new TypeError( `WebAPIOrigin uri expect to be a string. Got '${ typeof value }' !` )}\n if ( isEmptyString( value ) ) { throw new RangeError( 'WebAPIOrigin uri cannot be an empty string !' )}\n\n this._uri = value\n }\n get allowedMethods() {\n return this._allowedMethods\n }\n set allowedMethods( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( 'WebAPIOrigin methods cannot be null or undefined ! Expect an array of method name.' )}\n if ( isNotArray( value ) ) { throw new TypeError( `WebAPIOrigin methods expect to be an array of method name (string).Got '${ typeof value }' !` )}\n if ( isEmptyArray( value ) ) { throw new RangeError( 'WebAPIOrigin methods cannot be an empty array ! Expect an array of method name.' )}\n\n this._allowedMethods = value\n }\n get window() {\n return this._window\n }\n set window( value ) {\n // if ( isNotDefined( value ) ) { throw new ReferenceError( 'WebAPIOrigin window cannot be null or undefined ! Expect a Window object.' )}\n // if ( isDefined( value ) && !( value instanceof Window ) ) { throw new TypeError( `WebAPIOrigin window expect to be a Window. Got '${ typeof value }' !` )}\n\n this._window = value\n }\n get isReady() {\n return this._isReady\n }\n set isReady( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( 'WebAPIOrigin isReady cannot be null or undefined !' )}\n if ( isNotBoolean( value ) ) { throw new TypeError( `WebAPIOrigin isReady expect a Boolean. Got '${ typeof value }' !` )}\n\n this._isReady = value\n }\n get isReachable() {\n return this._isReachable\n }\n set isReachable( value ) {\n if ( isNotDefined( value ) ) { throw new ReferenceError( 'WebAPIOrigin isReachable cannot be null or undefined !' )}\n if ( isNotBoolean( value ) ) { throw new TypeError( `WebAPIOrigin isReachable expect a Boolean. Got '${ typeof value }' !` )}\n\n this._isReachable = value\n }\n get messageQueue() {\n return this._messageQueue\n }\n set messageQueue( value ) {\n this._messageQueue = value\n }\n setUri( value ) {\n this.uri = value\n return this\n }\n setAllowedMethods( arrayOfMethodNames ) {\n this.allowedMethods = arrayOfMethodNames\n return this\n }\n addAllowedMethod( methodName ) {\n if ( !this.allowedMethods.includes( methodName ) ) {\n this.allowedMethods.push( methodName )\n }\n return this\n }\n removeAllowedMethod( methodName ) {\n const index = this.allowedMethods.indexOf( methodName )\n if ( index >= 0 ) {\n this.allowedMethods.slice( index, methodName )\n }\n return this\n }\n setWindow( value ) {\n this.window = value\n return this\n }\n setReadyState( value ) {\n this.isReady = value\n return this\n }\n setReachableState( value ) {\n this.isReachable = value\n return this\n }\n}\n\nexport { WebAPIOrigin }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport { DefaultLogger } from 'itee-core'\nimport { toArray } from 'itee-utils'\nimport {\n isDefined,\n isEmptyArray,\n isNotDefined,\n isNotNumber,\n isNull,\n isNumberNegative,\n isObject,\n isString,\n isUndefined,\n isZero\n} from 'itee-validators'\nimport { WebAPIMessageData } from './messages/WebAPIMessageData.js'\nimport { WebAPIMessageError } from './messages/WebAPIMessageError.js'\nimport { WebAPIMessageEvent } from './messages/WebAPIMessageEvent.js'\nimport { WebAPIMessageReady } from './messages/WebAPIMessageReady.js'\nimport { WebAPIMessageRequest } from './messages/WebAPIMessageRequest.js'\nimport { WebAPIMessageResponse } from './messages/WebAPIMessageResponse.js'\nimport { WebAPIOrigin } from './WebAPIOrigin.js'\n\n/**\n * A POJO object containg datas about a distant source to allow\n * @typedef {Object} AllowedOrigin\n * @property {string} id - The id to reference this origin as a human readable string\n * @property {string} uri - The uri of the origin to allow\n * @property {Array<String>} methods - An array of methods names that are allowed for this origins. To allow all methods use '*', in case no methods string were provide the origin won't be able to do\n * anything.\n */\n\n/**\n * @class\n * @classdesc The abstract class to use standardized webapi.\n * @abstract\n */\nclass WebAPI {\n\n /**\n * @constructor\n * @param {Object} parameters - An object containing all parameters to pass through the inheritance chain to initialize this instance\n * @param {Boolean} [parameters.allowAnyOrigins=false] - A boolean to allow or not any origins calls\n * @param {Array<AllowedOrigin>} [parameters.allowedOrigins=[]] - An array containing configured allowed origins\n * @param {Number} [parameters.requestTimeout=2000] - The request timeout before throw an error\n */\n constructor( parameters = {} ) {\n\n const _parameters = {\n ...{\n logger: DefaultLogger,\n allowedOrigins: [],\n requestTimeout: 2000,\n methods: this,\n broadcastReadyOnInit: true\n },\n ...parameters\n }\n\n // Private stuff\n this._localOriginUri = window.location.origin\n this._awaitingRequest = new Map()\n this._eventListeners = {} //\"eventName\" : [ callback1, ... ]\n\n // Listen message from Window\n window.addEventListener( 'message', this._onMessage.bind( this ), false )\n\n // Public stuff\n this.logger = _parameters.logger\n this.allowedOrigins = _parameters.allowedOrigins\n this.requestTimeout = _parameters.requestTimeout\n this.methods = _parameters.methods\n\n // Initiate connection to all origins\n if ( _parameters.broadcastReadyOnInit ) {\n this._broadcastReadyMessage()\n }\n }\n\n /**\n *\n * @returns {TLogger}\n */\n get logger() {\n return this._logger\n }\n /**\n *\n * @param value {TLogger}\n */\n set logger( value ) {\n if ( isNull( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The logger cannot be null, expect a TLogger.` )}\n if ( isUndefined( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The logger cannot be undefined, expect a TLogger.` )}\n if ( !value.isLogger ) { throw new ReferenceError( `[${ this._localOriginUri }]: The logger cannot be undefined, expect a TLogger.` )}\n\n this._logger = value\n }\n /**\n *\n * @returns {Array<WebAPIOrigin>}\n */\n get allowedOrigins() {\n return this._allowedOrigins\n }\n /**\n *\n * @param value {Array<WebAPIOrigin>}\n */\n set allowedOrigins( value ) {\n\n this._allowedOrigins = []\n const _allowedOrigins = toArray( value )\n\n // Special case for any origin\n // Todo: should log error in production and cancel '*'\n if ( _allowedOrigins.includes( '*' ) ) {\n this.logger.warn( `[${ this._localOriginUri }]: This webApi is allowed for all origin and could lead to security concerne !` )\n this._allowedOrigins.push( '*' )\n return\n }\n\n // Create WebApiOrigin based on provided settings\n for ( let allowedOrigin of _allowedOrigins ) {\n\n const origin = new WebAPIOrigin( {\n id: allowedOrigin.id,\n uri: allowedOrigin.uri,\n methods: allowedOrigin.methods,\n window: this._getOriginWindow( allowedOrigin.uri )\n } )\n this._allowedOrigins.push( origin )\n\n }\n\n }\n /**\n *\n * @returns {Number}\n */\n get requestTimeout() {\n return this._requestTimeout\n }\n /**\n *\n * @param value {Number}\n */\n set requestTimeout( value ) {\n if ( isNull( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The request timeout cannot be null, expect to be 0 or a positive number.` )}\n if ( isUndefined( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The request timeout cannot be undefined, expect to be 0 or a positive number.` )}\n if ( isNotNumber( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The request timeout expect to be 0 or a positive number.` )}\n if ( isNumberNegative( value ) && !isZero( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The request timeout expect to be 0 or a positive number.` )}\n\n this._requestTimeout = value\n }\n /**\n *\n * @returns {Array<Function>}\n */\n get methods() {\n return this._methods\n }\n /**\n *\n * @param value Array<Function>\n */\n set methods( value ) {\n if ( isNull( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The methods cannot be null, expect any keyed collection of function.` )}\n if ( isUndefined( value ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: The methods cannot be undefined, expect any keyed collection of function.` )}\n // Todo: isNotObject && isNotMap && isNotSet && isNotApi\n\n this._methods = value\n }\n /**\n *\n * @param value {TLogger}\n * @returns {AbstractWebAPI}\n */\n setLogger( value ) {\n this.logger = value\n return this\n }\n /**\n *\n * @param value {Array<WebAPIOrigin>}\n * @returns {AbstractWebAPI}\n */\n setAllowedOrigins( value ) {\n this.allowedOrigins = value\n return this\n }\n /**\n *\n * @param value {Number}\n * @returns {AbstractWebAPI}\n */\n setRequestTimeout( value ) {\n this.requestTimeout = value\n return this\n }\n /**\n *\n * @param value Array<Function>\n * @returns {AbstractWebAPI}\n */\n setMethods( value ) {\n this.methods = value\n return this\n }\n\n addEventListener( eventName, listener ) {\n if ( isNotDefined( this._eventListeners[ eventName ] ) ) {\n this._eventListeners[ eventName ] = []\n }\n\n this._eventListeners[ eventName ].push( listener )\n }\n removeListener( eventName, listener ) {\n if ( isNotDefined( this._eventListeners[ eventName ] ) ) {\n return\n }\n\n const index = this._eventListeners[ eventName ].indexOf( listener )\n if ( index > -1 ) {\n this._eventListeners[ eventName ].splice( index, 1 )\n }\n }\n // Validators\n\n /**\n *\n * @returns {boolean}\n * @private\n */\n _isInIframe() {\n\n try {\n return window.self !== window.top\n } catch ( error ) {\n return true\n }\n\n }\n\n /**\n *\n * @returns {boolean}\n * @private\n */\n _isNotAllowedForAllOrigins() {\n\n return !this._allowedOrigins.includes( '*' )\n // return !this.allowAnyOrigins\n }\n\n /**\n *\n * @param originURI\n * @returns {boolean}\n * @private\n */\n _isNotAllowedOrigin( originURI ) {\n\n return !this._allowedOrigins\n .filter( origin => origin !== '*' )\n .map( origin => origin.uri )\n .includes( originURI )\n\n }\n\n /**\n *\n * @param originURI\n * @returns {boolean}\n * @private\n */\n _isSameOrigin( originURI ) {\n return this._localOriginUri === originURI\n }\n\n /**\n *\n * @param origin {WebAPIOrigin}\n * @returns {boolean}\n * @private\n */\n _isNotAllowedForAllMethods( origin ) {\n return ( origin.allowedMethods.indexOf( '*' ) === -1 )\n }\n\n /**\n *\n * @param origin {WebAPIOrigin}\n * @param methodName {string}\n * @returns {boolean}\n * @private\n */\n _isNotAllowedMethod( origin, methodName ) {\n return ( origin.allowedMethods.indexOf( methodName ) === -1 )\n }\n\n /**\n *\n * @param methodName\n * @returns {boolean}\n * @private\n */\n _methodNotExist( methodName ) {\n return isNotDefined( this.methods[ methodName ] )\n }\n\n // Utils\n\n /**\n *\n * @param propertyName\n * @param value\n * @returns {WebAPIOrigin}\n * @private\n */\n _getAllowedOriginBy( propertyName, value ) {\n return this.allowedOrigins.find( origin => origin[ propertyName ] === value )\n }\n\n /**\n *\n * @param originURI\n * @returns {Window}\n * @private\n */\n _getOriginWindow( originURI ) {\n\n let originWindow\n\n if ( this._isInIframe() ) {\n\n originWindow = window.parent\n\n } else {\n\n const frames = document.getElementsByTagName( 'iframe' )\n const frame = Array.from( frames ).find( iframe => iframe.src.includes( originURI ) )\n if ( isNotDefined( frame ) ) {\n this.logger.warn( `[${ this._localOriginUri }]: Unable to find iframe element for [${ originURI }] URI !` )\n originWindow = null\n } else {\n originWindow = frame.contentWindow\n }\n\n }\n\n return originWindow\n\n }\n\n /**\n *\n * @param origin {WebAPIOrigin}\n * @private\n */\n _processMessageQueueOf( origin ) {\n\n const messageQueue = origin.messageQueue\n for ( let messageIndex = messageQueue.length - 1 ; messageIndex >= 0 ; messageIndex-- ) {\n this.postMessageTo( origin.id, messageQueue.shift() )\n }\n\n }\n\n /**\n *\n * @private\n */\n _broadcastReadyMessage() {\n\n const ready = new WebAPIMessageReady()\n let checkInterval = 250\n\n const broadcast = () => {\n\n const unreadyOrigins = this.allowedOrigins.filter( origin => !origin.isReady && origin.isReachable )\n if ( isEmptyArray( unreadyOrigins ) ) {\n return\n }\n\n for ( let unreadyOrigin of unreadyOrigins ) {\n this.postReadyTo( unreadyOrigin.id, ready )\n }\n\n checkInterval += checkInterval\n setTimeout( broadcast, checkInterval )\n\n }\n broadcast()\n\n }\n\n // Messaging\n\n /**\n *\n * @param event\n * @returns {Promise<void>}\n * @private\n */\n async _onMessage( event ) {\n\n // Is allowed origin\n if ( this._isNotAllowedForAllOrigins() && this._isNotAllowedOrigin( event.origin ) ) {\n this.logger.warn( `[${ this._localOriginUri }]: An unallowed origin [${ event.origin }] try to access the web api.` )\n return\n }\n\n // Is self ?\n if ( this._isSameOrigin( event.origin ) ) {\n this.logger.warn( `[${ this._localOriginUri }]: A local origin try to access the web api... \n or... Am i talking to myself ?\n Said i (${ isString( event.data ) ? event.data : JSON.stringify( event.data ) }) ?\n Hummm... Ehhooo ! Who's there ?\n ` )\n return\n }\n\n // In case we are not in embbeded iframe or the origin is not an iframe set the origin window as the source event\n let origin = this._getAllowedOriginBy( 'uri', event.origin )\n if ( isNotDefined( origin ) ) {\n\n // If we are here, we are called by an unknown origin but we are allowed for all. So create a new one\n origin = new WebAPIOrigin( {\n uri: event.origin,\n window: event.source\n } )\n this.allowedOrigins.push( origin )\n\n } else if ( isNull( origin.window ) ) {\n\n origin.window = event.source\n\n }\n\n const eventData = event.data\n const message = isObject( eventData ) ? eventData : JSON.parse( eventData )\n if ( isNotDefined( message ) ) {\n this.logger.error( `[${ this._localOriginUri }]: Recieve null or undefined message from [${ origin.uri }] ! Expect a json object.` )\n return\n }\n\n await this._dispatchMessageFrom( origin, message )\n\n }\n\n /**\n *\n * @param origin\n * @param message\n * @private\n */\n async _dispatchMessageFrom( origin, message ) {\n\n this.logger.log( `[${ this._localOriginUri }]: Recieve message of type '${ message.type }' from [${ origin.uri }].` )\n\n switch ( message.type ) {\n\n case '_ready':\n this._onReadyFrom( origin, message )\n break\n\n case '_request':\n await this._onRequestFrom( origin, message )\n break\n\n case '_response':\n this._onResponseFrom( origin, message )\n break\n\n case '_data':\n this.onDataFrom( origin, message )\n break\n\n case '_event':\n this.onEventFrom( origin, message )\n break\n\n case '_error':\n this.onErrorFrom( origin, message )\n break\n\n default:\n this.onMessageFrom( origin, message )\n\n }\n\n }\n\n /**\n *\n * @param origin\n * @param message\n */\n _onReadyFrom( origin, message ) {\n\n if ( !origin.isReady ) {\n origin.isReady = true\n\n // Avoid some ping-pong ready message\n if ( !message.isBind ) {\n const ready = new WebAPIMessageReady( { isBind: true } )\n this.postMessageTo( origin.id, ready, true )\n }\n }\n\n this._processMessageQueueOf( origin )\n\n }\n\n /**\n *\n * @param origin\n * @param request\n */\n async _onRequestFrom( origin, request ) {\n\n let message\n const methodName = request.method\n const parameters = request.parameters\n\n if ( this._isNotAllowedForAllMethods( origin ) && this._isNotAllowedMethod( origin, methodName ) ) {\n\n this.logger.error( `[${ this._localOriginUri }]: Origin [${ origin.uri }] try to access an unallowed method named '${ methodName }'.` )\n message = new WebAPIMessageError( new RangeError( `Trying to access an unallowed method named '${ methodName }'.` ) )\n\n } else if ( this._methodNotExist( methodName ) ) {\n\n this.logger.error( `[${ this._localOriginUri }]: Origin [${ origin.uri }] try to access an unexisting method named '${ methodName }'.` )\n message = new WebAPIMessageError( new RangeError( `Trying to access an unexisting method named '${ methodName }'.` ) )\n\n } else {\n\n try {\n const result = await this.methods[ methodName ]( ...parameters )\n message = new WebAPIMessageData( result )\n } catch ( error ) {\n message = new WebAPIMessageError( error )\n }\n\n }\n\n // To avoid unnecessary client timeout we need to respond with error or data in any case\n this.postResponseTo( origin.id, request, message )\n\n }\n\n /**\n *\n * @param origin\n * @param response\n */\n _onResponseFrom( origin, response ) {\n\n const requestId = response.request.id\n if ( !this._awaitingRequest.has( requestId ) ) { return }\n\n const request = this._awaitingRequest.get( requestId )\n this._awaitingRequest.delete( requestId )\n\n clearTimeout( request.timeoutId )\n\n const result = response.result\n if ( isDefined( result ) ) {\n\n if ( result.type === '_error' ) {\n request.reject( result.error )\n } else if ( result.type === '_data' ) {\n request.resolve( result.data )\n } else {\n request.resolve( result )\n }\n\n } else {\n request.resolve()\n }\n\n }\n\n /**\n *\n * @param origin\n * @param message\n * @private\n */\n \n onErrorFrom( origin, message ) {\n // Need to be reimplemented if needed\n this.logger.error( `[${ this._localOriginUri }]: the origin [${ origin.uri }] send error => ${ JSON.stringify( message.error, null, 4 ) }. Need you to reimplement this method ?` )\n }\n\n /**\n *\n * @param origin\n * @param message\n */\n \n onDataFrom( origin, message ) {\n // Need to be reimplemented if needed\n this.logger.log( `[${ this._localOriginUri }]: the origin [${ origin.uri }] send data => ${ JSON.stringify( message.data, null, 4 ) }. Need you to reimplement this method ?` )\n }\n\n /**\n *\n * @param origin\n * @param message\n */\n \n onMessageFrom( origin, message ) {\n // Need to be reimplemented if needed\n this.logger.log( `[${ this._localOriginUri }]: the origin [${ origin.uri }] send custom message => ${ JSON.stringify( message, null, 4 ) }. Need you to reimplement this method ?` )\n }\n\n onEventFrom( origin, event ) {\n const listeners = this._eventListeners[ event.name ]\n for ( const listener of listeners ) {\n listener( event.data )\n }\n }\n // Send\n\n /**\n *\n * @param originId\n * @param ready\n */\n postReadyTo( originId, ready ) {\n\n const _ready = ( ready && ready.constructor.isWebAPIMessageReady ) ? ready : new WebAPIMessageReady()\n this.postMessageTo( originId, _ready, true )\n\n }\n\n /**\n *\n * @param originId\n * @param request\n * @param params\n * @returns {Promise<unknown>}\n */\n postRequestTo( originId, request, ...params ) {\n\n const _request = ( request && request.constructor.isWebAPIMessageRequest ) ? request : new WebAPIMessageRequest( request, params )\n\n return new Promise( ( resolve, reject ) => {\n\n try {\n\n this._awaitingRequest.set( _request.id, {\n request: _request,\n resolve: resolve,\n reject: reject,\n timeoutId: setTimeout( () => {\n this._awaitingRequest.delete( _request.id )\n reject( new Error( `Request timeout for ${ JSON.stringify( _request, null, 4 ) }` ) )\n //Todo send abort to avoid future return that won't be processed\n }, this.requestTimeout )\n } )\n\n this.postMessageTo( originId, _request )\n\n } catch ( error ) {\n\n reject( error )\n\n }\n\n } )\n\n }\n\n /**\n *\n * @param originId\n * @param request\n * @param reponse\n */\n postResponseTo( originId, request, reponse ) {\n\n const _response = ( reponse && reponse.constructor.isWebAPIMessageResponse ) ? reponse : new WebAPIMessageResponse( request, reponse )\n this.postMessageTo( originId, _response )\n\n }\n\n /**\n *\n * @param originId\n * @param error {WebAPIMessageError|String}\n */\n postErrorTo( originId, error ) {\n\n const _error = ( error && error.constructor.isWebAPIMessageError ) ? error : new WebAPIMessageError( error )\n this.postMessageTo( originId, _error )\n\n }\n\n /**\n *\n * @param originId\n * @param data\n */\n postDataTo( originId, data ) {\n\n const _data = ( data && data.constructor.isWebAPIMessageData ) ? data : new WebAPIMessageData( data )\n this.postMessageTo( originId, _data )\n\n }\n\n /**\n *\n * @param originId\n * @param message\n * @param force\n */\n postMessageTo( originId, message, force = false ) {\n\n if ( isNotDefined( originId ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: Unable to post message to null or undefined origin id !` ) }\n if ( isNotDefined( message ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: Unable to post null or undefined message !` ) }\n\n const origin = this._getAllowedOriginBy( 'id', originId )\n if ( isNotDefined( origin ) ) { throw new ReferenceError( `[${ this._localOriginUri }]: Unable to retrieved origin with id: ${ originId }` ) }\n\n try {\n\n if ( !force && !origin.isReady ) {\n\n this.logger.warn( `[${ this._localOriginUri }]: Origin [${ origin.uri }] is not ready yet !` )\n origin.messageQueue.push( message )\n\n } else if ( force && !origin.window ) {\n\n this.logger.error( `[${ this._localOriginUri }]: Origin [${ origin.uri }] is unreachable !` )\n // origin.isUnreachable = true\n origin.messageQueue.push( message )\n\n } else {\n\n this.logger.log( `[${ this._localOriginUri }]: Send message of type '${ message.type }' to [${ origin.uri }]` )\n origin.window.postMessage( JSON.stringify( message ), origin.uri )\n\n }\n\n } catch ( error ) {\n\n this.logger.error( error )\n\n }\n\n }\n\n postEvent( name = 'DefaultEventName', data ) {\n\n const _data = ( data && data.constructor.isWebAPIMessageEvent ) ? data : new WebAPIMessageEvent( name, data )\n\n // Broadcast to all potential listener\n const allowedOrigins = this._allowedOrigins.filter( origin => origin !== '*' )\n for ( let i = 0 ; i < allowedOrigins.length ; i++ ) {\n const allowedOrigin = allowedOrigins[ i ]\n const originId = allowedOrigin.id\n this.postMessageTo( originId, _data )\n }\n\n }\n}\n\nexport { WebAPI }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport { WebAPIMessage } from './WebAPIMessage.js'\n\n/**\n * @class\n */\nclass WebAPIMessageProgress extends WebAPIMessage {\n\n static isWebAPIMessageProgress = true\n\n /**\n *\n * @param loaded\n * @param total\n */\n constructor( loaded = 0, total = 0 ) {\n super( '_progress' )\n\n this.lengthComputable = false\n this.loaded = loaded\n this.total = total\n }\n\n /**\n *\n * @returns {*}\n */\n get loaded() {\n return this._loaded\n }\n\n set loaded( value ) {\n this._loaded = value\n this._checkIfLengthComputable()\n }\n\n /**\n *\n * @returns {*}\n */\n get total() {\n return this._total\n }\n\n set total( value ) {\n this._total = value\n this._checkIfLengthComputable()\n }\n\n /**\n *\n * @private\n */\n _checkIfLengthComputable() {\n\n this.lengthComputable = false\n\n if (\n this._total > 0 &&\n this._total < Number.MAX_SAFE_INTEGER &&\n this._loaded >= 0 &&\n this._loaded < Number.MAX_SAFE_INTEGER\n ) {\n this.lengthComputable = true\n }\n\n }\n\n /**\n *\n * @returns {{loaded: *, lengthComputable: boolean, total: *}}\n */\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n lengthComputable: this.lengthComputable,\n loaded: this.loaded,\n total: this.total\n }\n }\n\n }\n\n}\n\nexport { WebAPIMessageProgress }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nclass WorkerMessage {\n\n static isWorkerMessage = true\n\n constructor( type ) {\n\n this.type = type\n\n }\n\n get type() {\n return this._type\n }\n\n set type( type ) {\n this._type = type\n }\n\n toJSON() {\n\n return {\n type: this.type\n }\n\n }\n\n}\n\nexport { WorkerMessage }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport { WorkerMessage } from './WorkerMessage.js'\n\nclass WorkerMessageData extends WorkerMessage {\n\n static isWorkerMessageData = true\n\n constructor( type, buffer ) {\n super( type )\n\n this.buffer = buffer\n }\n\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n buffer: this.buffer\n }\n }\n\n }\n\n}\n\nexport { WorkerMessageData }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport { WorkerMessage } from './WorkerMessage.js'\n\nclass WorkerMessageError extends WorkerMessage {\n\n static isWorkerMessageError = true\n\n constructor( error ) {\n super( 'error' )\n\n this.message = error.message\n this.stack = error.stack\n }\n\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n message: this.message,\n stack: this.stack\n }\n }\n\n }\n\n}\n\nexport { WorkerMessageError }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport { WorkerMessage } from './WorkerMessage.js'\n\nclass WorkerMessageProgress extends WorkerMessage {\n\n static isWorkerMessageProgress = true\n\n constructor( loaded = 0, total = 0 ) {\n super( 'progress' )\n\n this.lengthComputable = false\n this.loaded = loaded\n this.total = total\n }\n\n get loaded() {\n return this._loaded\n }\n\n set loaded( value ) {\n this._loaded = value\n this._checkIfLengthComputable()\n }\n\n get total() {\n return this._total\n }\n\n set total( value ) {\n this._total = value\n this._checkIfLengthComputable()\n }\n\n _checkIfLengthComputable() {\n\n this.lengthComputable = false\n\n if (\n this._total > 0 &&\n this._total < Number.MAX_SAFE_INTEGER &&\n this._loaded >= 0 &&\n this._loaded < Number.MAX_SAFE_INTEGER\n ) {\n this.lengthComputable = true\n }\n\n }\n\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n lengthComputable: this.lengthComputable,\n loaded: this.loaded,\n total: this.total\n }\n }\n\n }\n\n}\n\nexport { WorkerMessageProgress }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isArray,\n isArrayBuffer,\n isEmptyString,\n isNotArray,\n isNotDefined,\n isNotString\n} from 'itee-validators'\nimport { WorkerMessageData } from './messages/WorkerMessageData.js'\nimport { WorkerMessageError } from './messages/WorkerMessageError.js'\nimport { WorkerMessageProgress } from './messages/WorkerMessageProgress.js'\n\n/**\n * @class\n * @classdesc Base worker interface that allow messaging between callee and caller\n */\nclass AbstractWorker {\n\n /**\n *\n * @param progress\n */\n postProgress( progress ) {\n\n if ( progress.isWorkerMessageProgress ) {\n postMessage( progress.toJSON() )\n } else {\n postMessage( new WorkerMessageProgress( progress.loaded, progress.total ).toJSON() )\n }\n\n }\n\n /**\n *\n * @param error\n */\n postError( error ) {\n\n if ( error.isWorkerMessageError ) {\n postMessage( error.toJSON() )\n } else {\n postMessage( new WorkerMessageError( error ).toJSON() )\n }\n\n }\n\n /**\n *\n * @param type\n * @param arrayBuffer\n */\n postData( type, arrayBuffer ) {\n\n if ( isArray( arrayBuffer ) ) {\n postMessage( new WorkerMessageData( type, arrayBuffer ).toJSON(), [ ...arrayBuffer ] )\n } else if ( isArrayBuffer( arrayBuffer ) ) {\n postMessage( new WorkerMessageData( type, arrayBuffer ).toJSON(), [ arrayBuffer ] )\n } else {\n throw new TypeError( `AbstractWorker.postData: Unable to post data of type [${ type }].` )\n }\n\n }\n\n /**\n *\n * @param message\n * @returns {boolean}\n */\n onMessage( message ) {\n\n if ( isNotDefined( message ) ) {\n this.postError( new Error( 'Message event cannot be null or undefined !' ) )\n return true\n }\n\n const data = message.data\n if ( isNotDefined( data ) ) {\n this.postError( new Error( 'Message data cannot be null or undefined !' ) )\n return true\n }\n\n const dataType = data.type\n if ( isNotDefined( dataType ) ) {\n this.postError( new Error( 'Message data type cannot be null or undefined !' ) )\n return true\n }\n\n if ( data.type === 'methodCall' ) {\n\n const methodName = data.method\n if ( isNotDefined( methodName ) ) {\n this.postError( new Error( 'Message of type \"methodCall\" cannot have null, undefined or empty name !' ) )\n return true\n }\n\n if ( isNotString( methodName ) ) {\n this.postError( new Error( 'Message of type \"methodCall\" expect name to be a string !' ) )\n return true\n }\n\n if ( isEmptyString( methodName ) ) {\n this.postError( new Error( 'Message of type \"methodCall\" expect name to be a non empty string !' ) )\n return true\n }\n\n const methodParameters = data.parameters || []\n if ( isNotArray( methodParameters ) ) {\n this.postError( new Error( 'Message of type \"methodCall\" expect parameters to be an array !' ) )\n return true\n }\n\n this._invoke( methodName, methodParameters )\n return true\n\n }\n\n }\n\n /**\n *\n * @param name\n * @param parameters\n * @private\n */\n _invoke( name, parameters = [] ) {\n\n try {\n\n const result = this[ name ]( ...parameters )\n if ( result ) {\n postMessage( {\n type: name,\n result: result\n } )\n }\n\n } catch ( error ) {\n this.postError( error )\n }\n\n }\n\n}\n\nexport { AbstractWorker }\n","/**\n * @author [Tristan Valcke]{@link https://github.com/Itee}\n */\n\nimport {\n isNotArray,\n isNotString,\n isNull,\n isUndefined\n} from 'itee-validators'\nimport { WorkerMessage } from './WorkerMessage.js'\n\nclass WorkerMessageMethodCall extends WorkerMessage {\n\n static isWorkerMessageMethodCall = true\n\n constructor( method, parameters = [] ) {\n super( 'methodCall' )\n\n this.method = method\n this.parameters = parameters\n }\n\n get method() {\n return this._method\n }\n\n set method( value ) {\n if ( isNull( value ) ) { return }\n if ( isUndefined( value ) ) { return }\n if ( isNotString( value ) ) { return }\n\n this._method = value\n }\n\n get parameters() {\n return this._parameters\n }\n\n set parameters( value ) {\n if ( isNotArray( value ) ) { return }\n\n this._parameters = value\n }\n\n toJSON() {\n\n return {\n ...super.toJSON(),\n ...{\n method: this.method,\n parameters: this.parameters\n }\n }\n\n }\n\n}\n\nexport { WorkerMessageMethodCall }\n"],"names":["TLogger","uuidv4"],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACK,MAAC,UAAU,gBAAgB,MAAM,EAAE;AACxC,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;AAC3B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK;AACxB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACK,MAAC,cAAc,gBAAgB,MAAM,EAAE;;AAE5C;AACA,IAAI,QAAQ,YAAY,EAA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","x_google_ignoreList":[22,23,24,25]}