@babylonjs/core 5.0.0-beta.7 → 5.0.0-rc.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 (189) hide show
  1. package/Animations/animation.d.ts +6 -6
  2. package/Animations/animation.js +9 -5
  3. package/Animations/animation.js.map +1 -1
  4. package/Audio/sound.js +9 -3
  5. package/Audio/sound.js.map +1 -1
  6. package/Bones/skeleton.d.ts +0 -6
  7. package/Bones/skeleton.js +2 -14
  8. package/Bones/skeleton.js.map +1 -1
  9. package/Compat/compatibilityOptions.d.ts +9 -0
  10. package/Compat/compatibilityOptions.js +14 -0
  11. package/Compat/compatibilityOptions.js.map +1 -0
  12. package/Compat/index.d.ts +1 -0
  13. package/Compat/index.js +2 -0
  14. package/Compat/index.js.map +1 -0
  15. package/Culling/ray.js +2 -2
  16. package/Culling/ray.js.map +1 -1
  17. package/Debug/skeletonViewer.js +3 -4
  18. package/Debug/skeletonViewer.js.map +1 -1
  19. package/DeviceInput/Helpers/eventFactory.js +8 -1
  20. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  21. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +20 -5
  22. package/DeviceInput/InputDevices/deviceSourceManager.js +68 -7
  23. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  24. package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +15 -10
  25. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +25 -31
  26. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
  27. package/DeviceInput/InputDevices/webDeviceInputSystem.d.ts +8 -6
  28. package/DeviceInput/InputDevices/webDeviceInputSystem.js +113 -42
  29. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  30. package/Engines/Extensions/engine.multiview.js +0 -1
  31. package/Engines/Extensions/engine.multiview.js.map +1 -1
  32. package/Engines/Extensions/engine.query.d.ts +7 -0
  33. package/Engines/Extensions/engine.query.js +12 -0
  34. package/Engines/Extensions/engine.query.js.map +1 -1
  35. package/Engines/Extensions/engine.renderTarget.d.ts +5 -0
  36. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  37. package/Engines/Extensions/engine.views.d.ts +7 -0
  38. package/Engines/Extensions/engine.views.js +12 -0
  39. package/Engines/Extensions/engine.views.js.map +1 -1
  40. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  41. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  42. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  43. package/Engines/WebGPU/webgpuConstants.js +1 -0
  44. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  45. package/Engines/WebGPU/webgpuTextureHelper.js +5 -5
  46. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  47. package/Engines/engine.d.ts +45 -26
  48. package/Engines/index.d.ts +1 -0
  49. package/Engines/index.js +1 -0
  50. package/Engines/index.js.map +1 -1
  51. package/Engines/nativeEngine.js +12 -11
  52. package/Engines/nativeEngine.js.map +1 -1
  53. package/Engines/thinEngine.js +2 -2
  54. package/Engines/thinEngine.js.map +1 -1
  55. package/Engines/webgpuEngine.js +33 -22
  56. package/Engines/webgpuEngine.js.map +1 -1
  57. package/Events/keyboardEvents.d.ts +7 -1
  58. package/Events/keyboardEvents.js +11 -1
  59. package/Events/keyboardEvents.js.map +1 -1
  60. package/Gizmos/boundingBoxGizmo.js +0 -10
  61. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  62. package/Gizmos/gizmo.js +1 -1
  63. package/Gizmos/gizmo.js.map +1 -1
  64. package/Helpers/environmentHelper.js +2 -2
  65. package/Helpers/environmentHelper.js.map +1 -1
  66. package/Inputs/scene.inputManager.d.ts +0 -1
  67. package/Inputs/scene.inputManager.js +7 -7
  68. package/Inputs/scene.inputManager.js.map +1 -1
  69. package/Layers/effectLayer.d.ts +1 -0
  70. package/Layers/effectLayer.js +24 -0
  71. package/Layers/effectLayer.js.map +1 -1
  72. package/Lights/Shadows/shadowGenerator.js +5 -5
  73. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  74. package/Loading/Plugins/babylonFileLoader.js +0 -8
  75. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  76. package/Loading/sceneLoader.js +4 -3
  77. package/Loading/sceneLoader.js.map +1 -1
  78. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  79. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  80. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  81. package/Materials/Textures/dynamicTexture.js.map +1 -1
  82. package/Materials/Textures/texture.js +5 -5
  83. package/Materials/Textures/texture.js.map +1 -1
  84. package/Materials/materialPluginBase.d.ts +5 -0
  85. package/Materials/materialPluginBase.js +5 -0
  86. package/Materials/materialPluginBase.js.map +1 -1
  87. package/Materials/materialPluginEvent.d.ts +1 -0
  88. package/Materials/materialPluginEvent.js.map +1 -1
  89. package/Materials/materialPluginManager.d.ts +1 -0
  90. package/Materials/materialPluginManager.js +20 -15
  91. package/Materials/materialPluginManager.js.map +1 -1
  92. package/Materials/standardMaterial.js +1 -0
  93. package/Materials/standardMaterial.js.map +1 -1
  94. package/Maths/math.vector.d.ts +5 -0
  95. package/Maths/math.vector.js +11 -0
  96. package/Maths/math.vector.js.map +1 -1
  97. package/Meshes/Builders/boxBuilder.js +5 -4
  98. package/Meshes/Builders/boxBuilder.js.map +1 -1
  99. package/Meshes/Builders/capsuleBuilder.js +4 -3
  100. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  101. package/Meshes/Builders/cylinderBuilder.js +10 -7
  102. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  103. package/Meshes/Builders/decalBuilder.js +5 -2
  104. package/Meshes/Builders/decalBuilder.js.map +1 -1
  105. package/Meshes/Builders/discBuilder.js +3 -2
  106. package/Meshes/Builders/discBuilder.js.map +1 -1
  107. package/Meshes/Builders/goldbergBuilder.js +10 -1
  108. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  109. package/Meshes/Builders/groundBuilder.js +2 -1
  110. package/Meshes/Builders/groundBuilder.js.map +1 -1
  111. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  112. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  113. package/Meshes/Builders/planeBuilder.js +5 -4
  114. package/Meshes/Builders/planeBuilder.js.map +1 -1
  115. package/Meshes/Builders/polygonBuilder.js +8 -3
  116. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  117. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  118. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  119. package/Meshes/Builders/ribbonBuilder.js +4 -3
  120. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  121. package/Meshes/Builders/sphereBuilder.js +2 -1
  122. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  123. package/Meshes/Builders/tiledBoxBuilder.js +4 -0
  124. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  125. package/Meshes/Builders/torusBuilder.js +2 -1
  126. package/Meshes/Builders/torusBuilder.js.map +1 -1
  127. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  128. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  129. package/Meshes/abstractMesh.d.ts +9 -3
  130. package/Meshes/abstractMesh.js +33 -31
  131. package/Meshes/abstractMesh.js.map +1 -1
  132. package/Meshes/geometry.js +31 -0
  133. package/Meshes/geometry.js.map +1 -1
  134. package/Meshes/instancedMesh.js +12 -10
  135. package/Meshes/instancedMesh.js.map +1 -1
  136. package/Meshes/mesh.d.ts +1 -1
  137. package/Meshes/mesh.js +52 -51
  138. package/Meshes/mesh.js.map +1 -1
  139. package/Meshes/mesh.vertexData.d.ts +2 -2
  140. package/Meshes/mesh.vertexData.js +100 -76
  141. package/Meshes/mesh.vertexData.js.map +1 -1
  142. package/Meshes/transformNode.d.ts +0 -2
  143. package/Meshes/transformNode.js +6 -5
  144. package/Meshes/transformNode.js.map +1 -1
  145. package/Misc/decorators.d.ts +1 -1
  146. package/Misc/decorators.js +8 -1
  147. package/Misc/decorators.js.map +1 -1
  148. package/Misc/deepCopier.js +3 -3
  149. package/Misc/deepCopier.js.map +1 -1
  150. package/Misc/error.d.ts +51 -0
  151. package/Misc/error.js +66 -0
  152. package/Misc/error.js.map +1 -0
  153. package/Misc/fileTools.d.ts +4 -4
  154. package/Misc/fileTools.js +7 -7
  155. package/Misc/fileTools.js.map +1 -1
  156. package/Misc/index.d.ts +1 -0
  157. package/Misc/index.js +1 -0
  158. package/Misc/index.js.map +1 -1
  159. package/Particles/particleSystem.d.ts +13 -1
  160. package/Particles/particleSystem.js +27 -1
  161. package/Particles/particleSystem.js.map +1 -1
  162. package/Rendering/prePassRenderer.js +12 -2
  163. package/Rendering/prePassRenderer.js.map +1 -1
  164. package/Rendering/subSurfaceConfiguration.js +1 -1
  165. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  166. package/Rendering/utilityLayerRenderer.js +2 -0
  167. package/Rendering/utilityLayerRenderer.js.map +1 -1
  168. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  169. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  170. package/Shaders/background.vertex.js +1 -1
  171. package/Shaders/background.vertex.js.map +1 -1
  172. package/Shaders/pbr.vertex.js +1 -1
  173. package/Shaders/pbr.vertex.js.map +1 -1
  174. package/XR/features/WebXRNearInteraction.js +4 -2
  175. package/XR/features/WebXRNearInteraction.js.map +1 -1
  176. package/assetContainer.js +1 -4
  177. package/assetContainer.js.map +1 -1
  178. package/index.d.ts +1 -0
  179. package/index.js +1 -0
  180. package/index.js.map +1 -1
  181. package/package.json +10 -4
  182. package/scene.d.ts +1 -10
  183. package/scene.js +23 -43
  184. package/scene.js.map +1 -1
  185. package/types.d.ts +1 -1
  186. package/types.js.map +1 -1
  187. package/Misc/baseError.d.ts +0 -7
  188. package/Misc/baseError.js +0 -18
  189. package/Misc/baseError.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/decorators.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tags } from \"../Misc/tags\";\r\nimport { Nullable } from \"../types\";\r\nimport { Quaternion, Vector2, Vector3, Matrix } from \"../Maths/math.vector\";\r\nimport { _WarnImport } from './devTools';\r\nimport { IAnimatable } from '../Animations/animatable.interface';\r\nimport { Color4, Color3 } from '../Maths/math.color';\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Camera = import(\"../Cameras/camera\").Camera;\r\n\r\ndeclare type ImageProcessingConfiguration = import(\"../Materials/imageProcessingConfiguration\").ImageProcessingConfiguration;\r\ndeclare type FresnelParameters = import(\"../Materials/fresnelParameters\").FresnelParameters;\r\ndeclare type ColorCurves = import(\"../Materials/colorCurves\").ColorCurves;\r\ndeclare type BaseTexture = import(\"../Materials/Textures/baseTexture\").BaseTexture;\r\n\r\nvar __decoratorInitialStore = {};\r\nvar __mergedStore = {};\r\n\r\nvar _copySource = function <T>(creationFunction: () => T, source: T, instanciate: boolean): T {\r\n var destination = creationFunction();\r\n\r\n // Tags\r\n if (Tags) {\r\n Tags.AddTagsTo(destination, (<any>source).tags);\r\n }\r\n\r\n var classStore = getMergedStore(destination);\r\n\r\n // Properties\r\n for (var property in classStore) {\r\n var propertyDescriptor = classStore[property];\r\n var sourceProperty = (<any>source)[property];\r\n var propertyType = propertyDescriptor.type;\r\n\r\n if (sourceProperty !== undefined && sourceProperty !== null && (property !== \"uniqueId\" || SerializationHelper.AllowLoadingUniqueId)) {\r\n switch (propertyType) {\r\n case 0: // Value\r\n case 6: // Mesh reference\r\n case 11: // Camera reference\r\n (<any>destination)[property] = sourceProperty;\r\n break;\r\n case 1: // Texture\r\n (<any>destination)[property] = (instanciate || sourceProperty.isRenderTarget) ? sourceProperty : sourceProperty.clone();\r\n break;\r\n case 2: // Color3\r\n case 3: // FresnelParameters\r\n case 4: // Vector2\r\n case 5: // Vector3\r\n case 7: // Color Curves\r\n case 10: // Quaternion\r\n case 12: // Matrix\r\n (<any>destination)[property] = instanciate ? sourceProperty : sourceProperty.clone();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return destination;\r\n};\r\n\r\nfunction getDirectStore(target: any): any {\r\n var classKey = target.getClassName();\r\n\r\n if (!(<any>__decoratorInitialStore)[classKey]) {\r\n (<any>__decoratorInitialStore)[classKey] = {};\r\n }\r\n\r\n return (<any>__decoratorInitialStore)[classKey];\r\n}\r\n\r\n/**\r\n * Return the list of properties flagged as serializable\r\n * @param target: host object\r\n */\r\nfunction getMergedStore(target: any): any {\r\n let classKey = target.getClassName();\r\n\r\n if ((<any>__mergedStore)[classKey]) {\r\n return (<any>__mergedStore)[classKey];\r\n }\r\n\r\n (<any>__mergedStore)[classKey] = {};\r\n\r\n let store = (<any>__mergedStore)[classKey];\r\n let currentTarget = target;\r\n let currentKey = classKey;\r\n while (currentKey) {\r\n let initialStore = (<any>__decoratorInitialStore)[currentKey];\r\n for (var property in initialStore) {\r\n store[property] = initialStore[property];\r\n }\r\n\r\n let parent: any;\r\n let done = false;\r\n\r\n do {\r\n parent = Object.getPrototypeOf(currentTarget);\r\n if (!parent.getClassName) {\r\n done = true;\r\n break;\r\n }\r\n\r\n if (parent.getClassName() !== currentKey) {\r\n break;\r\n }\r\n\r\n currentTarget = parent;\r\n }\r\n while (parent);\r\n\r\n if (done) {\r\n break;\r\n }\r\n\r\n currentKey = parent.getClassName();\r\n currentTarget = parent;\r\n }\r\n\r\n return store;\r\n}\r\n\r\nfunction generateSerializableMember(type: number, sourceName?: string) {\r\n return (target: any, propertyKey: string | symbol) => {\r\n var classStore = getDirectStore(target);\r\n\r\n if (!classStore[propertyKey]) {\r\n classStore[propertyKey] = { type: type, sourceName: sourceName };\r\n }\r\n };\r\n}\r\n\r\nfunction generateExpandMember(setCallback: string, targetKey: Nullable<string> = null) {\r\n return (target: any, propertyKey: string) => {\r\n var key = targetKey || (\"_\" + propertyKey);\r\n Object.defineProperty(target, propertyKey, {\r\n get: function (this: any) {\r\n return this[key];\r\n },\r\n set: function (this: any, value) {\r\n if (this[key] === value) {\r\n return;\r\n }\r\n this[key] = value;\r\n\r\n target[setCallback].apply(this);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n };\r\n}\r\n\r\nexport function expandToProperty(callback: string, targetKey: Nullable<string> = null) {\r\n return generateExpandMember(callback, targetKey);\r\n}\r\n\r\nexport function serialize(sourceName?: string) {\r\n return generateSerializableMember(0, sourceName); // value member\r\n}\r\n\r\nexport function serializeAsTexture(sourceName?: string) {\r\n return generateSerializableMember(1, sourceName); // texture member\r\n}\r\n\r\nexport function serializeAsColor3(sourceName?: string) {\r\n return generateSerializableMember(2, sourceName); // color3 member\r\n}\r\n\r\nexport function serializeAsFresnelParameters(sourceName?: string) {\r\n return generateSerializableMember(3, sourceName); // fresnel parameters member\r\n}\r\n\r\nexport function serializeAsVector2(sourceName?: string) {\r\n return generateSerializableMember(4, sourceName); // vector2 member\r\n}\r\n\r\nexport function serializeAsVector3(sourceName?: string) {\r\n return generateSerializableMember(5, sourceName); // vector3 member\r\n}\r\n\r\nexport function serializeAsMeshReference(sourceName?: string) {\r\n return generateSerializableMember(6, sourceName); // mesh reference member\r\n}\r\n\r\nexport function serializeAsColorCurves(sourceName?: string) {\r\n return generateSerializableMember(7, sourceName); // color curves\r\n}\r\n\r\nexport function serializeAsColor4(sourceName?: string) {\r\n return generateSerializableMember(8, sourceName); // color 4\r\n}\r\n\r\nexport function serializeAsImageProcessingConfiguration(sourceName?: string) {\r\n return generateSerializableMember(9, sourceName); // image processing\r\n}\r\n\r\nexport function serializeAsQuaternion(sourceName?: string) {\r\n return generateSerializableMember(10, sourceName); // quaternion member\r\n}\r\n\r\nexport function serializeAsMatrix(sourceName?: string) {\r\n return generateSerializableMember(12, sourceName); // matrix member\r\n}\r\n\r\n/**\r\n * Decorator used to define property that can be serialized as reference to a camera\r\n * @param sourceName defines the name of the property to decorate\r\n */\r\nexport function serializeAsCameraReference(sourceName?: string) {\r\n return generateSerializableMember(11, sourceName); // camera reference member\r\n}\r\n\r\n/**\r\n * Class used to help serialization objects\r\n */\r\nexport class SerializationHelper {\r\n /**\r\n * Gets or sets a boolean to indicate if the UniqueId property should be serialized\r\n */\r\n public static AllowLoadingUniqueId = false;\r\n\r\n /** @hidden */\r\n public static _ImageProcessingConfigurationParser = (sourceProperty: any): ImageProcessingConfiguration => {\r\n throw _WarnImport(\"ImageProcessingConfiguration\");\r\n }\r\n\r\n /** @hidden */\r\n public static _FresnelParametersParser = (sourceProperty: any): FresnelParameters => {\r\n throw _WarnImport(\"FresnelParameters\");\r\n }\r\n\r\n /** @hidden */\r\n public static _ColorCurvesParser = (sourceProperty: any): ColorCurves => {\r\n throw _WarnImport(\"ColorCurves\");\r\n }\r\n\r\n /** @hidden */\r\n public static _TextureParser = (sourceProperty: any, scene: Scene, rootUrl: string): Nullable<BaseTexture> => {\r\n throw _WarnImport(\"Texture\");\r\n }\r\n\r\n /**\r\n * Appends the serialized animations from the source animations\r\n * @param source Source containing the animations\r\n * @param destination Target to store the animations\r\n */\r\n public static AppendSerializedAnimations(source: IAnimatable, destination: any): void {\r\n if (source.animations) {\r\n destination.animations = [];\r\n for (var animationIndex = 0; animationIndex < source.animations.length; animationIndex++) {\r\n var animation = source.animations[animationIndex];\r\n\r\n destination.animations.push(animation.serialize());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Static function used to serialized a specific entity\r\n * @param entity defines the entity to serialize\r\n * @param serializationObject defines the optional target object where serialization data will be stored\r\n * @returns a JSON compatible object representing the serialization of the entity\r\n */\r\n public static Serialize<T>(entity: T, serializationObject?: any): any {\r\n if (!serializationObject) {\r\n serializationObject = {};\r\n }\r\n\r\n // Tags\r\n if (Tags) {\r\n serializationObject.tags = Tags.GetTags(entity);\r\n }\r\n\r\n var serializedProperties = getMergedStore(entity);\r\n\r\n // Properties\r\n for (var property in serializedProperties) {\r\n var propertyDescriptor = serializedProperties[property];\r\n var targetPropertyName = propertyDescriptor.sourceName || property;\r\n var propertyType = propertyDescriptor.type;\r\n var sourceProperty = (<any>entity)[property];\r\n\r\n if (sourceProperty !== undefined && sourceProperty !== null && (property !== \"uniqueId\" || SerializationHelper.AllowLoadingUniqueId)) {\r\n switch (propertyType) {\r\n case 0: // Value\r\n serializationObject[targetPropertyName] = sourceProperty;\r\n break;\r\n case 1: // Texture\r\n serializationObject[targetPropertyName] = sourceProperty.serialize();\r\n break;\r\n case 2: // Color3\r\n serializationObject[targetPropertyName] = sourceProperty.asArray();\r\n break;\r\n case 3: // FresnelParameters\r\n serializationObject[targetPropertyName] = sourceProperty.serialize();\r\n break;\r\n case 4: // Vector2\r\n serializationObject[targetPropertyName] = sourceProperty.asArray();\r\n break;\r\n case 5: // Vector3\r\n serializationObject[targetPropertyName] = sourceProperty.asArray();\r\n break;\r\n case 6: // Mesh reference\r\n serializationObject[targetPropertyName] = sourceProperty.id;\r\n break;\r\n case 7: // Color Curves\r\n serializationObject[targetPropertyName] = sourceProperty.serialize();\r\n break;\r\n case 8: // Color 4\r\n serializationObject[targetPropertyName] = (<Color4>sourceProperty).asArray();\r\n break;\r\n case 9: // Image Processing\r\n serializationObject[targetPropertyName] = (<ImageProcessingConfiguration>sourceProperty).serialize();\r\n break;\r\n case 10: // Quaternion\r\n serializationObject[targetPropertyName] = (<Quaternion>sourceProperty).asArray();\r\n break;\r\n case 11: // Camera reference\r\n serializationObject[targetPropertyName] = (<Camera>sourceProperty).id;\r\n break;\r\n case 12: // Matrix\r\n serializationObject[targetPropertyName] = (<Matrix>sourceProperty).asArray();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a new entity from a serialization data object\r\n * @param creationFunction defines a function used to instanciated the new entity\r\n * @param source defines the source serialization data\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url for resources\r\n * @returns a new entity\r\n */\r\n public static Parse<T>(creationFunction: () => T, source: any, scene: Nullable<Scene>, rootUrl: Nullable<string> = null): T {\r\n var destination = creationFunction();\r\n\r\n if (!rootUrl) {\r\n rootUrl = \"\";\r\n }\r\n\r\n // Tags\r\n if (Tags) {\r\n Tags.AddTagsTo(destination, source.tags);\r\n }\r\n\r\n var classStore = getMergedStore(destination);\r\n\r\n // Properties\r\n for (var property in classStore) {\r\n var propertyDescriptor = classStore[property];\r\n var sourceProperty = source[propertyDescriptor.sourceName || property];\r\n var propertyType = propertyDescriptor.type;\r\n\r\n if (sourceProperty !== undefined && sourceProperty !== null && (property !== \"uniqueId\" || SerializationHelper.AllowLoadingUniqueId)) {\r\n var dest = <any>destination;\r\n switch (propertyType) {\r\n case 0: // Value\r\n dest[property] = sourceProperty;\r\n break;\r\n case 1: // Texture\r\n if (scene) {\r\n dest[property] = SerializationHelper._TextureParser(sourceProperty, scene, rootUrl);\r\n }\r\n break;\r\n case 2: // Color3\r\n dest[property] = Color3.FromArray(sourceProperty);\r\n break;\r\n case 3: // FresnelParameters\r\n dest[property] = SerializationHelper._FresnelParametersParser(sourceProperty);\r\n break;\r\n case 4: // Vector2\r\n dest[property] = Vector2.FromArray(sourceProperty);\r\n break;\r\n case 5: // Vector3\r\n dest[property] = Vector3.FromArray(sourceProperty);\r\n break;\r\n case 6: // Mesh reference\r\n if (scene) {\r\n dest[property] = scene.getLastMeshById(sourceProperty);\r\n }\r\n break;\r\n case 7: // Color Curves\r\n dest[property] = SerializationHelper._ColorCurvesParser(sourceProperty);\r\n break;\r\n case 8: // Color 4\r\n dest[property] = Color4.FromArray(sourceProperty);\r\n break;\r\n case 9: // Image Processing\r\n dest[property] = SerializationHelper._ImageProcessingConfigurationParser(sourceProperty);\r\n break;\r\n case 10: // Quaternion\r\n dest[property] = Quaternion.FromArray(sourceProperty);\r\n break;\r\n case 11: // Camera reference\r\n if (scene) {\r\n dest[property] = scene.getCameraById(sourceProperty);\r\n }\r\n case 12: // Matrix\r\n dest[property] = Matrix.FromArray(sourceProperty);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n /**\r\n * Clones an object\r\n * @param creationFunction defines the function used to instanciate the new object\r\n * @param source defines the source object\r\n * @returns the cloned object\r\n */\r\n public static Clone<T>(creationFunction: () => T, source: T): T {\r\n return _copySource(creationFunction, source, false);\r\n }\r\n\r\n /**\r\n * Instanciates a new object based on a source one (some data will be shared between both object)\r\n * @param creationFunction defines the function used to instanciate the new object\r\n * @param source defines the source object\r\n * @returns the new object\r\n */\r\n public static Instanciate<T>(creationFunction: () => T, source: T): T {\r\n return _copySource(creationFunction, source, true);\r\n }\r\n}\r\n\r\n/** @hidden */\r\ndeclare const _native: any;\r\n\r\n/**\r\n * Decorator used to redirect a function to a native implementation if available.\r\n * @hidden\r\n */\r\nexport function nativeOverride<T extends (...params: any) => boolean>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...params: Parameters<T>) => unknown>, predicate?: T) {\r\n // Cache the original JS function for later.\r\n const jsFunc = descriptor.value!;\r\n\r\n // Override the JS function to check for a native override on first invocation. Setting descriptor.value overrides the function at the early stage of code being loaded/imported.\r\n descriptor.value = (...params: Parameters<T>): unknown => {\r\n // Assume the resolved function will be the original JS function, then we will check for the Babylon Native context.\r\n let func = jsFunc;\r\n\r\n // Check if we are executing in a Babylon Native context (e.g. check the presence of the _native global property) and if so also check if a function override is available.\r\n if (typeof _native !== 'undefined' && _native[propertyKey]) {\r\n const nativeFunc = _native[propertyKey] as (...params: Parameters<T>) => unknown;\r\n // If a predicate was provided, then we'll need to invoke the predicate on each invocation of the underlying function to determine whether to call the native function or the JS function.\r\n if (predicate) {\r\n // The resolved function will execute the predicate and then either execute the native function or the JS function.\r\n func = (...params: Parameters<T>) => predicate(...params) ? nativeFunc(...params) : jsFunc(...params);\r\n } else {\r\n // The resolved function will directly execute the native function.\r\n func = nativeFunc;\r\n }\r\n }\r\n\r\n // Override the JS function again with the final resolved target function.\r\n target[propertyKey] = func;\r\n\r\n // The JS function has now been overridden based on whether we're executing in the context of Babylon Native, but we still need to invoke that function.\r\n // Future invocations of the function will just directly invoke the final overridden function, not any of the decorator setup logic above.\r\n return func(...params);\r\n };\r\n}\r\n\r\n/**\r\n * Decorator factory that applies the nativeOverride decorator, but determines whether to redirect to the native implementation based on a filter function that evaluates the function arguments.\r\n * @example @nativeOverride.filter((...[arg1]: Parameters<typeof someClass.someMethod>) => arg1.length > 20)\r\n * public someMethod(arg1: string, arg2: number): string {\r\n * @hidden\r\n */\r\nnativeOverride.filter = function<T extends (...params: any) => boolean>(predicate: T) {\r\n return (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...params: Parameters<T>) => unknown>) => nativeOverride(target, propertyKey, descriptor, predicate);\r\n};\r\n"]}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/decorators.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tags } from \"../Misc/tags\";\r\nimport { Nullable } from \"../types\";\r\nimport { Quaternion, Vector2, Vector3, Matrix } from \"../Maths/math.vector\";\r\nimport { _WarnImport } from './devTools';\r\nimport { IAnimatable } from '../Animations/animatable.interface';\r\nimport { Color4, Color3 } from '../Maths/math.color';\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Camera = import(\"../Cameras/camera\").Camera;\r\n\r\ndeclare type ImageProcessingConfiguration = import(\"../Materials/imageProcessingConfiguration\").ImageProcessingConfiguration;\r\ndeclare type FresnelParameters = import(\"../Materials/fresnelParameters\").FresnelParameters;\r\ndeclare type ColorCurves = import(\"../Materials/colorCurves\").ColorCurves;\r\ndeclare type BaseTexture = import(\"../Materials/Textures/baseTexture\").BaseTexture;\r\n\r\nvar __decoratorInitialStore = {};\r\nvar __mergedStore = {};\r\n\r\nvar _copySource = function <T>(creationFunction: () => T, source: T, instanciate: boolean): T {\r\n var destination = creationFunction();\r\n\r\n // Tags\r\n if (Tags) {\r\n Tags.AddTagsTo(destination, (<any>source).tags);\r\n }\r\n\r\n var classStore = getMergedStore(destination);\r\n\r\n // Properties\r\n for (var property in classStore) {\r\n var propertyDescriptor = classStore[property];\r\n var sourceProperty = (<any>source)[property];\r\n var propertyType = propertyDescriptor.type;\r\n\r\n if (sourceProperty !== undefined && sourceProperty !== null && (property !== \"uniqueId\" || SerializationHelper.AllowLoadingUniqueId)) {\r\n switch (propertyType) {\r\n case 0: // Value\r\n case 6: // Mesh reference\r\n case 11: // Camera reference\r\n (<any>destination)[property] = sourceProperty;\r\n break;\r\n case 1: // Texture\r\n (<any>destination)[property] = (instanciate || sourceProperty.isRenderTarget) ? sourceProperty : sourceProperty.clone();\r\n break;\r\n case 2: // Color3\r\n case 3: // FresnelParameters\r\n case 4: // Vector2\r\n case 5: // Vector3\r\n case 7: // Color Curves\r\n case 10: // Quaternion\r\n case 12: // Matrix\r\n (<any>destination)[property] = instanciate ? sourceProperty : sourceProperty.clone();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return destination;\r\n};\r\n\r\nfunction getDirectStore(target: any): any {\r\n var classKey = target.getClassName();\r\n\r\n if (!(<any>__decoratorInitialStore)[classKey]) {\r\n (<any>__decoratorInitialStore)[classKey] = {};\r\n }\r\n\r\n return (<any>__decoratorInitialStore)[classKey];\r\n}\r\n\r\n/**\r\n * Return the list of properties flagged as serializable\r\n * @param target: host object\r\n */\r\nfunction getMergedStore(target: any): any {\r\n let classKey = target.getClassName();\r\n\r\n if ((<any>__mergedStore)[classKey]) {\r\n return (<any>__mergedStore)[classKey];\r\n }\r\n\r\n (<any>__mergedStore)[classKey] = {};\r\n\r\n let store = (<any>__mergedStore)[classKey];\r\n let currentTarget = target;\r\n let currentKey = classKey;\r\n while (currentKey) {\r\n let initialStore = (<any>__decoratorInitialStore)[currentKey];\r\n for (var property in initialStore) {\r\n store[property] = initialStore[property];\r\n }\r\n\r\n let parent: any;\r\n let done = false;\r\n\r\n do {\r\n parent = Object.getPrototypeOf(currentTarget);\r\n if (!parent.getClassName) {\r\n done = true;\r\n break;\r\n }\r\n\r\n if (parent.getClassName() !== currentKey) {\r\n break;\r\n }\r\n\r\n currentTarget = parent;\r\n }\r\n while (parent);\r\n\r\n if (done) {\r\n break;\r\n }\r\n\r\n currentKey = parent.getClassName();\r\n currentTarget = parent;\r\n }\r\n\r\n return store;\r\n}\r\n\r\nfunction generateSerializableMember(type: number, sourceName?: string) {\r\n return (target: any, propertyKey: string | symbol) => {\r\n var classStore = getDirectStore(target);\r\n\r\n if (!classStore[propertyKey]) {\r\n classStore[propertyKey] = { type: type, sourceName: sourceName };\r\n }\r\n };\r\n}\r\n\r\nfunction generateExpandMember(setCallback: string, targetKey: Nullable<string> = null) {\r\n return (target: any, propertyKey: string) => {\r\n var key = targetKey || (\"_\" + propertyKey);\r\n Object.defineProperty(target, propertyKey, {\r\n get: function (this: any) {\r\n return this[key];\r\n },\r\n set: function (this: any, value) {\r\n // does this object (i.e. vector3) has an equals function? use it!\r\n // Note - not using \"with epsilon\" here, it is expected te behave like the internal cache does.\r\n if (typeof this.equals === \"function\") {\r\n if (this.equals(value)) {\r\n return;\r\n }\r\n }\r\n if (this[key] === value) {\r\n return;\r\n }\r\n this[key] = value;\r\n\r\n target[setCallback].apply(this);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n };\r\n}\r\n\r\nexport function expandToProperty(callback: string, targetKey: Nullable<string> = null) {\r\n return generateExpandMember(callback, targetKey);\r\n}\r\n\r\nexport function serialize(sourceName?: string) {\r\n return generateSerializableMember(0, sourceName); // value member\r\n}\r\n\r\nexport function serializeAsTexture(sourceName?: string) {\r\n return generateSerializableMember(1, sourceName); // texture member\r\n}\r\n\r\nexport function serializeAsColor3(sourceName?: string) {\r\n return generateSerializableMember(2, sourceName); // color3 member\r\n}\r\n\r\nexport function serializeAsFresnelParameters(sourceName?: string) {\r\n return generateSerializableMember(3, sourceName); // fresnel parameters member\r\n}\r\n\r\nexport function serializeAsVector2(sourceName?: string) {\r\n return generateSerializableMember(4, sourceName); // vector2 member\r\n}\r\n\r\nexport function serializeAsVector3(sourceName?: string) {\r\n return generateSerializableMember(5, sourceName); // vector3 member\r\n}\r\n\r\nexport function serializeAsMeshReference(sourceName?: string) {\r\n return generateSerializableMember(6, sourceName); // mesh reference member\r\n}\r\n\r\nexport function serializeAsColorCurves(sourceName?: string) {\r\n return generateSerializableMember(7, sourceName); // color curves\r\n}\r\n\r\nexport function serializeAsColor4(sourceName?: string) {\r\n return generateSerializableMember(8, sourceName); // color 4\r\n}\r\n\r\nexport function serializeAsImageProcessingConfiguration(sourceName?: string) {\r\n return generateSerializableMember(9, sourceName); // image processing\r\n}\r\n\r\nexport function serializeAsQuaternion(sourceName?: string) {\r\n return generateSerializableMember(10, sourceName); // quaternion member\r\n}\r\n\r\nexport function serializeAsMatrix(sourceName?: string) {\r\n return generateSerializableMember(12, sourceName); // matrix member\r\n}\r\n\r\n/**\r\n * Decorator used to define property that can be serialized as reference to a camera\r\n * @param sourceName defines the name of the property to decorate\r\n */\r\nexport function serializeAsCameraReference(sourceName?: string) {\r\n return generateSerializableMember(11, sourceName); // camera reference member\r\n}\r\n\r\n/**\r\n * Class used to help serialization objects\r\n */\r\nexport class SerializationHelper {\r\n /**\r\n * Gets or sets a boolean to indicate if the UniqueId property should be serialized\r\n */\r\n public static AllowLoadingUniqueId = false;\r\n\r\n /** @hidden */\r\n public static _ImageProcessingConfigurationParser = (sourceProperty: any): ImageProcessingConfiguration => {\r\n throw _WarnImport(\"ImageProcessingConfiguration\");\r\n }\r\n\r\n /** @hidden */\r\n public static _FresnelParametersParser = (sourceProperty: any): FresnelParameters => {\r\n throw _WarnImport(\"FresnelParameters\");\r\n }\r\n\r\n /** @hidden */\r\n public static _ColorCurvesParser = (sourceProperty: any): ColorCurves => {\r\n throw _WarnImport(\"ColorCurves\");\r\n }\r\n\r\n /** @hidden */\r\n public static _TextureParser = (sourceProperty: any, scene: Scene, rootUrl: string): Nullable<BaseTexture> => {\r\n throw _WarnImport(\"Texture\");\r\n }\r\n\r\n /**\r\n * Appends the serialized animations from the source animations\r\n * @param source Source containing the animations\r\n * @param destination Target to store the animations\r\n */\r\n public static AppendSerializedAnimations(source: IAnimatable, destination: any): void {\r\n if (source.animations) {\r\n destination.animations = [];\r\n for (var animationIndex = 0; animationIndex < source.animations.length; animationIndex++) {\r\n var animation = source.animations[animationIndex];\r\n\r\n destination.animations.push(animation.serialize());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Static function used to serialized a specific entity\r\n * @param entity defines the entity to serialize\r\n * @param serializationObject defines the optional target object where serialization data will be stored\r\n * @returns a JSON compatible object representing the serialization of the entity\r\n */\r\n public static Serialize<T>(entity: T, serializationObject?: any): any {\r\n if (!serializationObject) {\r\n serializationObject = {};\r\n }\r\n\r\n // Tags\r\n if (Tags) {\r\n serializationObject.tags = Tags.GetTags(entity);\r\n }\r\n\r\n var serializedProperties = getMergedStore(entity);\r\n\r\n // Properties\r\n for (var property in serializedProperties) {\r\n var propertyDescriptor = serializedProperties[property];\r\n var targetPropertyName = propertyDescriptor.sourceName || property;\r\n var propertyType = propertyDescriptor.type;\r\n var sourceProperty = (<any>entity)[property];\r\n\r\n if (sourceProperty !== undefined && sourceProperty !== null && (property !== \"uniqueId\" || SerializationHelper.AllowLoadingUniqueId)) {\r\n switch (propertyType) {\r\n case 0: // Value\r\n serializationObject[targetPropertyName] = sourceProperty;\r\n break;\r\n case 1: // Texture\r\n serializationObject[targetPropertyName] = sourceProperty.serialize();\r\n break;\r\n case 2: // Color3\r\n serializationObject[targetPropertyName] = sourceProperty.asArray();\r\n break;\r\n case 3: // FresnelParameters\r\n serializationObject[targetPropertyName] = sourceProperty.serialize();\r\n break;\r\n case 4: // Vector2\r\n serializationObject[targetPropertyName] = sourceProperty.asArray();\r\n break;\r\n case 5: // Vector3\r\n serializationObject[targetPropertyName] = sourceProperty.asArray();\r\n break;\r\n case 6: // Mesh reference\r\n serializationObject[targetPropertyName] = sourceProperty.id;\r\n break;\r\n case 7: // Color Curves\r\n serializationObject[targetPropertyName] = sourceProperty.serialize();\r\n break;\r\n case 8: // Color 4\r\n serializationObject[targetPropertyName] = (<Color4>sourceProperty).asArray();\r\n break;\r\n case 9: // Image Processing\r\n serializationObject[targetPropertyName] = (<ImageProcessingConfiguration>sourceProperty).serialize();\r\n break;\r\n case 10: // Quaternion\r\n serializationObject[targetPropertyName] = (<Quaternion>sourceProperty).asArray();\r\n break;\r\n case 11: // Camera reference\r\n serializationObject[targetPropertyName] = (<Camera>sourceProperty).id;\r\n break;\r\n case 12: // Matrix\r\n serializationObject[targetPropertyName] = (<Matrix>sourceProperty).asArray();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a new entity from a serialization data object\r\n * @param creationFunction defines a function used to instanciated the new entity\r\n * @param source defines the source serialization data\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url for resources\r\n * @returns a new entity\r\n */\r\n public static Parse<T>(creationFunction: () => T, source: any, scene: Nullable<Scene>, rootUrl: Nullable<string> = null): T {\r\n var destination = creationFunction();\r\n\r\n if (!rootUrl) {\r\n rootUrl = \"\";\r\n }\r\n\r\n // Tags\r\n if (Tags) {\r\n Tags.AddTagsTo(destination, source.tags);\r\n }\r\n\r\n var classStore = getMergedStore(destination);\r\n\r\n // Properties\r\n for (var property in classStore) {\r\n var propertyDescriptor = classStore[property];\r\n var sourceProperty = source[propertyDescriptor.sourceName || property];\r\n var propertyType = propertyDescriptor.type;\r\n\r\n if (sourceProperty !== undefined && sourceProperty !== null && (property !== \"uniqueId\" || SerializationHelper.AllowLoadingUniqueId)) {\r\n var dest = <any>destination;\r\n switch (propertyType) {\r\n case 0: // Value\r\n dest[property] = sourceProperty;\r\n break;\r\n case 1: // Texture\r\n if (scene) {\r\n dest[property] = SerializationHelper._TextureParser(sourceProperty, scene, rootUrl);\r\n }\r\n break;\r\n case 2: // Color3\r\n dest[property] = Color3.FromArray(sourceProperty);\r\n break;\r\n case 3: // FresnelParameters\r\n dest[property] = SerializationHelper._FresnelParametersParser(sourceProperty);\r\n break;\r\n case 4: // Vector2\r\n dest[property] = Vector2.FromArray(sourceProperty);\r\n break;\r\n case 5: // Vector3\r\n dest[property] = Vector3.FromArray(sourceProperty);\r\n break;\r\n case 6: // Mesh reference\r\n if (scene) {\r\n dest[property] = scene.getLastMeshById(sourceProperty);\r\n }\r\n break;\r\n case 7: // Color Curves\r\n dest[property] = SerializationHelper._ColorCurvesParser(sourceProperty);\r\n break;\r\n case 8: // Color 4\r\n dest[property] = Color4.FromArray(sourceProperty);\r\n break;\r\n case 9: // Image Processing\r\n dest[property] = SerializationHelper._ImageProcessingConfigurationParser(sourceProperty);\r\n break;\r\n case 10: // Quaternion\r\n dest[property] = Quaternion.FromArray(sourceProperty);\r\n break;\r\n case 11: // Camera reference\r\n if (scene) {\r\n dest[property] = scene.getCameraById(sourceProperty);\r\n }\r\n case 12: // Matrix\r\n dest[property] = Matrix.FromArray(sourceProperty);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n /**\r\n * Clones an object\r\n * @param creationFunction defines the function used to instanciate the new object\r\n * @param source defines the source object\r\n * @returns the cloned object\r\n */\r\n public static Clone<T>(creationFunction: () => T, source: T): T {\r\n return _copySource(creationFunction, source, false);\r\n }\r\n\r\n /**\r\n * Instanciates a new object based on a source one (some data will be shared between both object)\r\n * @param creationFunction defines the function used to instanciate the new object\r\n * @param source defines the source object\r\n * @returns the new object\r\n */\r\n public static Instanciate<T>(creationFunction: () => T, source: T): T {\r\n return _copySource(creationFunction, source, true);\r\n }\r\n}\r\n\r\n/** @hidden */\r\ndeclare const _native: any;\r\n\r\n/**\r\n * Decorator used to redirect a function to a native implementation if available.\r\n * @hidden\r\n */\r\nexport function nativeOverride<T extends (...params: any[]) => boolean>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...params: Parameters<T>) => unknown>, predicate?: T) {\r\n // Cache the original JS function for later.\r\n const jsFunc = descriptor.value!;\r\n\r\n // Override the JS function to check for a native override on first invocation. Setting descriptor.value overrides the function at the early stage of code being loaded/imported.\r\n descriptor.value = (...params: Parameters<T>): unknown => {\r\n // Assume the resolved function will be the original JS function, then we will check for the Babylon Native context.\r\n let func = jsFunc;\r\n\r\n // Check if we are executing in a Babylon Native context (e.g. check the presence of the _native global property) and if so also check if a function override is available.\r\n if (typeof _native !== 'undefined' && _native[propertyKey]) {\r\n const nativeFunc = _native[propertyKey] as (...params: Parameters<T>) => unknown;\r\n // If a predicate was provided, then we'll need to invoke the predicate on each invocation of the underlying function to determine whether to call the native function or the JS function.\r\n if (predicate) {\r\n // The resolved function will execute the predicate and then either execute the native function or the JS function.\r\n func = (...params: Parameters<T>) => (predicate(params) ? nativeFunc(...params) : jsFunc(...params));\r\n } else {\r\n // The resolved function will directly execute the native function.\r\n func = nativeFunc;\r\n }\r\n }\r\n\r\n // Override the JS function again with the final resolved target function.\r\n target[propertyKey] = func;\r\n\r\n // The JS function has now been overridden based on whether we're executing in the context of Babylon Native, but we still need to invoke that function.\r\n // Future invocations of the function will just directly invoke the final overridden function, not any of the decorator setup logic above.\r\n return func(...params);\r\n };\r\n}\r\n\r\n/**\r\n * Decorator factory that applies the nativeOverride decorator, but determines whether to redirect to the native implementation based on a filter function that evaluates the function arguments.\r\n * @example @nativeOverride.filter((...[arg1]: Parameters<typeof someClass.someMethod>) => arg1.length > 20)\r\n * public someMethod(arg1: string, arg2: number): string {\r\n * @hidden\r\n */\r\nnativeOverride.filter = function<T extends (...params: any) => boolean>(predicate: T) {\r\n return (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...params: Parameters<T>) => unknown>) => nativeOverride(target, propertyKey, descriptor, predicate);\r\n};\r\n"]}
