From 6ea0cbb3bf91c48ef93711169d960022ba8834f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AshGrey=F0=9F=A5=95?= Date: Thu, 10 Jul 2025 23:47:07 +0800 Subject: [PATCH 1/5] :sparkles: feat(array-methods): add `Array.Unshift` method --- lib/Array/index.d.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/Array/index.d.ts b/lib/Array/index.d.ts index ca46c08..940d652 100644 --- a/lib/Array/index.d.ts +++ b/lib/Array/index.d.ts @@ -411,6 +411,20 @@ export type Shift< ? ShiftElement : never; +/** + * This method is like `Array.prototype.unshift`, it returns the new array that + * has been unshifted (which means pushing at the first) the new element. + * + * @param Arr The array to be unshifted. + * @param E The new element to be unshifted into the `Arr`. + * @returns The new array. + * + * @example + * type Unshift1 = Array.Unshift<[1, 2, 3], "1">; // ["1", 1, 2, 3] + * type Unshift2 = Array.Unshift<[], 1>; // [1] + */ +export type Unshift = [E, ...Arr]; + } export default Array; \ No newline at end of file From 26d117e550f864e3bf8caa6cf0a42d87b1d13595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AshGrey=F0=9F=A5=95?= Date: Fri, 11 Jul 2025 00:02:43 +0800 Subject: [PATCH 2/5] :test_tube: test(Array.Shift): add passed tests for `Array.Shift` --- test/lib-Array.test.ts | 7 +++++++ test/script/lib-gen.sh | 1 + 2 files changed, 8 insertions(+) diff --git a/test/lib-Array.test.ts b/test/lib-Array.test.ts index ff9f391..2580753 100644 --- a/test/lib-Array.test.ts +++ b/test/lib-Array.test.ts @@ -51,6 +51,13 @@ type CaseLibArray = [ Expect, -1>>, Expect, 0>>, + // Array.Shift + Expect, [2,3]>>, + Expect, []>>, + Expect, never>>, + Expect, 1>>, + Expect, "1">>, + // Array.IsFlatten Expect, true>>, Expect, true>>, diff --git a/test/script/lib-gen.sh b/test/script/lib-gen.sh index ff664ce..0e046dd 100644 --- a/test/script/lib-gen.sh +++ b/test/script/lib-gen.sh @@ -36,6 +36,7 @@ declare -A test_cases=( ["Array.Join"]="[1,2,3]∷\"1,2,3\" [-1,\".\",9]‖\"-\"∷\"-1-.-9\" [1,2,3]‖\"\"∷\"123\"" ["Array.Pop"]="[1,2,3]∷[1,2] [1]‖\"get-rest\"∷[] []‖\"get-rest\"∷never [1,2,3]‖\"get-pop-element\"∷3 [1]‖\"get-pop-element\"∷1 []‖\"get-pop-element\"∷never" ["Array.Push"]="[1,2,3]‖\"1\"∷[1,2,3,\"1\"] []‖1∷[1] []‖[]∷[[]]" + ["Array.Shift"]="[1,2,3]∷[2,3] [\"1\"]∷[] []‖\"get-rest\"∷never [1,2,3]‖\"get-shift-element\"∷1 [\"1\"]‖\"get-shift-element\"∷\"1\"" ["BigInteger.ToString"]="2n∷\"2\" -2n∷\"-2\" 0n∷\"0\"" ["BigInteger.IsNegative"]="-23n∷true 26n∷false 0n∷false" From 0b43256e5098ce681204d631f0239a2ace05c576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AshGrey=F0=9F=A5=95?= Date: Fri, 11 Jul 2025 00:53:24 +0800 Subject: [PATCH 3/5] :test_tube: test(Array.Unshift): add passed tests for `Array.Unshift` --- test/lib-Array.test.ts | 6 ++++++ test/script/lib-gen.sh | 1 + 2 files changed, 7 insertions(+) diff --git a/test/lib-Array.test.ts b/test/lib-Array.test.ts index 2580753..09fc0f2 100644 --- a/test/lib-Array.test.ts +++ b/test/lib-Array.test.ts @@ -17,6 +17,12 @@ type CaseLibArray = [ Expect, []>>, Expect, []>>, + // Array.Unshift + Expect, [4,1,2,3]>>, + Expect, [[]]>>, + Expect, [[],1]>>, + Expect, [1]>>, + // Array.MultipleConcat Expect, [1,2,3,4,2,3,undefined,true]>>, Expect, [1,2]>>, diff --git a/test/script/lib-gen.sh b/test/script/lib-gen.sh index 0e046dd..e8e8952 100644 --- a/test/script/lib-gen.sh +++ b/test/script/lib-gen.sh @@ -37,6 +37,7 @@ declare -A test_cases=( ["Array.Pop"]="[1,2,3]∷[1,2] [1]‖\"get-rest\"∷[] []‖\"get-rest\"∷never [1,2,3]‖\"get-pop-element\"∷3 [1]‖\"get-pop-element\"∷1 []‖\"get-pop-element\"∷never" ["Array.Push"]="[1,2,3]‖\"1\"∷[1,2,3,\"1\"] []‖1∷[1] []‖[]∷[[]]" ["Array.Shift"]="[1,2,3]∷[2,3] [\"1\"]∷[] []‖\"get-rest\"∷never [1,2,3]‖\"get-shift-element\"∷1 [\"1\"]‖\"get-shift-element\"∷\"1\"" + ["Array.Unshift"]="[1,2,3]‖4∷[4,1,2,3] []‖[]∷[[]] [1]‖[]∷[[],1] []‖1∷[1]" ["BigInteger.ToString"]="2n∷\"2\" -2n∷\"-2\" 0n∷\"0\"" ["BigInteger.IsNegative"]="-23n∷true 26n∷false 0n∷false" From 539442ef0e91ba8ccf60f653f04ba150a5426fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AshGrey=F0=9F=A5=95?= Date: Fri, 11 Jul 2025 00:55:21 +0800 Subject: [PATCH 4/5] :memo: doc(changelog): add `Array.Unshift` to next version --- changelog/next.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog/next.md b/changelog/next.md index 1018098..b17d553 100644 --- a/changelog/next.md +++ b/changelog/next.md @@ -48,12 +48,17 @@ + Add a new method of `Array` namespace: + `Array.LastIndexOf` -### 2025-07--09 (feature/array-methods → main) +### 2025-07-09 (feature/array-methods → main) + Add two new methods of `Array` namespace: + `Array.Reverse` + `Array.Shift` +### 2025-07-10 (feature/array-methods → main) + ++ Add a new method of `Array` namespace: + + `Array.Unshift` + ## ⚡ Improvements ## 🐦‍🔥 No longer broken \ No newline at end of file From 4a140a7ff3709ab92d8ca05ab5434e0f41c55512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AshGrey=F0=9F=A5=95?= Date: Fri, 11 Jul 2025 01:13:00 +0800 Subject: [PATCH 5/5] :test_tube: test(Array.Unshift): add passed edge cases tests for `Array.Unshift` --- test/lib-Array.test.ts | 5 +++++ test/script/lib-gen.sh | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/test/lib-Array.test.ts b/test/lib-Array.test.ts index 09fc0f2..c5e1358 100644 --- a/test/lib-Array.test.ts +++ b/test/lib-Array.test.ts @@ -22,6 +22,11 @@ type CaseLibArray = [ Expect, [[]]>>, Expect, [[],1]>>, Expect, [1]>>, + Expect, [{c:3},{a:1},{b:2}]>>, + Expect, [[5,6],[1,2],[3,4]]>>, + Expect, [4|5,1|2,3]>>, + Expect, [{a:string,b:number}]>>, + Expect, [{y:boolean},{x:number}]>>, // Array.MultipleConcat Expect, [1,2,3,4,2,3,undefined,true]>>, diff --git a/test/script/lib-gen.sh b/test/script/lib-gen.sh index e8e8952..530970b 100644 --- a/test/script/lib-gen.sh +++ b/test/script/lib-gen.sh @@ -37,7 +37,7 @@ declare -A test_cases=( ["Array.Pop"]="[1,2,3]∷[1,2] [1]‖\"get-rest\"∷[] []‖\"get-rest\"∷never [1,2,3]‖\"get-pop-element\"∷3 [1]‖\"get-pop-element\"∷1 []‖\"get-pop-element\"∷never" ["Array.Push"]="[1,2,3]‖\"1\"∷[1,2,3,\"1\"] []‖1∷[1] []‖[]∷[[]]" ["Array.Shift"]="[1,2,3]∷[2,3] [\"1\"]∷[] []‖\"get-rest\"∷never [1,2,3]‖\"get-shift-element\"∷1 [\"1\"]‖\"get-shift-element\"∷\"1\"" - ["Array.Unshift"]="[1,2,3]‖4∷[4,1,2,3] []‖[]∷[[]] [1]‖[]∷[[],1] []‖1∷[1]" + ["Array.Unshift"]="[1,2,3]‖4∷[4,1,2,3] []‖[]∷[[]] [1]‖[]∷[[],1] []‖1∷[1] [{a:1},{b:2}]‖{c:3}∷[{c:3},{a:1},{b:2}] [[1,2],[3,4]]‖[5,6]∷[[5,6],[1,2],[3,4]] [1|2,3]‖4|5∷[4|5,1|2,3] []‖{a:string,b:number}∷[{a:string,b:number}] [{x:number}]‖{y:boolean}∷[{y:boolean},{x:number}]" ["BigInteger.ToString"]="2n∷\"2\" -2n∷\"-2\" 0n∷\"0\"" ["BigInteger.IsNegative"]="-23n∷true 26n∷false 0n∷false"