docs: function ImmutableCoreModule (moduleName, options) {
      // require name
      this.assert(typeof moduleName === 'string', 'name required')
      // require options to be an object
      var options = requireValidOptionalObject(options)
      // set module meta data
      this.meta = {
          name: moduleName,
          options: options,
      }
      // hidden variable for global meta data
      var data
      // create getter/setter for global meta data on meta
      Object.defineProperty(this.meta, 'data', {
          get: () => data,
          set: newData => {
              // validate data - throws on error
              newData = validateSetData(this, newData)
              // set data if defined
              if (defined(newData)) {
                  data = newData
              }
          },
      })
      // create getter/setter for global meta data on instance
      Object.defineProperty(this, 'data', {
          get: () => data,
          set: newData => {
              // validate data - throws on error
              newData = validateSetData(this, newData)
              // set data if defined
              if (defined(newData)) {
                  data = newData
              }
          },
      })
  }