Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
at v3.1.0 3.6 kB view raw
1type t('a) = array('a); 2 3[@bs.new] external makeEmpty: unit => t('a) = "Array"; 4[@bs.new] external makeUninitialized: int => t('a) = "Array"; 5 6[@bs.get] external size: t('a) => int = "length"; 7[@bs.get_index] external get: (t('a), int) => option('a) = ""; 8[@bs.get_index] external getUnsafe: (t('a), int) => 'a = ""; 9[@bs.set_index] external setUnsafe: (t('a), int, 'a) => unit = ""; 10 11[@bs.send] external fill: (t('a), 'a) => unit = "fill"; 12[@bs.send] external reverseInPlace: t('a) => unit = "reverse"; 13 14[@bs.send] external copy: t('a) => t('a) = "slice"; 15[@bs.send] 16external slice: (t('a), ~start: int, ~end_: int) => t('a) = "slice"; 17[@bs.send] external append: (t('a), 'a) => t('a) = "concat"; 18[@bs.send] external concat: (t('a), t('a)) => t('a) = "concat"; 19 20[@bs.send] external map: (t('a), 'a => 'b) => t('b) = "map"; 21[@bs.send] external mapi: (t('a), ('a, int) => 'b) => t('b) = "map"; 22[@bs.send] external some: (t('a), 'a => bool) => bool = "some"; 23[@bs.send] external somei: (t('a), ('a, int) => bool) => bool = "some"; 24[@bs.send] external every: (t('a), 'a => bool) => bool = "every"; 25[@bs.send] external everyi: (t('a), ('a, int) => bool) => bool = "every"; 26[@bs.send] external filter: (t('a), 'a => bool) => t('a) = "filter"; 27[@bs.send] external filteri: (t('a), ('a, int) => bool) => t('a) = "filter"; 28[@bs.send] external find: (t('a), 'a => bool) => option('a) = "find"; 29[@bs.send] external findi: (t('a), ('a, int) => bool) => option('a) = "find"; 30[@bs.send] external findIndex: (t('a), 'a => bool) => int = "findIndex"; 31[@bs.send] external forEach: (t('a), 'a => unit) => unit = "forEach"; 32[@bs.send] external forEachi: (t('a), ('a, int) => unit) => unit = "forEach"; 33[@bs.send] external reduce: (t('a), ('b, 'a) => 'b, 'b) => 'b = "reduce"; 34[@bs.send] 35external reduceRight: (t('a), ('b, 'a) => 'b, 'b) => 'b = "reduceRight"; 36 37[@bs.send] external indexOf: (t('a), 'a) => int = "indexOf"; 38[@bs.send] external lastIndexOf: (t('a), 'a) => int = "lastIndexOf"; 39 40/* No need to replicate what Belt already has */ 41let shuffle = Belt.Array.shuffle; 42let shuffleInPlace = Belt.Array.shuffleInPlace; 43 44let make = (len: int, vals: 'a): t('a) => { 45 let res = makeUninitialized(len); 46 fill(res, vals); 47 res; 48}; 49 50let set = (arr: t('a), index: int, x: 'a) => 51 if (index < size(arr) && index >= 0) { 52 setUnsafe(arr, index, x); 53 true; 54 } else { 55 false; 56 }; 57 58let reverse = (arr: t('a)): t('a) => { 59 let res = copy(arr); 60 reverseInPlace(arr); 61 res; 62}; 63 64let includes = (arr: t('a), x: 'a): bool => indexOf(arr, x) > (-1); 65 66[@bs.send] external removeInPlace: (t('a), int) => t('a) = "splice"; 67[@bs.send] 68external removeCountInPlace: (t('a), ~pos: int, ~count: int) => t('a) = 69 "splice"; 70 71let remove = (arr: t('a), pos: int) => removeInPlace(copy(arr), pos); 72 73let removeCount = (arr: t('a), ~pos: int, ~count: int) => 74 removeCountInPlace(copy(arr), ~pos, ~count); 75 76module Js = { 77 [@bs.send] external push: (t('a), 'a) => unit = "push"; 78 [@bs.send] external pop: t('a) => option('a) = "pop"; 79 [@bs.send] external unshift: (t('a), 'a) => unit = "unshift"; 80 [@bs.send] external shift: t('a) => option('a) = "shift"; 81 82 [@bs.scope ("Array", "prototype", "push")] [@bs.val] 83 external pushMany: (t('a), t('a)) => unit = "apply"; 84 [@bs.scope ("Array", "prototype", "unshift")] [@bs.val] 85 external unshiftMany: (t('a), t('a)) => unit = "apply"; 86 87 [@bs.send] 88 external spliceInPlace: 89 (t('a), ~pos: int, ~remove: int, ~add: t('a)) => t('a) = 90 "splice"; 91 92 let splice = (arr: t('a), ~pos: int, ~remove: int, ~add: t('a)) => 93 spliceInPlace(copy(arr), ~pos, ~remove, ~add); 94};