jsgui3-server 0.0.150 → 0.0.152

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 (86) hide show
  1. package/.github/instructions/copilot.instructions.md +1 -0
  2. package/AGENTS.md +2 -0
  3. package/README.md +89 -13
  4. package/admin-ui/v1/controls/admin_shell.js +702 -669
  5. package/admin-ui/v1/server.js +14 -1
  6. package/docs/api-reference.md +504 -306
  7. package/docs/books/creating-a-new-admin-ui/README.md +20 -20
  8. package/docs/books/website-design/01-introduction.md +73 -0
  9. package/docs/books/website-design/02-current-state.md +195 -0
  10. package/docs/books/website-design/03-base-class.md +181 -0
  11. package/docs/books/website-design/04-webpage.md +307 -0
  12. package/docs/books/website-design/05-website.md +456 -0
  13. package/docs/books/website-design/06-pages-storage.md +170 -0
  14. package/docs/books/website-design/07-api-layer.md +285 -0
  15. package/docs/books/website-design/08-server-integration.md +271 -0
  16. package/docs/books/website-design/09-cross-agent-review.md +190 -0
  17. package/docs/books/website-design/10-open-questions.md +196 -0
  18. package/docs/books/website-design/11-converged-recommendation.md +205 -0
  19. package/docs/books/website-design/12-content-model.md +395 -0
  20. package/docs/books/website-design/13-webpage-module-spec.md +404 -0
  21. package/docs/books/website-design/14-website-module-spec.md +541 -0
  22. package/docs/books/website-design/15-multi-repo-plan.md +275 -0
  23. package/docs/books/website-design/16-minimal-first.md +203 -0
  24. package/docs/books/website-design/17-implementation-report-codex.md +81 -0
  25. package/docs/books/website-design/README.md +43 -0
  26. package/docs/comprehensive-documentation.md +220 -220
  27. package/docs/configuration-reference.md +281 -204
  28. package/docs/middleware-guide.md +236 -0
  29. package/docs/proposals/jsgui3-website-and-webpage-design-jsgui3-server-support.md +257 -0
  30. package/docs/proposals/jsgui3-website-and-webpage-design-review.md +73 -0
  31. package/docs/proposals/jsgui3-website-and-webpage-design.md +732 -0
  32. package/docs/swagger.md +316 -0
  33. package/docs/system-architecture.md +24 -18
  34. package/examples/controls/1) window/server.js +6 -1
  35. package/examples/controls/21) mvvm and declarative api/check.js +94 -0
  36. package/examples/controls/21) mvvm and declarative api/check_output.txt +25 -0
  37. package/examples/controls/21) mvvm and declarative api/check_output_2.txt +27 -0
  38. package/examples/controls/21) mvvm and declarative api/client.js +241 -0
  39. declarative api/e2e-screenshot-1-name-change.png +0 -0
  40. declarative api/e2e-screenshot-2-toggled.png +0 -0
  41. declarative api/e2e-screenshot-3-final.png +0 -0
  42. declarative api/e2e-screenshot-final.png +0 -0
  43. package/examples/controls/21) mvvm and declarative api/e2e-test.js +175 -0
  44. package/examples/controls/21) mvvm and declarative api/out.html +1 -0
  45. package/examples/controls/21) mvvm and declarative api/page_out.html +1 -0
  46. package/examples/controls/21) mvvm and declarative api/server.js +18 -0
  47. package/examples/data-views/01) query-endpoint/server.js +61 -0
  48. package/labs/website-design/001-base-class-overhead/check.js +162 -0
  49. package/labs/website-design/002-pages-storage/check.js +244 -0
  50. package/labs/website-design/002-pages-storage/results.txt +0 -0
  51. package/labs/website-design/003-type-detection/check.js +193 -0
  52. package/labs/website-design/003-type-detection/results.txt +0 -0
  53. package/labs/website-design/004-two-stage-validation/check.js +314 -0
  54. package/labs/website-design/004-two-stage-validation/results.txt +0 -0
  55. package/labs/website-design/005-normalize-input/check.js +303 -0
  56. package/labs/website-design/006-serve-website-spike/check.js +290 -0
  57. package/labs/website-design/README.md +34 -0
  58. package/labs/website-design/manifest.json +68 -0
  59. package/labs/website-design/run-all.js +60 -0
  60. package/middleware/compression.js +217 -0
  61. package/middleware/index.js +15 -0
  62. package/middleware/json-body.js +126 -0
  63. package/module.js +3 -0
  64. package/openapi.js +474 -0
  65. package/package.json +11 -8
  66. package/publishers/Publishers.js +6 -5
  67. package/publishers/http-function-publisher.js +135 -126
  68. package/publishers/http-webpage-publisher.js +89 -11
  69. package/publishers/query-publisher.js +116 -0
  70. package/publishers/swagger-publisher.js +203 -0
  71. package/publishers/swagger-ui.js +578 -0
  72. package/resources/adapters/array-adapter.js +143 -0
  73. package/resources/query-resource.js +131 -0
  74. package/serve-factory.js +756 -18
  75. package/server.js +502 -123
  76. package/tests/README.md +23 -1
  77. package/tests/admin-ui-jsgui-controls.test.js +16 -1
  78. package/tests/helpers/playwright-e2e-harness.js +326 -0
  79. package/tests/openapi.test.js +319 -0
  80. package/tests/playwright-smoke.test.js +134 -0
  81. package/tests/publish-enhancements.test.js +673 -0
  82. package/tests/query-publisher.test.js +430 -0
  83. package/tests/quick-json-body-test.js +169 -0
  84. package/tests/serve.test.js +425 -122
  85. package/tests/swagger-publisher.test.js +1076 -0
  86. package/tests/test-runner.js +1 -0
