]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Make Chart static properties and methods read only (#8431)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Mon, 15 Feb 2021 20:06:37 +0000 (22:06 +0200)
committerGitHub <noreply@github.com>
Mon, 15 Feb 2021 20:06:37 +0000 (15:06 -0500)
src/core/core.controller.js

index 12c62afd4719d4f73522c822812bae843afaef94..83067af44772f899768f571e31ba82ae20e006e5 100644 (file)
@@ -66,6 +66,12 @@ function getCanvas(item) {
   return item;
 }
 
+const instances = {};
+const getChart = (key) => {
+  const canvas = getCanvas(key);
+  return Object.values(instances).filter((c) => c.canvas === canvas).pop();
+};
+
 class Chart {
 
   // eslint-disable-next-line max-statements
@@ -74,7 +80,7 @@ class Chart {
 
     this.config = config = new Config(config);
     const initialCanvas = getCanvas(item);
-    const existingChart = Chart.getChart(initialCanvas);
+    const existingChart = getChart(initialCanvas);
     if (existingChart) {
       throw new Error(
         'Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' +
@@ -118,7 +124,7 @@ class Chart {
     this.$context = undefined;
 
     // Add the chart instance to the global namespace
-    Chart.instances[me.id] = me;
+    instances[me.id] = me;
 
     if (!context || !canvas) {
       // The given item is not a compatible context2d element, let's return before finalizing
@@ -840,7 +846,7 @@ class Chart {
 
     me.notifyPlugins('destroy');
 
-    delete Chart.instances[me.id];
+    delete instances[me.id];
   }
 
   toBase64Image(...args) {
@@ -1090,27 +1096,47 @@ class Chart {
   }
 }
 
-// These are available to both, UMD and ESM packages
-Chart.defaults = defaults;
-Chart.instances = {};
-Chart.registry = registry;
-Chart.version = version;
-
-Chart.getChart = (key) => {
-  const canvas = getCanvas(key);
-  return Object.values(Chart.instances).filter((c) => c.canvas === canvas).pop();
-};
-
 // @ts-ignore
 const invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());
 
-Chart.register = (...items) => {
-  registry.add(...items);
-  invalidatePlugins();
-};
-Chart.unregister = (...items) => {
-  registry.remove(...items);
-  invalidatePlugins();
-};
+const enumerable = true;
+
+// These are available to both, UMD and ESM packages. Read Only!
+Object.defineProperties(Chart, {
+  defaults: {
+    enumerable,
+    value: defaults
+  },
+  instances: {
+    enumerable,
+    value: instances
+  },
+  registry: {
+    enumerable,
+    value: registry
+  },
+  version: {
+    enumerable,
+    value: version
+  },
+  getChart: {
+    enumerable,
+    value: getChart
+  },
+  register: {
+    enumerable,
+    value: (...items) => {
+      registry.add(...items);
+      invalidatePlugins();
+    }
+  },
+  unregister: {
+    enumerable,
+    value: (...items) => {
+      registry.remove(...items);
+      invalidatePlugins();
+    }
+  }
+});
 
 export default Chart;