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,39 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns a new array that drops all elements in the given collection until the
|
6
|
+
* first element that does not match the given predicate.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the elements in the input array.
|
9
|
+
*
|
10
|
+
* @param array The array to drop elements from.
|
11
|
+
* @param predicate The function to test each element for a condition.
|
12
|
+
*
|
13
|
+
* @returns A new array that drops all elements until the first element that
|
14
|
+
* does not match the given predicate.
|
15
|
+
*
|
16
|
+
* @example Basic usage
|
17
|
+
* ```ts
|
18
|
+
* import { dropWhile } from "@std/collections/drop-while";
|
19
|
+
* import { assertEquals } from "@std/assert";
|
20
|
+
*
|
21
|
+
* const numbers = [3, 2, 5, 2, 5];
|
22
|
+
* const dropWhileNumbers = dropWhile(numbers, (number) => number !== 2);
|
23
|
+
*
|
24
|
+
* assertEquals(dropWhileNumbers, [2, 5, 2, 5]);
|
25
|
+
* ```
|
26
|
+
*/
|
27
|
+
export function dropWhile<T>(
|
28
|
+
array: readonly T[],
|
29
|
+
predicate: (el: T) => boolean,
|
30
|
+
): T[] {
|
31
|
+
let offset = 0;
|
32
|
+
const length = array.length;
|
33
|
+
|
34
|
+
while (length > offset && predicate(array[offset] as T)) {
|
35
|
+
offset++;
|
36
|
+
}
|
37
|
+
|
38
|
+
return array.slice(offset, length);
|
39
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns a new record with all entries of the given record except the ones
|
6
|
+
* that do not match the given predicate.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the values in the input record.
|
9
|
+
*
|
10
|
+
* @param record The record to filter entries from.
|
11
|
+
* @param predicate The function to test each entry for a condition.
|
12
|
+
*
|
13
|
+
* @returns A new record with all entries that match the given predicate.
|
14
|
+
*
|
15
|
+
* @example Basic usage
|
16
|
+
* ```ts
|
17
|
+
* import { filterEntries } from "@std/collections/filter-entries";
|
18
|
+
* import { assertEquals } from "@std/assert";
|
19
|
+
*
|
20
|
+
* const menu = {
|
21
|
+
* Salad: 11,
|
22
|
+
* Soup: 8,
|
23
|
+
* Pasta: 13,
|
24
|
+
* };
|
25
|
+
*
|
26
|
+
* const myOptions = filterEntries(
|
27
|
+
* menu,
|
28
|
+
* ([item, price]) => item !== "Pasta" && price < 10,
|
29
|
+
* );
|
30
|
+
*
|
31
|
+
* assertEquals(myOptions, { Soup: 8 });
|
32
|
+
* ```
|
33
|
+
*/
|
34
|
+
export function filterEntries<T>(
|
35
|
+
record: Readonly<Record<string, T>>,
|
36
|
+
predicate: (entry: [string, T]) => boolean,
|
37
|
+
): Record<string, T> {
|
38
|
+
const result: Record<string, T> = {};
|
39
|
+
const entries = Object.entries(record);
|
40
|
+
|
41
|
+
for (const [key, value] of entries) {
|
42
|
+
if (predicate([key, value])) {
|
43
|
+
result[key] = value;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
return result;
|
48
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns a new record with all entries of the given record except the ones that
|
6
|
+
* have a key that does not match the given predicate.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the values in the input record.
|
9
|
+
*
|
10
|
+
* @param record The record to filter keys from.
|
11
|
+
* @param predicate The function to test each key for a condition.
|
12
|
+
*
|
13
|
+
* @returns A new record with all entries that have a key that matches the given
|
14
|
+
* predicate.
|
15
|
+
*
|
16
|
+
* @example Basic usage
|
17
|
+
* ```ts
|
18
|
+
* import { filterKeys } from "@std/collections/filter-keys";
|
19
|
+
* import { assertEquals } from "@std/assert";
|
20
|
+
*
|
21
|
+
* const menu = {
|
22
|
+
* Salad: 11,
|
23
|
+
* Soup: 8,
|
24
|
+
* Pasta: 13,
|
25
|
+
* };
|
26
|
+
*
|
27
|
+
* const menuWithoutSalad = filterKeys(menu, (item) => item !== "Salad");
|
28
|
+
*
|
29
|
+
* assertEquals(
|
30
|
+
* menuWithoutSalad,
|
31
|
+
* {
|
32
|
+
* Soup: 8,
|
33
|
+
* Pasta: 13,
|
34
|
+
* },
|
35
|
+
* );
|
36
|
+
* ```
|
37
|
+
*/
|
38
|
+
export function filterKeys<T>(
|
39
|
+
record: Readonly<Record<string, T>>,
|
40
|
+
predicate: (key: string) => boolean,
|
41
|
+
): Record<string, T> {
|
42
|
+
const result: Record<string, T> = {};
|
43
|
+
|
44
|
+
for (const [key, value] of Object.entries(record)) {
|
45
|
+
if (predicate(key)) {
|
46
|
+
result[key] = value;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
return result;
|
51
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns a new record with all entries of the given record except the ones
|
6
|
+
* that have a value that does not match the given predicate.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the values in the input record.
|
9
|
+
*
|
10
|
+
* @param record The record to filter values from.
|
11
|
+
* @param predicate The function to test each value for a condition.
|
12
|
+
*
|
13
|
+
* @returns A new record with all entries that have a value that matches the
|
14
|
+
* given predicate.
|
15
|
+
*
|
16
|
+
* @example Basic usage
|
17
|
+
* ```ts
|
18
|
+
* import { filterValues } from "@std/collections/filter-values";
|
19
|
+
* import { assertEquals } from "@std/assert";
|
20
|
+
*
|
21
|
+
* const people = {
|
22
|
+
* Arnold: 37,
|
23
|
+
* Sarah: 7,
|
24
|
+
* Kim: 23,
|
25
|
+
* };
|
26
|
+
* const adults = filterValues(people, (person) => person >= 18);
|
27
|
+
*
|
28
|
+
* assertEquals(
|
29
|
+
* adults,
|
30
|
+
* {
|
31
|
+
* Arnold: 37,
|
32
|
+
* Kim: 23,
|
33
|
+
* },
|
34
|
+
* );
|
35
|
+
* ```
|
36
|
+
*/
|
37
|
+
export function filterValues<T>(
|
38
|
+
record: Readonly<Record<string, T>>,
|
39
|
+
predicate: (value: T) => boolean,
|
40
|
+
): Record<string, T> {
|
41
|
+
const result: Record<string, T> = {};
|
42
|
+
const entries = Object.entries(record);
|
43
|
+
|
44
|
+
for (const [key, value] of entries) {
|
45
|
+
if (predicate(value)) {
|
46
|
+
result[key] = value;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
return result;
|
51
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns an element if and only if that element is the only one matching the
|
6
|
+
* given condition. Returns `undefined` otherwise.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the elements in the input array.
|
9
|
+
*
|
10
|
+
* @param array The array to find a single element in.
|
11
|
+
* @param predicate The function to test each element for a condition.
|
12
|
+
*
|
13
|
+
* @returns The single element that matches the given condition or `undefined`
|
14
|
+
* if there are zero or more than one matching elements.
|
15
|
+
*
|
16
|
+
* @example Basic usage
|
17
|
+
* ```ts
|
18
|
+
* import { findSingle } from "@std/collections/find-single";
|
19
|
+
* import { assertEquals } from "@std/assert";
|
20
|
+
*
|
21
|
+
* const bookings = [
|
22
|
+
* { month: "January", active: false },
|
23
|
+
* { month: "March", active: false },
|
24
|
+
* { month: "June", active: true },
|
25
|
+
* ];
|
26
|
+
* const activeBooking = findSingle(bookings, (booking) => booking.active);
|
27
|
+
* const inactiveBooking = findSingle(bookings, (booking) => !booking.active);
|
28
|
+
*
|
29
|
+
* assertEquals(activeBooking, { month: "June", active: true });
|
30
|
+
* assertEquals(inactiveBooking, undefined); // There are two applicable items
|
31
|
+
* ```
|
32
|
+
*/
|
33
|
+
export function findSingle<T>(
|
34
|
+
array: Iterable<T>,
|
35
|
+
predicate: (el: T) => boolean,
|
36
|
+
): T | undefined {
|
37
|
+
let match: T | undefined;
|
38
|
+
let found = false;
|
39
|
+
for (const element of array) {
|
40
|
+
if (predicate(element)) {
|
41
|
+
if (found) return undefined;
|
42
|
+
found = true;
|
43
|
+
match = element;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
return match;
|
48
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Applies the given selector to elements in the given array until a value is
|
6
|
+
* produced that is neither `null` nor `undefined` and returns that value.
|
7
|
+
* Returns `undefined` if no such value is produced.
|
8
|
+
*
|
9
|
+
* @typeParam T The type of the elements in the input array.
|
10
|
+
* @typeParam O The type of the value produced by the selector function.
|
11
|
+
*
|
12
|
+
* @param array The array to select a value from.
|
13
|
+
* @param selector The function to extract a value from an element.
|
14
|
+
*
|
15
|
+
* @returns The first non-`null` and non-`undefined` value produced by the
|
16
|
+
* selector function, or `undefined` if no such value is produced.
|
17
|
+
*
|
18
|
+
* @example Basic usage
|
19
|
+
* ```ts
|
20
|
+
* import { firstNotNullishOf } from "@std/collections/first-not-nullish-of";
|
21
|
+
* import { assertEquals } from "@std/assert";
|
22
|
+
*
|
23
|
+
* const tables = [
|
24
|
+
* { number: 11, order: null },
|
25
|
+
* { number: 12, order: "Soup" },
|
26
|
+
* { number: 13, order: "Salad" },
|
27
|
+
* ];
|
28
|
+
*
|
29
|
+
* const nextOrder = firstNotNullishOf(tables, (table) => table.order);
|
30
|
+
*
|
31
|
+
* assertEquals(nextOrder, "Soup");
|
32
|
+
* ```
|
33
|
+
*/
|
34
|
+
export function firstNotNullishOf<T, O>(
|
35
|
+
array: Iterable<T>,
|
36
|
+
selector: (item: T) => O | undefined | null,
|
37
|
+
): NonNullable<O> | undefined {
|
38
|
+
for (const current of array) {
|
39
|
+
const selected = selector(current);
|
40
|
+
|
41
|
+
if (selected !== null && selected !== undefined) {
|
42
|
+
return selected as NonNullable<O>;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
return undefined;
|
47
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns true if the given value is part of the given object, otherwise it
|
6
|
+
* returns false.
|
7
|
+
*
|
8
|
+
* Note: this doesn't work with non-primitive values. For example,
|
9
|
+
* `includesValue({x: {}}, {})` returns false.
|
10
|
+
*
|
11
|
+
* @typeParam T The type of the values in the input record.
|
12
|
+
*
|
13
|
+
* @param record The record to check for the given value.
|
14
|
+
* @param value The value to check for in the record.
|
15
|
+
*
|
16
|
+
* @returns `true` if the value is part of the record, otherwise `false`.
|
17
|
+
*
|
18
|
+
* @example Basic usage
|
19
|
+
* ```ts
|
20
|
+
* import { includesValue } from "@std/collections/includes-value";
|
21
|
+
* import { assertEquals } from "@std/assert";
|
22
|
+
*
|
23
|
+
* const input = {
|
24
|
+
* first: 33,
|
25
|
+
* second: 34,
|
26
|
+
* };
|
27
|
+
*
|
28
|
+
* assertEquals(includesValue(input, 34), true);
|
29
|
+
* ```
|
30
|
+
*/
|
31
|
+
export function includesValue<T>(
|
32
|
+
record: Readonly<Record<string, T>>,
|
33
|
+
value: T,
|
34
|
+
): boolean {
|
35
|
+
for (const i in record) {
|
36
|
+
if (
|
37
|
+
Object.hasOwn(record, i) &&
|
38
|
+
(record[i] === value || Number.isNaN(value) && Number.isNaN(record[i]))
|
39
|
+
) {
|
40
|
+
return true;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
return false;
|
45
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Returns all distinct elements that appear at least once in each of the given
|
6
|
+
* arrays.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the elements in the input arrays.
|
9
|
+
*
|
10
|
+
* @param arrays The arrays to intersect.
|
11
|
+
*
|
12
|
+
* @returns An array of distinct elements that appear at least once in each of
|
13
|
+
* the given arrays.
|
14
|
+
*
|
15
|
+
* @example Basic usage
|
16
|
+
* ```ts
|
17
|
+
* import { intersect } from "@std/collections/intersect";
|
18
|
+
* import { assertEquals } from "@std/assert";
|
19
|
+
*
|
20
|
+
* const lisaInterests = ["Cooking", "Music", "Hiking"];
|
21
|
+
* const kimInterests = ["Music", "Tennis", "Cooking"];
|
22
|
+
* const commonInterests = intersect(lisaInterests, kimInterests);
|
23
|
+
*
|
24
|
+
* assertEquals(commonInterests, ["Cooking", "Music"]);
|
25
|
+
* ```
|
26
|
+
*/
|
27
|
+
export function intersect<T>(...arrays: (readonly T[])[]): T[] {
|
28
|
+
const [array, ...otherArrays] = arrays;
|
29
|
+
let set = new Set(array);
|
30
|
+
for (const array of otherArrays) {
|
31
|
+
set = set.intersection(new Set(array));
|
32
|
+
if (set.size === 0) break;
|
33
|
+
}
|
34
|
+
return [...set];
|
35
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/** Return type for {@linkcode invert}. */
|
5
|
+
export type InvertResult<T extends Record<PropertyKey, PropertyKey>> = {
|
6
|
+
[P in keyof T as T[P]]: P;
|
7
|
+
};
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Composes a new record with all keys and values inverted.
|
11
|
+
*
|
12
|
+
* If the record contains duplicate values, subsequent values overwrite property
|
13
|
+
* assignments of previous values. If the record contains values which aren't
|
14
|
+
* {@linkcode PropertyKey}s their string representation is used as the key.
|
15
|
+
*
|
16
|
+
* @typeParam T The type of the input record.
|
17
|
+
*
|
18
|
+
* @param record The record to invert.
|
19
|
+
*
|
20
|
+
* @returns A new record with all keys and values inverted.
|
21
|
+
*
|
22
|
+
* @example Basic usage
|
23
|
+
* ```ts
|
24
|
+
* import { invert } from "@std/collections/invert";
|
25
|
+
* import { assertEquals } from "@std/assert";
|
26
|
+
*
|
27
|
+
* const record = { a: "x", b: "y", c: "z" };
|
28
|
+
*
|
29
|
+
* assertEquals(invert(record), { x: "a", y: "b", z: "c" });
|
30
|
+
* ```
|
31
|
+
*/
|
32
|
+
export function invert<T extends Record<PropertyKey, PropertyKey>>(
|
33
|
+
record: Readonly<T>,
|
34
|
+
): InvertResult<T> {
|
35
|
+
return Object.fromEntries(
|
36
|
+
Object.entries(record).map(([key, value]) => [value, key]),
|
37
|
+
);
|
38
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/** Return type for {@linkcode invertBy}. */
|
5
|
+
export type InvertByResult<
|
6
|
+
T extends Record<PropertyKey, PropertyKey>,
|
7
|
+
K extends keyof T,
|
8
|
+
> = Record<PropertyKey, K[]>;
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Composes a new record with all keys and values inverted.
|
12
|
+
*
|
13
|
+
* The new record is generated from the result of running each element of the
|
14
|
+
* input record through the given transformer function.
|
15
|
+
*
|
16
|
+
* The corresponding inverted value of each inverted key is an array of keys
|
17
|
+
* responsible for generating the inverted value.
|
18
|
+
*
|
19
|
+
* @typeParam R The type of the input record.
|
20
|
+
* @typeParam T The type of the iterator function.
|
21
|
+
*
|
22
|
+
* @param record The record to invert.
|
23
|
+
* @param transformer The function to transform keys.
|
24
|
+
*
|
25
|
+
* @returns A new record with all keys and values inverted.
|
26
|
+
*
|
27
|
+
* @example Basic usage
|
28
|
+
* ```ts
|
29
|
+
* import { invertBy } from "@std/collections/invert-by";
|
30
|
+
* import { assertEquals } from "@std/assert";
|
31
|
+
*
|
32
|
+
* const record = { a: "x", b: "y", c: "z" };
|
33
|
+
*
|
34
|
+
* assertEquals(
|
35
|
+
* invertBy(record, (key) => String(key).toUpperCase()),
|
36
|
+
* { X: ["a"], Y: ["b"], Z: ["c"] }
|
37
|
+
* );
|
38
|
+
* ```
|
39
|
+
*/
|
40
|
+
export function invertBy<
|
41
|
+
R extends Record<PropertyKey, PropertyKey>,
|
42
|
+
T extends (key: PropertyKey) => PropertyKey,
|
43
|
+
>(record: Readonly<R>, transformer: T): InvertByResult<R, keyof R> {
|
44
|
+
const result = {} as InvertByResult<R, keyof R>;
|
45
|
+
|
46
|
+
for (const [key, value] of Object.entries(record)) {
|
47
|
+
const mappedKey = transformer(value);
|
48
|
+
if (!Object.hasOwn(result, mappedKey)) {
|
49
|
+
result[mappedKey] = [key];
|
50
|
+
} else {
|
51
|
+
result[mappedKey]!.push(key);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
return result;
|
56
|
+
}
|
@@ -0,0 +1,109 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/** Options for {@linkcode joinToString}. */
|
5
|
+
export type JoinToStringOptions = {
|
6
|
+
/**
|
7
|
+
* The string to use as a separator between the elements.
|
8
|
+
*
|
9
|
+
* @default {","}
|
10
|
+
*/
|
11
|
+
separator?: string;
|
12
|
+
/**
|
13
|
+
* The string to use as a prefix for the resulting string.
|
14
|
+
*
|
15
|
+
* @default {""}
|
16
|
+
*/
|
17
|
+
prefix?: string;
|
18
|
+
/**
|
19
|
+
* The string to use as a suffix for the resulting string.
|
20
|
+
*
|
21
|
+
* @default {""}
|
22
|
+
*/
|
23
|
+
suffix?: string;
|
24
|
+
/**
|
25
|
+
* The maximum number of elements to append. If the value is negative, all
|
26
|
+
* elements will be appended, which is the default.
|
27
|
+
*
|
28
|
+
* @default {-1}
|
29
|
+
*/
|
30
|
+
limit?: number;
|
31
|
+
/**
|
32
|
+
* The string to use as a placeholder for the truncated elements.
|
33
|
+
*
|
34
|
+
* @default {"..."}
|
35
|
+
*/
|
36
|
+
truncated?: string;
|
37
|
+
};
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Transforms the elements in the given array to strings using the given
|
41
|
+
* selector. Joins the produced strings into one using the given `separator`
|
42
|
+
* and applying the given `prefix` and `suffix` to the whole string afterwards.
|
43
|
+
*
|
44
|
+
* If the array could be huge, you can specify a non-negative value of `limit`,
|
45
|
+
* in which case only the first `limit` elements will be appended, followed by
|
46
|
+
* the `truncated` string.
|
47
|
+
*
|
48
|
+
* @typeParam T The type of the elements in the input array.
|
49
|
+
*
|
50
|
+
* @param array The array to join elements from.
|
51
|
+
* @param selector The function to transform elements to strings.
|
52
|
+
* @param options The options to configure the joining.
|
53
|
+
*
|
54
|
+
* @returns The resulting string.
|
55
|
+
*
|
56
|
+
* @example Usage with options
|
57
|
+
* ```ts
|
58
|
+
* import { joinToString } from "@std/collections/join-to-string";
|
59
|
+
* import { assertEquals } from "@std/assert";
|
60
|
+
*
|
61
|
+
* const users = [
|
62
|
+
* { name: "Kim" },
|
63
|
+
* { name: "Anna" },
|
64
|
+
* { name: "Tim" },
|
65
|
+
* ];
|
66
|
+
*
|
67
|
+
* const message = joinToString(users, (user) => user.name, {
|
68
|
+
* suffix: " are winners",
|
69
|
+
* prefix: "result: ",
|
70
|
+
* separator: " and ",
|
71
|
+
* limit: 1,
|
72
|
+
* truncated: "others",
|
73
|
+
* });
|
74
|
+
*
|
75
|
+
* assertEquals(message, "result: Kim and others are winners");
|
76
|
+
* ```
|
77
|
+
*/
|
78
|
+
export function joinToString<T>(
|
79
|
+
array: Iterable<T>,
|
80
|
+
selector: (el: T) => string,
|
81
|
+
options: Readonly<JoinToStringOptions> = {},
|
82
|
+
): string {
|
83
|
+
const {
|
84
|
+
separator = ",",
|
85
|
+
prefix = "",
|
86
|
+
suffix = "",
|
87
|
+
limit = -1,
|
88
|
+
truncated = "...",
|
89
|
+
} = options;
|
90
|
+
|
91
|
+
let result = "";
|
92
|
+
|
93
|
+
let index = 0;
|
94
|
+
for (const el of array) {
|
95
|
+
if (index > 0) {
|
96
|
+
result += separator;
|
97
|
+
}
|
98
|
+
|
99
|
+
if (limit >= 0 && index >= limit) {
|
100
|
+
result += truncated;
|
101
|
+
break;
|
102
|
+
}
|
103
|
+
|
104
|
+
result += selector(el);
|
105
|
+
index++;
|
106
|
+
}
|
107
|
+
|
108
|
+
return prefix + result + suffix;
|
109
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Applies the given transformer to all entries in the given record and returns
|
6
|
+
* a new record containing the results.
|
7
|
+
*
|
8
|
+
* @typeParam T The type of the values in the input record.
|
9
|
+
* @typeParam O The type of the values in the output record.
|
10
|
+
*
|
11
|
+
* @param record The record to map entries from.
|
12
|
+
* @param transformer The function to transform each entry.
|
13
|
+
*
|
14
|
+
* @returns A new record with all entries transformed by the given transformer.
|
15
|
+
*
|
16
|
+
* @example Basic usage
|
17
|
+
* ```ts
|
18
|
+
* import { mapEntries } from "@std/collections/map-entries";
|
19
|
+
* import { assertEquals } from "@std/assert";
|
20
|
+
*
|
21
|
+
* const usersById = {
|
22
|
+
* "a2e": { name: "Kim", age: 22 },
|
23
|
+
* "dfe": { name: "Anna", age: 31 },
|
24
|
+
* "34b": { name: "Tim", age: 58 },
|
25
|
+
* };
|
26
|
+
*
|
27
|
+
* const agesByNames = mapEntries(usersById, ([id, { name, age }]) => [name, age]);
|
28
|
+
*
|
29
|
+
* assertEquals(
|
30
|
+
* agesByNames,
|
31
|
+
* {
|
32
|
+
* Kim: 22,
|
33
|
+
* Anna: 31,
|
34
|
+
* Tim: 58,
|
35
|
+
* },
|
36
|
+
* );
|
37
|
+
* ```
|
38
|
+
*/
|
39
|
+
export function mapEntries<T, O>(
|
40
|
+
record: Readonly<Record<string, T>>,
|
41
|
+
transformer: (entry: [string, T]) => [string, O],
|
42
|
+
): Record<string, O> {
|
43
|
+
const result: Record<string, O> = {};
|
44
|
+
const entries = Object.entries(record);
|
45
|
+
|
46
|
+
for (const entry of entries) {
|
47
|
+
const [mappedKey, mappedValue] = transformer(entry);
|
48
|
+
|
49
|
+
result[mappedKey] = mappedValue;
|
50
|
+
}
|
51
|
+
|
52
|
+
return result;
|
53
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2
|
+
// This module is browser compatible.
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Applies the given transformer to all keys in the given record's entries and
|
6
|
+
* returns a new record containing the transformed entries.
|
7
|
+
*
|
8
|
+
* If the transformed entries contain the same key multiple times, only the last
|
9
|
+
* one will appear in the returned record.
|
10
|
+
*
|
11
|
+
* @typeParam T The type of the values in the input record.
|
12
|
+
*
|
13
|
+
* @param record The record to map keys from.
|
14
|
+
* @param transformer The function to transform each key.
|
15
|
+
*
|
16
|
+
* @returns A new record with all keys transformed by the given transformer.
|
17
|
+
*
|
18
|
+
* @example Basic usage
|
19
|
+
* ```ts
|
20
|
+
* import { mapKeys } from "@std/collections/map-keys";
|
21
|
+
* import { assertEquals } from "@std/assert";
|
22
|
+
*
|
23
|
+
* const counts = { a: 5, b: 3, c: 8 };
|
24
|
+
*
|
25
|
+
* assertEquals(
|
26
|
+
* mapKeys(counts, (key) => key.toUpperCase()),
|
27
|
+
* {
|
28
|
+
* A: 5,
|
29
|
+
* B: 3,
|
30
|
+
* C: 8,
|
31
|
+
* },
|
32
|
+
* );
|
33
|
+
* ```
|
34
|
+
*/
|
35
|
+
export function mapKeys<T>(
|
36
|
+
record: Readonly<Record<string, T>>,
|
37
|
+
transformer: (key: string) => string,
|
38
|
+
): Record<string, T> {
|
39
|
+
const result: Record<string, T> = {};
|
40
|
+
|
41
|
+
for (const [key, value] of Object.entries(record)) {
|
42
|
+
const mappedKey = transformer(key);
|
43
|
+
result[mappedKey] = value;
|
44
|
+
}
|
45
|
+
|
46
|
+
return result;
|
47
|
+
}
|