@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/dist/package-test.js +432 -59644
- package/dist/package.js +912 -613
- package/package.json +2 -2
- package/src/cell-renderer.ts +110 -0
- package/src/constants.ts +10 -8
- package/src/package.ts +90 -481
- package/src/tests/helm-tests.ts +1 -27
- package/src/utils.ts +154 -29
- package/{test-Helm-5e15f45ca638-10548f95.html → test-Helm-3afbd4014fa1-27e36d83.html} +3 -6
- package/tsconfig.json +2 -2
- package/files/libraries/HELMCoreLibrary.json +0 -18218
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
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
159
|
+
});
|
|
160
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<html><head><meta charset="utf-8"/><title>Helm Test Report. Datagrok version datagrok/datagrok:latest SHA=
|
|
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=
|
|
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.<anonymous> (/home/runner/work/public/public/packages/Helm/src/__jest__/test-node.ts:61:11)
|
|
233
233
|
at Generator.next (<anonymous>)
|
|
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 (<anonymous>)</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 (<anonymous>)
|
|
244
244
|
at fulfilled (/home/runner/work/public/public/packages/Helm/src/__jest__/remote.test.ts:31:58)
|
|
245
|
-
at
|
|
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"],
|
|
10
|
-
"allowJs": true,
|
|
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. */
|