Repository: playcanvas/engine
Pull request #4722 (2022-10-10 14:01:12)

Moved folder /resources to /framework/parsers and /framework/handlers
- in order to reorganize the engine folder structure to layered approach
- no other changes other than move + automated import paths fixed up


Patch:
diff --git a/examples/webgpu-temp/index.html b/examples/webgpu-temp/index.html
index 65c511dcd..af0b99995 100644
--- a/examples/webgpu-temp/index.html
+++ b/examples/webgpu-temp/index.html
@@ -48,8 +48,8 @@
         import { RenderComponentSystem } from '../../src/framework/components/render/system.js';
         import { CameraComponentSystem } from '../../src/framework/components/camera/system.js';
         import { LightComponentSystem } from '../../src/framework/components/light/system.js';
-        import { TextureHandler } from '../../src/resources/texture.js';
-        import { ContainerHandler } from '../../src/resources/container.js';
+        import { TextureHandler } from '../../src/framework/handlers/texture.js';
+        import { ContainerHandler } from '../../src/framework/handlers/container.js';
 
         const assets = {
             'playcanvas': new Asset('playcanvas.png', 'texture', { url: '../assets/textures/playcanvas.png' }),
diff --git a/src/deprecated/deprecated.js b/src/deprecated/deprecated.js
index 54e8ee99c..256d06d25 100644
--- a/src/deprecated/deprecated.js
+++ b/src/deprecated/deprecated.js
@@ -112,7 +112,7 @@ import {
 } from '../framework/components/rigid-body/constants.js';
 import { RigidBodyComponent } from '../framework/components/rigid-body/component.js';
 import { RigidBodyComponentSystem } from '../framework/components/rigid-body/system.js';
-import { basisInitialize } from '../resources/basis.js';
+import { basisInitialize } from '../framework/handlers/basis.js';
 
 // CORE
 
diff --git a/src/framework/app-base.js b/src/framework/app-base.js
index adf06d268..d48949571 100644
--- a/src/framework/app-base.js
+++ b/src/framework/app-base.js
@@ -38,8 +38,8 @@ import { LightsBuffer } from '../scene/lighting/lights-buffer.js';
 import { StandardMaterial } from '../scene/materials/standard-material.js';
 import { setDefaultMaterial } from '../scene/materials/default-material.js';
 
-import { BundleHandler } from '../resources/bundle.js';
-import { ResourceLoader } from '../resources/loader.js';
+import { BundleHandler } from '../framework/handlers/bundle.js';
+import { ResourceLoader } from '../framework/handlers/loader.js';
 
 import { Asset } from './asset/asset.js';
 import { AssetRegistry } from './asset/asset-registry.js';
diff --git a/src/framework/app-options.js b/src/framework/app-options.js
index d22531113..9ab351092 100644
--- a/src/framework/app-options.js
+++ b/src/framework/app-options.js
@@ -1,4 +1,4 @@
-/** @typedef {import('../resources/handler.js').ResourceHandler} ResourceHandler */
+/** @typedef {import('../framework/handlers/handler.js').ResourceHandler} ResourceHandler */
 /** @typedef {import('../platform/graphics/graphics-device.js').GraphicsDevice} GraphicsDevice */
 /** @typedef {import('../platform/input/element-input.js').ElementInput} ElementInput */
 /** @typedef {import('../platform/input/game-pads.js').GamePads} GamePads */
diff --git a/src/framework/application.js b/src/framework/application.js
index 4d6b452d9..9423f192a 100644
--- a/src/framework/application.js
+++ b/src/framework/application.js
@@ -35,30 +35,30 @@ import { CameraComponentSystem } from './components/camera/system.js';
 import { LightComponentSystem } from './components/light/system.js';
 import { ScriptComponentSystem } from './components/script/system.js';
 
-import { RenderHandler } from '../resources/render.js';
-import { AnimationHandler } from '../resources/animation.js';
-import { AnimClipHandler } from '../resources/anim-clip.js';
-import { AnimStateGraphHandler } from '../resources/anim-state-graph.js';
-import { AudioHandler } from '../resources/audio.js';
-import { BinaryHandler } from '../resources/binary.js';
-import { ContainerHandler } from '../resources/container.js';
-import { CssHandler } from '../resources/css.js';
-import { CubemapHandler } from '../resources/cubemap.js';
-import { FolderHandler } from '../resources/folder.js';
-import { FontHandler } from '../resources/font.js';
-import { HierarchyHandler } from '../resources/hierarchy.js';
-import { HtmlHandler } from '../resources/html.js';
-import { JsonHandler } from '../resources/json.js';
-import { MaterialHandler } from '../resources/material.js';
-import { ModelHandler } from '../resources/model.js';
-import { SceneHandler } from '../resources/scene.js';
-import { ScriptHandler } from '../resources/script.js';
-import { ShaderHandler } from '../resources/shader.js';
-import { SpriteHandler } from '../resources/sprite.js';
-import { TemplateHandler } from '../resources/template.js';
-import { TextHandler } from '../resources/text.js';
-import { TextureAtlasHandler } from '../resources/texture-atlas.js';
-import { TextureHandler } from '../resources/texture.js';
+import { RenderHandler } from '../framework/handlers/render.js';
+import { AnimationHandler } from '../framework/handlers/animation.js';
+import { AnimClipHandler } from './handlers/anim-clip.js';
+import { AnimStateGraphHandler } from '../framework/handlers/anim-state-graph.js';
+import { AudioHandler } from '../framework/handlers/audio.js';
+import { BinaryHandler } from '../framework/handlers/binary.js';
+import { ContainerHandler } from '../framework/handlers/container.js';
+import { CssHandler } from '../framework/handlers/css.js';
+import { CubemapHandler } from '../framework/handlers/cubemap.js';
+import { FolderHandler } from '../framework/handlers/folder.js';
+import { FontHandler } from '../framework/handlers/font.js';
+import { HierarchyHandler } from '../framework/handlers/hierarchy.js';
+import { HtmlHandler } from '../framework/handlers/html.js';
+import { JsonHandler } from '../framework/handlers/json.js';
+import { MaterialHandler } from '../framework/handlers/material.js';
+import { ModelHandler } from '../framework/handlers/model.js';
+import { SceneHandler } from '../framework/handlers/scene.js';
+import { ScriptHandler } from '../framework/handlers/script.js';
+import { ShaderHandler } from '../framework/handlers/shader.js';
+import { SpriteHandler } from '../framework/handlers/sprite.js';
+import { TemplateHandler } from '../framework/handlers/template.js';
+import { TextHandler } from '../framework/handlers/text.js';
+import { TextureAtlasHandler } from '../framework/handlers/texture-atlas.js';
+import { TextureHandler } from '../framework/handlers/texture.js';
 
 import { XrManager } from '../xr/xr-manager.js';
 
diff --git a/src/framework/asset/asset-registry.js b/src/framework/asset/asset-registry.js
index 063dce007..0437f35ae 100644
--- a/src/framework/asset/asset-registry.js
+++ b/src/framework/asset/asset-registry.js
@@ -9,7 +9,7 @@ import { script } from '../script.js';
 
 import { Asset } from './asset.js';
 
-/** @typedef {import('../../resources/loader.js').ResourceLoader} ResourceLoader */
+/** @typedef {import('../../framework/handlers/loader.js').ResourceLoader} ResourceLoader */
 
 /**
  * Callback used by {@link AssetRegistry#filter} to filter assets.
diff --git a/src/framework/asset/asset.js b/src/framework/asset/asset.js
index c7477f581..b67b1b526 100644
--- a/src/framework/asset/asset.js
+++ b/src/framework/asset/asset.js
@@ -11,7 +11,7 @@ import { getApplication } from '../globals.js';
 import { http } from '../../platform/net/http.js';
 
 /** @typedef {import('./asset-registry.js').AssetRegistry} AssetRegistry */
-/** @typedef {import('../../resources/loader.js').ResourceLoaderCallback} ResourceLoaderCallback */
+/** @typedef {import('../../framework/handlers/loader.js').ResourceLoaderCallback} ResourceLoaderCallback */
 
 // auto incrementing number for asset ids
 let assetIdCounter = -1;
diff --git a/src/resources/anim-clip.js b/src/framework/handlers/anim-clip.js
similarity index 88%
rename from src/resources/anim-clip.js
rename to src/framework/handlers/anim-clip.js
index 41017cfbb..a10d76d61 100644
--- a/src/resources/anim-clip.js
+++ b/src/framework/handlers/anim-clip.js
@@ -1,8 +1,8 @@
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
-import { AnimCurve } from '../anim/evaluator/anim-curve.js';
-import { AnimData } from '../anim/evaluator/anim-data.js';
-import { AnimTrack } from '../anim/evaluator/anim-track.js';
+import { AnimCurve } from '../../anim/evaluator/anim-curve.js';
+import { AnimData } from '../../anim/evaluator/anim-data.js';
+import { AnimTrack } from '../../anim/evaluator/anim-track.js';
 
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
diff --git a/src/resources/anim-state-graph.js b/src/framework/handlers/anim-state-graph.js
similarity index 90%
rename from src/resources/anim-state-graph.js
rename to src/framework/handlers/anim-state-graph.js
index ffbbcb12c..4958be342 100644
--- a/src/resources/anim-state-graph.js
+++ b/src/framework/handlers/anim-state-graph.js
@@ -1,5 +1,5 @@
-import { http, Http } from '../platform/net/http.js';
-import { AnimStateGraph } from '../anim/state-graph/anim-state-graph.js';
+import { http, Http } from '../../platform/net/http.js';
+import { AnimStateGraph } from '../../anim/state-graph/anim-state-graph.js';
 
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
diff --git a/src/resources/animation.js b/src/framework/handlers/animation.js
similarity index 91%
rename from src/resources/animation.js
rename to src/framework/handlers/animation.js
index c87013e21..75b1121f2 100644
--- a/src/resources/animation.js
+++ b/src/framework/handlers/animation.js
@@ -1,14 +1,14 @@
-import { path } from '../core/path.js';
+import { path } from '../../core/path.js';
 
-import { Quat } from '../core/math/quat.js';
-import { Vec3 } from '../core/math/vec3.js';
+import { Quat } from '../../core/math/quat.js';
+import { Vec3 } from '../../core/math/vec3.js';
 
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
-import { Animation, Key, Node } from '../animation/animation.js';
-import { AnimEvents } from '../anim/evaluator/anim-events.js';
+import { Animation, Key, Node } from '../../animation/animation.js';
+import { AnimEvents } from '../../anim/evaluator/anim-events.js';
 
-import { GlbParser } from '../resources/parser/glb-parser.js';
+import { GlbParser } from '../parsers/glb-parser.js';
 
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
diff --git a/src/resources/audio.js b/src/framework/handlers/audio.js
similarity index 93%
rename from src/resources/audio.js
rename to src/framework/handlers/audio.js
index e26e155ac..02a15af95 100644
--- a/src/resources/audio.js
+++ b/src/framework/handlers/audio.js
@@ -1,13 +1,13 @@
-import { path } from '../core/path.js';
-import { Debug } from '../core/debug.js';
+import { path } from '../../core/path.js';
+import { Debug } from '../../core/debug.js';
 
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
-import { hasAudioContext } from '../platform/audio/capabilities.js';
+import { hasAudioContext } from '../../platform/audio/capabilities.js';
 
-import { Sound } from '../platform/sound/sound.js';
+import { Sound } from '../../platform/sound/sound.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 // checks if user is running IE
diff --git a/src/resources/basis-worker.js b/src/framework/handlers/basis-worker.js
similarity index 100%
rename from src/resources/basis-worker.js
rename to src/framework/handlers/basis-worker.js
diff --git a/src/resources/basis.js b/src/framework/handlers/basis.js
similarity index 98%
rename from src/resources/basis.js
rename to src/framework/handlers/basis.js
index c5e6677fb..15f3c5b00 100644
--- a/src/resources/basis.js
+++ b/src/framework/handlers/basis.js
@@ -1,9 +1,9 @@
-import { Debug } from '../core/debug.js';
-import { PIXELFORMAT_R5_G6_B5, PIXELFORMAT_R4_G4_B4_A4 } from '../platform/graphics/constants.js';
+import { Debug } from '../../core/debug.js';
+import { PIXELFORMAT_R5_G6_B5, PIXELFORMAT_R4_G4_B4_A4 } from '../../platform/graphics/constants.js';
 import { BasisWorker } from './basis-worker.js';
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
-/** @typedef {import('../platform/graphics/graphics-device.js').GraphicsDevice} GraphicsDevice */
+/** @typedef {import('../../platform/graphics/graphics-device.js').GraphicsDevice} GraphicsDevice */
 
 // get the list of the device's supported compression formats
 const getCompressionFormats = (device) => {
diff --git a/src/resources/binary.js b/src/framework/handlers/binary.js
similarity index 94%
rename from src/resources/binary.js
rename to src/framework/handlers/binary.js
index 067b19c6c..181ed4de0 100644
--- a/src/resources/binary.js
+++ b/src/framework/handlers/binary.js
@@ -1,4 +1,4 @@
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
 class BinaryHandler {
     /**
diff --git a/src/resources/bundle.js b/src/framework/handlers/bundle.js
similarity index 91%
rename from src/resources/bundle.js
rename to src/framework/handlers/bundle.js
index 5810c9477..97c154c62 100644
--- a/src/resources/bundle.js
+++ b/src/framework/handlers/bundle.js
@@ -1,12 +1,12 @@
-import { platform } from '../core/platform.js';
+import { platform } from '../../core/platform.js';
 
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
-import { Bundle } from '../framework/bundle/bundle.js';
+import { Bundle } from '../../framework/bundle/bundle.js';
 
 import { Untar, UntarWorker } from './untar.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 /**
diff --git a/src/resources/container.js b/src/framework/handlers/container.js
similarity index 96%
rename from src/resources/container.js
rename to src/framework/handlers/container.js
index f3ea0ea59..566738933 100644
--- a/src/resources/container.js
+++ b/src/framework/handlers/container.js
@@ -1,9 +1,9 @@
-import { path } from '../core/path.js';
-import { GlbParser } from './parser/glb-parser.js';
+import { path } from '../../core/path.js';
+import { GlbParser } from '../parsers/glb-parser.js';
 
-/** @typedef {import('../framework/entity.js').Entity} Entity */
-/** @typedef {import('../scene/mesh-instance').MeshInstance} MeshInstance */
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/entity.js').Entity} Entity */
+/** @typedef {import('../../scene/mesh-instance').MeshInstance} MeshInstance */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 /** @typedef {import('./handler.js').ResourceHandlerCallback} ResourceHandlerCallback */
 
diff --git a/src/resources/css.js b/src/framework/handlers/css.js
similarity index 96%
rename from src/resources/css.js
rename to src/framework/handlers/css.js
index c2324cd24..615d98322 100644
--- a/src/resources/css.js
+++ b/src/framework/handlers/css.js
@@ -1,4 +1,4 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
 class CssHandler {
     /**
diff --git a/src/resources/cubemap.js b/src/framework/handlers/cubemap.js
similarity index 98%
rename from src/resources/cubemap.js
rename to src/framework/handlers/cubemap.js
index 145b8d6ab..d8e9d7b77 100644
--- a/src/resources/cubemap.js
+++ b/src/framework/handlers/cubemap.js
@@ -1,13 +1,13 @@
 import {
     ADDRESS_CLAMP_TO_EDGE, PIXELFORMAT_R8_G8_B8, PIXELFORMAT_R8_G8_B8_A8,
     TEXTURETYPE_DEFAULT, TEXTURETYPE_RGBM
-} from '../platform/graphics/constants.js';
+} from '../../platform/graphics/constants.js';
 
-import { Asset } from '../framework/asset/asset.js';
-import { Texture } from '../platform/graphics/texture.js';
+import { Asset } from '../../framework/asset/asset.js';
+import { Texture } from '../../platform/graphics/texture.js';
 
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 
 /**
  * Resource handler used for loading cubemap {@link Texture} resources.
diff --git a/src/resources/folder.js b/src/framework/handlers/folder.js
similarity index 100%
rename from src/resources/folder.js
rename to src/framework/handlers/folder.js
diff --git a/src/resources/font.js b/src/framework/handlers/font.js
similarity index 94%
rename from src/resources/font.js
rename to src/framework/handlers/font.js
index 3f67faa3d..c262a59ec 100644
--- a/src/resources/font.js
+++ b/src/framework/handlers/font.js
@@ -1,12 +1,12 @@
-import { path } from '../core/path.js';
-import { string } from '../core/string.js';
+import { path } from '../../core/path.js';
+import { string } from '../../core/string.js';
 
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
-import { Font } from '../font/font.js';
+import { Font } from '../../font/font.js';
 
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 
 function upgradeDataSchema(data) {
     // convert v1 and v2 to v3 font data schema
diff --git a/src/resources/handler.js b/src/framework/handlers/handler.js
similarity index 93%
rename from src/resources/handler.js
rename to src/framework/handlers/handler.js
index 09fe94833..683652856 100644
--- a/src/resources/handler.js
+++ b/src/framework/handlers/handler.js
@@ -1,5 +1,5 @@
-/** @typedef {import('../framework/asset/asset.js').Asset} Asset */
-/** @typedef {import('../framework/asset/asset-registry.js').AssetRegistry} AssetRegistry */
+/** @typedef {import('../../framework/asset/asset.js').Asset} Asset */
+/** @typedef {import('../../framework/asset/asset-registry.js').AssetRegistry} AssetRegistry */
 
 /**
  * Callback used by {@link ResourceHandler#load} when a resource is loaded (or an error occurs).
diff --git a/src/resources/hierarchy.js b/src/framework/handlers/hierarchy.js
similarity index 93%
rename from src/resources/hierarchy.js
rename to src/framework/handlers/hierarchy.js
index 72f4e64ea..2ffaf206c 100644
--- a/src/resources/hierarchy.js
+++ b/src/framework/handlers/hierarchy.js
@@ -1,4 +1,4 @@
-import { SceneParser } from './parser/scene.js';
+import { SceneParser } from '../parsers/scene.js';
 import { SceneUtils } from './scene-utils.js';
 
 class HierarchyHandler {
diff --git a/src/resources/html.js b/src/framework/handlers/html.js
similarity index 94%
rename from src/resources/html.js
rename to src/framework/handlers/html.js
index ee0bb549f..a617eef48 100644
--- a/src/resources/html.js
+++ b/src/framework/handlers/html.js
@@ -1,4 +1,4 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
 class HtmlHandler {
     /**
diff --git a/src/resources/json.js b/src/framework/handlers/json.js
similarity index 94%
rename from src/resources/json.js
rename to src/framework/handlers/json.js
index c2b509818..a7598728f 100644
--- a/src/resources/json.js
+++ b/src/framework/handlers/json.js
@@ -1,4 +1,4 @@
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
 class JsonHandler {
     /**
diff --git a/src/resources/loader.js b/src/framework/handlers/loader.js
similarity index 97%
rename from src/resources/loader.js
rename to src/framework/handlers/loader.js
index 56a83ba26..131d532df 100644
--- a/src/resources/loader.js
+++ b/src/framework/handlers/loader.js
@@ -1,9 +1,9 @@
-/** @typedef {import('../framework/asset/asset.js').Asset} Asset */
-/** @typedef {import('../framework/asset/asset-registry.js').AssetRegistry} AssetRegistry */
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/asset/asset.js').Asset} Asset */
+/** @typedef {import('../../framework/asset/asset-registry.js').AssetRegistry} AssetRegistry */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
-import { Debug } from '../core/debug.js';
+import { Debug } from '../../core/debug.js';
 
 /**
  * Callback used by {@link ResourceLoader#load} when a resource is loaded (or an error occurs).
diff --git a/src/resources/material.js b/src/framework/handlers/material.js
similarity index 95%
rename from src/resources/material.js
rename to src/framework/handlers/material.js
index 4f67bee2b..6d33dfbc4 100644
--- a/src/resources/material.js
+++ b/src/framework/handlers/material.js
@@ -1,16 +1,16 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
-import { PIXELFORMAT_R8_G8_B8_A8 } from '../platform/graphics/constants.js';
-import { Texture } from '../platform/graphics/texture.js';
+import { PIXELFORMAT_R8_G8_B8_A8 } from '../../platform/graphics/constants.js';
+import { Texture } from '../../platform/graphics/texture.js';
 
-import { SPECULAR_PHONG } from '../scene/constants.js';
-import { standardMaterialCubemapParameters, standardMaterialTextureParameters } from '../scene/materials/standard-material-parameters.js';
+import { SPECULAR_PHONG } from '../../scene/constants.js';
+import { standardMaterialCubemapParameters, standardMaterialTextureParameters } from '../../scene/materials/standard-material-parameters.js';
 
-import { AssetReference } from '../framework/asset/asset-reference.js';
+import { AssetReference } from '../../framework/asset/asset-reference.js';
 
-import { JsonStandardMaterialParser } from './parser/material/json-standard-material.js';
+import { JsonStandardMaterialParser } from '../../framework/parsers/material/json-standard-material.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 const PLACEHOLDER_MAP = {
diff --git a/src/resources/model.js b/src/framework/handlers/model.js
similarity index 92%
rename from src/resources/model.js
rename to src/framework/handlers/model.js
index 2fb0f5021..19712dbc9 100644
--- a/src/resources/model.js
+++ b/src/framework/handlers/model.js
@@ -1,14 +1,14 @@
-import { path } from '../core/path.js';
-import { Debug } from '../core/debug.js';
+import { path } from '../../core/path.js';
+import { Debug } from '../../core/debug.js';
 
-import { http, Http } from '../platform/net/http.js';
+import { http, Http } from '../../platform/net/http.js';
 
-import { GlbModelParser } from './parser/glb-model.js';
-import { JsonModelParser } from './parser/json-model.js';
+import { GlbModelParser } from '../parsers/glb-model.js';
+import { JsonModelParser } from '../parsers/json-model.js';
 
-import { getDefaultMaterial } from '../scene/materials/default-material.js';
+import { getDefaultMaterial } from '../../scene/materials/default-material.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 /**
diff --git a/src/resources/render.js b/src/framework/handlers/render.js
similarity index 95%
rename from src/resources/render.js
rename to src/framework/handlers/render.js
index 23f1125e4..72d20a02d 100644
--- a/src/resources/render.js
+++ b/src/framework/handlers/render.js
@@ -1,6 +1,6 @@
-import { Render } from '../scene/render.js';
+import { Render } from '../../scene/render.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 // The scope of this function is the render asset
diff --git a/src/resources/scene-settings.js b/src/framework/handlers/scene-settings.js
similarity index 100%
rename from src/resources/scene-settings.js
rename to src/framework/handlers/scene-settings.js
diff --git a/src/resources/scene-utils.js b/src/framework/handlers/scene-utils.js
similarity index 96%
rename from src/resources/scene-utils.js
rename to src/framework/handlers/scene-utils.js
index 6d93ea995..24dc14762 100644
--- a/src/resources/scene-utils.js
+++ b/src/framework/handlers/scene-utils.js
@@ -1,4 +1,4 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
 const SceneUtils = {
     /**
diff --git a/src/resources/scene.js b/src/framework/handlers/scene.js
similarity index 91%
rename from src/resources/scene.js
rename to src/framework/handlers/scene.js
index f28d11255..a863a42ce 100644
--- a/src/resources/scene.js
+++ b/src/framework/handlers/scene.js
@@ -1,7 +1,7 @@
 import { SceneUtils } from './scene-utils.js';
-import { SceneParser } from './parser/scene.js';
+import { SceneParser } from '../parsers/scene.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 /**
diff --git a/src/resources/script.js b/src/framework/handlers/script.js
similarity index 96%
rename from src/resources/script.js
rename to src/framework/handlers/script.js
index 4bf388bde..07ca74dba 100644
--- a/src/resources/script.js
+++ b/src/framework/handlers/script.js
@@ -1,6 +1,6 @@
-import { script } from '../framework/script.js';
+import { script } from '../../framework/script.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 /**
diff --git a/src/resources/shader.js b/src/framework/handlers/shader.js
similarity index 94%
rename from src/resources/shader.js
rename to src/framework/handlers/shader.js
index b3bea9842..d9d56b509 100644
--- a/src/resources/shader.js
+++ b/src/framework/handlers/shader.js
@@ -1,4 +1,4 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
 class ShaderHandler {
     /**
diff --git a/src/resources/sprite.js b/src/framework/handlers/sprite.js
similarity index 95%
rename from src/resources/sprite.js
rename to src/framework/handlers/sprite.js
index b4aad265f..af898b2a9 100644
--- a/src/resources/sprite.js
+++ b/src/framework/handlers/sprite.js
@@ -1,10 +1,10 @@
-import { path } from '../core/path.js';
+import { path } from '../../core/path.js';
 
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
-import { Sprite } from '../scene/sprite.js';
+import { Sprite } from '../../scene/sprite.js';
 
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 
 // The scope of this function is the sprite asset
diff --git a/src/resources/template.js b/src/framework/handlers/template.js
similarity index 89%
rename from src/resources/template.js
rename to src/framework/handlers/template.js
index c03d15f67..52ba2804f 100644
--- a/src/resources/template.js
+++ b/src/framework/handlers/template.js
@@ -1,6 +1,6 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
-import { Template } from '../framework/template.js';
+import { Template } from '../../framework/template.js';
 
 class TemplateHandler {
     /**
diff --git a/src/resources/text.js b/src/framework/handlers/text.js
similarity index 94%
rename from src/resources/text.js
rename to src/framework/handlers/text.js
index 844066ef1..aef07197e 100644
--- a/src/resources/text.js
+++ b/src/framework/handlers/text.js
@@ -1,4 +1,4 @@
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
 class TextHandler {
     /**
diff --git a/src/resources/texture-atlas.js b/src/framework/handlers/texture-atlas.js
similarity index 95%
rename from src/resources/texture-atlas.js
rename to src/framework/handlers/texture-atlas.js
index 5084e2b98..fdefae598 100644
--- a/src/resources/texture-atlas.js
+++ b/src/framework/handlers/texture-atlas.js
@@ -1,20 +1,20 @@
-import { path } from '../core/path.js';
+import { path } from '../../core/path.js';
 
-import { http } from '../platform/net/http.js';
+import { http } from '../../platform/net/http.js';
 
-import { Vec2 } from '../core/math/vec2.js';
-import { Vec4 } from '../core/math/vec4.js';
+import { Vec2 } from '../../core/math/vec2.js';
+import { Vec4 } from '../../core/math/vec4.js';
 
 import {
     ADDRESS_CLAMP_TO_EDGE, ADDRESS_MIRRORED_REPEAT, ADDRESS_REPEAT,
     FILTER_LINEAR, FILTER_NEAREST, FILTER_NEAREST_MIPMAP_NEAREST, FILTER_NEAREST_MIPMAP_LINEAR, FILTER_LINEAR_MIPMAP_NEAREST, FILTER_LINEAR_MIPMAP_LINEAR,
     TEXTURETYPE_DEFAULT, TEXTURETYPE_RGBM
-} from '../platform/graphics/constants.js';
+} from '../../platform/graphics/constants.js';
 
-import { TextureAtlas } from '../scene/texture-atlas.js';
+import { TextureAtlas } from '../../scene/texture-atlas.js';
 
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
 
 const JSON_ADDRESS_MODE = {
     'repeat': ADDRESS_REPEAT,
diff --git a/src/resources/texture.js b/src/framework/handlers/texture.js
similarity index 94%
rename from src/resources/texture.js
rename to src/framework/handlers/texture.js
index b95410563..ae2b6df47 100644
--- a/src/resources/texture.js
+++ b/src/framework/handlers/texture.js
@@ -1,22 +1,22 @@
-import { path } from '../core/path.js';
+import { path } from '../../core/path.js';
 
 import {
     ADDRESS_CLAMP_TO_EDGE, ADDRESS_MIRRORED_REPEAT, ADDRESS_REPEAT,
     FILTER_LINEAR, FILTER_NEAREST, FILTER_NEAREST_MIPMAP_NEAREST, FILTER_NEAREST_MIPMAP_LINEAR, FILTER_LINEAR_MIPMAP_NEAREST, FILTER_LINEAR_MIPMAP_LINEAR,
     PIXELFORMAT_R8_G8_B8, PIXELFORMAT_R8_G8_B8_A8, PIXELFORMAT_RGBA32F,
     TEXTURETYPE_DEFAULT, TEXTURETYPE_RGBE, TEXTURETYPE_RGBM, TEXTURETYPE_SWIZZLEGGGR, TEXTURETYPE_RGBP
-} from '../platform/graphics/constants.js';
-import { Texture } from '../platform/graphics/texture.js';
-
-import { BasisParser } from './parser/texture/basis.js';
-import { ImgParser } from './parser/texture/img.js';
-import { KtxParser } from './parser/texture/ktx.js';
-import { Ktx2Parser } from './parser/texture/ktx2.js';
-import { DdsParser } from './parser/texture/dds.js';
-import { HdrParser } from './parser/texture/hdr.js';
-
-/** @typedef {import('../framework/app-base.js').AppBase} AppBase */
-/** @typedef {import('../framework/asset/asset.js').Asset} Asset */
+} from '../../platform/graphics/constants.js';
+import { Texture } from '../../platform/graphics/texture.js';
+
+import { BasisParser } from '../parsers/texture/basis.js';
+import { ImgParser } from '../parsers/texture/img.js';
+import { KtxParser } from '../parsers/texture/ktx.js';
+import { Ktx2Parser } from '../parsers/texture/ktx2.js';
+import { DdsParser } from '../parsers/texture/dds.js';
+import { HdrParser } from '../parsers/texture/hdr.js';
+
+/** @typedef {import('../../framework/app-base.js').AppBase} AppBase */
+/** @typedef {import('../../framework/asset/asset.js').Asset} Asset */
 /** @typedef {import('./handler.js').ResourceHandler} ResourceHandler */
 /** @typedef {import('./handler.js').ResourceHandlerCallback} ResourceHandlerCallback */
 
diff --git a/src/resources/untar.js b/src/framework/handlers/untar.js
similarity index 100%
rename from src/resources/untar.js
rename to src/framework/handlers/untar.js
diff --git a/src/resources/parser/glb-container-resource.js b/src/framework/parsers/glb-container-resource.js
similarity index 100%
rename from src/resources/parser/glb-container-resource.js
rename to src/framework/parsers/glb-container-resource.js
diff --git a/src/resources/parser/glb-model.js b/src/framework/parsers/glb-model.js
similarity index 100%
rename from src/resources/parser/glb-model.js
rename to src/framework/parsers/glb-model.js
diff --git a/src/resources/parser/glb-parser.js b/src/framework/parsers/glb-parser.js
similarity index 100%
rename from src/resources/parser/glb-parser.js
rename to src/framework/parsers/glb-parser.js
diff --git a/src/resources/parser/json-model.js b/src/framework/parsers/json-model.js
similarity index 100%
rename from src/resources/parser/json-model.js
rename to src/framework/parsers/json-model.js
diff --git a/src/resources/parser/material/json-standard-material.js b/src/framework/parsers/material/json-standard-material.js
similarity index 100%
rename from src/resources/parser/material/json-standard-material.js
rename to src/framework/parsers/material/json-standard-material.js
diff --git a/src/resources/parser/scene.js b/src/framework/parsers/scene.js
similarity index 100%
rename from src/resources/parser/scene.js
rename to src/framework/parsers/scene.js
diff --git a/src/resources/parser/texture/basis.js b/src/framework/parsers/texture/basis.js
similarity index 93%
rename from src/resources/parser/texture/basis.js
rename to src/framework/parsers/texture/basis.js
index 8447935ec..19c47c566 100644
--- a/src/resources/parser/texture/basis.js
+++ b/src/framework/parsers/texture/basis.js
@@ -1,9 +1,9 @@
 import { Asset } from '../../../framework/asset/asset.js';
 import { Texture } from '../../../platform/graphics/texture.js';
-import { basisTranscode } from '../../basis.js';
+import { basisTranscode } from '../../handlers/basis.js';
 import { ADDRESS_CLAMP_TO_EDGE, ADDRESS_REPEAT, TEXHINT_ASSET } from '../../../platform/graphics/constants.js';
 
-/** @typedef {import('../../texture.js').TextureParser} TextureParser */
+/** @typedef {import('../../handlers/texture.js').TextureParser} TextureParser */
 
 /**
  * Parser for basis files.
diff --git a/src/resources/parser/texture/dds.js b/src/framework/parsers/texture/dds.js
similarity index 98%
rename from src/resources/parser/texture/dds.js
rename to src/framework/parsers/texture/dds.js
index 480dc35a8..1badf6940 100644
--- a/src/resources/parser/texture/dds.js
+++ b/src/framework/parsers/texture/dds.js
@@ -11,7 +11,7 @@ import {
     TEXHINT_ASSET
 } from '../../../platform/graphics/constants.js';
 
-/** @typedef {import('../../texture.js').TextureParser} TextureParser */
+/** @typedef {import('../../handlers/texture.js').TextureParser} TextureParser */
 
 /**
  * Legacy texture parser for dds files.
diff --git a/src/resources/parser/texture/hdr.js b/src/framework/parsers/texture/hdr.js
similarity index 98%
rename from src/resources/parser/texture/hdr.js
rename to src/framework/parsers/texture/hdr.js
index 89d71452d..baeea9592 100644
--- a/src/resources/parser/texture/hdr.js
+++ b/src/framework/parsers/texture/hdr.js
@@ -12,7 +12,7 @@ import {
 
 import { Asset } from '../../../framework/asset/asset.js';
 
-/** @typedef {import('../../texture.js').TextureParser} TextureParser */
+/** @typedef {import('../../handlers/texture.js').TextureParser} TextureParser */
 
 /**
  * Texture parser for hdr files.
diff --git a/src/resources/parser/texture/img.js b/src/framework/parsers/texture/img.js
similarity index 98%
rename from src/resources/parser/texture/img.js
rename to src/framework/parsers/texture/img.js
index d870bf8b4..e381638e9 100644
--- a/src/resources/parser/texture/img.js
+++ b/src/framework/parsers/texture/img.js
@@ -8,7 +8,7 @@ import { Texture } from '../../../platform/graphics/texture.js';
 
 import { ABSOLUTE_URL } from '../../../framework/asset/constants.js';
 
-/** @typedef {import('../../texture.js').TextureParser} TextureParser */
+/** @typedef {import('../../handlers/texture.js').TextureParser} TextureParser */
 
 /**
  * Parser for browser-supported image formats.
diff --git a/src/resources/parser/texture/ktx.js b/src/framework/parsers/texture/ktx.js
similarity index 98%
rename from src/resources/parser/texture/ktx.js
rename to src/framework/parsers/texture/ktx.js
index 774f6322b..dee9a753f 100644
--- a/src/resources/parser/texture/ktx.js
+++ b/src/framework/parsers/texture/ktx.js
@@ -11,7 +11,7 @@ import {
     TEXHINT_ASSET
 } from '../../../platform/graphics/constants.js';
 
-/** @typedef {import('../../texture.js').TextureParser} TextureParser */
+/** @typedef {import('../../handlers/texture.js').TextureParser} TextureParser */
 
 // Defined here: https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
 const IDENTIFIER = [0x58544BAB, 0xBB313120, 0x0A1A0A0D]; // «KTX 11»\r\n\x1A\n
diff --git a/src/resources/parser/texture/ktx2.js b/src/framework/parsers/texture/ktx2.js
similarity index 96%
rename from src/resources/parser/texture/ktx2.js
rename to src/framework/parsers/texture/ktx2.js
index 409ea2364..b592a23fd 100644
--- a/src/resources/parser/texture/ktx2.js
+++ b/src/framework/parsers/texture/ktx2.js
@@ -1,11 +1,11 @@
 import { Debug } from '../../../core/debug.js';
 import { Asset } from '../../../framework/asset/asset.js';
 import { Texture } from '../../../platform/graphics/texture.js';
-import { basisTranscode } from '../../basis.js';
+import { basisTranscode } from '../../handlers/basis.js';
 import { ReadStream } from '../../../core/read-stream.js';
 import { ADDRESS_CLAMP_TO_EDGE, ADDRESS_REPEAT, TEXHINT_ASSET } from '../../../platform/graphics/constants.js';
 
-/** @typedef {import('../../texture.js').TextureParser} TextureParser */
+/** @typedef {import('../../handlers/texture.js').TextureParser} TextureParser */
 
 const KHRConstants = {
     KHR_DF_MODEL_ETC1S: 163,
diff --git a/src/framework/script.js b/src/framework/script.js
index 24eb739ea..be3d2ea3d 100644
--- a/src/framework/script.js
+++ b/src/framework/script.js
@@ -1,6 +1,6 @@
 import { events } from '../core/events.js';
 
-import { ScriptHandler } from '../resources/script.js';
+import { ScriptHandler } from '../framework/handlers/script.js';
 
 import { getApplication } from './globals.js';
 
diff --git a/src/framework/script/script.js b/src/framework/script/script.js
index c9e7e4ba9..8fb02cb20 100644
--- a/src/framework/script/script.js
+++ b/src/framework/script/script.js
@@ -1,7 +1,7 @@
 import { Debug } from '../../core/debug.js';
 import { EventHandler } from '../../core/event-handler.js';
 
-import { ScriptHandler } from '../../resources/script.js';
+import { ScriptHandler } from '../../framework/handlers/script.js';
 
 import { script } from '../script.js';
 import { AppBase } from '../app-base.js';
diff --git a/src/framework/template.js b/src/framework/template.js
index 437242c4c..b17c872a6 100644
--- a/src/framework/template.js
+++ b/src/framework/template.js
@@ -1,4 +1,4 @@
-import { SceneParser } from '../resources/parser/scene.js';
+import { SceneParser } from '../framework/parsers/scene.js';
 
 /** @typedef {import('./app-base.js').AppBase} AppBase */
 /** @typedef {import('./entity.js').Entity} Entity */
diff --git a/src/index.js b/src/index.js
index f771e9b81..64731b456 100644
--- a/src/index.js
+++ b/src/index.js
@@ -153,36 +153,36 @@ export { Bundle } from './framework/bundle/bundle.js';
 export { BundleRegistry } from './framework/bundle/bundle-registry.js';
 
 // RESOURCES
-export { basisInitialize, basisTranscode } from './resources/basis.js';
-export { AnimClipHandler } from './resources/anim-clip.js';
-export { AnimStateGraphHandler } from './resources/anim-state-graph.js';
-export { AnimationHandler } from './resources/animation.js';
-export { AudioHandler } from './resources/audio.js';
-export { BinaryHandler } from './resources/binary.js';
-export { BundleHandler } from './resources/bundle.js';
-export { ContainerHandler, ContainerResource } from './resources/container.js';
-export { createStyle, CssHandler } from './resources/css.js';
-export { CubemapHandler } from './resources/cubemap.js';
-export { FolderHandler } from './resources/folder.js';
-export { FontHandler } from './resources/font.js';
-export { HierarchyHandler } from './resources/hierarchy.js';
-export { HtmlHandler } from './resources/html.js';
-export { JsonHandler } from './resources/json.js';
-export { JsonStandardMaterialParser } from './resources/parser/material/json-standard-material.js';
-export { MaterialHandler } from './resources/material.js';
-export { ModelHandler } from './resources/model.js';
-export { RenderHandler } from './resources/render.js';
-export { ResourceHandler } from './resources/handler.js';
-export { ResourceLoader } from './resources/loader.js';
-export { ScriptHandler } from './resources/script.js';
-export { SceneHandler } from './resources/scene.js';
-export { SceneSettingsHandler } from './resources/scene-settings.js';
-export { ShaderHandler } from './resources/shader.js';
-export { SpriteHandler } from './resources/sprite.js';
-export { TemplateHandler } from './resources/template.js';
-export { TextHandler } from './resources/text.js';
-export { TextureHandler, TextureParser } from './resources/texture.js';
-export { TextureAtlasHandler } from './resources/texture-atlas.js';
+export { basisInitialize, basisTranscode } from './framework/handlers/basis.js';
+export { AnimClipHandler } from './framework/handlers/anim-clip.js';
+export { AnimStateGraphHandler } from './framework/handlers/anim-state-graph.js';
+export { AnimationHandler } from './framework/handlers/animation.js';
+export { AudioHandler } from './framework/handlers/audio.js';
+export { BinaryHandler } from './framework/handlers/binary.js';
+export { BundleHandler } from './framework/handlers/bundle.js';
+export { ContainerHandler, ContainerResource } from './framework/handlers/container.js';
+export { createStyle, CssHandler } from './framework/handlers/css.js';
+export { CubemapHandler } from './framework/handlers/cubemap.js';
+export { FolderHandler } from './framework/handlers/folder.js';
+export { FontHandler } from './framework/handlers/font.js';
+export { HierarchyHandler } from './framework/handlers/hierarchy.js';
+export { HtmlHandler } from './framework/handlers/html.js';
+export { JsonHandler } from './framework/handlers/json.js';
+export { JsonStandardMaterialParser } from './framework/parsers/material/json-standard-material.js';
+export { MaterialHandler } from './framework/handlers/material.js';
+export { ModelHandler } from './framework/handlers/model.js';
+export { RenderHandler } from './framework/handlers/render.js';
+export { ResourceHandler } from './framework/handlers/handler.js';
+export { ResourceLoader } from './framework/handlers/loader.js';
+export { ScriptHandler } from './framework/handlers/script.js';
+export { SceneHandler } from './framework/handlers/scene.js';
+export { SceneSettingsHandler } from './framework/handlers/scene-settings.js';
+export { ShaderHandler } from './framework/handlers/shader.js';
+export { SpriteHandler } from './framework/handlers/sprite.js';
+export { TemplateHandler } from './framework/handlers/template.js';
+export { TextHandler } from './framework/handlers/text.js';
+export { TextureHandler, TextureParser } from './framework/handlers/texture.js';
+export { TextureAtlasHandler } from './framework/handlers/texture-atlas.js';
 
 // ASSETS
 export * from './framework/asset/constants.js';
diff --git a/types-fixup.mjs b/types-fixup.mjs
index 3c848dc1a..61e288ef4 100644
--- a/types-fixup.mjs
+++ b/types-fixup.mjs
@@ -502,7 +502,7 @@ dts = dts.replace('get enabled(): boolean;', 'get enabled(): boolean;\n' + `
 `);
 fs.writeFileSync(path, dts);
 
-path = './types/resources/handler.d.ts';
+path = './types/framework/handlers/handler.d.ts';
 dts = fs.readFileSync(path, 'utf8');
 dts = dts.replace('export class ResourceHandler', 'export interface ResourceHandler');
 dts = dts.replace('patch(', 'patch?(');


Test patch:
diff --git a/test/asset/asset-registry.test.mjs b/test/asset/asset-registry.test.mjs
index e7f34dc29..6709585e7 100644
--- a/test/asset/asset-registry.test.mjs
+++ b/test/asset/asset-registry.test.mjs
@@ -1,8 +1,8 @@
 import { Application } from '../../src/framework/application.js';
 import { Asset } from '../../src/framework/asset/asset.js';
 import { AssetRegistry } from '../../src/framework/asset/asset-registry.js';
-import { GlbContainerResource } from '../../src/resources/parser/glb-container-resource.js';
-import { ResourceLoader } from '../../src/resources/loader.js';
+import { GlbContainerResource } from '../../src/framework/parsers/glb-container-resource.js';
+import { ResourceLoader } from '../../src/framework/handlers/loader.js';
 import { http, Http } from '../../src/platform/net/http.js';
 
 import { HTMLCanvasElement } from '@playcanvas/canvas-mock';
diff --git a/test/framework/application.test.mjs b/test/framework/application.test.mjs
index 6c834687f..dd497bdb0 100644
--- a/test/framework/application.test.mjs
+++ b/test/framework/application.test.mjs
@@ -7,7 +7,7 @@ import { Entity } from '../../src/framework/entity.js';
 import { GraphicsDevice } from '../../src/platform/graphics/graphics-device.js';
 import { I18n } from '../../src/framework/i18n/i18n.js';
 import { Lightmapper } from '../../src/scene/lightmapper/lightmapper.js';
-import { ResourceLoader } from '../../src/resources/loader.js';
+import { ResourceLoader } from '../../src/framework/handlers/loader.js';
 import { Scene } from '../../src/scene/scene.js';
 import { SceneRegistry } from '../../src/framework/scene-registry.js';
 import { ScriptRegistry } from '../../src/framework/script/script-registry.js';
diff --git a/test/i18n/i18n.test.mjs b/test/i18n/i18n.test.mjs
index 83ac36e50..264fae8cd 100644
--- a/test/i18n/i18n.test.mjs
+++ b/test/i18n/i18n.test.mjs
@@ -1,6 +1,6 @@
 import { Application } from '../../src/framework/application.js';
 import { Asset } from '../../src/framework/asset/asset.js';
-import { JsonHandler } from '../../src/resources/json.js';
+import { JsonHandler } from '../../src/framework/handlers/json.js';
 
 import { HTMLCanvasElement } from '@playcanvas/canvas-mock';