@yuneta/gobj-js 7.26.15 → 7.26.17

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.
@@ -3209,11 +3209,7 @@ var gobjJs = (function(exports) {
3209
3209
  var __log_backlog__ = [];
3210
3210
  function keep_in_backlog(level, msg, hora) {
3211
3211
  let m = msg;
3212
- if (level === "json") try {
3213
- m = JSON.stringify(msg);
3214
- } catch (e) {
3215
- m = String(msg);
3216
- }
3212
+ if (level === "json") m = log_stringify(msg);
3217
3213
  __log_backlog__.push([
3218
3214
  level,
3219
3215
  m,
@@ -3298,38 +3294,67 @@ var gobjJs = (function(exports) {
3298
3294
  }
3299
3295
  }
3300
3296
  }
3297
+ function log_string(v) {
3298
+ try {
3299
+ return String(v);
3300
+ } catch (e) {
3301
+ return log_stringify(v);
3302
+ }
3303
+ }
3304
+ function log_number(parse, v) {
3305
+ try {
3306
+ return parse(v);
3307
+ } catch (e) {
3308
+ return log_string(v);
3309
+ }
3310
+ }
3301
3311
  function format_log(format) {
3302
3312
  const args = Array.prototype.slice.call(arguments);
3303
3313
  let output = "";
3304
3314
  if (typeof format === "string") {
3305
3315
  if (args.length === 1) return format;
3306
3316
  let i = 1;
3307
- output = format.replace(/%[sdifoO]/g, (match) => {
3317
+ output = format.replace(/%[sdifoOj%]/g, (match) => {
3318
+ if (match === "%%") return "%";
3308
3319
  const val = args[i++];
3309
3320
  switch (match) {
3310
- case "%s": return String(val);
3321
+ case "%s": return log_string(val);
3311
3322
  case "%d":
3312
- case "%i": return parseInt(val);
3313
- case "%f": return parseFloat(val);
3323
+ case "%i":
3324
+ if (typeof val === "bigint") return val.toString();
3325
+ return log_number(parseInt, val);
3326
+ case "%f":
3327
+ if (typeof val === "bigint") return val.toString();
3328
+ return log_number(parseFloat, val);
3329
+ case "%j": return log_stringify(val);
3314
3330
  case "%o":
3315
- case "%O": return typeof val === "object" ? log_stringify(val) : String(val);
3331
+ case "%O": return typeof val === "object" ? log_stringify(val) : log_string(val);
3316
3332
  default: return match;
3317
3333
  }
3318
3334
  });
3319
- const rest = args.slice(i).map((arg) => typeof arg === "object" ? log_stringify(arg) : String(arg));
3335
+ const rest = args.slice(i).map((arg) => typeof arg === "object" ? log_stringify(arg) : log_string(arg));
3320
3336
  if (rest.length > 0) output += " " + rest.join(" ");
3321
- } else output = args.map((arg) => typeof arg === "object" ? log_stringify(arg) : String(arg)).join(" ");
3337
+ } else output = args.map((arg) => typeof arg === "object" ? log_stringify(arg) : log_string(arg)).join(" ");
3322
3338
  return output;
3323
3339
  }
3340
+ function call_log_function(fn, ...args) {
3341
+ try {
3342
+ fn(...args);
3343
+ } catch (e) {
3344
+ try {
3345
+ _console.error("a log function threw:", e);
3346
+ } catch (e2) {}
3347
+ }
3348
+ }
3324
3349
  function log_error(format, ...args) {
3325
3350
  let msg = format_log(format, ...args);
3326
3351
  let hora = current_timestamp();
3327
3352
  if (f_error) {
3328
3353
  if (f_error === _console.error) {
3329
- if (console_wants("error", msg)) f_error("%c" + hora + " ERROR: " + String(msg), "color:red");
3354
+ if (console_wants("error", msg)) call_log_function(f_error, "%c" + hora + " ERROR: " + String(msg), "color:red");
3330
3355
  } else {
3331
3356
  if (console_wants("error", msg)) _console.error("%c" + hora + " ERROR: " + String(msg), "color:red");
3332
- f_error(`${hora} ERROR: ${String(msg)}`);
3357
+ call_log_function(f_error, `${hora} ERROR: ${String(msg)}`);
3333
3358
  }
3334
3359
  }
3335
3360
  emit_log_callback("error", msg, hora);
@@ -3339,10 +3364,10 @@ var gobjJs = (function(exports) {
3339
3364
  let hora = current_timestamp();
3340
3365
  if (f_warning) {
3341
3366
  if (f_warning === _console.warn) {
3342
- if (console_wants("warning", msg)) f_warning("%c" + hora + " WARNING: " + String(msg), "color:yellow");
3367
+ if (console_wants("warning", msg)) call_log_function(f_warning, "%c" + hora + " WARNING: " + String(msg), "color:yellow");
3343
3368
  } else {
3344
3369
  if (console_wants("warning", msg)) _console.warn("%c" + hora + " WARNING: " + String(msg), "color:yellow");
3345
- f_warning(`${hora} WARNING: ${String(msg)}`);
3370
+ call_log_function(f_warning, `${hora} WARNING: ${String(msg)}`);
3346
3371
  }
3347
3372
  }
3348
3373
  emit_log_callback("warning", msg, hora);
@@ -3351,7 +3376,7 @@ var gobjJs = (function(exports) {
3351
3376
  let msg = format_log(format, ...args);
3352
3377
  let hora = current_timestamp();
3353
3378
  if (f_info) {
3354
- if (console_wants("info", msg)) f_info("%c" + hora + " INFO: " + String(msg), "color:cyan");
3379
+ if (console_wants("info", msg)) call_log_function(f_info, "%c" + hora + " INFO: " + String(msg), "color:cyan");
3355
3380
  }
3356
3381
  emit_log_callback("info", msg, hora);
3357
3382
  }
@@ -3359,7 +3384,7 @@ var gobjJs = (function(exports) {
3359
3384
  let msg = format_log(format, ...args);
3360
3385
  let hora = current_timestamp();
3361
3386
  if (f_debug) {
3362
- if (console_wants("debug", msg)) f_debug("%c" + hora + " DEBUG: " + String(msg), "color:silver");
3387
+ if (console_wants("debug", msg)) call_log_function(f_debug, "%c" + hora + " DEBUG: " + String(msg), "color:silver");
3363
3388
  }
3364
3389
  emit_log_callback("debug", msg, hora);
3365
3390
  }
@@ -3367,14 +3392,14 @@ var gobjJs = (function(exports) {
3367
3392
  let msg = format_log(format, ...args);
3368
3393
  let hora = current_timestamp();
3369
3394
  if (f_debug) {
3370
- if (console_wants("msg", msg)) f_debug("%c" + hora + " MSG: " + String(msg), "color:cyan");
3395
+ if (console_wants("msg", msg)) call_log_function(f_debug, "%c" + hora + " MSG: " + String(msg), "color:cyan");
3371
3396
  }
3372
3397
  emit_log_callback("msg", msg, hora);
3373
3398
  }
3374
3399
  function trace_json(jn, msg) {
3375
3400
  if (console_wants("json", msg)) {
3376
- if (msg) _console.warn("=====> " + msg);
3377
- _console.dir(jn);
3401
+ if (msg) call_log_function(_console.warn, "=====> " + log_string(msg));
3402
+ call_log_function(_console.dir, jn);
3378
3403
  }
3379
3404
  emit_log_callback("json", jn, current_timestamp());
3380
3405
  }
@@ -4373,6 +4398,13 @@ var gobjJs = (function(exports) {
4373
4398
  kw_set_dict_value(gobj, kw, path, default_value);
4374
4399
  return default_value;
4375
4400
  }
4401
+ if (create && v === null) {
4402
+ if (required) {
4403
+ log_error(`path not found: '${path}'`);
4404
+ trace_json_masked(kw);
4405
+ }
4406
+ return default_value;
4407
+ }
4376
4408
  if (required || create) {
4377
4409
  log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}path MUST BE a json dict: '${path}'` + (create ? ", cannot create" : ""));
4378
4410
  trace_json_masked(kw);
@@ -4437,6 +4469,13 @@ var gobjJs = (function(exports) {
4437
4469
  kw_set_dict_value(gobj, kw, path, default_value);
4438
4470
  return default_value;
4439
4471
  }
4472
+ if (create && v === null) {
4473
+ if (required) {
4474
+ log_error(`path not found: '${path}'`);
4475
+ trace_json_masked(kw);
4476
+ }
4477
+ return default_value;
4478
+ }
4440
4479
  if (required || create) {
4441
4480
  log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}path MUST BE a json list: '${path}'` + (create ? ", cannot create" : ""));
4442
4481
  trace_json_masked(kw);
@@ -4650,8 +4689,8 @@ var gobjJs = (function(exports) {
4650
4689
  ["$key1", "$key2", ...]
4651
4690
  {"$key1":*, "$key2":*, ...}
4652
4691
 
4653
- It's not a deep copy, new keys are the paths.
4654
- If paths are empty return kw
4692
+ It's not a deep copy. A key is a KEY, not a path (as C, SDK 7.26.9).
4693
+ If keys are empty return kw
4655
4694
  *************************************************************/
4656
4695
  function kw_clone_by_keys(gobj, kw, keys, verbose) {
4657
4696
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -4678,8 +4717,8 @@ var gobjJs = (function(exports) {
4678
4717
  ["$key1", "$key2", ...]
4679
4718
  {"$key1":*, "$key2":*, ...}
4680
4719
 
4681
- It's not a deep copy, new keys are the paths.
4682
- If paths are empty return empty
4720
+ It's not a deep copy. A key is a KEY, not a path (as C, SDK 7.26.9).
4721
+ If keys are empty return empty
4683
4722
  ***************************************************************************/
4684
4723
  function kw_clone_by_not_keys(gobj, kw, keys, verbose) {
4685
4724
  let kw_clone = {};