jcampconverter 9.1.1 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,12 +4,10 @@
4
4
  [![npm download][download-image]][download-url]
5
5
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5091526.svg)](https://doi.org/10.5281/zenodo.5091526)
6
6
 
7
-
8
7
  # JCAMP-DX converter
9
8
 
10
9
  Parse and convert JCAMP-DX data
11
10
 
12
-
13
11
  ## Installation
14
12
 
15
13
  ### Node JS
@@ -29,7 +27,7 @@ Returns an object with information about the converted file and uncompressed spe
29
27
 
30
28
  **Arguments**
31
29
 
32
- - `jcamp` - String or ArrayBuffer containing the JCAMP data
30
+ - `jcamp` - String or ArrayBuffer containing the JCAMP-DX data
33
31
  - `options` - Object with options to pass to the converter
34
32
 
35
33
  **Options**
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessing.d.ts","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"AAMA,0FAyCC"}
1
+ {"version":3,"file":"postProcessing.d.ts","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"AAQA,0FA2CC"}
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const dynamic_typing_1 = require("dynamic-typing");
6
7
  const add2D_1 = __importDefault(require("./2d/add2D"));
7
8
  const complexChromatogram_1 = require("./complexChromatogram");
8
9
  const postProcessingNMR_1 = __importDefault(require("./postProcessingNMR"));
@@ -11,6 +12,7 @@ const simpleChromatogram_1 = __importDefault(require("./simpleChromatogram"));
11
12
  function postProcessing(entriesFlat, result, options) {
12
13
  // converting Hz to ppm
13
14
  (0, postProcessingNMR_1.default)(entriesFlat);
15
+ createArray(entriesFlat, options);
14
16
  for (let entry of entriesFlat) {
15
17
  if (Object.keys(entry.ntuples).length > 0) {
16
18
  let newNtuples = [];
@@ -47,4 +49,45 @@ function postProcessing(entriesFlat, result, options) {
47
49
  }
48
50
  }
49
51
  exports.default = postProcessing;
52
+ function createArray(entriesFlat, options) {
53
+ for (const entry of entriesFlat) {
54
+ for (const key in entry.meta) {
55
+ const value = entry.meta[key];
56
+ if (typeof value === 'string') {
57
+ if (value[0] === '{') {
58
+ // could be an array
59
+ if (value[value.length - 1] === '}') {
60
+ const array = value
61
+ .slice(1, -1)
62
+ .split(/[,; ]+/)
63
+ .filter((e) => e);
64
+ for (let i = 0; i < array.length; i++) {
65
+ entry.meta[key + String(i)] = options.dynamicTyping
66
+ ? (0, dynamic_typing_1.parseString)(array[i])
67
+ : array[i];
68
+ }
69
+ }
70
+ }
71
+ else if (value[0] === '(') {
72
+ const lines = value.split(/\r?\n/);
73
+ const regexp = /^\((?<from>\d+)\.\.(?<to>\d+)\)$/;
74
+ if (regexp.test(lines[0])) {
75
+ // parsing '(0..63)'
76
+ const [from, to] = lines[0].match(regexp).slice(1).map(Number);
77
+ const array = lines
78
+ .slice(1)
79
+ .join(' ')
80
+ .split(/[,; ]+/)
81
+ .filter((e) => e);
82
+ for (let i = from; i <= to; i++) {
83
+ entry.meta[key + String(i)] = options.dynamicTyping
84
+ ? (0, dynamic_typing_1.parseString)(array[i - from])
85
+ : array[i - from];
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
50
93
  //# sourceMappingURL=postProcessing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":";;;;;AAAA,uDAA+B;AAC/B,+DAA4D;AAC5D,4EAAoD;AACpD,4DAAoC;AACpC,8EAAsD;AAEtD,SAAwB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO;IACjE,uBAAuB;IACvB,IAAA,2BAAiB,EAAC,WAAW,CAAC,CAAC;IAE/B,KAAK,IAAI,KAAK,IAAI,WAAW,EAAE;QAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;wBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBACvC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;iBAChC;aACF;YACD,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;SAC5B;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE;YAChC,IAAA,eAAK,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEtB,IAAA,mBAAS,EAAC,MAAM,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,OAAO,KAAK,CAAC,OAAO,CAAC;aACtB;SACF;QAED,iEAAiE;QACjE,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,IAAA,yCAAmB,EAAC,KAAK,CAAC,CAAC;aAC5B;iBAAM;gBACL,IAAA,4BAAkB,EAAC,KAAK,CAAC,CAAC;aAC3B;YACD,IAAA,mBAAS,EAAC,MAAM,EAAE,mCAAmC,EAAE,OAAO,CAAC,CAAC;SACjE;QAED,OAAO,KAAK,CAAC,GAAG,CAAC;KAClB;AACH,CAAC;AAzCD,iCAyCC"}
1
+ {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessing.d.ts","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"AAMA,0FAyCC"}
1
+ {"version":3,"file":"postProcessing.d.ts","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"AAQA,0FA2CC"}
@@ -1,3 +1,4 @@
1
+ import { parseString } from 'dynamic-typing';
1
2
  import add2D from './2d/add2D';
2
3
  import { complexChromatogram } from './complexChromatogram';
3
4
  import postProcessingNMR from './postProcessingNMR';
@@ -6,6 +7,7 @@ import simpleChromatogram from './simpleChromatogram';
6
7
  export default function postProcessing(entriesFlat, result, options) {
7
8
  // converting Hz to ppm
8
9
  postProcessingNMR(entriesFlat);
10
+ createArray(entriesFlat, options);
9
11
  for (let entry of entriesFlat) {
10
12
  if (Object.keys(entry.ntuples).length > 0) {
11
13
  let newNtuples = [];
@@ -41,4 +43,45 @@ export default function postProcessing(entriesFlat, result, options) {
41
43
  delete entry.tmp;
42
44
  }
43
45
  }
46
+ function createArray(entriesFlat, options) {
47
+ for (const entry of entriesFlat) {
48
+ for (const key in entry.meta) {
49
+ const value = entry.meta[key];
50
+ if (typeof value === 'string') {
51
+ if (value[0] === '{') {
52
+ // could be an array
53
+ if (value[value.length - 1] === '}') {
54
+ const array = value
55
+ .slice(1, -1)
56
+ .split(/[,; ]+/)
57
+ .filter((e) => e);
58
+ for (let i = 0; i < array.length; i++) {
59
+ entry.meta[key + String(i)] = options.dynamicTyping
60
+ ? parseString(array[i])
61
+ : array[i];
62
+ }
63
+ }
64
+ }
65
+ else if (value[0] === '(') {
66
+ const lines = value.split(/\r?\n/);
67
+ const regexp = /^\((?<from>\d+)\.\.(?<to>\d+)\)$/;
68
+ if (regexp.test(lines[0])) {
69
+ // parsing '(0..63)'
70
+ const [from, to] = lines[0].match(regexp).slice(1).map(Number);
71
+ const array = lines
72
+ .slice(1)
73
+ .join(' ')
74
+ .split(/[,; ]+/)
75
+ .filter((e) => e);
76
+ for (let i = from; i <= to; i++) {
77
+ entry.meta[key + String(i)] = options.dynamicTyping
78
+ ? parseString(array[i - from])
79
+ : array[i - from];
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
44
87
  //# sourceMappingURL=postProcessing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO;IACjE,uBAAuB;IACvB,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/B,KAAK,IAAI,KAAK,IAAI,WAAW,EAAE;QAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;wBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBACvC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;iBAChC;aACF;YACD,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;SAC5B;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE;YAChC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEtB,SAAS,CAAC,MAAM,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,OAAO,KAAK,CAAC,OAAO,CAAC;aACtB;SACF;QAED,iEAAiE;QACjE,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC5B;iBAAM;gBACL,kBAAkB,CAAC,KAAK,CAAC,CAAC;aAC3B;YACD,SAAS,CAAC,MAAM,EAAE,mCAAmC,EAAE,OAAO,CAAC,CAAC;SACjE;QAED,OAAO,KAAK,CAAC,GAAG,CAAC;KAClB;AACH,CAAC"}
1
+ {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jcampconverter",
3
- "version": "9.1.1",
3
+ "version": "9.2.0",
4
4
  "description": "Parse and convert JCAMP data",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -44,29 +44,29 @@
44
44
  },
45
45
  "homepage": "https://github.com/cheminfo/jcampconverter#readme",
46
46
  "devDependencies": {
47
- "@types/jest": "^29.5.1",
47
+ "@types/jest": "^29.5.5",
48
48
  "@types/pino": "^7.0.5",
49
- "@vitest/coverage-c8": "^0.30.1",
49
+ "@vitest/coverage-v8": "^0.34.5",
50
50
  "benchmark": "^2.1.4",
51
- "c8": "^7.13.0",
51
+ "c8": "^8.0.1",
52
52
  "cheminfo-build": "^1.2.0",
53
- "eslint": "^8.39.0",
54
- "eslint-config-cheminfo-typescript": "^11.3.1",
53
+ "eslint": "^8.49.0",
54
+ "eslint-config-cheminfo-typescript": "^12.0.4",
55
55
  "esm": "^3.2.25",
56
56
  "fifo-logger": "^0.6.1",
57
57
  "jest-matcher-deep-close-to": "^3.0.2",
58
- "jscpd": "^3.5.4",
59
- "prettier": "^2.8.8",
60
- "rimraf": "^5.0.0",
61
- "typescript": "^5.0.4",
62
- "vitest": "^0.30.1"
58
+ "jscpd": "^3.5.10",
59
+ "ml-spectra-processing": "^12.5.1",
60
+ "prettier": "^3.0.3",
61
+ "rimraf": "^5.0.1",
62
+ "typescript": "^5.2.2",
63
+ "vitest": "^0.34.5"
63
64
  },
64
65
  "dependencies": {
65
- "cheminfo-types": "^1.7.0",
66
+ "cheminfo-types": "^1.7.2",
66
67
  "dynamic-typing": "^1.0.0",
67
68
  "ensure-string": "^1.2.0",
68
69
  "gyromagnetic-ratio": "^1.0.0",
69
- "ml-array-median": "^1.1.6",
70
- "ml-spectra-processing": "^12.2.0"
70
+ "ml-array-median": "^1.1.6"
71
71
  }
72
72
  }
@@ -1,3 +1,5 @@
1
+ import { parseString } from 'dynamic-typing';
2
+
1
3
  import add2D from './2d/add2D';
2
4
  import { complexChromatogram } from './complexChromatogram';
3
5
  import postProcessingNMR from './postProcessingNMR';
@@ -8,6 +10,8 @@ export default function postProcessing(entriesFlat, result, options) {
8
10
  // converting Hz to ppm
9
11
  postProcessingNMR(entriesFlat);
10
12
 
13
+ createArray(entriesFlat, options);
14
+
11
15
  for (let entry of entriesFlat) {
12
16
  if (Object.keys(entry.ntuples).length > 0) {
13
17
  let newNtuples = [];
@@ -46,3 +50,44 @@ export default function postProcessing(entriesFlat, result, options) {
46
50
  delete entry.tmp;
47
51
  }
48
52
  }
53
+
54
+ function createArray(entriesFlat, options) {
55
+ for (const entry of entriesFlat) {
56
+ for (const key in entry.meta) {
57
+ const value = entry.meta[key];
58
+ if (typeof value === 'string') {
59
+ if (value[0] === '{') {
60
+ // could be an array
61
+ if (value[value.length - 1] === '}') {
62
+ const array = value
63
+ .slice(1, -1)
64
+ .split(/[,; ]+/)
65
+ .filter((e) => e);
66
+ for (let i = 0; i < array.length; i++) {
67
+ entry.meta[key + String(i)] = options.dynamicTyping
68
+ ? parseString(array[i])
69
+ : array[i];
70
+ }
71
+ }
72
+ } else if (value[0] === '(') {
73
+ const lines = value.split(/\r?\n/);
74
+ const regexp = /^\((?<from>\d+)\.\.(?<to>\d+)\)$/;
75
+ if (regexp.test(lines[0])) {
76
+ // parsing '(0..63)'
77
+ const [from, to] = lines[0].match(regexp).slice(1).map(Number);
78
+ const array = lines
79
+ .slice(1)
80
+ .join(' ')
81
+ .split(/[,; ]+/)
82
+ .filter((e) => e);
83
+ for (let i = from; i <= to; i++) {
84
+ entry.meta[key + String(i)] = options.dynamicTyping
85
+ ? parseString(array[i - from])
86
+ : array[i - from];
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }