mol_mutable 0.0.989 → 0.0.991

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.
package/node.test.js CHANGED
@@ -221,6 +221,32 @@ var $;
221
221
  $.$mol_fail_catch = $mol_fail_catch;
222
222
  })($ || ($ = {}));
223
223
 
224
+ ;
225
+ "use strict";
226
+ var $;
227
+ (function ($) {
228
+ function $mol_try(handler) {
229
+ try {
230
+ return handler();
231
+ }
232
+ catch (error) {
233
+ return error;
234
+ }
235
+ }
236
+ $.$mol_try = $mol_try;
237
+ })($ || ($ = {}));
238
+
239
+ ;
240
+ "use strict";
241
+ var $;
242
+ (function ($) {
243
+ $mol_test({
244
+ 'return result without errors'() {
245
+ $mol_assert_equal($mol_try(() => false), false);
246
+ },
247
+ });
248
+ })($ || ($ = {}));
249
+
224
250
  ;
225
251
  "use strict";
226
252
  var $;
@@ -230,7 +256,7 @@ var $;
230
256
  return false;
231
257
  if (!$mol_fail_catch(error))
232
258
  return false;
233
- console.error(error);
259
+ $mol_try(() => { $mol_fail_hidden(error); });
234
260
  return true;
235
261
  }
236
262
  $.$mol_fail_log = $mol_fail_log;
@@ -368,7 +394,7 @@ var $;
368
394
  get: () => stack_get() + '\n' + [
369
395
  this.cause ?? 'no cause',
370
396
  ...this.errors.flatMap(e => [
371
- e.stack,
397
+ String(e.stack),
372
398
  ...e instanceof $mol_error_mix || !e.cause ? [] : [e.cause]
373
399
  ])
374
400
  ].map(frame_normalize).join('\n')
@@ -722,6 +748,17 @@ var $;
722
748
  $.$mol_dev_format_register = $mol_dev_format_register;
723
749
  $.$mol_dev_format_head = Symbol('$mol_dev_format_head');
724
750
  $.$mol_dev_format_body = Symbol('$mol_dev_format_body');
751
+ function $mol_dev_format_button(label, click) {
752
+ return $mol_dev_format_auto({
753
+ [$.$mol_dev_format_head]() {
754
+ return $mol_dev_format_span({ color: 'cornflowerblue' }, label);
755
+ },
756
+ [$.$mol_dev_format_body]() {
757
+ Promise.resolve().then(click);
758
+ return $mol_dev_format_span({});
759
+ }
760
+ });
761
+ }
725
762
  $mol_dev_format_register({
726
763
  header: (val, config = false) => {
727
764
  if (config)
@@ -739,13 +776,41 @@ var $;
739
776
  if (typeof val === 'function') {
740
777
  return $mol_dev_format_native(val);
741
778
  }
779
+ if (Error.isError(val)) {
780
+ return $mol_dev_format_span({}, $mol_dev_format_native(val), ' ', $mol_dev_format_button('throw', () => $mol_fail_hidden(val)));
781
+ }
782
+ if (val instanceof Promise) {
783
+ return $.$mol_dev_format_shade($mol_dev_format_native(val), ' ', val[Symbol.toStringTag] ?? '');
784
+ }
742
785
  if (Symbol.toStringTag in val) {
743
786
  return $mol_dev_format_native(val);
744
787
  }
745
788
  return null;
746
789
  },
747
- hasBody: val => val[$.$mol_dev_format_body],
748
- body: val => val[$.$mol_dev_format_body](),
790
+ hasBody: (val, config = false) => {
791
+ if (config)
792
+ return false;
793
+ if (!val)
794
+ return false;
795
+ if (val[$.$mol_dev_format_body])
796
+ return true;
797
+ return false;
798
+ },
799
+ body: (val, config = false) => {
800
+ if (config)
801
+ return null;
802
+ if (!val)
803
+ return null;
804
+ if ($.$mol_dev_format_body in val) {
805
+ try {
806
+ return val[$.$mol_dev_format_body]();
807
+ }
808
+ catch (error) {
809
+ return $.$mol_dev_format_accent($mol_dev_format_native(val), '💨', $mol_dev_format_native(error), '');
810
+ }
811
+ }
812
+ return null;
813
+ },
749
814
  });
