@winkjs/composer 0.5.0 → 0.6.0

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 (104) hide show
  1. package/package.json +8 -8
  2. package/src/core/batch/aoo-encoder.js +4 -4
  3. package/src/core/batch/sliding-window.js +2 -2
  4. package/src/core/codec/index.js +4 -4
  5. package/src/core/emitter-manager/mqtt/emitter.js +44 -14
  6. package/src/core/emitter-manager/mqtt/index.js +2 -1
  7. package/src/core/emitter-manager/terminal/assert-columns.js +1 -1
  8. package/src/core/emitter-manager/terminal/index.js +4 -4
  9. package/src/core/env-vars.js +44 -3
  10. package/src/core/logger/index.js +174 -0
  11. package/src/core/mqtt-protocol.js +2 -2
  12. package/src/core/partition-manager/get-stats.js +31 -0
  13. package/src/core/partition-manager/index.js +1 -0
  14. package/src/core/partition-manager/init.js +15 -0
  15. package/src/core/partition-manager/update.js +143 -87
  16. package/src/core/partition-manager/validate-flow.js +1 -1
  17. package/src/core/semantics/loader.js +1 -1
  18. package/src/core/semantics/warnings.js +5 -3
  19. package/src/core/shutdown-manager/index.js +71 -21
  20. package/src/core/source-manager/csv/start.js +109 -35
  21. package/src/core/source-manager/mqtt/client.js +95 -36
  22. package/src/core/source-manager/mqtt/dedup.js +3 -3
  23. package/src/core/source-manager/mqtt/index.js +1 -1
  24. package/src/core/source-manager/mqtt/status.js +67 -14
  25. package/src/core/source-manager/record-shape.js +55 -0
  26. package/src/core/source-manager/test-harness/field-generator.js +1 -1
  27. package/src/core/source-manager/test-harness/start.js +52 -10
  28. package/src/core/source-manager/test-harness/validate.js +1 -1
  29. package/src/core/storage-manager/questdb/assert-columns.js +2 -2
  30. package/src/core/storage-manager/questdb/ensure-tables.js +1 -1
  31. package/src/core/storage-manager/questdb/index.js +55 -17
  32. package/src/core/storage-manager/questdb/persist-plan.js +32 -8
  33. package/src/core/tunable/helpers.js +1 -1
  34. package/src/core/utils/callback-guard/index.js +155 -0
  35. package/src/core/utils/half-life/index.js +4 -4
  36. package/src/core/utils/validate/composer-validators.js +2 -2
  37. package/src/core/utils/validate/index.js +1 -1
  38. package/src/core/utils/validate/validate.js +1 -1
  39. package/src/core/wiring/assert-handle.js +5 -5
  40. package/src/core/wiring/assert-module.js +2 -2
  41. package/src/core/wiring/wire-emitters.js +4 -3
  42. package/src/core/wiring/wire-linear-graph.js +1 -1
  43. package/src/core/wiring/wire-node.js +6 -6
  44. package/src/core/wiring/wire-semantics.js +1 -1
  45. package/src/core/wiring/wire-storages.js +4 -3
  46. package/src/flow/driver.js +31 -6
  47. package/src/flow/expand-single-input-array.js +4 -4
  48. package/src/flow/flow-api-schemas.js +4 -4
  49. package/src/flow/flow.js +41 -41
  50. package/src/flow/for-each.js +12 -11
  51. package/src/flow/get-target-array.js +2 -2
  52. package/src/flow/load-node-module.js +1 -1
  53. package/src/flow/make-node-method.js +4 -4
  54. package/src/flow/resolve-pick-by-field.js +1 -1
  55. package/src/flow/run.js +176 -38
  56. package/src/flow/serialize.js +1 -1
  57. package/src/flow/spec-builder.js +1 -1
  58. package/src/flow/validate.js +1 -1
  59. package/src/nodes/butterworth-filter/init.js +5 -4
  60. package/src/nodes/categorize/update.js +3 -1
  61. package/src/nodes/controller/update.js +2 -1
  62. package/src/nodes/dwell-time-tracker/update.js +2 -1
  63. package/src/nodes/emit-if/helpers.js +57 -11
  64. package/src/nodes/emit-if/init.js +1 -1
  65. package/src/nodes/emit-if/update.js +8 -11
  66. package/src/nodes/page-hinkley/update.js +2 -1
  67. package/src/nodes/pass-if/update.js +3 -1
  68. package/src/nodes/persist-if/helpers.js +60 -4
  69. package/src/nodes/persist-if/init.js +1 -1
  70. package/src/nodes/persist-if/update.js +8 -16
  71. package/src/nodes/persistence-check/update.js +2 -1
  72. package/src/nodes/sanitize/update.js +4 -2
  73. package/src/nodes/swing-watch/update.js +3 -2
  74. package/src/nodes/threshold/update.js +2 -1
  75. package/src/nodes/trend/compute-confidence.js +4 -4
  76. package/src/nodes/trend/update.js +2 -1
  77. package/src/nodes/winnow/update.js +3 -1
  78. package/src/tools/training/features.js +13 -13
  79. package/src/tools/training/logistic.js +1 -1
  80. package/src/tools/training/metrics.js +2 -2
  81. package/src/tools/training/scale.js +2 -2
  82. package/src/tools/training/validate.js +7 -7
  83. package/src/core/emitter-manager/mqtt/mqtt-store.js +0 -538
  84. package/src/core/utils/console-formatter/index.js +0 -207
  85. package/src/nodes/archive/csv/index.js +0 -6
  86. package/src/nodes/archive/csv/init.js +0 -36
  87. package/src/nodes/archive/csv/load.js +0 -70
  88. package/src/nodes/archive/csv/reset.js +0 -14
  89. package/src/nodes/archive/csv/simple-parser.js +0 -216
  90. package/src/nodes/archive/csv/test.js +0 -173
  91. package/src/nodes/archive/csv/update.js +0 -63
  92. package/src/nodes/sse-emitter/index.js +0 -7
  93. package/src/nodes/sse-emitter/init.js +0 -105
  94. package/src/nodes/sse-emitter/introspect.js +0 -134
  95. package/src/nodes/sse-emitter/publish-to.js +0 -6
  96. package/src/nodes/sse-emitter/recompute.js +0 -16
  97. package/src/nodes/sse-emitter/reset.js +0 -19
  98. package/src/nodes/sse-emitter/update.js +0 -69
  99. package/src/nodes/sse-emitter/utils/broadcast-heartbeat.js +0 -36
  100. package/src/nodes/sse-emitter/utils/build-message.js +0 -31
  101. package/src/nodes/sse-emitter/utils/connection-manager.js +0 -45
  102. package/src/nodes/sse-emitter/utils/endpoint-initializer.js +0 -20
  103. package/src/nodes/sse-emitter/utils/health-monitor.js +0 -38
  104. package/src/nodes/sse-emitter/utils/qos-handler.js +0 -41
