From 78b26d2d40e0da9024d5370cff5e7a94e798bc70 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 31 Jan 2021 12:48:05 +0100 Subject: [PATCH] Allow .slice on Vec types (#3130) * Allow .slice on Vec types * Apply suggestions from code review * Update packages/types/src/codec/AbstractArray.ts --- packages/types/src/codec/AbstractArray.ts | 7 +++++++ packages/types/src/codec/Vec.spec.ts | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/packages/types/src/codec/AbstractArray.ts b/packages/types/src/codec/AbstractArray.ts index 2660b2a9ea..56cac3c504 100644 --- a/packages/types/src/codec/AbstractArray.ts +++ b/packages/types/src/codec/AbstractArray.ts @@ -159,4 +159,11 @@ export abstract class AbstractArray extends Array implements public includes (check: unknown): boolean { return this.some((value: T) => value.eq(check)); } + + /** + * @description Returns a slice of an array + */ + public slice (start?: number, end?: number): T[] { + return this.toArray().slice(start, end); + } } diff --git a/packages/types/src/codec/Vec.spec.ts b/packages/types/src/codec/Vec.spec.ts index b65f8a117f..62db80ec87 100644 --- a/packages/types/src/codec/Vec.spec.ts +++ b/packages/types/src/codec/Vec.spec.ts @@ -6,6 +6,7 @@ import type { Codec, CodecTo } from '../types'; import { Metadata } from '@polkadot/metadata'; import rpcMetadata from '@polkadot/metadata/static'; +import { randomAsU8a } from '@polkadot/util-crypto'; import { createTypeUnsafe, TypeRegistry } from '../create'; import { GenericAccountId as AccountId } from '../generic'; @@ -170,5 +171,14 @@ describe('Vec', (): void => { expect(vec.indexOf(myId)).toEqual(2); }); + + it('allows a slice operator', (): void => { + const vec = registry.createType('Vec', [ + randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a() + ]); + + expect(vec).toHaveLength(10); + expect(vec.slice(2, 7)).toHaveLength(5); + }); }); });