@yuneta/gobj-js 7.9.11 → 7.12.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.
@@ -86,9 +86,7 @@ function sprintf_format(parse_tree, argv) {
86
86
  case "x":
87
87
  arg = (parseInt(arg, 10) >>> 0).toString(16);
88
88
  break;
89
- case "X":
90
- arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase();
91
- break;
89
+ case "X": arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase();
92
90
  }
93
91
  if (re.json.test(ph.type)) output += arg;
94
92
  else {
@@ -776,9 +774,7 @@ function set_default(gobj, sdata, it) {
776
774
  }
777
775
  else jn_value = svalue;
778
776
  break;
779
- case data_type_t.DTP_POINTER:
780
- jn_value = svalue;
781
- break;
777
+ case data_type_t.DTP_POINTER: jn_value = svalue;
782
778
  }
783
779
  if (jn_value === void 0) {
784
780
  log_error(`default_value WRONG, it: ${it.name}, value: ${it.default_value}`);
@@ -848,9 +844,7 @@ function json2item(gobj, sdata, it, jn_value_) {
848
844
  return -1;
849
845
  }
850
846
  break;
851
- case data_type_t.DTP_POINTER:
852
- jn_value2 = jn_value_;
853
- break;
847
+ case data_type_t.DTP_POINTER: jn_value2 = jn_value_;
854
848
  }
855
849
  if (jn_value2 === void 0) log_error(`${gobj_short_name(gobj)}: attr undefined: ${it.name}`);
856
850
  sdata[it.name] = jn_value2;
@@ -1129,6 +1123,7 @@ function gclass_find_by_name(gclass_name, verbose) {
1129
1123
  } catch (e) {}
1130
1124
  if (!gclass) {
1131
1125
  if (verbose) log_error(`gclass not found: ${gclass_name}`);
1126
+ return null;
1132
1127
  }
1133
1128
  return gclass;
1134
1129
  }
