structured-outputs 0.1.0-beta.2 → 0.1.0-beta.20
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +77 -6
- package/esm/ResponseFormat.js +33 -5
- package/esm/ResponseFormat.js.map +1 -1
- package/esm/Tool.js +17 -0
- package/esm/Tool.js.map +1 -0
- package/esm/_dnt.polyfills.js +16 -0
- package/esm/_dnt.polyfills.js.map +1 -0
- package/esm/_dnt.shims.js +58 -0
- package/esm/_dnt.shims.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/almost_equals.js +47 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/almost_equals.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/array_includes.js +47 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/array_includes.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/assert.js +23 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/assert.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/assertion_error.js +31 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/assertion_error.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/equal.js +184 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/equal.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/equals.js +46 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/equals.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/exists.js +28 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/exists.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/fail.js +21 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/fail.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/false.js +23 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/false.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/greater.js +30 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/greater.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.js +30 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/instance_of.js +53 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/instance_of.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/is_error.js +54 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/is_error.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/less.js +29 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/less.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/less_or_equal.js +30 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/less_or_equal.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/match.js +27 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/match.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/mod.js +46 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/mod.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_equals.js +33 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_equals.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_instance_of.js +30 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_instance_of.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_match.js +27 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_match.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.js +33 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/object_match.js +160 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/object_match.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/rejects.js +54 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/rejects.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/strict_equals.js +58 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/strict_equals.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/string_includes.js +27 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/string_includes.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/throws.js +45 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/throws.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/unimplemented.js +21 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/unimplemented.js.map +1 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/unreachable.js +21 -0
- package/esm/deps/jsr.io/@std/assert/1.0.8/unreachable.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/_utils.js +19 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/_utils.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.js +51 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/associate_by.js +45 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/associate_by.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/associate_with.js +41 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/associate_with.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/chunk.js +51 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/chunk.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/deep_merge.js +96 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/deep_merge.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/distinct.js +28 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/distinct.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/distinct_by.js +39 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/distinct_by.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/drop_last_while.js +33 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/drop_last_while.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/drop_while.js +34 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/drop_while.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/filter_entries.js +43 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/filter_entries.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/filter_keys.js +46 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/filter_keys.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/filter_values.js +46 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/filter_values.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/find_single.js +45 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/find_single.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.js +42 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/includes_value.js +39 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/includes_value.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/intersect.js +36 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/intersect.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/invert.js +29 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/invert.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/invert_by.js +46 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/invert_by.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/join_to_string.js +59 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/join_to_string.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_entries.js +47 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_entries.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_keys.js +42 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_keys.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.js +43 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_values.js +13 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/map_values.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/max_by.js +15 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/max_by.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/max_of.js +17 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/max_of.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/max_with.js +41 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/max_with.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/min_by.js +15 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/min_by.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/min_of.js +17 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/min_of.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/min_with.js +37 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/min_with.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/mod.js +75 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/mod.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/omit.js +29 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/omit.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/partition.js +16 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/partition.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/partition_entries.js +54 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/partition_entries.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/permutations.js +58 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/permutations.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/pick.js +33 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/pick.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/reduce_groups.js +40 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/reduce_groups.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/running_reduce.js +32 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/running_reduce.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sample.js +35 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sample.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sliding_windows.js +57 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sliding_windows.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sort_by.js +30 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sort_by.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sum_of.js +37 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/sum_of.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/take_last_while.js +34 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/take_last_while.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/take_while.js +39 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/take_while.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/union.js +34 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/union.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/unzip.js +46 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/unzip.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/without_all.js +28 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/without_all.js.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/zip.js +43 -0
- package/esm/deps/jsr.io/@std/collections/1.0.9/zip.js.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/build_message.js +111 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/build_message.js.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/diff.js +277 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/diff.js.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/diff_str.js +180 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/diff_str.js.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/format.js +38 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/format.js.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/styles.js +208 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/styles.js.map +1 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/types.js +3 -0
- package/esm/deps/jsr.io/@std/internal/1.0.5/types.js.map +1 -0
- package/esm/mod.js +3 -10
- package/esm/mod.js.map +1 -1
- package/esm/types/Ref.js +11 -0
- package/esm/types/Ref.js.map +1 -0
- package/esm/types/RootTy.js +19 -0
- package/esm/types/RootTy.js.map +1 -0
- package/esm/types/Ty.js +17 -0
- package/esm/types/Ty.js.map +1 -0
- package/esm/types/array.js +9 -0
- package/esm/types/array.js.map +1 -0
- package/esm/types/constant.js +8 -0
- package/esm/types/constant.js.map +1 -0
- package/esm/types/constantUnion.js +25 -0
- package/esm/types/constantUnion.js.map +1 -0
- package/esm/types/leaves.js +18 -0
- package/esm/types/leaves.js.map +1 -0
- package/esm/types/mod.js +11 -0
- package/esm/types/mod.js.map +1 -0
- package/esm/{object.js → types/object.js} +4 -4
- package/esm/types/object.js.map +1 -0
- package/esm/types/std/Option.js +9 -0
- package/esm/types/std/Option.js.map +1 -0
- package/esm/types/std/Wrapper.js +5 -0
- package/esm/types/std/Wrapper.js.map +1 -0
- package/esm/types/std/mod.js +3 -0
- package/esm/types/std/mod.js.map +1 -0
- package/esm/types/taggedUnion.js +20 -0
- package/esm/types/taggedUnion.js.map +1 -0
- package/esm/util/phantoms.js +4 -0
- package/esm/util/phantoms.js.map +1 -0
- package/esm/util/recombineTaggedTemplateArgs.js +4 -0
- package/esm/util/recombineTaggedTemplateArgs.js.map +1 -0
- package/package.json +10 -7
- package/src/ResponseFormat.ts +76 -25
- package/src/Tool.ts +38 -0
- package/src/_dnt.polyfills.ts +27 -0
- package/src/_dnt.shims.ts +60 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/almost_equals.ts +55 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/array_includes.ts +57 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/assert.ts +23 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/assertion_error.ts +31 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/equal.ts +210 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/equals.ts +52 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/exists.ts +31 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/fail.ts +21 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/false.ts +26 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/greater.ts +30 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.ts +36 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/instance_of.ts +64 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/is_error.ts +65 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/less.ts +29 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/less_or_equal.ts +36 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/match.ts +30 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/mod.ts +47 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/not_equals.ts +36 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/not_instance_of.ts +33 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/not_match.ts +30 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.ts +42 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/object_match.ts +202 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/rejects.ts +123 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/strict_equals.ts +67 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/string_includes.ts +30 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/throws.ts +111 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/unimplemented.ts +21 -0
- package/src/deps/jsr.io/@std/assert/1.0.8/unreachable.ts +21 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/_utils.ts +26 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.ts +62 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/associate_by.ts +50 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/associate_with.ts +46 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/chunk.ts +56 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/deep_merge.ts +578 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/distinct.ts +29 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/distinct_by.ts +42 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/drop_last_while.ts +36 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/drop_while.ts +39 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/filter_entries.ts +48 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/filter_keys.ts +51 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/filter_values.ts +51 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/find_single.ts +48 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.ts +47 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/includes_value.ts +45 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/intersect.ts +35 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/invert.ts +38 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/invert_by.ts +56 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/join_to_string.ts +109 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/map_entries.ts +53 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/map_keys.ts +47 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.ts +49 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/map_values.ts +96 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/max_by.ts +153 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/max_of.ts +90 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/max_with.ts +46 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/min_by.ts +151 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/min_of.ts +90 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/min_with.ts +42 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/mod.ts +76 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/omit.ts +34 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/partition.ts +85 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/partition_entries.ts +58 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/permutations.ts +66 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/pick.ts +34 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/reduce_groups.ts +45 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/running_reduce.ts +38 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/sample.ts +36 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/sliding_windows.ts +86 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/sort_by.ts +219 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/sum_of.ts +42 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/take_last_while.ts +37 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/take_while.ts +44 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/union.ts +36 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/unzip.ts +50 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/without_all.ts +28 -0
- package/src/deps/jsr.io/@std/collections/1.0.9/zip.ts +49 -0
- package/src/deps/jsr.io/@std/internal/1.0.5/build_message.ts +134 -0
- package/src/deps/jsr.io/@std/internal/1.0.5/diff.ts +317 -0
- package/src/deps/jsr.io/@std/internal/1.0.5/diff_str.ts +204 -0
- package/src/deps/jsr.io/@std/internal/1.0.5/format.ts +39 -0
- package/src/deps/jsr.io/@std/internal/1.0.5/styles.ts +233 -0
- package/src/deps/jsr.io/@std/internal/1.0.5/types.ts +18 -0
- package/src/mod.ts +3 -18
- package/src/types/Ref.ts +16 -0
- package/src/types/RootTy.ts +40 -0
- package/src/types/Ty.ts +57 -0
- package/src/types/array.ts +9 -0
- package/src/types/constant.ts +8 -0
- package/src/types/constantUnion.ts +27 -0
- package/src/types/leaves.ts +21 -0
- package/src/types/mod.ts +10 -0
- package/src/types/object.ts +15 -0
- package/src/types/std/Option.ts +15 -0
- package/src/types/std/Wrapper.ts +8 -0
- package/src/types/std/mod.ts +2 -0
- package/src/types/taggedUnion.ts +28 -0
- package/src/util/phantoms.ts +3 -0
- package/src/util/recombineTaggedTemplateArgs.ts +6 -0
- package/types/ResponseFormat.d.ts +26 -0
- package/types/ResponseFormat.d.ts.map +1 -0
- package/types/Tool.d.ts +13 -0
- package/types/Tool.d.ts.map +1 -0
- package/types/_dnt.polyfills.d.ts +12 -0
- package/types/_dnt.polyfills.d.ts.map +1 -0
- package/types/_dnt.shims.d.ts +2 -0
- package/types/_dnt.shims.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/almost_equals.d.ts +29 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/almost_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/array_includes.d.ts +24 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/array_includes.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/assert.d.ts +16 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/assert.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/assertion_error.d.ts +26 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/assertion_error.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/equal.d.ts +17 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/equals.d.ts +22 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/exists.d.ts +18 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/exists.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/fail.d.ts +15 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/fail.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/false.d.ts +18 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/false.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/greater.d.ts +20 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/greater.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.d.ts +20 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/instance_of.d.ts +23 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/instance_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/is_error.d.ts +25 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/is_error.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/less.d.ts +19 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/less.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/less_or_equal.d.ts +20 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/less_or_equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/match.d.ts +18 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/match.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/mod.d.ts +44 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_equals.d.ts +21 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_instance_of.d.ts +20 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_instance_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_match.d.ts +18 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_match.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.d.ts +23 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/object_match.d.ts +28 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/object_match.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/rejects.d.ts +42 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/rejects.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/strict_equals.d.ts +24 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/strict_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/string_includes.d.ts +18 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/string_includes.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/throws.d.ts +45 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/throws.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/unimplemented.d.ts +15 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/unimplemented.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/unreachable.d.ts +15 -0
- package/types/deps/jsr.io/@std/assert/1.0.8/unreachable.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/_utils.d.ts +6 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/_utils.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.d.ts +41 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/associate_by.d.ts +37 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/associate_by.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/associate_with.d.ts +33 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/associate_with.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/chunk.d.ts +38 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/chunk.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/deep_merge.d.ts +322 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/deep_merge.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/distinct.d.ts +23 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/distinct.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/distinct_by.d.ts +26 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/distinct_by.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/drop_last_while.d.ts +26 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/drop_last_while.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/drop_while.d.ts +25 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/drop_while.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/filter_entries.d.ts +32 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/filter_entries.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/filter_keys.d.ts +36 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/filter_keys.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/filter_values.d.ts +35 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/filter_values.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/find_single.d.ts +31 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/find_single.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.d.ts +32 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/includes_value.d.ts +29 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/includes_value.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/intersect.d.ts +25 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/intersect.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/invert.d.ts +29 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/invert.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/invert_by.d.ts +34 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/invert_by.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/join_to_string.d.ts +75 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/join_to_string.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_entries.d.ts +37 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_entries.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_keys.d.ts +33 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_keys.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.d.ts +32 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_values.d.ts +71 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/map_values.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/max_by.d.ts +117 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/max_by.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/max_of.d.ts +61 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/max_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/max_with.d.ts +29 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/max_with.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/min_by.d.ts +115 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/min_by.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/min_of.d.ts +61 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/min_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/min_with.d.ts +25 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/min_with.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/mod.d.ts +73 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/omit.d.ts +24 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/omit.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/partition.d.ts +60 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/partition.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/partition_entries.d.ts +39 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/partition_entries.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/permutations.d.ts +27 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/permutations.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/pick.d.ts +25 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/pick.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/reduce_groups.d.ts +35 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/reduce_groups.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/running_reduce.d.ts +27 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/running_reduce.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sample.d.ts +24 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sample.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sliding_windows.d.ts +66 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sliding_windows.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sort_by.d.ts +161 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sort_by.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sum_of.d.ts +29 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/sum_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/take_last_while.d.ts +27 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/take_last_while.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/take_while.d.ts +30 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/take_while.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/union.d.ts +24 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/union.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/unzip.d.ts +32 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/unzip.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/without_all.d.ts +23 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/without_all.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/zip.d.ts +34 -0
- package/types/deps/jsr.io/@std/collections/1.0.9/zip.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts +82 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/diff.d.ts +140 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/diff.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts +99 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/format.d.ts +2 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/format.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/styles.d.ts +159 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/styles.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/types.d.ts +16 -0
- package/types/deps/jsr.io/@std/internal/1.0.5/types.d.ts.map +1 -0
- package/types/mod.d.ts +5 -0
- package/types/mod.d.ts.map +1 -0
- package/types/types/Ref.d.ts +4 -0
- package/types/types/Ref.d.ts.map +1 -0
- package/types/types/RootTy.d.ts +8 -0
- package/types/types/RootTy.d.ts.map +1 -0
- package/types/types/Ty.d.ts +27 -0
- package/types/types/Ty.d.ts.map +1 -0
- package/types/types/array.d.ts +3 -0
- package/types/types/array.d.ts.map +1 -0
- package/types/types/constant.d.ts +3 -0
- package/types/types/constant.d.ts.map +1 -0
- package/types/types/constantUnion.d.ts +3 -0
- package/types/types/constantUnion.d.ts.map +1 -0
- package/types/types/leaves.d.ts +6 -0
- package/types/types/leaves.d.ts.map +1 -0
- package/types/types/mod.d.ts +11 -0
- package/types/types/mod.d.ts.map +1 -0
- package/types/types/object.d.ts +6 -0
- package/types/types/object.d.ts.map +1 -0
- package/types/types/std/Option.d.ts +7 -0
- package/types/types/std/Option.d.ts.map +1 -0
- package/types/types/std/Wrapper.d.ts +7 -0
- package/types/types/std/Wrapper.d.ts.map +1 -0
- package/types/types/std/mod.d.ts +3 -0
- package/types/types/std/mod.d.ts.map +1 -0
- package/types/types/taggedUnion.d.ts +8 -0
- package/types/types/taggedUnion.d.ts.map +1 -0
- package/types/util/phantoms.d.ts +2 -0
- package/types/util/phantoms.d.ts.map +1 -0
- package/types/util/recombineTaggedTemplateArgs.d.ts +2 -0
- package/types/util/recombineTaggedTemplateArgs.d.ts.map +1 -0
- package/esm/F.d.ts +0 -13
- package/esm/F.d.ts.map +0 -1
- package/esm/F.js +0 -10
- package/esm/F.js.map +0 -1
- package/esm/ResponseFormat.d.ts +0 -14
- package/esm/ResponseFormat.d.ts.map +0 -1
- package/esm/_base.d.ts +0 -13
- package/esm/_base.d.ts.map +0 -1
- package/esm/_base.js +0 -40
- package/esm/_base.js.map +0 -1
- package/esm/array.d.ts +0 -4
- package/esm/array.d.ts.map +0 -1
- package/esm/array.js +0 -9
- package/esm/array.js.map +0 -1
- package/esm/common.d.ts +0 -6
- package/esm/common.d.ts.map +0 -1
- package/esm/common.js +0 -2
- package/esm/common.js.map +0 -1
- package/esm/literal.d.ts +0 -4
- package/esm/literal.d.ts.map +0 -1
- package/esm/literal.js +0 -8
- package/esm/literal.js.map +0 -1
- package/esm/mod.d.ts +0 -16
- package/esm/mod.d.ts.map +0 -1
- package/esm/number.d.ts +0 -4
- package/esm/number.d.ts.map +0 -1
- package/esm/number.js +0 -8
- package/esm/number.js.map +0 -1
- package/esm/object.d.ts +0 -7
- package/esm/object.d.ts.map +0 -1
- package/esm/object.js.map +0 -1
- package/esm/schema.d.ts +0 -4
- package/esm/schema.d.ts.map +0 -1
- package/esm/schema.js +0 -9
- package/esm/schema.js.map +0 -1
- package/esm/string.d.ts +0 -4
- package/esm/string.d.ts.map +0 -1
- package/esm/string.js +0 -8
- package/esm/string.js.map +0 -1
- package/esm/union.d.ts +0 -6
- package/esm/union.d.ts.map +0 -1
- package/esm/union.js +0 -8
- package/esm/union.js.map +0 -1
- package/src/F.ts +0 -27
- package/src/_base.ts +0 -25
- package/src/array.ts +0 -11
- package/src/common.ts +0 -6
- package/src/literal.ts +0 -10
- package/src/number.ts +0 -10
- package/src/object.ts +0 -17
- package/src/schema.ts +0 -10
- package/src/string.ts +0 -10
- package/src/union.ts +0 -12
@@ -0,0 +1,36 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { format } from "../../internal/1.0.5/format.js";
|
4
|
+
import { AssertionError } from "./assertion_error.js";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Make an assertion that `actual` is greater than or equal to `expected`.
|
8
|
+
* If not then throw.
|
9
|
+
*
|
10
|
+
* @example Usage
|
11
|
+
* ```ts ignore
|
12
|
+
* import { assertGreaterOrEqual } from "@std/assert";
|
13
|
+
*
|
14
|
+
* assertGreaterOrEqual(2, 1); // Doesn't throw
|
15
|
+
* assertGreaterOrEqual(1, 1); // Doesn't throw
|
16
|
+
* assertGreaterOrEqual(0, 1); // Throws
|
17
|
+
* ```
|
18
|
+
*
|
19
|
+
* @typeParam T The type of the values to compare.
|
20
|
+
* @param actual The actual value to compare.
|
21
|
+
* @param expected The expected value to compare.
|
22
|
+
* @param msg The optional message to display if the assertion fails.
|
23
|
+
*/
|
24
|
+
export function assertGreaterOrEqual<T>(
|
25
|
+
actual: T,
|
26
|
+
expected: T,
|
27
|
+
msg?: string,
|
28
|
+
) {
|
29
|
+
if (actual >= expected) return;
|
30
|
+
|
31
|
+
const actualString = format(actual);
|
32
|
+
const expectedString = format(expected);
|
33
|
+
throw new AssertionError(
|
34
|
+
msg ?? `Expect ${actualString} >= ${expectedString}`,
|
35
|
+
);
|
36
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { AssertionError } from "./assertion_error.js";
|
4
|
+
|
5
|
+
/** Any constructor */
|
6
|
+
// deno-lint-ignore no-explicit-any
|
7
|
+
export type AnyConstructor = new (...args: any[]) => any;
|
8
|
+
/** Gets constructor type */
|
9
|
+
export type GetConstructorType<T extends AnyConstructor> = InstanceType<T>;
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Make an assertion that `obj` is an instance of `type`.
|
13
|
+
* If not then throw.
|
14
|
+
*
|
15
|
+
* @example Usage
|
16
|
+
* ```ts ignore
|
17
|
+
* import { assertInstanceOf } from "@std/assert";
|
18
|
+
*
|
19
|
+
* assertInstanceOf(new Date(), Date); // Doesn't throw
|
20
|
+
* assertInstanceOf(new Date(), Number); // Throws
|
21
|
+
* ```
|
22
|
+
*
|
23
|
+
* @typeParam T The expected type of the object.
|
24
|
+
* @param actual The object to check.
|
25
|
+
* @param expectedType The expected class constructor.
|
26
|
+
* @param msg The optional message to display if the assertion fails.
|
27
|
+
*/
|
28
|
+
export function assertInstanceOf<
|
29
|
+
// deno-lint-ignore no-explicit-any
|
30
|
+
T extends abstract new (...args: any[]) => any,
|
31
|
+
>(
|
32
|
+
actual: unknown,
|
33
|
+
expectedType: T,
|
34
|
+
msg = "",
|
35
|
+
): asserts actual is InstanceType<T> {
|
36
|
+
if (actual instanceof expectedType) return;
|
37
|
+
|
38
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
39
|
+
const expectedTypeStr = expectedType.name;
|
40
|
+
|
41
|
+
let actualTypeStr = "";
|
42
|
+
if (actual === null) {
|
43
|
+
actualTypeStr = "null";
|
44
|
+
} else if (actual === undefined) {
|
45
|
+
actualTypeStr = "undefined";
|
46
|
+
} else if (typeof actual === "object") {
|
47
|
+
actualTypeStr = actual.constructor?.name ?? "Object";
|
48
|
+
} else {
|
49
|
+
actualTypeStr = typeof actual;
|
50
|
+
}
|
51
|
+
|
52
|
+
if (expectedTypeStr === actualTypeStr) {
|
53
|
+
msg =
|
54
|
+
`Expected object to be an instance of "${expectedTypeStr}"${msgSuffix}`;
|
55
|
+
} else if (actualTypeStr === "function") {
|
56
|
+
msg =
|
57
|
+
`Expected object to be an instance of "${expectedTypeStr}" but was not an instanced object${msgSuffix}`;
|
58
|
+
} else {
|
59
|
+
msg =
|
60
|
+
`Expected object to be an instance of "${expectedTypeStr}" but was "${actualTypeStr}"${msgSuffix}`;
|
61
|
+
}
|
62
|
+
|
63
|
+
throw new AssertionError(msg);
|
64
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { AssertionError } from "./assertion_error.js";
|
4
|
+
import { stripAnsiCode } from "../../internal/1.0.5/styles.js";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Make an assertion that `error` is an `Error`.
|
8
|
+
* If not then an error will be thrown.
|
9
|
+
* An error class and a string that should be included in the
|
10
|
+
* error message can also be asserted.
|
11
|
+
*
|
12
|
+
* @example Usage
|
13
|
+
* ```ts ignore
|
14
|
+
* import { assertIsError } from "@std/assert";
|
15
|
+
*
|
16
|
+
* assertIsError(null); // Throws
|
17
|
+
* assertIsError(new RangeError("Out of range")); // Doesn't throw
|
18
|
+
* assertIsError(new RangeError("Out of range"), SyntaxError); // Throws
|
19
|
+
* assertIsError(new RangeError("Out of range"), SyntaxError, "Out of range"); // Doesn't throw
|
20
|
+
* assertIsError(new RangeError("Out of range"), SyntaxError, "Within range"); // Throws
|
21
|
+
* ```
|
22
|
+
*
|
23
|
+
* @typeParam E The type of the error to assert.
|
24
|
+
* @param error The error to assert.
|
25
|
+
* @param ErrorClass The optional error class to assert.
|
26
|
+
* @param msgMatches The optional string or RegExp to assert in the error message.
|
27
|
+
* @param msg The optional message to display if the assertion fails.
|
28
|
+
*/
|
29
|
+
export function assertIsError<E extends Error = Error>(
|
30
|
+
error: unknown,
|
31
|
+
// deno-lint-ignore no-explicit-any
|
32
|
+
ErrorClass?: abstract new (...args: any[]) => E,
|
33
|
+
msgMatches?: string | RegExp,
|
34
|
+
msg?: string,
|
35
|
+
): asserts error is E {
|
36
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
37
|
+
if (!(error instanceof Error)) {
|
38
|
+
throw new AssertionError(
|
39
|
+
`Expected "error" to be an Error object${msgSuffix}`,
|
40
|
+
);
|
41
|
+
}
|
42
|
+
if (ErrorClass && !(error instanceof ErrorClass)) {
|
43
|
+
msg =
|
44
|
+
`Expected error to be instance of "${ErrorClass.name}", but was "${error?.constructor?.name}"${msgSuffix}`;
|
45
|
+
throw new AssertionError(msg);
|
46
|
+
}
|
47
|
+
let msgCheck;
|
48
|
+
if (typeof msgMatches === "string") {
|
49
|
+
msgCheck = stripAnsiCode(error.message).includes(
|
50
|
+
stripAnsiCode(msgMatches),
|
51
|
+
);
|
52
|
+
}
|
53
|
+
if (msgMatches instanceof RegExp) {
|
54
|
+
msgCheck = msgMatches.test(stripAnsiCode(error.message));
|
55
|
+
}
|
56
|
+
|
57
|
+
if (msgMatches && !msgCheck) {
|
58
|
+
msg = `Expected error message to include ${
|
59
|
+
msgMatches instanceof RegExp
|
60
|
+
? msgMatches.toString()
|
61
|
+
: JSON.stringify(msgMatches)
|
62
|
+
}, but got ${JSON.stringify(error?.message)}${msgSuffix}`;
|
63
|
+
throw new AssertionError(msg);
|
64
|
+
}
|
65
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { format } from "../../internal/1.0.5/format.js";
|
4
|
+
import { AssertionError } from "./assertion_error.js";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Make an assertion that `actual` is less than `expected`.
|
8
|
+
* If not then throw.
|
9
|
+
*
|
10
|
+
* @example Usage
|
11
|
+
* ```ts ignore
|
12
|
+
* import { assertLess } from "@std/assert";
|
13
|
+
*
|
14
|
+
* assertLess(1, 2); // Doesn't throw
|
15
|
+
* assertLess(2, 1); // Throws
|
16
|
+
* ```
|
17
|
+
*
|
18
|
+
* @typeParam T The type of the values to compare.
|
19
|
+
* @param actual The actual value to compare.
|
20
|
+
* @param expected The expected value to compare.
|
21
|
+
* @param msg The optional message to display if the assertion fails.
|
22
|
+
*/
|
23
|
+
export function assertLess<T>(actual: T, expected: T, msg?: string) {
|
24
|
+
if (actual < expected) return;
|
25
|
+
|
26
|
+
const actualString = format(actual);
|
27
|
+
const expectedString = format(expected);
|
28
|
+
throw new AssertionError(msg ?? `Expect ${actualString} < ${expectedString}`);
|
29
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { format } from "../../internal/1.0.5/format.js";
|
4
|
+
import { AssertionError } from "./assertion_error.js";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Make an assertion that `actual` is less than or equal to `expected`.
|
8
|
+
* If not then throw.
|
9
|
+
*
|
10
|
+
* @example Usage
|
11
|
+
* ```ts ignore
|
12
|
+
* import { assertLessOrEqual } from "@std/assert";
|
13
|
+
*
|
14
|
+
* assertLessOrEqual(1, 2); // Doesn't throw
|
15
|
+
* assertLessOrEqual(1, 1); // Doesn't throw
|
16
|
+
* assertLessOrEqual(1, 0); // Throws
|
17
|
+
* ```
|
18
|
+
*
|
19
|
+
* @typeParam T The type of the values to compare.
|
20
|
+
* @param actual The actual value to compare.
|
21
|
+
* @param expected The expected value to compare.
|
22
|
+
* @param msg The optional message to display if the assertion fails.
|
23
|
+
*/
|
24
|
+
export function assertLessOrEqual<T>(
|
25
|
+
actual: T,
|
26
|
+
expected: T,
|
27
|
+
msg?: string,
|
28
|
+
) {
|
29
|
+
if (actual <= expected) return;
|
30
|
+
|
31
|
+
const actualString = format(actual);
|
32
|
+
const expectedString = format(expected);
|
33
|
+
throw new AssertionError(
|
34
|
+
msg ?? `Expect ${actualString} <= ${expectedString}`,
|
35
|
+
);
|
36
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { AssertionError } from "./assertion_error.js";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Make an assertion that `actual` match RegExp `expected`. If not
|
7
|
+
* then throw.
|
8
|
+
*
|
9
|
+
* @example Usage
|
10
|
+
* ```ts ignore
|
11
|
+
* import { assertMatch } from "@std/assert";
|
12
|
+
*
|
13
|
+
* assertMatch("Raptor", /Raptor/); // Doesn't throw
|
14
|
+
* assertMatch("Denosaurus", /Raptor/); // Throws
|
15
|
+
* ```
|
16
|
+
*
|
17
|
+
* @param actual The actual value to be matched.
|
18
|
+
* @param expected The expected pattern to match.
|
19
|
+
* @param msg The optional message to display if the assertion fails.
|
20
|
+
*/
|
21
|
+
export function assertMatch(
|
22
|
+
actual: string,
|
23
|
+
expected: RegExp,
|
24
|
+
msg?: string,
|
25
|
+
) {
|
26
|
+
if (expected.test(actual)) return;
|
27
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
28
|
+
msg = `Expected actual: "${actual}" to match: "${expected}"${msgSuffix}`;
|
29
|
+
throw new AssertionError(msg);
|
30
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/** A library of assertion functions.
|
5
|
+
* If the assertion is false an `AssertionError` will be thrown which will
|
6
|
+
* result in pretty-printed diff of failing assertion.
|
7
|
+
*
|
8
|
+
* This module is browser compatible, but do not rely on good formatting of
|
9
|
+
* values for AssertionError messages in browsers.
|
10
|
+
*
|
11
|
+
* ```ts ignore
|
12
|
+
* import { assert } from "@std/assert";
|
13
|
+
*
|
14
|
+
* assert("I am truthy"); // Doesn't throw
|
15
|
+
* assert(false); // Throws `AssertionError`
|
16
|
+
* ```
|
17
|
+
*
|
18
|
+
* @module
|
19
|
+
*/
|
20
|
+
|
21
|
+
export * from "./almost_equals.js";
|
22
|
+
export * from "./array_includes.js";
|
23
|
+
export * from "./equals.js";
|
24
|
+
export * from "./exists.js";
|
25
|
+
export * from "./false.js";
|
26
|
+
export * from "./greater_or_equal.js";
|
27
|
+
export * from "./greater.js";
|
28
|
+
export * from "./instance_of.js";
|
29
|
+
export * from "./is_error.js";
|
30
|
+
export * from "./less_or_equal.js";
|
31
|
+
export * from "./less.js";
|
32
|
+
export * from "./match.js";
|
33
|
+
export * from "./not_equals.js";
|
34
|
+
export * from "./not_instance_of.js";
|
35
|
+
export * from "./not_match.js";
|
36
|
+
export * from "./not_strict_equals.js";
|
37
|
+
export * from "./object_match.js";
|
38
|
+
export * from "./rejects.js";
|
39
|
+
export * from "./strict_equals.js";
|
40
|
+
export * from "./string_includes.js";
|
41
|
+
export * from "./throws.js";
|
42
|
+
export * from "./assert.js";
|
43
|
+
export * from "./assertion_error.js";
|
44
|
+
export * from "./equal.js";
|
45
|
+
export * from "./fail.js";
|
46
|
+
export * from "./unimplemented.js";
|
47
|
+
export * from "./unreachable.js";
|
@@ -0,0 +1,36 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
import { equal } from "./equal.js";
|
5
|
+
import { AssertionError } from "./assertion_error.js";
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Make an assertion that `actual` and `expected` are not equal, deeply.
|
9
|
+
* If not then throw.
|
10
|
+
*
|
11
|
+
* Type parameter can be specified to ensure values under comparison have the same type.
|
12
|
+
*
|
13
|
+
* @example Usage
|
14
|
+
* ```ts ignore
|
15
|
+
* import { assertNotEquals } from "@std/assert";
|
16
|
+
*
|
17
|
+
* assertNotEquals(1, 2); // Doesn't throw
|
18
|
+
* assertNotEquals(1, 1); // Throws
|
19
|
+
* ```
|
20
|
+
*
|
21
|
+
* @typeParam T The type of the values to compare.
|
22
|
+
* @param actual The actual value to compare.
|
23
|
+
* @param expected The expected value to compare.
|
24
|
+
* @param msg The optional message to display if the assertion fails.
|
25
|
+
*/
|
26
|
+
export function assertNotEquals<T>(actual: T, expected: T, msg?: string) {
|
27
|
+
if (!equal(actual, expected)) {
|
28
|
+
return;
|
29
|
+
}
|
30
|
+
const actualString = String(actual);
|
31
|
+
const expectedString = String(expected);
|
32
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
33
|
+
throw new AssertionError(
|
34
|
+
`Expected actual: ${actualString} not to be: ${expectedString}${msgSuffix}`,
|
35
|
+
);
|
36
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { assertFalse } from "./false.js";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Make an assertion that `obj` is not an instance of `type`.
|
7
|
+
* If so, then throw.
|
8
|
+
*
|
9
|
+
* @example Usage
|
10
|
+
* ```ts ignore
|
11
|
+
* import { assertNotInstanceOf } from "@std/assert";
|
12
|
+
*
|
13
|
+
* assertNotInstanceOf(new Date(), Number); // Doesn't throw
|
14
|
+
* assertNotInstanceOf(new Date(), Date); // Throws
|
15
|
+
* ```
|
16
|
+
*
|
17
|
+
* @typeParam A The type of the object to check.
|
18
|
+
* @typeParam T The type of the class to check against.
|
19
|
+
* @param actual The object to check.
|
20
|
+
* @param unexpectedType The class constructor to check against.
|
21
|
+
* @param msg The optional message to display if the assertion fails.
|
22
|
+
*/
|
23
|
+
export function assertNotInstanceOf<A, T>(
|
24
|
+
actual: A,
|
25
|
+
// deno-lint-ignore no-explicit-any
|
26
|
+
unexpectedType: abstract new (...args: any[]) => T,
|
27
|
+
msg?: string,
|
28
|
+
): asserts actual is Exclude<A, T> {
|
29
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
30
|
+
msg =
|
31
|
+
`Expected object to not be an instance of "${typeof unexpectedType}"${msgSuffix}`;
|
32
|
+
assertFalse(actual instanceof unexpectedType, msg);
|
33
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { AssertionError } from "./assertion_error.js";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Make an assertion that `actual` not match RegExp `expected`. If match
|
7
|
+
* then throw.
|
8
|
+
*
|
9
|
+
* @example Usage
|
10
|
+
* ```ts ignore
|
11
|
+
* import { assertNotMatch } from "@std/assert";
|
12
|
+
*
|
13
|
+
* assertNotMatch("Denosaurus", /Raptor/); // Doesn't throw
|
14
|
+
* assertNotMatch("Raptor", /Raptor/); // Throws
|
15
|
+
* ```
|
16
|
+
*
|
17
|
+
* @param actual The actual value to match.
|
18
|
+
* @param expected The expected value to not match.
|
19
|
+
* @param msg The optional message to display if the assertion fails.
|
20
|
+
*/
|
21
|
+
export function assertNotMatch(
|
22
|
+
actual: string,
|
23
|
+
expected: RegExp,
|
24
|
+
msg?: string,
|
25
|
+
) {
|
26
|
+
if (!expected.test(actual)) return;
|
27
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
28
|
+
msg = `Expected actual: "${actual}" to not match: "${expected}"${msgSuffix}`;
|
29
|
+
throw new AssertionError(msg);
|
30
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { AssertionError } from "./assertion_error.js";
|
4
|
+
import { format } from "../../internal/1.0.5/format.js";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Make an assertion that `actual` and `expected` are not strictly equal, using
|
8
|
+
* {@linkcode Object.is} for equality comparison. If the values are strictly
|
9
|
+
* equal then throw.
|
10
|
+
*
|
11
|
+
* @example Usage
|
12
|
+
* ```ts ignore
|
13
|
+
* import { assertNotStrictEquals } from "@std/assert";
|
14
|
+
*
|
15
|
+
* assertNotStrictEquals(1, 1); // Throws
|
16
|
+
* assertNotStrictEquals(1, 2); // Doesn't throw
|
17
|
+
*
|
18
|
+
* assertNotStrictEquals(0, 0); // Throws
|
19
|
+
* assertNotStrictEquals(0, -0); // Doesn't throw
|
20
|
+
* ```
|
21
|
+
*
|
22
|
+
* @typeParam T The type of the values to compare.
|
23
|
+
* @param actual The actual value to compare.
|
24
|
+
* @param expected The expected value to compare.
|
25
|
+
* @param msg The optional message to display if the assertion fails.
|
26
|
+
*/
|
27
|
+
export function assertNotStrictEquals<T>(
|
28
|
+
actual: T,
|
29
|
+
expected: T,
|
30
|
+
msg?: string,
|
31
|
+
) {
|
32
|
+
if (!Object.is(actual, expected)) {
|
33
|
+
return;
|
34
|
+
}
|
35
|
+
|
36
|
+
const msgSuffix = msg ? `: ${msg}` : ".";
|
37
|
+
throw new AssertionError(
|
38
|
+
`Expected "actual" to not be strictly equal to: ${
|
39
|
+
format(actual)
|
40
|
+
}${msgSuffix}\n`,
|
41
|
+
);
|
42
|
+
}
|
@@ -0,0 +1,202 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
import { assertEquals } from "./equals.js";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Make an assertion that `expected` object is a subset of `actual` object,
|
7
|
+
* deeply. If not, then throw.
|
8
|
+
*
|
9
|
+
* @example Usage
|
10
|
+
* ```ts ignore
|
11
|
+
* import { assertObjectMatch } from "@std/assert";
|
12
|
+
*
|
13
|
+
* assertObjectMatch({ foo: "bar" }, { foo: "bar" }); // Doesn't throw
|
14
|
+
* assertObjectMatch({ foo: "bar" }, { foo: "baz" }); // Throws
|
15
|
+
* assertObjectMatch({ foo: 1, bar: 2 }, { foo: 1 }); // Doesn't throw
|
16
|
+
* assertObjectMatch({ foo: 1 }, { foo: 1, bar: 2 }); // Throws
|
17
|
+
* ```
|
18
|
+
*
|
19
|
+
* @example Usage with nested objects
|
20
|
+
* ```ts ignore
|
21
|
+
* import { assertObjectMatch } from "@std/assert";
|
22
|
+
*
|
23
|
+
* assertObjectMatch({ foo: { bar: 3, baz: 4 } }, { foo: { bar: 3 } }); // Doesn't throw
|
24
|
+
* assertObjectMatch({ foo: { bar: 3 } }, { foo: { bar: 3, baz: 4 } }); // Throws
|
25
|
+
* ```
|
26
|
+
*
|
27
|
+
* @param actual The actual value to be matched.
|
28
|
+
* @param expected The expected value to match.
|
29
|
+
* @param msg The optional message to display if the assertion fails.
|
30
|
+
*/
|
31
|
+
export function assertObjectMatch(
|
32
|
+
// deno-lint-ignore no-explicit-any
|
33
|
+
actual: Record<PropertyKey, any>,
|
34
|
+
expected: Record<PropertyKey, unknown>,
|
35
|
+
msg?: string,
|
36
|
+
): void {
|
37
|
+
return assertEquals(
|
38
|
+
// get the intersection of "actual" and "expected"
|
39
|
+
// side effect: all the instances' constructor field is "Object" now.
|
40
|
+
filter(actual, expected),
|
41
|
+
// set (nested) instances' constructor field to be "Object" without changing expected value.
|
42
|
+
// see https://github.com/denoland/deno_std/pull/1419
|
43
|
+
filter(expected, expected),
|
44
|
+
msg,
|
45
|
+
);
|
46
|
+
}
|
47
|
+
|
48
|
+
type loose = Record<PropertyKey, unknown>;
|
49
|
+
|
50
|
+
function isObject(val: unknown): boolean {
|
51
|
+
return typeof val === "object" && val !== null;
|
52
|
+
}
|
53
|
+
|
54
|
+
function filter(a: loose, b: loose): loose {
|
55
|
+
const seen = new WeakMap();
|
56
|
+
return filterObject(a, b);
|
57
|
+
|
58
|
+
function filterObject(a: loose, b: loose): loose {
|
59
|
+
// Prevent infinite loop with circular references with same filter
|
60
|
+
if ((seen.has(a)) && (seen.get(a) === b)) {
|
61
|
+
return a;
|
62
|
+
}
|
63
|
+
|
64
|
+
try {
|
65
|
+
seen.set(a, b);
|
66
|
+
} catch (err) {
|
67
|
+
if (err instanceof TypeError) {
|
68
|
+
throw new TypeError(
|
69
|
+
`Cannot assertObjectMatch ${a === null ? null : `type ${typeof a}`}`,
|
70
|
+
);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
// Filter keys and symbols which are present in both actual and expected
|
75
|
+
const filtered = {} as loose;
|
76
|
+
const keysA = Reflect.ownKeys(a);
|
77
|
+
const keysB = Reflect.ownKeys(b);
|
78
|
+
const entries = keysA.filter((key) => keysB.includes(key))
|
79
|
+
.map((key) => [key, a[key as string]]) as Array<[string, unknown]>;
|
80
|
+
|
81
|
+
if (keysA.length && keysB.length && !entries.length) {
|
82
|
+
// If both objects are not empty but don't have the same keys or symbols,
|
83
|
+
// returns the entries in object a.
|
84
|
+
for (const key of keysA) {
|
85
|
+
filtered[key] = a[key];
|
86
|
+
}
|
87
|
+
|
88
|
+
return filtered;
|
89
|
+
}
|
90
|
+
|
91
|
+
for (const [key, value] of entries) {
|
92
|
+
// On regexp references, keep value as it to avoid loosing pattern and flags
|
93
|
+
if (value instanceof RegExp) {
|
94
|
+
filtered[key] = value;
|
95
|
+
continue;
|
96
|
+
}
|
97
|
+
|
98
|
+
const subset = (b as loose)[key];
|
99
|
+
|
100
|
+
// On array references, build a filtered array and filter nested objects inside
|
101
|
+
if (Array.isArray(value) && Array.isArray(subset)) {
|
102
|
+
filtered[key] = filterArray(value, subset);
|
103
|
+
continue;
|
104
|
+
}
|
105
|
+
|
106
|
+
// On nested objects references, build a filtered object recursively
|
107
|
+
if (isObject(value) && isObject(subset)) {
|
108
|
+
// When both operands are maps, build a filtered map with common keys and filter nested objects inside
|
109
|
+
if ((value instanceof Map) && (subset instanceof Map)) {
|
110
|
+
filtered[key] = new Map(
|
111
|
+
[...value].filter(([k]) => subset.has(k)).map(
|
112
|
+
([k, v]) => {
|
113
|
+
const v2 = subset.get(k);
|
114
|
+
if (isObject(v) && isObject(v2)) {
|
115
|
+
return [k, filterObject(v as loose, v2 as loose)];
|
116
|
+
}
|
117
|
+
|
118
|
+
return [k, v];
|
119
|
+
},
|
120
|
+
),
|
121
|
+
);
|
122
|
+
continue;
|
123
|
+
}
|
124
|
+
|
125
|
+
// When both operands are set, build a filtered set with common values
|
126
|
+
if ((value instanceof Set) && (subset instanceof Set)) {
|
127
|
+
filtered[key] = value.intersection(subset);
|
128
|
+
continue;
|
129
|
+
}
|
130
|
+
|
131
|
+
filtered[key] = filterObject(value as loose, subset as loose);
|
132
|
+
continue;
|
133
|
+
}
|
134
|
+
|
135
|
+
filtered[key] = value;
|
136
|
+
}
|
137
|
+
|
138
|
+
return filtered;
|
139
|
+
}
|
140
|
+
|
141
|
+
function filterArray(a: unknown[], b: unknown[]): unknown[] {
|
142
|
+
// Prevent infinite loop with circular references with same filter
|
143
|
+
if (seen.has(a) && (seen.get(a) === b)) {
|
144
|
+
return a;
|
145
|
+
}
|
146
|
+
|
147
|
+
seen.set(a, b);
|
148
|
+
|
149
|
+
const filtered: unknown[] = [];
|
150
|
+
const count = Math.min(a.length, b.length);
|
151
|
+
|
152
|
+
for (let i = 0; i < count; ++i) {
|
153
|
+
const value = a[i];
|
154
|
+
const subset = b[i];
|
155
|
+
|
156
|
+
// On regexp references, keep value as it to avoid loosing pattern and flags
|
157
|
+
if (value instanceof RegExp) {
|
158
|
+
filtered.push(value);
|
159
|
+
continue;
|
160
|
+
}
|
161
|
+
|
162
|
+
// On array references, build a filtered array and filter nested objects inside
|
163
|
+
if (Array.isArray(value) && Array.isArray(subset)) {
|
164
|
+
filtered.push(filterArray(value, subset));
|
165
|
+
continue;
|
166
|
+
}
|
167
|
+
|
168
|
+
// On nested objects references, build a filtered object recursively
|
169
|
+
if (isObject(value) && isObject(subset)) {
|
170
|
+
// When both operands are maps, build a filtered map with common keys and filter nested objects inside
|
171
|
+
if ((value instanceof Map) && (subset instanceof Map)) {
|
172
|
+
const map = new Map(
|
173
|
+
[...value].filter(([k]) => subset.has(k))
|
174
|
+
.map(([k, v]) => {
|
175
|
+
const v2 = subset.get(k);
|
176
|
+
if (isObject(v) && isObject(v2)) {
|
177
|
+
return [k, filterObject(v as loose, v2 as loose)];
|
178
|
+
}
|
179
|
+
|
180
|
+
return [k, v];
|
181
|
+
}),
|
182
|
+
);
|
183
|
+
filtered.push(map);
|
184
|
+
continue;
|
185
|
+
}
|
186
|
+
|
187
|
+
// When both operands are set, build a filtered set with common values
|
188
|
+
if ((value instanceof Set) && (subset instanceof Set)) {
|
189
|
+
filtered.push(value.intersection(subset));
|
190
|
+
continue;
|
191
|
+
}
|
192
|
+
|
193
|
+
filtered.push(filterObject(value as loose, subset as loose));
|
194
|
+
continue;
|
195
|
+
}
|
196
|
+
|
197
|
+
filtered.push(value);
|
198
|
+
}
|
199
|
+
|
200
|
+
return filtered;
|
201
|
+
}
|
202
|
+
}
|