From: Jukka Kurkela Date: Mon, 15 Feb 2021 20:06:37 +0000 (+0200) Subject: Make Chart static properties and methods read only (#8431) X-Git-Tag: v3.0.0-beta.11~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5baafac8ada12a739ad5da223b6feb1f7e330e2c;p=thirdparty%2FChart.js.git Make Chart static properties and methods read only (#8431) --- diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 12c62afd4..83067af44 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -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;