@@ -176,5 +176,6 @@ model.count++; // Triggers change event
176
176
  | Comprehensive API | `docs/comprehensive-documentation.md` |
177
177
  | Control development | `docs/controls-development.md` |
178
178
  | Publisher system | `docs/publishers-guide.md` |
179
+ | Middleware & compression | `docs/middleware-guide.md` |
179
180
  | Troubleshooting | `docs/troubleshooting.md` |
180
181
  | **Broken stuff** | `docs/agent-development-guide.md` |
package/AGENTS.md CHANGED
@@ -19,6 +19,7 @@
19
19
  - **[docs/controls-development.md](docs/controls-development.md)** - Guide for developing custom JSGUI3 controls
20
20
  - **[docs/publishers-guide.md](docs/publishers-guide.md)** - Guide for publishers and content serving
21
21
  - **[docs/resources-guide.md](docs/resources-guide.md)** - Guide for resources and data abstraction
22
+ - **[docs/middleware-guide.md](docs/middleware-guide.md)** - Middleware pipeline and built-in compression middleware
22
23
 
23
24
  ### Specialized Documentation
24
25
  - **[docs/GUIDE_TO_AGENTIC_WORKFLOWS_BY_GROK.md](docs/GUIDE_TO_AGENTIC_WORKFLOWS_BY_GROK.md)** - Comprehensive guide to agentic workflows and autonomous task execution
@@ -61,6 +62,7 @@
61
62
  - **Custom control development** → `docs/controls-development.md`
62
63
  - **Publisher system** → `docs/publishers-guide.md`
63
64
  - **Resource management** → `docs/resources-guide.md`
65
+ - **Middleware and compression** → `docs/middleware-guide.md`
64
66
  - **Admin UI extensions** → `docs/admin-extension-guide.md`
65
67
 
66
68
  ### Agent Development
package/README.md CHANGED
@@ -33,6 +33,27 @@ Server.serve(MyControl);
33
33
  Server.serve(MyControl, { port: 3000 });
34
34
  ```
35
35
 
36
+ ### Port Conflict Fallback
37
+
38
+ ```javascript
39
+ Server.serve({
40
+ Ctrl: MyControl,
41
+ port: 52000,
42
+ on_port_conflict: 'auto-loopback' // retry on 127.0.0.1 with a free port
43
+ });
44
+ ```
45
+
46
+ With manual `server.start(...)`, you can print the effective endpoint:
47
+
48
+ ```javascript
49
+ server.start(52000, (err) => {
50
+ if (err) throw err;
51
+ server.print_endpoints({ include_index: true });
52
+ }, {
53
+ on_port_conflict: 'auto-loopback'
54
+ });
55
+ ```
56
+
36
57
  ### Single Page with Metadata
37
58
 
38
59
  ```javascript
@@ -170,9 +191,9 @@ sse_publisher.broadcast('resource_update', { running: 3, total: 5 });
170
191
 
