aboutsummaryrefslogtreecommitdiff
path: root/src/extensions/Extensions_Array.ts
diff options
context:
space:
mode:
authorNathan-SR <144961007+Nathan-SR@users.noreply.github.com>2024-05-05 18:28:35 -0400
committerNathan-SR <144961007+Nathan-SR@users.noreply.github.com>2024-05-05 18:28:35 -0400
commit86f55d8aa12268fe847eaa344e8efbab5d293f34 (patch)
tree6bbc5c6fb6825ef969ed0342e4851667b81577cc /src/extensions/Extensions_Array.ts
parent2a9db784a6e3492a8f7d8ce9a745b4f1a0494241 (diff)
parent139600ab7e8a82a31744cd3798247236cd5616fc (diff)
Merge branch 'nathan-starter' of https://github.com/brown-dash/Dash-Web into nathan-starter
Diffstat (limited to 'src/extensions/Extensions_Array.ts')
-rw-r--r--src/extensions/Extensions_Array.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/extensions/Extensions_Array.ts b/src/extensions/Extensions_Array.ts
new file mode 100644
index 000000000..a50fb330f
--- /dev/null
+++ b/src/extensions/Extensions_Array.ts
@@ -0,0 +1,37 @@
+export default class ArrayExtension {
+ private readonly property: string;
+ private readonly body: <T>(this: Array<T>) => any;
+
+ constructor(property: string, body: <T>(this: Array<T>) => any) {
+ this.property = property;
+ this.body = body;
+ }
+
+ assign() {
+ // eslint-disable-next-line no-extend-native
+ Object.defineProperty(Array.prototype, this.property, {
+ value: this.body,
+ enumerable: false,
+ });
+ }
+}
+
+/**
+ * IMPORTANT: Any extension you add here *must* have a corresponding type definition
+ * in the Array<T> interface in ./General/ExtensionsTypings.ts. Otherwise,
+ * Typescript will not recognize your new function.
+ */
+const extensions = [
+ new ArrayExtension('lastElement', function () {
+ if (!this.length) {
+ return undefined;
+ }
+ return this[this.length - 1];
+ }),
+];
+
+function Assign() {
+ extensions.forEach(extension => extension.assign());
+}
+
+export { Assign };