neo.mjs 9.10.4 → 9.10.5

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.
package/ServiceWorker.mjs CHANGED
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='9.10.4'
23
+ * @member {String} version='9.10.5'
24
24
  */
25
- version: '9.10.4'
25
+ version: '9.10.5'
26
26
  }
27
27
 
28
28
  /**
@@ -16,7 +16,7 @@
16
16
  "@type": "Organization",
17
17
  "name": "Neo.mjs"
18
18
  },
19
- "datePublished": "2025-06-06",
19
+ "datePublished": "2025-06-09",
20
20
  "publisher": {
21
21
  "@type": "Organization",
22
22
  "name": "Neo.mjs"
@@ -107,7 +107,7 @@ class FooterContainer extends Container {
107
107
  }, {
108
108
  module: Component,
109
109
  cls : ['neo-version'],
110
- html : 'v9.10.4'
110
+ html : 'v9.10.5'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -119,177 +119,174 @@ if (programOpts.info) {
119
119
  process.exit(1);
120
120
  }
121
121
 
122
- fs.mkdir(path.join(folder, '/view'), { recursive: true }, (err) => {
123
- if (err) {
124
- throw err;
125
- }
122
+ fs.mkdirpSync(path.join(folder, '/view'), {recursive: true});
123
+
124
+ const appContent = [
125
+ "import Viewport from './view/Viewport.mjs';",
126
+ "",
127
+ "export const onStart = () => Neo.app({",
128
+ " mainView: Viewport,",
129
+ " name : '" + appName + "'",
130
+ "});"
131
+ ].join(os.EOL);
132
+
133
+ fs.writeFileSync(folder + '/app.mjs', appContent);
134
+
135
+ const indexContent = [
136
+ "<!DOCTYPE HTML>",
137
+ "<html>",
138
+ "<head>",
139
+ ' <meta name="viewport" content="width=device-width, initial-scale=1">',
140
+ ' <meta charset="UTF-8">',
141
+ " <title>" + appName + "</title>",
142
+ "</head>",
143
+ "<body>",
144
+ ' <script src="../../src/MicroLoader.mjs" type="module"></script>',
145
+ "</body>",
146
+ "</html>",
147
+ ];
148
+
149
+ fs.writeFileSync(path.join(folder, 'index.html'), indexContent.join(os.EOL));
150
+
151
+ let neoConfig = {
152
+ appPath : `${insideNeo ? '' : '../../'}${appPath}app.mjs`,
153
+ basePath : '../../',
154
+ environment: 'development',
155
+ mainPath : `${insideNeo ? './' : '../node_modules/neo.mjs/src/'}Main.mjs`
156
+ };
157
+
158
+ if (!(
159
+ mainThreadAddons.includes('DragDrop') &&
160
+ mainThreadAddons.includes('Navigator') &&
161
+ mainThreadAddons.includes('Stylesheet') &&
162
+ mainThreadAddons.length === 3)
163
+ ) {
164
+ neoConfig.mainThreadAddons = mainThreadAddons;
165
+ }
126
166
 
127
- const appContent = [
128
- "import MainContainer from './view/MainContainer.mjs';",
129
- "",
130
- "export const onStart = () => Neo.app({",
131
- " mainView: MainContainer,",
132
- " name : '" + appName + "'",
133
- "});"
134
- ].join(os.EOL);
135
-
136
- fs.writeFileSync(folder + '/app.mjs', appContent);
137
-
138
- const indexContent = [
139
- "<!DOCTYPE HTML>",
140
- "<html>",
141
- "<head>",
142
- ' <meta name="viewport" content="width=device-width, initial-scale=1">',
143
- ' <meta charset="UTF-8">',
144
- " <title>" + appName + "</title>",
145
- "</head>",
146
- "<body>",
147
- ' <script src="../../src/MicroLoader.mjs" type="module"></script>',
148
- "</body>",
149
- "</html>",
150
- ];
151
-
152
- fs.writeFileSync(path.join(folder, 'index.html'), indexContent.join(os.EOL));
153
-
154
- let neoConfig = {
155
- appPath : `${insideNeo ? '' : '../../'}${appPath}app.mjs`,
156
- basePath : '../../',
157
- environment: 'development',
158
- mainPath : `${insideNeo ? './' : '../node_modules/neo.mjs/src/'}Main.mjs`
159
- };
160
-
161
- if (!(
162
- mainThreadAddons.includes('DragDrop') &&
163
- mainThreadAddons.includes('Navigator') &&
164
- mainThreadAddons.includes('Stylesheet') &&
165
- mainThreadAddons.length === 3)
166
- ) {
167
- neoConfig.mainThreadAddons = mainThreadAddons;
167
+ if (!themes.includes('all')) { // default value
168
+ if (themes.includes('none')) {
169
+ neoConfig.themes = [];
170
+ } else {
171
+ neoConfig.themes = themes;
168
172
  }
173
+ }
169
174
 
170
- if (!themes.includes('all')) { // default value
171
- if (themes.includes('none')) {
172
- neoConfig.themes = [];
173
- } else {
174
- neoConfig.themes = themes;
175
- }
176
- }
175
+ if (useSharedWorkers !== 'no') {
176
+ neoConfig.useSharedWorkers = true;
177
+ }
177
178
 
178
- if (useSharedWorkers !== 'no') {
179
- neoConfig.useSharedWorkers = true;
180
- }
179
+ if (useServiceWorker !== 'no') {
180
+ neoConfig.useServiceWorker = true;
181
+ }
181
182
 
182
- if (useServiceWorker !== 'no') {
183
- neoConfig.useServiceWorker = true;
184
- }
183
+ if (!insideNeo) {
184
+ neoConfig.workerBasePath = '../../node_modules/neo.mjs/src/worker/';
185
+ }
185
186
 
186
- if (!insideNeo) {
187
- neoConfig.workerBasePath = '../../node_modules/neo.mjs/src/worker/';
188
- }
187
+ let configs = Object.entries(neoConfig).sort((a, b) => a[0].localeCompare(b[0]));
188
+ neoConfig = {};
189
+
190
+ configs.forEach(([key, value]) => {
191
+ neoConfig[key] = value;
192
+ });
189
193
 
190
- let configs = Object.entries(neoConfig).sort((a, b) => a[0].localeCompare(b[0]));
191
- neoConfig = {};
192
-
193
- configs.forEach(([key, value]) => {
194
- neoConfig[key] = value;
195
- });
196
-
197
- fs.writeFileSync(path.join(folder, 'neo-config.json'), JSON.stringify(neoConfig, null, 4));
198
-
199
- const mainContainerContent = [
200
- "import Component from '../../../" + (insideNeo ? '' : 'node_modules/neo.mjs/') + "src/component/Base.mjs';",
201
- "import TabContainer from '../../../" + (insideNeo ? '' : 'node_modules/neo.mjs/') + "src/tab/Container.mjs';",
202
- "import Viewport from '../../../" + (insideNeo ? '' : 'node_modules/neo.mjs/') + "src/container/Viewport.mjs';",
203
- "",
204
- "/**",
205
- " * @class " + appName + ".view.MainContainer",
206
- " * @extends Neo.container.Viewport",
207
- " */",
208
- "class MainContainer extends Viewport {",
209
- " static config = {",
210
- " /**",
211
- " * @member {String} className='" + appName + ".view.MainContainer'",
212
- " * @protected",
213
- " */",
214
- " className: '" + appName + ".view.MainContainer',",
215
- " /**",
216
- " * @member {Object[]} items",
217
- " */",
218
- " items: [{",
219
- " module: TabContainer,",
220
- " height: 300,",
221
- " width : 500,",
222
- " style : {flex: 'none', margin: '20px'},",
223
- "",
224
- " itemDefaults: {",
225
- " module: Component,",
226
- " cls : ['neo-examples-tab-component'],",
227
- " style : {padding: '20px'},",
228
- " },",
229
- "",
230
- " items: [{",
231
- " header: {",
232
- " iconCls: 'fa fa-home',",
233
- " text : 'Tab 1'",
234
- " },",
235
- " vdom: {innerHTML: 'Welcome to your new Neo App.'}",
236
- " }, {",
237
- " header: {",
238
- " iconCls: 'fa fa-play-circle',",
239
- " text : 'Tab 2'",
240
- " },",
241
- " vdom: {innerHTML: 'Have fun creating something awesome!'}",
242
- " }]",
243
- " }],",
244
- " /*",
245
- " * @member {Object} layout={ntype:'fit'}",
246
- " */",
247
- " layout: {ntype: 'fit'}",
248
- " }",
249
- "}",
250
- "",
251
- "export default Neo.setupClass(MainContainer);"
252
- ].join(os.EOL);
253
-
254
- fs.writeFileSync(path.join(folder + '/view/MainContainer.mjs'), mainContainerContent);
255
-
256
- let appJsonPath = path.resolve(cwd, 'buildScripts/myApps.json'),
257
- appJson;
194
+ fs.writeFileSync(path.join(folder, 'neo-config.json'), JSON.stringify(neoConfig, null, 4));
195
+
196
+ const viewportContent = [
197
+ "import BaseViewport from '../../../" + (insideNeo ? '' : 'node_modules/neo.mjs/') + "src/container/Viewport.mjs';",
198
+ "import Component from '../../../" + (insideNeo ? '' : 'node_modules/neo.mjs/') + "src/component/Base.mjs';",
199
+ "import TabContainer from '../../../" + (insideNeo ? '' : 'node_modules/neo.mjs/') + "src/tab/Container.mjs';",
200
+ "",
201
+ "/**",
202
+ " * @class " + appName + ".view.Viewport",
203
+ " * @extends Neo.container.Viewport",
204
+ " */",
205
+ "class Viewport extends BaseViewport {",
206
+ " static config = {",
207
+ " /**",
208
+ " * @member {String} className='" + appName + ".view.Viewport'",
209
+ " * @protected",
210
+ " */",
211
+ " className: '" + appName + ".view.Viewport',",
212
+ " /*",
213
+ " * @member {Object} layout={ntype:'fit'}",
214
+ " */",
215
+ " layout: {ntype: 'fit'},",
216
+ "",
217
+ " /**",
218
+ " * @member {Object[]} items",
219
+ " */",
220
+ " items: [{",
221
+ " module: TabContainer,",
222
+ " height: 300,",
223
+ " width : 500,",
224
+ " style : {flex: 'none', margin: '20px'},",
225
+ "",
226
+ " itemDefaults: {",
227
+ " module: Component,",
228
+ " cls : ['neo-examples-tab-component'],",
229
+ " style : {padding: '20px'},",
230
+ " },",
231
+ "",
232
+ " items: [{",
233
+ " header: {",
234
+ " iconCls: 'fa fa-home',",
235
+ " text : 'Tab 1'",
236
+ " },",
237
+ " vdom: {innerHTML: 'Welcome to your new Neo App.'}",
238
+ " }, {",
239
+ " header: {",
240
+ " iconCls: 'fa fa-play-circle',",
241
+ " text : 'Tab 2'",
242
+ " },",
243
+ " vdom: {innerHTML: 'Have fun creating something awesome!'}",
244
+ " }]",
245
+ " }]",
246
+ " }",
247
+ "}",
248
+ "",
249
+ "export default Neo.setupClass(Viewport);"
250
+ ].join(os.EOL);
251
+
252
+ fs.writeFileSync(path.join(folder + '/view/Viewport.mjs'), viewportContent);
253
+
254
+ let appJsonPath = path.resolve(cwd, 'buildScripts/myApps.json'),
255
+ appJson;
256
+
257
+ if (fs.existsSync(appJsonPath)) {
258
+ appJson = requireJson(appJsonPath);
259
+ } else {
260
+ appJsonPath = path.resolve(__dirname, 'buildScripts/webpack/json/myApps.json');
258
261
 
259
262
  if (fs.existsSync(appJsonPath)) {
260
263
  appJson = requireJson(appJsonPath);
261
264
  } else {
262
- appJsonPath = path.resolve(__dirname, 'buildScripts/webpack/json/myApps.json');
263
-
264
- if (fs.existsSync(appJsonPath)) {
265
- appJson = requireJson(appJsonPath);
266
- } else {
267
- appJson = requireJson(path.resolve(__dirname, 'buildScripts/webpack/json/myApps.template.json'));
268
- }
265
+ appJson = requireJson(path.resolve(__dirname, 'buildScripts/webpack/json/myApps.template.json'));
269
266
  }
267
+ }
270
268
 