@@ -40,9 +40,9 @@ var DeepCopier = /** @class */ (function () {
40
40
  * @param mustCopyList defines a list of properties to copy (even if they start with _)
41
41
  */
42
42
  DeepCopier.DeepCopy = function (source, destination, doNotCopyList, mustCopyList) {
43
- var proerties = getAllPropertyNames(source);
44
- for (var _i = 0, proerties_1 = proerties; _i < proerties_1.length; _i++) {
45
- var prop = proerties_1[_i];
43
+ var properties = getAllPropertyNames(source);
44
+ for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {
45
+ var prop = properties_1[_i];
46
46
  if (prop[0] === "_" && (!mustCopyList || mustCopyList.indexOf(prop) === -1)) {
47
47
  continue;
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deepCopier.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/deepCopier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,IAAM,UAAU,GAAG,UAAC,MAAW,EAAE,iBAAsB;IACnD,IAAI,CAAC,MAAM,EAAE;QACT,OAAO,IAAI,CAAC;KACf;IAED,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,MAAM,EAAE;QACzD,OAAO,IAAI,CAAC;KACf;IAED,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;QAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;KAC1C;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE;QACrB,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;KACzB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,SAAS,mBAAmB,CAAC,GAAQ;IACjC,IAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,GAAG;QACC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpB;QACL,CAAC,CAAC,CAAC;KACN,QAAQ,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;IAE3C,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH;IAAA;IA8DA,CAAC;IA7DG;;;;;;OAMG;IACW,mBAAQ,GAAtB,UAAuB,MAAW,EAAE,WAAgB,EAAE,aAAwB,EAAE,YAAuB;QACnG,IAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAiB,UAAS,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE;YAAvB,IAAI,IAAI,kBAAA;YAET,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzE,SAAS;aACZ;YAED,IAAI,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;gBAC9B,SAAS;aACZ;YAED,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrD,SAAS;aACZ;YAED,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,iBAAiB,GAAG,OAAO,WAAW,CAAC;YAE3C,IAAI,iBAAiB,KAAK,UAAU,EAAE;gBAClC,SAAS;aACZ;YAED,IAAI;gBACA,IAAI,iBAAiB,KAAK,QAAQ,EAAE;oBAChC,IAAI,WAAW,YAAY,KAAK,EAAE;wBAC9B,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;wBAEvB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;4BACxB,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;gCACnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oCACrD,IAAI,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;oCAE9D,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,mCAAmC;wCACpF,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qCACvC;iCACJ;6BACJ;iCAAM;gCACH,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;6BAC5C;yBACJ;qBACJ;yBAAM;wBACH,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;qBAC5D;iBACJ;qBAAM;oBACH,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;iBACnC;aACJ;YACD,OAAO,CAAC,EAAE;gBACN,8DAA8D;gBAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAC1B;SACJ;IACL,CAAC;IACL,iBAAC;AAAD,CAAC,AA9DD,IA8DC","sourcesContent":["import { EndsWith } from './stringTools';\r\nimport { Logger } from './logger';\r\n\r\nconst cloneValue = (source: any, destinationObject: any) => {\r\n if (!source) {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"Mesh\") {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"SubMesh\") {\r\n return source.clone(destinationObject);\r\n } else if (source.clone) {\r\n return source.clone();\r\n }\r\n return null;\r\n};\r\n\r\nfunction getAllPropertyNames(obj: any): string[] {\r\n const props: string[] = [];\r\n\r\n do {\r\n Object.getOwnPropertyNames(obj).forEach(function (prop) {\r\n if (props.indexOf(prop) === -1) {\r\n props.push(prop);\r\n }\r\n });\r\n } while (obj = Object.getPrototypeOf(obj));\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Class containing a set of static utilities functions for deep copy.\r\n */\r\nexport class DeepCopier {\r\n /**\r\n * Tries to copy an object by duplicating every property\r\n * @param source defines the source object\r\n * @param destination defines the target object\r\n * @param doNotCopyList defines a list of properties to avoid\r\n * @param mustCopyList defines a list of properties to copy (even if they start with _)\r\n */\r\n public static DeepCopy(source: any, destination: any, doNotCopyList?: string[], mustCopyList?: string[]): void {\r\n const proerties = getAllPropertyNames(source);\r\n for (var prop of proerties) {\r\n\r\n if (prop[0] === \"_\" && (!mustCopyList || mustCopyList.indexOf(prop) === -1)) {\r\n continue;\r\n }\r\n\r\n if (EndsWith(prop, \"Observable\")) {\r\n continue;\r\n }\r\n\r\n if (doNotCopyList && doNotCopyList.indexOf(prop) !== -1) {\r\n continue;\r\n }\r\n\r\n var sourceValue = source[prop];\r\n var typeOfSourceValue = typeof sourceValue;\r\n\r\n if (typeOfSourceValue === \"function\") {\r\n continue;\r\n }\r\n\r\n try {\r\n if (typeOfSourceValue === \"object\") {\r\n if (sourceValue instanceof Array) {\r\n destination[prop] = [];\r\n\r\n if (sourceValue.length > 0) {\r\n if (typeof sourceValue[0] == \"object\") {\r\n for (var index = 0; index < sourceValue.length; index++) {\r\n var clonedValue = cloneValue(sourceValue[index], destination);\r\n\r\n if (destination[prop].indexOf(clonedValue) === -1) { // Test if auto inject was not done\r\n destination[prop].push(clonedValue);\r\n }\r\n }\r\n } else {\r\n destination[prop] = sourceValue.slice(0);\r\n }\r\n }\r\n } else {\r\n destination[prop] = cloneValue(sourceValue, destination);\r\n }\r\n } else {\r\n destination[prop] = sourceValue;\r\n }\r\n }\r\n catch (e) {\r\n // Log a warning (it could be because of a read-only property)\r\n Logger.Warn(e.message);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"deepCopier.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/deepCopier.ts"],"names":[],"mappings":"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","sourcesContent":["import { EndsWith } from './stringTools';\r\nimport { Logger } from './logger';\r\n\r\nconst cloneValue = (source: any, destinationObject: any) => {\r\n if (!source) {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"Mesh\") {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"SubMesh\") {\r\n return source.clone(destinationObject);\r\n } else if (source.clone) {\r\n return source.clone();\r\n }\r\n return null;\r\n};\r\n\r\nfunction getAllPropertyNames(obj: any): string[] {\r\n const props: string[] = [];\r\n\r\n do {\r\n Object.getOwnPropertyNames(obj).forEach(function (prop) {\r\n if (props.indexOf(prop) === -1) {\r\n props.push(prop);\r\n }\r\n });\r\n } while (obj = Object.getPrototypeOf(obj));\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Class containing a set of static utilities functions for deep copy.\r\n */\r\nexport class DeepCopier {\r\n /**\r\n * Tries to copy an object by duplicating every property\r\n * @param source defines the source object\r\n * @param destination defines the target object\r\n * @param doNotCopyList defines a list of properties to avoid\r\n * @param mustCopyList defines a list of properties to copy (even if they start with _)\r\n */\r\n public static DeepCopy(source: any, destination: any, doNotCopyList?: string[], mustCopyList?: string[]): void {\r\n const properties = getAllPropertyNames(source);\r\n for (var prop of properties) {\r\n\r\n if (prop[0] === \"_\" && (!mustCopyList || mustCopyList.indexOf(prop) === -1)) {\r\n continue;\r\n }\r\n\r\n if (EndsWith(prop, \"Observable\")) {\r\n continue;\r\n }\r\n\r\n if (doNotCopyList && doNotCopyList.indexOf(prop) !== -1) {\r\n continue;\r\n }\r\n\r\n var sourceValue = source[prop];\r\n var typeOfSourceValue = typeof sourceValue;\r\n\r\n if (typeOfSourceValue === \"function\") {\r\n continue;\r\n }\r\n\r\n try {\r\n if (typeOfSourceValue === \"object\") {\r\n if (sourceValue instanceof Array) {\r\n destination[prop] = [];\r\n\r\n if (sourceValue.length > 0) {\r\n if (typeof sourceValue[0] == \"object\") {\r\n for (var index = 0; index < sourceValue.length; index++) {\r\n var clonedValue = cloneValue(sourceValue[index], destination);\r\n\r\n if (destination[prop].indexOf(clonedValue) === -1) { // Test if auto inject was not done\r\n destination[prop].push(clonedValue);\r\n }\r\n }\r\n } else {\r\n destination[prop] = sourceValue.slice(0);\r\n }\r\n }\r\n } else {\r\n destination[prop] = cloneValue(sourceValue, destination);\r\n }\r\n } else {\r\n destination[prop] = sourceValue;\r\n }\r\n }\r\n catch (e) {\r\n // Log a warning (it could be because of a read-only property)\r\n Logger.Warn(e.message);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Base error. Due to limitations of typedoc-check and missing documentation
3
+ * in lib.es5.d.ts, cannot extend Error directly for RuntimeError.
4
+ * @ignore
5
+ */
6
+ export declare abstract class BaseError extends Error {
7
+ protected static _setPrototypeOf: (o: any, proto: object | null) => any;
8
+ }
9
+ /**
10
+ * Error codes for BaseError
11
+ */
12
+ export declare const ErrorCodes: {
13
+ /** Invalid or empty mesh vertex positions. */
14
+ readonly MeshInvalidPositionsError: 0;
15
+ /** Unsupported texture found. */
16
+ readonly UnsupportedTextureError: 1000;
17
+ /** Unexpected magic number found in GLTF file header. */
18
+ readonly GLTFLoaderUnexpectedMagicError: 2000;
19
+ /** SceneLoader generic error code. Ideally wraps the inner exception. */
20
+ readonly SceneLoaderError: 3000;
21
+ /** Load file error */
22
+ readonly LoadFileError: 4000;
23
+ /** Request file error */
24
+ readonly RequestFileError: 4001;
25
+ /** Read file error */
26
+ readonly ReadFileError: 4002;
27
+ };
28
+ /**
29
+ * Error code type
30
+ */
31
+ export declare type ErrorCodesType = typeof ErrorCodes[keyof typeof ErrorCodes];
32
+ /**
33
+ * Application runtime error
34
+ */
35
+ export declare class RuntimeError extends BaseError {
36
+ /**
37
+ * The error code
38
+ */
39
+ errorCode: ErrorCodesType;
40
+ /**
41
+ * The error that caused this outer error
42
+ */
43
+ innerError?: Error;
44
+ /**
45
+ * Creates a new RuntimeError
46
+ * @param message defines the message of the error
47
+ * @param errorCode the error code
48
+ * @param innerError the error that caused the outer error
49
+ */
50
+ constructor(message: string, errorCode: ErrorCodesType, innerError?: Error);
51
+ }
package/Misc/error.js ADDED
@@ -0,0 +1,66 @@
1
+ import { __extends } from "tslib";
2
+ /**
3
+ * Base error. Due to limitations of typedoc-check and missing documentation
4
+ * in lib.es5.d.ts, cannot extend Error directly for RuntimeError.
5
+ * @ignore
6
+ */
7
+ var BaseError = /** @class */ (function (_super) {
8
+ __extends(BaseError, _super);
9
+ function BaseError() {
10
+ return _super !== null && _super.apply(this, arguments) || this;
11
+ }
12
+ // See https://stackoverflow.com/questions/12915412/how-do-i-extend-a-host-object-e-g-error-in-typescript
13
+ // and https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work
14
+ // Polyfill for Object.setPrototypeOf if necessary.
15
+ BaseError._setPrototypeOf = Object.setPrototypeOf || (function (o, proto) { o.__proto__ = proto; return o; });
16
+ return BaseError;
17
+ }(Error));
18
+ export { BaseError };
19
+ /* IMP! DO NOT CHANGE THE NUMBERING OF EXISTING ERROR CODES */
20
+ /**
21
+ * Error codes for BaseError
22
+ */
23
+ export var ErrorCodes = {
24
+ // Mesh errors 0-999
25
+ /** Invalid or empty mesh vertex positions. */
26
+ MeshInvalidPositionsError: 0,
27
+ // Texture errors 1000-1999
28
+ /** Unsupported texture found. */
29
+ UnsupportedTextureError: 1000,
30
+ // GLTFLoader errors 2000-2999
31
+ /** Unexpected magic number found in GLTF file header. */
32
+ GLTFLoaderUnexpectedMagicError: 2000,
33
+ // SceneLoader errors 3000-3999
34
+ /** SceneLoader generic error code. Ideally wraps the inner exception. */
35
+ SceneLoaderError: 3000,
36
+ // File related errors 4000-4999
37
+ /** Load file error */
38
+ LoadFileError: 4000,
39
+ /** Request file error */
40
+ RequestFileError: 4001,
41
+ /** Read file error */
42
+ ReadFileError: 4002
43
+ };
44
+ /**
45
+ * Application runtime error
46
+ */
47
+ var RuntimeError = /** @class */ (function (_super) {
48
+ __extends(RuntimeError, _super);
49
+ /**
50
+ * Creates a new RuntimeError
51
+ * @param message defines the message of the error
52
+ * @param errorCode the error code
53
+ * @param innerError the error that caused the outer error
54
+ */
55
+ function RuntimeError(message, errorCode, innerError) {
56
+ var _this = _super.call(this, message) || this;
57
+ _this.errorCode = errorCode;
58
+ _this.innerError = innerError;
59
+ _this.name = "RuntimeError";
60
+ BaseError._setPrototypeOf(_this, RuntimeError.prototype);
61
+ return _this;
62
+ }
63
+ return RuntimeError;
64
+ }(BaseError));
65
+ export { RuntimeError };
66
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/error.ts"],"names":[],"mappings":";AAAA;;;;GAIG;AACH;IAAwC,6BAAK;IAA7C;;IAOA,CAAC;IANG,yGAAyG;IACzG,oIAAoI;IAEpI,mDAAmD;IAClC,yBAAe,GAC3B,MAAc,CAAC,cAAc,IAAI,CAAC,UAAC,CAAC,EAAE,KAAK,IAAO,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,gBAAC;CAAA,AAPD,CAAwC,KAAK,GAO5C;SAPqB,SAAS;AAS/B,8DAA8D;AAC9D;;GAEG;AACH,MAAM,CAAC,IAAM,UAAU,GAAG;IACtB,oBAAoB;IACpB,8CAA8C;IAC9C,yBAAyB,EAAE,CAAC;IAE5B,2BAA2B;IAC3B,iCAAiC;IACjC,uBAAuB,EAAE,IAAI;IAE7B,8BAA8B;IAC9B,yDAAyD;IACzD,8BAA8B,EAAE,IAAI;IAEpC,+BAA+B;IAC/B,yEAAyE;IACzE,gBAAgB,EAAE,IAAI;IAEtB,gCAAgC;IAChC,sBAAsB;IACtB,aAAa,EAAE,IAAI;IACnB,yBAAyB;IACzB,gBAAgB,EAAE,IAAI;IACtB,sBAAsB;IACtB,aAAa,EAAE,IAAI;CACb,CAAC;AAOX;;GAEG;AACH;IAAkC,gCAAS;IAWvC;;;;;OAKG;IACH,sBAAmB,OAAe,EAAE,SAAyB,EAAE,UAAkB;QAAjF,YACI,kBAAM,OAAO,CAAC,SAOjB;QALG,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,KAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,SAAS,CAAC,eAAe,CAAC,KAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;;IAC5D,CAAC;IACL,mBAAC;AAAD,CAAC,AA1BD,CAAkC,SAAS,GA0B1C","sourcesContent":["/**\r\n * Base error. Due to limitations of typedoc-check and missing documentation\r\n * in lib.es5.d.ts, cannot extend Error directly for RuntimeError.\r\n * @ignore\r\n */\r\nexport abstract class BaseError extends Error {\r\n // See https://stackoverflow.com/questions/12915412/how-do-i-extend-a-host-object-e-g-error-in-typescript\r\n // and https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n\r\n // Polyfill for Object.setPrototypeOf if necessary.\r\n protected static _setPrototypeOf: (o: any, proto: object | null) => any =\r\n (Object as any).setPrototypeOf || ((o, proto) => { o.__proto__ = proto; return o; });\r\n}\r\n\r\n/* IMP! DO NOT CHANGE THE NUMBERING OF EXISTING ERROR CODES */\r\n/**\r\n * Error codes for BaseError\r\n */\r\nexport const ErrorCodes = {\r\n // Mesh errors 0-999\r\n /** Invalid or empty mesh vertex positions. */\r\n MeshInvalidPositionsError: 0,\r\n\r\n // Texture errors 1000-1999\r\n /** Unsupported texture found. */\r\n UnsupportedTextureError: 1000,\r\n\r\n // GLTFLoader errors 2000-2999\r\n /** Unexpected magic number found in GLTF file header. */\r\n GLTFLoaderUnexpectedMagicError: 2000,\r\n\r\n // SceneLoader errors 3000-3999\r\n /** SceneLoader generic error code. Ideally wraps the inner exception. */\r\n SceneLoaderError: 3000,\r\n\r\n // File related errors 4000-4999\r\n /** Load file error */\r\n LoadFileError: 4000,\r\n /** Request file error */\r\n RequestFileError: 4001,\r\n /** Read file error */\r\n ReadFileError: 4002\r\n} as const;\r\n\r\n/**\r\n * Error code type\r\n */\r\nexport type ErrorCodesType = typeof ErrorCodes[keyof typeof ErrorCodes];\r\n\r\n/**\r\n * Application runtime error\r\n */\r\nexport class RuntimeError extends BaseError {\r\n /**\r\n * The error code\r\n */\r\n public errorCode: ErrorCodesType;\r\n\r\n /**\r\n * The error that caused this outer error\r\n */\r\n public innerError?: Error;\r\n\r\n /**\r\n * Creates a new RuntimeError\r\n * @param message defines the message of the error\r\n * @param errorCode the error code\r\n * @param innerError the error that caused the outer error\r\n */\r\n public constructor(message: string, errorCode: ErrorCodesType, innerError?: Error) {\r\n super(message);\r\n\r\n this.errorCode = errorCode;\r\n this.innerError = innerError;\r\n\r\n this.name = \"RuntimeError\";\r\n BaseError._setPrototypeOf(this, RuntimeError.prototype);\r\n }\r\n}\r\n"]}
@@ -2,9 +2,9 @@ import { WebRequest } from './webRequest';
2
2
  import { Nullable } from '../types';
3
3
  import { IOfflineProvider } from '../Offline/IOfflineProvider';
4
4
  import { IFileRequest } from './fileRequest';
5
- import { BaseError } from './baseError';
5
+ import { RuntimeError } from './error';
6
6
  /** @ignore */
7
- export declare class LoadFileError extends BaseError {
7
+ export declare class LoadFileError extends RuntimeError {
8
8
  request?: WebRequest;
9
9
  file?: File;
10
10
  /**
@@ -16,7 +16,7 @@ export declare class LoadFileError extends BaseError {
16
16
  constructor(message: string, object?: WebRequest | File);
17
17
  }
18
18
  /** @ignore */
19
- export declare class RequestFileError extends BaseError {
19
+ export declare class RequestFileError extends RuntimeError {
20
20
  request: WebRequest;
21
21
  /**
22
22
  * Creates a new LoadFileError
@@ -26,7 +26,7 @@ export declare class RequestFileError extends BaseError {
26
26
  constructor(message: string, request: WebRequest);
27
27
  }
28
28
  /** @ignore */
29
- export declare class ReadFileError extends BaseError {
29
+ export declare class ReadFileError extends RuntimeError {
30
30
  file: File;
31
31
  /**
32
32
  * Creates a new ReadFileError
package/Misc/fileTools.js CHANGED
@@ -4,7 +4,7 @@ import { IsWindowObjectExist } from './domManagement.js';
4
4
  import { Observable } from './observable.js';
5
5
  import { FilesInputStore } from './filesInputStore.js';
6
6
  import { RetryStrategy } from './retryStrategy.js';
7
- import { BaseError } from './baseError.js';
7
+ import { BaseError, ErrorCodes, RuntimeError } from './error.js';
8
8
  import { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from './stringTools.js';
9
9
  import { ShaderProcessor } from '../Engines/Processors/shaderProcessor.js';
10
10
  import { ThinEngine } from '../Engines/thinEngine.js';
@@ -22,7 +22,7 @@ var LoadFileError = /** @class */ (function (_super) {
22
22
  * @param file defines the optional file
23
23
  */
24
24
  function LoadFileError(message, object) {
25
- var _this = _super.call(this, message) || this;
25
+ var _this = _super.call(this, message, ErrorCodes.LoadFileError) || this;
26
26
  _this.name = "LoadFileError";
27
27
  BaseError._setPrototypeOf(_this, LoadFileError.prototype);
28
28
  if (object instanceof WebRequest) {
@@ -34,7 +34,7 @@ var LoadFileError = /** @class */ (function (_super) {
34
34
  return _this;
35
35
  }
36
36
  return LoadFileError;
37
- }(BaseError));
37
+ }(RuntimeError));
38
38
  export { LoadFileError };
39
39
  /** @ignore */
40
40
  var RequestFileError = /** @class */ (function (_super) {
@@ -45,14 +45,14 @@ var RequestFileError = /** @class */ (function (_super) {
45
45
  * @param request defines the optional web request
46
46
  */
47
47
  function RequestFileError(message, request) {
48
- var _this = _super.call(this, message) || this;
48
+ var _this = _super.call(this, message, ErrorCodes.RequestFileError) || this;
49
49
  _this.request = request;
50
50
  _this.name = "RequestFileError";
51
51
  BaseError._setPrototypeOf(_this, RequestFileError.prototype);
52
52
  return _this;
53
53
  }
54
54
  return RequestFileError;
55
- }(BaseError));
55
+ }(RuntimeError));
56
56
  export { RequestFileError };
57
57
  /** @ignore */
58
58
  var ReadFileError = /** @class */ (function (_super) {
@@ -63,14 +63,14 @@ var ReadFileError = /** @class */ (function (_super) {
63
63
  * @param file defines the optional file
64
64
  */
65
65
  function ReadFileError(message, file) {
66
- var _this = _super.call(this, message) || this;
66
+ var _this = _super.call(this, message, ErrorCodes.ReadFileError) || this;
67
67
  _this.file = file;
68
68
  _this.name = "ReadFileError";
69
69
  BaseError._setPrototypeOf(_this, ReadFileError.prototype);
70
70
  return _this;
71
71
  }
72
72
  return ReadFileError;
73
- }(BaseError));
73
+ }(RuntimeError));
74
74
  export { ReadFileError };
75
75
  /**
76
76
  * @hidden
@@ -1 +1 @@
1
- {"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/fileTools.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebRequest } from './webRequest';\r\nimport { IsWindowObjectExist } from './domManagement';\r\nimport { Nullable } from '../types';\r\nimport { IOfflineProvider } from '../Offline/IOfflineProvider';\r\nimport { IFileRequest } from './fileRequest';\r\nimport { Observable } from './observable';\r\nimport { FilesInputStore } from './filesInputStore';\r\nimport { RetryStrategy } from './retryStrategy';\r\nimport { BaseError } from './baseError';\r\nimport { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from './stringTools';\r\nimport { ShaderProcessor } from '../Engines/Processors/shaderProcessor';\r\nimport { ThinEngine } from '../Engines/thinEngine';\r\nimport { EngineStore } from '../Engines/engineStore';\r\nimport { Logger } from './logger';\r\nimport { TimingTools } from './timingTools';\r\n\r\nconst base64DataUrlRegEx = new RegExp(/^data:([^,]+\\/[^,]+)?;base64,/i);\r\n\r\n/** @ignore */\r\nexport class LoadFileError extends BaseError {\r\n public request?: WebRequest;\r\n public file?: File;\r\n\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, object?: WebRequest | File) {\r\n super(message);\r\n\r\n this.name = \"LoadFileError\";\r\n BaseError._setPrototypeOf(this, LoadFileError.prototype);\r\n\r\n if (object instanceof WebRequest) {\r\n this.request = object;\r\n }\r\n else {\r\n this.file = object;\r\n }\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class RequestFileError extends BaseError {\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n */\r\n constructor(message: string, public request: WebRequest) {\r\n super(message);\r\n this.name = \"RequestFileError\";\r\n BaseError._setPrototypeOf(this, RequestFileError.prototype);\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class ReadFileError extends BaseError {\r\n /**\r\n * Creates a new ReadFileError\r\n * @param message defines the message of the error\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, public file: File) {\r\n super(message);\r\n this.name = \"ReadFileError\";\r\n BaseError._setPrototypeOf(this, ReadFileError.prototype);\r\n }\r\n}\r\n/**\r\n * @hidden\r\n */\r\nexport const FileToolsOptions: {\r\n DefaultRetryStrategy: (url: string, request: WebRequest, retryIndex: number) => number;\r\n BaseUrl: string;\r\n CorsBehavior: string | ((url: string | string[]) => string);\r\n PreprocessUrl: (url: string) => string;\r\n} = {\r\n /**\r\n * Gets or sets the retry strategy to apply when an error happens while loading an asset.\r\n * When defining this function, return the wait time before trying again or return -1 to\r\n * stop retrying and error out.\r\n */\r\n DefaultRetryStrategy: RetryStrategy.ExponentialBackoff(),\r\n\r\n /**\r\n * Gets or sets the base URL to use to load assets\r\n */\r\n BaseUrl: \"\",\r\n\r\n /**\r\n * Default behaviour for cors in the application.\r\n * It can be a string if the expected behavior is identical in the entire app.\r\n * Or a callback to be able to set it per url or on a group of them (in case of Video source for instance)\r\n */\r\n CorsBehavior: \"anonymous\",\r\n\r\n /**\r\n * Gets or sets a function used to pre-process url before using them to load assets\r\n */\r\n PreprocessUrl: (url: string) => {\r\n return url;\r\n }\r\n};\r\n\r\n/**\r\n * Removes unwanted characters from an url\r\n * @param url defines the url to clean\r\n * @returns the cleaned url\r\n */\r\nconst _CleanUrl = (url: string): string => {\r\n url = url.replace(/#/mg, \"%23\");\r\n return url;\r\n};\r\n\r\n/**\r\n * Sets the cors behavior on a dom element. This will add the required Tools.CorsBehavior to the element.\r\n * @param url define the url we are trying\r\n * @param element define the dom element where to configure the cors policy\r\n * @hidden\r\n */\r\nexport const SetCorsBehavior = (url: string | string[], element: { crossOrigin: string | null }): void => {\r\n if (url && url.indexOf(\"data:\") === 0) {\r\n return;\r\n }\r\n\r\n if (FileToolsOptions.CorsBehavior) {\r\n if (typeof (FileToolsOptions.CorsBehavior) === 'string' || FileToolsOptions.CorsBehavior instanceof String) {\r\n element.crossOrigin = <string>FileToolsOptions.CorsBehavior;\r\n }\r\n else {\r\n var result = FileToolsOptions.CorsBehavior(url);\r\n if (result) {\r\n element.crossOrigin = result;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Loads an image as an HTMLImageElement.\r\n * @param input url string, ArrayBuffer, or Blob to load\r\n * @param onLoad callback called when the image successfully loads\r\n * @param onError callback called when the image fails to load\r\n * @param offlineProvider offline provider for caching\r\n * @param mimeType optional mime type\r\n * @returns the HTMLImageElement of the loaded image\r\n * @hidden\r\n */\r\nexport const LoadImage = (input: string | ArrayBuffer | ArrayBufferView | Blob, onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string, exception?: any) => void, offlineProvider: Nullable<IOfflineProvider>, mimeType: string = \"\", imageBitmapOptions?: ImageBitmapOptions): Nullable<HTMLImageElement> => {\r\n let url: string;\r\n let usingObjectURL = false;\r\n\r\n if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {\r\n if (typeof Blob !== 'undefined') {\r\n url = URL.createObjectURL(new Blob([input], { type: mimeType }));\r\n usingObjectURL = true;\r\n } else {\r\n url = `data:${mimeType};base64,` + EncodeArrayBufferToBase64(input);\r\n }\r\n }\r\n else if (input instanceof Blob) {\r\n url = URL.createObjectURL(input);\r\n usingObjectURL = true;\r\n }\r\n else {\r\n url = _CleanUrl(input);\r\n url = FileToolsOptions.PreprocessUrl(input);\r\n }\r\n\r\n const engine = EngineStore.LastCreatedEngine;\r\n\r\n const onErrorHandler = (exception: any) => {\r\n if (onError) {\r\n const inputText = url || input.toString();\r\n onError(`Error while trying to load image: ${((inputText.indexOf('http') === 0 || inputText.length <= 128) ? inputText : inputText.slice(0, 128) + \"...\")}`, exception);\r\n }\r\n };\r\n\r\n if (typeof Image === \"undefined\" || (engine?._features.forceBitmapOverHTMLImageElement ?? false)) {\r\n LoadFile(url, (data) => {\r\n engine!.createImageBitmap(new Blob([data], { type: mimeType }), { premultiplyAlpha: \"none\", ...imageBitmapOptions }).then((imgBmp) => {\r\n onLoad(imgBmp);\r\n if (usingObjectURL) {\r\n URL.revokeObjectURL(url);\r\n }\r\n }).catch((reason) => {\r\n if (onError) {\r\n onError(\"Error while trying to load image: \" + input, reason);\r\n }\r\n });\r\n }, undefined, offlineProvider || undefined, true, (request, exception) => {\r\n onErrorHandler(exception);\r\n });\r\n\r\n return null;\r\n }\r\n\r\n var img = new Image();\r\n SetCorsBehavior(url, img);\r\n\r\n const loadHandler = () => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onLoad(img);\r\n\r\n // Must revoke the URL after calling onLoad to avoid security exceptions in\r\n // certain scenarios (e.g. when hosted in vscode).\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const errorHandler = (err: any) => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onErrorHandler(err);\r\n\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n img.addEventListener(\"load\", loadHandler);\r\n img.addEventListener(\"error\", errorHandler);\r\n\r\n var noOfflineSupport = () => {\r\n img.src = url;\r\n };\r\n\r\n var loadFromOfflineSupport = () => {\r\n if (offlineProvider) {\r\n offlineProvider.loadImage(url, img);\r\n }\r\n };\r\n\r\n if (url.substr(0, 5) !== \"blob:\" && url.substr(0, 5) !== \"data:\" && offlineProvider && offlineProvider.enableTexturesOffline) {\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n if (url.indexOf(\"file:\") !== -1) {\r\n var textureName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (FilesInputStore.FilesToLoad[textureName]) {\r\n try {\r\n var blobURL;\r\n try {\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n catch (ex) {\r\n // Chrome doesn't support oneTimeOnly parameter\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n img.src = blobURL;\r\n usingObjectURL = true;\r\n }\r\n catch (e) {\r\n img.src = \"\";\r\n }\r\n return img;\r\n }\r\n }\r\n\r\n noOfflineSupport();\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Reads a file from a File object\r\n * @param file defines the file to load\r\n * @param onSuccess defines the callback to call when data is loaded\r\n * @param onProgress defines the callback to call during loading process\r\n * @param useArrayBuffer defines a boolean indicating that data must be returned as an ArrayBuffer\r\n * @param onError defines the callback to call when an error occurs\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const ReadFile = (file: File, onSuccess: (data: any) => void, onProgress?: (ev: ProgressEvent) => any, useArrayBuffer?: boolean, onError?: (error: ReadFileError) => void): IFileRequest => {\r\n const reader = new FileReader();\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => reader.abort(),\r\n };\r\n\r\n reader.onloadend = (e) => fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n if (onError) {\r\n reader.onerror = (e) => {\r\n onError(new ReadFileError(`Unable to read ${file.name}`, file));\r\n };\r\n }\r\n reader.onload = (e) => {\r\n //target doesn't have result from ts 1.3\r\n onSuccess((<any>e.target)['result']);\r\n };\r\n if (onProgress) {\r\n reader.onprogress = onProgress;\r\n }\r\n if (!useArrayBuffer) {\r\n // Asynchronous read\r\n reader.readAsText(file);\r\n }\r\n else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Loads a file from a url, a data url, or a file url\r\n * @param fileOrUrl file, url, data url, or file url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const LoadFile = (fileOrUrl: File | string, onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n if ((fileOrUrl as File).name) {\r\n return ReadFile((fileOrUrl as File), onSuccess, onProgress, useArrayBuffer, onError ? (error: ReadFileError) => {\r\n onError(undefined, error);\r\n } : undefined);\r\n }\r\n\r\n const url = (fileOrUrl as string);\r\n\r\n // If file and file input are set\r\n if (url.indexOf(\"file:\") !== -1) {\r\n let fileName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (fileName.indexOf('./') === 0) {\r\n fileName = fileName.substring(2);\r\n }\r\n const file = FilesInputStore.FilesToLoad[fileName];\r\n if (file) {\r\n return ReadFile(file, onSuccess, onProgress, useArrayBuffer, onError ? (error) => onError(undefined, new LoadFileError(error.message, error.file)) : undefined);\r\n }\r\n }\r\n\r\n // For a Base64 Data URL\r\n if (IsBase64DataUrl(url)) {\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => () => { },\r\n };\r\n\r\n try {\r\n onSuccess(useArrayBuffer ? DecodeBase64UrlToBinary(url) : DecodeBase64UrlToString(url));\r\n } catch (error) {\r\n if (onError) {\r\n onError(undefined, error);\r\n } else {\r\n Logger.Error(error.message || \"Failed to parse the Data URL\");\r\n }\r\n }\r\n\r\n TimingTools.SetImmediate(() => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n });\r\n\r\n return fileRequest;\r\n }\r\n\r\n return RequestFile(url, (data, request) => {\r\n onSuccess(data, request ? request.responseURL : undefined);\r\n }, onProgress, offlineProvider, useArrayBuffer, onError ? (error) => {\r\n onError(error.request, new LoadFileError(error.message, error.request));\r\n } : undefined, onOpened);\r\n};\r\n\r\n/**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened callback called when the web request is opened\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const RequestFile = (url: string, onSuccess: (data: string | ArrayBuffer, request?: WebRequest) => void,\r\n onProgress?: (event: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (error: RequestFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n url = _CleanUrl(url);\r\n url = FileToolsOptions.PreprocessUrl(url);\r\n\r\n const loadUrl = FileToolsOptions.BaseUrl + url;\r\n\r\n let aborted = false;\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => aborted = true,\r\n };\r\n\r\n const requestFile = () => {\r\n let request = new WebRequest();\r\n let retryHandle: Nullable<number> = null;\r\n\r\n fileRequest.abort = () => {\r\n aborted = true;\r\n\r\n if (request.readyState !== (XMLHttpRequest.DONE || 4)) {\r\n request.abort();\r\n }\r\n\r\n if (retryHandle !== null) {\r\n clearTimeout(retryHandle);\r\n retryHandle = null;\r\n }\r\n };\r\n\r\n const handleError = (error: any) => {\r\n const message = error.message || \"Unknown error\";\r\n if (onError) {\r\n onError(new RequestFileError(message, request));\r\n } else {\r\n Logger.Error(message);\r\n }\r\n };\r\n\r\n const retryLoop = (retryIndex: number) => {\r\n request.open('GET', loadUrl);\r\n\r\n if (onOpened) {\r\n try {\r\n onOpened(request);\r\n } catch (e) {\r\n handleError(e);\r\n return;\r\n }\r\n }\r\n\r\n if (useArrayBuffer) {\r\n request.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (onProgress) {\r\n request.addEventListener(\"progress\", onProgress);\r\n }\r\n\r\n const onLoadEnd = () => {\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n fileRequest.onCompleteObservable.clear();\r\n };\r\n\r\n request.addEventListener(\"loadend\", onLoadEnd);\r\n\r\n const onReadyStateChange = () => {\r\n if (aborted) {\r\n return;\r\n }\r\n\r\n // In case of undefined state in some browsers.\r\n if (request.readyState === (XMLHttpRequest.DONE || 4)) {\r\n // Some browsers have issues where onreadystatechange can be called multiple times with the same value.\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n if ((request.status >= 200 && request.status < 300) || (request.status === 0 && (!IsWindowObjectExist() || IsFileURL()))) {\r\n try {\r\n onSuccess(useArrayBuffer ? request.response : request.responseText, request);\r\n } catch (e) {\r\n handleError(e);\r\n }\r\n return;\r\n }\r\n\r\n let retryStrategy = FileToolsOptions.DefaultRetryStrategy;\r\n if (retryStrategy) {\r\n let waitTime = retryStrategy(loadUrl, request, retryIndex);\r\n if (waitTime !== -1) {\r\n // Prevent the request from completing for retry.\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n request = new WebRequest();\r\n retryHandle = setTimeout(() => retryLoop(retryIndex + 1), waitTime);\r\n return;\r\n }\r\n }\r\n\r\n const error = new RequestFileError(\"Error status: \" + request.status + \" \" + request.statusText + \" - Unable to load \" + loadUrl, request);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n request.addEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n request.send();\r\n };\r\n\r\n retryLoop(0);\r\n };\r\n\r\n // Caching all files\r\n if (offlineProvider && offlineProvider.enableSceneOffline) {\r\n const noOfflineSupport = (request?: any) => {\r\n if (request && request.status > 400) {\r\n if (onError) {\r\n onError(request);\r\n }\r\n } else {\r\n requestFile();\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n // TODO: database needs to support aborting and should return a IFileRequest\r\n\r\n if (offlineProvider) {\r\n offlineProvider.loadFile(FileToolsOptions.BaseUrl + url, (data) => {\r\n if (!aborted) {\r\n onSuccess(data);\r\n }\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n }, onProgress ? (event) => {\r\n if (!aborted) {\r\n onProgress(event);\r\n }\r\n } : undefined, noOfflineSupport, useArrayBuffer);\r\n }\r\n };\r\n\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n requestFile();\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Checks if the loaded document was accessed via `file:`-Protocol.\r\n * @returns boolean\r\n * @hidden\r\n */\r\nexport const IsFileURL = (): boolean => {\r\n return typeof location !== \"undefined\" && location.protocol === \"file:\";\r\n};\r\n\r\n/**\r\n * Test if the given uri is a valid base64 data url\r\n * @param uri The uri to test\r\n * @return True if the uri is a base64 data url or false otherwise\r\n * @hidden\r\n */\r\nexport const IsBase64DataUrl = (uri: string): boolean => {\r\n return base64DataUrlRegEx.test(uri);\r\n};\r\n\r\n/**\r\n * Decode the given base64 uri.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport function DecodeBase64UrlToBinary(uri: string): ArrayBuffer {\r\n return DecodeBase64ToBinary(uri.split(\",\")[1]);\r\n}\r\n\r\n/**\r\n * Decode the given base64 uri into a UTF-8 encoded string.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport const DecodeBase64UrlToString = (uri: string): string => {\r\n return DecodeBase64ToString(uri.split(\",\")[1]);\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @hidden\r\n */\r\nconst initSideEffects = () => {\r\n ThinEngine._FileToolsLoadImage = LoadImage;\r\n ThinEngine._FileToolsLoadFile = LoadFile;\r\n ShaderProcessor._FileToolsLoadFile = LoadFile;\r\n};\r\n\r\ninitSideEffects();\r\n\r\n// LTS. Export FileTools in this module for backward compatibility.\r\nimport { _injectLTSFileTools } from './fileTools.lts';\r\n_injectLTSFileTools(DecodeBase64UrlToBinary, DecodeBase64UrlToString, FileToolsOptions, IsBase64DataUrl, IsFileURL, LoadFile, LoadImage, ReadFile, RequestFile, SetCorsBehavior);"]}
1
+ {"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/fileTools.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebRequest } from './webRequest';\r\nimport { IsWindowObjectExist } from './domManagement';\r\nimport { Nullable } from '../types';\r\nimport { IOfflineProvider } from '../Offline/IOfflineProvider';\r\nimport { IFileRequest } from './fileRequest';\r\nimport { Observable } from './observable';\r\nimport { FilesInputStore } from './filesInputStore';\r\nimport { RetryStrategy } from './retryStrategy';\r\nimport { BaseError, ErrorCodes, RuntimeError } from './error';\r\nimport { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from './stringTools';\r\nimport { ShaderProcessor } from '../Engines/Processors/shaderProcessor';\r\nimport { ThinEngine } from '../Engines/thinEngine';\r\nimport { EngineStore } from '../Engines/engineStore';\r\nimport { Logger } from './logger';\r\nimport { TimingTools } from './timingTools';\r\n\r\nconst base64DataUrlRegEx = new RegExp(/^data:([^,]+\\/[^,]+)?;base64,/i);\r\n\r\n/** @ignore */\r\nexport class LoadFileError extends RuntimeError {\r\n public request?: WebRequest;\r\n public file?: File;\r\n\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, object?: WebRequest | File) {\r\n super(message, ErrorCodes.LoadFileError);\r\n\r\n this.name = \"LoadFileError\";\r\n BaseError._setPrototypeOf(this, LoadFileError.prototype);\r\n\r\n if (object instanceof WebRequest) {\r\n this.request = object;\r\n }\r\n else {\r\n this.file = object;\r\n }\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class RequestFileError extends RuntimeError {\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n */\r\n constructor(message: string, public request: WebRequest) {\r\n super(message, ErrorCodes.RequestFileError);\r\n this.name = \"RequestFileError\";\r\n BaseError._setPrototypeOf(this, RequestFileError.prototype);\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class ReadFileError extends RuntimeError {\r\n /**\r\n * Creates a new ReadFileError\r\n * @param message defines the message of the error\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, public file: File) {\r\n super(message, ErrorCodes.ReadFileError);\r\n this.name = \"ReadFileError\";\r\n BaseError._setPrototypeOf(this, ReadFileError.prototype);\r\n }\r\n}\r\n/**\r\n * @hidden\r\n */\r\nexport const FileToolsOptions: {\r\n DefaultRetryStrategy: (url: string, request: WebRequest, retryIndex: number) => number;\r\n BaseUrl: string;\r\n CorsBehavior: string | ((url: string | string[]) => string);\r\n PreprocessUrl: (url: string) => string;\r\n} = {\r\n /**\r\n * Gets or sets the retry strategy to apply when an error happens while loading an asset.\r\n * When defining this function, return the wait time before trying again or return -1 to\r\n * stop retrying and error out.\r\n */\r\n DefaultRetryStrategy: RetryStrategy.ExponentialBackoff(),\r\n\r\n /**\r\n * Gets or sets the base URL to use to load assets\r\n */\r\n BaseUrl: \"\",\r\n\r\n /**\r\n * Default behaviour for cors in the application.\r\n * It can be a string if the expected behavior is identical in the entire app.\r\n * Or a callback to be able to set it per url or on a group of them (in case of Video source for instance)\r\n */\r\n CorsBehavior: \"anonymous\",\r\n\r\n /**\r\n * Gets or sets a function used to pre-process url before using them to load assets\r\n */\r\n PreprocessUrl: (url: string) => {\r\n return url;\r\n }\r\n};\r\n\r\n/**\r\n * Removes unwanted characters from an url\r\n * @param url defines the url to clean\r\n * @returns the cleaned url\r\n */\r\nconst _CleanUrl = (url: string): string => {\r\n url = url.replace(/#/mg, \"%23\");\r\n return url;\r\n};\r\n\r\n/**\r\n * Sets the cors behavior on a dom element. This will add the required Tools.CorsBehavior to the element.\r\n * @param url define the url we are trying\r\n * @param element define the dom element where to configure the cors policy\r\n * @hidden\r\n */\r\nexport const SetCorsBehavior = (url: string | string[], element: { crossOrigin: string | null }): void => {\r\n if (url && url.indexOf(\"data:\") === 0) {\r\n return;\r\n }\r\n\r\n if (FileToolsOptions.CorsBehavior) {\r\n if (typeof (FileToolsOptions.CorsBehavior) === 'string' || FileToolsOptions.CorsBehavior instanceof String) {\r\n element.crossOrigin = <string>FileToolsOptions.CorsBehavior;\r\n }\r\n else {\r\n var result = FileToolsOptions.CorsBehavior(url);\r\n if (result) {\r\n element.crossOrigin = result;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Loads an image as an HTMLImageElement.\r\n * @param input url string, ArrayBuffer, or Blob to load\r\n * @param onLoad callback called when the image successfully loads\r\n * @param onError callback called when the image fails to load\r\n * @param offlineProvider offline provider for caching\r\n * @param mimeType optional mime type\r\n * @returns the HTMLImageElement of the loaded image\r\n * @hidden\r\n */\r\nexport const LoadImage = (input: string | ArrayBuffer | ArrayBufferView | Blob, onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string, exception?: any) => void, offlineProvider: Nullable<IOfflineProvider>, mimeType: string = \"\", imageBitmapOptions?: ImageBitmapOptions): Nullable<HTMLImageElement> => {\r\n let url: string;\r\n let usingObjectURL = false;\r\n\r\n if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {\r\n if (typeof Blob !== 'undefined') {\r\n url = URL.createObjectURL(new Blob([input], { type: mimeType }));\r\n usingObjectURL = true;\r\n } else {\r\n url = `data:${mimeType};base64,` + EncodeArrayBufferToBase64(input);\r\n }\r\n }\r\n else if (input instanceof Blob) {\r\n url = URL.createObjectURL(input);\r\n usingObjectURL = true;\r\n }\r\n else {\r\n url = _CleanUrl(input);\r\n url = FileToolsOptions.PreprocessUrl(input);\r\n }\r\n\r\n const engine = EngineStore.LastCreatedEngine;\r\n\r\n const onErrorHandler = (exception: any) => {\r\n if (onError) {\r\n const inputText = url || input.toString();\r\n onError(`Error while trying to load image: ${((inputText.indexOf('http') === 0 || inputText.length <= 128) ? inputText : inputText.slice(0, 128) + \"...\")}`, exception);\r\n }\r\n };\r\n\r\n if (typeof Image === \"undefined\" || (engine?._features.forceBitmapOverHTMLImageElement ?? false)) {\r\n LoadFile(url, (data) => {\r\n engine!.createImageBitmap(new Blob([data], { type: mimeType }), { premultiplyAlpha: \"none\", ...imageBitmapOptions }).then((imgBmp) => {\r\n onLoad(imgBmp);\r\n if (usingObjectURL) {\r\n URL.revokeObjectURL(url);\r\n }\r\n }).catch((reason) => {\r\n if (onError) {\r\n onError(\"Error while trying to load image: \" + input, reason);\r\n }\r\n });\r\n }, undefined, offlineProvider || undefined, true, (request, exception) => {\r\n onErrorHandler(exception);\r\n });\r\n\r\n return null;\r\n }\r\n\r\n var img = new Image();\r\n SetCorsBehavior(url, img);\r\n\r\n const loadHandler = () => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onLoad(img);\r\n\r\n // Must revoke the URL after calling onLoad to avoid security exceptions in\r\n // certain scenarios (e.g. when hosted in vscode).\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const errorHandler = (err: any) => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onErrorHandler(err);\r\n\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n img.addEventListener(\"load\", loadHandler);\r\n img.addEventListener(\"error\", errorHandler);\r\n\r\n var noOfflineSupport = () => {\r\n img.src = url;\r\n };\r\n\r\n var loadFromOfflineSupport = () => {\r\n if (offlineProvider) {\r\n offlineProvider.loadImage(url, img);\r\n }\r\n };\r\n\r\n if (url.substr(0, 5) !== \"blob:\" && url.substr(0, 5) !== \"data:\" && offlineProvider && offlineProvider.enableTexturesOffline) {\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n if (url.indexOf(\"file:\") !== -1) {\r\n var textureName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (FilesInputStore.FilesToLoad[textureName]) {\r\n try {\r\n var blobURL;\r\n try {\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n catch (ex) {\r\n // Chrome doesn't support oneTimeOnly parameter\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n img.src = blobURL;\r\n usingObjectURL = true;\r\n }\r\n catch (e) {\r\n img.src = \"\";\r\n }\r\n return img;\r\n }\r\n }\r\n\r\n noOfflineSupport();\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Reads a file from a File object\r\n * @param file defines the file to load\r\n * @param onSuccess defines the callback to call when data is loaded\r\n * @param onProgress defines the callback to call during loading process\r\n * @param useArrayBuffer defines a boolean indicating that data must be returned as an ArrayBuffer\r\n * @param onError defines the callback to call when an error occurs\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const ReadFile = (file: File, onSuccess: (data: any) => void, onProgress?: (ev: ProgressEvent) => any, useArrayBuffer?: boolean, onError?: (error: ReadFileError) => void): IFileRequest => {\r\n const reader = new FileReader();\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => reader.abort(),\r\n };\r\n\r\n reader.onloadend = (e) => fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n if (onError) {\r\n reader.onerror = (e) => {\r\n onError(new ReadFileError(`Unable to read ${file.name}`, file));\r\n };\r\n }\r\n reader.onload = (e) => {\r\n //target doesn't have result from ts 1.3\r\n onSuccess((<any>e.target)['result']);\r\n };\r\n if (onProgress) {\r\n reader.onprogress = onProgress;\r\n }\r\n if (!useArrayBuffer) {\r\n // Asynchronous read\r\n reader.readAsText(file);\r\n }\r\n else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Loads a file from a url, a data url, or a file url\r\n * @param fileOrUrl file, url, data url, or file url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const LoadFile = (fileOrUrl: File | string, onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n if ((fileOrUrl as File).name) {\r\n return ReadFile((fileOrUrl as File), onSuccess, onProgress, useArrayBuffer, onError ? (error: ReadFileError) => {\r\n onError(undefined, error);\r\n } : undefined);\r\n }\r\n\r\n const url = (fileOrUrl as string);\r\n\r\n // If file and file input are set\r\n if (url.indexOf(\"file:\") !== -1) {\r\n let fileName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (fileName.indexOf('./') === 0) {\r\n fileName = fileName.substring(2);\r\n }\r\n const file = FilesInputStore.FilesToLoad[fileName];\r\n if (file) {\r\n return ReadFile(file, onSuccess, onProgress, useArrayBuffer, onError ? (error) => onError(undefined, new LoadFileError(error.message, error.file)) : undefined);\r\n }\r\n }\r\n\r\n // For a Base64 Data URL\r\n if (IsBase64DataUrl(url)) {\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => () => { },\r\n };\r\n\r\n try {\r\n onSuccess(useArrayBuffer ? DecodeBase64UrlToBinary(url) : DecodeBase64UrlToString(url));\r\n } catch (error) {\r\n if (onError) {\r\n onError(undefined, error);\r\n } else {\r\n Logger.Error(error.message || \"Failed to parse the Data URL\");\r\n }\r\n }\r\n\r\n TimingTools.SetImmediate(() => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n });\r\n\r\n return fileRequest;\r\n }\r\n\r\n return RequestFile(url, (data, request) => {\r\n onSuccess(data, request ? request.responseURL : undefined);\r\n }, onProgress, offlineProvider, useArrayBuffer, onError ? (error) => {\r\n onError(error.request, new LoadFileError(error.message, error.request));\r\n } : undefined, onOpened);\r\n};\r\n\r\n/**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened callback called when the web request is opened\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const RequestFile = (url: string, onSuccess: (data: string | ArrayBuffer, request?: WebRequest) => void,\r\n onProgress?: (event: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (error: RequestFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n url = _CleanUrl(url);\r\n url = FileToolsOptions.PreprocessUrl(url);\r\n\r\n const loadUrl = FileToolsOptions.BaseUrl + url;\r\n\r\n let aborted = false;\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => aborted = true,\r\n };\r\n\r\n const requestFile = () => {\r\n let request = new WebRequest();\r\n let retryHandle: Nullable<ReturnType<typeof setTimeout>> = null;\r\n\r\n fileRequest.abort = () => {\r\n aborted = true;\r\n\r\n if (request.readyState !== (XMLHttpRequest.DONE || 4)) {\r\n request.abort();\r\n }\r\n\r\n if (retryHandle !== null) {\r\n clearTimeout(retryHandle);\r\n retryHandle = null;\r\n }\r\n };\r\n\r\n const handleError = (error: any) => {\r\n const message = error.message || \"Unknown error\";\r\n if (onError) {\r\n onError(new RequestFileError(message, request));\r\n } else {\r\n Logger.Error(message);\r\n }\r\n };\r\n\r\n const retryLoop = (retryIndex: number) => {\r\n request.open('GET', loadUrl);\r\n\r\n if (onOpened) {\r\n try {\r\n onOpened(request);\r\n } catch (e) {\r\n handleError(e);\r\n return;\r\n }\r\n }\r\n\r\n if (useArrayBuffer) {\r\n request.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (onProgress) {\r\n request.addEventListener(\"progress\", onProgress);\r\n }\r\n\r\n const onLoadEnd = () => {\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n fileRequest.onCompleteObservable.clear();\r\n };\r\n\r\n request.addEventListener(\"loadend\", onLoadEnd);\r\n\r\n const onReadyStateChange = () => {\r\n if (aborted) {\r\n return;\r\n }\r\n\r\n // In case of undefined state in some browsers.\r\n if (request.readyState === (XMLHttpRequest.DONE || 4)) {\r\n // Some browsers have issues where onreadystatechange can be called multiple times with the same value.\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n if ((request.status >= 200 && request.status < 300) || (request.status === 0 && (!IsWindowObjectExist() || IsFileURL()))) {\r\n try {\r\n onSuccess(useArrayBuffer ? request.response : request.responseText, request);\r\n } catch (e) {\r\n handleError(e);\r\n }\r\n return;\r\n }\r\n\r\n let retryStrategy = FileToolsOptions.DefaultRetryStrategy;\r\n if (retryStrategy) {\r\n let waitTime = retryStrategy(loadUrl, request, retryIndex);\r\n if (waitTime !== -1) {\r\n // Prevent the request from completing for retry.\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n request = new WebRequest();\r\n retryHandle = setTimeout(() => retryLoop(retryIndex + 1), waitTime);\r\n return;\r\n }\r\n }\r\n\r\n const error = new RequestFileError(\"Error status: \" + request.status + \" \" + request.statusText + \" - Unable to load \" + loadUrl, request);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n request.addEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n request.send();\r\n };\r\n\r\n retryLoop(0);\r\n };\r\n\r\n // Caching all files\r\n if (offlineProvider && offlineProvider.enableSceneOffline) {\r\n const noOfflineSupport = (request?: any) => {\r\n if (request && request.status > 400) {\r\n if (onError) {\r\n onError(request);\r\n }\r\n } else {\r\n requestFile();\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n // TODO: database needs to support aborting and should return a IFileRequest\r\n\r\n if (offlineProvider) {\r\n offlineProvider.loadFile(FileToolsOptions.BaseUrl + url, (data) => {\r\n if (!aborted) {\r\n onSuccess(data);\r\n }\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n }, onProgress ? (event) => {\r\n if (!aborted) {\r\n onProgress(event);\r\n }\r\n } : undefined, noOfflineSupport, useArrayBuffer);\r\n }\r\n };\r\n\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n requestFile();\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Checks if the loaded document was accessed via `file:`-Protocol.\r\n * @returns boolean\r\n * @hidden\r\n */\r\nexport const IsFileURL = (): boolean => {\r\n return typeof location !== \"undefined\" && location.protocol === \"file:\";\r\n};\r\n\r\n/**\r\n * Test if the given uri is a valid base64 data url\r\n * @param uri The uri to test\r\n * @return True if the uri is a base64 data url or false otherwise\r\n * @hidden\r\n */\r\nexport const IsBase64DataUrl = (uri: string): boolean => {\r\n return base64DataUrlRegEx.test(uri);\r\n};\r\n\r\n/**\r\n * Decode the given base64 uri.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport function DecodeBase64UrlToBinary(uri: string): ArrayBuffer {\r\n return DecodeBase64ToBinary(uri.split(\",\")[1]);\r\n}\r\n\r\n/**\r\n * Decode the given base64 uri into a UTF-8 encoded string.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport const DecodeBase64UrlToString = (uri: string): string => {\r\n return DecodeBase64ToString(uri.split(\",\")[1]);\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @hidden\r\n */\r\nconst initSideEffects = () => {\r\n ThinEngine._FileToolsLoadImage = LoadImage;\r\n ThinEngine._FileToolsLoadFile = LoadFile;\r\n ShaderProcessor._FileToolsLoadFile = LoadFile;\r\n};\r\n\r\ninitSideEffects();\r\n\r\n// LTS. Export FileTools in this module for backward compatibility.\r\nimport { _injectLTSFileTools } from './fileTools.lts';\r\n_injectLTSFileTools(DecodeBase64UrlToBinary, DecodeBase64UrlToString, FileToolsOptions, IsBase64DataUrl, IsFileURL, LoadFile, LoadImage, ReadFile, RequestFile, SetCorsBehavior);"]}
package/Misc/index.d.ts CHANGED
@@ -61,3 +61,4 @@ export * from "./computePressure";
61
61
  export * from "./PerformanceViewer/index";
62
62
  export * from "./coroutine";
63
63
  export * from "./guid";
64
+ export * from "./error";