@datagrok-libraries/bio 5.21.0 → 5.22.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/package.json CHANGED
@@ -4,13 +4,13 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "Datagrok bio library",
7
- "version": "5.21.0",
7
+ "version": "5.22.0",
8
8
  "description": "",
9
9
  "dependencies": {
10
10
  "@datagrok-libraries/gridext": "^1.3.22",
11
11
  "@datagrok-libraries/utils": "^2.1.3",
12
12
  "cash-dom": "latest",
13
- "datagrok-api": "^1.8.2",
13
+ "datagrok-api": "^1.10.2",
14
14
  "dayjs": "latest",
15
15
  "@deck.gl/core": "8.8.12",
16
16
  "mjolnir.js": "^2.7.0",
@@ -1,6 +1,6 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import { IMonomerLib } from '../types/index';
3
- export declare function readLibrary(path: string, fileName: string): Promise<IMonomerLib>;
3
+ export declare const expectedMonomerData: string[];
4
4
  export declare function encodeMonomers(col: DG.Column): DG.Column | null;
5
5
  export declare function getMolfilesFromSeq(col: DG.Column, monomersLibObject: any[]): any[][] | null;
6
6
  export declare function getMolfilesFromSingleSeq(cell: DG.Cell, monomersLibObject: any[]): any[][] | null;
@@ -8,4 +8,10 @@ export declare function createMomomersMolDict(lib: any[]): {
8
8
  [key: string]: string | any;
9
9
  };
10
10
  export declare function createJsonMonomerLibFromSdf(table: DG.DataFrame): any;
11
+ export interface IMonomerLibHelper {
12
+ getBioLib(): IMonomerLib;
13
+ loadLibraries(reload?: boolean): Promise<void>;
14
+ readLibrary(path: string, fileName: string): Promise<IMonomerLib>;
15
+ }
16
+ export declare function getMonomerLibHelper(): Promise<IMonomerLibHelper>;
11
17
  //# sourceMappingURL=monomer-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"monomer-utils.d.ts","sourceRoot":"","sources":["monomer-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAQtC,OAAO,EAAC,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAKpD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiDtF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAwB/D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAuB3F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAoBhG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;CAAE,CAYjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CA8BpE"}
1
+ {"version":3,"file":"monomer-utils.d.ts","sourceRoot":"","sources":["monomer-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAQtC,OAAO,EAAC,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAGpD,eAAO,MAAM,mBAAmB,UAAyE,CAAC;AAE1G,wBAAgB,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAwB/D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAuB3F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAoBhG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;CAAE,CAYjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CA8BpE;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,IAAI,WAAW,CAAC;IAEzB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACnE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAOtE"}
@@ -12,56 +12,7 @@ import * as DG from 'datagrok-api/dg';
12
12
  import * as grok from 'datagrok-api/grok';
13
13
  import { HELM_CORE_FIELDS, jsonSdfMonomerLibDict, MONOMER_ENCODE_MAX, MONOMER_ENCODE_MIN, SDF_MONOMER_NAME } from '../utils/const';
14
14
  import { getSplitter } from '../utils/macromolecule';
15
- import { MonomerLib } from './monomer-lib';
16
- const expectedMonomerData = ['symbol', 'name', 'molfile', 'rgroups', 'polymerType', 'monomerType'];
17
- export function readLibrary(path, fileName) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- let data = [];
20
- let file;
21
- let dfSdf;
22
- let fileSource = new DG.FileSource(path);
23
- if (fileName.endsWith('.sdf')) {
24
- const funcList = DG.Func.find({ package: 'Chem', name: 'importSdf' });
25
- if (funcList.length === 1) {
26
- file = yield fileSource.readAsBytes(fileName);
27
- dfSdf = yield grok.functions.call('Chem:importSdf', { bytes: file });
28
- data = createJsonMonomerLibFromSdf(dfSdf[0]);
29
- }
30
- else {
31
- grok.shell.warning('Chem package is not installed');
32
- }
33
- }
34
- else {
35
- const file = yield fileSource.readAsText(fileName);
36
- data = JSON.parse(file);
37
- }
38
- let monomers = {};
39
- const types = [];
40
- //group monomers by their type
41
- data.forEach(monomer => {
42
- let monomerAdd = {
43
- 'symbol': monomer['symbol'],
44
- 'name': monomer['name'],
45
- 'naturalAnalog': monomer['naturalAnalog'],
46
- 'molfile': monomer['molfile'],
47
- 'rgroups': monomer['rgroups'],
48
- 'polymerType': monomer['polymerType'],
49
- 'monomerType': monomer['monomerType'],
50
- 'data': {}
51
- };
52
- Object.keys(monomer).forEach(prop => {
53
- if (!expectedMonomerData.includes(prop))
54
- monomerAdd.data[prop] = monomer[prop];
55
- });
56
- if (!types.includes(monomer['polymerType'])) {
57
- monomers[monomer['polymerType']] = {};
58
- types.push(monomer['polymerType']);
59
- }
60
- monomers[monomer['polymerType']][monomer['symbol']] = monomerAdd;
61
- });
62
- return new MonomerLib(monomers);
63
- });
64
- }
15
+ export const expectedMonomerData = ['symbol', 'name', 'molfile', 'rgroups', 'polymerType', 'monomerType'];
65
16
  export function encodeMonomers(col) {
66
17
  let encodeSymbol = MONOMER_ENCODE_MIN;
67
18
  const monomerSymbolDict = {};
@@ -178,4 +129,13 @@ export function createJsonMonomerLibFromSdf(table) {
178
129
  }
179
130
  return resultLib;
180
131
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQ1EsZ0JBQWdCLEVBQWlCLHFCQUFxQixFQUNuRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDekQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsV0FBVyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBRXZFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFFbkcsTUFBTSxVQUFnQixXQUFXLENBQUMsSUFBWSxFQUFFLFFBQWdCOztRQUM5RCxJQUFJLElBQUksR0FBVSxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksVUFBVSxHQUFHLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO1lBQy9FLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBRXpCLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFD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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5cbmltcG9ydCB7XG4gIEhFTE1fRklFTERTLCBIRUxNX0NPUkVfRklFTERTLCBSR1JPVVBfRklFTERTLCBqc29uU2RmTW9ub21lckxpYkRpY3QsXG4gIE1PTk9NRVJfRU5DT0RFX01BWCwgTU9OT01FUl9FTkNPREVfTUlOLCBTREZfTU9OT01FUl9OQU1FXG59IGZyb20gJy4uL3V0aWxzL2NvbnN0JztcbmltcG9ydCB7Z2V0U3BsaXR0ZXIsIFNwbGl0dGVyRnVuYywgVEFHU30gZnJvbSAnLi4vdXRpbHMvbWFjcm9tb2xlY3VsZSc7XG5pbXBvcnQge0lNb25vbWVyTGliLCBNb25vbWVyfSBmcm9tICcuLi90eXBlcy9pbmRleCc7XG5pbXBvcnQge01vbm9tZXJMaWJ9IGZyb20gJy4vbW9ub21lci1saWInO1xuXG5jb25zdCBleHBlY3RlZE1vbm9tZXJEYXRhID0gWydzeW1ib2wnLCAnbmFtZScsICdtb2xmaWxlJywgJ3Jncm91cHMnLCAncG9seW1lclR5cGUnLCAnbW9ub21lclR5cGUnXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRMaWJyYXJ5KHBhdGg6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8SU1vbm9tZXJMaWI+IHtcbiAgbGV0IGRhdGE6IGFueVtdID0gW107XG4gIGxldCBmaWxlO1xuICBsZXQgZGZTZGY7XG4gIGxldCBmaWxlU291cmNlID0gbmV3IERHLkZpbGVTb3VyY2UocGF0aCk7XG4gIGlmIChmaWxlTmFtZS5lbmRzV2l0aCgnLnNkZicpKSB7XG4gICAgY29uc3QgZnVuY0xpc3Q6IERHLkZ1bmNbXSA9IERHLkZ1bmMuZmluZCh7cGFja2FnZTogJ0NoZW0nLCBuYW1lOiAnaW1wb3J0U2RmJ30pO1xuICAgIGlmIChmdW5jTGlzdC5sZW5ndGggPT09IDEpIHtcblxuICAgICAgZmlsZSA9IGF3YWl0IGZpbGVTb3VyY2UucmVhZEFzQnl0ZXMoZmlsZU5hbWUpO1xuICAgICAgZGZTZGYgPSBhd2FpdCBncm9rLmZ1bmN0aW9ucy5jYWxsKCdDaGVtOmltcG9ydFNkZicsIHtieXRlczogZmlsZX0pO1xuICAgICAgZGF0YSA9IGNyZWF0ZUpzb25Nb25vbWVyTGliRnJvbVNkZihkZlNkZlswXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb2suc2hlbGwud2FybmluZygnQ2hlbSBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVTb3VyY2UucmVhZEFzVGV4dChmaWxlTmFtZSk7XG4gICAgZGF0YSA9IEpTT04ucGFyc2UoZmlsZSk7XG4gIH1cblxuICBsZXQgbW9ub21lcnM6IHsgW3R5cGU6IHN0cmluZ106IHsgW25hbWU6IHN0cmluZ106IE1vbm9tZXIgfSB9ID0ge307XG4gIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICAvL2dyb3VwIG1vbm9tZXJzIGJ5IHRoZWlyIHR5cGVcbiAgZGF0YS5mb3JFYWNoKG1vbm9tZXIgPT4ge1xuICAgIGxldCBtb25vbWVyQWRkOiBNb25vbWVyID0ge1xuICAgICAgJ3N5bWJvbCc6IG1vbm9tZXJbJ3N5bWJvbCddLFxuICAgICAgJ25hbWUnOiBtb25vbWVyWyduYW1lJ10sXG4gICAgICAnbmF0dXJhbEFuYWxvZyc6IG1vbm9tZXJbJ25hdHVyYWxBbmFsb2cnXSxcbiAgICAgICdtb2xmaWxlJzogbW9ub21lclsnbW9sZmlsZSddLFxuICAgICAgJ3Jncm91cHMnOiBtb25vbWVyWydyZ3JvdXBzJ10sXG4gICAgICAncG9seW1lclR5cGUnOiBtb25vbWVyWydwb2x5bWVyVHlwZSddLFxuICAgICAgJ21vbm9tZXJUeXBlJzogbW9ub21lclsnbW9ub21lclR5cGUnXSxcbiAgICAgICdkYXRhJzoge31cbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMobW9ub21lcikuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGlmICghZXhwZWN0ZWRNb25vbWVyRGF0YS5pbmNsdWRlcyhwcm9wKSlcbiAgICAgICAgbW9ub21lckFkZC5kYXRhW3Byb3BdID0gbW9ub21lcltwcm9wXTtcbiAgICB9KTtcblxuICAgIGlmICghdHlwZXMuaW5jbHVkZXMobW9ub21lclsncG9seW1lclR5cGUnXSkpIHtcbiAgICAgIG1vbm9tZXJzW21vbm9tZXJbJ3BvbHltZXJUeXBlJ11dID0ge307XG4gICAgICB0eXBlcy5wdXNoKG1vbm9tZXJbJ3BvbHltZXJUeXBlJ10pO1xuICAgIH1cblxuICAgIG1vbm9tZXJzW21vbm9tZXJbJ3BvbHltZXJUeXBlJ11dW21vbm9tZXJbJ3N5bWJvbCddXSA9IG1vbm9tZXJBZGQ7XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgTW9ub21lckxpYihtb25vbWVycyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVNb25vbWVycyhjb2w6IERHLkNvbHVtbik6IERHLkNvbHVtbiB8IG51bGwge1xuICBsZXQgZW5jb2RlU3ltYm9sID0gTU9OT01FUl9FTkNPREVfTUlOO1xuICBjb25zdCBtb25vbWVyU3ltYm9sRGljdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBjb25zdCB1bml0cyA9IGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICBjb25zdCBzZXAgPSBjb2wuZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcih1bml0cywgc2VwKTtcbiAgY29uc3QgZW5jb2RlZFN0cmluZ0FycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGVuY29kZWRNb25vbWVyU3RyID0gJyc7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMoY29sLmdldChpKSk7XG4gICAgbW9ub21lcnMuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgaWYgKCFtb25vbWVyU3ltYm9sRGljdFttXSkge1xuICAgICAgICBpZiAoZW5jb2RlU3ltYm9sID4gTU9OT01FUl9FTkNPREVfTUFYKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgTm90IGVub3VnaCBzeW1ib2xzIHRvIGVuY29kZSBtb25vbWVyc2ApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG1vbm9tZXJTeW1ib2xEaWN0W21dID0gZW5jb2RlU3ltYm9sO1xuICAgICAgICBlbmNvZGVTeW1ib2wrKztcbiAgICAgIH1cbiAgICAgIGVuY29kZWRNb25vbWVyU3RyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KG1vbm9tZXJTeW1ib2xEaWN0W21dKTtcbiAgICB9KTtcbiAgICBlbmNvZGVkU3RyaW5nQXJyYXkucHVzaChlbmNvZGVkTW9ub21lclN0cik7XG4gIH1cbiAgcmV0dXJuIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnZW5jb2RlZE1vbGVjdWxlcycsIGVuY29kZWRTdHJpbmdBcnJheSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TZXEoY29sOiBERy5Db2x1bW4sIG1vbm9tZXJzTGliT2JqZWN0OiBhbnlbXSk6IGFueVtdW10gfCBudWxsIHtcbiAgY29uc3QgdW5pdHMgPSBjb2wudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgY29uc3Qgc2VwID0gY29sLmdldFRhZygnc2VwYXJhdG9yJyk7XG4gIGNvbnN0IHNwbGl0dGVyRnVuYzogU3BsaXR0ZXJGdW5jID0gZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWFjcm9Nb2xlY3VsZSA9IGNvbC5nZXQoaSk7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gICAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzLmxlbmd0aDsgKytqKSB7XG4gICAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBNb25vbWVyICR7bW9ub21lcnNbal19IGlzIG1pc3NpbmcgaW4gSEVMTSBsaWJyYXJ5LiBTdHJ1Y3R1cmUgY2Fubm90IGJlIGNyZWF0ZWRgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGF0IGlzIHRoZSByZWFzb24gb2YgZG91YmxlIGNvbnZlcnNpb24/XG4gICAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgfVxuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TaW5nbGVTZXEoY2VsbDogREcuQ2VsbCwgbW9ub21lcnNMaWJPYmplY3Q6IGFueVtdKTogYW55W11bXSB8IG51bGwge1xuICBjb25zdCB1bml0cyA9IGNlbGwuY29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNlbGwuY29sdW1uIS5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyKHVuaXRzLCBzZXApO1xuICBjb25zdCBtb25vbWVyc0RpY3QgPSBjcmVhdGVNb21vbWVyc01vbERpY3QobW9ub21lcnNMaWJPYmplY3QpO1xuICBjb25zdCBtb2xGaWxlcyA9IFtdO1xuICBjb25zdCBtYWNyb01vbGVjdWxlID0gY2VsbC52YWx1ZTtcbiAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gIGNvbnN0IG1vbEZpbGVzRm9yU2VxID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lcnMubGVuZ3RoOyArK2opIHtcbiAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgIGlmICghbW9ub21lcnNEaWN0W21vbm9tZXJzW2pdXSkge1xuICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoYE1vbm9tZXIgJHttb25vbWVyc1tqXX0gaXMgbWlzc2luZyBpbiBIRUxNIGxpYnJhcnkuIFN0cnVjdHVyZSBjYW5ub3QgYmUgY3JlYXRlZGApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgIH1cbiAgfVxuICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgcmV0dXJuIG1vbEZpbGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9tb21lcnNNb2xEaWN0KGxpYjogYW55W10pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9IHtcbiAgY29uc3QgZGljdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBhbnkgfSA9IHt9O1xuICBsaWIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICBpZiAoaXRbJ3BvbHltZXJUeXBlJ10gPT09ICdQRVBUSURFJykge1xuICAgICAgY29uc3QgbW9ub21lck9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgSEVMTV9DT1JFX0ZJRUxEUy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBtb25vbWVyT2JqZWN0W2ZpZWxkXSA9IGl0W2ZpZWxkXTtcbiAgICAgIH0pO1xuICAgICAgZGljdFtpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdXSA9IG1vbm9tZXJPYmplY3Q7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc29uTW9ub21lckxpYkZyb21TZGYodGFibGU6IERHLkRhdGFGcmFtZSk6IGFueSB7XG4gIGNvbnN0IHJlc3VsdExpYiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLnJvd0NvdW50OyBpKyspIHtcbiAgICBjb25zdCBtb25vbWVyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gICAgT2JqZWN0LmtleXMoanNvblNkZk1vbm9tZXJMaWJEaWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgPT09IEhFTE1fRklFTERTLlNZTUJPTCkge1xuICAgICAgICBjb25zdCBtb25vbWVyU3ltYm9sID0gdGFibGUuZ2V0KGpzb25TZGZNb25vbWVyTGliRGljdFtrZXldLCBpKTtcbiAgICAgICAgbW9ub21lcltrZXldID0gbW9ub21lclN5bWJvbCA9PT0gJy4nID8gdGFibGUuZ2V0KFNERl9NT05PTUVSX05BTUUsIGkpIDogbW9ub21lclN5bWJvbDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBIRUxNX0ZJRUxEUy5SR1JPVVBTKSB7XG4gICAgICAgIGNvbnN0IHJncm91cHMgPSB0YWJsZS5nZXQoanNvblNkZk1vbm9tZXJMaWJEaWN0W2tleV0sIGkpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QganNvblJncm91cHM6IGFueVtdID0gW107XG4gICAgICAgIHJncm91cHMuZm9yRWFjaCgoZzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcmdyb3VwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gICAgICAgICAgY29uc3QgYWx0QXRvbSA9IGcuc3Vic3RyaW5nKGcubGFzdEluZGV4T2YoJ10nKSArIDEpO1xuICAgICAgICAgIGNvbnN0IHJhZGljYWxOdW0gPSBnLm1hdGNoKC9cXFtSKFxcZCspXFxdLykhWzFdO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkNBUF9HUk9VUF9TTUlMRVNdID0gYWx0QXRvbSA9PT0gJ0gnID8gYFsqOiR7cmFkaWNhbE51bX1dW0hdYCA6IGBPWyo6JHtyYWRpY2FsTnVtfV1gO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkFMVEVSX0lEXSA9IGFsdEF0b20gPT09ICdIJyA/IGBSJHtyYWRpY2FsTnVtfS1IYCA6IGBSJHtyYWRpY2FsTnVtfS1PSGA7XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX05BTUVdID0gYWx0QXRvbSA9PT0gJ0gnID8gYEhgIDogYE9IYDtcbiAgICAgICAgICByZ3JvdXBbUkdST1VQX0ZJRUxEUy5MQUJFTF0gPSBgUiR7cmFkaWNhbE51bX1gO1xuICAgICAgICAgIGpzb25SZ3JvdXBzLnB1c2gocmdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vbm9tZXJba2V5XSA9IGpzb25SZ3JvdXBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChqc29uU2RmTW9ub21lckxpYkRpY3QgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBhbnkgfSlba2V5XSlcbiAgICAgICAgICBtb25vbWVyW2tleV0gPSB0YWJsZS5nZXQoKGpzb25TZGZNb25vbWVyTGliRGljdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9KVtrZXldLCBpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHRMaWIucHVzaChtb25vbWVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0TGliO1xufVxuIl19
132
+ export function getMonomerLibHelper() {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ const funcList = DG.Func.find({ package: 'Bio', name: 'getMonomerLibHelper' });
135
+ if (funcList.length === 0)
136
+ throw new Error('Package "Bio" must be installer for MonomerLibraryHelper.');
137
+ const res = (yield funcList[0].prepare().call()).getOutputParamValue();
138
+ return res;
139
+ });
140
+ }
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQ1EsZ0JBQWdCLEVBQWlCLHFCQUFxQixFQUNuRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDekQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsV0FBVyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBSXZFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUUxRyxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQWM7SUFDM0MsSUFBSSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7SUFDdEMsTUFBTSxpQkFBaUIsR0FBOEIsRUFBRSxDQUFDO0lBQ3hELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxrQ0FBZ0IsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FBaUIsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxZQUFZ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Q0FBQztBQUNuQixDQUFDO0FBVUQsTUFBTSxVQUFnQixtQkFBbUI7O1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUUvRSxNQUFNLEdBQUcsR0FBc0IsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixFQUF1QixDQUFDO1FBQy9HLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcblxuaW1wb3J0IHtcbiAgSEVMTV9GSUVMRFMsIEhFTE1fQ09SRV9GSUVMRFMsIFJHUk9VUF9GSUVMRFMsIGpzb25TZGZNb25vbWVyTGliRGljdCxcbiAgTU9OT01FUl9FTkNPREVfTUFYLCBNT05PTUVSX0VOQ09ERV9NSU4sIFNERl9NT05PTUVSX05BTUVcbn0gZnJvbSAnLi4vdXRpbHMvY29uc3QnO1xuaW1wb3J0IHtnZXRTcGxpdHRlciwgU3BsaXR0ZXJGdW5jLCBUQUdTfSBmcm9tICcuLi91dGlscy9tYWNyb21vbGVjdWxlJztcbmltcG9ydCB7SU1vbm9tZXJMaWIsIE1vbm9tZXJ9IGZyb20gJy4uL3R5cGVzL2luZGV4JztcblxuXG5leHBvcnQgY29uc3QgZXhwZWN0ZWRNb25vbWVyRGF0YSA9IFsnc3ltYm9sJywgJ25hbWUnLCAnbW9sZmlsZScsICdyZ3JvdXBzJywgJ3BvbHltZXJUeXBlJywgJ21vbm9tZXJUeXBlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVNb25vbWVycyhjb2w6IERHLkNvbHVtbik6IERHLkNvbHVtbiB8IG51bGwge1xuICBsZXQgZW5jb2RlU3ltYm9sID0gTU9OT01FUl9FTkNPREVfTUlOO1xuICBjb25zdCBtb25vbWVyU3ltYm9sRGljdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBjb25zdCB1bml0cyA9IGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICBjb25zdCBzZXAgPSBjb2wuZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcih1bml0cywgc2VwKTtcbiAgY29uc3QgZW5jb2RlZFN0cmluZ0FycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGVuY29kZWRNb25vbWVyU3RyID0gJyc7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMoY29sLmdldChpKSk7XG4gICAgbW9ub21lcnMuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgaWYgKCFtb25vbWVyU3ltYm9sRGljdFttXSkge1xuICAgICAgICBpZiAoZW5jb2RlU3ltYm9sID4gTU9OT01FUl9FTkNPREVfTUFYKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgTm90IGVub3VnaCBzeW1ib2xzIHRvIGVuY29kZSBtb25vbWVyc2ApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG1vbm9tZXJTeW1ib2xEaWN0W21dID0gZW5jb2RlU3ltYm9sO1xuICAgICAgICBlbmNvZGVTeW1ib2wrKztcbiAgICAgIH1cbiAgICAgIGVuY29kZWRNb25vbWVyU3RyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KG1vbm9tZXJTeW1ib2xEaWN0W21dKTtcbiAgICB9KTtcbiAgICBlbmNvZGVkU3RyaW5nQXJyYXkucHVzaChlbmNvZGVkTW9ub21lclN0cik7XG4gIH1cbiAgcmV0dXJuIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnZW5jb2RlZE1vbGVjdWxlcycsIGVuY29kZWRTdHJpbmdBcnJheSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TZXEoY29sOiBERy5Db2x1bW4sIG1vbm9tZXJzTGliT2JqZWN0OiBhbnlbXSk6IGFueVtdW10gfCBudWxsIHtcbiAgY29uc3QgdW5pdHMgPSBjb2wudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgY29uc3Qgc2VwID0gY29sLmdldFRhZygnc2VwYXJhdG9yJyk7XG4gIGNvbnN0IHNwbGl0dGVyRnVuYzogU3BsaXR0ZXJGdW5jID0gZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWFjcm9Nb2xlY3VsZSA9IGNvbC5nZXQoaSk7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gICAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzLmxlbmd0aDsgKytqKSB7XG4gICAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBNb25vbWVyICR7bW9ub21lcnNbal19IGlzIG1pc3NpbmcgaW4gSEVMTSBsaWJyYXJ5LiBTdHJ1Y3R1cmUgY2Fubm90IGJlIGNyZWF0ZWRgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGF0IGlzIHRoZSByZWFzb24gb2YgZG91YmxlIGNvbnZlcnNpb24/XG4gICAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgfVxuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TaW5nbGVTZXEoY2VsbDogREcuQ2VsbCwgbW9ub21lcnNMaWJPYmplY3Q6IGFueVtdKTogYW55W11bXSB8IG51bGwge1xuICBjb25zdCB1bml0cyA9IGNlbGwuY29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNlbGwuY29sdW1uIS5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyKHVuaXRzLCBzZXApO1xuICBjb25zdCBtb25vbWVyc0RpY3QgPSBjcmVhdGVNb21vbWVyc01vbERpY3QobW9ub21lcnNMaWJPYmplY3QpO1xuICBjb25zdCBtb2xGaWxlcyA9IFtdO1xuICBjb25zdCBtYWNyb01vbGVjdWxlID0gY2VsbC52YWx1ZTtcbiAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gIGNvbnN0IG1vbEZpbGVzRm9yU2VxID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lcnMubGVuZ3RoOyArK2opIHtcbiAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgIGlmICghbW9ub21lcnNEaWN0W21vbm9tZXJzW2pdXSkge1xuICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoYE1vbm9tZXIgJHttb25vbWVyc1tqXX0gaXMgbWlzc2luZyBpbiBIRUxNIGxpYnJhcnkuIFN0cnVjdHVyZSBjYW5ub3QgYmUgY3JlYXRlZGApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgIH1cbiAgfVxuICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgcmV0dXJuIG1vbEZpbGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9tb21lcnNNb2xEaWN0KGxpYjogYW55W10pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9IHtcbiAgY29uc3QgZGljdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBhbnkgfSA9IHt9O1xuICBsaWIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICBpZiAoaXRbJ3BvbHltZXJUeXBlJ10gPT09ICdQRVBUSURFJykge1xuICAgICAgY29uc3QgbW9ub21lck9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgSEVMTV9DT1JFX0ZJRUxEUy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBtb25vbWVyT2JqZWN0W2ZpZWxkXSA9IGl0W2ZpZWxkXTtcbiAgICAgIH0pO1xuICAgICAgZGljdFtpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdXSA9IG1vbm9tZXJPYmplY3Q7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc29uTW9ub21lckxpYkZyb21TZGYodGFibGU6IERHLkRhdGFGcmFtZSk6IGFueSB7XG4gIGNvbnN0IHJlc3VsdExpYiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLnJvd0NvdW50OyBpKyspIHtcbiAgICBjb25zdCBtb25vbWVyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gICAgT2JqZWN0LmtleXMoanNvblNkZk1vbm9tZXJMaWJEaWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgPT09IEhFTE1fRklFTERTLlNZTUJPTCkge1xuICAgICAgICBjb25zdCBtb25vbWVyU3ltYm9sID0gdGFibGUuZ2V0KGpzb25TZGZNb25vbWVyTGliRGljdFtrZXldLCBpKTtcbiAgICAgICAgbW9ub21lcltrZXldID0gbW9ub21lclN5bWJvbCA9PT0gJy4nID8gdGFibGUuZ2V0KFNERl9NT05PTUVSX05BTUUsIGkpIDogbW9ub21lclN5bWJvbDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBIRUxNX0ZJRUxEUy5SR1JPVVBTKSB7XG4gICAgICAgIGNvbnN0IHJncm91cHMgPSB0YWJsZS5nZXQoanNvblNkZk1vbm9tZXJMaWJEaWN0W2tleV0sIGkpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QganNvblJncm91cHM6IGFueVtdID0gW107XG4gICAgICAgIHJncm91cHMuZm9yRWFjaCgoZzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcmdyb3VwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gICAgICAgICAgY29uc3QgYWx0QXRvbSA9IGcuc3Vic3RyaW5nKGcubGFzdEluZGV4T2YoJ10nKSArIDEpO1xuICAgICAgICAgIGNvbnN0IHJhZGljYWxOdW0gPSBnLm1hdGNoKC9cXFtSKFxcZCspXFxdLykhWzFdO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkNBUF9HUk9VUF9TTUlMRVNdID0gYWx0QXRvbSA9PT0gJ0gnID8gYFsqOiR7cmFkaWNhbE51bX1dW0hdYCA6IGBPWyo6JHtyYWRpY2FsTnVtfV1gO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkFMVEVSX0lEXSA9IGFsdEF0b20gPT09ICdIJyA/IGBSJHtyYWRpY2FsTnVtfS1IYCA6IGBSJHtyYWRpY2FsTnVtfS1PSGA7XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX05BTUVdID0gYWx0QXRvbSA9PT0gJ0gnID8gYEhgIDogYE9IYDtcbiAgICAgICAgICByZ3JvdXBbUkdST1VQX0ZJRUxEUy5MQUJFTF0gPSBgUiR7cmFkaWNhbE51bX1gO1xuICAgICAgICAgIGpzb25SZ3JvdXBzLnB1c2gocmdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vbm9tZXJba2V5XSA9IGpzb25SZ3JvdXBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChqc29uU2RmTW9ub21lckxpYkRpY3QgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBhbnkgfSlba2V5XSlcbiAgICAgICAgICBtb25vbWVyW2tleV0gPSB0YWJsZS5nZXQoKGpzb25TZGZNb25vbWVyTGliRGljdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9KVtrZXldLCBpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHRMaWIucHVzaChtb25vbWVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0TGliO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb25vbWVyTGliSGVscGVyIHtcbiAgZ2V0QmlvTGliKCk6IElNb25vbWVyTGliO1xuXG4gIGxvYWRMaWJyYXJpZXMocmVsb2FkPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XG5cbiAgcmVhZExpYnJhcnkocGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxJTW9ub21lckxpYj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNb25vbWVyTGliSGVscGVyKCk6IFByb21pc2U8SU1vbm9tZXJMaWJIZWxwZXI+IHtcbiAgY29uc3QgZnVuY0xpc3QgPSBERy5GdW5jLmZpbmQoe3BhY2thZ2U6ICdCaW8nLCBuYW1lOiAnZ2V0TW9ub21lckxpYkhlbHBlcid9KTtcbiAgaWYgKGZ1bmNMaXN0Lmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgXCJCaW9cIiBtdXN0IGJlIGluc3RhbGxlciBmb3IgTW9ub21lckxpYnJhcnlIZWxwZXIuJyk7XG5cbiAgY29uc3QgcmVzOiBJTW9ub21lckxpYkhlbHBlciA9IChhd2FpdCBmdW5jTGlzdFswXS5wcmVwYXJlKCkuY2FsbCgpKS5nZXRPdXRwdXRQYXJhbVZhbHVlKCkgYXMgSU1vbm9tZXJMaWJIZWxwZXI7XG4gIHJldHVybiByZXM7XG59XG4iXX0=
@@ -1,20 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { IMonomerLib, Monomer } from '../types/index';
3
- export declare class MonomerLib implements IMonomerLib {
4
- private _monomers;
5
- private _onChanged;
6
- constructor(monomers: {
7
- [type: string]: {
8
- [name: string]: Monomer;
9
- };
10
- });
11
- getMonomer(monomerType: string, monomerName: string): Monomer | null;
12
- getTypes(): string[];
13
- getMonomerMolsByType(type: string): {
14
- [symbol: string]: string;
15
- };
16
- getMonomerNamesByType(type: string): string[];
17
- get onChanged(): Observable<any>;
18
- update(lib: IMonomerLib): void;
19
- }
20
- //# sourceMappingURL=monomer-lib.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"monomer-lib.d.ts","sourceRoot":"","sources":["monomer-lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAU,MAAM,MAAM,CAAC;AACzC,OAAO,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAEpD,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,SAAS,CAAuD;IACxE,OAAO,CAAC,UAAU,CAAsB;gBAE5B,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAA;KAAE;IAIrE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAOpE,QAAQ,IAAI,MAAM,EAAE;IAIpB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC;IAU9D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAI7C,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,CAE/B;IAEM,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;CAkBtC"}
@@ -1,45 +0,0 @@
1
- import { Subject } from 'rxjs';
2
- export class MonomerLib {
3
- constructor(monomers) {
4
- this._monomers = {};
5
- this._onChanged = new Subject();
6
- this._monomers = monomers;
7
- }
8
- getMonomer(monomerType, monomerName) {
9
- if (monomerType in this._monomers && monomerName in this._monomers[monomerType])
10
- return this._monomers[monomerType][monomerName];
11
- else
12
- return null;
13
- }
14
- getTypes() {
15
- return Object.keys(this._monomers);
16
- }
17
- getMonomerMolsByType(type) {
18
- let res = {};
19
- Object.keys(this._monomers[type]).forEach(monomerSymbol => {
20
- res[monomerSymbol] = this._monomers[type][monomerSymbol].molfile;
21
- });
22
- return res;
23
- }
24
- getMonomerNamesByType(type) {
25
- return Object.keys(this._monomers[type]);
26
- }
27
- get onChanged() {
28
- return this._onChanged;
29
- }
30
- update(lib) {
31
- const typesNew = lib.getTypes();
32
- const types = this.getTypes();
33
- typesNew.forEach(type => {
34
- //could possibly rewrite -> TODO: check duplicated monomer symbol
35
- if (!types.includes(type))
36
- this._monomers[type] = {};
37
- const monomers = lib.getMonomerNamesByType(type);
38
- monomers.forEach(monomerName => {
39
- this._monomers[type][monomerName] = lib.getMonomer(type, monomerName);
40
- });
41
- });
42
- this._onChanged.next();
43
- }
44
- }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb25vbWVyLWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3pDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksUUFBeUQ7UUFIN0QsY0FBUyxHQUFvRCxFQUFFLENBQUM7UUFDaEUsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFHdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFtQixFQUFFLFdBQW1CO1FBQ2pELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFVLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxDQUFDO1lBQy9FLE9BQU8sSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFFakQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLElBQUksR0FBRyxHQUErQixFQUFFLENBQUM7UUFFekMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVk7UUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBZ0I7UUFDNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU5QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGlFQUFpRTtZQUVqRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTdCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBRSxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7SU1vbm9tZXJMaWIsIE1vbm9tZXJ9IGZyb20gJy4uL3R5cGVzL2luZGV4JztcblxuZXhwb3J0IGNsYXNzIE1vbm9tZXJMaWIgaW1wbGVtZW50cyBJTW9ub21lckxpYiB7XG4gIHByaXZhdGUgX21vbm9tZXJzOiB7IFt0eXBlOiBzdHJpbmddOiB7IFtuYW1lOiBzdHJpbmddOiBNb25vbWVyIH0gfSA9IHt9O1xuICBwcml2YXRlIF9vbkNoYW5nZWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IobW9ub21lcnM6IHsgW3R5cGU6IHN0cmluZ106IHsgW25hbWU6IHN0cmluZ106IE1vbm9tZXIgfSB9KSB7XG4gICAgdGhpcy5fbW9ub21lcnMgPSBtb25vbWVycztcbiAgfVxuXG4gIGdldE1vbm9tZXIobW9ub21lclR5cGU6IHN0cmluZywgbW9ub21lck5hbWU6IHN0cmluZyk6IE1vbm9tZXIgfCBudWxsIHtcbiAgICBpZiAobW9ub21lclR5cGUgaW4gdGhpcy5fbW9ub21lcnMhICYmIG1vbm9tZXJOYW1lIGluIHRoaXMuX21vbm9tZXJzIVttb25vbWVyVHlwZV0pXG4gICAgICByZXR1cm4gdGhpcy5fbW9ub21lcnMhW21vbm9tZXJUeXBlXVttb25vbWVyTmFtZV07XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21vbm9tZXJzKTtcbiAgfVxuXG4gIGdldE1vbm9tZXJNb2xzQnlUeXBlKHR5cGU6IHN0cmluZyk6IHtbc3ltYm9sOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICBsZXQgcmVzOiB7W3N5bWJvbDogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5fbW9ub21lcnNbdHlwZV0pLmZvckVhY2gobW9ub21lclN5bWJvbCA9PiB7XG4gICAgICByZXNbbW9ub21lclN5bWJvbF0gPSB0aGlzLl9tb25vbWVyc1t0eXBlXVttb25vbWVyU3ltYm9sXS5tb2xmaWxlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGdldE1vbm9tZXJOYW1lc0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21vbm9tZXJzW3R5cGVdKTtcbiAgfVxuXG4gIGdldCBvbkNoYW5nZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHsgXG4gICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlZDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUobGliOiBJTW9ub21lckxpYik6IHZvaWQge1xuICAgIGNvbnN0IHR5cGVzTmV3ID0gbGliLmdldFR5cGVzKCk7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmdldFR5cGVzKCk7XG5cbiAgICB0eXBlc05ldy5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgLy9jb3VsZCBwb3NzaWJseSByZXdyaXRlIC0+IFRPRE86IGNoZWNrIGR1cGxpY2F0ZWQgbW9ub21lciBzeW1ib2xcblxuICAgICAgaWYgKCF0eXBlcy5pbmNsdWRlcyh0eXBlKSlcbiAgICAgICAgdGhpcy5fbW9ub21lcnMhW3R5cGVdID0ge307XG5cbiAgICAgIGNvbnN0IG1vbm9tZXJzID0gbGliLmdldE1vbm9tZXJOYW1lc0J5VHlwZSh0eXBlKTtcbiAgICAgIG1vbm9tZXJzLmZvckVhY2gobW9ub21lck5hbWUgPT57XG4gICAgICAgIHRoaXMuX21vbm9tZXJzW3R5cGVdW21vbm9tZXJOYW1lXSA9IGxpYi5nZXRNb25vbWVyKHR5cGUsIG1vbm9tZXJOYW1lKSE7XG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VkLm5leHQoKTtcbiAgfVxufVxuIl19