271
- if (!appJson.apps.includes(appName)) {
272
- appJson.apps.push(appName);
273
- appJson.apps.sort();
274
- }
269
+ if (!appJson.apps.includes(appName)) {
270
+ appJson.apps.push(appName);
271
+ appJson.apps.sort();
272
+ }
275
273
 
276
- fs.writeFileSync(appJsonPath, JSON.stringify(appJson, null, 4));
277
-
278
- if (mainThreadAddons.includes('HighlightJS')) {
279
- const childProcess = spawnSync('node', [
280
- './buildScripts/copyFolder.mjs',
281
- '-s',
282
- path.resolve(neoPath, 'docs/resources'),
283
- '-t',
284
- path.resolve(folder, 'resources'),
285
- ], { env: process.env, cwd: process.cwd(), stdio: 'inherit' });
286
- childProcess.status && process.exit(childProcess.status);
287
- }
274
+ fs.writeFileSync(appJsonPath, JSON.stringify(appJson, null, 4));
275
+
276
+ if (mainThreadAddons.includes('HighlightJS')) {
277
+ const childProcess = spawnSync('node', [
278
+ './buildScripts/copyFolder.mjs',
279
+ '-s',
280
+ path.resolve(neoPath, 'docs/resources'),
281
+ '-t',
282
+ path.resolve(folder, 'resources'),
283
+ ], { env: process.env, cwd: process.cwd(), stdio: 'inherit' });
284
+ childProcess.status && process.exit(childProcess.status);
285
+ }
288
286
 
