1- import Neo from '../Neo.mjs' ;
2- import Base from './Base.mjs' ;
3- import Fetch from '../Fetch.mjs' ;
4- import Xhr from '../Xhr.mjs' ;
1+ import Neo from '../Neo.mjs' ;
2+ import Base from './Base.mjs' ;
3+ import Fetch from '../Fetch.mjs' ;
4+ import Instance from '../manager/Instance.mjs' ;
5+ import Xhr from '../Xhr.mjs' ;
56
67/**
78 * The Data worker is responsible to handle all the communication to the backend (e.g. Ajax-calls).
@@ -25,6 +26,7 @@ class Data extends Base {
2526 remote : {
2627 app : [
2728 'createInstance' ,
29+ 'loadDataModule' ,
2830 'loadModule'
2931 ]
3032 } ,
@@ -103,6 +105,62 @@ class Data extends Base {
103105 }
104106 }
105107
108+ /**
109+ * @summary Dynamically loads a data module into the Data Worker using folder-scoped imports.
110+ * This restricts Webpack's context to specific sub-folders (connection, parser, normalizer),
111+ * preventing bundle bloat.
112+ *
113+ * @param {Object } msg
114+ * @param {String } msg.className The fully qualified class name (e.g., 'Neo.data.connection.Fetch')
115+ * @returns {Promise<Object> } {success: true, className} or {success: false, error}
116+ */
117+ async loadDataModule ( { className} ) {
118+ const parts = className . split ( '.' ) ;
119+
120+ if ( parts [ 0 ] !== 'Neo' || parts [ 1 ] !== 'data' ) {
121+ return { success : false , error : 'Not a Neo.data class' } ;
122+ }
123+
124+ const
125+ type = parts [ 2 ] ,
126+ name = parts . slice ( 3 ) . join ( '/' ) ;
127+
128+ try {
129+ switch ( type ) {
130+ case 'connection' :
131+ await import (
132+ /* webpackInclude: /src\/data\/connection\/.*\.mjs$/ */
133+ /* webpackExclude: /(?:\/|\\)(buildScripts|dist|node_modules)/ */
134+ /* webpackMode: "lazy" */
135+ `../data/connection/${ name } .mjs`
136+ ) ;
137+ break ;
138+ case 'parser' :
139+ await import (
140+ /* webpackInclude: /src\/data\/parser\/.*\.mjs$/ */
141+ /* webpackExclude: /(?:\/|\\)(buildScripts|dist|node_modules)/ */
142+ /* webpackMode: "lazy" */
143+ `../data/parser/${ name } .mjs`
144+ ) ;
145+ break ;
146+ case 'normalizer' :
147+ await import (
148+ /* webpackInclude: /src\/data\/normalizer\/.*\.mjs$/ */
149+ /* webpackExclude: /(?:\/|\\)(buildScripts|dist|node_modules)/ */
150+ /* webpackMode: "lazy" */
151+ `../data/normalizer/${ name } .mjs`
152+ ) ;
153+ break ;
154+ default :
155+ return { success : false , error : `Unsupported data module type: ${ type } ` } ;
156+ }
157+ return { success : true , className} ;
158+ } catch ( e ) {
159+ console . error ( `Data Worker: Failed to load data module ${ className } ` , e ) ;
160+ return { success : false , className, error : e . message }
161+ }
162+ }
163+
106164 /**
107165 * @summary Remotely loads an ES module into the Data Worker.
108166 * This method uses a scoped dynamic import to ensure Webpack only bundles
0 commit comments