750
815
  function $mol_dev_format_native(obj) {
751
816
  if (typeof obj === 'undefined')
@@ -811,6 +876,69 @@ var $;
811
876
  $.$mol_dev_format_indent = $.$mol_dev_format_div.bind(null, {
812
877
  'margin-left': '13px'
813
878
  });
879
+ class Stack extends Array {
880
+ toString() {
881
+ return this.join('\n');
882
+ }
883
+ }
884
+ class Call extends Object {
885
+ type;
886
+ function;
887
+ method;
888
+ eval;
889
+ source;
890
+ offset;
891
+ pos;
892
+ object;
893
+ flags;
894
+ [Symbol.toStringTag];
895
+ constructor(call) {
896
+ super();
897
+ this.type = call.getTypeName() ?? '';
898
+ this.function = call.getFunctionName() ?? '';
899
+ this.method = call.getMethodName() ?? '';
900
+ if (this.method === this.function)
901
+ this.method = '';
902
+ this.pos = [call.getEnclosingLineNumber() ?? 0, call.getEnclosingColumnNumber() ?? 0];
903
+ this.eval = call.getEvalOrigin() ?? '';
904
+ this.source = call.getScriptNameOrSourceURL() ?? '';
905
+ this.object = call.getThis();
906
+ this.offset = call.getPosition();
907
+ const flags = [];
908
+ if (call.isAsync())
909
+ flags.push('async');
910
+ if (call.isConstructor())
911
+ flags.push('constructor');
912
+ if (call.isEval())
913
+ flags.push('eval');
914
+ if (call.isNative())
915
+ flags.push('native');
916
+ if (call.isPromiseAll())
917
+ flags.push('PromiseAll');
918
+ if (call.isToplevel())
919
+ flags.push('top');
920
+ this.flags = flags;
921
+ const type = this.type ? this.type + '.' : '';
922
+ const func = this.function || '<anon>';
923
+ const method = this.method ? ' [' + this.method + '] ' : '';
924
+ this[Symbol.toStringTag] = `${type}${func}${method}`;
925
+ }
926
+ [Symbol.toPrimitive]() {
927
+ return this.toString();
928
+ }
929
+ toString() {
930
+ const object = this.object || '';
931
+ const label = this[Symbol.toStringTag];
932
+ const source = `${this.source}:${this.pos.join(':')} #${this.offset}`;
933
+ return `\tat ${object}${label} (${source})`;
934
+ }
935
+ [$.$mol_dev_format_head]() {
936
+ return $.$mol_dev_format_div({}, $mol_dev_format_native(this), $.$mol_dev_format_shade(' '), ...this.object ? [
937
+ $mol_dev_format_native(this.object),
938
+ ] : [], ...this.method ? [$.$mol_dev_format_shade(' ', ' [', this.method, ']')] : [], $.$mol_dev_format_shade(' ', this.flags.join(', ')));
939
+ }
940
+ }
941
+ Error.prepareStackTrace ??= (error, stack) => new Stack(...stack.map(call => new Call(call)));
814
942
  })($ || ($ = {}));
815
943
 
816
944
  ;
@@ -2775,7 +2903,7 @@ var $;
2775
2903
  if (left instanceof RegExp)
2776
2904
  return left.source === right.source && left.flags === right.flags;
2777
2905
  if (left instanceof Error)
2778
- return left.message === right.message && left.stack === right.stack;
2906
+ return left.message === right.message && $mol_compare_deep(left.stack, right.stack);
2779
2907
  let left_cache = $.$mol_compare_deep_cache.get(left);
2780
2908
  if (left_cache) {
2781
2909
  const right_cache = left_cache.get(right);
@@ -3037,7 +3165,7 @@ var $;
3037
3165
  catch (error) {
3038
3166
  $.$mol_fail = fail;
3039
3167
  if (typeof ErrorRight === 'string') {
3040
- $mol_assert_equal(error.message, ErrorRight);
3168
+ $mol_assert_equal(error.message ?? error, ErrorRight);
3041
3169
  }
3042
3170
  else {
3043
3171
  $mol_assert_equal(error instanceof ErrorRight, true);
@@ -3061,7 +3189,7 @@ var $;
3061
3189
  continue;
3062
3190
  if (!$mol_compare_deep(args[i], args[j]))
3063
3191
  continue;
3064
- $mol_fail(new Error(`args[${i}] = args[${j}] = ${print(args[i])}`));
3192
+ return $mol_fail(new Error(`Uniquesess assertion failure`, { cause: { [i]: args[i], [i]: args[i] } }));
3065
3193
  }
3066
3194
  }
3067
3195
  }
@@ -3072,29 +3200,10 @@ var $;
3072
3200
  continue;
3073
3201
  if (args[0] instanceof $mol_dom_context.Element && args[i] instanceof $mol_dom_context.Element && args[0].outerHTML === args[i].outerHTML)
3074
3202
  continue;
3075
- return $mol_fail(new Error(`args[0] ≠ args[${i}]\n${print(args[0])}\n---\n${print(args[i])}`));
3203
+ return $mol_fail(new Error(`Equality assertion failure`, { cause: { 0: args[0], [i]: args[i] } }));
3076
3204
  }
3077
3205
  }
3078
3206
  $.$mol_assert_equal = $mol_assert_equal;
3079
- const print = (val) => {
3080
- if (!val)
3081
- return val;
3082
- if (typeof val === 'bigint')
3083
- return String(val) + 'n';
3084
- if (typeof val === 'symbol')
3085
- return `Symbol(${val.description})`;
3086
- if (typeof val !== 'object')
3087
- return val;
3088
- if ('outerHTML' in val)
3089
- return val.outerHTML;
3090
- try {
3091
- return JSON.stringify(val, (k, v) => typeof v === 'bigint' ? String(v) : v, '\t');
3092
- }
3093
- catch (error) {
3094
- console.error(error);
3095
- return val;
3096
- }
3097
- };
3098
3207
  })($ || ($ = {}));
3099
3208
 
3100
3209
  ;