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