@@ -1,45 +0,0 @@
1
- // utils/connection-manager.js
2
-
3
- const createSSEHeaders = function () {
4
- return {
5
- 'Content-Type': 'text/event-stream',
6
- 'Cache-Control': 'no-cache',
7
- 'Connection': 'keep-alive',
8
- // eslint-disable-next-line no-warning-comments
9
- // TODO: Remove next line in production - dashboard served from same port
10
- 'Access-Control-Allow-Origin': '*'
11
- };
12
- }; // createSSEHeaders()
13
-
14
- const createConnection = function ( state, res, endpointName ) {
15
- const connection = {
16
- response: res,
17
- endpoint: endpointName,
18
- qos: state.endpointQoS[ endpointName ],
19
- createdAt: Date.now(),
20
- messagesSent: 0
21
- };
22
-
23
- state.connections[ endpointName ].push( connection );
24
- state.totalConnections += 1;
25
-
26
- return connection;
27
- }; // createConnection()
28
-
29
- const removeConnection = function ( state, connection, endpointName ) {
30
- const connections = state.connections[ endpointName ];
31
- const index = connections.indexOf( connection );
32
- if ( index !== -1 ) {
33
- connections.splice( index, 1 );
34
- state.totalConnections -= 1;
35
- console.log( `SSE ${endpointName} disconnected (${state.totalConnections}/${state.maxConnections})` );
36
- }
37
- }; // removeConnection()
38
-
39
- const setupConnectionHandlers = function ( state, req, connection, endpointName ) {
40
- const cleanup = () => removeConnection( state, connection, endpointName );
41
- req.on( 'close', cleanup );
42
- req.on( 'error', cleanup );
43
- }; // setupConnectionHandlers()
44
-
45
- export { createSSEHeaders, createConnection, removeConnection, setupConnectionHandlers };
@@ -1,20 +0,0 @@
1
- // utils/endpoint-initializer.js
2
-
3
- const initializeEndpoints = function ( state ) {
4
- state.endpointNames = Object.keys( state.stats );
5
- state.connections = Object.create( null );
6
- state.endpointQoS = Object.create( null );
7
-
8
- // Create connection arrays and store QoS levels
9
- for ( let i = 0; i < state.endpointNames.length; i += 1 ) {
10
- const endpointName = state.endpointNames[ i ];
11
- state.connections[ endpointName ] = [];
12
-
13
- // Apply QoS defaults: dashboard=0, database=2, others=1
14
- const defaultQoS = endpointName === 'dashboard' ? 0 :
15
- endpointName === 'database' ? 2 : 1;
16
- state.endpointQoS[ endpointName ] = state.stats[ endpointName ].qos || defaultQoS;
17
- }
18
- }; // initializeEndpoints()
19
-
20
- export { initializeEndpoints };
@@ -1,38 +0,0 @@
1
- // utils/health-monitor.js
2
-
3
- const buildHealthResponse = function ( state ) {
4
- const endpointStats = Object.create( null );
5
- for ( let i = 0; i < state.endpointNames.length; i += 1 ) {
6
- const endpointName = state.endpointNames[ i ];
7
- endpointStats[ endpointName ] = state.connections[ endpointName ].length;
8
- }
9
-
10
- return {
11
- nodeType: state.nodeType,
12
- connections: {
13
- total: state.totalConnections,
14
- byEndpoint: endpointStats
15
- },
16
- stats: {
17
- sent: state.totalSent,
18
- errors: state.totalErrors
19
- },
20
- endpoints: state.endpointNames,
21
- timestamp: Date.now()
22
- };
23
- }; // buildHealthResponse()
24
-
25
- const handleHealthCheck = function ( state, res ) {
26
- const healthData = buildHealthResponse( state );
27
- res.writeHead( 200, {
28
- 'Content-Type': 'application/json',
29
- // eslint-disable-next-line no-warning-comments
30
- // TODO: Remove next 3 lines in production - dashboard served from same port
31
- 'Access-Control-Allow-Origin': '*',
32
- 'Access-Control-Allow-Methods': 'GET',
33
- 'Access-Control-Allow-Headers': 'Content-Type'
34
- } );
35
- res.end( JSON.stringify( healthData ) );
36
- }; // handleHealthCheck()
37
-
38
- export { buildHealthResponse, handleHealthCheck };
@@ -1,41 +0,0 @@
1
- // utils/qos-handler.js
2
-
3
- import { QOS_FIRE_AND_FORGET, QOS_BEST_EFFORT, QOS_RELIABLE } from '../introspect.js';
4
-
5
- const fireAndForgetSend = function ( connection, message, state ) {
6
- connection.response.write( message );
7
- connection.messagesSent += 1;
8
- state.totalSent += 1;
9
- }; // fireAndForgetSend()
10
-
11
- const bestEffortSend = function ( connection, message, state, endpointName ) {
12
- const success = connection.response.write( message );
13
- if ( success ) {
14
- connection.messagesSent += 1;
15
- state.totalSent += 1;
16
- } else {
17
- console.warn( `${endpointName} client backpressure - best effort` );
18
- state.totalSent += 1; // Count as sent for metrics
19
- }
20
- }; // bestEffortSend()
21
-
22
- const reliableSend = function ( connection, message, state, endpointName ) {
23
- const success = connection.response.write( message );
24
- if ( success ) {
25
- connection.messagesSent += 1;
26
- state.totalSent += 1;
27
- } else {
28
- console.warn( `${endpointName} client backpressure - reliable mode` );
29
- // TO DO: Implement proper queuing for reliable delivery
30
- state.totalSent += 1; // Count as sent for now
31
- }
32
- }; // reliableSend()
33
-
34
- // O(1) QoS handler dispatch table
35
- const QOS_HANDLERS = {
36
- [ QOS_FIRE_AND_FORGET ]: fireAndForgetSend,
37
- [ QOS_BEST_EFFORT ]: bestEffortSend,
38
- [ QOS_RELIABLE ]: reliableSend
39
- };
40
-
41
- export { QOS_HANDLERS };