171
192
  ## Admin UI Dashboard
172
193
 
173
- Every jsgui3-server instance includes a built-in admin dashboard at `/admin/v1` with live stats, resource inspection, route listing, and SSE-driven heartbeat updates. The dashboard is session-authenticated (default dev credentials: `admin` / `admin`).
174
-
175
- The admin shell is implemented with jsgui controls for navigation and dynamic panel rendering (control-first composition), and is covered by the interaction regression suite in `tests/admin-ui-jsgui-controls.test.js`.
194
+ Every jsgui3-server instance includes a built-in admin dashboard at `/admin/v1` with live stats, resource inspection, route listing, and SSE-driven heartbeat updates. The dashboard is session-authenticated (default dev credentials: `admin` / `admin`).
195
+
196
+ The admin shell is implemented with jsgui controls for navigation and dynamic panel rendering (control-first composition), and is covered by the interaction regression suite in `tests/admin-ui-jsgui-controls.test.js`.
176
197
 
177
198
  ### Disabling the Admin UI
178
199
 
@@ -219,10 +240,10 @@ server.admin_v1.add_endpoint({
219
240
  });
220
241
  ```
221
242
 
222
- ### Plugin Pattern
243
+ ### Plugin Pattern
223
244
 
224
245
  ```javascript
225
- server.admin_v1.use((admin) => {
246
+ server.admin_v1.use((admin) => {
226
247
  admin.add_section({
227
248
  id: 'logs',
228
249
  label: 'Logs',
@@ -233,14 +254,14 @@ server.admin_v1.use((admin) => {
233
254
  res.end(JSON.stringify({ recent: ['log1', 'log2'] }));
234
255
  }
235
256
  });
236
- });
237
- ```
238
-
239
- ### Admin UI Regression Test
240
-
241
- ```bash
242
- node tests/test-runner.js --test=admin-ui-jsgui-controls.test.js
243
- ```
257
+ });
258
+ ```
259
+
260
+ ### Admin UI Regression Test
261
+
262
+ ```bash
263
+ node tests/test-runner.js --test=admin-ui-jsgui-controls.test.js
264
+ ```
244
265
 
245
266
  ### Declarative Configuration via `Server.serve()`
246
267
 
@@ -298,6 +319,61 @@ jsgui.Admin_User_Store
298
319
 
299
320
  See [Admin Extension Guide](docs/admin-extension-guide.md) for detailed API reference.
300
321
 
322
+ ## Middleware
323
+
324
+ jsgui3-server includes an Express-style `server.use()` middleware pipeline. Middleware runs before every request reaches the router.
325
+
326
+ ### Built-in Compression
327
+
328
+ Enable gzip/deflate/brotli compression for JSON, HTML, CSS, and JS responses:
329
+
330
+ ```javascript
331
+ const { compression } = require('jsgui3-server/middleware');
332
+
333
+ const server = new Server({ Ctrl: MyControl, src_path_client_js: __dirname + '/client.js' });
334
+ server.use(compression());
335
+ server.on('ready', () => server.start(8080));
336
+ ```
337
+
338
+ Or via `Server.serve()`:
339
+
340
+ ```javascript
341
+ Server.serve({
342
+ Ctrl: MyControl,
343
+ compression: true, // enable with defaults
344
+ port: 8080
345
+ });
346
+
347
+ // With options:
348
+ Server.serve({
349
+ Ctrl: MyControl,
350
+ compression: { threshold: 512 },
351
+ port: 8080
352
+ });
353
+ ```
354
+
355
+ ### Custom Middleware
356
+
357
+ ```javascript
358
+ // Request logger
359
+ server.use((req, res, next) => {
360
+ console.log(`${req.method} ${req.url}`);
361
+ next();
362
+ });
363
+
364
+ // Multiple middleware via Server.serve()
365
+ Server.serve({
366
+ Ctrl: MyControl,
367
+ middleware: [
368
+ (req, res, next) => { console.log(req.url); next(); },
369
+ compression({ threshold: 512 })
370
+ ],
371
+ port: 8080
372
+ });
373
+ ```
374
+
375
+ See [Middleware Guide](docs/middleware-guide.md) for the full API reference and response-wrapping patterns.
376
+
301
377
  ## Architecture Overview
302
378
 
303
379
  The server operates as a bridge between server-side JavaScript applications and browser clients, offering: