@zakodium/nmrium-core 0.5.3 → 0.5.4

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,6 +1,6 @@
1
- var ve={NORMAL:"NORMAL",FORMULA:"FORMULA"};var De={RELATIVE:"relative",ABSOLUTE:"absolute",MIN:"min",MAX:"max"};var Ce=[{name:"pixels",unit:"px"},{name:"inches",unit:"in"},{name:"feet",unit:"ft"},{name:"yards",unit:"yd"},{name:"centimeters",unit:"cm"},{name:"millimeters",unit:"mm"},{name:"meters",unit:"m"},{name:"points",unit:"pt"},{name:"picas",unit:"pc"}];var h=13;var Ae=[{key:"CT",description:"CT from NMR Solutions"}];import{isAnyArray as Fe}from"is-any-array";import{xMultiply as B}from"ml-spectra-processing";var we=crypto.randomUUID.bind(crypto),b=we;function R(e){let{id:t=b(),meta:o,peaks:r={},filters:n=[],info:i={},ranges:c={},integrals:s={},selector:l,sourceId:a,dependentVariables:m=[],...p}=e,u={id:t,meta:o,filters:n},{data:f=Te(m[0].components)}=e;if(Array.isArray(i.nucleus)&&(i.nucleus=i.nucleus[0]),u.data={x:[],re:[],im:[],...f},"scaleFactor"in i){let{scaleFactor:d}=i,{re:S,im:y}=u.data;B(S,d,{output:S}),y&&B(y,d,{output:y})}l&&(u.selector=l),a&&(u.sourceId=a,u.fileCollectionId=a);let g=Fe(f.im);if(u.info={phc0:0,phc1:0,nucleus:"1H",isFid:!1,isComplex:g,dimension:1,name:i?.name||t,...i},i.isFid&&i.reverse&&g){let{im:d}=u.data;B(d,-1,{output:d}),u.info.reverse=!1}return u.display={isVisible:!0,isPeaksMarkersVisible:!0,isRealSpectrumVisible:!0,isVisibleInDomain:!0,...e.display},u.peaks={values:[],options:{},...r},u.ranges={values:[],options:{sum:null,isSumConstant:!0,sumAuto:!0},...c},u.integrals={values:[],options:{},...s},{...p,...u}}function Te(e){let t=e[0]?.data?.x||[],o=e[0]?.data?.re||e[0]?.data?.y||[],r=e[0]?.data?.im||e[1]?.data?.y||null;return t.length>0&&t[0]>t[1]&&(t.reverse(),o.reverse(),r&&r.reverse()),{x:t,re:o,im:r}}import{matrixToArray as Ee,xMinMaxValues as Le,xNoiseSanPlot as Ue}from"ml-spectra-processing";var K={z:[[]],minX:0,minY:0,maxX:0,maxY:0},ke={re:K,im:K},je={rr:K};function D(e){let{id:t=b(),meta:o={},dependentVariables:r=[],info:n={},filters:i=[],zones:c=[],sourceId:s,...l}=e,a={id:t,meta:o,filters:i};s&&(a.sourceId=s,a.fileCollectionId=s),a.info={nucleus:["1H","1H"],isFid:!1,isComplex:!1,name:n?.name||b(),...n},a.originalInfo=structuredClone(a.info),a.display={isPositiveVisible:!0,isNegativeVisible:!0,isVisible:!0,dimension:2,...e.display,...e.display};let{data:m=r[0].components}=e;if(a.data={...a.info.isFid?ke:je,...m},a.originalData=structuredClone(a.data),!("spectrumSize"in n)){let p=n.isFid?"re":"rr",u=a.data[p].z.length,f=u>0?a.data[p].z[0].length:0;a.info.spectrumSize=[f,u]}if(!n.isFid){let p=a.data.rr,u=Ee(p.z),{positive:f,negative:g}=Ue(u),{min:d,max:S}=Le(u);a.data.rr={...p,minZ:d,maxZ:S},a.info.noise={positive:f,negative:g}}return a.zones={values:[],options:{},...c},{...l,...a}}import{xSequentialFillFromTo as Ve}from"ml-spectra-processing";import{isAnyArray as ze}from"is-any-array";function W(e,t=0){if(ze(e)){let o=e.at(t);if(o!==void 0)return o;throw new RangeError("An array with a index out of boundaries")}return e}var _e=new Set(["t1ir","T1"]);function se(e){let t=[];for(let o of e){let{info:{pulseSequence:r,isFid:n}}=o,{data:i,info:c,meta:{vdlistValues:s=[]}}=o;if(!(r&&_e.has(r))||s.length===0){t.push(o);continue}let a=n?"re":"rr",m={};for(let y in c)m[y]=W(c[y]);let{z:p,maxX:u,minX:f}=i[a],g=Ve({from:f,to:u,size:p[0].length}),[d,S]=Ke(o);for(let y=0;y<s.length;y++){let P={re:g,x:g};for(let x in i)P[Be(x)]=i[x].z.at(d*(y+S));t.push(R({data:P,info:{...m,name:`${m.name}_${s[y]}`,dimension:1,vd:s[y]}}))}}return t}function Be(e){return["rr","re"].includes(e)?"re":["im","ri","ir","ii"].includes(e)?"im":"x"}function Ke(e){let{meta:{PAGE:t}}=e,o=!0;if(t){let r=n=>Number.parseFloat(n.replace(/[F|T]1=/,""));o=r(t[0])>r(t[2])}return o?[-1,1]:[1,0]}var We=2,Xe=1;function Ye(e){let{spectra:t=[],molecules:o}=e,r=[];for(let n of t){let{info:i}=n;switch(i.dimension){case Xe:r.push(R(n));break;case We:r.push(D(n));break;default:throw new Error("dimension does not supported")}}return{molecules:o,spectra:se(r)}}function Ze(e){return e}function N(e,t){return JSON.parse(JSON.stringify(e),function(r,n){if(r in t){this[t[r]]=n;return}return n})}function X(e){if(e?.version===1)return e;let t={...e,version:1},o={j:"js",signal:"signals",integral:"integration",peak:"peaks",diaID:"diaIDs"};for(let r of t.spectra){if(r.ranges){let n=N(r.ranges,o);r.ranges=Array.isArray(n)?{values:n}:n}else if(r.zones){let n=N(r.zones,o);r.zones=Array.isArray(n)?{values:n}:n}r.peaks&&(r.peaks=Array.isArray(r.peaks)?{values:r.peaks}:r.peaks),r.integrals&&(r.integrals=Array.isArray(r.integrals)?{values:r.integrals}:r.integrals)}return t}function Y(e){if(e?.version===2)return e;let t={...e,version:2},o={peaks:{delta:"x",originDelta:"originalX",intensity:"y"},ranges:{atomIDs:"atoms",intensity:"y"}};for(let r of t.spectra)r.peaks?r.peaks=N(r.peaks,o.peaks):r.ranges?r.ranges=N(r.ranges,o.ranges):r.zones&&(r.zones.values=$e(r.zones.values));return t}function $e(e){return e.map(t=>(t.signals&&(t.signals=t.signals.map(o=>{if(o.x&&o.y){let{x:{fromTo:r,...n},y:{fromTo:i,...c}}=o;o={...o,x:{...n,...r},y:{...c,...i}}}else{let{fromTo:r,deltaX:n,resolutionX:i,nucleusX:c,deltaY:s,resolutionY:l,nucleusY:a,shiftX:m,shiftY:p,...u}=o;o={...u,x:{from:r[0].from,to:r[0].to,delta:n,resolution:i,nucleus:c},y:{from:r[1].from,to:r[1].to,delta:s,resolution:l,nucleus:a}}}return o},[])),t),[])}var Ge={name:"apodization",label:"Apodization",value:{lineBroadening:1,gaussBroadening:0,lineBroadeningCenter:0}};function Z(e){if(e?.version===3)return e;let t={...e,version:3};for(let o of t.spectra)if(Array.isArray(o?.filters)&&o?.filters.length>0){let r=o.filters.findIndex(n=>n.name==="lineBroadening");if(r!==-1){let n={...o.filters[r],...Ge};o.filters[r]=o.filters[r-1],o.filters[r-1]=n}}return t}function $(e){if(e?.version===4)return e;let{version:t,...o}=e,r=[],n={};for(let{source:s,...l}of o.spectra){let a={},{info:m={},display:p={}}=l;if(m?.dimension===2&&!s?.jcampURL)if(m.isFt)a.data={rr:l.data};else continue;if(s?.jcampURL){let{jcampURL:g,jcampSpectrumIndex:d}=s,S=g.match(/(?<baseURL>^\w+:\/{2}\w+\/)(?<relativePath>.*)/);n[g]||(n[g]={baseURL:S?.groups.baseURL||"",relativePath:S?.groups.relativePath||g.replace(/^\.\//,"")}),a.sourceSelector={files:[n[g].relativePath]},d!==void 0&&(a.sourceSelector.jcamp={index:d})}a.filters=qe(l.filters);let{name:u,...f}=p;u&&(a.info={...m,name:u}),a.display=f,r.push({...l,...a})}let i={data:{...o,spectra:r},version:4},c={entries:Object.values(n)};return c.entries.length>0&&(i.data.source=c),i}function qe(e=[]){let t=[];for(let o of e){let{name:r,value:n}=o;switch(r){case"zeroFilling":t.push({...o,value:{nbPoints:n}});break;case"shiftX":case"shift2DX":case"shift2DY":t.push({...o,value:{shift:n}});break;default:t.push({...o})}}return t}function G(e){if(e?.version===5)return e;let t={...e,version:5},o={originFrom:"originalFrom",originTo:"originalTo",originDelta:"originalDelta",originX:"originalX",originY:"originalY",originZ:"originalZ"};for(let r of t?.data?.spectra||[])for(let n of["peaks","ranges","zones"])r?.[n]&&(r[n]=N(r[n],o));return t}function q(e){if(e?.version===6)return e;let t={...e,version:6};for(let o of t?.data?.spectra||[]){let{digitalFilter:r,fft:n,phaseCorrection:i}=Je(o);n?.flag&&r?.flag&&i&&Math.floor(r.value.digitalFilterValue)%2>0&&(i.value.ph0-=180)}return t}function Je(e,t=["phaseCorrection","fft","digitalFilter"]){let{filters:o=[]}=e,r={};for(let n of t)r[n]=o.find(i=>i.name===n);return r}function C(e,t="localStorage"){if(e?.version===7)return e;if(t==="nmrium")return ae(e);let o={...e,version:7};for(let r in e.workspaces)o.workspaces[r]=ae(o.workspaces[r]);return o}function ae(e){let{formatting:{nuclei:t,panels:o}={nuclei:null,panels:null},version:r,...n}=e,i={...n};return t&&(i.nuclei=He(t)),o&&(i.panels=o),i}function He(e){let t=[],o={name:"nucleus",ppm:"ppmFormat",hz:"hzFormat"};for(let r in e)t.push(N(e[r],o));return t}function J(e){if(e?.version===7)return e;let t={...e,version:7};return t?.settings&&(t.settings=C(t.settings,"nmrium")),t}function A(e,t="localStorage"){if(e?.version===8)return e;if(t==="nmrium")return le(e);let o={...e,version:8};for(let r in e.workspaces)o.workspaces[r]=le(o.workspaces[r]);return o}function le(e){let{version:t,...o}=e,r={...o};return r.display.panels=Qe(e),r}function Qe(e){let t={},o=e.display.panels;for(let r of Object.keys(o)){let{display:n,open:i}=o[r];t[r]={display:n,visible:n,open:i}}return t}function H(e){if(e?.version===8)return e;let t={...e,version:8};t?.settings&&(t.settings=A(t.settings,"nmrium"));for(let o of t?.data?.spectra||[]){let{filters:r=[]}=o;for(let s=0;s<r.length;s++){let{flag:l,isDeleteAllow:a,label:m,...p}=r[s];r[s]={...p,enabled:l}}let n=r.findIndex(s=>s.name==="apodization");if(n!==-1){let s=r[n],{lineBroadening:l,gaussBroadening:a,lineBroadeningCenter:m}=s.value;s.value={exponential:{apply:!0,options:{lineBroadening:a>0?-l:l}}},a>0&&(s.value.gaussian={apply:!0,options:{lineBroadening:.6*a,lineBroadeningCenter:m}}),r[n]=s}let i=r.findIndex(s=>s.name==="apodizationDimension1"),c=r.findIndex(s=>s.name==="apodizationDimension2");if(i!==-1){let s=r[i],{shapes:l}=s.value.compose;s.value=ce(l)}if(c!==-1){let s=r[c],{shapes:l}=s.value.compose;s.value=ce(l)}}return t}function ce(e){let t={};for(let{shape:o}of e){let{kind:r,options:n}=o;if(r==="sineBell"){let{exponent:i,offset:c}=n,s=i===2?"sineSquare":"sineBell";t[s]={apply:!0,options:{offset:c}}}}return t}function Q(e){let{version:t,plugins:o,...r}=e;return t===9?e:{version:9,plugins:{},...r}}function ee(e){if(e?.version>=10)return e;let t={...e,version:10};if(e.data){let{source:o,spectra:r,...n}=e.data,i=o?crypto.randomUUID():void 0,c=o?[{...o,id:i}]:[];t.data={...n,sources:c,spectra:o?r?.map(s=>({...s,sourceId:i})):r}}return t}function te(e){let{version:t}=e;if(t>=11)return e;let o={...e,version:11};return e?.view?.molecules&&(o.view=et(e.view)),o}function et(e){let{molecules:t,...o}=e,r={};for(let[n,i]of Object.entries(t)){let{showAtomNumber:c,...s}=i;r[n]={...s,atomAnnotation:"none",showLabel:!1}}return{molecules:r,...o}}function re(e){if(e?.version>=12)return e;let t={...e,version:12};if(t.data){let o=e.data.spectra??[],r=e.data.molecules??[];for(let n of o){let{sourceId:i,fileCollectionId:c,sourceSelector:s}=n;delete n.sourceId,delete n.fileCollectionId,delete n.sourceSelector,s&&(n.selector={...s,root:c??i})}for(let n of r){let{sourceId:i,fileCollectionId:c,sourceSelector:s}=n;delete n.sourceId,delete n.fileCollectionId,delete n.sourceSelector,s&&(n.selector={...s,root:c??i})}}return t}function oe(e){if(e?.version>=13)return e;let t={...e,version:13};if(t.data){let o=e.data.spectra??[];for(let r of o){let n=r.ranges?.values??[];for(let i of n){let{diaIDs:c,assignment:s,nbAtoms:l,signals:a=[]}=i,m=a.some(p=>p.diaIDs&&p.diaIDs.length>0);for(let p of a)!m&&c&&l&&(p.diaIDs=c,p.nbAtoms=l),!p.assignment&&s&&(p.assignment=s);delete i.diaIDs,delete i.assignment,delete i.nbAtoms}}}return t}function O(e,t){e.plugins||(e.plugins={});let o=e.plugins;for(let r of t.values()){if(!r.shouldSerialize){delete o[r.id];continue}o[r.id]||(o[r.id]={id:r.id,version:r.version}),o[r.id].id=r.id,o[r.id].version=r.version}}var tt=[X,Y,Z,$,G,q,J,H,Q,ee,te,re,oe];function ue(e,t,o){let r=structuredClone(e),n=Object.entries(e?.plugins??{});for(let[s,{version:l}]of n){let a=o.get(s);if(!(a&&a.version>=l)){if(a){console.warn(`Plugin "${a.id}" is loaded with a version older (${a.version}) than the one used to save the state (${l}).
1
+ var Me={NORMAL:"NORMAL",FORMULA:"FORMULA"};var De={RELATIVE:"relative",ABSOLUTE:"absolute",MIN:"min",MAX:"max"};var Ce=[{name:"pixels",unit:"px"},{name:"inches",unit:"in"},{name:"feet",unit:"ft"},{name:"yards",unit:"yd"},{name:"centimeters",unit:"cm"},{name:"millimeters",unit:"mm"},{name:"meters",unit:"m"},{name:"points",unit:"pt"},{name:"picas",unit:"pc"}];var h=13;var Ae=[{key:"CT",description:"CT from NMR Solutions"}];import{isAnyArray as we}from"is-any-array";import{xMultiply as B}from"ml-spectra-processing";var Fe=crypto.randomUUID.bind(crypto),b=Fe;function R(e){let{id:t=b(),meta:o,peaks:r={},filters:n=[],info:i={},ranges:c={},integrals:s={},selector:l,sourceId:a,dependentVariables:m=[],...p}=e,u={id:t,meta:o,filters:n},{data:f=Te(m[0].components)}=e;if(Array.isArray(i.nucleus)&&(i.nucleus=i.nucleus[0]),u.data={x:[],re:[],im:[],...f},"scaleFactor"in i){let{scaleFactor:d}=i,{re:S,im:y}=u.data;B(S,d,{output:S}),y&&B(y,d,{output:y})}l&&(u.selector=l),a&&(u.sourceId=a,u.fileCollectionId=a);let g=we(f.im);if(u.info={phc0:0,phc1:0,nucleus:"1H",isFid:!1,isComplex:g,dimension:1,name:i?.name||t,...i},i.isFid&&i.reverse&&g){let{im:d}=u.data;B(d,-1,{output:d}),u.info.reverse=!1}return u.display={isVisible:!0,isPeaksMarkersVisible:!0,isRealSpectrumVisible:!0,isVisibleInDomain:!0,...e.display},u.peaks={values:[],options:{},...r},u.ranges={values:[],options:{sum:null,isSumConstant:!0,sumAuto:!0},...c},u.integrals={values:[],options:{},...s},{...p,...u}}function Te(e){let t=e[0]?.data?.x||[],o=e[0]?.data?.re||e[0]?.data?.y||[],r=e[0]?.data?.im||e[1]?.data?.y||null;return t.length>0&&t[0]>t[1]&&(t.reverse(),o.reverse(),r&&r.reverse()),{x:t,re:o,im:r}}import{matrixToArray as Ee,xMinMaxValues as Le,xNoiseSanPlot as Ue}from"ml-spectra-processing";var K={z:[[]],minX:0,minY:0,maxX:0,maxY:0},ke={re:K,im:K},je={rr:K};function D(e){let{id:t=b(),meta:o={},dependentVariables:r=[],info:n={},filters:i=[],zones:c=[],sourceId:s,...l}=e,a={id:t,meta:o,filters:i};s&&(a.sourceId=s,a.fileCollectionId=s),a.info={nucleus:["1H","1H"],isFid:!1,isComplex:!1,name:n?.name||b(),...n},a.originalInfo=structuredClone(a.info),a.display={isPositiveVisible:!0,isNegativeVisible:!0,isVisible:!0,dimension:2,...e.display,...e.display};let{data:m=r[0].components}=e;if(a.data={...a.info.isFid?ke:je,...m},a.originalData=structuredClone(a.data),!("spectrumSize"in n)){let p=n.isFid?"re":"rr",u=a.data[p].z.length,f=u>0?a.data[p].z[0].length:0;a.info.spectrumSize=[f,u]}if(!n.isFid){let p=a.data.rr,u=Ee(p.z),{positive:f,negative:g}=Ue(u),{min:d,max:S}=Le(u);a.data.rr={...p,minZ:d,maxZ:S},a.info.noise={positive:f,negative:g}}return a.zones={values:[],options:{},...c},{...l,...a}}import{xSequentialFillFromTo as Ve}from"ml-spectra-processing";import{isAnyArray as ze}from"is-any-array";function W(e,t=0){if(ze(e)){let o=e.at(t);if(o!==void 0)return o;throw new RangeError("An array with a index out of boundaries")}return e}var _e=new Set(["t1ir","T1"]);function se(e){let t=[];for(let o of e){let{info:{pulseSequence:r,isFid:n}}=o,{data:i,info:c,meta:{vdlistValues:s=[]}}=o;if(!(r&&_e.has(r))||s.length===0){t.push(o);continue}let a=n?"re":"rr",m={};for(let y in c)m[y]=W(c[y]);let{z:p,maxX:u,minX:f}=i[a],g=Ve({from:f,to:u,size:p[0].length}),[d,S]=Ke(o);for(let y=0;y<s.length;y++){let P={re:g,x:g};for(let x in i)P[Be(x)]=i[x].z.at(d*(y+S));t.push(R({data:P,info:{...m,name:`${m.name}_${s[y]}`,dimension:1,vd:s[y]}}))}}return t}function Be(e){return["rr","re"].includes(e)?"re":["im","ri","ir","ii"].includes(e)?"im":"x"}function Ke(e){let{meta:{PAGE:t}}=e,o=!0;if(t){let r=n=>Number.parseFloat(n.replace(/[F|T]1=/,""));o=r(t[0])>r(t[2])}return o?[-1,1]:[1,0]}var We=2,Xe=1;function Ye(e){let{spectra:t=[],molecules:o}=e,r=[];for(let n of t){let{info:i}=n;switch(i.dimension){case Xe:r.push(R(n));break;case We:r.push(D(n));break;default:throw new Error("dimension does not supported")}}return{molecules:o,spectra:se(r)}}function Ze(e){return e}function N(e,t){return JSON.parse(JSON.stringify(e),function(r,n){if(r in t){this[t[r]]=n;return}return n})}function X(e){if(e?.version===1)return e;let t={...e,version:1},o={j:"js",signal:"signals",integral:"integration",peak:"peaks",diaID:"diaIDs"};for(let r of t.spectra){if(r.ranges){let n=N(r.ranges,o);r.ranges=Array.isArray(n)?{values:n}:n}else if(r.zones){let n=N(r.zones,o);r.zones=Array.isArray(n)?{values:n}:n}r.peaks&&(r.peaks=Array.isArray(r.peaks)?{values:r.peaks}:r.peaks),r.integrals&&(r.integrals=Array.isArray(r.integrals)?{values:r.integrals}:r.integrals)}return t}function Y(e){if(e?.version===2)return e;let t={...e,version:2},o={peaks:{delta:"x",originDelta:"originalX",intensity:"y"},ranges:{atomIDs:"atoms",intensity:"y"}};for(let r of t.spectra)r.peaks?r.peaks=N(r.peaks,o.peaks):r.ranges?r.ranges=N(r.ranges,o.ranges):r.zones&&(r.zones.values=$e(r.zones.values));return t}function $e(e){return e.map(t=>(t.signals&&(t.signals=t.signals.map(o=>{if(o.x&&o.y){let{x:{fromTo:r,...n},y:{fromTo:i,...c}}=o;o={...o,x:{...n,...r},y:{...c,...i}}}else{let{fromTo:r,deltaX:n,resolutionX:i,nucleusX:c,deltaY:s,resolutionY:l,nucleusY:a,shiftX:m,shiftY:p,...u}=o;o={...u,x:{from:r[0].from,to:r[0].to,delta:n,resolution:i,nucleus:c},y:{from:r[1].from,to:r[1].to,delta:s,resolution:l,nucleus:a}}}return o},[])),t),[])}var Ge={name:"apodization",label:"Apodization",value:{lineBroadening:1,gaussBroadening:0,lineBroadeningCenter:0}};function Z(e){if(e?.version===3)return e;let t={...e,version:3};for(let o of t.spectra)if(Array.isArray(o?.filters)&&o?.filters.length>0){let r=o.filters.findIndex(n=>n.name==="lineBroadening");if(r!==-1){let n={...o.filters[r],...Ge};o.filters[r]=o.filters[r-1],o.filters[r-1]=n}}return t}function $(e){if(e?.version===4)return e;let{version:t,...o}=e,r=[],n={};for(let{source:s,...l}of o.spectra){let a={},{info:m={},display:p={}}=l;if(m?.dimension===2&&!s?.jcampURL)if(m.isFt)a.data={rr:l.data};else continue;if(s?.jcampURL){let{jcampURL:g,jcampSpectrumIndex:d}=s,S=g.match(/(?<baseURL>^\w+:\/{2}\w+\/)(?<relativePath>.*)/);n[g]||(n[g]={baseURL:S?.groups.baseURL||"",relativePath:S?.groups.relativePath||g.replace(/^\.\//,"")}),a.sourceSelector={files:[n[g].relativePath]},d!==void 0&&(a.sourceSelector.jcamp={index:d})}a.filters=qe(l.filters);let{name:u,...f}=p;u&&(a.info={...m,name:u}),a.display=f,r.push({...l,...a})}let i={data:{...o,spectra:r},version:4},c={entries:Object.values(n)};return c.entries.length>0&&(i.data.source=c),i}function qe(e=[]){let t=[];for(let o of e){let{name:r,value:n}=o;switch(r){case"zeroFilling":t.push({...o,value:{nbPoints:n}});break;case"shiftX":case"shift2DX":case"shift2DY":t.push({...o,value:{shift:n}});break;default:t.push({...o})}}return t}function G(e){if(e?.version===5)return e;let t={...e,version:5},o={originFrom:"originalFrom",originTo:"originalTo",originDelta:"originalDelta",originX:"originalX",originY:"originalY",originZ:"originalZ"};for(let r of t?.data?.spectra||[])for(let n of["peaks","ranges","zones"])r?.[n]&&(r[n]=N(r[n],o));return t}function q(e){if(e?.version===6)return e;let t={...e,version:6};for(let o of t?.data?.spectra||[]){let{digitalFilter:r,fft:n,phaseCorrection:i}=Je(o);n?.flag&&r?.flag&&i&&Math.floor(r.value.digitalFilterValue)%2>0&&(i.value.ph0-=180)}return t}function Je(e,t=["phaseCorrection","fft","digitalFilter"]){let{filters:o=[]}=e,r={};for(let n of t)r[n]=o.find(i=>i.name===n);return r}function C(e,t="localStorage"){if(e?.version===7)return e;if(t==="nmrium")return ae(e);let o={...e,version:7};for(let r in e.workspaces)o.workspaces[r]=ae(o.workspaces[r]);return o}function ae(e){let{formatting:{nuclei:t,panels:o}={nuclei:null,panels:null},version:r,...n}=e,i={...n};return t&&(i.nuclei=He(t)),o&&(i.panels=o),i}function He(e){let t=[],o={name:"nucleus",ppm:"ppmFormat",hz:"hzFormat"};for(let r in e)t.push(N(e[r],o));return t}function J(e){if(e?.version===7)return e;let t={...e,version:7};return t?.settings&&(t.settings=C(t.settings,"nmrium")),t}function A(e,t="localStorage"){if(e?.version===8)return e;if(t==="nmrium")return le(e);let o={...e,version:8};for(let r in e.workspaces)o.workspaces[r]=le(o.workspaces[r]);return o}function le(e){let{version:t,...o}=e,r={...o};return r.display.panels=Qe(e),r}function Qe(e){let t={},o=e.display.panels;for(let r of Object.keys(o)){let{display:n,open:i}=o[r];t[r]={display:n,visible:n,open:i}}return t}function H(e){if(e?.version===8)return e;let t={...e,version:8};t?.settings&&(t.settings=A(t.settings,"nmrium"));for(let o of t?.data?.spectra||[]){let{filters:r=[]}=o;for(let s=0;s<r.length;s++){let{flag:l,isDeleteAllow:a,label:m,...p}=r[s];r[s]={...p,enabled:l}}let n=r.findIndex(s=>s.name==="apodization");if(n!==-1){let s=r[n],{lineBroadening:l,gaussBroadening:a,lineBroadeningCenter:m}=s.value;s.value={exponential:{apply:!0,options:{lineBroadening:a>0?-l:l}}},a>0&&(s.value.gaussian={apply:!0,options:{lineBroadening:.6*a,lineBroadeningCenter:m}}),r[n]=s}let i=r.findIndex(s=>s.name==="apodizationDimension1"),c=r.findIndex(s=>s.name==="apodizationDimension2");if(i!==-1){let s=r[i],{shapes:l}=s.value.compose;s.value=ce(l)}if(c!==-1){let s=r[c],{shapes:l}=s.value.compose;s.value=ce(l)}}return t}function ce(e){let t={};for(let{shape:o}of e){let{kind:r,options:n}=o;if(r==="sineBell"){let{exponent:i,offset:c}=n,s=i===2?"sineSquare":"sineBell";t[s]={apply:!0,options:{offset:c}}}}return t}function Q(e){let{version:t,plugins:o,...r}=e;return t===9?e:{version:9,plugins:{},...r}}function ee(e){if(e?.version>=10)return e;let t={...e,version:10};if(e.data){let{source:o,spectra:r,...n}=e.data,i=o?crypto.randomUUID():void 0,c=o?[{...o,id:i}]:[];t.data={...n,sources:c,spectra:o?r?.map(s=>({...s,sourceId:i})):r}}return t}function te(e){let{version:t}=e;if(t>=11)return e;let o={...e,version:11};return e?.view?.molecules&&(o.view=et(e.view)),o}function et(e){let{molecules:t,...o}=e,r={};for(let[n,i]of Object.entries(t)){let{showAtomNumber:c,...s}=i;r[n]={...s,atomAnnotation:"none",showLabel:!1}}return{molecules:r,...o}}function re(e){if(e?.version>=12)return e;let t={...e,version:12};if(t.data){let o=e.data.spectra??[],r=e.data.molecules??[];for(let n of o){let{sourceId:i,fileCollectionId:c,sourceSelector:s}=n;delete n.sourceId,delete n.fileCollectionId,delete n.sourceSelector,s&&(n.selector={...s,root:c??i})}for(let n of r){let{sourceId:i,fileCollectionId:c,sourceSelector:s}=n;delete n.sourceId,delete n.fileCollectionId,delete n.sourceSelector,s&&(n.selector={...s,root:c??i})}}return t}function oe(e){if(e?.version>=13)return e;let t={...e,version:13};if(t.data){let o=e.data.spectra??[];for(let r of o){let n=r.ranges?.values??[];for(let i of n){let{diaIDs:c,assignment:s,nbAtoms:l,signals:a=[]}=i,m=a.some(p=>p.diaIDs&&p.diaIDs.length>0);for(let p of a)!m&&c&&l&&(p.diaIDs=c,p.nbAtoms=l),!p.assignment&&s&&(p.assignment=s);delete i.diaIDs,delete i.assignment,delete i.nbAtoms}}}return t}function O(e,t){e.plugins||(e.plugins={});let o=e.plugins;for(let r of t.values()){if(!r.shouldSerialize){delete o[r.id];continue}o[r.id]||(o[r.id]={id:r.id,version:r.version}),o[r.id].id=r.id,o[r.id].version=r.version}}var tt=[X,Y,Z,$,G,q,J,H,Q,ee,te,re,oe];function ue(e,t,o){let r=structuredClone(e),n=Object.entries(e?.plugins??{});for(let[s,{version:l}]of n){let a=o.get(s);if(!(a&&a.version>=l)){if(a){console.warn(`Plugin "${a.id}" is loaded with a version older (${a.version}) than the one used to save the state (${l}).
2
2
  NMRium may fail to load the state.
3
3
  Please update the plugin to the latest version.`);continue}console.warn(`Plugin "${s}@${l}" is not registered. NMRium may fail to load the state.
4
- Please consider open this file with the plugin installed.`)}}let i=new Set,c=()=>{let s=r.version;for(let l of o.values())for(let a of l.migrations){if(i.has(a)||s<a.minCore||a.maxCore&&s>a.maxCore)continue;if((r.plugins?.[l.id]?.version||0)===l.version)break;r=a.up(r),i.add(a)}};for(let s=e?.version||0;s<t;s++){let l=tt[s];r=l(r),c()}return c(),O(r,o),r}var rt=["topbar.right","topbar.about_us.modal"],ot=[],Jr=[...rt,...ot],nt={},ne={};{let e=nt,t=ne;for(let[o,r]of Object.entries(e))t[r]||(t[r]=[]),t[r]?.push(o)}function*pe(e){let{slot:t,plugins:o,supportedToDeprecatedSlots:r=ne}=e,n=r[t];for(let[i,c]of o.entries()){let s=c.ui;if(!s)continue;let l=s[t];if(l){yield[i,l];continue}if(n)for(let a of n){let m=c.ui?.[a];if(m){yield[i,m],console.warn(`Plugin ${c.id} used deprecated slot "${a}". Please update this plugin to use "${t}" instead.`);break}}}}import{FileCollection as ct}from"file-collection";var me={SDF:"sdf",MOL:"mol",NMRIUM:"nmrium",NMRIUM_ARCHIVE:"nmrium.zip",JSON:"json",JCAMP:"jcamp",DX:"dx",JDX:"jdx",JDF:"jdf",NMREDATA:"nmredata",SMILES:"smiles",SMI:"smi"};function w(e){return e.includes(".")?e.replace(/^.*\./,"").toLowerCase():""}function T(e,t={},o){let{data:r,...n}=e;if(!r)return e;let{spectra:i=[]}=r,{keep1D:c=!0,keep2D:s=!0,onlyReal:l}=t,a=l?"ft":t.dataSelection||"both",m=[];for(let p of i){if(!p.info){m.push(p);continue}let{isFid:u,dimension:f,name:g}=p.info;if(!F(f===1&&!c,g,o)&&!F(f===2&&!s,g,o)&&!F(u&&a==="ft",g,o)&&!F(!u&&a==="fid",g,o))if(l&&!u)if(p.info.isComplex=!1,it(p)){let{rr:d}=p.data;m.push({...p,data:{rr:d}})}else{let{re:d,x:S}=p.data;m.push({...p,data:{re:d,x:S}})}else m.push(p)}return{data:{...r,spectra:m},...n}}function F(e,t,o){return e?(o?.warn(`Skipping ${t} because it didn't match the import filters.`),!0):!1}function it(e){let{info:t}=e;return t?.dimension===2}function E(e){let{nmriumState:t,plugins:o,options:r}=e;for(let n of o.values()){let i=n.onReadProcess?.onProcessing;i&&i(t,r)}}async function L(e,t,o={}){let{selector:r,converter:n,logger:i}=o,c=[],s=[];for(let u of t.values()){let{onReadProcess:f}=u;f&&(f?.onFiles&&c.push(u),f?.supportedExtensions?.length&&f?.onFile&&s.push(u))}let l=await Promise.allSettled(c.map(u=>u.onReadProcess.onFiles(e,o))),a=[],m=await Promise.allSettled(e.files.flatMap(u=>{let f=w(u.name).toLowerCase();return s.flatMap(g=>{let{supportedExtensions:d,onFile:S}=g.onReadProcess;return d.includes(f)?(a.push({file:u,plugin:g}),S(u,{logger:i,selector:r,converter:n})):[]})})),p={spectra:[],molecules:[]};for(let u=0;u<l.length;u++){let f=l[u];switch(f.status){case"fulfilled":{let{spectra:g=[],molecules:d=[]}=f.value||{};p.spectra.push(...g),p.molecules.push(...d);break}case"rejected":{let g=f.reason,d=c[u];o.logger?.error(`Load file collection with plugin ${d.id}@${d.version} fails with: ${g}`);break}}}for(let u=0;u<m.length;u++){let f=m[u];switch(f.status){case"fulfilled":{let{spectra:g=[],molecules:d=[]}=f.value||{};p.spectra.push(...g),p.molecules.push(...d);break}case"rejected":{let g=f.reason,{file:d,plugin:S}=a[u];o.logger?.error(`Load file ${d.relativePath} with plugin ${S.id}@${S.version} fails with: ${g}`);break}}}return p}import{FileCollection as Se}from"file-collection";import{FileCollection as de}from"file-collection";import fe from"lodash.merge";import{xIsEquallySpaced as st}from"ml-spectra-processing";async function U(e){let{input:t,spectraResult:o,unserializedSpectrum:r,options:n,plugins:i,migrator:c}=e,l=(await M({input:t,migrator:c,plugins:i,options:{...n,selector:r.selector}}))?.nmriumState?.data?.spectra??[],a=l.pop();if(a){o.push(ge(r,a));for(let m of l)o.push(ge(r,at(m)))}}function ge(e,t){let{data:o,...r}=e;if(!t.selector?.root&&e.selector?.root&&(t.selector??=e.selector,t.selector.root=e.selector.root),"ranges"in t){let{data:n,...i}=t;return{...fe(i,r),data:n}}else if("zones"in t){let{data:n,...i}=t;return{...fe(i,r),data:n}}else return t}function at(e){return{...e,id:b()}}function k(e){let{spectrum:t,spectraResult:o,logger:r}=e,{dimension:n}=t.info;if(n===1){if(!st(t.data)){r?.error('The ".nmrium" file is corrupted; the X-axis values are not equally distant.');return}o.push(R(t))}else n===2&&o.push(D(t))}async function j(e){let{input:t,moleculesResult:o,unserializedMolecule:r,options:n,plugins:i,migrator:c}=e,{selector:s}=r,a=(await M({input:t,migrator:c,plugins:i,options:{...n,selector:s}}))?.nmriumState?.data?.molecules??[];for(let m of a)!m.selector?.root&&s?.root&&(m.selector??=s,m.selector.root=s.root),o.push({...r,...m})}function z(e){let{molecule:t,moleculesResult:o}=e;o.push(t)}async function V(e){let{nmriumObjectInput:t,options:o={},migrator:r,plugins:n,fromSourceOptions:i}=e,c=r(t),{data:s,...l}=c,a=new de;if(!s)return[{...l},a];let m={data:{...s,spectra:[],molecules:[]},...l},p=m.data,{sources:u=[],spectra:f,molecules:g}=p,d=await Promise.all(u.map(async P=>{let x=await de.fromSource(P,{unzip:{zipExtensions:["zip","nmredata"]}},i);if(!P.baseURL)for(let I of P.entries)I.baseURL||(I.baseURL=i?.baseURL);return[P.id,x]})),S=new Map(d),y=[];for(let P of s.spectra){let x=P.selector?.root??"",I=S.get(x);if(!I){k({spectrum:P,spectraResult:f,logger:o.logger});continue}y.push(U({input:I,spectraResult:f,unserializedSpectrum:P,migrator:r,plugins:n,options:o}))}for(let P of s.molecules??[]){let x=S.get(P.sourceId);if(!x){z({molecule:P,moleculesResult:g,logger:o.logger});continue}y.push(j({input:x,unserializedMolecule:P,moleculesResult:g,migrator:r,plugins:n,options:o}))}await Promise.allSettled(y);for(let[P,x]of S.entries())a.appendFileCollection(x,P);return[m,a]}async function _(e){let{file:t,options:o={},migrator:r,plugins:n,fromSourceOptions:i}=e,c=await t.arrayBuffer(),s=await(Se.isZip(c)?lt(c):t.text());return V({nmriumObjectInput:JSON.parse(s),plugins:n,migrator:r,options:o,fromSourceOptions:i})}async function lt(e){let t=await Se.fromZip(e);if(t.files.length===0)throw new Error("compressed nmrium file is corrupted");return t.files[0].text()}async function M(e){let{options:t={},input:o,migrator:r,plugins:n,fromSourceOptions:i}=e,{selectorRoot:c=crypto.randomUUID()}=t,s=mt(await ut(o),t.selector?.files),l=ft(s);if(l){let[g]=await _({file:l,migrator:r,plugins:n,options:t,fromSourceOptions:i});return ye(g,c),{nmriumState:g,containsNmrium:!0,fileCollection:s,selectorRoot:c}}let a=await L(s,n,t),m=T({version:13,data:a},t?.selector?.general,t.logger),{onLoadProcessing:p,experimentalFeatures:u}=t,f={...p,autoProcessing:p?.autoProcessing??!1,experimentalFeatures:u};return E({nmriumState:m,plugins:n,options:f}),ye(m,c),{nmriumState:m,containsNmrium:!1,fileCollection:s,selectorRoot:c}}function ut(e){return Array.isArray(e)?Promise.reject(new Error("For a set of fileCollectionItems pass a FileCollection instance")):pt(e)?Promise.resolve(e):new ct().appendExtendedSource({...e,uuid:crypto.randomUUID()})}function pt(e){return typeof e=="object"&&"files"in e}function mt(e,t){if(!t)return e;let o=new Set(t);return e.filter(r=>o.has(r.relativePath))}function ft(e){return e.files.find(t=>w(t.name).toLowerCase()===me.NMRIUM)}function ye(e,t){for(let o of e.data?.spectra??[])o.selector?.root||(o.selector??={root:t},o.selector.root||=t);for(let o of e.data?.molecules??[])o.selector?.root||(o.selector??={root:t},o.selector.root||=t)}import{FileCollection as dt}from"file-collection";async function Pe(e){let t={},o=[];for(let r of e.sources)switch(r.relativePath){case".META-NMRIUM/NMRIUM_ARCHIVE":t.archive=r;break;case".META-NMRIUM/VERSION":o.push(r.text().then(n=>{t.version=Number.parseInt(n,10)}));break;case"state.json":o.push(r.text().then(n=>{t.state=JSON.parse(n)}));break;default:}return await Promise.all(o),t}function xe(e){if(!e.archive)throw new Error("Not a valid NMRium archive");if(typeof e.version!="number"||Number.isNaN(e.version))throw new Error("Not a valid NMRium archive, no version specified");if(!e.state)throw new Error("NMRium Archive corrupted, state.json is missing")}function he(e){return e.filter(t=>!gt(t.relativePath))}function gt(e){return e.startsWith(".META-NMRIUM/")||e==="state.json"||e==="index.txt"}async function Ne(e){let{options:t,plugins:o,migrator:r}=e,n=await dt.fromIum(e.input),i=await Pe(n);xe(i);let c=he(n),s=r(i.state),l={...s,data:{...s.data,spectra:[],molecules:[]}},a=l.data.spectra,m=l.data.molecules,p=St(n),u=[];for(let f of s.data.spectra)u.push(yt({subRoots:p,unserializedSpectrum:f,spectraResult:a,options:t,plugins:o,migrator:r}));for(let f of s.data.molecules??[])u.push(Pt({subRoots:p,unserializedMolecule:f,moleculesResult:m,options:t,plugins:o,migrator:r}));return await Promise.allSettled(u),[l,c]}function St(e){let t=new Map;return{get(o){let r=t.get(o);return r||(r=e.subroot(o),t.set(o,r)),r},[Symbol("debug")]:{ium:e,views:t}}}async function yt(e){let{subRoots:t}=e,{unserializedSpectrum:o,spectraResult:r}=e,{options:n,plugins:i,migrator:c}=e,{selector:s}=o,l=await be({subRoots:t,selector:s});if(!l)return k({spectrum:o,spectraResult:r,logger:n?.logger});await U({input:l,unserializedSpectrum:o,spectraResult:r,options:n,plugins:i,migrator:c})}async function Pt(e){let{subRoots:t}=e,{unserializedMolecule:o,moleculesResult:r}=e,{options:n,plugins:i,migrator:c}=e,{selector:s}=o,l=await be({subRoots:t,selector:s});if(!l)return z({molecule:o,moleculesResult:r,logger:n?.logger});await j({input:l,unserializedMolecule:o,moleculesResult:r,options:n,plugins:i,migrator:c})}async function be(e){let{subRoots:t,selector:o}=e;if(!o)return;let{root:r}=o;if(r)return t.get(r)}import{FileCollection as xt}from"file-collection";async function Re(e){let{source:t,plugins:o,options:r={},sourceId:n=crypto.randomUUID()}=e,{converter:i,...c}=r,s={...t,id:n},l={spectra:[],molecules:[]},a=await xt.fromSource(s,{unzip:{zipExtensions:["zip","nmredata"]}}),{spectra:m=[],molecules:p=[]}=await L(a,o,{converter:{...i,bruker:{keepFiles:!0,...Reflect.get(i??{},"bruker")}},...c});l.spectra.push(...m),l.molecules.push(...p);for(let d of l.spectra)d.selector??={root:n},d.selector.root=n;for(let d of l.molecules)d.selector??={root:n},d.selector.root=n;l.sources??=[],l.sources.push(s);let u=T({version:13,data:l},r?.selector?.general),{onLoadProcessing:f}=c,g={filters:f?.filters,autoProcessing:f?.autoProcessing??!1,experimentalFeatures:r.experimentalFeatures};return E({nmriumState:u,plugins:o,options:g}),[u,a,n]}function v(e,t){let o={};for(let r in e)t.includes(r)||(o[r]=e[r]);return o}var ht=["data","originalData","info","originalInfo","meta","customInfo"],Nt=["data","originalData","info","originalInfo","meta","customInfo"],bt=["selector","originalData","originalInfo"];function Oe(e,t,o={}){let{version:r,data:n}=e;if(n.actionType)return e;let i={version:r,plugins:e.plugins},{includeData:c}=o;c!=="noData"&&(i.data=Rt({...n},c));let{includeSettings:s,includeView:l}=o;return s&&(i.settings=e.settings),l&&(i.view=e.view),O(i,t),i}function Rt(e,t="rawData"){let{spectra:o}=e;switch(t){case"dataSource":return Ot(e);case"selfContained":case"selfContainedExternalDatasource":return It(e);case"rawData":return{...v(e,["sources"]),spectra:o.map(Dt)};default:return e}}function Ot(e){let{spectra:t}=e;if(!e.sources)throw new Error("sources property should exists for dataSource serialization");return{...e,spectra:t.map(Mt)}}function It(e){let{spectra:t,sources:o,...r}=e;return{...r,spectra:t.map(vt)}}function Mt(e){return v(e,ht)}function vt(e){return v(e,Nt)}function Dt(e){let{data:t,info:o,originalData:r,originalInfo:n}=e,i=v(e,bt);return i.data=r||t,i.info=n||o,i}import{FileCollection as Ct}from"file-collection";async function Ie(e){let{spectra:t,molecules:o,aggregator:r,serializedState:n,includeData:i=!0}=e;return Ct.fromCollection(r,{filter:{ignoreDotfiles:!1}}).toIum({includeData:i,mimetype:"chemical/x-nmrium+zip",*getExtraFiles(s){yield{relativePath:".META-NMRIUM/NMRIUM_ARCHIVE",data:""},yield{relativePath:".META-NMRIUM/VERSION",data:"0"},yield{relativePath:"state.json",data:n},yield{relativePath:"index.txt",data:At({aggregator:r,spectra:t,molecules:o,index:s})}}})}function At(e){let{aggregator:t,spectra:o,molecules:r,index:n}=e,i=new Map,c=new Map(n.sources.map(l=>[l.uuid,l]));for(let l of o){let a=l.selector?.root;a&&(i.has(a)||i.set(a,t.subroot(a)))}for(let l of r){let a=l.selector?.root;a&&(i.has(a)||i.set(a,t.subroot(a)))}let s=[];for(let[l,a]of i.entries()){let m=new Map(a.sources.map(u=>[u.uuid,u])),p=`data/${l}/`;s.push(p);for(let u of a.files){let f=c.get(u.sourceUUID),g=m.get(u.sourceUUID),d=f?.baseURL?.startsWith("ium:/")?"embedded":"linked",y=n.paths[u.sourceUUID]?.replace(p,""),P=u.relativePath.replace(g?.relativePath??"",""),x=y?y+P:u.relativePath;s.push(` ${x} (${d})`)}s.push(`
4
+ Please consider open this file with the plugin installed.`)}}let i=new Set,c=()=>{let s=r.version;for(let l of o.values())for(let a of l.migrations){if(i.has(a)||s<a.minCore||a.maxCore&&s>a.maxCore)continue;if((r.plugins?.[l.id]?.version||0)===l.version)break;r=a.up(r),i.add(a)}};for(let s=e?.version||0;s<t;s++){let l=tt[s];r=l(r),c()}return c(),O(r,o),r}var rt=["topbar.right","topbar.about_us.modal"],ot=[],Jr=[...rt,...ot],nt={},ne={};{let e=nt,t=ne;for(let[o,r]of Object.entries(e))t[r]||(t[r]=[]),t[r]?.push(o)}function*pe(e){let{slot:t,plugins:o,supportedToDeprecatedSlots:r=ne}=e,n=r[t];for(let[i,c]of o.entries()){let s=c.ui;if(!s)continue;let l=s[t];if(l){yield[i,l];continue}if(n)for(let a of n){let m=c.ui?.[a];if(m){yield[i,m],console.warn(`Plugin ${c.id} used deprecated slot "${a}". Please update this plugin to use "${t}" instead.`);break}}}}import{FileCollection as ct}from"file-collection";var me={SDF:"sdf",MOL:"mol",NMRIUM:"nmrium",NMRIUM_ARCHIVE:"nmrium.zip",JSON:"json",JCAMP:"jcamp",DX:"dx",JDX:"jdx",JDF:"jdf",NMREDATA:"nmredata",SMILES:"smiles",SMI:"smi"};function F(e){return e.includes(".")?e.replace(/^.*\./,"").toLowerCase():""}function T(e,t={},o){let{data:r,...n}=e;if(!r)return e;let{spectra:i=[]}=r,{keep1D:c=!0,keep2D:s=!0,onlyReal:l}=t,a=l?"ft":t.dataSelection||"both",m=[];for(let p of i){if(!p.info){m.push(p);continue}let{isFid:u,dimension:f,name:g}=p.info;if(!w(f===1&&!c,g,o)&&!w(f===2&&!s,g,o)&&!w(u&&a==="ft",g,o)&&!w(!u&&a==="fid",g,o))if(l&&!u)if(p.info.isComplex=!1,it(p)){let{rr:d}=p.data;m.push({...p,data:{rr:d}})}else{let{re:d,x:S}=p.data;m.push({...p,data:{re:d,x:S}})}else m.push(p)}return{data:{...r,spectra:m},...n}}function w(e,t,o){return e?(o?.warn(`Skipping ${t} because it didn't match the import filters.`),!0):!1}function it(e){let{info:t}=e;return t?.dimension===2}function E(e){let{nmriumState:t,plugins:o,options:r}=e;for(let n of o.values()){let i=n.onReadProcess?.onProcessing;i&&i(t,r)}}async function L(e,t,o={}){let{selector:r,converter:n,logger:i}=o,c=[],s=[];for(let u of t.values()){let{onReadProcess:f}=u;f&&(f?.onFiles&&c.push(u),f?.supportedExtensions?.length&&f?.onFile&&s.push(u))}let l=await Promise.allSettled(c.map(u=>u.onReadProcess.onFiles(e,o))),a=[],m=await Promise.allSettled(e.files.flatMap(u=>{let f=F(u.name).toLowerCase();return s.flatMap(g=>{let{supportedExtensions:d,onFile:S}=g.onReadProcess;return d.includes(f)?(a.push({file:u,plugin:g}),S(u,{logger:i,selector:r,converter:n})):[]})})),p={spectra:[],molecules:[]};for(let u=0;u<l.length;u++){let f=l[u];switch(f.status){case"fulfilled":{let{spectra:g=[],molecules:d=[]}=f.value||{};p.spectra.push(...g),p.molecules.push(...d);break}case"rejected":{let g=f.reason,d=c[u];o.logger?.error(`Load file collection with plugin ${d.id}@${d.version} fails with: ${g}`);break}}}for(let u=0;u<m.length;u++){let f=m[u];switch(f.status){case"fulfilled":{let{spectra:g=[],molecules:d=[]}=f.value||{};p.spectra.push(...g),p.molecules.push(...d);break}case"rejected":{let g=f.reason,{file:d,plugin:S}=a[u];o.logger?.error(`Load file ${d.relativePath} with plugin ${S.id}@${S.version} fails with: ${g}`);break}}}return p}import{FileCollection as Se}from"file-collection";import{FileCollection as de}from"file-collection";import fe from"lodash.merge";import{xIsEquallySpaced as st}from"ml-spectra-processing";async function U(e){let{input:t,spectraResult:o,unserializedSpectrum:r,options:n,plugins:i,migrator:c}=e,l=(await v({input:t,migrator:c,plugins:i,options:{...n,selector:r.selector}}))?.nmriumState?.data?.spectra??[],a=l.pop();if(a){o.push(ge(r,a));for(let m of l)o.push(ge(r,at(m)))}}function ge(e,t){let{data:o,...r}=e;if(!t.selector?.root&&e.selector?.root&&(t.selector??=e.selector,t.selector.root=e.selector.root),"ranges"in t){let{data:n,...i}=t;return{...fe(i,r),data:n}}else if("zones"in t){let{data:n,...i}=t;return{...fe(i,r),data:n}}else return t}function at(e){return{...e,id:b()}}function k(e){let{spectrum:t,spectraResult:o,logger:r}=e,{dimension:n}=t.info;if(n===1){if(!st(t.data)){r?.error('The ".nmrium" file is corrupted; the X-axis values are not equally distant.');return}o.push(R(t))}else n===2&&o.push(D(t))}async function j(e){let{input:t,moleculesResult:o,unserializedMolecule:r,options:n,plugins:i,migrator:c}=e,{selector:s}=r,a=(await v({input:t,migrator:c,plugins:i,options:{...n,selector:s}}))?.nmriumState?.data?.molecules??[];for(let m of a)!m.selector?.root&&s?.root&&(m.selector??=s,m.selector.root=s.root),o.push({...r,...m})}function z(e){let{molecule:t,moleculesResult:o}=e;o.push(t)}async function V(e){let{nmriumObjectInput:t,options:o={},migrator:r,plugins:n,fromSourceOptions:i}=e,c=r(t),{data:s,...l}=c,a=new de;if(!s)return[{...l},a];let m={data:{...s,spectra:[],molecules:[]},...l},p=m.data,{sources:u=[],spectra:f,molecules:g}=p,d=await Promise.all(u.map(async P=>{let x=await de.fromSource(P,{unzip:{zipExtensions:["zip","nmredata"]}},i);if(!P.baseURL)for(let I of P.entries)I.baseURL||(I.baseURL=i?.baseURL);return[P.id,x]})),S=new Map(d),y=[];for(let P of s.spectra){let x=P.selector?.root??"",I=S.get(x);if(!I){k({spectrum:P,spectraResult:f,logger:o.logger});continue}y.push(U({input:I,spectraResult:f,unserializedSpectrum:P,migrator:r,plugins:n,options:o}))}for(let P of s.molecules??[]){let x=S.get(P.sourceId);if(!x){z({molecule:P,moleculesResult:g,logger:o.logger});continue}y.push(j({input:x,unserializedMolecule:P,moleculesResult:g,migrator:r,plugins:n,options:o}))}await Promise.allSettled(y);for(let[P,x]of S.entries())a.appendFileCollection(x,P);return[m,a]}async function _(e){let{file:t,options:o={},migrator:r,plugins:n,fromSourceOptions:i}=e,c=await t.arrayBuffer(),s=await(Se.isZip(c)?lt(c):t.text());return V({nmriumObjectInput:JSON.parse(s),plugins:n,migrator:r,options:o,fromSourceOptions:i})}async function lt(e){let t=await Se.fromZip(e);if(t.files.length===0)throw new Error("compressed nmrium file is corrupted");return t.files[0].text()}async function v(e){let{options:t={},input:o,migrator:r,plugins:n,fromSourceOptions:i}=e,{selectorRoot:c=crypto.randomUUID()}=t,s=mt(await ut(o),t.selector?.files),l=ft(s);if(l){let[g]=await _({file:l,migrator:r,plugins:n,options:t,fromSourceOptions:i});return ye(g,c),{nmriumState:g,containsNmrium:!0,fileCollection:s,selectorRoot:c}}let a=await L(s,n,t),m=T({version:13,data:a},t?.selector?.general,t.logger),{onLoadProcessing:p,experimentalFeatures:u}=t,f={...p,autoProcessing:p?.autoProcessing??!1,experimentalFeatures:u};return E({nmriumState:m,plugins:n,options:f}),ye(m,c),{nmriumState:m,containsNmrium:!1,fileCollection:s,selectorRoot:c}}function ut(e){return Array.isArray(e)?Promise.reject(new Error("For a set of fileCollectionItems pass a FileCollection instance")):pt(e)?Promise.resolve(e):new ct().appendExtendedSource({...e,uuid:crypto.randomUUID()})}function pt(e){return typeof e=="object"&&"files"in e}function mt(e,t){if(!t)return e;let o=new Set(t);return e.filter(r=>o.has(r.relativePath))}function ft(e){return e.files.find(t=>F(t.name).toLowerCase()===me.NMRIUM)}function ye(e,t){for(let o of e.data?.spectra??[])o.selector?.root||(o.selector??={root:t},o.selector.root||=t);for(let o of e.data?.molecules??[])o.selector?.root||(o.selector??={root:t},o.selector.root||=t)}import{FileCollection as dt}from"file-collection";async function Pe(e){let t={},o=[];for(let r of e.sources)switch(r.relativePath){case"META-INF/NMRIUM_ARCHIVE":t.archive=r;break;case"META-INF/VERSION":o.push(r.text().then(n=>{t.version=Number.parseInt(n,10)}));break;case"state.json":o.push(r.text().then(n=>{t.state=JSON.parse(n)}));break;default:}return await Promise.all(o),t}function xe(e){if(!e.archive)throw new Error("Not a valid NMRium archive");if(typeof e.version!="number"||Number.isNaN(e.version))throw new Error("Not a valid NMRium archive, no version specified");if(!e.state)throw new Error("NMRium Archive corrupted, state.json is missing")}function he(e){return e.filter(t=>!gt(t.relativePath))}function gt(e){return e.startsWith("META-INF/")||e==="state.json"||e==="index.txt"}async function Ne(e){let{options:t,plugins:o,migrator:r}=e,n=await dt.fromIum(e.input),i=await Pe(n);xe(i);let c=he(n),s=r(i.state),l={...s,data:{...s.data,spectra:[],molecules:[]}},a=l.data.spectra,m=l.data.molecules,p=St(n),u=[];for(let f of s.data.spectra)u.push(yt({subRoots:p,unserializedSpectrum:f,spectraResult:a,options:t,plugins:o,migrator:r}));for(let f of s.data.molecules??[])u.push(Pt({subRoots:p,unserializedMolecule:f,moleculesResult:m,options:t,plugins:o,migrator:r}));return await Promise.allSettled(u),[l,c]}function St(e){let t=new Map;return{get(o){let r=t.get(o);return r||(r=e.subroot(o),t.set(o,r)),r},[Symbol("debug")]:{ium:e,views:t}}}async function yt(e){let{subRoots:t}=e,{unserializedSpectrum:o,spectraResult:r}=e,{options:n,plugins:i,migrator:c}=e,{selector:s}=o,l=await be({subRoots:t,selector:s});if(!l)return k({spectrum:o,spectraResult:r,logger:n?.logger});await U({input:l,unserializedSpectrum:o,spectraResult:r,options:n,plugins:i,migrator:c})}async function Pt(e){let{subRoots:t}=e,{unserializedMolecule:o,moleculesResult:r}=e,{options:n,plugins:i,migrator:c}=e,{selector:s}=o,l=await be({subRoots:t,selector:s});if(!l)return z({molecule:o,moleculesResult:r,logger:n?.logger});await j({input:l,unserializedMolecule:o,moleculesResult:r,options:n,plugins:i,migrator:c})}async function be(e){let{subRoots:t,selector:o}=e;if(!o)return;let{root:r}=o;if(r)return t.get(r)}import{FileCollection as xt}from"file-collection";async function Re(e){let{source:t,plugins:o,options:r={},sourceId:n=crypto.randomUUID()}=e,{converter:i,...c}=r,s={...t,id:n},l={spectra:[],molecules:[]},a=await xt.fromSource(s,{unzip:{zipExtensions:["zip","nmredata"]}}),{spectra:m=[],molecules:p=[]}=await L(a,o,{converter:{...i,bruker:{keepFiles:!0,...Reflect.get(i??{},"bruker")}},...c});l.spectra.push(...m),l.molecules.push(...p);for(let d of l.spectra)d.selector??={root:n},d.selector.root=n;for(let d of l.molecules)d.selector??={root:n},d.selector.root=n;l.sources??=[],l.sources.push(s);let u=T({version:13,data:l},r?.selector?.general),{onLoadProcessing:f}=c,g={filters:f?.filters,autoProcessing:f?.autoProcessing??!1,experimentalFeatures:r.experimentalFeatures};return E({nmriumState:u,plugins:o,options:g}),[u,a,n]}function M(e,t){let o={};for(let r in e)t.includes(r)||(o[r]=e[r]);return o}var ht=["data","originalData","info","originalInfo","meta","customInfo"],Nt=["data","originalData","info","originalInfo","meta","customInfo"],bt=["selector","originalData","originalInfo"];function Oe(e,t,o={}){let{version:r,data:n}=e;if(n.actionType)return e;let i={version:r,plugins:e.plugins},{includeData:c}=o;c!=="noData"&&(i.data=Rt({...n},c));let{includeSettings:s,includeView:l}=o;return s&&(i.settings=e.settings),l&&(i.view=e.view),O(i,t),i}function Rt(e,t="rawData"){let{spectra:o}=e;switch(t){case"dataSource":return Ot(e);case"selfContained":case"selfContainedExternalDatasource":return It(e);case"rawData":return{...M(e,["sources"]),spectra:o.map(Dt)};default:return e}}function Ot(e){let{spectra:t}=e;if(!e.sources)throw new Error("sources property should exists for dataSource serialization");return{...e,spectra:t.map(vt)}}function It(e){let{spectra:t,sources:o,...r}=e;return{...r,spectra:t.map(Mt)}}function vt(e){return M(e,ht)}function Mt(e){return M(e,Nt)}function Dt(e){let{data:t,info:o,originalData:r,originalInfo:n}=e,i=M(e,bt);return i.data=r||t,i.info=n||o,i}import{FileCollection as Ct}from"file-collection";async function Ie(e){let{spectra:t,molecules:o,aggregator:r,serializedState:n,includeData:i=!0}=e;return Ct.fromCollection(r,{filter:{ignoreDotfiles:!1}}).toIum({includeData:i,mimetype:"chemical/x-nmrium+zip",*getExtraFiles(s){yield{relativePath:"META-INF/NMRIUM_ARCHIVE",data:""},yield{relativePath:"META-INF/VERSION",data:"0"},yield{relativePath:"state.json",data:n},yield{relativePath:"index.txt",data:At({aggregator:r,spectra:t,molecules:o,index:s})}}})}function At(e){let{aggregator:t,spectra:o,molecules:r,index:n}=e,i=new Map,c=new Map(n.sources.map(l=>[l.uuid,l]));for(let l of o){let a=l.selector?.root;a&&(i.has(a)||i.set(a,t.subroot(a)))}for(let l of r){let a=l.selector?.root;a&&(i.has(a)||i.set(a,t.subroot(a)))}let s=[];for(let[l,a]of i.entries()){let m=new Map(a.sources.map(u=>[u.uuid,u])),p=`data/${l}/`;s.push(p);for(let u of a.files){let f=c.get(u.sourceUUID),g=m.get(u.sourceUUID),d=f?.baseURL?.startsWith("ium:/")?"embedded":"linked",y=n.paths[u.sourceUUID]?.replace(p,""),P=u.relativePath.replace(g?.relativePath??"",""),x=y?y+P:u.relativePath;s.push(` ${x} (${d})`)}s.push(`
5
5
  `)}return s.join(`
6
- `)}var ie=class{version=13;#e=new Map;registerPlugin(t){if(this.#e.has(t.id)){console.warn(`Plugin ${t.id} is already registered. skip.`),console.debug("Plugin already registered:",this.#e.get(t.id)),console.debug("Plugin to register:",t);return}this.#e.set(t.id,t)}registerPlugins(t){for(let o of t)this.registerPlugin(o)}migrate(t){return ue(t,this.version,this.#e)}read(t,o={},r){return M({input:t,options:o,fromSourceOptions:r,migrator:this.migrate.bind(this),plugins:this.#e})}readNMRiumArchive(t,o={}){return Ne({input:t,options:o,plugins:this.#e,migrator:this.migrate.bind(this)})}readNMRiumObject(t,o,r){return V({nmriumObjectInput:t,options:o,fromSourceOptions:r,plugins:this.#e,migrator:this.migrate.bind(this)})}readNMRiumFile(t,o={},r){return _({file:t,options:o,fromSourceOptions:r,plugins:this.#e,migrator:this.migrate.bind(this)})}readFromWebSource(t,o){return Re({source:t,options:o,plugins:this.#e})}serializeNmriumState(t,o){return Oe(t,this.#e,o)}serializeNmriumArchive(t){return Ie(t)}serializePlugins(){let t={plugins:{}};return O(t,this.#e),t.plugins}slot(t){return pe({slot:t,plugins:this.#e})}};function wt(e,t){if(t>13)return 0;let o=-1;for(let r=0;r<e.length;r++)if(e[r].version>t){o=r;break}return o}var Me=[{version:6,fun:C},{version:7,fun:A}];function Ft(e){let{version:t}=e||{},o=wt(Me,t);if(o===-1)return{...e,version:13};let r=Me.slice(o);for(let n of r)e=n.fun(e);return e}export{ve as ANALYSIS_COLUMN_TYPES,De as ANALYSIS_COLUMN_VALUES_KEYS,h as CURRENT_EXPORT_VERSION,Ae as EXTERNAL_API_KEYS,ie as NMRiumCore,Ze as defineNMRiumPlugin,Ye as formatSpectra,b as generateID,W as getOneIfArray,Ft as migrateSettings,Ce as units};
6
+ `)}var ie=class{version=13;#e=new Map;registerPlugin(t){if(this.#e.has(t.id)){console.warn(`Plugin ${t.id} is already registered. skip.`),console.debug("Plugin already registered:",this.#e.get(t.id)),console.debug("Plugin to register:",t);return}this.#e.set(t.id,t)}registerPlugins(t){for(let o of t)this.registerPlugin(o)}migrate(t){return ue(t,this.version,this.#e)}read(t,o={},r){return v({input:t,options:o,fromSourceOptions:r,migrator:this.migrate.bind(this),plugins:this.#e})}readNMRiumArchive(t,o={}){return Ne({input:t,options:o,plugins:this.#e,migrator:this.migrate.bind(this)})}readNMRiumObject(t,o,r){return V({nmriumObjectInput:t,options:o,fromSourceOptions:r,plugins:this.#e,migrator:this.migrate.bind(this)})}readNMRiumFile(t,o={},r){return _({file:t,options:o,fromSourceOptions:r,plugins:this.#e,migrator:this.migrate.bind(this)})}readFromWebSource(t,o){return Re({source:t,options:o,plugins:this.#e})}serializeNmriumState(t,o){return Oe(t,this.#e,o)}serializeNmriumArchive(t){return Ie(t)}serializePlugins(){let t={plugins:{}};return O(t,this.#e),t.plugins}slot(t){return pe({slot:t,plugins:this.#e})}};function Ft(e,t){if(t>13)return 0;let o=-1;for(let r=0;r<e.length;r++)if(e[r].version>t){o=r;break}return o}var ve=[{version:6,fun:C},{version:7,fun:A}];function wt(e){let{version:t}=e||{},o=Ft(ve,t);if(o===-1)return{...e,version:13};let r=ve.slice(o);for(let n of r)e=n.fun(e);return e}export{Me as ANALYSIS_COLUMN_TYPES,De as ANALYSIS_COLUMN_VALUES_KEYS,h as CURRENT_EXPORT_VERSION,Ae as EXTERNAL_API_KEYS,ie as NMRiumCore,Ze as defineNMRiumPlugin,Ye as formatSpectra,b as generateID,W as getOneIfArray,wt as migrateSettings,Ce as units};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zakodium/nmrium-core",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "The core of NMRium: types, state, state migration and plugin system.",
5
5
  "author": "Zakodium Sàrl",
6
6
  "license": "CC-BY-NC-SA-4.0",
@@ -45,5 +45,5 @@
45
45
  "volta": {
46
46
  "extends": "../../../package.json"
47
47
  },
48
- "gitHead": "d0d3e5768dcbe675e0f8460fad4b7dbd352a7ff8"
48
+ "gitHead": "2f15f8bfd185409353bce294d518544f5b5e228a"
49
49
  }