@speclynx/apidom-datamodel 2.11.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.apidomDatamodel=t():e.apidomDatamodel=t()}(self,()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return null!=e&&"object"==typeof e&&!0===e["@@functional/placeholder"]}function r(e){return function t(r){return 0===arguments.length||n(r)?t:e.apply(this,arguments)}}function s(e){return function t(s,i){switch(arguments.length){case 0:return t;case 1:return n(s)?t:r(function(t){return e(s,t)});default:return n(s)&&n(i)?t:n(s)?r(function(t){return e(t,i)}):n(i)?r(function(t){return e(s,t)}):e(s,i)}}}function i(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function o(e,t,n){for(var r=0,s=n.length;r<s;){if(e(t,n[r]))return!0;r+=1}return!1}function a(e,t){return Object.prototype.hasOwnProperty.call(t,e)}e.r(t),e.d(t,{AnnotationElement:()=>we,ArrayElement:()=>F,BooleanElement:()=>L,CloneError:()=>fe,CollectionElement:()=>D,CommentElement:()=>Oe,DeepCloneError:()=>me,Element:()=>O,JSONSerialiser:()=>C,KeyValuePair:()=>E,LinkElement:()=>N,MemberElement:()=>I,Namespace:()=>Q,NullElement:()=>x,NumberElement:()=>z,ObjectElement:()=>R,ObjectSlice:()=>k,ParseResultElement:()=>je,RefElement:()=>K,ShallowCloneError:()=>pe,SourceMapElement:()=>V,StringElement:()=>j,cloneDeep:()=>be,cloneShallow:()=>Ee,hasElementSourceMap:()=>se,includesClasses:()=>oe,includesSymbols:()=>ie,isAnnotationElement:()=>Pe,isArrayElement:()=>ee,isBooleanElement:()=>Z,isCommentElement:()=>Se,isElement:()=>$,isLinkElement:()=>Ae,isMemberElement:()=>ne,isNullElement:()=>Y,isNumberElement:()=>X,isObjectElement:()=>te,isParseResultElement:()=>Ve,isPrimitiveElement:()=>re,isRefElement:()=>Me,isSourceMapElement:()=>Ce,isStringElement:()=>H,refract:()=>ke});const c="function"==typeof Object.is?Object.is:function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};var u=Object.prototype.toString;const l=function(){return"[object Arguments]"===u.call(arguments)?function(e){return"[object Arguments]"===u.call(e)}:function(e){return a("callee",e)}}();var h=!{toString:null}.propertyIsEnumerable("toString"),f=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=function(){return arguments.propertyIsEnumerable("length")}(),p=function(e,t){for(var n=0;n<e.length;){if(e[n]===t)return!0;n+=1}return!1};const y="function"!=typeof Object.keys||m?r(function(e){if(Object(e)!==e)return[];var t,n,r=[],s=m&&l(e);for(t in e)!a(t,e)||s&&"length"===t||(r[r.length]=t);if(h)for(n=f.length-1;n>=0;)a(t=f[n],e)&&!p(r,t)&&(r[r.length]=t),n-=1;return r}):r(function(e){return Object(e)!==e?[]:Object.keys(e)});const d=r(function(e){return null===e?"Null":void 0===e?"Undefined":Object.prototype.toString.call(e).slice(8,-1)});function b(e,t,n,r){var s=i(e);function a(e,t){return g(e,t,n.slice(),r.slice())}return!o(function(e,t){return!o(a,t,e)},i(t),s)}function g(e,t,n,r){if(c(e,t))return!0;var s,i,o=d(e);if(o!==d(t))return!1;if("function"==typeof e["fantasy-land/equals"]||"function"==typeof t["fantasy-land/equals"])return"function"==typeof e["fantasy-land/equals"]&&e["fantasy-land/equals"](t)&&"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](e);if("function"==typeof e.equals||"function"==typeof t.equals)return"function"==typeof e.equals&&e.equals(t)&&"function"==typeof t.equals&&t.equals(e);switch(o){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===(s=e.constructor,null==(i=String(s).match(/^function (\w*)/))?"":i[1]))return e===t;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof t||!c(e.valueOf(),t.valueOf()))return!1;break;case"Date":if(!c(e.valueOf(),t.valueOf()))return!1;break;case"Error":return e.name===t.name&&e.message===t.message;case"RegExp":if(e.source!==t.source||e.global!==t.global||e.ignoreCase!==t.ignoreCase||e.multiline!==t.multiline||e.sticky!==t.sticky||e.unicode!==t.unicode)return!1}for(var u=n.length-1;u>=0;){if(n[u]===e)return r[u]===t;u-=1}switch(o){case"Map":return e.size===t.size&&b(e.entries(),t.entries(),n.concat([e]),r.concat([t]));case"Set":return e.size===t.size&&b(e.values(),t.values(),n.concat([e]),r.concat([t]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var l=y(e);if(l.length!==y(t).length)return!1;var h=n.concat([e]),f=r.concat([t]);for(u=l.length-1;u>=0;){var m=l[u];if(!a(m,t)||!g(t[m],e[m],h,f))return!1;u-=1}return!0}const v=s(function(e,t){return g(e,t,[],[])});const E=class{key;value;constructor(e,t){this.key=e,this.value=t}toValue(){return{key:this.key?.toValue(),value:this.value?.toValue()}}};class _{elements;constructor(e){this.elements=e??[]}toValue(){return this.elements.map(e=>({key:e.key?.toValue(),value:e.value?.toValue()}))}map(e,t){return this.elements.map(n=>{const r=n.value,s=n.key;if(void 0===r||void 0===s)throw new Error("MemberElement must have both key and value");return void 0!==t?e.call(t,r,s,n):e(r,s,n)})}filter(e,t){const n=this.elements.filter(n=>{const r=n.value,s=n.key;return void 0!==r&&void 0!==s&&(void 0!==t?e.call(t,r,s,n):e(r,s,n))});return new _(n)}reject(e,t){const n=[];for(const r of this.elements){const s=r.value,i=r.key;void 0!==s&&void 0!==i&&(e.call(t,s,i,r)||n.push(r))}return new _(n)}forEach(e,t){this.elements.forEach((n,r)=>{const s=n.value,i=n.key;void 0!==s&&void 0!==i&&(void 0!==t?e.call(t,s,i,n,r):e(s,i,n,r))})}find(e,t){return this.elements.find(n=>{const r=n.value,s=n.key;return void 0!==r&&void 0!==s&&(void 0!==t?e.call(t,r,s,n):e(r,s,n))})}keys(){return this.elements.map(e=>e.key?.toValue()).filter(e=>void 0!==e)}values(){return this.elements.map(e=>e.value?.toValue()).filter(e=>void 0!==e)}get length(){return this.elements.length}get isEmpty(){return 0===this.length}get first(){return this.elements[0]}get(e){return this.elements[e]}push(e){return this.elements.push(e),this}includesKey(e){return this.elements.some(t=>t.key?.equals(e))}[Symbol.iterator](){return this.elements[Symbol.iterator]()}}const k=_;class w{parent;startLine;startCharacter;startOffset;endLine;endCharacter;endOffset;_storedElement="element";_content;_meta;_attributes;constructor(e,t,n){void 0!==t&&(this.meta=t),void 0!==n&&(this.attributes=n),void 0!==e&&(this.content=e)}get element(){return this._storedElement}set element(e){this._storedElement=e}get content(){return this._content}set content(e){if(e instanceof w)this._content=e;else if(null!=e&&"string"!=typeof e&&"number"!=typeof e&&"boolean"!=typeof e&&"bigint"!=typeof e&&"symbol"!=typeof e)if(e instanceof E)this._content=e;else if(e instanceof k)this._content=e.elements;else if(Array.isArray(e))this._content=e.map(e=>this.refract(e));else{if("object"!=typeof e)throw new Error("Cannot set content to value of type "+typeof e);this._content=Object.entries(e).map(([e,t])=>new this.MemberElement(e,t))}else this._content=e}get meta(){if(!this._meta){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._meta=new this.ObjectElement}return this._meta}set meta(e){e instanceof w?this._meta=e:this.meta.set(e??{})}get attributes(){if(!this._attributes){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._attributes=new this.ObjectElement}return this._attributes}set attributes(e){e instanceof w?this._attributes=e:this.attributes.set(e??{})}get id(){return this.isFrozen?this.getMetaProperty("id",""):(this.hasMetaProperty("id")||this.setMetaProperty("id",""),this.meta.get("id"))}set id(e){this.setMetaProperty("id",e)}get classes(){return this.isFrozen?this.getMetaProperty("classes",[]):(this.hasMetaProperty("classes")||this.setMetaProperty("classes",[]),this.meta.get("classes"))}set classes(e){this.setMetaProperty("classes",e)}get links(){return this.isFrozen?this.getMetaProperty("links",[]):(this.hasMetaProperty("links")||this.setMetaProperty("links",[]),this.meta.get("links"))}set links(e){this.setMetaProperty("links",e)}get children(){const{_content:e}=this;if(Array.isArray(e))return e;if(e instanceof E){const t=[];return e.key&&t.push(e.key),e.value&&t.push(e.value),t}return e instanceof w?[e]:[]}get isFrozen(){return Object.isFrozen(this)}freeze(){if(!this.isFrozen){this._meta&&(this._meta.parent=this,this._meta.freeze()),this._attributes&&(this._attributes.parent=this,this._attributes.freeze());for(const e of this.children)e.parent=this,e.freeze();Array.isArray(this._content)&&Object.freeze(this._content),Object.freeze(this)}}toValue(){const{_content:e}=this;return e instanceof w||e instanceof E?e.toValue():Array.isArray(e)?e.map(e=>e.toValue()):e}equals(e){const t=e instanceof w?e.toValue():e;return v(this.toValue(),t)}primitive(){}set(e){return this.content=e,this}toRef(e){const t=this.id.toValue();if(""===t)throw new Error("Cannot create reference to an element without an ID");const n=new this.RefElement(t);return"string"==typeof e&&(n.path=this.refract(e)),n}getMetaProperty(e,t){if(!this.hasMetaProperty(e)){if(void 0===t)return;const e=this.refract(t);return e&&this.isFrozen&&e.freeze(),e}return this.meta.get(e)}setMetaProperty(e,t){this.meta.set(e,t)}hasMetaProperty(e){return!this.isMetaEmpty&&this.meta.hasKey(e)}get isMetaEmpty(){return void 0===this._meta||this.meta.isEmpty}getAttributesProperty(e,t){if(!this.hasAttributesProperty(e)){if(this.isFrozen){const e=this.refract(t);return e.freeze(),e}this.attributes.set(e,t)}return this.attributes.get(e)}setAttributesProperty(e,t){this.attributes.set(e,t)}hasAttributesProperty(e){return!this.isAttributesEmpty&&this.attributes.hasKey(e)}get isAttributesEmpty(){return void 0===this._attributes||this.attributes.isEmpty}}const O=w;const j=class extends O{constructor(e,t,n){super(e,t,n),this.element="string"}primitive(){return"string"}get length(){return this.content?.length??0}};class A extends j{constructor(e,t,n){super(e,t,n),this.element="sourceMap"}static transfer(e,t){t.startLine=e.startLine,t.startCharacter=e.startCharacter,t.startOffset=e.startOffset,t.endLine=e.endLine,t.endCharacter=e.endCharacter,t.endOffset=e.endOffset}static from(e){const{startLine:t,startCharacter:n,startOffset:r,endLine:s,endCharacter:i,endOffset:o}=e;if("number"!=typeof t||"number"!=typeof n||"number"!=typeof r||"number"!=typeof s||"number"!=typeof i||"number"!=typeof o)return;const a="sm1:"+[t,n,r,s,i,o].map(P).join("");const c=new A(a);return c.startLine=t,c.startCharacter=n,c.startOffset=r,c.endLine=s,c.endCharacter=i,c.endOffset=o,c}applyTo(e){this.content&&([e.startLine,e.startCharacter,e.startOffset,e.endLine,e.endCharacter,e.endOffset]=function(e){const t=e.startsWith("sm1:")?e.slice(4):e,n=[];let r=0;for(let e=0;e<6;e++){const e=S(t,r);n.push(e.value),r=e.next}return n}(this.content))}}const M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function P(e){let t=e>>>0,n="";do{let e=31&t;t>>>=5,0!==t&&(e|=32),n+=M[e]}while(0!==t);return n}function S(e,t=0){let n=0,r=0,s=t;for(;;){const t=e[s++],i=M.indexOf(t);if(-1===i)throw new Error(`Invalid Base64 VLQ char: ${t}`);if(n|=(31&i)<<r,r+=5,!!!(32&i))break}return{value:n>>>0,next:s}}const V=A;const C=class{namespace;constructor(e){this.namespace=e||new this.Namespace}serialise(e){if(!(e instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${e}\` is not an Element instance`);const t={element:e.element};if(e.isMetaEmpty||(t.meta=this.serialiseObject(e.meta)),e.isAttributesEmpty||(t.attributes=this.serialiseObject(e.attributes)),!(e instanceof V)){const n=V.from(e);n&&(t.meta||(t.meta={}),t.meta.__mappings__=this.serialise(n))}const n=this.serialiseContent(e.content);return void 0!==n&&(t.content=n),t}deserialise(e){if(!e.element)throw new Error("Given value is not an object containing an element name");const t=new(this.namespace.getElementClass(e.element));let n;t.element!==e.element&&(t.element=e.element);let r=e.meta;if(e.meta?.__mappings__){const{__mappings__:t,...s}=e.meta;n=t,r=Object.keys(s).length>0?s:void 0}if(r&&this.deserialiseObject(r,t.meta),n){this.deserialise(n).applyTo(t)}e.attributes&&this.deserialiseObject(e.attributes,t.attributes);const s=this.deserialiseContent(e.content);return void 0===s&&null!==t.content||(t.content=s),t}serialiseContent(e){if(e instanceof this.namespace.elements.Element)return this.serialise(e);if(e instanceof this.namespace.KeyValuePair){const t=e,n={key:this.serialise(t.key)};return t.value&&(n.value=this.serialise(t.value)),n}if(e&&Array.isArray(e)){if(0===e.length)return;return e.map(e=>this.serialise(e))}return e}deserialiseContent(e){if(e){if(e.element)return this.deserialise(e);if(e.key){const t=new this.namespace.KeyValuePair(this.deserialise(e.key));return e.value&&(t.value=this.deserialise(e.value)),t}if(Array.isArray(e))return e.map(e=>this.deserialise(e))}return e}serialiseObject(e){const t={};if(e.forEach((e,n)=>{e&&(t[n.toValue()]=this.serialise(e))}),0!==Object.keys(t).length)return t}deserialiseObject(e,t){Object.keys(e).forEach(n=>{t.set(n,this.deserialise(e[n]))})}};const x=class extends O{constructor(e,t,n){super(e??null,t,n),this.element="null"}primitive(){return"null"}set(e){throw new Error("Cannot set the value of null")}};const z=class extends O{constructor(e,t,n){super(e,t,n),this.element="number"}primitive(){return"number"}};const L=class extends O{constructor(e,t,n){super(e,t,n),this.element="boolean"}primitive(){return"boolean"}};class q extends O{constructor(e,t,n){super(e||[],t,n)}get length(){return this._content.length}get isEmpty(){return 0===this.length}get first(){return this._content[0]}get second(){return this._content[1]}get last(){return this._content.at(-1)}push(...e){for(const t of e)this._content.push(this.refract(t));return this}shift(){return this._content.shift()}unshift(e){this._content.unshift(this.refract(e))}includes(e){return this._content.some(t=>t.equals(e))}findElements(e,t){const n=t||{},r=!!n.recursive,s=void 0===n.results?[]:n.results;for(let t=0;t<this._content.length;t+=1){const n=this._content[t],i=n;r&&"function"==typeof i.findElements&&i.findElements(e,{results:s,recursive:r}),e(n,t,void 0)&&s.push(n)}return s}find(e){const t=this.findElements(e,{recursive:!0});return new this.ArrayElement(t)}findByElement(e){return this.find(t=>t.element===e)}findByClass(e){return this.find(t=>{const n=t.classes;return"function"==typeof n.includes&&n.includes(e)})}getById(e){return this.find(t=>t.id.toValue()===e).first}concat(e){return new(0,this.constructor)(this._content.concat(e._content))}[Symbol.iterator](){return this._content[Symbol.iterator]()}}const D=q;const F=class extends D{constructor(e,t,n){super(e||[],t,n),this.element="array"}primitive(){return"array"}get(e){return this._content[e]}getValue(e){const t=this.get(e);if(t)return t.toValue()}set(e,t){return"number"==typeof e&&void 0!==t?this._content[e]=this.refract(t):this.content=e,this}remove(e){return this._content.splice(e,1)[0]??null}map(e,t){return this._content.map(e,t)}flatMap(e,t){return this._content.flatMap(e,t)}compactMap(e,t){const n=[];for(const r of this._content){const s=e.call(t,r);s&&n.push(s)}return n}filter(e,t){const n=this._content.filter(e,t);return new this.constructor(n)}reject(e,t){const n=[];for(const r of this._content)e.call(t,r)||n.push(r);return new this.constructor(n)}reduce(e,t){let n,r;void 0!==t?(n=0,r=this.refract(t)):(n=1,r=this.first);for(let t=n;t<this.length;t+=1){const n=e(r,this._content[t],t,this);r=void 0===n?n:this.refract(n)}return r}forEach(e,t){this._content.forEach((n,r)=>{e.call(t,n,r)})}empty(){return new this.constructor([])}};const I=class extends O{constructor(e,t,n,r){super(new E,n,r),this.element="member",void 0!==e&&(this.key=e),arguments.length>=2&&(this.value=t)}primitive(){return"member"}get key(){return this._content.key}set key(e){this._content.key=this.refract(e)}get value(){return this._content.value}set value(e){this._content.value=void 0===e?void 0:this.refract(e)}};const R=class extends D{constructor(e,t,n){super(e||[],t,n),this.element="object"}primitive(){return"object"}toValue(){return this._content.reduce((e,t)=>(e[t.key.toValue()]=t.value?t.value.toValue():void 0,e),{})}get(e){const t=this.getMember(e);if(t)return t.value}getValue(e){const t=this.get(e);if(t)return t.toValue()}getMember(e){if(void 0!==e)return this._content.find(t=>t.key.toValue()===e)}remove(e){let t=null;return this.content=this._content.filter(n=>n.key.toValue()!==e||(t=n,!1)),t}getKey(e){const t=this.getMember(e);if(t)return t.key}set(e,t){if("string"==typeof e){const n=this.getMember(e);n?n.value=t:this._content.push(new I(e,t))}else if("object"==typeof e&&!Array.isArray(e))for(const t of Object.keys(e))this.set(t,e[t]);return this}keys(){return this._content.map(e=>e.key.toValue())}values(){return this._content.map(e=>e.value.toValue())}hasKey(e){return this._content.some(t=>t.key.equals(e))}items(){return this._content.map(e=>[e.key.toValue(),e.value.toValue()])}map(e,t){return this._content.map(n=>e.call(t,n.value,n.key,n))}compactMap(e,t){const n=[];return this.forEach((r,s,i)=>{const o=e.call(t,r,s,i);o&&n.push(o)}),n}filter(e,t){return new k(this._content).filter(e,t)}reject(e,t){const n=[];for(const r of this._content)e.call(t,r.value,r.key,r)||n.push(r);return new k(n)}forEach(e,t){this._content.forEach(n=>e.call(t,n.value,n.key,n))}reduce(e,t){let n,r;void 0!==t?(n=0,r=this.refract(t)):(n=1,r=this._content[0]?.value);for(let t=n;t<this._content.length;t+=1){const n=this._content[t],s=e(r,n.value,n.key,n,this);r=void 0===s?s:this.refract(s)}return r}empty(){return new this.constructor([])}};const K=class extends O{constructor(e,t,n){super(e||[],t,n),this.element="ref",this.path||(this.path="element")}get path(){if(this.hasAttributesProperty("path"))return this.attributes.get("path")}set path(e){this.attributes.set("path",e)}};const N=class extends O{constructor(e,t,n){super(e||[],t,n),this.element="link"}get relation(){if(this.hasAttributesProperty("relation"))return this.attributes.get("relation")}set relation(e){this.attributes.set("relation",e)}get href(){if(this.hasAttributesProperty("href"))return this.attributes.get("href")}set href(e){this.attributes.set("href",e)}},B=e=>null===e,T=e=>"string"==typeof e,U=e=>"number"==typeof e,W=e=>"boolean"==typeof e,G=e=>null!==e&&"object"==typeof e;class J{elementMap={};elementDetection=[];Element;KeyValuePair;_elements;_attributeElementKeys=[];_attributeElementArrayKeys=[];constructor(e){this.Element=O,this.KeyValuePair=E,e&&e.noDefault||this.useDefault()}use(e){return e.namespace&&e.namespace({base:this}),e.load&&e.load({base:this}),this}useDefault(){return this.register("null",x).register("string",j).register("number",z).register("boolean",L).register("array",F).register("object",R).register("member",I).register("ref",K).register("link",N).register("sourceMap",V),this.detect(B,x,!1).detect(T,j,!1).detect(U,z,!1).detect(W,L,!1).detect(Array.isArray,F,!1).detect(G,R,!1),this}register(e,t){return this._elements=void 0,this.elementMap[e]=t,this}unregister(e){return this._elements=void 0,delete this.elementMap[e],this}detect(e,t,n){return void 0===n||n?this.elementDetection.unshift([e,t]):this.elementDetection.push([e,t]),this}toElement(e){if(e instanceof this.Element)return e;let t;for(const[n,r]of this.elementDetection)if(n(e)){t=new r(e);break}return t}getElementClass(e){const t=this.elementMap[e];return void 0===t?this.Element:t}fromRefract(e){return this.serialiser.deserialise(e)}toRefract(e){return this.serialiser.serialise(e)}get elements(){return void 0===this._elements&&(this._elements={Element:this.Element},Object.keys(this.elementMap).forEach(e=>{const t=e[0].toUpperCase()+e.substring(1);this._elements[t]=this.elementMap[e]})),this._elements}get serialiser(){return new C(this)}}C.prototype.Namespace=J;const Q=J,$=e=>e instanceof O,H=e=>e instanceof j,X=e=>e instanceof z,Y=e=>e instanceof x,Z=e=>e instanceof L,ee=e=>e instanceof F,te=e=>e instanceof R,ne=e=>e instanceof I,re=e=>te(e)&&"object"===e.element||ee(e)&&"array"===e.element||Z(e)&&"boolean"===e.element||X(e)&&"number"===e.element||H(e)&&"string"===e.element||Y(e)&&"null"===e.element||ne(e)&&"member"===e.element,se=e=>"number"==typeof e.startLine&&"number"==typeof e.startCharacter&&"number"==typeof e.startOffset&&"number"==typeof e.endLine&&"number"==typeof e.endCharacter&&"number"==typeof e.endOffset,ie=(e,t)=>{if(0===t.length)return!0;if(!e.hasAttributesProperty("symbols"))return!1;const n=e.attributes.get("symbols");return!!ee(n)&&t.every(e=>n.includes(e))},oe=(e,t)=>0===t.length||!!$(e)&&(!e.isMetaEmpty&&(!!e.hasMetaProperty("classes")&&t.every(t=>e.classes.includes(t))));class ae extends AggregateError{constructor(e,t,n){super(e,t,n),this.name=this.constructor.name,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const ce=ae;class ue extends Error{static[Symbol.hasInstance](e){return super[Symbol.hasInstance](e)||Function.prototype[Symbol.hasInstance].call(ce,e)}constructor(e,t){super(e,t),this.name=this.constructor.name,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const le=ue;const he=class extends le{constructor(e,t){if(super(e,t),null!=t&&"object"==typeof t){const{cause:e,...n}=t;Object.assign(this,n)}}};const fe=class extends he{value;constructor(e,t){super(e,t),void 0!==t&&(this.value=t.value)}};const me=class extends fe{};const pe=class extends fe{},ye=(e,t)=>{const{visited:n=new WeakMap}=t,r={...t,visited:n};if(n.has(e))return n.get(e);const s=ve(e);n.set(e,s);const{content:i}=e;return Array.isArray(i)?s.content=i.map(e=>ye(e,r)):$(i)?s.content=ye(i,r):s.content=i instanceof E?de(i,r):i,s},de=(e,t)=>{const{visited:n=new WeakMap}=t,r={...t,visited:n};if(n.has(e))return n.get(e);const{key:s,value:i}=e,o=void 0!==s?ye(s,r):void 0,a=void 0!==i?ye(i,r):void 0,c=new E(o,a);return n.set(e,c),c},be=(e,t={})=>{if(e instanceof E)return de(e,t);if(e instanceof k)return((e,t)=>{const{visited:n=new WeakMap}=t,r={...t,visited:n};if(n.has(e))return n.get(e);const s=[...e].map(e=>ye(e,r)),i=new k(s);return n.set(e,i),i})(e,t);if($(e))return ye(e,t);throw new me("Value provided to cloneDeep function couldn't be cloned",{value:e})};be.safe=e=>{try{return be(e)}catch{return e}};const ge=e=>{const{key:t,value:n}=e;return new E(t,n)},ve=e=>{const t=new(0,e.constructor);t.element=e.element,e.isMetaEmpty||(t.meta=be(e.meta)),e.isAttributesEmpty||(t.attributes=be(e.attributes)),se(e)&&V.transfer(e,t);const{content:n}=e;return $(n)?t.content=ve(n):Array.isArray(n)?t.content=[...n]:t.content=n instanceof E?ge(n):n,t},Ee=e=>{if(e instanceof E)return ge(e);if(e instanceof k)return(e=>{const t=[...e];return new k(t)})(e);if($(e))return ve(e);throw new pe("Value provided to cloneShallow function couldn't be cloned",{value:e})};function _e(e){return void 0===e?new x:ke(e)}function ke(e){if(e instanceof O)return e;if("string"==typeof e)return new j(e);if("number"==typeof e)return new z(e);if("boolean"==typeof e)return new L(e);if(null===e)return new x;if(Array.isArray(e))return new F(e.map(_e));if("object"==typeof e)return new R(e);throw new Error("Cannot refract value of type "+typeof e)}Ee.safe=e=>{try{return Ee(e)}catch{return e}},O.prototype.ObjectElement=R,O.prototype.ArrayElement=F,O.prototype.RefElement=K,O.prototype.MemberElement=I,O.prototype.refract=ke;const we=class extends j{constructor(e,t,n){super(e,t,n),this.element="annotation"}get code(){if(this.hasAttributesProperty("code"))return this.attributes.get("code")}set code(e){this.attributes.set("code",e)}};const Oe=class extends j{constructor(e,t,n){super(e,t,n),this.element="comment"}};const je=class extends F{constructor(e,t,n){super(e,t,n),this.element="parseResult"}get api(){return this.filter(e=>oe(e,["api"])).first}get results(){return this.filter(e=>oe(e,["result"]))}get result(){return this.results.first}get annotations(){return this.filter(e=>"annotation"===e.element)}get warnings(){return this.filter(e=>"annotation"===e.element&&oe(e,["warning"]))}get errors(){return this.filter(e=>"annotation"===e.element&&oe(e,["error"]))}get isEmpty(){return 0===this.reject(e=>"annotation"===e.element).length}replaceResult(e){const{result:t}=this;if(void 0===t)return!1;const n=this._content,r=n.findIndex(e=>e===t);return-1!==r&&(n[r]=e,!0)}},Ae=e=>e instanceof N,Me=e=>e instanceof K,Pe=e=>e instanceof we,Se=e=>e instanceof Oe,Ve=e=>e instanceof je,Ce=e=>e instanceof V;return t})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.apidomDatamodel=t():e.apidomDatamodel=t()}(self,()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return null!=e&&"object"==typeof e&&!0===e["@@functional/placeholder"]}function r(e){return function t(r){return 0===arguments.length||n(r)?t:e.apply(this,arguments)}}function s(e){return function t(s,i){switch(arguments.length){case 0:return t;case 1:return n(s)?t:r(function(t){return e(s,t)});default:return n(s)&&n(i)?t:n(s)?r(function(t){return e(t,i)}):n(i)?r(function(t){return e(s,t)}):e(s,i)}}}function i(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function o(e,t,n){for(var r=0,s=n.length;r<s;){if(e(t,n[r]))return!0;r+=1}return!1}function a(e,t){return Object.prototype.hasOwnProperty.call(t,e)}e.r(t),e.d(t,{AnnotationElement:()=>Se,ArrayElement:()=>B,BooleanElement:()=>K,CloneError:()=>ge,CollectionElement:()=>x,CommentElement:()=>Ce,DeepCloneError:()=>ve,Element:()=>A,JSONSerialiser:()=>q,KeyValuePair:()=>E,LinkElement:()=>T,MemberElement:()=>z,Namespace:()=>H,NullElement:()=>F,NumberElement:()=>R,ObjectElement:()=>L,ObjectSlice:()=>w,ParseResultElement:()=>Ve,RefElement:()=>N,ShallowCloneError:()=>Ee,SourceMapElement:()=>C,StringElement:()=>O,StyleElement:()=>I,cloneDeep:()=>ke,cloneShallow:()=>je,hasElementSourceMap:()=>ue,hasElementStyle:()=>le,includesClasses:()=>fe,includesSymbols:()=>he,isAnnotationElement:()=>Le,isArrayElement:()=>ie,isBooleanElement:()=>se,isCommentElement:()=>De,isElement:()=>ee,isLinkElement:()=>xe,isMemberElement:()=>ae,isNullElement:()=>re,isNumberElement:()=>ne,isObjectElement:()=>oe,isParseResultElement:()=>Ie,isPrimitiveElement:()=>ce,isRefElement:()=>ze,isSourceMapElement:()=>qe,isStringElement:()=>te,refract:()=>Pe});const c="function"==typeof Object.is?Object.is:function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};var l=Object.prototype.toString;const u=function(){return"[object Arguments]"===l.call(arguments)?function(e){return"[object Arguments]"===l.call(e)}:function(e){return a("callee",e)}}();var h=!{toString:null}.propertyIsEnumerable("toString"),f=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=function(){return arguments.propertyIsEnumerable("length")}(),p=function(e,t){for(var n=0;n<e.length;){if(e[n]===t)return!0;n+=1}return!1};const y="function"!=typeof Object.keys||m?r(function(e){if(Object(e)!==e)return[];var t,n,r=[],s=m&&u(e);for(t in e)!a(t,e)||s&&"length"===t||(r[r.length]=t);if(h)for(n=f.length-1;n>=0;)a(t=f[n],e)&&!p(r,t)&&(r[r.length]=t),n-=1;return r}):r(function(e){return Object(e)!==e?[]:Object.keys(e)});const d=r(function(e){return null===e?"Null":void 0===e?"Undefined":Object.prototype.toString.call(e).slice(8,-1)});function b(e,t,n,r){var s=i(e);function a(e,t){return g(e,t,n.slice(),r.slice())}return!o(function(e,t){return!o(a,t,e)},i(t),s)}function g(e,t,n,r){if(c(e,t))return!0;var s,i,o=d(e);if(o!==d(t))return!1;if("function"==typeof e["fantasy-land/equals"]||"function"==typeof t["fantasy-land/equals"])return"function"==typeof e["fantasy-land/equals"]&&e["fantasy-land/equals"](t)&&"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](e);if("function"==typeof e.equals||"function"==typeof t.equals)return"function"==typeof e.equals&&e.equals(t)&&"function"==typeof t.equals&&t.equals(e);switch(o){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===(s=e.constructor,null==(i=String(s).match(/^function (\w*)/))?"":i[1]))return e===t;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof t||!c(e.valueOf(),t.valueOf()))return!1;break;case"Date":if(!c(e.valueOf(),t.valueOf()))return!1;break;case"Error":return e.name===t.name&&e.message===t.message;case"RegExp":if(e.source!==t.source||e.global!==t.global||e.ignoreCase!==t.ignoreCase||e.multiline!==t.multiline||e.sticky!==t.sticky||e.unicode!==t.unicode)return!1}for(var l=n.length-1;l>=0;){if(n[l]===e)return r[l]===t;l-=1}switch(o){case"Map":return e.size===t.size&&b(e.entries(),t.entries(),n.concat([e]),r.concat([t]));case"Set":return e.size===t.size&&b(e.values(),t.values(),n.concat([e]),r.concat([t]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var u=y(e);if(u.length!==y(t).length)return!1;var h=n.concat([e]),f=r.concat([t]);for(l=u.length-1;l>=0;){var m=u[l];if(!a(m,t)||!g(t[m],e[m],h,f))return!1;l-=1}return!0}const v=s(function(e,t){return g(e,t,[],[])});const E=class{key;value;constructor(e,t){this.key=e,this.value=t}toValue(){return{key:this.key?.toValue(),value:this.value?.toValue()}}};class _{elements;constructor(e){this.elements=e??[]}toValue(){return this.elements.map(e=>({key:e.key?.toValue(),value:e.value?.toValue()}))}map(e,t){return this.elements.map(n=>{const r=n.value,s=n.key;if(void 0===r||void 0===s)throw new Error("MemberElement must have both key and value");return void 0!==t?e.call(t,r,s,n):e(r,s,n)})}filter(e,t){const n=this.elements.filter(n=>{const r=n.value,s=n.key;return void 0!==r&&void 0!==s&&(void 0!==t?e.call(t,r,s,n):e(r,s,n))});return new _(n)}reject(e,t){const n=[];for(const r of this.elements){const s=r.value,i=r.key;void 0!==s&&void 0!==i&&(e.call(t,s,i,r)||n.push(r))}return new _(n)}forEach(e,t){this.elements.forEach((n,r)=>{const s=n.value,i=n.key;void 0!==s&&void 0!==i&&(void 0!==t?e.call(t,s,i,n,r):e(s,i,n,r))})}find(e,t){return this.elements.find(n=>{const r=n.value,s=n.key;return void 0!==r&&void 0!==s&&(void 0!==t?e.call(t,r,s,n):e(r,s,n))})}keys(){return this.elements.map(e=>e.key?.toValue()).filter(e=>void 0!==e)}values(){return this.elements.map(e=>e.value?.toValue()).filter(e=>void 0!==e)}get length(){return this.elements.length}get isEmpty(){return 0===this.length}get first(){return this.elements[0]}get(e){return this.elements[e]}push(e){return this.elements.push(e),this}includesKey(e){return this.elements.some(t=>t.key?.equals(e))}[Symbol.iterator](){return this.elements[Symbol.iterator]()}}const w=_;class k{parent;style;startLine;startCharacter;startOffset;endLine;endCharacter;endOffset;_storedElement="element";_content;_meta;_attributes;constructor(e,t,n){void 0!==t&&(this.meta=t),void 0!==n&&(this.attributes=n),void 0!==e&&(this.content=e)}get element(){return this._storedElement}set element(e){this._storedElement=e}get content(){return this._content}set content(e){if(e instanceof k)this._content=e;else if(null!=e&&"string"!=typeof e&&"number"!=typeof e&&"boolean"!=typeof e&&"bigint"!=typeof e&&"symbol"!=typeof e)if(e instanceof E)this._content=e;else if(e instanceof w)this._content=e.elements;else if(Array.isArray(e))this._content=e.map(e=>this.refract(e));else{if("object"!=typeof e)throw new Error("Cannot set content to value of type "+typeof e);this._content=Object.entries(e).map(([e,t])=>new this.MemberElement(e,t))}else this._content=e}get meta(){if(!this._meta){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._meta=new this.ObjectElement}return this._meta}set meta(e){e instanceof k?this._meta=e:this.meta.set(e??{})}get attributes(){if(!this._attributes){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._attributes=new this.ObjectElement}return this._attributes}set attributes(e){e instanceof k?this._attributes=e:this.attributes.set(e??{})}get id(){return this.isFrozen?this.getMetaProperty("id",""):(this.hasMetaProperty("id")||this.setMetaProperty("id",""),this.meta.get("id"))}set id(e){this.setMetaProperty("id",e)}get classes(){return this.isFrozen?this.getMetaProperty("classes",[]):(this.hasMetaProperty("classes")||this.setMetaProperty("classes",[]),this.meta.get("classes"))}set classes(e){this.setMetaProperty("classes",e)}get links(){return this.isFrozen?this.getMetaProperty("links",[]):(this.hasMetaProperty("links")||this.setMetaProperty("links",[]),this.meta.get("links"))}set links(e){this.setMetaProperty("links",e)}get children(){const{_content:e}=this;if(Array.isArray(e))return e;if(e instanceof E){const t=[];return e.key&&t.push(e.key),e.value&&t.push(e.value),t}return e instanceof k?[e]:[]}get isFrozen(){return Object.isFrozen(this)}freeze(){if(!this.isFrozen){this._meta&&(this._meta.parent=this,this._meta.freeze()),this._attributes&&(this._attributes.parent=this,this._attributes.freeze());for(const e of this.children)e.parent=this,e.freeze();Array.isArray(this._content)&&Object.freeze(this._content),Object.freeze(this)}}toValue(){const{_content:e}=this;return e instanceof k||e instanceof E?e.toValue():Array.isArray(e)?e.map(e=>e.toValue()):e}equals(e){const t=e instanceof k?e.toValue():e;return v(this.toValue(),t)}primitive(){}set(e){return this.content=e,this}toRef(e){const t=this.id.toValue();if(""===t)throw new Error("Cannot create reference to an element without an ID");const n=new this.RefElement(t);return"string"==typeof e&&(n.path=this.refract(e)),n}getMetaProperty(e,t){if(!this.hasMetaProperty(e)){if(void 0===t)return;const e=this.refract(t);return e&&this.isFrozen&&e.freeze(),e}return this.meta.get(e)}setMetaProperty(e,t){this.meta.set(e,t)}hasMetaProperty(e){return!this.isMetaEmpty&&this.meta.hasKey(e)}get isMetaEmpty(){return void 0===this._meta||this.meta.isEmpty}getAttributesProperty(e,t){if(!this.hasAttributesProperty(e)){if(this.isFrozen){const e=this.refract(t);return e.freeze(),e}this.attributes.set(e,t)}return this.attributes.get(e)}setAttributesProperty(e,t){this.attributes.set(e,t)}hasAttributesProperty(e){return!this.isAttributesEmpty&&this.attributes.hasKey(e)}get isAttributesEmpty(){return void 0===this._attributes||this.attributes.isEmpty}}const A=k;const O=class extends A{constructor(e,t,n){super(e,t,n),this.element="string"}primitive(){return"string"}get length(){return this.content?.length??0}};class j extends O{constructor(e,t,n){super(e,t,n),this.element="sourceMap"}static transfer(e,t){t.startLine=e.startLine,t.startCharacter=e.startCharacter,t.startOffset=e.startOffset,t.endLine=e.endLine,t.endCharacter=e.endCharacter,t.endOffset=e.endOffset}static from(e){const{startLine:t,startCharacter:n,startOffset:r,endLine:s,endCharacter:i,endOffset:o}=e;if("number"!=typeof t||"number"!=typeof n||"number"!=typeof r||"number"!=typeof s||"number"!=typeof i||"number"!=typeof o)return;const a="sm1:"+[t,n,r,s,i,o].map(P).join("");const c=new j(a);return c.startLine=t,c.startCharacter=n,c.startOffset=r,c.endLine=s,c.endCharacter=i,c.endOffset=o,c}applyTo(e){this.content&&([e.startLine,e.startCharacter,e.startOffset,e.endLine,e.endCharacter,e.endOffset]=function(e){const t=e.startsWith("sm1:")?e.slice(4):e,n=[];let r=0;for(let e=0;e<6;e++){const e=S(t,r);n.push(e.value),r=e.next}return n}(this.content))}}const M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function P(e){let t=e>>>0,n="";do{let e=31&t;t>>>=5,0!==t&&(e|=32),n+=M[e]}while(0!==t);return n}function S(e,t=0){let n=0,r=0,s=t;for(;;){const t=e[s++],i=M.indexOf(t);if(-1===i)throw new Error(`Invalid Base64 VLQ char: ${t}`);if(n|=(31&i)<<r,r+=5,!!!(32&i))break}return{value:n>>>0,next:s}}const C=j;class V extends A{constructor(e,t,n){super(e||[],t,n)}get length(){return this._content.length}get isEmpty(){return 0===this.length}get first(){return this._content[0]}get second(){return this._content[1]}get last(){return this._content.at(-1)}push(...e){for(const t of e)this._content.push(this.refract(t));return this}shift(){return this._content.shift()}unshift(e){this._content.unshift(this.refract(e))}includes(e){return this._content.some(t=>t.equals(e))}findElements(e,t){const n=t||{},r=!!n.recursive,s=void 0===n.results?[]:n.results;for(let t=0;t<this._content.length;t+=1){const n=this._content[t],i=n;r&&"function"==typeof i.findElements&&i.findElements(e,{results:s,recursive:r}),e(n,t,void 0)&&s.push(n)}return s}find(e){const t=this.findElements(e,{recursive:!0});return new this.ArrayElement(t)}findByElement(e){return this.find(t=>t.element===e)}findByClass(e){return this.find(t=>{const n=t.classes;return"function"==typeof n.includes&&n.includes(e)})}getById(e){return this.find(t=>t.id.toValue()===e).first}concat(e){return new(0,this.constructor)(this._content.concat(e._content))}[Symbol.iterator](){return this._content[Symbol.iterator]()}}const x=V;const z=class extends A{constructor(e,t,n,r){super(new E,n,r),this.element="member",void 0!==e&&(this.key=e),arguments.length>=2&&(this.value=t)}primitive(){return"member"}get key(){return this._content.key}set key(e){this._content.key=this.refract(e)}get value(){return this._content.value}set value(e){this._content.value=void 0===e?void 0:this.refract(e)}};const L=class extends x{constructor(e,t,n){super(e||[],t,n),this.element="object"}primitive(){return"object"}toValue(){return this._content.reduce((e,t)=>(e[t.key.toValue()]=t.value?t.value.toValue():void 0,e),{})}get(e){const t=this.getMember(e);if(t)return t.value}getValue(e){const t=this.get(e);if(t)return t.toValue()}getMember(e){if(void 0!==e)return this._content.find(t=>t.key.toValue()===e)}remove(e){let t=null;return this.content=this._content.filter(n=>n.key.toValue()!==e||(t=n,!1)),t}getKey(e){const t=this.getMember(e);if(t)return t.key}set(e,t){if("string"==typeof e){const n=this.getMember(e);n?n.value=t:this._content.push(new z(e,t))}else if("object"==typeof e&&!Array.isArray(e))for(const t of Object.keys(e))this.set(t,e[t]);return this}keys(){return this._content.map(e=>e.key.toValue())}values(){return this._content.map(e=>e.value.toValue())}hasKey(e){return this._content.some(t=>t.key.equals(e))}items(){return this._content.map(e=>[e.key.toValue(),e.value.toValue()])}map(e,t){return this._content.map(n=>e.call(t,n.value,n.key,n))}compactMap(e,t){const n=[];return this.forEach((r,s,i)=>{const o=e.call(t,r,s,i);o&&n.push(o)}),n}filter(e,t){return new w(this._content).filter(e,t)}reject(e,t){const n=[];for(const r of this._content)e.call(t,r.value,r.key,r)||n.push(r);return new w(n)}forEach(e,t){this._content.forEach(n=>e.call(t,n.value,n.key,n))}reduce(e,t){let n,r;void 0!==t?(n=0,r=this.refract(t)):(n=1,r=this._content[0]?.value);for(let t=n;t<this._content.length;t+=1){const n=this._content[t],s=e(r,n.value,n.key,n,this);r=void 0===s?s:this.refract(s)}return r}empty(){return new this.constructor([])}};class D extends L{constructor(e,t,n){super(e,t,n),this.element="__styles__"}static transfer(e,t){t.style=e.style}static from(e){if(e.style)return new D(e.style)}applyTo(e){e.style=this.toValue()}}const I=D;const q=class{namespace;constructor(e){this.namespace=e||new this.Namespace}serialise(e){if(!(e instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${e}\` is not an Element instance`);const t={element:e.element};if(e.isMetaEmpty||(t.meta=this.serialiseObject(e.meta)),e.isAttributesEmpty||(t.attributes=this.serialiseObject(e.attributes)),!(e instanceof C)){const n=C.from(e);n&&(t.meta||(t.meta={}),t.meta.__mappings__=this.serialise(n))}if(!(e instanceof I)){const n=I.from(e);n&&(t.meta||(t.meta={}),t.meta.__styles__=this.serialise(n))}const n=this.serialiseContent(e.content);return void 0!==n&&(t.content=n),t}deserialise(e){if(!e.element)throw new Error("Given value is not an object containing an element name");const t=new(this.namespace.getElementClass(e.element));let n,r;t.element!==e.element&&(t.element=e.element);let s=e.meta;if(e.meta?.__mappings__||e.meta?.__styles__){const{__mappings__:t,__styles__:i,...o}=e.meta;n=t,r=i,s=Object.keys(o).length>0?o:void 0}if(s&&this.deserialiseObject(s,t.meta),n){this.deserialise(n).applyTo(t)}if(r){this.deserialise(r).applyTo(t)}e.attributes&&this.deserialiseObject(e.attributes,t.attributes);const i=this.deserialiseContent(e.content);return void 0===i&&null!==t.content||(t.content=i),t}serialiseContent(e){if(e instanceof this.namespace.elements.Element)return this.serialise(e);if(e instanceof this.namespace.KeyValuePair){const t=e,n={key:this.serialise(t.key)};return t.value&&(n.value=this.serialise(t.value)),n}if(e&&Array.isArray(e)){if(0===e.length)return;return e.map(e=>this.serialise(e))}return e}deserialiseContent(e){if(e){if(e.element)return this.deserialise(e);if(e.key){const t=new this.namespace.KeyValuePair(this.deserialise(e.key));return e.value&&(t.value=this.deserialise(e.value)),t}if(Array.isArray(e))return e.map(e=>this.deserialise(e))}return e}serialiseObject(e){const t={};if(e.forEach((e,n)=>{e&&(t[n.toValue()]=this.serialise(e))}),0!==Object.keys(t).length)return t}deserialiseObject(e,t){Object.keys(e).forEach(n=>{t.set(n,this.deserialise(e[n]))})}};const F=class extends A{constructor(e,t,n){super(e??null,t,n),this.element="null"}primitive(){return"null"}set(e){throw new Error("Cannot set the value of null")}};const R=class extends A{constructor(e,t,n){super(e,t,n),this.element="number"}primitive(){return"number"}};const K=class extends A{constructor(e,t,n){super(e,t,n),this.element="boolean"}primitive(){return"boolean"}};const B=class extends x{constructor(e,t,n){super(e||[],t,n),this.element="array"}primitive(){return"array"}get(e){return this._content[e]}getValue(e){const t=this.get(e);if(t)return t.toValue()}set(e,t){return"number"==typeof e&&void 0!==t?this._content[e]=this.refract(t):this.content=e,this}remove(e){return this._content.splice(e,1)[0]??null}map(e,t){return this._content.map(e,t)}flatMap(e,t){return this._content.flatMap(e,t)}compactMap(e,t){const n=[];for(const r of this._content){const s=e.call(t,r);s&&n.push(s)}return n}filter(e,t){const n=this._content.filter(e,t);return new this.constructor(n)}reject(e,t){const n=[];for(const r of this._content)e.call(t,r)||n.push(r);return new this.constructor(n)}reduce(e,t){let n,r;void 0!==t?(n=0,r=this.refract(t)):(n=1,r=this.first);for(let t=n;t<this.length;t+=1){const n=e(r,this._content[t],t,this);r=void 0===n?n:this.refract(n)}return r}forEach(e,t){this._content.forEach((n,r)=>{e.call(t,n,r)})}empty(){return new this.constructor([])}};const N=class extends A{constructor(e,t,n){super(e||[],t,n),this.element="ref",this.path||(this.path="element")}get path(){if(this.hasAttributesProperty("path"))return this.attributes.get("path")}set path(e){this.attributes.set("path",e)}};const T=class extends A{constructor(e,t,n){super(e||[],t,n),this.element="link"}get relation(){if(this.hasAttributesProperty("relation"))return this.attributes.get("relation")}set relation(e){this.attributes.set("relation",e)}get href(){if(this.hasAttributesProperty("href"))return this.attributes.get("href")}set href(e){this.attributes.set("href",e)}},U=e=>null===e,W=e=>"string"==typeof e,G=e=>"number"==typeof e,J=e=>"boolean"==typeof e,Q=e=>null!==e&&"object"==typeof e;class ${elementMap={};elementDetection=[];Element;KeyValuePair;_elements;_attributeElementKeys=[];_attributeElementArrayKeys=[];constructor(e){this.Element=A,this.KeyValuePair=E,e&&e.noDefault||this.useDefault()}use(e){return e.namespace&&e.namespace({base:this}),e.load&&e.load({base:this}),this}useDefault(){return this.register("null",F).register("string",O).register("number",R).register("boolean",K).register("array",B).register("object",L).register("member",z).register("ref",N).register("link",T).register("sourceMap",C),this.detect(U,F,!1).detect(W,O,!1).detect(G,R,!1).detect(J,K,!1).detect(Array.isArray,B,!1).detect(Q,L,!1),this}register(e,t){return this._elements=void 0,this.elementMap[e]=t,this}unregister(e){return this._elements=void 0,delete this.elementMap[e],this}detect(e,t,n){return void 0===n||n?this.elementDetection.unshift([e,t]):this.elementDetection.push([e,t]),this}toElement(e){if(e instanceof this.Element)return e;let t;for(const[n,r]of this.elementDetection)if(n(e)){t=new r(e);break}return t}getElementClass(e){const t=this.elementMap[e];return void 0===t?this.Element:t}fromRefract(e){return this.serialiser.deserialise(e)}toRefract(e){return this.serialiser.serialise(e)}get elements(){return void 0===this._elements&&(this._elements={Element:this.Element},Object.keys(this.elementMap).forEach(e=>{const t=e[0].toUpperCase()+e.substring(1);this._elements[t]=this.elementMap[e]})),this._elements}get serialiser(){return new q(this)}}q.prototype.Namespace=$;const H=$;function X(e,t,n){if(n||(n=new Y),function(e){var t=typeof e;return null==e||"object"!=t&&"function"!=t}(e))return e;var r,s=function(r){var s=n.get(e);if(s)return s;for(var i in n.set(e,r),e)Object.prototype.hasOwnProperty.call(e,i)&&(r[i]=t?X(e[i],!0,n):e[i]);return r};switch(d(e)){case"Object":return s(Object.create(Object.getPrototypeOf(e)));case"Array":return s(Array(e.length));case"Date":return new Date(e.valueOf());case"RegExp":return r=e,new RegExp(r.source,r.flags?r.flags:(r.global?"g":"")+(r.ignoreCase?"i":"")+(r.multiline?"m":"")+(r.sticky?"y":"")+(r.unicode?"u":"")+(r.dotAll?"s":""));case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":return e.slice();default:return e}}var Y=function(){function e(){this.map={},this.length=0}return e.prototype.set=function(e,t){var n=this.hash(e),r=this.map[n];r||(this.map[n]=r=[]),r.push([e,t]),this.length+=1},e.prototype.hash=function(e){var t=[];for(var n in e)t.push(Object.prototype.toString.call(e[n]));return t.join()},e.prototype.get=function(e){if(this.length<=180)for(var t in this.map)for(var n=this.map[t],r=0;r<n.length;r+=1){if((i=n[r])[0]===e)return i[1]}else{var s=this.hash(e);if(n=this.map[s])for(r=0;r<n.length;r+=1){var i;if((i=n[r])[0]===e)return i[1]}}},e}();const Z=r(function(e){return null!=e&&"function"==typeof e.clone?e.clone():X(e,!0)}),ee=e=>e instanceof A,te=e=>e instanceof O,ne=e=>e instanceof R,re=e=>e instanceof F,se=e=>e instanceof K,ie=e=>e instanceof B,oe=e=>e instanceof L,ae=e=>e instanceof z,ce=e=>oe(e)&&"object"===e.element||ie(e)&&"array"===e.element||se(e)&&"boolean"===e.element||ne(e)&&"number"===e.element||te(e)&&"string"===e.element||re(e)&&"null"===e.element||ae(e)&&"member"===e.element,le=e=>void 0!==e.style,ue=e=>"number"==typeof e.startLine&&"number"==typeof e.startCharacter&&"number"==typeof e.startOffset&&"number"==typeof e.endLine&&"number"==typeof e.endCharacter&&"number"==typeof e.endOffset,he=(e,t)=>{if(0===t.length)return!0;if(!e.hasAttributesProperty("symbols"))return!1;const n=e.attributes.get("symbols");return!!ie(n)&&t.every(e=>n.includes(e))},fe=(e,t)=>0===t.length||!!ee(e)&&(!e.isMetaEmpty&&(!!e.hasMetaProperty("classes")&&t.every(t=>e.classes.includes(t))));class me extends AggregateError{constructor(e,t,n){super(e,t,n),this.name=this.constructor.name,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const pe=me;class ye extends Error{static[Symbol.hasInstance](e){return super[Symbol.hasInstance](e)||Function.prototype[Symbol.hasInstance].call(pe,e)}constructor(e,t){super(e,t),this.name=this.constructor.name,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const de=ye;const be=class extends de{constructor(e,t){if(super(e,t),null!=t&&"object"==typeof t){const{cause:e,...n}=t;Object.assign(this,n)}}};const ge=class extends be{value;constructor(e,t){super(e,t),void 0!==t&&(this.value=t.value)}};const ve=class extends ge{};const Ee=class extends ge{},_e=(e,t)=>{const{visited:n=new WeakMap}=t,r={...t,visited:n};if(n.has(e))return n.get(e);const s=Oe(e);n.set(e,s);const{content:i}=e;return Array.isArray(i)?s.content=i.map(e=>_e(e,r)):ee(i)?s.content=_e(i,r):s.content=i instanceof E?we(i,r):i,s},we=(e,t)=>{const{visited:n=new WeakMap}=t,r={...t,visited:n};if(n.has(e))return n.get(e);const{key:s,value:i}=e,o=void 0!==s?_e(s,r):void 0,a=void 0!==i?_e(i,r):void 0,c=new E(o,a);return n.set(e,c),c},ke=(e,t={})=>{if(e instanceof E)return we(e,t);if(e instanceof w)return((e,t)=>{const{visited:n=new WeakMap}=t,r={...t,visited:n};if(n.has(e))return n.get(e);const s=[...e].map(e=>_e(e,r)),i=new w(s);return n.set(e,i),i})(e,t);if(ee(e))return _e(e,t);throw new ve("Value provided to cloneDeep function couldn't be cloned",{value:e})};ke.safe=e=>{try{return ke(e)}catch{return e}};const Ae=e=>{const{key:t,value:n}=e;return new E(t,n)},Oe=e=>{const t=new(0,e.constructor);t.element=e.element,e.isMetaEmpty||(t.meta=ke(e.meta)),e.isAttributesEmpty||(t.attributes=ke(e.attributes)),ue(e)&&C.transfer(e,t),le(e)&&(t.style=Z(e.style));const{content:n}=e;return ee(n)?t.content=Oe(n):Array.isArray(n)?t.content=[...n]:t.content=n instanceof E?Ae(n):n,t},je=e=>{if(e instanceof E)return Ae(e);if(e instanceof w)return(e=>{const t=[...e];return new w(t)})(e);if(ee(e))return Oe(e);throw new Ee("Value provided to cloneShallow function couldn't be cloned",{value:e})};function Me(e){return void 0===e?new F:Pe(e)}function Pe(e){if(e instanceof A)return e;if("string"==typeof e)return new O(e);if("number"==typeof e)return new R(e);if("boolean"==typeof e)return new K(e);if(null===e)return new F;if(Array.isArray(e))return new B(e.map(Me));if("object"==typeof e)return new L(e);throw new Error("Cannot refract value of type "+typeof e)}je.safe=e=>{try{return je(e)}catch{return e}},A.prototype.ObjectElement=L,A.prototype.ArrayElement=B,A.prototype.RefElement=N,A.prototype.MemberElement=z,A.prototype.refract=Pe;const Se=class extends O{constructor(e,t,n){super(e,t,n),this.element="annotation"}get code(){if(this.hasAttributesProperty("code"))return this.attributes.get("code")}set code(e){this.attributes.set("code",e)}};const Ce=class extends O{constructor(e,t,n){super(e,t,n),this.element="comment"}};const Ve=class extends B{constructor(e,t,n){super(e,t,n),this.element="parseResult"}get api(){return this.filter(e=>fe(e,["api"])).first}get results(){return this.filter(e=>fe(e,["result"]))}get result(){return this.results.first}get annotations(){return this.filter(e=>"annotation"===e.element)}get warnings(){return this.filter(e=>"annotation"===e.element&&fe(e,["warning"]))}get errors(){return this.filter(e=>"annotation"===e.element&&fe(e,["error"]))}get isEmpty(){return 0===this.reject(e=>"annotation"===e.element).length}replaceResult(e){const{result:t}=this;if(void 0===t)return!1;const n=this._content,r=n.findIndex(e=>e===t);return-1!==r&&(n[r]=e,!0)}},xe=e=>e instanceof T,ze=e=>e instanceof N,Le=e=>e instanceof Se,De=e=>e instanceof Ce,Ie=e=>e instanceof Ve,qe=e=>e instanceof C;return t})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speclynx/apidom-datamodel",
3
- "version": "2.11.0",
3
+ "version": "2.12.0",
4
4
  "description": "Data model primitives for ApiDOM.",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -39,7 +39,7 @@
39
39
  "license": "Apache-2.0",
40
40
  "dependencies": {
41
41
  "@babel/runtime-corejs3": "^7.28.4",
42
- "@speclynx/apidom-error": "^2.11.0",
42
+ "@speclynx/apidom-error": "^2.12.0",
43
43
  "ramda": "~0.32.0"
44
44
  },
45
45
  "files": [
@@ -52,5 +52,5 @@
52
52
  "README.md",
53
53
  "CHANGELOG.md"
54
54
  ],
55
- "gitHead": "ee7e9488621be61f5dc1b098b8af135dc83c9ac1"
55
+ "gitHead": "672efe907afef6ae5b547a8028db077297a0c52e"
56
56
  }
@@ -3,6 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
5
  exports.cloneShallow = exports.cloneDeep = exports.ShallowCloneError = exports.DeepCloneError = exports.CloneError = void 0;
6
+ var _ramda = require("ramda");
6
7
  var _ObjectSlice = _interopRequireDefault(require("../ObjectSlice.cjs"));
7
8
  var _KeyValuePair = _interopRequireDefault(require("../KeyValuePair.cjs"));
8
9
  var _index = require("../predicates/index.cjs");
@@ -139,6 +140,9 @@ const cloneShallowElement = element => {
139
140
  if ((0, _index.hasElementSourceMap)(element)) {
140
141
  _SourceMap.default.transfer(element, copy);
141
142
  }
143
+ if ((0, _index.hasElementStyle)(element)) {
144
+ copy.style = (0, _ramda.clone)(element.style);
145
+ }
142
146
  const {
143
147
  content
144
148
  } = element;
@@ -1,6 +1,7 @@
1
+ import { clone } from 'ramda';
1
2
  import ObjectSlice from "../ObjectSlice.mjs";
2
3
  import KeyValuePair from "../KeyValuePair.mjs";
3
- import { isElement, hasElementSourceMap } from "../predicates/index.mjs";
4
+ import { isElement, hasElementSourceMap, hasElementStyle } from "../predicates/index.mjs";
4
5
  import SourceMapElement from "../elements/SourceMap.mjs";
5
6
  import DeepCloneError from "./errors/DeepCloneError.mjs";
6
7
  import ShallowCloneError from "./errors/ShallowCloneError.mjs";
@@ -127,6 +128,9 @@ const cloneShallowElement = element => {
127
128
  if (hasElementSourceMap(element)) {
128
129
  SourceMapElement.transfer(element, copy);
129
130
  }
131
+ if (hasElementStyle(element)) {
132
+ copy.style = clone(element.style);
133
+ }
130
134
  const {
131
135
  content
132
136
  } = element;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _ObjectElement = _interopRequireDefault(require("../primitives/ObjectElement.cjs"));
7
+ /**
8
+ * Shape with optional style property.
9
+ * @public
10
+ */
11
+
12
+ /**
13
+ * StyleElement stores format-specific style information for round-trip preservation.
14
+ *
15
+ * The style data is stored as a plain object with format-specific namespaces
16
+ * (e.g., `yaml`, `json`). This element exists only during serialization/deserialization
17
+ * (refract format) - in memory, style lives directly on `element.style`.
18
+ *
19
+ * Follows the same pattern as SourceMapElement with __mappings__.
20
+ *
21
+ * @public
22
+ */
23
+ class StyleElement extends _ObjectElement.default {
24
+ constructor(content, meta, attributes) {
25
+ super(content, meta, attributes);
26
+ this.element = '__styles__';
27
+ }
28
+
29
+ /**
30
+ * Transfers style property from one element to another.
31
+ */
32
+ static transfer(from, to) {
33
+ to.style = from.style;
34
+ }
35
+
36
+ /**
37
+ * Creates a StyleElement from an element's style property.
38
+ * Returns undefined if the element has no style.
39
+ */
40
+ static from(source) {
41
+ if (!source.style) {
42
+ return undefined;
43
+ }
44
+ return new StyleElement(source.style);
45
+ }
46
+
47
+ /**
48
+ * Restores the style property on the target element from this StyleElement.
49
+ */
50
+ applyTo(target) {
51
+ target.style = this.toValue();
52
+ }
53
+ }
54
+ var _default = exports.default = StyleElement;
@@ -0,0 +1,48 @@
1
+ import ObjectElement from "../primitives/ObjectElement.mjs";
2
+ /**
3
+ * Shape with optional style property.
4
+ * @public
5
+ */
6
+ /**
7
+ * StyleElement stores format-specific style information for round-trip preservation.
8
+ *
9
+ * The style data is stored as a plain object with format-specific namespaces
10
+ * (e.g., `yaml`, `json`). This element exists only during serialization/deserialization
11
+ * (refract format) - in memory, style lives directly on `element.style`.
12
+ *
13
+ * Follows the same pattern as SourceMapElement with __mappings__.
14
+ *
15
+ * @public
16
+ */
17
+ class StyleElement extends ObjectElement {
18
+ constructor(content, meta, attributes) {
19
+ super(content, meta, attributes);
20
+ this.element = '__styles__';
21
+ }
22
+
23
+ /**
24
+ * Transfers style property from one element to another.
25
+ */
26
+ static transfer(from, to) {
27
+ to.style = from.style;
28
+ }
29
+
30
+ /**
31
+ * Creates a StyleElement from an element's style property.
32
+ * Returns undefined if the element has no style.
33
+ */
34
+ static from(source) {
35
+ if (!source.style) {
36
+ return undefined;
37
+ }
38
+ return new StyleElement(source.style);
39
+ }
40
+
41
+ /**
42
+ * Restores the style property on the target element from this StyleElement.
43
+ */
44
+ applyTo(target) {
45
+ target.style = this.toValue();
46
+ }
47
+ }
48
+ export default StyleElement;
package/src/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
- exports.refract = exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isCommentElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = exports.cloneShallow = exports.cloneDeep = exports.StringElement = exports.SourceMapElement = exports.ShallowCloneError = exports.RefElement = exports.ParseResultElement = exports.ObjectSlice = exports.ObjectElement = exports.NumberElement = exports.NullElement = exports.Namespace = exports.MemberElement = exports.LinkElement = exports.KeyValuePair = exports.JSONSerialiser = exports.Element = exports.DeepCloneError = exports.CommentElement = exports.CollectionElement = exports.CloneError = exports.BooleanElement = exports.ArrayElement = exports.AnnotationElement = void 0;
5
+ exports.refract = exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isCommentElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementStyle = exports.hasElementSourceMap = exports.cloneShallow = exports.cloneDeep = exports.StyleElement = exports.StringElement = exports.SourceMapElement = exports.ShallowCloneError = exports.RefElement = exports.ParseResultElement = exports.ObjectSlice = exports.ObjectElement = exports.NumberElement = exports.NullElement = exports.Namespace = exports.MemberElement = exports.LinkElement = exports.KeyValuePair = exports.JSONSerialiser = exports.Element = exports.DeepCloneError = exports.CommentElement = exports.CollectionElement = exports.CloneError = exports.BooleanElement = exports.ArrayElement = exports.AnnotationElement = void 0;
6
6
  var _Namespace = _interopRequireDefault(require("./Namespace.cjs"));
7
7
  exports.Namespace = _Namespace.default;
8
8
  var _KeyValuePair = _interopRequireDefault(require("./KeyValuePair.cjs"));
@@ -30,6 +30,7 @@ exports.AnnotationElement = _registration.AnnotationElement;
30
30
  exports.CommentElement = _registration.CommentElement;
31
31
  exports.ParseResultElement = _registration.ParseResultElement;
32
32
  exports.SourceMapElement = _registration.SourceMapElement;
33
+ exports.StyleElement = _registration.StyleElement;
33
34
  exports.refract = _registration.refract;
34
35
  var _JSONSerialiser = _interopRequireDefault(require("./serialisers/JSONSerialiser.cjs"));
35
36
  exports.JSONSerialiser = _JSONSerialiser.default;
@@ -49,6 +50,7 @@ exports.isCommentElement = _index2.isCommentElement;
49
50
  exports.isParseResultElement = _index2.isParseResultElement;
50
51
  exports.isSourceMapElement = _index2.isSourceMapElement;
51
52
  exports.isPrimitiveElement = _index2.isPrimitiveElement;
53
+ exports.hasElementStyle = _index2.hasElementStyle;
52
54
  exports.hasElementSourceMap = _index2.hasElementSourceMap;
53
55
  exports.includesSymbols = _index2.includesSymbols;
54
56
  exports.includesClasses = _index2.includesClasses;
package/src/index.mjs CHANGED
@@ -2,9 +2,9 @@ export { default as Namespace } from "./Namespace.mjs";
2
2
  export { default as KeyValuePair } from "./KeyValuePair.mjs"; // Clone utilities
3
3
  export { cloneShallow, cloneDeep, CloneError, DeepCloneError, ShallowCloneError } from "./clone/index.mjs";
4
4
  // Re-export elements directly to preserve JSDoc
5
- export { ObjectSlice, Element, CollectionElement, StringElement, NumberElement, BooleanElement, NullElement, ArrayElement, ObjectElement, MemberElement, RefElement, LinkElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement, refract } from "./registration.mjs";
5
+ export { ObjectSlice, Element, CollectionElement, StringElement, NumberElement, BooleanElement, NullElement, ArrayElement, ObjectElement, MemberElement, RefElement, LinkElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement, StyleElement, refract } from "./registration.mjs";
6
6
  export { default as JSONSerialiser } from "./serialisers/JSONSerialiser.mjs"; // Re-export types - essential public API
7
7
  // Re-export types - for advanced users extending the library
8
8
  // Re-export types - used in public method signatures
9
9
  // Re-export predicates
10
- export { isElement, isStringElement, isNumberElement, isNullElement, isBooleanElement, isObjectElement, isArrayElement, isMemberElement, isLinkElement, isRefElement, isAnnotationElement, isCommentElement, isParseResultElement, isSourceMapElement, isPrimitiveElement, hasElementSourceMap, includesSymbols, includesClasses } from "./predicates/index.mjs";
10
+ export { isElement, isStringElement, isNumberElement, isNullElement, isBooleanElement, isObjectElement, isArrayElement, isMemberElement, isLinkElement, isRefElement, isAnnotationElement, isCommentElement, isParseResultElement, isSourceMapElement, isPrimitiveElement, hasElementStyle, hasElementSourceMap, includesSymbols, includesClasses } from "./predicates/index.mjs";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isCommentElement = exports.isBooleanElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = void 0;
4
+ exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isCommentElement = exports.isBooleanElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementStyle = exports.hasElementSourceMap = void 0;
5
5
  var _primitives = require("./primitives.cjs");
6
6
  exports.isArrayElement = _primitives.isArrayElement;
7
7
  exports.isElement = _primitives.isElement;
@@ -19,11 +19,20 @@ exports.isAnnotationElement = _elements.isAnnotationElement;
19
19
  exports.isCommentElement = _elements.isCommentElement;
20
20
  exports.isParseResultElement = _elements.isParseResultElement;
21
21
  exports.isSourceMapElement = _elements.isSourceMapElement;
22
+ /**
23
+ * Checks if an element has format-specific style information.
24
+ * @public
25
+ */
26
+ const hasElementStyle = element => {
27
+ return element.style !== undefined;
28
+ };
29
+
22
30
  /**
23
31
  * Checks if an element has complete source position information.
24
32
  * Returns true only if all 6 position properties are numbers.
25
33
  * @public
26
34
  */
35
+ exports.hasElementStyle = hasElementStyle;
27
36
  const hasElementSourceMap = element => {
28
37
  return typeof element.startLine === 'number' && typeof element.startCharacter === 'number' && typeof element.startOffset === 'number' && typeof element.endLine === 'number' && typeof element.endCharacter === 'number' && typeof element.endOffset === 'number';
29
38
  };
@@ -2,6 +2,14 @@ import { isArrayElement, isElement } from "./primitives.mjs";
2
2
  export { isStringElement, isNumberElement, isNullElement, isBooleanElement, isArrayElement, isObjectElement, isMemberElement, isPrimitiveElement } from "./primitives.mjs";
3
3
  export { isElement };
4
4
  export { isLinkElement, isRefElement, isAnnotationElement, isCommentElement, isParseResultElement, isSourceMapElement } from "./elements.mjs";
5
+ /**
6
+ * Checks if an element has format-specific style information.
7
+ * @public
8
+ */
9
+ export const hasElementStyle = element => {
10
+ return element.style !== undefined;
11
+ };
12
+
5
13
  /**
6
14
  * Checks if an element has complete source position information.
7
15
  * Returns true only if all 6 position properties are numbers.
@@ -32,6 +32,12 @@ class Element {
32
32
  */
33
33
  parent;
34
34
 
35
+ /**
36
+ * Format-specific style information for round-trip preservation.
37
+ * Each format owns its own namespace (e.g., `yaml`, `json`).
38
+ */
39
+ style;
40
+
35
41
  // ============================================================================
36
42
  // Source Position (LSP-compatible, TextDocument-compatible, UTF-16 code units)
37
43
  // web-tree-sitter automatically provides position data in UTF-16 code units.
@@ -26,6 +26,12 @@ class Element {
26
26
  */
27
27
  parent;
28
28
 
29
+ /**
30
+ * Format-specific style information for round-trip preservation.
31
+ * Each format owns its own namespace (e.g., `yaml`, `json`).
32
+ */
33
+ style;
34
+
29
35
  // ============================================================================
30
36
  // Source Position (LSP-compatible, TextDocument-compatible, UTF-16 code units)
31
37
  // web-tree-sitter automatically provides position data in UTF-16 code units.
@@ -33,6 +33,8 @@ var _ParseResult = _interopRequireDefault(require("./elements/ParseResult.cjs"))
33
33
  exports.ParseResultElement = _ParseResult.default;
34
34
  var _SourceMap = _interopRequireDefault(require("./elements/SourceMap.cjs"));
35
35
  exports.SourceMapElement = _SourceMap.default;
36
+ var _Style = _interopRequireDefault(require("./elements/Style.cjs"));
37
+ exports.StyleElement = _Style.default;
36
38
  var _ObjectSlice = _interopRequireDefault(require("./ObjectSlice.cjs"));
37
39
  exports.ObjectSlice = _ObjectSlice.default;
38
40
  var _KeyValuePair = _interopRequireDefault(require("./KeyValuePair.cjs"));
@@ -13,6 +13,7 @@ import AnnotationElement from "./elements/Annotation.mjs";
13
13
  import CommentElement from "./elements/Comment.mjs";
14
14
  import ParseResultElement from "./elements/ParseResult.mjs";
15
15
  import SourceMapElement from "./elements/SourceMap.mjs";
16
+ import StyleElement from "./elements/Style.mjs";
16
17
  import ObjectSlice from "./ObjectSlice.mjs";
17
18
  import KeyValuePair from "./KeyValuePair.mjs";
18
19
  /**
@@ -69,6 +70,6 @@ Element.prototype.refract = refract;
69
70
  * Contains all of the element classes, and related structures and methods
70
71
  * for handling with element instances.
71
72
  */
72
- export { Element, CollectionElement, NullElement, StringElement, NumberElement, BooleanElement, ArrayElement, MemberElement, ObjectElement, LinkElement, RefElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement, refract, ObjectSlice, KeyValuePair };
73
+ export { Element, CollectionElement, NullElement, StringElement, NumberElement, BooleanElement, ArrayElement, MemberElement, ObjectElement, LinkElement, RefElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement, StyleElement, refract, ObjectSlice, KeyValuePair };
73
74
 
74
75
  // Re-export types from element classes
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
  exports.__esModule = true;
5
5
  exports.default = void 0;
6
6
  var _SourceMap = _interopRequireDefault(require("../elements/SourceMap.cjs"));
7
+ var _Style = _interopRequireDefault(require("../elements/Style.cjs"));
7
8
  /**
8
9
  * Serialized representation of an Element in JSON Refract format.
9
10
  * @public
@@ -65,6 +66,17 @@ class JSONSerialiser {
65
66
  payload.meta.__mappings__ = this.serialise(sourceMap);
66
67
  }
67
68
  }
69
+
70
+ // Serialize style as __styles__ in meta (skip for StyleElement itself)
71
+ if (!(element instanceof _Style.default)) {
72
+ const styleElement = _Style.default.from(element);
73
+ if (styleElement) {
74
+ if (!payload.meta) {
75
+ payload.meta = {};
76
+ }
77
+ payload.meta.__styles__ = this.serialise(styleElement);
78
+ }
79
+ }
68
80
  const content = this.serialiseContent(element.content);
69
81
  if (content !== undefined) {
70
82
  payload.content = content;
@@ -85,15 +97,18 @@ class JSONSerialiser {
85
97
  element.element = value.element;
86
98
  }
87
99
 
88
- // Extract __mappings__ without mutating input, filter remaining meta
100
+ // Extract __mappings__ and __styles__ without mutating input, filter remaining meta
89
101
  let mappingsDoc;
102
+ let stylesDoc;
90
103
  let metaToDeserialize = value.meta;
91
- if (value.meta?.__mappings__) {
104
+ if (value.meta?.__mappings__ || value.meta?.__styles__) {
92
105
  const {
93
106
  __mappings__,
107
+ __styles__,
94
108
  ...rest
95
109
  } = value.meta;
96
110
  mappingsDoc = __mappings__;
111
+ stylesDoc = __styles__;
97
112
  metaToDeserialize = Object.keys(rest).length > 0 ? rest : undefined;
98
113
  }
99
114
  if (metaToDeserialize) {
@@ -105,6 +120,12 @@ class JSONSerialiser {
105
120
  const sourceMap = this.deserialise(mappingsDoc);
106
121
  sourceMap.applyTo(element);
107
122
  }
123
+
124
+ // Restore style from __styles__
125
+ if (stylesDoc) {
126
+ const styleElement = this.deserialise(stylesDoc);
127
+ styleElement.applyTo(element);
128
+ }
108
129
  if (value.attributes) {
109
130
  this.deserialiseObject(value.attributes, element.attributes);
110
131
  }
@@ -1,4 +1,5 @@
1
1
  import SourceMapElement from "../elements/SourceMap.mjs";
2
+ import StyleElement from "../elements/Style.mjs";
2
3
  /**
3
4
  * Serialized representation of an Element in JSON Refract format.
4
5
  * @public
@@ -56,6 +57,17 @@ class JSONSerialiser {
56
57
  payload.meta.__mappings__ = this.serialise(sourceMap);
57
58
  }
58
59
  }
60
+
61
+ // Serialize style as __styles__ in meta (skip for StyleElement itself)
62
+ if (!(element instanceof StyleElement)) {
63
+ const styleElement = StyleElement.from(element);
64
+ if (styleElement) {
65
+ if (!payload.meta) {
66
+ payload.meta = {};
67
+ }
68
+ payload.meta.__styles__ = this.serialise(styleElement);
69
+ }
70
+ }
59
71
  const content = this.serialiseContent(element.content);
60
72
  if (content !== undefined) {
61
73
  payload.content = content;
@@ -76,15 +88,18 @@ class JSONSerialiser {
76
88
  element.element = value.element;
77
89
  }
78
90
 
79
- // Extract __mappings__ without mutating input, filter remaining meta
91
+ // Extract __mappings__ and __styles__ without mutating input, filter remaining meta
80
92
  let mappingsDoc;
93
+ let stylesDoc;
81
94
  let metaToDeserialize = value.meta;
82
- if (value.meta?.__mappings__) {
95
+ if (value.meta?.__mappings__ || value.meta?.__styles__) {
83
96
  const {
84
97
  __mappings__,
98
+ __styles__,
85
99
  ...rest
86
100
  } = value.meta;
87
101
  mappingsDoc = __mappings__;
102
+ stylesDoc = __styles__;
88
103
  metaToDeserialize = Object.keys(rest).length > 0 ? rest : undefined;
89
104
  }
90
105
  if (metaToDeserialize) {
@@ -96,6 +111,12 @@ class JSONSerialiser {
96
111
  const sourceMap = this.deserialise(mappingsDoc);
97
112
  sourceMap.applyTo(element);
98
113
  }
114
+
115
+ // Restore style from __styles__
116
+ if (stylesDoc) {
117
+ const styleElement = this.deserialise(stylesDoc);
118
+ styleElement.applyTo(element);
119
+ }
99
120
  if (value.attributes) {
100
121
  this.deserialiseObject(value.attributes, element.attributes);
101
122
  }
@@ -267,6 +267,11 @@ declare class Element_2 implements ToValue, Equatable, Freezable {
267
267
  * Parent element reference (set when tree is frozen).
268
268
  */
269
269
  parent?: Element_2;
270
+ /**
271
+ * Format-specific style information for round-trip preservation.
272
+ * Each format owns its own namespace (e.g., `yaml`, `json`).
273
+ */
274
+ style?: Record<string, unknown>;
270
275
  /**
271
276
  * Starting line number (0-based).
272
277
  * Compatible with LSP Position.line.
@@ -502,6 +507,12 @@ export declare interface Freezable {
502
507
  */
503
508
  export declare const hasElementSourceMap: <T extends Element_2>(element: T) => boolean;
504
509
 
510
+ /**
511
+ * Checks if an element has format-specific style information.
512
+ * @public
513
+ */
514
+ export declare const hasElementStyle: <T extends Element_2>(element: T) => boolean;
515
+
505
516
  /**
506
517
  * @public
507
518
  */
@@ -1180,6 +1191,42 @@ export declare class StringElement extends Element_2 {
1180
1191
  get length(): number;
1181
1192
  }
1182
1193
 
1194
+ /**
1195
+ * StyleElement stores format-specific style information for round-trip preservation.
1196
+ *
1197
+ * The style data is stored as a plain object with format-specific namespaces
1198
+ * (e.g., `yaml`, `json`). This element exists only during serialization/deserialization
1199
+ * (refract format) - in memory, style lives directly on `element.style`.
1200
+ *
1201
+ * Follows the same pattern as SourceMapElement with __mappings__.
1202
+ *
1203
+ * @public
1204
+ */
1205
+ export declare class StyleElement extends ObjectElement {
1206
+ constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes);
1207
+ /**
1208
+ * Transfers style property from one element to another.
1209
+ */
1210
+ static transfer(from: StyleShape, to: StyleShape): void;
1211
+ /**
1212
+ * Creates a StyleElement from an element's style property.
1213
+ * Returns undefined if the element has no style.
1214
+ */
1215
+ static from(source: StyleShape): StyleElement | undefined;
1216
+ /**
1217
+ * Restores the style property on the target element from this StyleElement.
1218
+ */
1219
+ applyTo(target: StyleShape): void;
1220
+ }
1221
+
1222
+ /**
1223
+ * Shape with optional style property.
1224
+ * @public
1225
+ */
1226
+ export declare interface StyleShape {
1227
+ style?: Record<string, unknown>;
1228
+ }
1229
+
1183
1230
  /**
1184
1231
  * Type for objects that can convert to JavaScript values.
1185
1232
  * @public