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.
- package/.github/instructions/copilot.instructions.md +1 -0
- package/AGENTS.md +2 -0
- package/README.md +89 -13
- package/admin-ui/v1/controls/admin_shell.js +702 -669
- package/admin-ui/v1/server.js +14 -1
- package/docs/api-reference.md +504 -306
- package/docs/books/creating-a-new-admin-ui/README.md +20 -20
- package/docs/books/website-design/01-introduction.md +73 -0
- package/docs/books/website-design/02-current-state.md +195 -0
- package/docs/books/website-design/03-base-class.md +181 -0
- package/docs/books/website-design/04-webpage.md +307 -0
- package/docs/books/website-design/05-website.md +456 -0
- package/docs/books/website-design/06-pages-storage.md +170 -0
- package/docs/books/website-design/07-api-layer.md +285 -0
- package/docs/books/website-design/08-server-integration.md +271 -0
- package/docs/books/website-design/09-cross-agent-review.md +190 -0
- package/docs/books/website-design/10-open-questions.md +196 -0
- package/docs/books/website-design/11-converged-recommendation.md +205 -0
- package/docs/books/website-design/12-content-model.md +395 -0
- package/docs/books/website-design/13-webpage-module-spec.md +404 -0
- package/docs/books/website-design/14-website-module-spec.md +541 -0
- package/docs/books/website-design/15-multi-repo-plan.md +275 -0
- package/docs/books/website-design/16-minimal-first.md +203 -0
- package/docs/books/website-design/17-implementation-report-codex.md +81 -0
- package/docs/books/website-design/README.md +43 -0
- package/docs/comprehensive-documentation.md +220 -220
- package/docs/configuration-reference.md +281 -204
- package/docs/middleware-guide.md +236 -0
- package/docs/proposals/jsgui3-website-and-webpage-design-jsgui3-server-support.md +257 -0
- package/docs/proposals/jsgui3-website-and-webpage-design-review.md +73 -0
- package/docs/proposals/jsgui3-website-and-webpage-design.md +732 -0
- package/docs/swagger.md +316 -0
- package/docs/system-architecture.md +24 -18
- package/examples/controls/1) window/server.js +6 -1
- package/examples/controls/21) mvvm and declarative api/check.js +94 -0
- package/examples/controls/21) mvvm and declarative api/check_output.txt +25 -0
- package/examples/controls/21) mvvm and declarative api/check_output_2.txt +27 -0
- package/examples/controls/21) mvvm and declarative api/client.js +241 -0
- declarative api/e2e-screenshot-1-name-change.png +0 -0
- declarative api/e2e-screenshot-2-toggled.png +0 -0
- declarative api/e2e-screenshot-3-final.png +0 -0
- declarative api/e2e-screenshot-final.png +0 -0
- package/examples/controls/21) mvvm and declarative api/e2e-test.js +175 -0
- package/examples/controls/21) mvvm and declarative api/out.html +1 -0
- package/examples/controls/21) mvvm and declarative api/page_out.html +1 -0
- package/examples/controls/21) mvvm and declarative api/server.js +18 -0
- package/examples/data-views/01) query-endpoint/server.js +61 -0
- package/labs/website-design/001-base-class-overhead/check.js +162 -0
- package/labs/website-design/002-pages-storage/check.js +244 -0
- package/labs/website-design/002-pages-storage/results.txt +0 -0
- package/labs/website-design/003-type-detection/check.js +193 -0
- package/labs/website-design/003-type-detection/results.txt +0 -0
- package/labs/website-design/004-two-stage-validation/check.js +314 -0
- package/labs/website-design/004-two-stage-validation/results.txt +0 -0
- package/labs/website-design/005-normalize-input/check.js +303 -0
- package/labs/website-design/006-serve-website-spike/check.js +290 -0
- package/labs/website-design/README.md +34 -0
- package/labs/website-design/manifest.json +68 -0
- package/labs/website-design/run-all.js +60 -0
- package/middleware/compression.js +217 -0
- package/middleware/index.js +15 -0
- package/middleware/json-body.js +126 -0
- package/module.js +3 -0
- package/openapi.js +474 -0
- package/package.json +11 -8
- package/publishers/Publishers.js +6 -5
- package/publishers/http-function-publisher.js +135 -126
- package/publishers/http-webpage-publisher.js +89 -11
- package/publishers/query-publisher.js +116 -0
- package/publishers/swagger-publisher.js +203 -0
- package/publishers/swagger-ui.js +578 -0
- package/resources/adapters/array-adapter.js +143 -0
- package/resources/query-resource.js +131 -0
- package/serve-factory.js +756 -18
- package/server.js +502 -123
- package/tests/README.md +23 -1
- package/tests/admin-ui-jsgui-controls.test.js +16 -1
- package/tests/helpers/playwright-e2e-harness.js +326 -0
- package/tests/openapi.test.js +319 -0
- package/tests/playwright-smoke.test.js +134 -0
- package/tests/publish-enhancements.test.js +673 -0
- package/tests/query-publisher.test.js +430 -0
- package/tests/quick-json-body-test.js +169 -0
- package/tests/serve.test.js +425 -122
- package/tests/swagger-publisher.test.js +1076 -0
- 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:
|