| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | import defaultValue from "../Core/defaultValue.js";import defined from "../Core/defined.js";import ConstantProperty from "./ConstantProperty.js";function createProperty(  name,  privateName,  subscriptionName,  configurable,  createPropertyCallback) {  return {    configurable: configurable,    get: function () {      return this[privateName];    },    set: function (value) {      const oldValue = this[privateName];      const subscription = this[subscriptionName];      if (defined(subscription)) {        subscription();        this[subscriptionName] = undefined;      }      const hasValue = value !== undefined;      if (        hasValue &&        (!defined(value) || !defined(value.getValue)) &&        defined(createPropertyCallback)      ) {        value = createPropertyCallback(value);      }      if (oldValue !== value) {        this[privateName] = value;        this._definitionChanged.raiseEvent(this, name, value, oldValue);      }      if (defined(value) && defined(value.definitionChanged)) {        this[subscriptionName] = value.definitionChanged.addEventListener(          function () {            this._definitionChanged.raiseEvent(this, name, value, value);          },          this        );      }    },  };}function createConstantProperty(value) {  return new ConstantProperty(value);}/** * Used to consistently define all DataSources graphics objects. * This is broken into two functions because the Chrome profiler does a better * job of optimizing lookups if it notices that the string is constant throughout the function. * @private */function createPropertyDescriptor(name, configurable, createPropertyCallback) {  //Safari 8.0.3 has a JavaScript bug that causes it to confuse two variables and treat them as the same.  //The two extra toString calls work around the issue.  return createProperty(    name,    `_${name.toString()}`,    `_${name.toString()}Subscription`,    defaultValue(configurable, false),    defaultValue(createPropertyCallback, createConstantProperty)  );}export default createPropertyDescriptor;
 |