@zakodium/nmrium-core 0.4.2 → 0.4.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,4 +1,4 @@
1
- var be={NORMAL:"NORMAL",FORMULA:"FORMULA"};var Re={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 P=10;var Ie=[{key:"CT",description:"CT from NMR Solutions"}];import{isAnyArray as Me}from"is-any-array";import{xMultiply as U}from"ml-spectra-processing";var Oe=crypto.randomUUID.bind(crypto),N=Oe;function h(e){let{id:t=N(),meta:o,peaks:r={},filters:i=[],info:n={},ranges:a={},integrals:s={},selector:c,sourceId:l,dependentVariables:p=[],...m}=e,u={id:t,meta:o,filters:i},{data:d=De(p[0].components)}=e;if(Array.isArray(n.nucleus)&&(n.nucleus=n.nucleus[0]),u.data={x:[],re:[],im:[],...d},"scaleFactor"in n){let{scaleFactor:g}=n,{re:S,im:y}=u.data;U(S,g,{output:S}),y&&U(y,g,{output:y})}c&&(u.selector=c),l&&(u.sourceId=l,u.fileCollectionId=l);let f=Me(d.im);if(u.info={phc0:0,phc1:0,nucleus:"1H",isFid:!1,isComplex:f,dimension:1,name:n?.name||t,...n},n.isFid&&n.reverse&&f){let{im:g}=u.data;U(g,-1,{output:g}),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},...a},u.integrals={values:[],options:{},...s},{...m,...u}}function De(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 Fe,xMinMaxValues as ve,xNoiseSanPlot as Ae}from"ml-spectra-processing";var V={z:[[]],minX:0,minY:0,maxX:0,maxY:0},we={re:V,im:V},Te={rr:V};function I(e){let{id:t=N(),meta:o={},dependentVariables:r=[],info:i={},filters:n=[],zones:a=[],sourceId:s,...c}=e,l={id:t,meta:o,filters:n};s&&(l.sourceId=s,l.fileCollectionId=s),l.info={nucleus:["1H","1H"],isFid:!1,isComplex:!1,name:i?.name||N(),...i},l.originalInfo=structuredClone(l.info),l.display={isPositiveVisible:!0,isNegativeVisible:!0,isVisible:!0,dimension:2,...e.display,...e.display};let{data:p=r[0].components}=e;if(l.data={...l.info.isFid?we:Te,...p},l.originalData=structuredClone(l.data),!("spectrumSize"in i)){let m=i.isFid?"re":"rr",u=l.data[m].z.length,d=u>0?l.data[m].z[0].length:0;l.info.spectrumSize=[d,u]}if(!i.isFid){let m=l.data.rr,u=Fe(m.z),{positive:d,negative:f}=Ae(u),{min:g,max:S}=ve(u);l.data.rr={...m,minZ:g,maxZ:S},l.info.noise={positive:d,negative:f}}return l.zones={values:[],options:{},...a},{...c,...l}}import{xSequentialFillFromTo as je}from"ml-spectra-processing";import{isAnyArray as Ee}from"is-any-array";function _(e,t=0){if(Ee(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 ze=new Set(["t1ir","T1"]);function oe(e){let t=[];for(let o of e){let{info:{pulseSequence:r,isFid:i}}=o,{data:n,info:a,meta:{vdlistValues:s=[]}}=o;if(!(r&&ze.has(r))||s.length===0){t.push(o);continue}let l=i?"re":"rr",p={};for(let y in a)p[y]=_(a[y]);let{z:m,maxX:u,minX:d}=n[l],f=je({from:d,to:u,size:m[0].length}),[g,S]=Le(o);for(let y=0;y<s.length;y++){let te={re:f,x:f};for(let re in n)te[ke(re)]=n[re].z.at(g*(y+S));t.push(h({data:te,info:{...p,name:`${p.name}_${s[y]}`,dimension:1,vd:s[y]}}))}}return t}function ke(e){return["rr","re"].includes(e)?"re":["im","ri","ir","ii"].includes(e)?"im":"x"}function Le(e){let{meta:{PAGE:t}}=e,o=!0;if(t){let r=i=>Number.parseFloat(i.replace(/[F|T]1=/,""));o=r(t[0])>r(t[2])}return o?[-1,1]:[1,0]}var Ue=2,Ve=1;function _e(e){let{spectra:t=[],molecules:o}=e,r=[];for(let i of t){let{info:n}=i;switch(n.dimension){case Ve:r.push(h(i));break;case Ue:r.push(I(i));break;default:throw new Error("dimension does not supported")}}return{molecules:o,spectra:oe(r)}}function Be(e){return e}function b(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}}function x(e,t){return JSON.parse(JSON.stringify(e),function(r,i){if(r in t){this[t[r]]=i;return}return i})}function B(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 i=x(r.ranges,o);r.ranges=Array.isArray(i)?{values:i}:i}else if(r.zones){let i=x(r.zones,o);r.zones=Array.isArray(i)?{values:i}:i}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 K(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=x(r.peaks,o.peaks):r.ranges?r.ranges=x(r.ranges,o.ranges):r.zones&&(r.zones.values=Ke(r.zones.values));return t}function Ke(e){return e.map(t=>(t.signals&&(t.signals=t.signals.map(o=>{if(o.x&&o.y){let{x:{fromTo:r,...i},y:{fromTo:n,...a}}=o;o={...o,x:{...i,...r},y:{...a,...n}}}else{let{fromTo:r,deltaX:i,resolutionX:n,nucleusX:a,deltaY:s,resolutionY:c,nucleusY:l,shiftX:p,shiftY:m,...u}=o;o={...u,x:{from:r[0].from,to:r[0].to,delta:i,resolution:n,nucleus:a},y:{from:r[1].from,to:r[1].to,delta:s,resolution:c,nucleus:l}}}return o},[])),t),[])}var Xe={name:"apodization",label:"Apodization",value:{lineBroadening:1,gaussBroadening:0,lineBroadeningCenter:0}};function X(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(i=>i.name==="lineBroadening");if(r!==-1){let i={...o.filters[r],...Xe};o.filters[r]=o.filters[r-1],o.filters[r-1]=i}}return t}function W(e){if(e?.version===4)return e;let{version:t,...o}=e,r=[],i={};for(let{source:s,...c}of o.spectra){let l={},{info:p={},display:m={}}=c;if(p?.dimension===2&&!s?.jcampURL)if(p.isFt)l.data={rr:c.data};else continue;if(s?.jcampURL){let{jcampURL:f,jcampSpectrumIndex:g}=s,S=f.match(/(?<baseURL>^\w+:\/{2}\w+\/)(?<relativePath>.*)/);i[f]||(i[f]={baseURL:S?.groups.baseURL||"",relativePath:S?.groups.relativePath||f.replace(/^\.\//,"")}),l.sourceSelector={files:[i[f].relativePath]},g!==void 0&&(l.sourceSelector.jcamp={index:g})}l.filters=We(c.filters);let{name:u,...d}=m;u&&(l.info={...p,name:u}),l.display=d,r.push({...c,...l})}let n={data:{...o,spectra:r},version:4},a={entries:Object.values(i)};return a.entries.length>0&&(n.data.source=a),n}function We(e=[]){let t=[];for(let o of e){let{name:r,value:i}=o;switch(r){case"zeroFilling":t.push({...o,value:{nbPoints:i}});break;case"shiftX":case"shift2DX":case"shift2DY":t.push({...o,value:{shift:i}});break;default:t.push({...o})}}return t}function Y(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 i of["peaks","ranges","zones"])r?.[i]&&(r[i]=x(r[i],o));return t}function $(e){if(e?.version===6)return e;let t={...e,version:6};for(let o of t?.data?.spectra||[]){let{digitalFilter:r,fft:i,phaseCorrection:n}=Ye(o);i?.flag&&r?.flag&&n&&Math.floor(r.value.digitalFilterValue)%2>0&&(n.value.ph0-=180)}return t}function Ye(e,t=["phaseCorrection","fft","digitalFilter"]){let{filters:o=[]}=e,r={};for(let i of t)r[i]=o.find(n=>n.name===i);return r}function O(e,t="localStorage"){if(e?.version===7)return e;if(t==="nmrium")return ie(e);let o={...e,version:7};for(let r in e.workspaces)o.workspaces[r]=ie(o.workspaces[r]);return o}function ie(e){let{formatting:{nuclei:t,panels:o}={nuclei:null,panels:null},version:r,...i}=e,n={...i};return t&&(n.nuclei=$e(t)),o&&(n.panels=o),n}function $e(e){let t=[],o={name:"nucleus",ppm:"ppmFormat",hz:"hzFormat"};for(let r in e)t.push(x(e[r],o));return t}function Z(e){if(e?.version===7)return e;let t={...e,version:7};return t?.settings&&(t.settings=O(t.settings,"nmrium")),t}function M(e,t="localStorage"){if(e?.version===8)return e;if(t==="nmrium")return ne(e);let o={...e,version:8};for(let r in e.workspaces)o.workspaces[r]=ne(o.workspaces[r]);return o}function ne(e){let{version:t,...o}=e,r={...o};return r.display.panels=Ze(e),r}function Ze(e){let t={},o=e.display.panels;for(let r of Object.keys(o)){let{display:i,open:n}=o[r];t[r]={display:i,visible:i,open:n}}return t}function G(e){if(e?.version===8)return e;let t={...e,version:8};t?.settings&&(t.settings=M(t.settings,"nmrium"));for(let o of t?.data?.spectra||[]){let{filters:r=[]}=o;for(let s=0;s<r.length;s++){let{flag:c,isDeleteAllow:l,label:p,...m}=r[s];r[s]={...m,enabled:c}}let i=r.findIndex(s=>s.name==="apodization");if(i!==-1){let s=r[i],{lineBroadening:c,gaussBroadening:l,lineBroadeningCenter:p}=s.value;s.value={exponential:{apply:!0,options:{lineBroadening:l>0?-c:c}}},l>0&&(s.value.gaussian={apply:!0,options:{lineBroadening:.6*l,lineBroadeningCenter:p}}),r[i]=s}let n=r.findIndex(s=>s.name==="apodizationDimension1"),a=r.findIndex(s=>s.name==="apodizationDimension2");if(n!==-1){let s=r[n],{shapes:c}=s.value.compose;s.value=se(c)}if(a!==-1){let s=r[a],{shapes:c}=s.value.compose;s.value=se(c)}}return t}function se(e){let t={};for(let{shape:o}of e){let{kind:r,options:i}=o;if(r==="sineBell"){let{exponent:n,offset:a}=i,s=n===2?"sineSquare":"sineBell";t[s]={apply:!0,options:{offset:a}}}}return t}function J(e){let{version:t,plugins:o,...r}=e;return t===9?e:{version:9,plugins:{},...r}}function q(e){if(e?.version>=10)return e;let{data:t,...o}=e,{source:r,spectra:i,...n}=t,a=r?crypto.randomUUID():void 0,s=r?[{...r,id:a}]:[];return{...o,version:10,data:{...n,sources:s,spectra:r?i.map(c=>({...c,sourceId:a})):i}}}var Ge=[B,K,X,W,Y,$,Z,G,J,q];function ae(e,t,o){let r=structuredClone(e),i=Object.entries(e?.plugins??{});for(let[s,{version:c}]of i){let l=o.get(s);if(!(l&&l.version>=c)){if(l){console.warn(`Plugin "${l.id}" is loaded with a version older (${l.version}) than the one used to save the state (${c}).
1
+ var be={NORMAL:"NORMAL",FORMULA:"FORMULA"};var Re={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 P=10;var Ie=[{key:"CT",description:"CT from NMR Solutions"}];import{isAnyArray as Me}from"is-any-array";import{xMultiply as U}from"ml-spectra-processing";var Oe=crypto.randomUUID.bind(crypto),N=Oe;function h(e){let{id:t=N(),meta:o,peaks:r={},filters:i=[],info:n={},ranges:a={},integrals:s={},selector:c,sourceId:l,dependentVariables:p=[],...m}=e,u={id:t,meta:o,filters:i},{data:d=De(p[0].components)}=e;if(Array.isArray(n.nucleus)&&(n.nucleus=n.nucleus[0]),u.data={x:[],re:[],im:[],...d},"scaleFactor"in n){let{scaleFactor:g}=n,{re:S,im:y}=u.data;U(S,g,{output:S}),y&&U(y,g,{output:y})}c&&(u.selector=c),l&&(u.sourceId=l,u.fileCollectionId=l);let f=Me(d.im);if(u.info={phc0:0,phc1:0,nucleus:"1H",isFid:!1,isComplex:f,dimension:1,name:n?.name||t,...n},n.isFid&&n.reverse&&f){let{im:g}=u.data;U(g,-1,{output:g}),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},...a},u.integrals={values:[],options:{},...s},{...m,...u}}function De(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 Fe,xMinMaxValues as ve,xNoiseSanPlot as Ae}from"ml-spectra-processing";var V={z:[[]],minX:0,minY:0,maxX:0,maxY:0},we={re:V,im:V},Te={rr:V};function I(e){let{id:t=N(),meta:o={},dependentVariables:r=[],info:i={},filters:n=[],zones:a=[],sourceId:s,...c}=e,l={id:t,meta:o,filters:n};s&&(l.sourceId=s,l.fileCollectionId=s),l.info={nucleus:["1H","1H"],isFid:!1,isComplex:!1,name:i?.name||N(),...i},l.originalInfo=structuredClone(l.info),l.display={isPositiveVisible:!0,isNegativeVisible:!0,isVisible:!0,dimension:2,...e.display,...e.display};let{data:p=r[0].components}=e;if(l.data={...l.info.isFid?we:Te,...p},l.originalData=structuredClone(l.data),!("spectrumSize"in i)){let m=i.isFid?"re":"rr",u=l.data[m].z.length,d=u>0?l.data[m].z[0].length:0;l.info.spectrumSize=[d,u]}if(!i.isFid){let m=l.data.rr,u=Fe(m.z),{positive:d,negative:f}=Ae(u),{min:g,max:S}=ve(u);l.data.rr={...m,minZ:g,maxZ:S},l.info.noise={positive:d,negative:f}}return l.zones={values:[],options:{},...a},{...c,...l}}import{xSequentialFillFromTo as je}from"ml-spectra-processing";import{isAnyArray as Ee}from"is-any-array";function _(e,t=0){if(Ee(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 ze=new Set(["t1ir","T1"]);function oe(e){let t=[];for(let o of e){let{info:{pulseSequence:r,isFid:i}}=o,{data:n,info:a,meta:{vdlistValues:s=[]}}=o;if(!(r&&ze.has(r))||s.length===0){t.push(o);continue}let l=i?"re":"rr",p={};for(let y in a)p[y]=_(a[y]);let{z:m,maxX:u,minX:d}=n[l],f=je({from:d,to:u,size:m[0].length}),[g,S]=Le(o);for(let y=0;y<s.length;y++){let te={re:f,x:f};for(let re in n)te[ke(re)]=n[re].z.at(g*(y+S));t.push(h({data:te,info:{...p,name:`${p.name}_${s[y]}`,dimension:1,vd:s[y]}}))}}return t}function ke(e){return["rr","re"].includes(e)?"re":["im","ri","ir","ii"].includes(e)?"im":"x"}function Le(e){let{meta:{PAGE:t}}=e,o=!0;if(t){let r=i=>Number.parseFloat(i.replace(/[F|T]1=/,""));o=r(t[0])>r(t[2])}return o?[-1,1]:[1,0]}var Ue=2,Ve=1;function _e(e){let{spectra:t=[],molecules:o}=e,r=[];for(let i of t){let{info:n}=i;switch(n.dimension){case Ve:r.push(h(i));break;case Ue:r.push(I(i));break;default:throw new Error("dimension does not supported")}}return{molecules:o,spectra:oe(r)}}function Be(e){return e}function b(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}}function x(e,t){return JSON.parse(JSON.stringify(e),function(r,i){if(r in t){this[t[r]]=i;return}return i})}function B(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 i=x(r.ranges,o);r.ranges=Array.isArray(i)?{values:i}:i}else if(r.zones){let i=x(r.zones,o);r.zones=Array.isArray(i)?{values:i}:i}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 K(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=x(r.peaks,o.peaks):r.ranges?r.ranges=x(r.ranges,o.ranges):r.zones&&(r.zones.values=Ke(r.zones.values));return t}function Ke(e){return e.map(t=>(t.signals&&(t.signals=t.signals.map(o=>{if(o.x&&o.y){let{x:{fromTo:r,...i},y:{fromTo:n,...a}}=o;o={...o,x:{...i,...r},y:{...a,...n}}}else{let{fromTo:r,deltaX:i,resolutionX:n,nucleusX:a,deltaY:s,resolutionY:c,nucleusY:l,shiftX:p,shiftY:m,...u}=o;o={...u,x:{from:r[0].from,to:r[0].to,delta:i,resolution:n,nucleus:a},y:{from:r[1].from,to:r[1].to,delta:s,resolution:c,nucleus:l}}}return o},[])),t),[])}var Xe={name:"apodization",label:"Apodization",value:{lineBroadening:1,gaussBroadening:0,lineBroadeningCenter:0}};function X(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(i=>i.name==="lineBroadening");if(r!==-1){let i={...o.filters[r],...Xe};o.filters[r]=o.filters[r-1],o.filters[r-1]=i}}return t}function W(e){if(e?.version===4)return e;let{version:t,...o}=e,r=[],i={};for(let{source:s,...c}of o.spectra){let l={},{info:p={},display:m={}}=c;if(p?.dimension===2&&!s?.jcampURL)if(p.isFt)l.data={rr:c.data};else continue;if(s?.jcampURL){let{jcampURL:f,jcampSpectrumIndex:g}=s,S=f.match(/(?<baseURL>^\w+:\/{2}\w+\/)(?<relativePath>.*)/);i[f]||(i[f]={baseURL:S?.groups.baseURL||"",relativePath:S?.groups.relativePath||f.replace(/^\.\//,"")}),l.sourceSelector={files:[i[f].relativePath]},g!==void 0&&(l.sourceSelector.jcamp={index:g})}l.filters=We(c.filters);let{name:u,...d}=m;u&&(l.info={...p,name:u}),l.display=d,r.push({...c,...l})}let n={data:{...o,spectra:r},version:4},a={entries:Object.values(i)};return a.entries.length>0&&(n.data.source=a),n}function We(e=[]){let t=[];for(let o of e){let{name:r,value:i}=o;switch(r){case"zeroFilling":t.push({...o,value:{nbPoints:i}});break;case"shiftX":case"shift2DX":case"shift2DY":t.push({...o,value:{shift:i}});break;default:t.push({...o})}}return t}function Y(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 i of["peaks","ranges","zones"])r?.[i]&&(r[i]=x(r[i],o));return t}function $(e){if(e?.version===6)return e;let t={...e,version:6};for(let o of t?.data?.spectra||[]){let{digitalFilter:r,fft:i,phaseCorrection:n}=Ye(o);i?.flag&&r?.flag&&n&&Math.floor(r.value.digitalFilterValue)%2>0&&(n.value.ph0-=180)}return t}function Ye(e,t=["phaseCorrection","fft","digitalFilter"]){let{filters:o=[]}=e,r={};for(let i of t)r[i]=o.find(n=>n.name===i);return r}function O(e,t="localStorage"){if(e?.version===7)return e;if(t==="nmrium")return ie(e);let o={...e,version:7};for(let r in e.workspaces)o.workspaces[r]=ie(o.workspaces[r]);return o}function ie(e){let{formatting:{nuclei:t,panels:o}={nuclei:null,panels:null},version:r,...i}=e,n={...i};return t&&(n.nuclei=$e(t)),o&&(n.panels=o),n}function $e(e){let t=[],o={name:"nucleus",ppm:"ppmFormat",hz:"hzFormat"};for(let r in e)t.push(x(e[r],o));return t}function Z(e){if(e?.version===7)return e;let t={...e,version:7};return t?.settings&&(t.settings=O(t.settings,"nmrium")),t}function M(e,t="localStorage"){if(e?.version===8)return e;if(t==="nmrium")return ne(e);let o={...e,version:8};for(let r in e.workspaces)o.workspaces[r]=ne(o.workspaces[r]);return o}function ne(e){let{version:t,...o}=e,r={...o};return r.display.panels=Ze(e),r}function Ze(e){let t={},o=e.display.panels;for(let r of Object.keys(o)){let{display:i,open:n}=o[r];t[r]={display:i,visible:i,open:n}}return t}function G(e){if(e?.version===8)return e;let t={...e,version:8};t?.settings&&(t.settings=M(t.settings,"nmrium"));for(let o of t?.data?.spectra||[]){let{filters:r=[]}=o;for(let s=0;s<r.length;s++){let{flag:c,isDeleteAllow:l,label:p,...m}=r[s];r[s]={...m,enabled:c}}let i=r.findIndex(s=>s.name==="apodization");if(i!==-1){let s=r[i],{lineBroadening:c,gaussBroadening:l,lineBroadeningCenter:p}=s.value;s.value={exponential:{apply:!0,options:{lineBroadening:l>0?-c:c}}},l>0&&(s.value.gaussian={apply:!0,options:{lineBroadening:.6*l,lineBroadeningCenter:p}}),r[i]=s}let n=r.findIndex(s=>s.name==="apodizationDimension1"),a=r.findIndex(s=>s.name==="apodizationDimension2");if(n!==-1){let s=r[n],{shapes:c}=s.value.compose;s.value=se(c)}if(a!==-1){let s=r[a],{shapes:c}=s.value.compose;s.value=se(c)}}return t}function se(e){let t={};for(let{shape:o}of e){let{kind:r,options:i}=o;if(r==="sineBell"){let{exponent:n,offset:a}=i,s=n===2?"sineSquare":"sineBell";t[s]={apply:!0,options:{offset:a}}}}return t}function J(e){let{version:t,plugins:o,...r}=e;return t===9?e:{version:9,plugins:{},...r}}function q(e){if(e?.version>=10)return e;let t={...e,version:10};if(e.data){let{source:o,spectra:r,...i}=e.data,n=o?crypto.randomUUID():void 0,a=o?[{...o,id:n}]:[];t.data={...i,sources:a,spectra:o?r.map(s=>({...s,sourceId:n})):r}}return t}var Ge=[B,K,X,W,Y,$,Z,G,J,q];function ae(e,t,o){let r=structuredClone(e),i=Object.entries(e?.plugins??{});for(let[s,{version:c}]of i){let l=o.get(s);if(!(l&&l.version>=c)){if(l){console.warn(`Plugin "${l.id}" is loaded with a version older (${l.version}) than the one used to save the state (${c}).
2
2
  NMRium may fail to load the state.
3
3
  Please update the plugin to the latest version.`);continue}console.warn(`Plugin "${s}@${c}" is not registered. NMRium may fail to load the state.
4
4
  Please consider open this file with the plugin installed.`)}}let n=new Set,a=()=>{let s=r.version;for(let c of o.values())for(let l of c.migrations){if(n.has(l)||s<l.minCore||l.maxCore&&s>l.maxCore)continue;if((r.plugins?.[c.id]?.version||0)===c.version)break;r=l.up(r),n.add(l)}};for(let s=e?.version||0;s<t;s++){let c=Ge[s];r=c(r),a()}return a(),b(r,o),r}import{FileCollection as ot}from"file-collection";var le={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 D(e){return e.includes(".")?e.replace(/^.*\./,"").toLowerCase():""}function v(e,t={},o){let{data:r,...i}=e;if(!r)return e;let{spectra:n=[]}=r,{keep1D:a=!0,keep2D:s=!0,onlyReal:c}=t,l=c?"ft":t.dataSelection||"both",p=[];for(let m of n){if(!m.info){p.push(m);continue}let{isFid:u,dimension:d,name:f}=m.info;if(!F(d===1&&!a,f,o)&&!F(d===2&&!s,f,o)&&!F(u&&l==="ft",f,o)&&!F(!u&&l==="fid",f,o))if(c&&!u)if(m.info.isComplex=!1,Je(m)){let{rr:g}=m.data;p.push({...m,data:{rr:g}})}else{let{re:g,x:S}=m.data;p.push({...m,data:{re:g,x:S}})}else p.push(m)}return{data:{...r,spectra:p},...i}}function F(e,t,o){return e?(o?.warn(`Skipping ${t} because it didn't match the import filters.`),!0):!1}function Je(e){let{info:t}=e;return t?.dimension===2}function A(e){let{nmriumState:t,plugins:o,options:r}=e;for(let i of o.values()){let n=i.onReadProcess?.onProcessing;n&&n(t,r)}}async function w(e,t,o={}){let{sourceSelector:r,converter:i,logger:n}=o,a=[],s=[];for(let u of t.values()){let{onReadProcess:d}=u;d&&(d?.onFiles&&a.push(u),d?.supportedExtensions?.length&&d?.onFile&&s.push(u))}let c=await Promise.allSettled(a.map(u=>u.onReadProcess.onFiles(e,o))),l=[],p=await Promise.allSettled(e.files.flatMap(u=>{let d=D(u.name).toLowerCase();return s.flatMap(f=>{let{supportedExtensions:g,onFile:S}=f.onReadProcess;return g.includes(d)?(l.push({file:u,plugin:f}),S(u,{logger:n,sourceSelector:r,converter:i})):[]})})),m={spectra:[],molecules:[]};for(let u=0;u<c.length;u++){let d=c[u];switch(d.status){case"fulfilled":{let{spectra:f=[],molecules:g=[]}=d.value||{};m.spectra.push(...f),m.molecules.push(...g);break}case"rejected":{let f=d.reason,g=a[u];o.logger?.error(`Load file collection with plugin ${g.id}@${g.version} fails with: ${f}`);break}}}for(let u=0;u<p.length;u++){let d=p[u];switch(d.status){case"fulfilled":{let{spectra:f=[],molecules:g=[]}=d.value||{};m.spectra.push(...f),m.molecules.push(...g);break}case"rejected":{let f=d.reason,{file:g,plugin:S}=l[u];o.logger?.error(`Load file ${g.relativePath} with plugin ${S.id}@${S.version} fails with: ${f}`);break}}}return m}import{FileCollection as et}from"file-collection";import{FileCollection as Qe}from"file-collection";import ce from"lodash.merge";import{xIsEquallySpaced as qe}from"ml-spectra-processing";async function T(e){let{input:t,spectraResult:o,unserializedSpectrum:r,options:i,plugins:n,migrator:a}=e,c=(await R({input:t,migrator:a,plugins:n,options:{...i,sourceSelector:r.sourceSelector}}))?.nmriumState?.data?.spectra??[],l=c.pop();if(l){o.push(ue(r,l));for(let p of c)o.push(ue(r,He(p)))}}function ue(e,t){!e.fileCollectionId&&e.sourceId&&(e.fileCollectionId=e.sourceId),!t.fileCollectionId&&t.sourceId&&(t.fileCollectionId=t.sourceId);let{data:o,...r}=e;if("ranges"in t){let{data:i,...n}=t;return{...ce(n,r),data:i}}else if("zones"in t){let{data:i,...n}=t;return{...ce(n,r),data:i}}else return t}function He(e){return{...e,id:N()}}function E(e){let{spectrum:t,spectraResult:o,logger:r}=e,{dimension:i}=t.info;if(i===1){if(!qe(t.data)){r?.error('The ".nmrium" file is corrupted; the X-axis values are not equally distant.');return}o.push(h(t))}else i===2&&o.push(I(t))}async function j(e){let{input:t,moleculesResult:o,unserializedMolecule:r,options:i,plugins:n,migrator:a}=e,{sourceSelector:s,sourceId:c}=r,p=(await R({input:t,migrator:a,plugins:n,options:{...i,sourceSelector:s}}))?.nmriumState?.data?.molecules??[];for(let m of p)o.push({...m,sourceId:c,fileCollectionId:c})}function z(e){let{molecule:t,moleculesResult:o}=e;o.push(t)}async function k(e){let{nmriumObjectInput:t,options:o={},migrator:r,plugins:i}=e,n=r(t),{data:a,...s}=n;if(!a)return[{...s},new Map];let c={data:{...a,spectra:[],molecules:[]},...s},l=c.data,{sources:p=[],spectra:m,molecules:u}=l,d=await Promise.all(p.map(async S=>{let y=await Qe.fromSource(S,{unzip:{zipExtensions:["zip","nmredata"]}});return[S.id,y]})),f=new Map(d),g=[];for(let S of a.spectra){let y=f.get(S.sourceId);if(!y){E({spectrum:S,spectraResult:m,logger:o.logger});continue}g.push(T({input:y,spectraResult:m,unserializedSpectrum:S,migrator:r,plugins:i,options:o}))}for(let S of a.molecules??[]){let y=f.get(S.sourceId);if(!y){z({molecule:S,moleculesResult:u,logger:o.logger});continue}g.push(j({input:y,unserializedMolecule:S,moleculesResult:u,migrator:r,plugins:i,options:o}))}return await Promise.allSettled(g),[c,f]}async function pe(e){let{file:t,options:o={},migrator:r,plugins:i}=e,n=await t.arrayBuffer(),a=await(rt(n)?tt(n):t.text());return k({nmriumObjectInput:JSON.parse(a),plugins:i,migrator:r,options:o})}async function tt(e){let t=await et.fromZip(e);if(t.files.length===0)throw new Error("compressed nmrium file is corrupted");return t.files[0].text()}function rt(e){if(e.byteLength<4)return!1;let t=new Uint8Array(e);return t[0]===80&&t[1]===75&&(t[2]===3||t[2]===5||t[2]===7)&&(t[3]===4||t[3]===6||t[3]===8)}async function R(e){let{options:t={},input:o,migrator:r,plugins:i}=e,n=st(await it(o),t.sourceSelector?.files),a=at(n);if(a){let[u]=await pe({file:a,migrator:r,plugins:i,options:t});return{nmriumState:u,containsNmrium:!0,fileCollection:n}}let s=await w(n,i,t),c=v({version:10,data:s},t?.sourceSelector?.general,t.logger),{onLoadProcessing:l,experimentalFeatures:p}=t,m={...l,autoProcessing:l?.autoProcessing??!1,experimentalFeatures:p};return A({nmriumState:c,plugins:i,options:m}),{nmriumState:c,containsNmrium:!1,fileCollection:n}}function it(e){return Array.isArray(e)?Promise.reject(new Error("For a set of fileCollectionItems pass a FileCollection instance")):nt(e)?Promise.resolve(e):new ot().appendExtendedSource({...e,uuid:crypto.randomUUID()})}function nt(e){return typeof e=="object"&&"files"in e}function st(e,t){if(!t)return e;let o=new Set(t);return e.filter(r=>o.has(r.relativePath))}function at(e){return e.files.find(t=>D(t.name).toLowerCase()===le.NMRIUM)}function C(e,t){let o={};for(let r in e)t.includes(r)||(o[r]=e[r]);return o}var lt=["data","originalData","info","originalInfo","meta","customInfo"],ct=["data","originalData","info","originalInfo","meta","customInfo"],ut=["sourceSelector","sourceId","fileCollectionId","originalData","originalInfo"];function me(e,t,o={}){let{version:r,data:i}=e;if(i.actionType)return e;let n={version:r,plugins:e.plugins},{includeData:a}=o;a!=="noData"&&(n.data=pt({...i},a));let{includeSettings:s,includeView:c}=o;return s&&(n.settings=e.settings),c&&(n.view=e.view),b(n,t),n}function pt(e,t="rawData"){let{spectra:o}=e;switch(t){case"dataSource":return mt(e);case"selfContained":case"selfContainedExternalDatasource":return ft(e);case"rawData":return{...C(e,["sources"]),spectra:o.map(St)};default:return e}}function mt(e){let{spectra:t}=e;if(!e.sources)throw new Error("sources property should exists for dataSource serialization");return{...e,spectra:t.map(dt)}}function ft(e){let{spectra:t}=e;return{...e,spectra:t.map(gt)}}function dt(e){return C(e,lt)}function gt(e){return C(e,ct)}function St(e){let{data:t,info:o,originalData:r,originalInfo:i}=e,n=C(e,ut);return n.data=r||t,n.info=i||o,n}import{FileCollection as yt}from"file-collection";async function de(e){let{spectra:t,molecules:o,fileCollections:r,serializedState:i,includeData:n=!0}=e,a=new yt({filter:{ignoreDotfiles:!1}}),s=new Set,c=[];for(let l of t)fe({builder:a,fileCollections:r,fileCollectionId:l.fileCollectionId,includeData:n,alreadyAdded:s,asyncTasks:c});for(let l of o)fe({builder:a,fileCollections:r,fileCollectionId:l.fileCollectionId,includeData:n,alreadyAdded:s,asyncTasks:c});return await Promise.all(c),a.toIum({*getExtraFiles(){yield{relativePath:"state.json",data:i},yield{relativePath:".META-NMRIUM/NMRIUM_ARCHIVE.json",data:JSON.stringify(Pt({fileCollections:r,toSerialize:s}),null,2)},n?yield{relativePath:".META-NMRIUM/EMBED_ALL_DATA",data:""}:yield{relativePath:".META-NMRIUM/USE_EXTERNAL_SOURCES",data:""},yield{relativePath:"index.txt",data:xt({fileCollections:r,toIndex:s})}}})}function fe(e){let{builder:t,fileCollections:o,fileCollectionId:r,includeData:i,alreadyAdded:n,asyncTasks:a}=e;if(!r||n.has(r))return;let s=o[r];s&&(n.add(r),a.push(s.toIum({includeData:i}).then(c=>{let l=new Blob([c],{type:"application/zip"});return t.appendExtendedSource({uuid:r,name:r,relativePath:`${r}.ium.zip`,size:l.size,text:()=>l.text(),stream:()=>l.stream(),arrayBuffer:()=>l.arrayBuffer()},{unzip:{zipExtensions:[]}})})))}function Pt(e){let{fileCollections:t,toSerialize:o}=e,r={};for(let i of o){let n=t[i];if(!n)continue;let{logger:a,...s}=n.options;r[i]={sourceUUID:i,filePath:`${i}.ium.zip`,options:s}}return r}function xt(e){let{fileCollections:t,toIndex:o}=e,r=[];for(let i of o){let n=t[i];if(n){r.push(`data/${i}.ium.zip`);for(let a of n.sources)r.push(` data/${a.relativePath}`);r.push(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zakodium/nmrium-core",
3
- "version": "0.4.2",
3
+ "version": "0.4.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",
@@ -26,7 +26,7 @@
26
26
  "@types/lodash.merge": "^4.6.9",
27
27
  "@types/node": "^24.9.1",
28
28
  "@types/react": "^18.3.13",
29
- "@zakodium/nmr-types": "^0.3.2",
29
+ "@zakodium/nmr-types": "^0.4.0",
30
30
  "esbuild": "^0.25.11",
31
31
  "jest-matcher-deep-close-to": "^3.0.2",
32
32
  "rimraf": "^6.0.1",
@@ -36,7 +36,7 @@
36
36
  "dependencies": {
37
37
  "cheminfo-types": "^1.8.1",
38
38
  "fifo-logger": "^2.0.1",
39
- "file-collection": "^5.4.0",
39
+ "file-collection": "^6.0.0",
40
40
  "is-any-array": "^2.0.1",
41
41
  "lodash.merge": "^4.6.2",
42
42
  "ml-spectra-processing": "^14.18.0",
@@ -45,5 +45,5 @@
45
45
  "volta": {
46
46
  "extends": "../../../package.json"
47
47
  },
48
- "gitHead": "7e754ead7fd27266a86c6a1a1a57f24b76c38a77"
48
+ "gitHead": "1310603aac371c50b102bf75a893da385d2a4ee4"
49
49
  }