@yuneta/gobj-js 7.26.15 → 7.26.16

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.
@@ -3298,6 +3298,20 @@ var gobjJs = (function(exports) {
3298
3298
  }
3299
3299
  }
3300
3300
  }
3301
+ function log_string(v) {
3302
+ try {
3303
+ return String(v);
3304
+ } catch (e) {
3305
+ return log_stringify(v);
3306
+ }
3307
+ }
3308
+ function log_number(parse, v) {
3309
+ try {
3310
+ return parse(v);
3311
+ } catch (e) {
3312
+ return log_string(v);
3313
+ }
3314
+ }
3301
3315
  function format_log(format) {
3302
3316
  const args = Array.prototype.slice.call(arguments);
3303
3317
  let output = "";
@@ -3307,18 +3321,18 @@ var gobjJs = (function(exports) {
3307
3321
  output = format.replace(/%[sdifoO]/g, (match) => {
3308
3322
  const val = args[i++];
3309
3323
  switch (match) {
3310
- case "%s": return String(val);
3324
+ case "%s": return log_string(val);
3311
3325
  case "%d":
3312
- case "%i": return parseInt(val);
3313
- case "%f": return parseFloat(val);
3326
+ case "%i": return log_number(parseInt, val);
3327
+ case "%f": return log_number(parseFloat, val);
3314
3328
  case "%o":
3315
- case "%O": return typeof val === "object" ? log_stringify(val) : String(val);
3329
+ case "%O": return typeof val === "object" ? log_stringify(val) : log_string(val);
3316
3330
  default: return match;
3317
3331
  }
3318
3332
  });
3319
- const rest = args.slice(i).map((arg) => typeof arg === "object" ? log_stringify(arg) : String(arg));
3333
+ const rest = args.slice(i).map((arg) => typeof arg === "object" ? log_stringify(arg) : log_string(arg));
3320
3334
  if (rest.length > 0) output += " " + rest.join(" ");
3321
- } else output = args.map((arg) => typeof arg === "object" ? log_stringify(arg) : String(arg)).join(" ");
3335
+ } else output = args.map((arg) => typeof arg === "object" ? log_stringify(arg) : log_string(arg)).join(" ");
3322
3336
  return output;
3323
3337
  }
3324
3338
  function log_error(format, ...args) {
@@ -4373,6 +4387,13 @@ var gobjJs = (function(exports) {
4373
4387
  kw_set_dict_value(gobj, kw, path, default_value);
4374
4388
  return default_value;
4375
4389
  }
4390
+ if (create && v === null) {
4391
+ if (required) {
4392
+ log_error(`path not found: '${path}'`);
4393
+ trace_json_masked(kw);
4394
+ }
4395
+ return default_value;
4396
+ }
4376
4397
  if (required || create) {
4377
4398
  log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}path MUST BE a json dict: '${path}'` + (create ? ", cannot create" : ""));
4378
4399
  trace_json_masked(kw);
@@ -4437,6 +4458,13 @@ var gobjJs = (function(exports) {
4437
4458
  kw_set_dict_value(gobj, kw, path, default_value);
4438
4459
  return default_value;
4439
4460
  }
4461
+ if (create && v === null) {
4462
+ if (required) {
4463
+ log_error(`path not found: '${path}'`);
4464
+ trace_json_masked(kw);
4465
+ }
4466
+ return default_value;
4467
+ }
4440
4468
  if (required || create) {
4441
4469
  log_error(`${gobj ? gobj_short_name(gobj) + ": " : ""}path MUST BE a json list: '${path}'` + (create ? ", cannot create" : ""));
4442
4470
  trace_json_masked(kw);
@@ -4650,8 +4678,8 @@ var gobjJs = (function(exports) {
4650
4678
  ["$key1", "$key2", ...]
4651
4679
  {"$key1":*, "$key2":*, ...}
4652
4680
 
4653
- It's not a deep copy, new keys are the paths.
4654
- If paths are empty return kw
4681
+ It's not a deep copy. A key is a KEY, not a path (as C, SDK 7.26.9).
4682
+ If keys are empty return kw
4655
4683
  *************************************************************/
4656
4684
  function kw_clone_by_keys(gobj, kw, keys, verbose) {
4657
4685
  if (gobj && !is_gobj(gobj)) log_error(`GObj bad instanceof`);
@@ -4678,8 +4706,8 @@ var gobjJs = (function(exports) {
4678
4706
  ["$key1", "$key2", ...]
4679
4707
  {"$key1":*, "$key2":*, ...}
4680
4708
 
4681
- It's not a deep copy, new keys are the paths.
4682
- If paths are empty return empty
4709
+ It's not a deep copy. A key is a KEY, not a path (as C, SDK 7.26.9).
4710
+ If keys are empty return empty
4683
4711
  ***************************************************************************/
4684
4712
  function kw_clone_by_not_keys(gobj, kw, keys, verbose) {
4685
4713
  let kw_clone = {};