{"version":3,"file":"index.cjs","sources":["../lib/base.js","../lib/factory.js","../lib/types.js","../lib/ns.js","../lib/descriptor-builder.js","../lib/registry.js","../lib/properties.js","../lib/moddle.js"],"sourcesContent":["/**\n * Moddle base element.\n */\nexport default function Base() { }\n\n/**\n * @overload\n *\n * @template T\n *\n * Get property value casted to type.\n *\n * @param {string} name\n *\n * @return {T}\n */\n/**\n * @overload\n *\n * Get property value\n *\n * @param {string} name\n *\n * @return {unknown}\n */\n/**\n * Get property value\n *\n * @param {string} name\n *\n * @return {unknown}\n */\nBase.prototype.get = function(name) {\n  return this.$model.properties.get(this, name);\n};\n\n/**\n * Set property value\n *\n * @param {string} name\n * @param {unknown} value\n */\nBase.prototype.set = function(name, value) {\n  this.$model.properties.set(this, name, value);\n};","import {\n  forEach,\n  bind\n} from 'min-dash';\n\nimport Base from './base.js';\n\n/**\n * @typedef {import('./ns.js').Namespace} Namespace\n * @typedef {import('./moddle.js').default} Moddle\n * @typedef {import('./properties.js').default} Properties\n * @typedef {import('./registry.js').EffectiveDescriptor} EffectiveDescriptor\n * @typedef {import('./base.js').default} BaseElement\n * @typedef {import('./descriptor-builder.js').AnyTypeDescriptor} AnyTypeDescriptor\n */\n\n/**\n * @template [T=Record<string,any>]\n * @typedef {{\n *   new(attrs?: Partial<T>): ModdleElement<T>;\n *   prototype: ModdleElement<T>;\n *   readonly $model: Moddle;\n *   readonly $descriptor: EffectiveDescriptor;\n * }} ModdleElementType\n */\n\n/**\n * @template [T=Record<string,any>]\n * @typedef {BaseElement & T & {\n *   readonly $model: Moddle;\n *   readonly $descriptor: EffectiveDescriptor;\n *   readonly $type: Namespace['name'];\n *   readonly $attrs: Record<string, any>;\n *   $parent?: ModdleElement | AnyModdleElement;\n *   hasType: Moddle['hasType'];\n *   $instanceOf: Moddle['hasType'];\n * }} ModdleElement\n */\n\n/**\n * @template [T=Record<string,any>]\n * @typedef {BaseElement & T & {\n *   $type: string;\n *   $instanceOf: (type: string) => boolean;\n *   $parent?: ModdleElement | AnyModdleElement;\n *   readonly $model: Moddle;\n *   readonly $descriptor: AnyTypeDescriptor;\n * }} AnyModdleElement\n */\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nexport default function Factory(model, properties) {\n\n  /**\n   * @private\n   */\n  this.model = model;\n\n  /**\n   * @private\n   */\n  this.properties = properties;\n}\n\n/**\n * @template [T=Record<string,any>]\n * @param {EffectiveDescriptor} descriptor\n * @return {ModdleElementType<T>}\n */\nFactory.prototype.createType = function(descriptor) {\n\n  var model = this.model;\n\n  var props = this.properties,\n      prototype = Object.create(Base.prototype);\n\n  // initialize default values\n  forEach(descriptor.properties, function(p) {\n    if (!p.isMany && p.default !== undefined) {\n      prototype[p.name] = p.default;\n    }\n  });\n\n  props.defineModel(prototype, model);\n  props.defineDescriptor(prototype, descriptor);\n\n  var name = descriptor.ns.name;\n\n  /**\n   * The new type constructor\n   *\n   * @type { ModdleElementType }\n   */\n  function ModdleElement(attrs) {\n    props.define(this, '$type', { value: name, enumerable: true });\n    props.define(this, '$attrs', { value: {} });\n    props.define(this, '$parent', { writable: true });\n\n    forEach(attrs, bind(function(val, key) {\n      this.set(key, val);\n    }, this));\n  }\n\n  ModdleElement.prototype = prototype;\n\n  ModdleElement.hasType = prototype.$instanceOf = this.model.hasType;\n\n  // static links\n  props.defineModel(ModdleElement, model);\n  props.defineDescriptor(ModdleElement, descriptor);\n\n  return ModdleElement;\n};","/**\n * Built-in moddle types\n */\nvar BUILTINS = {\n  String: true,\n  Boolean: true,\n  Integer: true,\n  Real: true,\n  Element: true\n};\n\n/**\n * Converters for built-in types from string representations\n */\nvar TYPE_CONVERTERS = {\n  String: function(s) { return s; },\n  Boolean: function(s) { return s === 'true'; },\n  Integer: function(s) { return parseInt(s, 10); },\n  Real: function(s) { return parseFloat(s); }\n};\n\n/**\n * @typedef {'String'} StringType\n * @typedef {'Boolean'} BooleanType\n * @typedef {'Integer'} IntegerType\n * @typedef {'Real'} RealType\n * @typedef {'Element'} ElementType\n * @typedef {StringType | BooleanType | IntegerType | RealType} BuiltInSimpleType\n * @typedef {BuiltInSimpleType | ElementType} BuiltInType\n */\n\n/**\n * Convert given value to string\n * @overlord\n * @param {StringType} type\n * @param {any} value\n * @return {string}\n */\n/**\n * Convert given value to boolean\n * @overlord\n * @param {BooleanType} type\n * @param {any} value\n * @return {boolean}\n */\n/**\n * Convert given value to number\n * @overlord\n * @param {IntegerType | RealType} type\n * @param {any} value\n * @return {number}\n */\n/**\n * Convert a type to its real representation\n * @template T\n * @overlord\n * @param {Exclude<string,BuiltInSimpleType>} type\n * @param {T} value\n * @return {T}\n */\nexport function coerceType(type, value) {\n\n  var converter = TYPE_CONVERTERS[type];\n\n  if (converter) {\n    return converter(value);\n  } else {\n    return value;\n  }\n}\n\n/**\n * Return whether the given type is built-in\n * @overload\n * @param {BuiltInType} type\n * @return {true}\n */\n/**\n * Return whether the given type is built-in\n * @overload\n * @param {Exclude<string,BuiltInType>} type\n * @return {false}\n */\nexport function isBuiltIn(type) {\n  return !!BUILTINS[type];\n}\n\n/**\n * Return true if the given type is simple\n * @overload\n * @param {BuiltInSimpleType} type\n * @return {true}\n */\n/**\n * Return false the given type is not simple\n * @overload\n * @param {Exclude<string,BuiltInSimpleType>} type\n * @return {false}\n */\nexport function isSimple(type) {\n  return !!TYPE_CONVERTERS[type];\n}","/**\n * @typedef {{\n *   name: string;\n *   prefix: string;\n *   localName: string;\n * }} Namespace\n */\n\n/**\n * Parses a namespaced attribute name of the form (ns:)localName to an object,\n * given a default prefix to assume in case no explicit namespace is given.\n *\n * @param {String} name\n * @param {String} [defaultPrefix] the default prefix to take, if none is present.\n *\n * @return {Namespace} the parsed name\n */\nexport function parseName(name, defaultPrefix) {\n  var parts = name.split(/:/),\n      localName, prefix;\n\n  // no prefix (i.e. only local name)\n  if (parts.length === 1) {\n    localName = name;\n    prefix = defaultPrefix;\n  }\n\n  // prefix + local name\n  else if (parts.length === 2) {\n    localName = parts[1];\n    prefix = parts[0];\n  }\n\n  else {\n    throw new Error('expected <prefix:localName> or <localName>, got ' + name);\n  }\n\n  name = (prefix ? prefix + ':' : '') + localName;\n\n  return {\n    name: name,\n    prefix: prefix,\n    localName: localName\n  };\n}","import {\n  pick,\n  assign,\n  forEach,\n  bind\n} from 'min-dash';\n\nimport {\n  parseName as parseNameNs\n} from './ns.js';\n\n/**\n * @typedef {import('./ns.js').Namespace} Namespace\n * @typedef {import('./registry.js').RegisteredPackage} RegisteredPackage\n * @typedef {import('./registry.js').RegisteredTypeDef} RegisteredTypeDef\n * @typedef {import('./registry.js').RegisteredPropertyDef} RegisteredPropertyDef\n */\n\n/**\n * Effective element descriptor\n * aka element type descriptor\n * aka element descriptor\n * @typedef {{\n *   readonly ns: Namespace;\n *   readonly name: Namespace['name'];\n *   readonly allTypes: Array<RegisteredTypeDef>;\n *   readonly allTypesByName: Record<string, RegisteredTypeDef>;\n *   readonly properties: Array<PropertyDescriptor>;\n *   readonly propertiesByName: Record<string, PropertyDescriptor>;\n *   readonly bodyProperty?: PropertyDescriptor;\n *   readonly idProperty?: PropertyDescriptor;\n *   readonly $pkg?: RegisteredPackage;\n * }} EffectiveDescriptor\n */\n\n/**\n * Property descriptor\n * @typedef {RegisteredPropertyDef & {\n *   localName: Namespace['localName'];\n *   inherited?: boolean;\n *   definedBy?: RegisteredTypeDef;\n * }} PropertyDescriptor\n */\n\n/**\n * @typedef {{\n *   name: string;\n *   isGeneric: true;\n *   ns: {\n *     prefix: string;\n *     localName: string;\n *     uri: string;\n *   };\n * }} AnyTypeDescriptor\n */\n\n/**\n * A utility to build element descriptors.\n * @class DescriptorBuilder\n * @param {Namespace} nameNs\n */\nexport default function DescriptorBuilder(nameNs) {\n\n  /**\n   * @private\n   * @type {Namespace}\n   */\n  this.ns = nameNs;\n\n  /**\n   * @private\n   * @type {Namespace['name']}\n   */\n  this.name = nameNs.name;\n\n  /**\n   * @private\n   * @type {Array<RegisteredTypeDef>}\n   */\n  this.allTypes = [];\n\n  /**\n   * @private\n   * @type {Record<string, RegisteredTypeDef>}\n   */\n  this.allTypesByName = {};\n\n  /**\n   * @private\n   * @type {Array<PropertyDescriptor>}\n   */\n  this.properties = [];\n\n  /**\n   * @private\n   * @type {Record<string, PropertyDescriptor>}\n   */\n  this.propertiesByName = {};\n}\n\n/**\n * @return {EffectiveDescriptor}\n */\nDescriptorBuilder.prototype.build = function() {\n  return pick(this, [\n    'ns',\n    'name',\n    'allTypes',\n    'allTypesByName',\n    'properties',\n    'propertiesByName',\n    'bodyProperty',\n    'idProperty'\n  ]);\n};\n\n/**\n * Add property at given index.\n *\n * @param {PropertyDescriptor} p\n * @param {Number} [idx]\n * @param {Boolean} [validate=true]\n */\nDescriptorBuilder.prototype.addProperty = function(p, idx, validate) {\n\n  if (typeof idx === 'boolean') {\n    validate = idx;\n    idx = undefined;\n  }\n\n  this.addNamedProperty(p, validate !== false);\n\n  var properties = this.properties;\n\n  if (idx !== undefined) {\n    properties.splice(idx, 0, p);\n  } else {\n    properties.push(p);\n  }\n};\n\n/**\n * @param {PropertyDescriptor} oldProperty\n * @param {PropertyDescriptor} newProperty\n * @param {string} replace\n */\nDescriptorBuilder.prototype.replaceProperty = function(oldProperty, newProperty, replace) {\n  var oldNameNs = oldProperty.ns;\n\n  var props = this.properties,\n      propertiesByName = this.propertiesByName,\n      rename = oldProperty.name !== newProperty.name;\n\n  if (oldProperty.isId) {\n    if (!newProperty.isId) {\n      throw new Error(\n        'property <' + newProperty.ns.name + '> must be id property ' +\n        'to refine <' + oldProperty.ns.name + '>');\n    }\n\n    this.setIdProperty(newProperty, false);\n  }\n\n  if (oldProperty.isBody) {\n\n    if (!newProperty.isBody) {\n      throw new Error(\n        'property <' + newProperty.ns.name + '> must be body property ' +\n        'to refine <' + oldProperty.ns.name + '>');\n    }\n\n    // TODO: Check compatibility\n    this.setBodyProperty(newProperty, false);\n  }\n\n  // validate existence and get location of old property\n  var idx = props.indexOf(oldProperty);\n  if (idx === -1) {\n    throw new Error('property <' + oldNameNs.name + '> not found in property list');\n  }\n\n  // remove old property\n  props.splice(idx, 1);\n\n  // replacing the named property is intentional\n  //\n  //  * validate only if this is a \"rename\" operation\n  //  * add at specific index unless we \"replace\"\n  //\n  this.addProperty(newProperty, replace ? undefined : idx, rename);\n\n  // make new property available under old name\n  propertiesByName[oldNameNs.name] = propertiesByName[oldNameNs.localName] = newProperty;\n};\n\n/**\n * @param {PropertyDescriptor} p\n * @param {string} targetPropertyName\n * @param {string} replace\n */\nDescriptorBuilder.prototype.redefineProperty = function(p, targetPropertyName, replace) {\n\n  var nsPrefix = p.ns.prefix;\n  var parts = targetPropertyName.split('#');\n\n  var name = parseNameNs(parts[0], nsPrefix);\n  var attrName = parseNameNs(parts[1], name.prefix).name;\n\n  var redefinedProperty = this.propertiesByName[attrName];\n  if (!redefinedProperty) {\n    throw new Error('refined property <' + attrName + '> not found');\n  } else {\n    this.replaceProperty(redefinedProperty, p, replace);\n  }\n\n  delete p.redefines;\n};\n\n/**\n * @param {PropertyDescriptor} p\n * @param {boolean} validate\n */\nDescriptorBuilder.prototype.addNamedProperty = function(p, validate) {\n  var ns = p.ns,\n      propsByName = this.propertiesByName;\n\n  if (validate) {\n    this.assertNotDefined(p, ns.name);\n    this.assertNotDefined(p, ns.localName);\n  }\n\n  propsByName[ns.name] = propsByName[ns.localName] = p;\n};\n\n/**\n * @param {RegisteredPropertyDef} p\n */\nDescriptorBuilder.prototype.removeNamedProperty = function(p) {\n  var ns = p.ns,\n      propsByName = this.propertiesByName;\n\n  delete propsByName[ns.name];\n  delete propsByName[ns.localName];\n};\n\n/**\n * @param {PropertyDescriptor} p\n * @param {boolean} [validate]\n */\nDescriptorBuilder.prototype.setBodyProperty = function(p, validate) {\n\n  if (validate && this.bodyProperty) {\n    throw new Error(\n      'body property defined multiple times ' +\n      '(<' + this.bodyProperty.ns.name + '>, <' + p.ns.name + '>)');\n  }\n\n  this.bodyProperty = p;\n};\n\n/**\n * @param {PropertyDescriptor} p\n * @param {boolean} [validate]\n */\nDescriptorBuilder.prototype.setIdProperty = function(p, validate) {\n\n  if (validate && this.idProperty) {\n    throw new Error(\n      'id property defined multiple times ' +\n      '(<' + this.idProperty.ns.name + '>, <' + p.ns.name + '>)');\n  }\n\n  this.idProperty = p;\n};\n\n/**\n * @param {RegisteredTypeDef} typeDescriptor\n */\nDescriptorBuilder.prototype.assertNotTrait = function(typeDescriptor) {\n\n  const _extends = typeDescriptor.extends || [];\n\n  if (_extends.length) {\n    throw new Error(\n      `cannot create <${ typeDescriptor.name }> extending <${ typeDescriptor.extends }>`\n    );\n  }\n};\n\n/**\n * @param {PropertyDescriptor} p\n */\nDescriptorBuilder.prototype.assertNotDefined = function(p, name) {\n  var propertyName = p.name,\n      definedProperty = this.propertiesByName[propertyName];\n\n  if (definedProperty) {\n    throw new Error(\n      'property <' + propertyName + '> already defined; ' +\n      'override of <' + definedProperty.definedBy.ns.name + '#' + definedProperty.ns.name + '> by ' +\n      '<' + p.definedBy.ns.name + '#' + p.ns.name + '> not allowed without redefines');\n  }\n};\n\n/**\n * @param {string} name\n * @return {PropertyDescriptor}\n */\nDescriptorBuilder.prototype.hasProperty = function(name) {\n  return this.propertiesByName[name];\n};\n\n/**\n * @param {RegisteredTypeDef} t\n * @param {boolean} inherited\n */\nDescriptorBuilder.prototype.addTrait = function(t, inherited) {\n\n  if (inherited) {\n    this.assertNotTrait(t);\n  }\n\n  var typesByName = this.allTypesByName,\n      types = this.allTypes;\n\n  var typeName = t.name;\n\n  if (typeName in typesByName) {\n    return;\n  }\n\n  forEach(t.properties, bind(function(p) {\n\n    // clone property to allow extensions\n    p = assign({}, p, {\n      name: p.ns.localName,\n      inherited: inherited\n    });\n\n    Object.defineProperty(p, 'definedBy', {\n      value: t\n    });\n\n    var replaces = p.replaces,\n        redefines = p.redefines;\n\n    // add replace/redefine support\n    if (replaces || redefines) {\n      this.redefineProperty(p, replaces || redefines, replaces);\n    } else {\n      if (p.isBody) {\n        this.setBodyProperty(p);\n      }\n      if (p.isId) {\n        this.setIdProperty(p);\n      }\n      this.addProperty(p);\n    }\n  }, this));\n\n  types.push(t);\n  typesByName[typeName] = t;\n};","import {\n  assign,\n  forEach,\n  bind\n} from 'min-dash';\n\nimport {\n  isBuiltIn as isBuiltInType\n} from './types.js';\n\nimport DescriptorBuilder from './descriptor-builder.js';\n\nimport {\n  parseName as parseNameNs\n} from './ns.js';\n\n/**\n * @typedef {import('./ns.js').Namespace} Namespace\n * @typedef {import('./moddle.js').PackageDefinition} PackageDefinition\n * @typedef {import('./moddle.js').TypeDefinition} TypeDefinition\n * @typedef {import('./moddle.js').PropertyDefinition} PropertyDefinition\n * @typedef {import('./properties.js').default} Properties\n * @typedef {import('./descriptor-builder.js').EffectiveDescriptor} EffectiveDescriptor\n */\n\n/**\n * Registered package definition\n * @typedef {Omit<PackageDefinition, 'types'> & {\n *   types?: Array<RegisteredTypeDef>;\n * }} RegisteredPackage\n */\n\n/**\n * Registered type definition\n * @typedef {Omit<TypeDefinition, 'properties'> & {\n *   properties?: Array<RegisteredPropertyDef>;\n *   propertiesByName?: Record<string, RegisteredPropertyDef>;\n *   superClass?: Array<string>;\n *   extends?: Array<string>;\n *   meta?: Record<string, *>;\n *   traits?: Array<string>;\n *   ns?: Namespace;\n *   readonly $pkg?: RegisteredPackage;\n * }} RegisteredTypeDef\n */\n\n/**\n * Registered property definition\n * @typedef {PropertyDefinition & { ns: Namespace }} RegisteredPropertyDef\n */\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array<PackageDefinition> | Record<string,PackageDefinition>} packages\n * @param {Properties} properties\n */\nexport default function Registry(packages, properties) {\n\n  /**\n   * @private\n   * @type {Record<string, RegisteredPackage>} registered packages map\n   */\n  this.packageMap = {};\n\n  /**\n   * @type {Record<string,RegisteredTypeDef>}\n   */\n  this.typeMap = {};\n\n  /**\n   * @private\n   * @type {Array<RegisteredPackage>} all registered packages\n   */\n  this.packages = [];\n\n  /**\n   * @private\n   * @type {Properties}\n   */\n  this.properties = properties;\n\n  forEach(packages, bind(this.registerPackage, this));\n}\n\n/**\n * @param {string} uriOrPrefix uri or prefix of package\n * @return {RegisteredPackage} registered package\n */\nRegistry.prototype.getPackage = function(uriOrPrefix) {\n  return this.packageMap[uriOrPrefix];\n};\n\n/**\n * @return {Array<RegisteredPackage>} all registered packages\n */\nRegistry.prototype.getPackages = function() {\n  return this.packages;\n};\n\n/**\n * @private\n * @param {PackageDefinition} pkg registering package\n */\nRegistry.prototype.registerPackage = function(pkg) {\n\n  // copy package\n  pkg = assign({}, pkg);\n\n  var pkgMap = this.packageMap;\n\n  ensureAvailable(pkgMap, pkg, 'prefix');\n  ensureAvailable(pkgMap, pkg, 'uri');\n\n  // register types\n  forEach(pkg.types, bind(function(descriptor) {\n    this.registerType(descriptor, pkg);\n  }, this));\n\n  pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;\n  this.packages.push(pkg);\n};\n\n/**\n * @private\n * Register a type from a specific package with us\n * @param {TypeDefinition} type\n * @param {RegisteredPackage} pkg\n */\nRegistry.prototype.registerType = function(type, pkg) {\n  type = assign({}, type, {\n    superClass: (type.superClass || []).slice(),\n    extends: (type.extends || []).slice(),\n    properties: (type.properties || []).slice(),\n    meta: assign(({}, type.meta || {}))\n  });\n\n  var ns = parseNameNs(type.name, pkg.prefix),\n      name = ns.name,\n      /** @type {Record<string, RegisteredPropertyDef>} */ propertiesByName = {};\n\n  // parse properties\n  forEach(type.properties, bind(function(p) {\n\n    // namespace property names\n    var propertyNs = parseNameNs(p.name, ns.prefix),\n        propertyName = propertyNs.name;\n\n    // namespace property types\n    if (!isBuiltInType(p.type)) {\n      p.type = parseNameNs(p.type, propertyNs.prefix).name;\n    }\n\n    assign(p, {\n      ns: propertyNs,\n      name: propertyName\n    });\n\n    propertiesByName[propertyName] = p;\n  }, this));\n\n  // update ns + name\n  assign(type, {\n    ns: ns,\n    name: name,\n    propertiesByName: propertiesByName\n  });\n\n  forEach(type.extends, bind(function(extendsName) {\n    var extendsNameNs = parseNameNs(extendsName, ns.prefix);\n\n    var extended = this.typeMap[extendsNameNs.name];\n\n    extended.traits = extended.traits || [];\n    extended.traits.push(name);\n  }, this));\n\n  // link to package\n  this.definePackage(type, pkg);\n\n  // register\n  this.typeMap[name] = type;\n};\n\n/**\n * @callback IteratorFn\n * @param {RegisteredTypeDef} type\n * @param {boolean} inherited\n */\n\n/**\n * Traverse the type hierarchy from bottom to top,\n * calling iterator with (type, inherited) for all elements in\n * the inheritance chain.\n * @private\n * @param {Namespace} nsName\n * @param {IteratorFn} iterator\n * @param {Boolean} [trait=false]\n */\nRegistry.prototype.mapTypes = function(nsName, iterator, trait) {\n\n  /** @type {RegisteredTypeDef} */\n  var type = isBuiltInType(nsName.name) ? { name: nsName.name } : this.typeMap[nsName.name];\n\n  var self = this;\n\n  /**\n   * Traverse the selected super type or trait\n   *\n   * @param {String} cls\n   * @param {Boolean} [trait=false]\n   */\n  function traverse(cls, trait) {\n    var parentNs = parseNameNs(cls, isBuiltInType(cls) ? '' : nsName.prefix);\n    self.mapTypes(parentNs, iterator, trait);\n  }\n\n  /**\n   * Traverse the selected trait.\n   *\n   * @param {String} cls\n   */\n  function traverseTrait(cls) {\n    return traverse(cls, true);\n  }\n\n  /**\n   * Traverse the selected super type\n   *\n   * @param {String} cls\n   */\n  function traverseSuper(cls) {\n    return traverse(cls, false);\n  }\n\n  if (!type) {\n    throw new Error('unknown type <' + nsName.name + '>');\n  }\n\n  forEach(type.superClass, trait ? traverseTrait : traverseSuper);\n\n  // call iterator with (type, inherited=!trait)\n  iterator(type, !trait);\n\n  forEach(type.traits, traverseTrait);\n};\n\n/**\n * Returns the effective descriptor for a type.\n * @param  {Namespace['name']} name the namespaced name (ns:localName) of the type\n * @return {EffectiveDescriptor} the resulting effective descriptor\n */\nRegistry.prototype.getEffectiveDescriptor = function(name) {\n\n  var nsName = parseNameNs(name);\n\n  var builder = new DescriptorBuilder(nsName);\n\n  this.mapTypes(nsName, function(type, inherited) {\n    builder.addTrait(type, inherited);\n  });\n\n  var descriptor = builder.build();\n\n  // define package link\n  this.definePackage(descriptor, descriptor.allTypes[descriptor.allTypes.length - 1].$pkg);\n\n  return descriptor;\n};\n\n/**\n * @private\n * @param {RegisteredTypeDef | EffectiveDescriptor} target\n * @param {RegisteredPackage} pkg\n */\nRegistry.prototype.definePackage = function(target, pkg) {\n  this.properties.define(target, '$pkg', { value: pkg });\n};\n\n// helpers ////////////////////////////\n\n/**\n * Checking already defined packages\n * @param {Record<string, RegisteredPackage>} packageMap\n * @param {PackageDefinition} pkg\n * @param {'prefix' | 'uri'} identifierKey\n */\nfunction ensureAvailable(packageMap, pkg, identifierKey) {\n\n  var value = pkg[identifierKey];\n\n  if (value in packageMap) {\n    throw new Error('package with ' + identifierKey + ' <' + value + '> already defined');\n  }\n}\n","import {\n  assign,\n  isString\n} from 'min-dash';\n\n/**\n * @typedef {import('./moddle.js').default} Moddle\n * @typedef {import('./descriptor-builder.js').PropertyDescriptor} PropertyDesc\n * @typedef {import('./registry.js').EffectiveDescriptor} EffectiveDescriptor\n * @typedef {import('./factory.js').ModdleElement} ModdleElement\n * @typedef {import('./descriptor-builder.js').AnyTypeDescriptor} AnyTypeDescriptor\n */\n\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Moddle} model\n */\nexport default function Properties(model) {\n\n  /** @type {Moddle} */\n  this.model = model;\n}\n\n/**\n * Sets a named property on the target element.\n * If the value is undefined, the property gets deleted.\n *\n * @param {ModdleElement} target\n * @param {String} name\n * @param {Object} value\n */\nProperties.prototype.set = function(target, name, value) {\n\n  if (!isString(name) || !name.length) {\n    throw new TypeError('property name must be a non-empty string');\n  }\n\n  var property = this.getProperty(target, name);\n\n  var propertyName = property && property.name;\n\n  if (isUndefined(value)) {\n\n    // unset the property, if the specified value is undefined;\n    // delete from $attrs (for extensions) or the target itself\n    if (property) {\n      delete target[propertyName];\n    } else {\n      delete target.$attrs[stripGlobal(name)];\n    }\n  } else {\n\n    // set the property, defining well defined properties on the fly\n    // or simply updating them in target.$attrs (for extensions)\n    if (property) {\n      if (propertyName in target) {\n        target[propertyName] = value;\n      } else {\n        defineProperty(target, property, value);\n      }\n    } else {\n      target.$attrs[stripGlobal(name)] = value;\n    }\n  }\n};\n\n/**\n * Returns the named property of the given element\n *\n * @param  {ModdleElement} target\n * @param  {String} name\n *\n * @return {Object}\n */\nProperties.prototype.get = function(target, name) {\n\n  var property = this.getProperty(target, name);\n\n  if (!property) {\n    return target.$attrs[stripGlobal(name)];\n  }\n\n  var propertyName = property.name;\n\n  // check if access to collection property and lazily initialize it\n  if (!target[propertyName] && property.isMany) {\n    defineProperty(target, property, []);\n  }\n\n  return target[propertyName];\n};\n\n/**\n * Define a property on the target element\n * @template [T=any]\n * @param  {NonNullable<T>} target\n * @param  {String} name\n * @param  {PropertyDescriptor} options\n */\nProperties.prototype.define = function(target, name, options) {\n\n  if (!options.writable) {\n\n    var value = options.value;\n\n    // use getters for read-only variables to support ES6 proxies\n    // cf. https://github.com/bpmn-io/internal-docs/issues/386\n    options = assign({}, options, {\n      get: function() { return value; }\n    });\n\n    delete options.value;\n  }\n\n  Object.defineProperty(target, name, options);\n};\n\n/**\n * Define the descriptor for an element\n * @template [T=any]\n * @param {NonNullable<T>} target\n * @param {EffectiveDescriptor | AnyTypeDescriptor} descriptor\n */\nProperties.prototype.defineDescriptor = function(target, descriptor) {\n  this.define(target, '$descriptor', { value: descriptor });\n};\n\n/**\n * Define the model for an element\n * @template [T=any]\n * @param {NonNullable<T>} target\n * @param {Moddle} model\n */\nProperties.prototype.defineModel = function(target, model) {\n  this.define(target, '$model', { value: model });\n};\n\n/**\n * Return property with the given name on the element.\n *\n * @param {ModdleElement} target\n * @param {string} name\n *\n * @return {PropertyDesc | null} property\n */\nProperties.prototype.getProperty = function(target, name) {\n\n  var model = this.model;\n\n  var property = model.getPropertyDescriptor(target, name);\n\n  if (property) {\n    return property;\n  }\n\n  if (name.includes(':')) {\n    return null;\n  }\n\n  const strict = model.config.strict;\n\n  if (typeof strict !== 'undefined') {\n    const error = new TypeError(`unknown property <${ name }> on <${ target.$type }>`);\n\n    if (strict) {\n      throw error;\n    } else {\n\n      typeof console !== 'undefined' && console.warn(error);\n    }\n  }\n\n  return null;\n};\n\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\nfunction defineProperty(target, property, value) {\n  Object.defineProperty(target, property.name, {\n    enumerable: !property.isReference,\n    writable: true,\n    value: value,\n    configurable: true\n  });\n}\n\nfunction stripGlobal(name) {\n  return name.replace(/^:/, '');\n}","import {\n  isString,\n  isObject,\n  forEach,\n  set\n} from 'min-dash';\n\nimport Factory from './factory.js';\nimport Registry from './registry.js';\nimport Properties from './properties.js';\n\nimport {\n  parseName as parseNameNs\n} from './ns.js';\n\n/**\n * @typedef {import('./registry.js').RegisteredTypeDef} RegisteredTypeDef\n * @typedef {import('./registry.js').RegisteredPackage} RegisteredPackage\n * @typedef {import('./base.js').default} BaseElement\n * @typedef {import('./descriptor-builder.js').EffectiveDescriptor} EffectiveDescriptor\n * @typedef {import('./descriptor-builder.js').AnyTypeDescriptor} AnyTypeDescriptor\n * @typedef {import('./descriptor-builder.js').PropertyDescriptor} PropertyDescriptor\n */\n\n/**\n * @template [T=Record<string,any>]\n * @typedef {import('./factory.js').ModdleElement<T>} ModdleElement\n * @typedef {import('./factory.js').ModdleElementType<T>} ModdleElementType\n * @typedef {import('./factory.js').AnyModdleElement<T>} AnyModdleElement\n */\n\n/**\n * Package definition\n * @typedef {{\n *   $schema?: string;\n *   name: string;\n *   prefix: string;\n *   types?: Array<TypeDefinition>;\n *   [key: string]: any;\n * } & PackageDefinitionXmlExtension} PackageDefinition\n */\n\n/**\n * Set of extended parameters for package definition used in moddle-xml.\n * @typedef {{\n *   uri?: string;\n *   xml?: {\n *     tagAlias?: 'lowerCase';\n *     typePrefix?: string;\n *   };\n * }} PackageDefinitionXmlExtension\n */\n\n/**\n * Type definition in declaration in package\n * @typedef {{\n *   name: string;\n *   isAbstract?: boolean;\n *   properties?: Array<PropertyDefinition>;\n *   superClass?: Array<string>;\n *   extends?: Array<string>;\n *   meta?: Record<string, *>;\n *   [key: string]: any;\n * }} TypeDefinition\n */\n\n/**\n * Set of extended parameters for property definition used in moddle-xml.\n * @typedef {{\n *   isBody?: boolean;\n *   isAttr?: boolean;\n *   xml?: {\n *     serialize?: string;\n *   };\n * }} PropertyDefinitionXmlExtension\n */\n\n/**\n * Property definition of type definition\n * @typedef {{\n *   name: string;\n *   type: 'String' | 'Boolean' | 'Integer' | 'Real' | string;\n *   default?: string | boolean | number;\n *   isMany?: boolean;\n *   isReference?: boolean;\n *   isId?: boolean;\n *   redefines?: string;\n *   replaces?: string;\n *   [key: string]: any;\n * } & PropertyDefinitionXmlExtension} PropertyDefinition\n */\n\n// Moddle implementation /////////////////////////////////////////////////\n\n/**\n * @class Moddle\n *\n * A model that can be used to create elements of a specific type.\n *\n * @example\n *\n * import Moddle from 'moddle';\n *\n * var pkg = {\n *   name: 'mypackage',\n *   prefix: 'my',\n *   types: [\n *     { name: 'Root' }\n *   ]\n * };\n *\n * var moddle = new Moddle([pkg]);\n *\n * @param {Array<PackageDefinition> | Record<string,PackageDefinition>} packages the packages to contain\n * @param {{ strict?: boolean }} [config={}] moddle configuration\n */\nexport default function Moddle(packages, config = {}) {\n\n  /** @type Readonly<Properties> */\n  this.properties = new Properties(this);\n\n  /** @type Readonly<Factory> */\n  this.factory = new Factory(this, this.properties);\n\n  /** @type Readonly<Registry> */\n  this.registry = new Registry(packages, this.properties);\n\n  /**\n   * @type {Record<string,ModdleElementType>}\n   */\n  this.typeCache = {};\n\n  /**\n   * @type {Readonly<{readonly strict?: boolean}>}\n   */\n  this.config = config;\n}\n\n/**\n * Create an instance of the specified type.\n *\n * @method Moddle#create\n *\n * @example\n *\n * var foo = moddle.create('my:Foo');\n * var bar = moddle.create('my:Bar', { id: 'BAR_1' });\n *\n * @template [T=Record<string,any>]\n * @param  {String|EffectiveDescriptor} descriptor the type descriptor or name know to the model\n * @param  {Partial<T>} [attrs] a number of attributes to initialize the model instance with\n * @return {ModdleElement<T>} model instance\n */\nModdle.prototype.create = function(descriptor, attrs) {\n  var Type = this.getType(descriptor);\n\n  if (!Type) {\n    throw new Error('unknown type <' + descriptor + '>');\n  }\n\n  return new Type(attrs);\n};\n\n/**\n * Returns the type representing a given descriptor\n *\n * @method Moddle#getType\n *\n * @example\n *\n * var Foo = moddle.getType('my:Foo');\n * var foo = new Foo({ 'id' : 'FOO_1' });\n *\n * @template [T=Record<string,any>]\n * @param  {String|EffectiveDescriptor} descriptor the type descriptor or name know to the model\n * @return {ModdleElementType<T>} the type representing the descriptor\n */\nModdle.prototype.getType = function(descriptor) {\n\n  var cache = this.typeCache;\n\n  var name = isString(descriptor) ? descriptor : descriptor.ns.name;\n\n  var type = cache[name];\n\n  if (!type) {\n    descriptor = this.registry.getEffectiveDescriptor(name);\n    type = cache[name] = this.factory.createType(descriptor);\n  }\n\n  return type;\n};\n\n/**\n * Creates an any-element type to be used within model instances.\n *\n * This can be used to create custom elements that lie outside the meta-model.\n * The created element contains all the meta-data required to serialize it\n * as part of meta-model elements.\n *\n * @method Moddle#createAny\n *\n * @example\n *\n * var foo = moddle.createAny('vendor:Foo', 'http://vendor', {\n *   value: 'bar'\n * });\n *\n * var container = moddle.create('my:Container', 'http://my', {\n *   any: [ foo ]\n * });\n *\n * // go ahead and serialize the stuff\n *\n * @template [T=Record<string, any>]\n * @param  {String} name  the name of the element\n * @param  {String} nsUri the namespace uri of the element\n * @param  {T} [properties] a map of properties to initialize the instance with\n * @return {AnyModdleElement<T>} the any type instance\n */\nModdle.prototype.createAny = function(name, nsUri, properties) {\n\n  var nameNs = parseNameNs(name);\n\n  /** @type AnyModdleElement */\n  var element = {\n    $type: name,\n    $instanceOf: function(type) {\n      return type === this.$type;\n    },\n    get: function(key) {\n      return this[key];\n    },\n    set: function(key, value) {\n      set(this, [ key ], value);\n    }\n  };\n\n  /** @type AnyTypeDescriptor */\n  var descriptor = {\n    name: name,\n    isGeneric: true,\n    ns: {\n      prefix: nameNs.prefix,\n      localName: nameNs.localName,\n      uri: nsUri\n    }\n  };\n\n  this.properties.defineDescriptor(element, descriptor);\n  this.properties.defineModel(element, this);\n  this.properties.define(element, 'get', { enumerable: false, writable: true });\n  this.properties.define(element, 'set', { enumerable: false, writable: true });\n  this.properties.define(element, '$parent', { enumerable: false, writable: true });\n  this.properties.define(element, '$instanceOf', { enumerable: false, writable: true });\n\n  forEach(properties, function(a, key) {\n    if (isObject(a) && a.value !== undefined) {\n      element[a.name] = a.value;\n    } else {\n      element[key] = a;\n    }\n  });\n\n  return element;\n};\n\n/**\n * Returns a registered package by uri or prefix\n * @param {string} uriOrPrefix\n * @return {RegisteredPackage} the package\n */\nModdle.prototype.getPackage = function(uriOrPrefix) {\n  return this.registry.getPackage(uriOrPrefix);\n};\n\n/**\n * Returns a snapshot of all known packages\n *\n * @return {Readonly<Array<RegisteredPackage>>} the package\n */\nModdle.prototype.getPackages = function() {\n  return this.registry.getPackages();\n};\n\n/**\n * Returns the descriptor for an element\n * @param {ModdleElement | ModdleElementType} element\n * @return {EffectiveDescriptor}\n */\nModdle.prototype.getElementDescriptor = function(element) {\n  return element.$descriptor;\n};\n\n/**\n * @overload\n * Returns true if the given descriptor or instance\n * represents the given type.\n * @param {ModdleElement | ModdleElementType} element\n * @param {string} type\n * @return {boolean}\n */\n/**\n * @overload\n * @param {string} type\n * @return {boolean}\n */\nModdle.prototype.hasType = function(element, type) {\n  if (type === undefined) {\n    type = element;\n    element = this;\n  }\n\n  var descriptor = element.$model.getElementDescriptor(element);\n\n  return (type in descriptor.allTypesByName);\n};\n\n/**\n * Returns the descriptor of an elements named property\n * @param {ModdleElement | ModdleElementType} element\n * @param {string} property\n * @return {PropertyDescriptor}\n */\nModdle.prototype.getPropertyDescriptor = function(element, property) {\n  return this.getElementDescriptor(element).propertiesByName[property];\n};\n\n/**\n * Return registered type definition\n * @param {string} type\n * @return {RegisteredTypeDef}\n */\nModdle.prototype.getTypeDescriptor = function(type) {\n  return this.registry.typeMap[type];\n};"],"names":["forEach","bind","pick","parseNameNs","assign","isBuiltInType","isString","set","isObject"],"mappings":"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"}