jcampconverter 9.2.0 → 9.2.2

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.
Files changed (156) hide show
  1. package/jcampconverter.cjs +8 -0
  2. package/{lib/convert.d.ts → jcampconverter.d.ts} +222 -182
  3. package/jcampconverter.mjs +8 -0
  4. package/package.json +27 -19
  5. package/lib/2d/add2D.d.ts +0 -2
  6. package/lib/2d/add2D.d.ts.map +0 -1
  7. package/lib/2d/add2D.js +0 -17
  8. package/lib/2d/add2D.js.map +0 -1
  9. package/lib/2d/convertTo3DZ.d.ts +0 -11
  10. package/lib/2d/convertTo3DZ.d.ts.map +0 -1
  11. package/lib/2d/convertTo3DZ.js +0 -59
  12. package/lib/2d/convertTo3DZ.js.map +0 -1
  13. package/lib/2d/generateContourLines.d.ts +0 -8
  14. package/lib/2d/generateContourLines.d.ts.map +0 -1
  15. package/lib/2d/generateContourLines.js +0 -163
  16. package/lib/2d/generateContourLines.js.map +0 -1
  17. package/lib/complexChromatogram.d.ts +0 -4
  18. package/lib/complexChromatogram.d.ts.map +0 -1
  19. package/lib/complexChromatogram.js +0 -49
  20. package/lib/complexChromatogram.js.map +0 -1
  21. package/lib/convert.d.ts.map +0 -1
  22. package/lib/convert.js +0 -412
  23. package/lib/convert.js.map +0 -1
  24. package/lib/convertToFloatArray.d.ts +0 -2
  25. package/lib/convertToFloatArray.d.ts.map +0 -1
  26. package/lib/convertToFloatArray.js +0 -11
  27. package/lib/convertToFloatArray.js.map +0 -1
  28. package/lib/createTree.d.ts +0 -29
  29. package/lib/createTree.d.ts.map +0 -1
  30. package/lib/createTree.js +0 -101
  31. package/lib/createTree.js.map +0 -1
  32. package/lib/index.d.ts +0 -3
  33. package/lib/index.d.ts.map +0 -1
  34. package/lib/index.js +0 -8
  35. package/lib/index.js.map +0 -1
  36. package/lib/parse/fastParseXYData.d.ts +0 -2
  37. package/lib/parse/fastParseXYData.d.ts.map +0 -1
  38. package/lib/parse/fastParseXYData.js +0 -193
  39. package/lib/parse/fastParseXYData.js.map +0 -1
  40. package/lib/parse/parsePeakTable.d.ts +0 -2
  41. package/lib/parse/parsePeakTable.d.ts.map +0 -1
  42. package/lib/parse/parsePeakTable.js +0 -67
  43. package/lib/parse/parsePeakTable.js.map +0 -1
  44. package/lib/parse/parseXYA.d.ts +0 -2
  45. package/lib/parse/parseXYA.d.ts.map +0 -1
  46. package/lib/parse/parseXYA.js +0 -51
  47. package/lib/parse/parseXYA.js.map +0 -1
  48. package/lib/postProcessing.d.ts +0 -2
  49. package/lib/postProcessing.d.ts.map +0 -1
  50. package/lib/postProcessing.js +0 -93
  51. package/lib/postProcessing.js.map +0 -1
  52. package/lib/postProcessingNMR.d.ts +0 -2
  53. package/lib/postProcessingNMR.d.ts.map +0 -1
  54. package/lib/postProcessingNMR.js +0 -95
  55. package/lib/postProcessingNMR.js.map +0 -1
  56. package/lib/prepareNtuplesDatatable.d.ts +0 -2
  57. package/lib/prepareNtuplesDatatable.d.ts.map +0 -1
  58. package/lib/prepareNtuplesDatatable.js +0 -87
  59. package/lib/prepareNtuplesDatatable.js.map +0 -1
  60. package/lib/prepareSpectrum.d.ts +0 -2
  61. package/lib/prepareSpectrum.d.ts.map +0 -1
  62. package/lib/prepareSpectrum.js +0 -10
  63. package/lib/prepareSpectrum.js.map +0 -1
  64. package/lib/profiling.d.ts +0 -2
  65. package/lib/profiling.d.ts.map +0 -1
  66. package/lib/profiling.js +0 -13
  67. package/lib/profiling.js.map +0 -1
  68. package/lib/simpleChromatogram.d.ts +0 -2
  69. package/lib/simpleChromatogram.d.ts.map +0 -1
  70. package/lib/simpleChromatogram.js +0 -16
  71. package/lib/simpleChromatogram.js.map +0 -1
  72. package/lib-esm/2d/add2D.d.ts +0 -2
  73. package/lib-esm/2d/add2D.d.ts.map +0 -1
  74. package/lib-esm/2d/add2D.js +0 -11
  75. package/lib-esm/2d/add2D.js.map +0 -1
  76. package/lib-esm/2d/convertTo3DZ.d.ts +0 -11
  77. package/lib-esm/2d/convertTo3DZ.d.ts.map +0 -1
  78. package/lib-esm/2d/convertTo3DZ.js +0 -53
  79. package/lib-esm/2d/convertTo3DZ.js.map +0 -1
  80. package/lib-esm/2d/generateContourLines.d.ts +0 -8
  81. package/lib-esm/2d/generateContourLines.d.ts.map +0 -1
  82. package/lib-esm/2d/generateContourLines.js +0 -160
  83. package/lib-esm/2d/generateContourLines.js.map +0 -1
  84. package/lib-esm/complexChromatogram.d.ts +0 -4
  85. package/lib-esm/complexChromatogram.d.ts.map +0 -1
  86. package/lib-esm/complexChromatogram.js +0 -43
  87. package/lib-esm/complexChromatogram.js.map +0 -1
  88. package/lib-esm/convert.d.ts +0 -182
  89. package/lib-esm/convert.d.ts.map +0 -1
  90. package/lib-esm/convert.js +0 -405
  91. package/lib-esm/convert.js.map +0 -1
  92. package/lib-esm/convertToFloatArray.d.ts +0 -2
  93. package/lib-esm/convertToFloatArray.d.ts.map +0 -1
  94. package/lib-esm/convertToFloatArray.js +0 -8
  95. package/lib-esm/convertToFloatArray.js.map +0 -1
  96. package/lib-esm/createTree.d.ts +0 -29
  97. package/lib-esm/createTree.d.ts.map +0 -1
  98. package/lib-esm/createTree.js +0 -97
  99. package/lib-esm/createTree.js.map +0 -1
  100. package/lib-esm/index.d.ts +0 -3
  101. package/lib-esm/index.d.ts.map +0 -1
  102. package/lib-esm/index.js +0 -3
  103. package/lib-esm/index.js.map +0 -1
  104. package/lib-esm/parse/fastParseXYData.d.ts +0 -2
  105. package/lib-esm/parse/fastParseXYData.d.ts.map +0 -1
  106. package/lib-esm/parse/fastParseXYData.js +0 -190
  107. package/lib-esm/parse/fastParseXYData.js.map +0 -1
  108. package/lib-esm/parse/parsePeakTable.d.ts +0 -2
  109. package/lib-esm/parse/parsePeakTable.d.ts.map +0 -1
  110. package/lib-esm/parse/parsePeakTable.js +0 -64
  111. package/lib-esm/parse/parsePeakTable.js.map +0 -1
  112. package/lib-esm/parse/parseXYA.d.ts +0 -2
  113. package/lib-esm/parse/parseXYA.d.ts.map +0 -1
  114. package/lib-esm/parse/parseXYA.js +0 -48
  115. package/lib-esm/parse/parseXYA.js.map +0 -1
  116. package/lib-esm/postProcessing.d.ts +0 -2
  117. package/lib-esm/postProcessing.d.ts.map +0 -1
  118. package/lib-esm/postProcessing.js +0 -87
  119. package/lib-esm/postProcessing.js.map +0 -1
  120. package/lib-esm/postProcessingNMR.d.ts +0 -2
  121. package/lib-esm/postProcessingNMR.d.ts.map +0 -1
  122. package/lib-esm/postProcessingNMR.js +0 -92
  123. package/lib-esm/postProcessingNMR.js.map +0 -1
  124. package/lib-esm/prepareNtuplesDatatable.d.ts +0 -2
  125. package/lib-esm/prepareNtuplesDatatable.d.ts.map +0 -1
  126. package/lib-esm/prepareNtuplesDatatable.js +0 -84
  127. package/lib-esm/prepareNtuplesDatatable.js.map +0 -1
  128. package/lib-esm/prepareSpectrum.d.ts +0 -2
  129. package/lib-esm/prepareSpectrum.d.ts.map +0 -1
  130. package/lib-esm/prepareSpectrum.js +0 -7
  131. package/lib-esm/prepareSpectrum.js.map +0 -1
  132. package/lib-esm/profiling.d.ts +0 -2
  133. package/lib-esm/profiling.d.ts.map +0 -1
  134. package/lib-esm/profiling.js +0 -10
  135. package/lib-esm/profiling.js.map +0 -1
  136. package/lib-esm/simpleChromatogram.d.ts +0 -2
  137. package/lib-esm/simpleChromatogram.d.ts.map +0 -1
  138. package/lib-esm/simpleChromatogram.js +0 -13
  139. package/lib-esm/simpleChromatogram.js.map +0 -1
  140. package/src/2d/add2D.js +0 -11
  141. package/src/2d/convertTo3DZ.js +0 -55
  142. package/src/2d/generateContourLines.js +0 -166
  143. package/src/complexChromatogram.js +0 -49
  144. package/src/convert.js +0 -412
  145. package/src/convertToFloatArray.js +0 -7
  146. package/src/createTree.js +0 -100
  147. package/src/index.js +0 -2
  148. package/src/parse/fastParseXYData.js +0 -175
  149. package/src/parse/parsePeakTable.js +0 -69
  150. package/src/parse/parseXYA.js +0 -50
  151. package/src/postProcessing.js +0 -93
  152. package/src/postProcessingNMR.js +0 -99
  153. package/src/prepareNtuplesDatatable.js +0 -85
  154. package/src/prepareSpectrum.js +0 -4
  155. package/src/profiling.js +0 -9
  156. package/src/simpleChromatogram.js +0 -12