289
- const processTime = (Math.round((new Date - startDate) * 100) / 100000).toFixed(2);
290
- console.log(`\nTotal time for ${programName}: ${processTime}s`);
287
+ const processTime = (Math.round((new Date - startDate) * 100) / 100000).toFixed(2);
288
+ console.log(`\nTotal time for ${programName}: ${processTime}s`);
291
289
 
292
- process.exit();
293
- });
290
+ process.exit();
294
291
  });
295
292
  }
@@ -1,22 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import chalk from 'chalk';
4
- import envinfo from 'envinfo';
5
- import fs from 'fs-extra';
6
- import os from 'os';
7
- import path from 'path';
3
+ import fs from 'fs-extra';
4
+ import os from 'os';
5
+ import path from 'path';
8
6
 
9
7
  const
10
- __dirname = path.resolve(),
11
- cwd = process.cwd(),
8
+ root = path.resolve(),
12
9
  requireJson = path => JSON.parse(fs.readFileSync((path))),
13
- packageJson = requireJson(path.join(__dirname, 'package.json')),
10
+ packageJson = requireJson(path.join(root, 'package.json')),
14
11
  insideNeo = packageJson.name.includes('neo.mjs'),
15
- neoPath = insideNeo ? './' : './node_modules/neo.mjs/',
16
12
  programName = `${packageJson.name} inject-package-version`;