@@ -1153,8 +1148,8 @@ function gobj_default_service() {
1153
1148
  function gobj_find_service(service_name, verbose) {
1154
1149
  service_name = service_name.toLowerCase();
1155
1150
  let service_gobj = __jn_services__[service_name];
1156
- if (!service_gobj && verbose) {
1157
- log_error(`gobj service not found: ${service_name}`);
1151
+ if (!service_gobj) {
1152
+ if (verbose) log_error(`gobj service not found: ${service_name}`);
1158
1153
  return null;
1159
1154
  }
1160
1155
  return service_gobj;
@@ -1414,6 +1409,7 @@ function gobj_destroy(gobj) {
1414
1409
  gobj_stop(gobj);
1415
1410
  }
1416
1411
  gobj.obflag |= obflag_t.obflag_destroying;
1412
+ purge_posted_events(gobj);
1417
1413
  let trace_creation = __trace_gobj_create_delete__(gobj);
1418
1414
  if (trace_creation) trace_machine(sprintf("💔💔⏩ destroying: %s", gobj_full_name(gobj)));
1419
1415
  let parent = gobj_parent(gobj);
@@ -1569,12 +1565,14 @@ function gobj_play(gobj) {
1569
1565
  log_error(`${gobj_short_name(gobj)}: GObj DISABLED`);
1570
1566
  return -1;
1571
1567
  }
1572
- if (!gobj_is_running(gobj)) if (!(gobj.gclass.gclass_flag & gclass_flag_t.gcflag_required_start_to_play)) {
1573
- log_warning(`${gobj_short_name(gobj)}: GObj playing without previous start`);
1574
- gobj_start(gobj);
1575
- } else {
1576
- log_error(`${gobj_short_name(gobj)}: Cannot play, start not done`);
1577
- return -1;
1568
+ if (!gobj_is_running(gobj)) {
1569
+ if (!(gobj.gclass.gclass_flag & gclass_flag_t.gcflag_required_start_to_play)) {
1570
+ log_warning(`${gobj_short_name(gobj)}: GObj playing without previous start`);
1571
+ gobj_start(gobj);
1572
+ } else {
1573
+ log_error(`${gobj_short_name(gobj)}: Cannot play, start not done`);
1574
+ return -1;
1575
+ }
1578
1576
  }
1579
1577
  if (__trace_gobj_start_stop__(gobj)) trace_machine(sprintf("⏯ ⏯ play: %s", gobj_full_name(gobj)));
1580
1578
  gobj.playing = true;
@@ -2353,13 +2351,97 @@ function gobj_has_output_event(gobj, event, event_flag) {
2353
2351
  return true;
2354
2352
  }
2355
2353
  /************************************************************
2356
- * post_event, by now only in js
2354
+ * Posted events: gobj_send_event(), but on the next turn
2355
+ *
2356
+ * Same contract as the C side (see gobj.h). It exists to get out of the
2357
+ * stack you are standing on: gobj_publish_event() dispatches synchronously,
2358
+ * so a subscriber action runs inside the publisher's own stack, and
2359
+ * destroying that publisher there dismantles what is still iterating.
2360
+ *
2361
+ * The queue is drained with setTimeout(0) and NOT with queueMicrotask():
2362
+ * a microtask runs before the browser can paint or handle an input, so a
2363
+ * chain of posted events would hold the page exactly the way it used to
2364
+ * hold the event loop in C. A macrotask gives the browser its turn between
2365
+ * one event and the next.
2366
+ *
2367
+ * Delivery is a SNAPSHOT: the events queued when the drain begins are the
2368
+ * ones delivered in it, and whatever an action posts while it runs waits
2369
+ * for the following turn.
2357
2370
  ************************************************************/
2358
- function gobj_post_event(gobj, event, kw, src) {
2359
- setTimeout(() => {
2360
- if (gobj_is_destroying(gobj)) return;
2361
- gobj_send_event(gobj, event, kw, src);
2362
- }, 10);
2371
+ var MAX_POSTED_EVENTS = 1e4;
2372
+ var __dl_posted_events__ = [];
2373
+ var __posted_events_scheduled__ = false;
2374
+ function gobj_post_event(dst, event, kw, src) {
2375
+ if (!dst || !(dst instanceof GObj)) {
2376
+ log_error(`gobj_post_event(): gobj dst NULL, event ${event}`);
2377
+ return -1;
2378
+ }
2379
+ if (dst.obflag & (obflag_t.obflag_destroyed | obflag_t.obflag_destroying)) {
2380
+ log_error(`gobj_post_event(): gobj dst DESTROYING, event ${event}`);
2381
+ return -1;
2382
+ }
2383
+ if (empty_string(event)) {
2384
+ log_error(`gobj_post_event(): event EMPTY`);
2385
+ return -1;
2386
+ }
2387
+ if (!gobj_has_event(dst, event, 0)) {
2388
+ log_error(`gobj_post_event(): event NOT DEFINED in gclass ${gobj_gclass_name(dst)}, event ${event}`);
2389
+ return -1;
2390
+ }
2391
+ if (__dl_posted_events__.length >= MAX_POSTED_EVENTS) {
2392
+ log_error(`gobj_post_event(): too many posted events, this is NOT a work queue, event ${event}, pending ${__dl_posted_events__.length}`);
2393
+ return -1;
2394
+ }
2395
+ __dl_posted_events__.push({
2396
+ dst,
2397
+ event,
2398
+ kw,
2399
+ src
2400
+ });
2401
+ if (is_machine_tracing(dst, event) && !is_machine_not_tracing(src, event)) trace_machine(sprintf("📬 posted(%s%s), ev: %s, pending: %d", !dst.running ? "!!" : "", gobj_short_name(dst), event, __dl_posted_events__.length));
2402
+ if (!__posted_events_scheduled__) {
2403
+ __posted_events_scheduled__ = true;
2404
+ setTimeout(gobj_deliver_posted_events, 0);
2405
+ }
2406
+ return 0;
2407
+ }
2408
+ /************************************************************
2409
+ * How many posted events wait for delivery
2410
+ ************************************************************/
2411
+ function gobj_posted_events_size() {
2412
+ return __dl_posted_events__.length;
2413
+ }
2414
+ /************************************************************
2415
+ * Deliver the posted events. One turn, one snapshot.
2416
+ ************************************************************/
2417
+ function gobj_deliver_posted_events() {
2418
+ __posted_events_scheduled__ = false;
2419
+ let snapshot = __dl_posted_events__;
2420
+ __dl_posted_events__ = [];
2421
+ let delivered = 0;
2422
+ for (let msg of snapshot) {
2423
+ if (msg.dst.obflag & (obflag_t.obflag_destroyed | obflag_t.obflag_destroying)) continue;
2424
+ gobj_send_event(msg.dst, msg.event, msg.kw, msg.src);
2425
+ delivered++;
2426
+ }
2427
+ if (__dl_posted_events__.length > 0 && !__posted_events_scheduled__) {
2428
+ __posted_events_scheduled__ = true;
2429
+ setTimeout(gobj_deliver_posted_events, 0);
2430
+ }
2431
+ return delivered;
2432
+ }
2433
+ /************************************************************
2434
+ * Take a gobj out of the queue of posted events.
2435
+ *
2436
+ * Called from gobj_destroy(), and the two halves are not the same thing:
2437
+ * as DESTINATION the entry is dropped, as SOURCE only the pointer is
2438
+ * cleared -- the destination still wants its event, and it arrives with
2439
+ * src null, which every action already has to accept.
2440
+ ************************************************************/
2441
+ function purge_posted_events(gobj) {
2442
+ if (__dl_posted_events__.length === 0) return;
2443
+ for (let msg of __dl_posted_events__) if (msg.src === gobj) msg.src = null;
2444
+ __dl_posted_events__ = __dl_posted_events__.filter((msg) => msg.dst !== gobj);
2363
2445
  }
2364
2446
  /************************************************************
2365
2447
  * send_event
@@ -2595,7 +2677,7 @@ function gobj_subscribe_event(publisher, event, kw, subscriber) {
2595
2677
  log_error(`subscriber NULL: ev ${event}`);
2596
2678
  return 0;
2597
2679
  }
2598
- const IGNORED_KEYS = new Set([
2680
+ const IGNORED_KEYS = /* @__PURE__ */ new Set([
2599
2681
  "__config__",
2600
2682
  "__global__",
2601
2683
  "__local__",
@@ -2651,7 +2733,7 @@ function gobj_unsubscribe_event(publisher, event, kw, subscriber) {
2651
2733
  log_error(`subscriber NULL: ev ${event}`);
2652
2734
  return 0;
2653
2735
  }
2654
- const IGNORED_KEYS = new Set([
2736
+ const IGNORED_KEYS = /* @__PURE__ */ new Set([
2655
2737
  "__config__",
2656
2738
  "__global__",
2657
2739
  "__local__",
@@ -2845,9 +2927,10 @@ function gobj_command(gobj, command, kw, src) {
2845
2927
  if (tracea > 1) trace_json(kw);
2846
2928
  }
2847
2929
  if (gobj.gclass.gmt.mt_command_parser) return gobj.gclass.gmt.mt_command_parser(gobj, command, kw, src);
2848
- if (gobj.gclass.command_table) if (__global_command_parser_fn__) return __global_command_parser_fn__(gobj, command, kw, src);
2849
- else return build_command_response(gobj, -1, sprintf("%s: global command parser not available", gobj_short_name(gobj)), 0, 0);
2850
- else return build_command_response(gobj, -1, sprintf("%s: command table not available", gobj_short_name(gobj)), 0, 0);
2930
+ if (gobj.gclass.command_table) {
2931
+ if (__global_command_parser_fn__) return __global_command_parser_fn__(gobj, command, kw, src);
2932
+ else return build_command_response(gobj, -1, sprintf("%s: global command parser not available", gobj_short_name(gobj)), 0, 0);
2933
+ } else return build_command_response(gobj, -1, sprintf("%s: command table not available", gobj_short_name(gobj)), 0, 0);
2851
2934
  }
2852
2935
  /************************************************************
2853
2936
  * Exec gobj stats. Return a webix
@@ -2954,22 +3037,26 @@ function format_log(format) {
2954
3037
  function log_error(format) {
2955
3038
  let msg = format_log(format);
2956
3039
  let hora = current_timestamp();
2957
- if (f_error) if (f_error === _console.error) {
2958
- if (__console_output_enabled__) f_error("%c" + hora + " ERROR: " + String(msg), "color:red");
2959
- } else {
2960
- if (__console_output_enabled__) _console.error("%c" + hora + " ERROR: " + String(msg), "color:red");
2961
- f_error(`${hora} ERROR: ${String(msg)}`);
3040
+ if (f_error) {
3041
+ if (f_error === _console.error) {
3042
+ if (__console_output_enabled__) f_error("%c" + hora + " ERROR: " + String(msg), "color:red");
3043
+ } else {
3044
+ if (__console_output_enabled__) _console.error("%c" + hora + " ERROR: " + String(msg), "color:red");
3045
+ f_error(`${hora} ERROR: ${String(msg)}`);
3046
+ }
2962
3047
  }
2963
3048
  emit_log_callback("error", msg, hora);
2964
3049
  }
2965
3050
  function log_warning(format) {
2966
3051
  let msg = format_log(format);
2967
3052
  let hora = current_timestamp();
2968
- if (f_warning) if (f_warning === _console.warn) {
2969
- if (__console_output_enabled__) f_warning("%c" + hora + " WARNING: " + String(msg), "color:yellow");
2970
- } else {
2971
- if (__console_output_enabled__) _console.warn("%c" + hora + " WARNING: " + String(msg), "color:yellow");
2972
- f_warning(`${hora} WARNING: ${String(msg)}`);
3053
+ if (f_warning) {
3054
+ if (f_warning === _console.warn) {
3055
+ if (__console_output_enabled__) f_warning("%c" + hora + " WARNING: " + String(msg), "color:yellow");
3056
+ } else {
3057
+ if (__console_output_enabled__) _console.warn("%c" + hora + " WARNING: " + String(msg), "color:yellow");
3058
+ f_warning(`${hora} WARNING: ${String(msg)}`);
3059
+ }
2973
3060
  }
2974
3061
  emit_log_callback("warning", msg, hora);
2975
3062
  }
@@ -4005,10 +4092,12 @@ function list2options(list, field_id, field_value) {
4005
4092
  vv["id"] = field_id;
4006
4093
  vv["value"] = v[field_id];
4007
4094
  } else {
4008
- if (!kw_has_key(v, field_value)) if (json_size(v) > 0) field_value = Object.keys(v)[0];
4009
- else {
4010
- log_error("list2options(): object without field value: " + field_value);
4011
- continue;
4095
+ if (!kw_has_key(v, field_value)) {
4096
+ if (json_size(v) > 0) field_value = Object.keys(v)[0];
4097
+ else {
4098
+ log_error("list2options(): object without field value: " + field_value);
4099
+ continue;
4100
+ }
4012
4101
  }
4013
4102
  vv["id"] = v[field_id];
4014
4103
  vv["value"] = v[field_value];
@@ -4324,13 +4413,15 @@ function jdb_update(jdb, topic_name, path, kw) {
4324
4413
  if (is_object(v)) v = kw_get_dict_value(null, v, jdb.hook, [], 1);
4325
4414
  v = _jdb_get(v, null, id, false);
4326
4415
  }
4327
- if (ids.length === 0 && v) if (is_array(v)) v.push(kw);
4328
- else if (v["id"] === kw["id"]) Object.assign(v, kw);
4329
- else {
4330
- let v_ = kw_get_dict_value(null, v, jdb.hook, [], 1);
4331
- let v__ = _jdb_get(v_, jdb.hook, kw["id"], false);
4332
- if (v__) Object.assign(v__, kw);
4333
- else v_.push(kw);
4416
+ if (ids.length === 0 && v) {
4417
+ if (is_array(v)) v.push(kw);
4418
+ else if (v["id"] === kw["id"]) Object.assign(v, kw);
4419
+ else {
4420
+ let v_ = kw_get_dict_value(null, v, jdb.hook, [], 1);
4421
+ let v__ = _jdb_get(v_, jdb.hook, kw["id"], false);
4422
+ if (v__) Object.assign(v__, kw);
4423
+ else v_.push(kw);
4424
+ }
4334
4425
  }
4335
4426
  return topic;
4336
4427
  }
@@ -4356,13 +4447,15 @@ function jdb_delete(jdb, topic_name, path, kw) {
4356
4447
  if (is_object(v)) v = kw_get_dict_value(null, v, jdb.hook, null, 0);
4357
4448
  v = _jdb_get(v, null, id, false);
4358
4449
  }
4359
- if (ids.length === 0 && v) if (is_array(v)) {
4360
- let idx = id_index_in_obj_list(v, kw["id"]);
4361
- if (idx >= 0) v.splice(idx, 1);
4362
- } else {
4363
- let v_ = kw_get_dict_value(null, v, jdb.hook, null, 0);
4364
- let idx = id_index_in_obj_list(v_, kw["id"]);
4365
- if (idx >= 0) v_.splice(idx, 1);
4450
+ if (ids.length === 0 && v) {
4451
+ if (is_array(v)) {
4452
+ let idx = id_index_in_obj_list(v, kw["id"]);
4453
+ if (idx >= 0) v.splice(idx, 1);
4454
+ } else {
4455
+ let v_ = kw_get_dict_value(null, v, jdb.hook, null, 0);
4456
+ let idx = id_index_in_obj_list(v_, kw["id"]);
4457
+ if (idx >= 0) v_.splice(idx, 1);
4458
+ }
4366
4459
  }
4367
4460
  return topic;
4368
4461
  }
@@ -5089,41 +5182,42 @@ function treedb_hook_data_size(value) {
5089
5182
  * }
5090
5183
  ************************************************************/
5091
5184
  function treedb_decoder_fkey(col, fkey) {
5092
- if (is_string(fkey)) if (fkey.indexOf("^") === -1) {
5093
- let fkey_desc = col.fkey;
5094
- if (json_object_size(fkey_desc) !== 1) {
5095
- log_error("bad fkey 1");
5096
- log_error(col);
5097
- log_error(fkey);
5098
- return null;
5099
- }
5100
- let topic_name;
5101
- let hook_name;
5102
- for (const k of Object.keys(fkey_desc)) {
5103
- topic_name = k;
5104
- hook_name = fkey_desc[k];
5105
- break;
5106
- }
5107
- return {
5108
- topic_name,
5109
- id: fkey,
5110
- hook_name
5111
- };
5112
- } else {
5113
- let tt = fkey.split("^");
5114
- if (tt.length !== 3) {
5115
- log_error("bad fkey 2");
5116
- log_error(col);
5117
- log_error(fkey);
5118
- return null;
5185
+ if (is_string(fkey)) {
5186
+ if (fkey.indexOf("^") === -1) {
5187
+ let fkey_desc = col.fkey;
5188
+ if (json_object_size(fkey_desc) !== 1) {
5189
+ log_error("bad fkey 1");
5190
+ log_error(col);
5191
+ log_error(fkey);
5192
+ return null;
5193
+ }
5194
+ let topic_name;
5195
+ let hook_name;
5196
+ for (const k of Object.keys(fkey_desc)) {
5197
+ topic_name = k;
5198
+ hook_name = fkey_desc[k];
5199
+ break;
5200
+ }
5201
+ return {
5202
+ topic_name,
5203
+ id: fkey,
5204
+ hook_name
5205
+ };
5206
+ } else {
5207
+ let tt = fkey.split("^");
5208
+ if (tt.length !== 3) {
5209
+ log_error("bad fkey 2");
5210
+ log_error(col);
5211
+ log_error(fkey);
5212
+ return null;
5213
+ }
5214
+ return {
5215
+ topic_name: tt[0],
5216
+ id: tt[1],
5217
+ hook_name: tt[2]
5218
+ };
5119
5219
  }
5120
- return {
5121
- topic_name: tt[0],
5122
- id: tt[1],
5123
- hook_name: tt[2]
5124
- };
5125
- }
5126
- else if (is_object(fkey)) return {
5220
+ } else if (is_object(fkey)) return {
5127
5221
  topic_name: fkey.topic_name,
5128
5222
  id: fkey.id,
5129
5223
  hook_name: fkey.hook_name
@@ -5165,38 +5259,39 @@ function treedb_encoder_fkey(col, fkey) {
5165
5259
  * }
5166
5260
  ********************************************/
5167
5261
  function treedb_decoder_hook(col, hook) {
5168
- if (is_string(hook)) if (hook.indexOf("^") === -1) {
5169
- let hook_desc = col.hook;
5170
- if (json_object_size(hook_desc) !== 1) {
5171
- log_error("bad hook 1");
5172
- log_error(col);
5173
- log_error(hook);
5174
- return null;
5175
- }
5176
- let topic_name;
5177
- for (let k of Object.keys(hook_desc)) {
5178
- topic_name = k;
5179
- hook_desc[k];
5180
- break;
5181
- }
5182
- return {
5183
- topic_name,
5184
- id: hook
5185
- };
5186
- } else {
5187
- let tt = hook.split("^");
5188
- if (tt.length !== 2) {
5189
- log_error("bad hook 2");
5190
- log_error(col);
5191
- log_error(hook);
5192
- return null;
5262
+ if (is_string(hook)) {
5263
+ if (hook.indexOf("^") === -1) {
5264
+ let hook_desc = col.hook;
5265
+ if (json_object_size(hook_desc) !== 1) {
5266
+ log_error("bad hook 1");
5267
+ log_error(col);
5268
+ log_error(hook);
5269
+ return null;
5270
+ }
5271
+ let topic_name;
5272
+ for (let k of Object.keys(hook_desc)) {
5273
+ topic_name = k;
5274
+ hook_desc[k];
5275
+ break;
5276
+ }
5277
+ return {
5278
+ topic_name,
5279
+ id: hook
5280
+ };
5281
+ } else {
5282
+ let tt = hook.split("^");
5283
+ if (tt.length !== 2) {
5284
+ log_error("bad hook 2");
5285
+ log_error(col);
5286
+ log_error(hook);
5287
+ return null;
5288
+ }
5289
+ return {
5290
+ topic_name: tt[0],
5291
+ id: tt[1]
5292
+ };
5193
5293
  }
5194
- return {
5195
- topic_name: tt[0],
5196
- id: tt[1]
5197
- };
5198
- }
5199
- else if (is_object(hook)) return {
5294
+ } else if (is_object(hook)) return {
5200
5295
  topic_name: hook.topic_name,
5201
5296
  id: hook.id
5202
5297
  };
@@ -5302,9 +5397,7 @@ function treedb_get_field_desc(col) {
5302
5397
  case "template":
5303
5398
  field_desc.enum_list = col.template;
5304
5399
  break;
5305
- case "table":
5306
- field_desc.enum_list = col.table;
5307
- break;
5400
+ case "table": field_desc.enum_list = col.table;
5308
5401
  }
5309
5402
  field_desc.type = f;
5310
5403
  } else if (str_in_list(treedb_field_attributes, f)) switch (f) {
@@ -5317,9 +5410,7 @@ function treedb_get_field_desc(col) {
5317
5410
  case "required":
5318
5411
  field_desc.is_required = true;
5319
5412
  break;
5320
- case "hidden":
5321
- field_desc.is_hidden = true;
5322
- break;
5413
+ case "hidden": field_desc.is_hidden = true;
5323
5414
  }
5324
5415
  }
5325
5416
  return field_desc;
@@ -5356,9 +5447,7 @@ function template_get_field_desc(key, value) {
5356
5447
  case "required":
5357
5448
  field_desc.is_required = true;
5358
5449
  break;
5359
- case "hidden":
5360
- field_desc.is_hidden = true;
5361
- break;
5450
+ case "hidden": field_desc.is_hidden = true;
5362
5451
  }
5363
5452
  }
5364
5453
  if (!field_desc.real_type) field_desc.real_type = "string";
@@ -5382,7 +5471,8 @@ function create_template_record(template, kw) {
5382
5471
  Object.entries(template).forEach(([field, col]) => {
5383
5472
  let default_value;
5384
5473
  if (is_object(col)) default_value = col.default;
5385
- new_record[field] = kw_get_dict_value(null, kw, field, default_value);
5474
+ let value = kw_get_dict_value(null, kw, field, default_value);
5475
+ new_record[field] = value;
5386
5476
  });
5387
5477
  return new_record;
5388
5478
  }
@@ -5463,7 +5553,6 @@ function mt_writing$2(gobj, path) {
5463
5553
  if (priv.msec > 0) {
5464
5554
  if (!gobj_is_running(gobj)) gobj_start(gobj);
5465
5555
  } else if (gobj_is_running(gobj)) gobj_stop(gobj);
5466
- break;
5467
5556
  }
5468
5557
  }
5469
5558
  /***************************************************************
@@ -5822,9 +5911,7 @@ function mt_writing(gobj, path) {
5822
5911
  case "remote_yuno_role":
5823
5912
  priv.remote_yuno_role = gobj_read_str_attr(gobj, "remote_yuno_role");
5824
5913
  break;
5825
- case "remote_yuno_service":
5826
- priv.remote_yuno_service = gobj_read_str_attr(gobj, "remote_yuno_service");
5827
- break;
5914
+ case "remote_yuno_service": priv.remote_yuno_service = gobj_read_str_attr(gobj, "remote_yuno_service");
5828
5915
  }
5829
5916
  }
5830
5917
  /***************************************************************
@@ -6366,12 +6453,13 @@ function ac_on_message(gobj, event, kw, src) {
6366
6453
  return 0;
6367
6454
  }
6368
6455
  let gobj_service = gobj_find_service(iev_dst_service, true);
6369
- if (gobj_service) if (gobj_has_event(gobj_service, iev_event, event_flag_t.EVF_PUBLIC_EVENT)) gobj_send_event(gobj_service, iev_event, iev_kw, gobj);
6370
- else {
6371
- log_error(`${gobj_short_name(gobj)}: Service found but no event or not public, service '${gobj_short_name(gobj_service)}', ev '${iev_event}'`);
6372
- return -1;
6373
- }
6374
- else if (gobj_is_pure_child(gobj)) gobj_send_event(gobj_parent(gobj), iev_event, iev_kw, gobj);
6456
+ if (gobj_service) {
6457
+ if (gobj_has_event(gobj_service, iev_event, event_flag_t.EVF_PUBLIC_EVENT)) gobj_send_event(gobj_service, iev_event, iev_kw, gobj);
6458
+ else {
6459
+ log_error(`${gobj_short_name(gobj)}: Service found but no event or not public, service '${gobj_short_name(gobj_service)}', ev '${iev_event}'`);
6460
+ return -1;
6461
+ }
6462
+ } else if (gobj_is_pure_child(gobj)) gobj_send_event(gobj_parent(gobj), iev_event, iev_kw, gobj);
6375
6463
  else gobj_publish_event(gobj, iev_event, iev_kw);
6376
6464
  return 0;
6377
6465
  }
@@ -6511,6 +6599,6 @@ function register_c_ievent_cli() {
6511
6599
  return create_gclass(GCLASS_NAME);
6512
6600
  }
6513
6601
  //#endregion
6514
- export { GObj, SDATA, SDATAAUTHZ, SDATACM, SDATACM2, SDATADF, SDATAPM, SDATAPM0, SDATA_END, SDataDesc, YUNETA_VERSION, __yuno__, build_command_response, build_path, build_stats_response, clean_name, clear_timeout, cmp_two_simple_json, command_parser, createElement2, createOneHtml, create_json_record, create_template_record, current_timestamp, data_type_t, db_list_persistent_attrs, db_load_persistent_attrs, db_remove_persistent_attrs, db_save_persistent_attrs, debounce, delete_from_list, duplicate_objects, empty_string, escapeHtml, event_flag_t, gclass_add_ev_action, gclass_add_event_type, gclass_add_state, gclass_check_fsm, gclass_create, gclass_event_type, gclass_find_by_name, gclass_flag_t, gclass_unregister, getPositionRelativeToBody, get_function_name, get_now, gobj_bottom_gobj, gobj_change_parent, gobj_change_state, gobj_command, gobj_create, gobj_create2, gobj_create_default_service, gobj_create_pure_child, gobj_create_service, gobj_create_volatil, gobj_create_yuno, gobj_current_state, gobj_default_service, gobj_destroy, gobj_find_child, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_global_trace_level, gobj_has_attr, gobj_has_event, gobj_has_output_event, gobj_hsdata, gobj_is_destroying, gobj_is_playing, gobj_is_pure_child, gobj_is_running, gobj_is_service, gobj_is_volatil, gobj_list_persistent_attrs, gobj_list_subscriptions, gobj_load_persistent_attrs, gobj_match_children, gobj_match_children_tree, gobj_match_gobj, gobj_name, gobj_parent, gobj_pause, gobj_play, gobj_post_event, gobj_publish_event, gobj_read_attr, gobj_read_attrs, gobj_read_bool_attr, gobj_read_integer_attr, gobj_read_pointer_attr, gobj_read_str_attr, gobj_remove_persistent_attrs, gobj_repr_global_trace_levels, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_deep_trace, gobj_set_gclass_no_trace, gobj_set_gclass_trace, gobj_set_global_no_trace, gobj_set_global_trace, gobj_set_gobj_no_trace, gobj_set_gobj_trace, gobj_set_trace_machine_format, gobj_short_name, gobj_start, gobj_start_children, gobj_start_tree, gobj_start_up, gobj_stats, gobj_stop, gobj_stop_children, gobj_stop_tree, gobj_subscribe_event, gobj_trace_level, gobj_trace_machine_format, gobj_trace_no_level, gobj_unsubscribe_event, gobj_unsubscribe_list, gobj_walk_gobj_children, gobj_walk_gobj_children_tree, gobj_write_attr, gobj_write_attrs, gobj_write_bool_attr, gobj_write_integer_attr, gobj_write_str_attr, gobj_yuno, gobj_yuno_id, gobj_yuno_name, gobj_yuno_role, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_object_del, json_object_get, json_object_set, json_object_set_new, json_object_size, json_object_update, json_object_update_existing, json_object_update_missing, json_size, jwt2json, jwtDecode, kw_clone_by_keys, kw_clone_by_not_keys, kw_collect, kw_delete, kw_find_json_in_list, kw_find_path, kw_flag_t, kw_get_bool, kw_get_dict, kw_get_dict_value, kw_get_int, kw_get_list, kw_get_local_storage_value, kw_get_pointer, kw_get_real, kw_get_str, kw_has_key, kw_match_simple, kw_pop, kw_remove_local_storage_value, kw_select, kw_set_dict_value, kw_set_local_storage_value, kw_set_subdict_value, kwid_collect, kwid_find_one_record, kwid_get_ids, kwid_match_id, kwid_new_dict, list2options, load_json_file, log_debug, log_error, log_info, log_warning, msg_iev_get_msg_type, msg_iev_get_stack, msg_iev_push_stack, msg_iev_read_key, msg_iev_set_msg_type, msg_iev_write_key, node_uuid, parseBoolean, parseSVG, refresh_language, register_c_ievent_cli, register_c_timer, register_c_yuno, safeSrc, sdata_flag_t, send_http_json_post, set_console_log_enabled, set_log_callback, set_remote_log_functions, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_level_t, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf };
6602
+ export { GObj, SDATA, SDATAAUTHZ, SDATACM, SDATACM2, SDATADF, SDATAPM, SDATAPM0, SDATA_END, SDataDesc, YUNETA_VERSION, __yuno__, build_command_response, build_path, build_stats_response, clean_name, clear_timeout, cmp_two_simple_json, command_parser, createElement2, createOneHtml, create_json_record, create_template_record, current_timestamp, data_type_t, db_list_persistent_attrs, db_load_persistent_attrs, db_remove_persistent_attrs, db_save_persistent_attrs, debounce, delete_from_list, duplicate_objects, empty_string, escapeHtml, event_flag_t, gclass_add_ev_action, gclass_add_event_type, gclass_add_state, gclass_check_fsm, gclass_create, gclass_event_type, gclass_find_by_name, gclass_flag_t, gclass_unregister, getPositionRelativeToBody, get_function_name, get_now, gobj_bottom_gobj, gobj_change_parent, gobj_change_state, gobj_command, gobj_create, gobj_create2, gobj_create_default_service, gobj_create_pure_child, gobj_create_service, gobj_create_volatil, gobj_create_yuno, gobj_current_state, gobj_default_service, gobj_deliver_posted_events, gobj_destroy, gobj_find_child, gobj_find_gobj, gobj_find_service, gobj_find_subscribings, gobj_find_subscriptions, gobj_flag_t, gobj_full_name, gobj_gclass_name, gobj_global_trace_level, gobj_has_attr, gobj_has_event, gobj_has_output_event, gobj_hsdata, gobj_is_destroying, gobj_is_playing, gobj_is_pure_child, gobj_is_running, gobj_is_service, gobj_is_volatil, gobj_list_persistent_attrs, gobj_list_subscriptions, gobj_load_persistent_attrs, gobj_match_children, gobj_match_children_tree, gobj_match_gobj, gobj_name, gobj_parent, gobj_pause, gobj_play, gobj_post_event, gobj_posted_events_size, gobj_publish_event, gobj_read_attr, gobj_read_attrs, gobj_read_bool_attr, gobj_read_integer_attr, gobj_read_pointer_attr, gobj_read_str_attr, gobj_remove_persistent_attrs, gobj_repr_global_trace_levels, gobj_reset_volatil_attrs, gobj_save_persistent_attrs, gobj_search_path, gobj_send_event, gobj_services, gobj_set_bottom_gobj, gobj_set_deep_trace, gobj_set_gclass_no_trace, gobj_set_gclass_trace, gobj_set_global_no_trace, gobj_set_global_trace, gobj_set_gobj_no_trace, gobj_set_gobj_trace, gobj_set_trace_machine_format, gobj_short_name, gobj_start, gobj_start_children, gobj_start_tree, gobj_start_up, gobj_stats, gobj_stop, gobj_stop_children, gobj_stop_tree, gobj_subscribe_event, gobj_trace_level, gobj_trace_machine_format, gobj_trace_no_level, gobj_unsubscribe_event, gobj_unsubscribe_list, gobj_walk_gobj_children, gobj_walk_gobj_children_tree, gobj_write_attr, gobj_write_attrs, gobj_write_bool_attr, gobj_write_integer_attr, gobj_write_str_attr, gobj_yuno, gobj_yuno_id, gobj_yuno_name, gobj_yuno_role, id_index_in_obj_list, index_in_list, is_array, is_boolean, is_date, is_function, is_gobj, is_metadata_key, is_null, is_number, is_object, is_private_key, is_pure_number, is_string, jdb_delete, jdb_get, jdb_get_by_idx, jdb_get_topic, jdb_init, jdb_update, json_array_append, json_array_append_new, json_array_extend, json_array_remove, json_array_size, json_deep_copy, json_is_identical, json_object_del, json_object_get, json_object_set, json_object_set_new, json_object_size, json_object_update, json_object_update_existing, json_object_update_missing, json_size, jwt2json, jwtDecode, kw_clone_by_keys, kw_clone_by_not_keys, kw_collect, kw_delete, kw_find_json_in_list, kw_find_path, kw_flag_t, kw_get_bool, kw_get_dict, kw_get_dict_value, kw_get_int, kw_get_list, kw_get_local_storage_value, kw_get_pointer, kw_get_real, kw_get_str, kw_has_key, kw_match_simple, kw_pop, kw_remove_local_storage_value, kw_select, kw_set_dict_value, kw_set_local_storage_value, kw_set_subdict_value, kwid_collect, kwid_find_one_record, kwid_get_ids, kwid_match_id, kwid_new_dict, list2options, load_json_file, log_debug, log_error, log_info, log_warning, msg_iev_get_msg_type, msg_iev_get_stack, msg_iev_push_stack, msg_iev_read_key, msg_iev_set_msg_type, msg_iev_write_key, node_uuid, parseBoolean, parseSVG, refresh_language, register_c_ievent_cli, register_c_timer, register_c_yuno, safeSrc, sdata_flag_t, send_http_json_post, set_console_log_enabled, set_log_callback, set_remote_log_functions, set_timeout, set_timeout_periodic, sprintf, stats_parser, str_in_list, strcasecmp, strcmp, strncmp, strs_in_list, strstr, template_get_field_desc, timeTracker, trace_json, trace_level_t, trace_msg, treedb_decoder_fkey, treedb_decoder_hook, treedb_encoder_fkey, treedb_get_field_desc, treedb_hook_data_size, vsprintf };
6515
6603
 
6516
6604
  //# sourceMappingURL=gobj-js.es.js.map