@@ -0,0 +1,8 @@
1
+ "use strict";var he=Object.create;var P=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,xe=Object.prototype.hasOwnProperty;var Ae=(e,t)=>{for(var r in t)P(e,r,{get:t[r],enumerable:!0})},le=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ge(t))!xe.call(e,s)&&s!==r&&P(e,s,{get:()=>t[s],enumerable:!(a=de(t,s))||a.enumerable});return e};var Te=(e,t,r)=>(r=e!=null?he(be(e)):{},le(t||!e||!e.__esModule?P(r,"default",{value:e,enumerable:!0}):r,e)),Se=e=>le(P({},"__esModule",{value:!0}),e);var Fe={};Ae(Fe,{convert:()=>ue,createTree:()=>se});module.exports=Se(Fe);var ie=require("ensure-string");function se(e,t={}){e=(0,ie.ensureString)(e);let{flatten:r=!1}=t;if(typeof e!="string")throw new TypeError("the JCAMP should be a string");let a=e.split(/[\r\n]+/),s=[],l=[],p=[],i,f=0,m=e.includes("## ");for(let c=0;c<a.length;c++){let b=a[c],n=m?b.replace(/ /g,""):b;if(n.substring(0,9)==="##NTUPLES"&&f++,n.substring(0,7)==="##TITLE"){let o=[n.substring(8).trim()];for(let u=c+1;u<a.length&&!a[u].startsWith("##");u++)o.push(a[u].trim());l.push({title:o.join(`
2
+ `),jcamp:`${b}
3
+ `,children:[]}),i=l[l.length-1],s.push(i)}else if(n.substring(0,5)==="##END"&&f===0){i.jcamp+=`${b}
4
+ `;let o=l.pop();l.length!==0?(i=l[l.length-1],i.children.push(o)):(i=void 0,p.push(o))}else if(i&&i.jcamp){i.jcamp+=`${b}
5
+ `;let o=n.match(/^##(.*?)=(.+)/);if(o){let u=o[1].replace(/[ _-]/g,"").toUpperCase();u==="DATATYPE"&&(i.dataType=o[2].trim()),u==="DATACLASS"&&(i.dataClass=o[2].trim())}}n.substring(0,5)==="##END"&&f>0&&f--}return r?(s.forEach(c=>{c.children=void 0}),s):p}var oe=require("dynamic-typing"),pe=require("ensure-string");var $=["TIC",".RIC","SCANNUMBER"];function ae(e){let t=e.spectra,r=t.length,a={times:new Array(r),series:{ms:{dimension:2,data:new Array(r)}}},s=[];for(let l=0;l<$.length;l++){let p=U($[l]);t[0][p]&&(s.push(p),a.series[p]={dimension:1,data:new Array(r)})}for(let l=0;l<r;l++){let p=t[l];a.times[l]=p.pageValue;for(let i=0;i<s.length;i++)a.series[s[i]].data[l]=Number(p[s[i]]);p.data&&(a.series.ms.data[l]=[p.data.x,p.data.y])}e.chromatogram=a}function re(e){return $.indexOf(e)!==-1}function U(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function Y(e){let t=[];for(let r=0;r<e.length;r++)t.push(Number(e[r]));return t}function V(e,t){let r=e.yFactor,a=e.deltaX;e.isXYdata=!0;let s={x:[],y:[]};e.data=s;let l=e.firstX,p=e.firstY,i=!1,f,m=0;for(;m<t.length;m++)if(f=t.charCodeAt(m),f===13||f===10)i=!0;else if(i)break;let c=!0,b=!1,n=!1,o=0,u=!1,d=!1,h=0,T=0,A=!1,N=!1,y=!1,S=0;for(;m<=t.length;m++)if(m===t.length?f=13:f=t.charCodeAt(m),d)(f===13||f===10)&&(c=!0,d=!1);else if(f<=57&&f>=48)N=!0,S>0?h+=(f-48)/Math.pow(10,S++):(h*=10,h+=f-48);else if(f===44||f===46)N=!0,S++;else{if(N){if(c)c=!1,n&&(y=!0);else if(y)y=!1;else{b?(o=A?0-h:h,n=!0,b=!1):u||(T=A?0-h:h);let O=u?h-1:1;for(let F=0;F<O;F++)n?p+=o:p=T,s.x.push(l),s.y.push(p*r),l+=a}A=!1,h=0,S=0,N=!1,u=!1}if(f<74&&f>63)N=!0,n=!1,h=f-64;else if(f>96&&f<106)N=!0,n=!1,h=f-96,A=!0;else if(f===115)N=!0,u=!0,h=9;else if(f>82&&f<91)N=!0,u=!0,h=f-82;else if(f>73&&f<83)N=!0,b=!0,h=f-73;else if(f>105&&f<115)N=!0,b=!0,h=f-105,A=!0;else if(f===36&&t.charCodeAt(m+1)===36)N=!0,d=!0;else if(f===37)N=!0,b=!0,h=0,A=!1;else if(f===45){let O=t.charCodeAt(m+1);(O>=48&&O<=57||O===44||O===46)&&(N=!0,c||(n=!1),A=!0)}else(f===13||f===10)&&(c=!0,d=!1)}}var fe=/\$\$.*/,ne=/[,\t ]+/;function w(e,t,r){if(e.isPeaktable=!0,!e.variables||Object.keys(e.variables)===2?Xe(e,t,r):Ne(e,t,r),e.variables)for(let a in e.variables)e.variables[a].data=e.data[a]}function Xe(e,t,r){let a={x:[],y:[]};e.data=a;let s=t.split(/,? *,?[;\r\n]+ */);for(let l=1;l<s.length;l++){let p=s[l].trim().replace(fe,"").split(ne);if(p.length%2===0)for(let i=0;i<p.length;i=i+2)a.x.push(Number(p[i])*e.xFactor),a.y.push(Number(p[i+1])*e.yFactor);else r.logs.push(`Format error: ${p}`)}}function Ne(e,t,r){let a={},s=Object.keys(e.variables),l=s.length;s.forEach(i=>a[i]=[]),e.data=a;let p=t.split(/,? *,?[;\r\n]+ */);for(let i=1;i<p.length;i++){let f=p[i].trim().replace(fe,"").split(ne);if(f.length%l===0)for(let m=0;m<f.length;m++)a[s[m%l]].push(Number(f[m]));else r.logs.push(`Format error: ${f}`)}}function I(e,t){e.isXYAdata=!0;let r={};e.data=r;let a=t.split(/\r?\n/),s=a[0].replace(/^.*?([A-Z]+).*$/,"$1").split("").map(l=>l.toLowerCase());for(let l=1;l<a.length;l++){let p=a[l].replace(/^\((.*)\)$/,"$1").split(/ *, */);for(let i=0;i<s.length;i++){let f=p[i];switch(s[i]){case"x":case"y":case"w":f=Number.parseFloat(f);break;case"a":f=f.replace(/^<(.*)>$/,"$1");break;case"m":break;default:continue}r[s[i]]||(r[s[i]]=[]),r[s[i]].push(f)}}}var G=require("dynamic-typing");var E=Te(require("ml-array-median"));function k(e){let t=e[0].data.y[0],r=t,a=e.length,s=e[0].data.x.length,l=new Array(a);for(let n=0;n<a;n++){l[n]=e[n].data.y;for(let o=0;o<s;o++){let u=l[n][o];u<t&&(t=u),u>r&&(r=u)}}let p=e[0].data.x[0],i=e[0].data.x[e[0].data.x.length-1],f=e[0].pageValue,m=e[a-1].pageValue;if(p>i)for(let n of l)n.reverse();f>m&&l.reverse();let c=[];for(let n=0;n<l.length;n++){let o=Float64Array.from(l[n]);for(let u=0;u<o.length;u++)o[u]<0&&(o[u]=-o[u]);c.push((0,E.default)(o))}let b=(0,E.default)(c);return{z:l,minX:Math.min(p,i),maxX:Math.max(p,i),minY:Math.min(f,m),maxY:Math.max(f,m),minZ:t,maxZ:r,noise:b}}function Z(e,t){let r=e.noise,a=e.z,s,l,p,i,f,m,c,b,n=a.length,o=a[0].length,u,d,h,T,A=e.minX,y=(e.maxX-A)/(o-1),S=e.minY,F=(e.maxY-S)/(n-1),me=e.minZ,z=e.maxZ,W=t.nbContourLevels*2,J=new Array(W),x;for(let M=0;M<W;M++){let R={};J[M]=R;let ce=M%2,Q=(z-t.noiseMultiplier*r)*Math.exp((M>>1)-t.nbContourLevels);ce===0?x=Q+t.noiseMultiplier*r:x=0-Q-t.noiseMultiplier*r;let g=[];if(R.zValue=x,R.lines=g,!(x<=me||x>=z))for(let v=0;v<n-1;v++){let ee=a[v],te=a[v+1];for(let X=0;X<o-1;X++)s=ee[X],l=ee[X+1],p=te[X],i=te[X+1],f=s>x,m=l>x,c=p>x,b=i>x,f!==m&&f!==c&&(u=X+(x-s)/(l-s),d=v,h=X,T=v+(x-s)/(p-s),g.push(u*y+A),g.push(d*F+S),g.push(h*y+A),g.push(T*F+S)),b!==m&&b!==c&&(u=X+1,d=v+1-(x-i)/(l-i),h=X+1-(x-i)/(p-i),T=v+1,g.push(u*y+A),g.push(d*F+S),g.push(h*y+A),g.push(T*F+S)),m!==c&&(u=(X+1-(x-l)/(p-l))*y+A,d=(v+(x-l)/(p-l))*F+S,m!==f&&(h=X+1-(x-l)/(s-l),T=v,g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)),c!==f&&(h=X,T=v+1-(x-p)/(s-p),g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)),m!==b&&(h=X+1,T=v+(x-l)/(i-l),g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)),c!==b&&(h=X+(x-p)/(i-p),T=v+1,g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)))}}return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY,segments:J}}function j(e,t){let r=k(e.spectra);t.noContour||(e.contourLines=Z(r,t),delete r.z),e.minMax=r}var B=require("gyromagnetic-ratio");function q(e){for(let t of e){let r=0,a=0;for(let s of t.spectra){if(t.ntuples&&t.ntuples.symbol?(!r&&s.observeFrequency&&(r=s.observeFrequency),!a&&s.shiftOffsetVal&&(a=s.shiftOffsetVal)):(r=s.observeFrequency,a=s.shiftOffsetVal),r&&s.xUnits&&s.xUnits.toUpperCase().includes("HZ")){s.xUnits="PPM",s.xFactor=s.xFactor/r,s.firstX=s.firstX/r,s.lastX=s.lastX/r,s.deltaX=s.deltaX/r;for(let l=0;l<s.data.x.length;l++)s.data.x[l]/=r}if(a&&s.xUnits.toLowerCase().includes("ppm")){let l=s.firstX-a;s.firstX=s.firstX-l,s.lastX=s.lastX-l;for(let p=0;p<s.data.x.length;p++)s.data.x[p]-=l}if(t.ntuples&&t.ntuples.nucleus&&t.ntuples.symbol)for(let l=0;l<t.ntuples.nucleus.length;l++){let p=t.ntuples.symbol[l],i=t.ntuples.nucleus[l];if(p.match(/^[F|T]/)&&!i){if(p.match(/[F|T]1/))if(t.tmp.$NUC2)t.ntuples.nucleus[l]=t.tmp.$NUC2;else{let f=t.ntuples.symbol.indexOf(p.replace(/^([F|T]).*/,"$12"));f&&t.ntuples.nucleus[f]&&(t.ntuples.nucleus[l]=t.ntuples.nucleus[f])}p.match(/[F|T]2/)&&(t.ntuples.nucleus[l]=t.tmp.$NUC1)}p.match(/[F|T]2/)&&(t.yType=t.ntuples.nucleus[0])}if(r&&t.ntuples&&t.ntuples.symbol&&t.ntuples.nucleus){let l="",p=t.ntuples.symbol.indexOf(s.pageSymbol);if(t.ntuples.units&&t.ntuples.units[p]&&(l=t.ntuples.units[p]),l!=="PPM"){if(p!==0)throw Error("Not sure about this ntuples format");let i=B.gyromagneticRatio[t.ntuples.nucleus[0]],f=B.gyromagneticRatio[t.ntuples.nucleus[1]];if(!i||!f)throw Error("Problem with determination of gyromagnetic ratio");let m=i/f*r;s.pageValue/=m}}}}}function L(e,t,r={}){r.logger?.trace(t),e.profiling&&e.profiling.push({action:t,time:Date.now()-r.start})}function H(e){let t=e.spectra[0].data;e.chromatogram={times:t.x.slice(),series:{intensity:{dimension:1,data:t.y.slice()}}}}function K(e,t,r){q(e),ye(e,r);for(let a of e){if(Object.keys(a.ntuples).length>0){let s=[],l=Object.keys(a.ntuples);for(let p=0;p<l.length;p++){let i=l[p],f=a.ntuples[i];for(let m=0;m<f.length;m++)s[m]||(s[m]={}),s[m][i]=f[m]}a.ntuples=s}a.twoD&&r.wantXY&&(j(a,r),L(t,"Finished countour plot calculation",r),r.keepSpectra||delete a.spectra),r.chromatogram&&(a.spectra.length>1?ae(a):H(a),L(t,"Finished chromatogram calculation",r)),delete a.tmp}}function ye(e,t){for(let r of e)for(let a in r.meta){let s=r.meta[a];if(typeof s=="string"){if(s[0]==="{"){if(s[s.length-1]==="}"){let l=s.slice(1,-1).split(/[,; ]+/).filter(p=>p);for(let p=0;p<l.length;p++)r.meta[a+String(p)]=t.dynamicTyping?(0,G.parseString)(l[p]):l[p]}}else if(s[0]==="("){let l=s.split(/\r?\n/),p=/^\((?<from>\d+)\.\.(?<to>\d+)\)$/;if(p.test(l[0])){let[i,f]=l[0].match(p).slice(1).map(Number),m=l.slice(1).join(" ").split(/[,; ]+/).filter(c=>c);for(let c=i;c<=f;c++)r.meta[a+String(c)]=t.dynamicTyping?(0,G.parseString)(m[c-i]):m[c-i]}}}}}function _(e,t,r){let a=-1,s=-1,l="",p="";if(r.indexOf("++")>0)l=r.replace(/.*\(([a-zA-Z0-9]+)\+\+.*/,"$1"),p=r.replace(/.*\.\.([a-zA-Z0-9]+).*/,"$1");else{r=r.replace(/[^a-zA-Z]/g,""),l=r.charAt(0),p=r.charAt(1),t.variables={};for(let i of r){let f=i.toLowerCase(),m=e.ntuples.symbol.indexOf(i);if(m===-1)throw Error(`Symbol undefined: ${i}`);t.variables[f]={};for(let c in e.ntuples)e.ntuples[c][m]&&(t.variables[f][c.replace(/^var/,"")]=e.ntuples[c][m])}}a=e.ntuples.symbol.indexOf(l),s=e.ntuples.symbol.indexOf(p),a===-1&&(a=0),s===-1&&(s=0),e.ntuples.first&&(e.ntuples.first.length>a&&(t.firstX=e.ntuples.first[a]),e.ntuples.first.length>s&&(t.firstY=e.ntuples.first[s])),e.ntuples.last&&(e.ntuples.last.length>a&&(t.lastX=e.ntuples.last[a]),e.ntuples.last.length>s&&(t.lastY=e.ntuples.last[s])),e.ntuples.vardim&&e.ntuples.vardim.length>a&&(t.nbPoints=e.ntuples.vardim[a]),e.ntuples.factor&&(e.ntuples.factor.length>a&&(t.xFactor=e.ntuples.factor[a]),e.ntuples.factor.length>s&&(t.yFactor=e.ntuples.factor[s])),e.ntuples.units&&(e.ntuples.units.length>a&&(e.ntuples.varname&&e.ntuples.varname[a]?t.xUnits=`${e.ntuples.varname[a]} [${e.ntuples.units[a]}]`:t.xUnits=e.ntuples.units[a]),e.ntuples.units.length>s&&(e.ntuples.varname&&e.ntuples.varname[s]?t.yUnits=`${e.ntuples.varname[s]} [${e.ntuples.units[s]}]`:t.yUnits=e.ntuples.units[s]))}function D(e){e.xFactor||(e.xFactor=1),e.yFactor||(e.yFactor=1)}var C=/[ \t]*,[ \t]*/,ve={keepRecordsRegExp:/^$/,canonicDataLabels:!0,canonicMetadataLabels:!1,dynamicTyping:!0,withoutXY:!1,chromatogram:!1,keepSpectra:!1,noContour:!1,nbContourLevels:7,noiseMultiplier:5,profiling:!1};function ue(e,t={}){e=(0,pe.ensureString)(e),t={...ve,...t},t.logger?.debug("Starting jcamp conversion"),t.wantXY=!t.withoutXY,t.start=Date.now();let r=[],a={profiling:t.profiling?[]:!1,logs:[],entries:[]},s={children:[]},l=s,p=[],i={};if(typeof e!="string")throw new TypeError("the JCAMP should be a string");L(a,"Before split to LDRS",t);let f=e.replace(/[\r\n]+##/g,`
6
+ ##`).split(`
7
+ ##`);L(a,"Split to LDRS",t),f[0]&&(f[0]=f[0].replace(/^[\r\n ]*##/,""));for(let m of f){let c=m.indexOf("="),b=c>0?m.substring(0,c):m,n=c>0?m.substring(c+1).trim():"",o=b.replace(/[_ -]/g,"").toUpperCase();if(o==="DATATABLE"){let u=n.indexOf(`
8
+ `);if(u===-1&&(u=n.indexOf("\r")),u>0){let d=n.substring(0,u).split(/[ ,;\t]+/);_(l,i,d[0]),i.datatable=d[0],d[1]&&d[1].indexOf("PEAKS")>-1?o="PEAKTABLE":d[1]&&(d[1].indexOf("XYDATA")||d[0].indexOf("++")>0)&&(o="XYDATA",i.nbPoints&&(i.deltaX=(i.lastX-i.firstX)/(i.nbPoints-1)))}}if(o==="XYDATA"){t.wantXY&&(D(i),n.match(/.*\+\+.*/)?(i.nbPoints&&(i.deltaX=(i.lastX-i.firstX)/(i.nbPoints-1)),V(i,n,a)):w(i,n,a),l.spectra.push(i),i={});continue}else if(o==="PEAKTABLE"){t.wantXY&&(D(i),w(i,n,a),l.spectra.push(i),i={});continue}if(o==="PEAKASSIGNMENTS"){t.wantXY&&(n.match(/.*([^A-Z]*).*/)&&I(i,n),l.spectra.push(i),i={});continue}if(o==="TITLE"){let u=l;u.children||(u.children=[]),l={spectra:[],ntuples:{},info:{},meta:{},tmp:{}},u.children.push(l),p.push(u),r.push(l),l.title=n}else o==="DATATYPE"?(l.dataType=n,n.match(/(^nd|\snd\s)/i)&&(l.twoD=!0)):o==="NTUPLES"?n.match(/(^nd|\snd\s)/i)&&(l.twoD=!0):o==="DATACLASS"?l.dataClass=n:o==="XUNITS"?i.xUnits=n:o==="YUNITS"?i.yUnits=n:o==="FIRSTX"?i.firstX=Number(n):o==="LASTX"?i.lastX=Number(n):o==="FIRSTY"?i.firstY=Number(n):o==="LASTY"?i.lastY=Number(n):o==="NPOINTS"?i.nbPoints=Number(n):o==="XFACTOR"?i.xFactor=Number(n):o==="YFACTOR"?i.yFactor=Number(n):o==="MAXX"?i.maxX=Number(n):o==="MINX"?i.minX=Number(n):o==="MAXY"?i.maxY=Number(n):o==="MINY"?i.minY=Number(n):o==="DELTAX"?i.deltaX=Number(n):o===".OBSERVEFREQUENCY"||o==="$SFO1"?i.observeFrequency||(i.observeFrequency=Number(n)):o===".OBSERVENUCLEUS"?i.xType||(l.xType=n.replace(/[^a-zA-Z0-9]/g,"")):o==="$OFFSET"?(l.shiftOffsetNum=0,i.shiftOffsetVal||(i.shiftOffsetVal=Number(n))):o==="$REFERENCEPOINT"||(o==="VARNAME"?l.ntuples.varname=n.split(C):o==="SYMBOL"?l.ntuples.symbol=n.split(C):o==="VARTYPE"?l.ntuples.vartype=n.split(C):o==="VARFORM"?l.ntuples.varform=n.split(C):o==="VARDIM"?l.ntuples.vardim=Y(n.split(C)):o==="UNITS"?l.ntuples.units=n.split(C):o==="FACTOR"?l.ntuples.factor=Y(n.split(C)):o==="FIRST"?l.ntuples.first=Y(n.split(C)):o==="LAST"?l.ntuples.last=Y(n.split(C)):o==="MIN"?l.ntuples.min=Y(n.split(C)):o==="MAX"?l.ntuples.max=Y(n.split(C)):o===".NUCLEUS"?l.ntuples&&(l.ntuples.nucleus=n.split(C).map(u=>u.replace(/[^a-zA-Z0-9]/g,""))):o==="PAGE"?(i.page=n.trim(),i.pageValue=Number(n.replace(/^.*=/,"")),i.pageSymbol=i.page.replace(/[=].*/,"")):o==="RETENTIONTIME"?i.pageValue=Number(n):re(o)?i[U(o)]=n:o==="SAMPLEDESCRIPTION"?i.sampleDescription=n:o.startsWith("$NUC")?!l.tmp[o]&&!n.includes("off")&&(l.tmp[o]=n.replace(/[<>]/g,"")):o==="END"&&(l=p.pop()));if(l&&l.info&&l.meta&&o.match(t.keepRecordsRegExp)){let u=n.trim(),d,h;b.startsWith("$")?(h=t.canonicMetadataLabels?o.substring(1):b.substring(1),d=l.meta):(h=t.canonicDataLabels?o:b,d=l.info),t.dynamicTyping&&(u=(0,oe.parseString)(u)),d[h]?(Array.isArray(d[h])||(d[h]=[d[h]]),d[h].push(u)):d[h]=u}}return L(a,"Finished parsing",t),K(r,a,t),L(a,"Total time",t),a.entries=s.children,a.flatten=r,a}
@@ -1,182 +1,222 @@
1
- /**
2
- * Conversion options
3
- * @typedef {object} ConvertOptions
4
- * @property {RegExp} [keepRecordsRegExp=/^$/] - By default we don't keep meta information.
5
- * @property {boolean} [canonicDataLabels=true] - Canonize the Labels (uppercase without symbol).
6
- * @property {boolean} [canonicMetadataLabels=false] - Canonize the metadata Labels (uppercase without symbol).
7
- * @property {boolean} [dynamicTyping=false] - Convert numbers to Number.
8
- * @property {boolean} [withoutXY=false] - Remove the XY data.
9
- * @property {boolean} [chromatogram=false] - Special post-processing for GC / HPLC / MS.
10
- * @property {boolean} [keepSpectra=false] - Force to keep the spectra in case of 2D.
11
- * @property {boolean} [noContour=false] - Don't calculate countour in case of 2D.
12
- * @property {number} [nbContourLevels=7] - Number of positive / negative contour levels to calculate.
13
- * @property {number} [noiseMultiplier=5] - Define for 2D the level as 5 times the median as default.
14
- * @property {import('cheminfo-types').Logger} [logger] - A logger like 'pino'
15
- * @property {boolean} [profiling=false] - Add profiling information.
16
- */
17
- /**
18
- *
19
- * @typedef {object} Ntuples
20
- * @property {string[]} [varname]
21
- * @property {string[]} [symbol]
22
- * @property {string[]} [vartype]
23
- * @property {string[]} [varform]
24
- * @property {number[]} [vardim]
25
- * @property {string[]} [units]
26
- * @property {number[]} [factor]
27
- * @property {number[]} [first]
28
- * @property {number[]} [last]
29
- * @property {number[]} [min]
30
- * @property {number[]} [max]
31
- * @property {string[]} [nucleus]
32
- */
33
- /**
34
- * @typedef { Record<string, any> } Spectrum
35
- * @property {Record<string, number[]>} [data]
36
- * @property {number} [firstX] - first X value
37
- * @property {number} [lastX] - last X value
38
- * @property {number} [deltaX] - distance between 2 consecutive x axis values
39
- * @property {number} [yFactor] - y axis scaling factor
40
- * @property {number} [xFactor] - x axis scaling factor
41
- * @property {number} [nbPoints] - Number of points
42
- */
43
- /**
44
- *
45
- * @typedef {object} MinMax
46
- * @property {number[][]} [z]
47
- * @property {number} minX
48
- * @property {number} maxX
49
- * @property {number} minY
50
- * @property {number} maxY
51
- * @property {number} minZ
52
- * @property {number} maxZ
53
- * @property {number} median
54
- */
55
- /**
56
- *
57
- * @typedef {object} Entry
58
- * @property {Spectrum[]} spectra
59
- * @property {Ntuples} ntuples
60
- * @property {object} meta
61
- * @property {object} info
62
- * @property {object} tmp
63
- * @property {string} [title]
64
- * @property {string} [dataType]
65
- * @property {string} [dataClass]
66
- * @property {boolean} [twoD]
67
- * @property {MinMax} [minMax]
68
- */
69
- /**
70
- *
71
- * @typedef { object } ConvertResult
72
- * @property { object[] | boolean } profiling
73
- * @property { string[] } logs
74
- * @property { object[] } entries
75
- * @property { Entry[] } flatten
76
- */
77
- /**
78
- * Parse a jcamp.
79
- * The data can be provide as a string or array buffer. In this later case
80
- * we will convert it first to a string before parsing.
81
- * @param {string|ArrayBuffer|Uint8Array} jcamp
82
- * @param {ConvertOptions} [options]
83
- * @returns {ConvertResult}
84
- */
85
- export function convert(jcamp: string | ArrayBuffer | Uint8Array, options?: ConvertOptions | undefined): ConvertResult;
86
- /**
87
- * Conversion options
88
- */
89
- export type ConvertOptions = {
90
- /**
91
- * - By default we don't keep meta information.
92
- */
93
- keepRecordsRegExp?: RegExp | undefined;
94
- /**
95
- * - Canonize the Labels (uppercase without symbol).
96
- */
97
- canonicDataLabels?: boolean | undefined;
98
- /**
99
- * - Canonize the metadata Labels (uppercase without symbol).
100
- */
101
- canonicMetadataLabels?: boolean | undefined;
102
- /**
103
- * - Convert numbers to Number.
104
- */
105
- dynamicTyping?: boolean | undefined;
106
- /**
107
- * - Remove the XY data.
108
- */
109
- withoutXY?: boolean | undefined;
110
- /**
111
- * - Special post-processing for GC / HPLC / MS.
112
- */
113
- chromatogram?: boolean | undefined;
114
- /**
115
- * - Force to keep the spectra in case of 2D.
116
- */
117
- keepSpectra?: boolean | undefined;
118
- /**
119
- * - Don't calculate countour in case of 2D.
120
- */
121
- noContour?: boolean | undefined;
122
- /**
123
- * - Number of positive / negative contour levels to calculate.
124
- */
125
- nbContourLevels?: number | undefined;
126
- /**
127
- * - Define for 2D the level as 5 times the median as default.
128
- */
129
- noiseMultiplier?: number | undefined;
130
- /**
131
- * - A logger like 'pino'
132
- */
133
- logger?: import("cheminfo-types").Logger | undefined;
134
- /**
135
- * - Add profiling information.
136
- */
137
- profiling?: boolean | undefined;
138
- };
139
- export type Ntuples = {
140
- varname?: string[] | undefined;
141
- symbol?: string[] | undefined;
142
- vartype?: string[] | undefined;
143
- varform?: string[] | undefined;
144
- vardim?: number[] | undefined;
145
- units?: string[] | undefined;
146
- factor?: number[] | undefined;
147
- first?: number[] | undefined;
148
- last?: number[] | undefined;
149
- min?: number[] | undefined;
150
- max?: number[] | undefined;
151
- nucleus?: string[] | undefined;
152
- };
153
- export type Spectrum = Record<string, any>;
154
- export type MinMax = {
155
- z?: number[][] | undefined;
156
- minX: number;
157
- maxX: number;
158
- minY: number;
159
- maxY: number;
160
- minZ: number;
161
- maxZ: number;
162
- median: number;
163
- };
164
- export type Entry = {
165
- spectra: Spectrum[];
166
- ntuples: Ntuples;
167
- meta: object;
168
- info: object;
169
- tmp: object;
170
- title?: string | undefined;
171
- dataType?: string | undefined;
172
- dataClass?: string | undefined;
173
- twoD?: boolean | undefined;
174
- minMax?: MinMax | undefined;
175
- };
176
- export type ConvertResult = {
177
- profiling: object[] | boolean;
178
- logs: string[];
179
- entries: object[];
180
- flatten: Entry[];
181
- };
182
- //# sourceMappingURL=convert.d.ts.map
1
+ import { Logger } from 'cheminfo-types';
2
+
3
+ /**
4
+ * Conversion options
5
+ * @typedef {object} ConvertOptions@typedef {object} ConvertOptions
6
+ * @property {RegExp} [keepRecordsRegExp=/^$/] - By default we don't keep meta information.
7
+ * @property {boolean} [canonicDataLabels=true] - Canonize the Labels (uppercase without symbol).
8
+ * @property {boolean} [canonicMetadataLabels=false] - Canonize the metadata Labels (uppercase without symbol).
9
+ * @property {boolean} [dynamicTyping=false] - Convert numbers to Number.
10
+ * @property {boolean} [withoutXY=false] - Remove the XY data.
11
+ * @property {boolean} [chromatogram=false] - Special post-processing for GC / HPLC / MS.
12
+ * @property {boolean} [keepSpectra=false] - Force to keep the spectra in case of 2D.
13
+ * @property {boolean} [noContour=false] - Don't calculate countour in case of 2D.
14
+ * @property {number} [nbContourLevels=7] - Number of positive / negative contour levels to calculate.
15
+ * @property {number} [noiseMultiplier=5] - Define for 2D the level as 5 times the median as default.
16
+ * @property {import('cheminfo-types').Logger} [logger] - A logger like 'pino'
17
+ * @property {boolean} [profiling=false] - Add profiling information.
18
+ */
19
+ /**
20
+ *
21
+ * @typedef {object} Ntuples@typedef {object} Ntuples
22
+ * @property {string[]} [varname]
23
+ * @property {string[]} [symbol]
24
+ * @property {string[]} [vartype]
25
+ * @property {string[]} [varform]
26
+ * @property {number[]} [vardim]
27
+ * @property {string[]} [units]
28
+ * @property {number[]} [factor]
29
+ * @property {number[]} [first]
30
+ * @property {number[]} [last]
31
+ * @property {number[]} [min]
32
+ * @property {number[]} [max]
33
+ * @property {string[]} [nucleus]
34
+ */
35
+ /**
36
+ * @typedef { Record<string, any> } Spectrum
37
+ * @property {Record<string, number[]>} [data]
38
+ * @property {number} [firstX] - first X value
39
+ * @property {number} [lastX] - last X value
40
+ * @property {number} [deltaX] - distance between 2 consecutive x axis values
41
+ * @property {number} [yFactor] - y axis scaling factor
42
+ * @property {number} [xFactor] - x axis scaling factor
43
+ * @property {number} [nbPoints] - Number of points
44
+ */
45
+ /**
46
+ *
47
+ * @typedef {object} MinMax@typedef {object} MinMax
48
+ * @property {number[][]} [z]
49
+ * @property {number} minX
50
+ * @property {number} maxX
51
+ * @property {number} minY
52
+ * @property {number} maxY
53
+ * @property {number} minZ
54
+ * @property {number} maxZ
55
+ * @property {number} median
56
+ */
57
+ /**
58
+ *
59
+ * @typedef {object} Entry@typedef {object} Entry
60
+ * @property {Spectrum[]} spectra
61
+ * @property {Ntuples} ntuples
62
+ * @property {object} meta
63
+ * @property {object} info
64
+ * @property {object} tmp
65
+ * @property {string} [title]
66
+ * @property {string} [dataType]
67
+ * @property {string} [dataClass]
68
+ * @property {boolean} [twoD]
69
+ * @property {MinMax} [minMax]
70
+ */
71
+ /**
72
+ *
73
+ * @typedef { object } ConvertResult@typedef { object } ConvertResult
74
+ * @property { object[] | boolean } profiling
75
+ * @property { string[] } logs
76
+ * @property { object[] } entries
77
+ * @property { Entry[] } flatten
78
+ */
79
+ /**
80
+ * Parse a jcamp.
81
+ * The data can be provide as a string or array buffer. In this later case
82
+ * we will convert it first to a string before parsing.
83
+ * @param {string|ArrayBuffer|Uint8Array} jcamp
84
+ * @param {ConvertOptions} [options]
85
+ * @returns {ConvertResult}
86
+ */
87
+ export declare function convert(jcamp: string | ArrayBuffer | Uint8Array, options?: ConvertOptions | undefined): ConvertResult;
88
+
89
+ /**
90
+ * Conversion options
91
+ */
92
+ declare type ConvertOptions = {
93
+ /**
94
+ * - By default we don't keep meta information.
95
+ */
96
+ keepRecordsRegExp?: RegExp | undefined;
97
+ /**
98
+ * - Canonize the Labels (uppercase without symbol).
99
+ */
100
+ canonicDataLabels?: boolean | undefined;
101
+ /**
102
+ * - Canonize the metadata Labels (uppercase without symbol).
103
+ */
104
+ canonicMetadataLabels?: boolean | undefined;
105
+ /**
106
+ * - Convert numbers to Number.
107
+ */
108
+ dynamicTyping?: boolean | undefined;
109
+ /**
110
+ * - Remove the XY data.
111
+ */
112
+ withoutXY?: boolean | undefined;
113
+ /**
114
+ * - Special post-processing for GC / HPLC / MS.
115
+ */
116
+ chromatogram?: boolean | undefined;
117
+ /**
118
+ * - Force to keep the spectra in case of 2D.
119
+ */
120
+ keepSpectra?: boolean | undefined;
121
+ /**
122
+ * - Don't calculate countour in case of 2D.
123
+ */
124
+ noContour?: boolean | undefined;
125
+ /**
126
+ * - Number of positive / negative contour levels to calculate.
127
+ */
128
+ nbContourLevels?: number | undefined;
129
+ /**
130
+ * - Define for 2D the level as 5 times the median as default.
131
+ */
132
+ noiseMultiplier?: number | undefined;
133
+ /**
134
+ * - A logger like 'pino'
135
+ */
136
+ logger?: Logger | undefined;
137
+ /**
138
+ * - Add profiling information.
139
+ */
140
+ profiling?: boolean | undefined;
141
+ };
142
+
143
+ declare type ConvertResult = {
144
+ profiling: object[] | boolean;
145
+ logs: string[];
146
+ entries: object[];
147
+ flatten: Entry[];
148
+ };
149
+
150
+ /**
151
+ *
152
+ * @typedef {object} CreateTreeOptions@typedef {object} CreateTreeOptions
153
+ * @property {boolean} [flatten=false]
154
+ */
155
+ /**
156
+ *
157
+ * @typedef {object} Tree@typedef {object} Tree
158
+ * @property {string} title
159
+ * @property {string} jcamp
160
+ * @property {Tree[]} [children]
161
+ */
162
+ /**
163
+ * Parse the jcamp to extract the structure as a tree.
164
+ *
165
+ * @param {string|ArrayBuffer|Uint8Array} jcamp
166
+ * @param {CreateTreeOptions} [options={}]
167
+ * @returns {Tree[]}
168
+ */
169
+ export declare function createTree(jcamp: string | ArrayBuffer | Uint8Array, options?: CreateTreeOptions | undefined): Tree[];
170
+
171
+ declare type CreateTreeOptions = {
172
+ flatten?: boolean | undefined;
173
+ };
174
+
175
+ declare type Entry = {
176
+ spectra: Spectrum[];
177
+ ntuples: Ntuples;
178
+ meta: object;
179
+ info: object;
180
+ tmp: object;
181
+ title?: string | undefined;
182
+ dataType?: string | undefined;
183
+ dataClass?: string | undefined;
184
+ twoD?: boolean | undefined;
185
+ minMax?: MinMax | undefined;
186
+ };
187
+
188
+ declare type MinMax = {
189
+ z?: number[][] | undefined;
190
+ minX: number;
191
+ maxX: number;
192
+ minY: number;
193
+ maxY: number;
194
+ minZ: number;
195
+ maxZ: number;
196
+ median: number;
197
+ };
198
+
199
+ declare type Ntuples = {
200
+ varname?: string[] | undefined;
201
+ symbol?: string[] | undefined;
202
+ vartype?: string[] | undefined;
203
+ varform?: string[] | undefined;
204
+ vardim?: number[] | undefined;
205
+ units?: string[] | undefined;
206
+ factor?: number[] | undefined;
207
+ first?: number[] | undefined;
208
+ last?: number[] | undefined;
209
+ min?: number[] | undefined;
210
+ max?: number[] | undefined;
211
+ nucleus?: string[] | undefined;
212
+ };
213
+
214
+ declare type Spectrum = Record<string, any>;
215
+
216
+ declare type Tree = {
217
+ title: string;
218
+ jcamp: string;
219
+ children?: Tree[] | undefined;
220
+ };
221
+
222
+ export { }
@@ -0,0 +1,8 @@
1
+ import{ensureString as fe}from"ensure-string";function ne(e,i={}){e=fe(e);let{flatten:p=!1}=i;if(typeof e!="string")throw new TypeError("the JCAMP should be a string");let a=e.split(/[\r\n]+/),s=[],t=[],o=[],l,r=0,m=e.includes("## ");for(let c=0;c<a.length;c++){let b=a[c],f=m?b.replace(/ /g,""):b;if(f.substring(0,9)==="##NTUPLES"&&r++,f.substring(0,7)==="##TITLE"){let n=[f.substring(8).trim()];for(let u=c+1;u<a.length&&!a[u].startsWith("##");u++)n.push(a[u].trim());t.push({title:n.join(`
2
+ `),jcamp:`${b}
3
+ `,children:[]}),l=t[t.length-1],s.push(l)}else if(f.substring(0,5)==="##END"&&r===0){l.jcamp+=`${b}
4
+ `;let n=t.pop();t.length!==0?(l=t[t.length-1],l.children.push(n)):(l=void 0,o.push(n))}else if(l&&l.jcamp){l.jcamp+=`${b}
5
+ `;let n=f.match(/^##(.*?)=(.+)/);if(n){let u=n[1].replace(/[ _-]/g,"").toUpperCase();u==="DATATYPE"&&(l.dataType=n[2].trim()),u==="DATACLASS"&&(l.dataClass=n[2].trim())}}f.substring(0,5)==="##END"&&r>0&&r--}return p?(s.forEach(c=>{c.children=void 0}),s):o}import{parseString as me}from"dynamic-typing";import{ensureString as ce}from"ensure-string";var R=["TIC",".RIC","SCANNUMBER"];function J(e){let i=e.spectra,p=i.length,a={times:new Array(p),series:{ms:{dimension:2,data:new Array(p)}}},s=[];for(let t=0;t<R.length;t++){let o=$(R[t]);i[0][o]&&(s.push(o),a.series[o]={dimension:1,data:new Array(p)})}for(let t=0;t<p;t++){let o=i[t];a.times[t]=o.pageValue;for(let l=0;l<s.length;l++)a.series[s[l]].data[t]=Number(o[s[l]]);o.data&&(a.series.ms.data[t]=[o.data.x,o.data.y])}e.chromatogram=a}function Q(e){return R.indexOf(e)!==-1}function $(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function Y(e){let i=[];for(let p=0;p<e.length;p++)i.push(Number(e[p]));return i}function U(e,i){let p=e.yFactor,a=e.deltaX;e.isXYdata=!0;let s={x:[],y:[]};e.data=s;let t=e.firstX,o=e.firstY,l=!1,r,m=0;for(;m<i.length;m++)if(r=i.charCodeAt(m),r===13||r===10)l=!0;else if(l)break;let c=!0,b=!1,f=!1,n=0,u=!1,d=!1,h=0,T=0,A=!1,N=!1,y=!1,S=0;for(;m<=i.length;m++)if(m===i.length?r=13:r=i.charCodeAt(m),d)(r===13||r===10)&&(c=!0,d=!1);else if(r<=57&&r>=48)N=!0,S>0?h+=(r-48)/Math.pow(10,S++):(h*=10,h+=r-48);else if(r===44||r===46)N=!0,S++;else{if(N){if(c)c=!1,f&&(y=!0);else if(y)y=!1;else{b?(n=A?0-h:h,f=!0,b=!1):u||(T=A?0-h:h);let O=u?h-1:1;for(let F=0;F<O;F++)f?o+=n:o=T,s.x.push(t),s.y.push(o*p),t+=a}A=!1,h=0,S=0,N=!1,u=!1}if(r<74&&r>63)N=!0,f=!1,h=r-64;else if(r>96&&r<106)N=!0,f=!1,h=r-96,A=!0;else if(r===115)N=!0,u=!0,h=9;else if(r>82&&r<91)N=!0,u=!0,h=r-82;else if(r>73&&r<83)N=!0,b=!0,h=r-73;else if(r>105&&r<115)N=!0,b=!0,h=r-105,A=!0;else if(r===36&&i.charCodeAt(m+1)===36)N=!0,d=!0;else if(r===37)N=!0,b=!0,h=0,A=!1;else if(r===45){let O=i.charCodeAt(m+1);(O>=48&&O<=57||O===44||O===46)&&(N=!0,c||(f=!1),A=!0)}else(r===13||r===10)&&(c=!0,d=!1)}}var ee=/\$\$.*/,te=/[,\t ]+/;function P(e,i,p){if(e.isPeaktable=!0,!e.variables||Object.keys(e.variables)===2?oe(e,i,p):pe(e,i,p),e.variables)for(let a in e.variables)e.variables[a].data=e.data[a]}function oe(e,i,p){let a={x:[],y:[]};e.data=a;let s=i.split(/,? *,?[;\r\n]+ */);for(let t=1;t<s.length;t++){let o=s[t].trim().replace(ee,"").split(te);if(o.length%2===0)for(let l=0;l<o.length;l=l+2)a.x.push(Number(o[l])*e.xFactor),a.y.push(Number(o[l+1])*e.yFactor);else p.logs.push(`Format error: ${o}`)}}function pe(e,i,p){let a={},s=Object.keys(e.variables),t=s.length;s.forEach(l=>a[l]=[]),e.data=a;let o=i.split(/,? *,?[;\r\n]+ */);for(let l=1;l<o.length;l++){let r=o[l].trim().replace(ee,"").split(te);if(r.length%t===0)for(let m=0;m<r.length;m++)a[s[m%t]].push(Number(r[m]));else p.logs.push(`Format error: ${r}`)}}function V(e,i){e.isXYAdata=!0;let p={};e.data=p;let a=i.split(/\r?\n/),s=a[0].replace(/^.*?([A-Z]+).*$/,"$1").split("").map(t=>t.toLowerCase());for(let t=1;t<a.length;t++){let o=a[t].replace(/^\((.*)\)$/,"$1").split(/ *, */);for(let l=0;l<s.length;l++){let r=o[l];switch(s[l]){case"x":case"y":case"w":r=Number.parseFloat(r);break;case"a":r=r.replace(/^<(.*)>$/,"$1");break;case"m":break;default:continue}p[s[l]]||(p[s[l]]=[]),p[s[l]].push(r)}}}import{parseString as se}from"dynamic-typing";import le from"ml-array-median";function I(e){let i=e[0].data.y[0],p=i,a=e.length,s=e[0].data.x.length,t=new Array(a);for(let f=0;f<a;f++){t[f]=e[f].data.y;for(let n=0;n<s;n++){let u=t[f][n];u<i&&(i=u),u>p&&(p=u)}}let o=e[0].data.x[0],l=e[0].data.x[e[0].data.x.length-1],r=e[0].pageValue,m=e[a-1].pageValue;if(o>l)for(let f of t)f.reverse();r>m&&t.reverse();let c=[];for(let f=0;f<t.length;f++){let n=Float64Array.from(t[f]);for(let u=0;u<n.length;u++)n[u]<0&&(n[u]=-n[u]);c.push(le(n))}let b=le(c);return{z:t,minX:Math.min(o,l),maxX:Math.max(o,l),minY:Math.min(r,m),maxY:Math.max(r,m),minZ:i,maxZ:p,noise:b}}function E(e,i){let p=e.noise,a=e.z,s,t,o,l,r,m,c,b,f=a.length,n=a[0].length,u,d,h,T,A=e.minX,y=(e.maxX-A)/(n-1),S=e.minY,F=(e.maxY-S)/(f-1),ae=e.minZ,H=e.maxZ,G=i.nbContourLevels*2,K=new Array(G),x;for(let M=0;M<G;M++){let D={};K[M]=D;let re=M%2,_=(H-i.noiseMultiplier*p)*Math.exp((M>>1)-i.nbContourLevels);re===0?x=_+i.noiseMultiplier*p:x=0-_-i.noiseMultiplier*p;let g=[];if(D.zValue=x,D.lines=g,!(x<=ae||x>=H))for(let v=0;v<f-1;v++){let z=a[v],W=a[v+1];for(let X=0;X<n-1;X++)s=z[X],t=z[X+1],o=W[X],l=W[X+1],r=s>x,m=t>x,c=o>x,b=l>x,r!==m&&r!==c&&(u=X+(x-s)/(t-s),d=v,h=X,T=v+(x-s)/(o-s),g.push(u*y+A),g.push(d*F+S),g.push(h*y+A),g.push(T*F+S)),b!==m&&b!==c&&(u=X+1,d=v+1-(x-l)/(t-l),h=X+1-(x-l)/(o-l),T=v+1,g.push(u*y+A),g.push(d*F+S),g.push(h*y+A),g.push(T*F+S)),m!==c&&(u=(X+1-(x-t)/(o-t))*y+A,d=(v+(x-t)/(o-t))*F+S,m!==r&&(h=X+1-(x-t)/(s-t),T=v,g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)),c!==r&&(h=X,T=v+1-(x-o)/(s-o),g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)),m!==b&&(h=X+1,T=v+(x-t)/(l-t),g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)),c!==b&&(h=X+(x-o)/(l-o),T=v+1,g.push(u),g.push(d),g.push(h*y+A),g.push(T*F+S)))}}return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY,segments:K}}function k(e,i){let p=I(e.spectra);i.noContour||(e.contourLines=E(p,i),delete p.z),e.minMax=p}import{gyromagneticRatio as ie}from"gyromagnetic-ratio";function Z(e){for(let i of e){let p=0,a=0;for(let s of i.spectra){if(i.ntuples&&i.ntuples.symbol?(!p&&s.observeFrequency&&(p=s.observeFrequency),!a&&s.shiftOffsetVal&&(a=s.shiftOffsetVal)):(p=s.observeFrequency,a=s.shiftOffsetVal),p&&s.xUnits&&s.xUnits.toUpperCase().includes("HZ")){s.xUnits="PPM",s.xFactor=s.xFactor/p,s.firstX=s.firstX/p,s.lastX=s.lastX/p,s.deltaX=s.deltaX/p;for(let t=0;t<s.data.x.length;t++)s.data.x[t]/=p}if(a&&s.xUnits.toLowerCase().includes("ppm")){let t=s.firstX-a;s.firstX=s.firstX-t,s.lastX=s.lastX-t;for(let o=0;o<s.data.x.length;o++)s.data.x[o]-=t}if(i.ntuples&&i.ntuples.nucleus&&i.ntuples.symbol)for(let t=0;t<i.ntuples.nucleus.length;t++){let o=i.ntuples.symbol[t],l=i.ntuples.nucleus[t];if(o.match(/^[F|T]/)&&!l){if(o.match(/[F|T]1/))if(i.tmp.$NUC2)i.ntuples.nucleus[t]=i.tmp.$NUC2;else{let r=i.ntuples.symbol.indexOf(o.replace(/^([F|T]).*/,"$12"));r&&i.ntuples.nucleus[r]&&(i.ntuples.nucleus[t]=i.ntuples.nucleus[r])}o.match(/[F|T]2/)&&(i.ntuples.nucleus[t]=i.tmp.$NUC1)}o.match(/[F|T]2/)&&(i.yType=i.ntuples.nucleus[0])}if(p&&i.ntuples&&i.ntuples.symbol&&i.ntuples.nucleus){let t="",o=i.ntuples.symbol.indexOf(s.pageSymbol);if(i.ntuples.units&&i.ntuples.units[o]&&(t=i.ntuples.units[o]),t!=="PPM"){if(o!==0)throw Error("Not sure about this ntuples format");let l=ie[i.ntuples.nucleus[0]],r=ie[i.ntuples.nucleus[1]];if(!l||!r)throw Error("Problem with determination of gyromagnetic ratio");let m=l/r*p;s.pageValue/=m}}}}}function L(e,i,p={}){p.logger?.trace(i),e.profiling&&e.profiling.push({action:i,time:Date.now()-p.start})}function j(e){let i=e.spectra[0].data;e.chromatogram={times:i.x.slice(),series:{intensity:{dimension:1,data:i.y.slice()}}}}function B(e,i,p){Z(e),ue(e,p);for(let a of e){if(Object.keys(a.ntuples).length>0){let s=[],t=Object.keys(a.ntuples);for(let o=0;o<t.length;o++){let l=t[o],r=a.ntuples[l];for(let m=0;m<r.length;m++)s[m]||(s[m]={}),s[m][l]=r[m]}a.ntuples=s}a.twoD&&p.wantXY&&(k(a,p),L(i,"Finished countour plot calculation",p),p.keepSpectra||delete a.spectra),p.chromatogram&&(a.spectra.length>1?J(a):j(a),L(i,"Finished chromatogram calculation",p)),delete a.tmp}}function ue(e,i){for(let p of e)for(let a in p.meta){let s=p.meta[a];if(typeof s=="string"){if(s[0]==="{"){if(s[s.length-1]==="}"){let t=s.slice(1,-1).split(/[,; ]+/).filter(o=>o);for(let o=0;o<t.length;o++)p.meta[a+String(o)]=i.dynamicTyping?se(t[o]):t[o]}}else if(s[0]==="("){let t=s.split(/\r?\n/),o=/^\((?<from>\d+)\.\.(?<to>\d+)\)$/;if(o.test(t[0])){let[l,r]=t[0].match(o).slice(1).map(Number),m=t.slice(1).join(" ").split(/[,; ]+/).filter(c=>c);for(let c=l;c<=r;c++)p.meta[a+String(c)]=i.dynamicTyping?se(m[c-l]):m[c-l]}}}}}function q(e,i,p){let a=-1,s=-1,t="",o="";if(p.indexOf("++")>0)t=p.replace(/.*\(([a-zA-Z0-9]+)\+\+.*/,"$1"),o=p.replace(/.*\.\.([a-zA-Z0-9]+).*/,"$1");else{p=p.replace(/[^a-zA-Z]/g,""),t=p.charAt(0),o=p.charAt(1),i.variables={};for(let l of p){let r=l.toLowerCase(),m=e.ntuples.symbol.indexOf(l);if(m===-1)throw Error(`Symbol undefined: ${l}`);i.variables[r]={};for(let c in e.ntuples)e.ntuples[c][m]&&(i.variables[r][c.replace(/^var/,"")]=e.ntuples[c][m])}}a=e.ntuples.symbol.indexOf(t),s=e.ntuples.symbol.indexOf(o),a===-1&&(a=0),s===-1&&(s=0),e.ntuples.first&&(e.ntuples.first.length>a&&(i.firstX=e.ntuples.first[a]),e.ntuples.first.length>s&&(i.firstY=e.ntuples.first[s])),e.ntuples.last&&(e.ntuples.last.length>a&&(i.lastX=e.ntuples.last[a]),e.ntuples.last.length>s&&(i.lastY=e.ntuples.last[s])),e.ntuples.vardim&&e.ntuples.vardim.length>a&&(i.nbPoints=e.ntuples.vardim[a]),e.ntuples.factor&&(e.ntuples.factor.length>a&&(i.xFactor=e.ntuples.factor[a]),e.ntuples.factor.length>s&&(i.yFactor=e.ntuples.factor[s])),e.ntuples.units&&(e.ntuples.units.length>a&&(e.ntuples.varname&&e.ntuples.varname[a]?i.xUnits=`${e.ntuples.varname[a]} [${e.ntuples.units[a]}]`:i.xUnits=e.ntuples.units[a]),e.ntuples.units.length>s&&(e.ntuples.varname&&e.ntuples.varname[s]?i.yUnits=`${e.ntuples.varname[s]} [${e.ntuples.units[s]}]`:i.yUnits=e.ntuples.units[s]))}function w(e){e.xFactor||(e.xFactor=1),e.yFactor||(e.yFactor=1)}var C=/[ \t]*,[ \t]*/,he={keepRecordsRegExp:/^$/,canonicDataLabels:!0,canonicMetadataLabels:!1,dynamicTyping:!0,withoutXY:!1,chromatogram:!1,keepSpectra:!1,noContour:!1,nbContourLevels:7,noiseMultiplier:5,profiling:!1};function de(e,i={}){e=ce(e),i={...he,...i},i.logger?.debug("Starting jcamp conversion"),i.wantXY=!i.withoutXY,i.start=Date.now();let p=[],a={profiling:i.profiling?[]:!1,logs:[],entries:[]},s={children:[]},t=s,o=[],l={};if(typeof e!="string")throw new TypeError("the JCAMP should be a string");L(a,"Before split to LDRS",i);let r=e.replace(/[\r\n]+##/g,`
6
+ ##`).split(`
7
+ ##`);L(a,"Split to LDRS",i),r[0]&&(r[0]=r[0].replace(/^[\r\n ]*##/,""));for(let m of r){let c=m.indexOf("="),b=c>0?m.substring(0,c):m,f=c>0?m.substring(c+1).trim():"",n=b.replace(/[_ -]/g,"").toUpperCase();if(n==="DATATABLE"){let u=f.indexOf(`
8
+ `);if(u===-1&&(u=f.indexOf("\r")),u>0){let d=f.substring(0,u).split(/[ ,;\t]+/);q(t,l,d[0]),l.datatable=d[0],d[1]&&d[1].indexOf("PEAKS")>-1?n="PEAKTABLE":d[1]&&(d[1].indexOf("XYDATA")||d[0].indexOf("++")>0)&&(n="XYDATA",l.nbPoints&&(l.deltaX=(l.lastX-l.firstX)/(l.nbPoints-1)))}}if(n==="XYDATA"){i.wantXY&&(w(l),f.match(/.*\+\+.*/)?(l.nbPoints&&(l.deltaX=(l.lastX-l.firstX)/(l.nbPoints-1)),U(l,f,a)):P(l,f,a),t.spectra.push(l),l={});continue}else if(n==="PEAKTABLE"){i.wantXY&&(w(l),P(l,f,a),t.spectra.push(l),l={});continue}if(n==="PEAKASSIGNMENTS"){i.wantXY&&(f.match(/.*([^A-Z]*).*/)&&V(l,f),t.spectra.push(l),l={});continue}if(n==="TITLE"){let u=t;u.children||(u.children=[]),t={spectra:[],ntuples:{},info:{},meta:{},tmp:{}},u.children.push(t),o.push(u),p.push(t),t.title=f}else n==="DATATYPE"?(t.dataType=f,f.match(/(^nd|\snd\s)/i)&&(t.twoD=!0)):n==="NTUPLES"?f.match(/(^nd|\snd\s)/i)&&(t.twoD=!0):n==="DATACLASS"?t.dataClass=f:n==="XUNITS"?l.xUnits=f:n==="YUNITS"?l.yUnits=f:n==="FIRSTX"?l.firstX=Number(f):n==="LASTX"?l.lastX=Number(f):n==="FIRSTY"?l.firstY=Number(f):n==="LASTY"?l.lastY=Number(f):n==="NPOINTS"?l.nbPoints=Number(f):n==="XFACTOR"?l.xFactor=Number(f):n==="YFACTOR"?l.yFactor=Number(f):n==="MAXX"?l.maxX=Number(f):n==="MINX"?l.minX=Number(f):n==="MAXY"?l.maxY=Number(f):n==="MINY"?l.minY=Number(f):n==="DELTAX"?l.deltaX=Number(f):n===".OBSERVEFREQUENCY"||n==="$SFO1"?l.observeFrequency||(l.observeFrequency=Number(f)):n===".OBSERVENUCLEUS"?l.xType||(t.xType=f.replace(/[^a-zA-Z0-9]/g,"")):n==="$OFFSET"?(t.shiftOffsetNum=0,l.shiftOffsetVal||(l.shiftOffsetVal=Number(f))):n==="$REFERENCEPOINT"||(n==="VARNAME"?t.ntuples.varname=f.split(C):n==="SYMBOL"?t.ntuples.symbol=f.split(C):n==="VARTYPE"?t.ntuples.vartype=f.split(C):n==="VARFORM"?t.ntuples.varform=f.split(C):n==="VARDIM"?t.ntuples.vardim=Y(f.split(C)):n==="UNITS"?t.ntuples.units=f.split(C):n==="FACTOR"?t.ntuples.factor=Y(f.split(C)):n==="FIRST"?t.ntuples.first=Y(f.split(C)):n==="LAST"?t.ntuples.last=Y(f.split(C)):n==="MIN"?t.ntuples.min=Y(f.split(C)):n==="MAX"?t.ntuples.max=Y(f.split(C)):n===".NUCLEUS"?t.ntuples&&(t.ntuples.nucleus=f.split(C).map(u=>u.replace(/[^a-zA-Z0-9]/g,""))):n==="PAGE"?(l.page=f.trim(),l.pageValue=Number(f.replace(/^.*=/,"")),l.pageSymbol=l.page.replace(/[=].*/,"")):n==="RETENTIONTIME"?l.pageValue=Number(f):Q(n)?l[$(n)]=f:n==="SAMPLEDESCRIPTION"?l.sampleDescription=f:n.startsWith("$NUC")?!t.tmp[n]&&!f.includes("off")&&(t.tmp[n]=f.replace(/[<>]/g,"")):n==="END"&&(t=o.pop()));if(t&&t.info&&t.meta&&n.match(i.keepRecordsRegExp)){let u=f.trim(),d,h;b.startsWith("$")?(h=i.canonicMetadataLabels?n.substring(1):b.substring(1),d=t.meta):(h=i.canonicDataLabels?n:b,d=t.info),i.dynamicTyping&&(u=me(u)),d[h]?(Array.isArray(d[h])||(d[h]=[d[h]]),d[h].push(u)):d[h]=u}}return L(a,"Finished parsing",i),B(p,a,i),L(a,"Total time",i),a.entries=s.children,a.flatten=p,a}export{de as convert,ne as createTree};
package/package.json CHANGED
@@ -1,38 +1,45 @@
1
1
  {
2
2
  "name": "jcampconverter",
3
- "version": "9.2.0",
3
+ "version": "9.2.2",
4
4
  "description": "Parse and convert JCAMP data",
5
- "main": "lib/index.js",
6
- "module": "lib-esm/index.js",
7
- "types": "lib/index.d.ts",
5
+ "types": "jcampconverter.d.ts",
6
+ "main": "jcampconverter.cjs",
7
+ "module": "jcampconverter.mjs",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./jcampconverter.d.ts",
11
+ "require": "./jcampconverter.cjs",
12
+ "default": "./jcampconverter.mjs"
13
+ }
14
+ },
8
15
  "files": [
9
- "lib",
10
- "src",
11
- "lib-esm"
16
+ "jcampconverter.d.ts",
17
+ "jcampconverter.cjs",
18
+ "jcampconverter.mjs"
12
19
  ],
13
20
  "scripts": {
14
- "build": "cheminfo-build --entry src/index.js --root JcampConverter",
21
+ "api-extractor": "api-extractor run --local",
22
+ "build": "cheminfo-build --entry src/index.js --root JcampConverter --no-source-map && rm dist/jcampconverter.js",
23
+ "bundle": "npm run bundle-cjs && npm run bundle-esm",
24
+ "bundle-common": "esbuild src/index.js --bundle --packages=external --minify",
25
+ "bundle-cjs": "npm run bundle-common -- --format=cjs --outfile=jcampconverter.cjs",
26
+ "bundle-esm": "npm run bundle-common -- --format=esm --outfile=jcampconverter.mjs",
27
+ "bundle-types": "npm run tsc && npm run api-extractor",
15
28
  "check-types": "tsc --noEmit",
16
- "clean": "rimraf lib lib-esm",
29
+ "clean": "rimraf dist types",
17
30
  "eslint": "eslint src __tests__",
18
31
  "eslint-fix": "npm run eslint -- --fix",
19
32
  "jscpd": "jscpd -l 10 -i \"**/__tests__/**\" -t 1 src",
20
- "prepack": "npm run tsc",
33
+ "prepack": "npm run bundle && npm run bundle-types",
21
34
  "prettier": "prettier --check src",
22
35
  "prettier-write": "prettier --write src",
23
36
  "test": "npm run test-only && npm run eslint && npm run prettier && npm run check-types",
24
37
  "test-only": "vitest run --globals --coverage",
25
- "tsc": "npm run clean && npm run tsc-cjs && npm run tsc-esm",
26
- "tsc-cjs": "tsc --project tsconfig.cjs.json",
27
- "tsc-esm": "tsc --project tsconfig.esm.json",
38
+ "tsc": "tsc --project tsconfig.types.json",
28
39
  "benchmark": "node benchmark/benchmark.js",
29
40
  "deopt": "node --trace-opt --trace-deopt --code-comments debug/deoptimize.js > deopt.log",
30
41
  "hydra": "node --trace-hydrogen --trace-phase=Z --trace-deopt --code-comments --hydrogen-track-positions --redirect-code-traces --redirect-code-traces-to=code.asm debug/deoptimize.js"
31
42
  },
32
- "repository": {
33
- "type": "git",
34
- "url": "https://github.com/cheminfo/jcampconverter.git"
35
- },
36
43
  "keywords": [
37
44
  "jcamp",
38
45
  "converter"
@@ -40,16 +47,17 @@
40
47
  "author": "Luc Patiny",
41
48
  "license": "MIT",
42
49
  "bugs": {
43
- "url": "https://github.com/cheminfo/jcampconverter/issues"
50
+ "url": "https://github.com/cheminfo/nmrium/issues/new?title=%5Bjcampconverter%5D"
44
51
  },
45
- "homepage": "https://github.com/cheminfo/jcampconverter#readme",
46
52
  "devDependencies": {
53
+ "@microsoft/api-extractor": "^7.37.2",
47
54
  "@types/jest": "^29.5.5",
48
55
  "@types/pino": "^7.0.5",
49
56
  "@vitest/coverage-v8": "^0.34.5",
50
57
  "benchmark": "^2.1.4",
51
58
  "c8": "^8.0.1",
52
59
  "cheminfo-build": "^1.2.0",
60
+ "esbuild": "^0.19.3",
53
61
  "eslint": "^8.49.0",
54
62
  "eslint-config-cheminfo-typescript": "^12.0.4",
55
63
  "esm": "^3.2.25",
package/lib/2d/add2D.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export default function add2D(result: any, options: any): void;
2
- //# sourceMappingURL=add2D.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add2D.d.ts","sourceRoot":"","sources":["../../src/2d/add2D.js"],"names":[],"mappings":"AAGA,+DAOC"}
package/lib/2d/add2D.js DELETED
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const convertTo3DZ_1 = __importDefault(require("./convertTo3DZ"));
7
- const generateContourLines_1 = __importDefault(require("./generateContourLines"));
8
- function add2D(result, options) {
9
- let zData = (0, convertTo3DZ_1.default)(result.spectra);
10
- if (!options.noContour) {
11
- result.contourLines = (0, generateContourLines_1.default)(zData, options);
12
- delete zData.z;
13
- }
14
- result.minMax = zData;
15
- }
16
- exports.default = add2D;
17
- //# sourceMappingURL=add2D.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add2D.js","sourceRoot":"","sources":["../../src/2d/add2D.js"],"names":[],"mappings":";;;;;AAAA,kEAA0C;AAC1C,kFAA0D;AAE1D,SAAwB,KAAK,CAAC,MAAM,EAAE,OAAO;IAC3C,IAAI,KAAK,GAAG,IAAA,sBAAY,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACtB,MAAM,CAAC,YAAY,GAAG,IAAA,8BAAoB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,CAAC,CAAC;KAChB;IACD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;AACxB,CAAC;AAPD,wBAOC"}
@@ -1,11 +0,0 @@
1
- export default function convertTo3DZ(spectra: any): {
2
- z: any[];
3
- minX: number;
4
- maxX: number;
5
- minY: number;
6
- maxY: number;
7
- minZ: any;
8
- maxZ: any;
9
- noise: number;
10
- };
11
- //# sourceMappingURL=convertTo3DZ.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertTo3DZ.d.ts","sourceRoot":"","sources":["../../src/2d/convertTo3DZ.js"],"names":[],"mappings":"AAEA;;;;;;;;;EAoDC"}