17
13
 
18
14
  let startDate = new Date(),
19
- configPath = path.join(__dirname, 'src/DefaultConfig.mjs'),
15
+ configPath = path.join(root, 'src/DefaultConfig.mjs'),
20
16
  contentArray = fs.readFileSync(configPath).toString().split(os.EOL),
21
17
  i = 0,
22
18
  len = contentArray.length,
@@ -34,7 +30,7 @@ for (; i < len; i++) {
34
30
 
35
31
  fs.writeFileSync(configPath, contentArray.join(os.EOL));
36
32
 
37
- serviceWorkerPath = path.join(__dirname, 'ServiceWorker.mjs');
33
+ serviceWorkerPath = path.join(root, 'ServiceWorker.mjs');
38
34
  serviceContentArray = fs.readFileSync(serviceWorkerPath, 'utf-8').toString().split(os.EOL);
39
35
 
40
36
  i = 0;
@@ -53,7 +49,7 @@ fs.writeFileSync(serviceWorkerPath, serviceContentArray.join(os.EOL));
53
49
 
54
50
  // Update the version inside the Portal App Footer
55
51
  if (insideNeo) {
56
- const footerPath = path.join(__dirname, 'apps/portal/view/home/FooterContainer.mjs');
52
+ const footerPath = path.join(root, 'apps/portal/view/home/FooterContainer.mjs');
57
53
 
58
54
  if (fs.existsSync(footerPath)) {
59
55
  const footerContentArray = fs.readFileSync(footerPath).toString().split(os.EOL);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name" : "neo.mjs",
3
- "version" : "9.10.4",
3
+ "version" : "9.10.5",
4
4
  "description" : "The webworkers driven UI framework",
5
5
  "type" : "module",
6
6
  "repository" : {
@@ -264,12 +264,12 @@ const DefaultConfig = {
264
264
  useVdomWorker: true,
265
265
  /**
266
266
  * buildScripts/injectPackageVersion.mjs will update this value
267
- * @default '9.10.4'
267
+ * @default '9.10.5'
268
268
  * @memberOf! module:Neo
269
269
  * @name config.version
270
270
  * @type String
271
271
  */
272
- version: '9.10.4'
272
+ version: '9.10.5'
273
273
  };
274
274
 
275
275
  Object.assign(DefaultConfig, {
@@ -281,23 +281,7 @@ class Container extends BaseContainer {
281
281
  items : tabComponents,
282
282
  layout : {ntype: 'card', activeIndex: me.activeIndex, removeInactiveCards: me.removeInactiveCards},
283
283
  useActiveTabIndicator: me.useActiveTabIndicator,
284
- ...me.contentContainer,
285
-
286
- insert(index, item, silent) {
287
- if (item?.isTab) {
288
- me.insert(index, item, silent)
289
- } else {
290
- super.insert(index, item, silent)
291
- }
292
- },
293
-
294
- remove(component, destroyItem, silent) {
295
- if (component?.isTab) {
296
- me.remove(component, destroyItem, silent)
297
- } else {
298
- super.remove(component, destroyItem, silent)
299
- }
300
- }
284
+ ...me.contentContainer
301
285
  }];
302
286
 
303
287
  me.itemDefaults = null;
@@ -42,12 +42,7 @@ class App extends Base {
42
42
  * @member {Boolean} singleton=true
43
43
  * @protected
44
44
  */
45
- singleton: true,
46
- /**
47
- * @member {String} workerId='app'
48
- * @protected
49
- */
50
- workerId: 'app'
45
+ singleton: true
51
46
  }
52
47
 
53
48
  /**
@@ -67,6 +62,11 @@ class App extends Base {
67
62
  * @protected
68
63
  */
69
64
  themeFilesCache = []
65
+ /**
66
+ * @member {String} workerId='app'
67
+ * @protected
68
+ */
69
+ workerId = 'app'
70
70
 
71
71
  /**
72
72
  * @param {Object} config
@@ -19,12 +19,7 @@ class Worker extends Base {
19
19
  /**
20
20
  * @member {String[]|Neo.core.Base[]|null} mixins=[Observable,RemoteMethodAccess]
21
21
  */
22
- mixins: [Observable, RemoteMethodAccess],
23
- /**
24
- * @member {String|null} workerId=null
25
- * @protected
26
- */
27
- workerId: null
22
+ mixins: [Observable, RemoteMethodAccess]
28
23
  }
29
24
 
30
25
  /**
@@ -48,6 +43,11 @@ class Worker extends Base {
48
43
  * @member {Array|null} ports=null
49
44
  */
50
45
  ports = null
46
+ /**
47
+ * @member {String|null} workerId=null
48
+ * @protected
49
+ */
50
+ workerId = null
51
51
 
52
52
  /**
53
53
  * @param {Object} config
@@ -25,14 +25,15 @@ class Canvas extends Base {
25
25
  * @member {Boolean} singleton=true
26
26
  * @protected
27
27
  */
28
- singleton: true,
29
- /**
30
- * @member {String} workerId='canvas'
31
- * @protected
32
- */
33
- workerId: 'canvas'
28
+ singleton: true
34
29
  }
35
30
 
31
+ /**
32
+ * @member {String} workerId='canvas'
33
+ * @protected
34
+ */
35
+ workerId = 'canvas'
36
+
36
37
  /**
37
38
  *
38
39
  */
@@ -23,12 +23,7 @@ class Data extends Base {
23
23
  * @member {Boolean} singleton=true
24
24
  * @protected
25
25
  */
26
- singleton: true,
27
- /**
28
- * @member {String} workerId='data'
29
- * @protected
30
- */
31
- workerId: 'data'
26
+ singleton: true
32
27
  }
33
28
 
34
29
  /**
@@ -41,6 +36,11 @@ class Data extends Base {
41
36
  * @protected
42
37
  */
43
38
  rpcMessageManagerLoaded = false
39
+ /**
40
+ * @member {String} workerId='data'
41
+ * @protected
42
+ */
43
+ workerId = 'data'
44
44
 
45
45
  /**
46
46
  *
@@ -20,14 +20,15 @@ class Task extends Base {
20
20
  * @member {Boolean} singleton=true
21
21
  * @protected
22
22
  */
23
- singleton: true,
24
- /**
25
- * @member {String} workerId='task'
26
- * @protected
27
- */
28
- workerId: 'task'
23
+ singleton: true
29
24
  }
30
25
 
26
+ /**
27
+ * @member {String} workerId='task'
28
+ * @protected
29
+ */
30
+ workerId = 'task'
31
+
31
32
  /**
32
33
  *
33
34
  */
@@ -21,14 +21,15 @@ class VDom extends Base {
21
21
  * @member {Boolean} singleton=true
22
22
  * @protected
23
23
  */
24
- singleton: true,
25
- /**
26
- * @member {String} workerId='vdom'
27
- * @protected
28
- */
29
- workerId: 'vdom'
24
+ singleton: true
30
25
  }
31
26
 
27
+ /**
28
+ * @member {String} workerId='vdom'
29
+ * @protected
30
+ */
31
+ workerId = 'vdom'
32
+
32
33
  /**
33
34
  *
34
35
  */