@datagrok/helm 2.0.7 → 2.1.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/src/utils.ts CHANGED
@@ -1,35 +1,160 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import { RGROUP_CAP_GROUP_NAME, RGROUP_CAP_GROUP_SMILES, jsonSdfMonomerLibDict, MONOMER_SYMBOL, RGROUP_ALTER_ID, RGROUPS, RGROUP_LABEL, SDF_MONOMER_NAME } from "./constants";
3
3
 
4
- export function createJsonMonomerLibFromSdf(table: DG.DataFrame): any {
5
- const resultLib = [];
6
- for (let i = 0; i < table.rowCount; i++) {
7
- const monomer: { [key: string]: string | any } = {};
8
- Object.keys(jsonSdfMonomerLibDict).forEach(key => {
9
- if (key === MONOMER_SYMBOL) {
10
- const monomerSymbol = table.get(jsonSdfMonomerLibDict[key], i);
11
- monomer[key] = monomerSymbol === '.' ? table.get(SDF_MONOMER_NAME, i) : monomerSymbol;
12
- } else if (key === RGROUPS) {
13
- const rgroups = table.get(jsonSdfMonomerLibDict[key], i).split('\n');
14
- const jsonRgroups: any[] = [];
15
- rgroups.forEach((g: string) => {
16
- const rgroup: { [key: string]: string | any } = {};
17
- const altAtom = g.substring(g.lastIndexOf("]") + 1);
18
- let radicalNum = g.match(/\[R(\d+)\]/)![1];
19
- rgroup[RGROUP_CAP_GROUP_SMILES] = altAtom === 'H' ? `[*:${radicalNum}][H]` : `O[*:${radicalNum}]`;
20
- rgroup[RGROUP_ALTER_ID] = altAtom === 'H' ? `R${radicalNum}-H` : `R${radicalNum}-OH`;
21
- rgroup[RGROUP_CAP_GROUP_NAME] = altAtom === 'H' ? `H` : `OH`;
22
- rgroup[RGROUP_LABEL] = `R${radicalNum}`;
23
- jsonRgroups.push(rgroup);
24
- })
25
- monomer[key] = jsonRgroups;
26
- } else {
27
- if((jsonSdfMonomerLibDict as { [key: string]: string | any })[key]) {
28
- monomer[key] = table.get((jsonSdfMonomerLibDict as { [key: string]: string | any })[key], i);
4
+ export function getParts(subParts: string[], s: string): string[] {
5
+ let j = 0;
6
+ let allParts: string[] = [];
7
+ for (let k = 0; k < subParts.length; ++k) {
8
+ let indexOfMonomer = s.indexOf(subParts[k]);
9
+ let helmBeforeMonomer = s.slice(j, indexOfMonomer);
10
+ allParts.push(helmBeforeMonomer);
11
+ allParts.push(subParts[k]);
12
+ s = s.substring(indexOfMonomer + subParts[k].length);
13
+ }
14
+ allParts.push(s);
15
+ return allParts;
16
+ }
17
+
18
+ export function parseHelm(s: string) {
19
+ var sections = split(s, '$');
20
+ s = sections[0];
21
+ var monomers = [];
22
+ //@ts-ignore
23
+ if (!scil.Utils.isNullOrEmpty(s)) {
24
+ var seqs = split(s, '|');
25
+ for (var i = 0; i < seqs.length; ++i) {
26
+ var e = detachAnnotation(seqs[i]);
27
+ s = e.str;
28
+
29
+ var p = s.indexOf('{');
30
+
31
+ s = s.substring(p + 1);
32
+ p = s.indexOf('}');
33
+ s = s.substring(0, p);
34
+
35
+ var ss = split(s, '.');
36
+ for (var monomer of ss) {
37
+ if (monomer.includes('(') && monomer.includes(')')) {
38
+ var elements = monomer.replace(/[()]/g, '').split('');
39
+ for (var el of elements) {
40
+ monomers.push(el);
29
41
  }
42
+ } else if (monomer.includes('[') && monomer.includes(']')) {
43
+ var element = monomer.match(/(?<=\[).*?(?=\])/g, '');
44
+ monomers.push(element[0]);
45
+ } else {
46
+ monomers.push(monomer);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return monomers;
52
+ }
53
+
54
+ export function findMonomers(helmString: string) {
55
+ //@ts-ignore
56
+ const types = Object.keys(org.helm.webeditor.monomerTypeList());
57
+ const monomers: any = [];
58
+ const monomer_names: any = [];
59
+ for (var i = 0; i < types.length; i++) {
60
+ //@ts-ignore
61
+ monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));
62
+ Object.keys(monomers[i]).forEach(k => {
63
+ monomer_names.push(monomers[i][k].id);
64
+ });
65
+ }
66
+ const split_string = parseHelm(helmString);
67
+ return new Set(split_string.filter(val => !monomer_names.includes(val)));
68
+ }
69
+
70
+ function split(s: string, sep: string) {
71
+ var ret = [];
72
+ var frag = '';
73
+ var parentheses = 0;
74
+ var bracket = 0;
75
+ var braces = 0;
76
+ var quote = 0;
77
+ for (var i = 0; i < s.length; ++i) {
78
+ var c = s.substring(i, i + 1);
79
+ if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {
80
+ ret.push(frag);
81
+ frag = '';
82
+ } else {
83
+ frag += c;
84
+ if (quote > 0) {
85
+ if (c == '\\' && i + 1 < s.length) {
86
+ ++i;
87
+ var c2 = s.substring(i, i + 1);
88
+ frag += c2;
89
+ c += c2;
30
90
  }
31
- })
32
- resultLib.push(monomer);
91
+ }
92
+ if (c == '\"') {
93
+ if (!(i > 0 && s.substring(i - 1, i) == '\\'))
94
+ quote = quote == 0 ? 1 : 0;
95
+ } else if (c == '[')
96
+ ++bracket;
97
+ else if (c == ']')
98
+ --bracket;
99
+ else if (c == '(')
100
+ ++parentheses;
101
+ else if (c == ')')
102
+ --parentheses;
103
+ else if (c == '{')
104
+ ++braces;
105
+ else if (c == '}')
106
+ --braces;
107
+ }
108
+ }
109
+ ret.push(frag);
110
+ return ret;
111
+ }
112
+
113
+ function detachAnnotation(s: string) {
114
+ var ret = _detachAppendix(s, '\"');
115
+ if (ret.tag != null)
116
+ return ret;
117
+
118
+ var r = _detachAppendix(s, '\'');
119
+ return {tag: ret.tag, repeat: r.tag, str: r.str};
120
+ }
121
+
122
+ function _detachAppendix(s: string, c: string) {
123
+ var tag = null;
124
+ //@ts-ignore
125
+ if (scil.Utils.endswith(s, c)) {
126
+ var p = s.length - 1;
127
+ while (p > 0) {
128
+ p = s.lastIndexOf(c, p - 1);
129
+ if (p <= 0 || s.substring(p - 1, p) != '\\')
130
+ break;
131
+ }
132
+
133
+ if (p > 0 && p < s.length - 1) {
134
+ tag = s.substring(p + 1, s.length - 1);
135
+ s = s.substring(0, p);
136
+ }
137
+ }
138
+ if (tag != null)
139
+ tag = tag.replace(new RegExp('\\' + c, 'g'), c);
140
+ return {tag: unescape(tag), str: s};
141
+ }
142
+
143
+ function unescape(s: string) {
144
+ //@ts-ignore
145
+ if (scil.Utils.isNullOrEmpty(s))
146
+ return s;
147
+
148
+ return s.replace(/[\\]./g, function(m) {
149
+ switch (m) {
150
+ case '\\r':
151
+ return '\r';
152
+ case '\\n':
153
+ return '\n';
154
+ case '\\t':
155
+ return '\t';
156
+ default:
157
+ return m.substring(1);
33
158
  }
34
- return resultLib;
35
- }
159
+ });
160
+ }
@@ -1,4 +1,4 @@
1
- <html><head><meta charset="utf-8"/><title>Helm Test Report. Datagrok version datagrok/datagrok:latest SHA=5e15f45ca638. Commit 10548f95.</title><style type="text/css">html,
1
+ <html><head><meta charset="utf-8"/><title>Helm Test Report. Datagrok version datagrok/datagrok:latest SHA=3afbd4014fa1. Commit 27e36d83.</title><style type="text/css">html,
2
2
  body {
3
3
  font-family: Arial, Helvetica, sans-serif;
4
4
  font-size: 1rem;
@@ -229,7 +229,7 @@ header {
229
229
  font-size: 1rem;
230
230
  padding: 0 0.5rem;
231
231
  }
232
- </style></head><body><div id="jesthtml-content"><header><h1 id="title">Helm Test Report. Datagrok version datagrok/datagrok:latest SHA=5e15f45ca638. Commit 10548f95.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-10-28 14:40:08</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed">1 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (1)</div><div class="summary-passed">1 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><div class="suite-info"><div class="suite-path">/home/runner/work/public/public/packages/Helm/src/__jest__/remote.test.ts</div><div class="suite-time warn">14.009s</div></div><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">passed</div><div class="test-duration">4.849s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.&lt;anonymous&gt; (/home/runner/work/public/public/packages/Helm/src/__jest__/test-node.ts:61:11)
232
+ </style></head><body><div id="jesthtml-content"><header><h1 id="title">Helm Test Report. Datagrok version datagrok/datagrok:latest SHA=3afbd4014fa1. Commit 27e36d83.</h1></header><div id="metadata-container"><div id="timestamp">Started: 2022-11-08 18:37:46</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed">1 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (1)</div><div class="summary-passed">1 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><div class="suite-info"><div class="suite-path">/home/runner/work/public/public/packages/Helm/src/__jest__/remote.test.ts</div><div class="suite-time warn">15.293s</div></div><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename"> </div><div class="test-title">TEST</div><div class="test-status">passed</div><div class="test-duration">4.208s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.&lt;anonymous&gt; (/home/runner/work/public/public/packages/Helm/src/__jest__/test-node.ts:61:11)
233
233
  at Generator.next (&lt;anonymous&gt;)
234
234
  at fulfilled (/home/runner/work/public/public/packages/Helm/src/__jest__/test-node.ts:28:58)
235
235
  at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Using web root: http://localhost:8080</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at /home/runner/work/public/public/packages/Helm/src/__jest__/remote.test.ts:40:11
@@ -242,8 +242,5 @@ header {
242
242
  at new Promise (&lt;anonymous&gt;)</pre><pre class="suite-consolelog-item-message">Testing Helm package</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at /home/runner/work/public/public/packages/Helm/src/__jest__/remote.test.ts:66:11
243
243
  at Generator.next (&lt;anonymous&gt;)
244
244
  at fulfilled (/home/runner/work/public/public/packages/Helm/src/__jest__/remote.test.ts:31:58)
245
- at runMicrotasks (&lt;anonymous&gt;)
246
- at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 38 : Helm.Helm.manageFiles : OK
247
- Test result : Success : 739 : Helm.Helm.monomerManager : OK
248
- Test result : Success : 1 : Helm.Helm.parseHelm : OK
245
+ at processTicksAndRejections (internal/process/task_queues.js:97:5)</pre><pre class="suite-consolelog-item-message">Test result : Success : 2 : Helm.Helm.parseHelm : OK
249
246
  </pre></div></div></div></div></body></html>
package/tsconfig.json CHANGED
@@ -6,8 +6,8 @@
6
6
  // "incremental": true, /* Enable incremental compilation */
7
7
  "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
8
8
  "module": "es2020", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
9
- "lib": ["es2020", "dom"], /* Specify library files to be included in the compilation. */
10
- "allowJs": true, /* Allow javascript files to be compiled. */
9
+ "lib": ["es2020", "dom", "ES2021.String"], /* Specify library files to be included in the compilation. */
10
+ "allowJs": true, /* Allow javascript files to be compiled. */
11
11
  // "checkJs": true, /* Report errors in .js files. */
12
12
  // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
13
13
  // "declaration": true, /* Generates corresponding '.d.ts' file. */