@rcsb/rcsb-search-tools 0.0.1

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 ADDED
@@ -0,0 +1,18 @@
1
+ # rcsb-search-tools
2
+
3
+ RCSB Search Tools is an open-source library that includes different tools to build queries, request and parse data from the
4
+ [RCSB Search API](https://search.rcsb.org/).
5
+
6
+ ### Node Module Instalation
7
+ `npm install @rcsb/rcsb-search-tools`
8
+
9
+ ### Folder organization
10
+ - `src` module source code
11
+ - `SearchClient` RCSB Search API client
12
+ - `SearchQueryTools` Tools for building search requests
13
+ - `SearchParseTools` Tools for parsing RCSB Search API responses
14
+ - `test` Unit tests
15
+
16
+ ### Examples
17
+
18
+ Multiple examples can be found in the `test` folder as part of unit tests
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SearchClient = void 0;
4
+ const SearchRequest_1 = require("@rcsb/rcsb-api-tools/build/RcsbSearch/SearchRequest");
5
+ class SearchClient {
6
+ static get() {
7
+ return this.client;
8
+ }
9
+ static set(client) {
10
+ this.client = client;
11
+ }
12
+ }
13
+ SearchClient.client = new SearchRequest_1.SearchRequest();
14
+ exports.SearchClient = SearchClient;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFacetsFromSearch = void 0;
4
+ function getFacetsFromSearch(searchResult) {
5
+ if (!searchResult.facets)
6
+ return [];
7
+ return getBucketsFromFacets(searchResult.facets);
8
+ }
9
+ exports.getFacetsFromSearch = getFacetsFromSearch;
10
+ function getBucketsFromFacets(searchResultFacets, labelList, recursiveOut) {
11
+ const out = recursiveOut !== null && recursiveOut !== void 0 ? recursiveOut : [];
12
+ const facets = collectFacets(searchResultFacets);
13
+ facets.forEach(bucketFacet => {
14
+ const innerFacets = bucketFacet.buckets.filter(g => Array.isArray(g.facets));
15
+ if (innerFacets.length > 0) {
16
+ innerFacets.forEach(g => {
17
+ if (g.facets)
18
+ getBucketsFromFacets(g.facets, labelList ? labelList.concat(g.label) : [g.label], out);
19
+ });
20
+ }
21
+ const searchBucketFacet = {
22
+ name: bucketFacet.name,
23
+ labelPath: labelList !== null && labelList !== void 0 ? labelList : [],
24
+ data: []
25
+ };
26
+ bucketFacet.buckets.forEach(bucket => {
27
+ if (bucket.label && bucket.population)
28
+ searchBucketFacet.data.push({
29
+ label: bucket.label,
30
+ population: bucket.population
31
+ });
32
+ });
33
+ out.push(searchBucketFacet);
34
+ });
35
+ return out;
36
+ }
37
+ function collectFacets(facets) {
38
+ return facets.map(f => ('value' in f ? {
39
+ name: f.name,
40
+ buckets: [{
41
+ label: f.name,
42
+ population: f.value
43
+ }]
44
+ } : f));
45
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildAttributeQuery = exports.combineSearchQuery = exports.addAttributeToSearchQuery = exports.buildRequestFromSearchQuery = exports.buildRequestFromCombinedSearchQuery = exports.buildRequestFromAttributeAndSearchQuery = exports.buildRequestFromAttribute = void 0;
4
+ const SearchEnums_1 = require("@rcsb/rcsb-api-tools/build/RcsbSearch/Types/SearchEnums");
5
+ const lodash_1 = require("lodash");
6
+ function buildRequestFromAttribute(searchAttribute, returnType, requestOptions) {
7
+ return {
8
+ query: buildAttributeQuery(searchAttribute),
9
+ return_type: returnType,
10
+ request_options: requestOptions
11
+ };
12
+ }
13
+ exports.buildRequestFromAttribute = buildRequestFromAttribute;
14
+ function buildRequestFromAttributeAndSearchQuery(searchAttribute, searchQuery, returnType, logicalOperator = SearchEnums_1.LogicalOperator.And, requestOptions) {
15
+ return {
16
+ query: addAttributeToSearchQuery(searchAttribute, searchQuery, logicalOperator),
17
+ return_type: returnType,
18
+ request_options: requestOptions
19
+ };
20
+ }
21
+ exports.buildRequestFromAttributeAndSearchQuery = buildRequestFromAttributeAndSearchQuery;
22
+ function buildRequestFromCombinedSearchQuery(additionalSearchQuery, searchQuery, returnType, logicalOperator = SearchEnums_1.LogicalOperator.And, requestOptions) {
23
+ return {
24
+ query: combineSearchQuery(additionalSearchQuery, searchQuery),
25
+ return_type: returnType,
26
+ request_options: requestOptions
27
+ };
28
+ }
29
+ exports.buildRequestFromCombinedSearchQuery = buildRequestFromCombinedSearchQuery;
30
+ function buildRequestFromSearchQuery(searchQuery, returnType, requestOptions) {
31
+ return {
32
+ query: searchQuery,
33
+ return_type: returnType,
34
+ request_options: requestOptions
35
+ };
36
+ }
37
+ exports.buildRequestFromSearchQuery = buildRequestFromSearchQuery;
38
+ function addAttributeToSearchQuery(searchAttribute, searchQuery, logicalOperator = SearchEnums_1.LogicalOperator.And) {
39
+ return combineSearchQuery(buildAttributeQuery(searchAttribute), searchQuery, logicalOperator);
40
+ }
41
+ exports.addAttributeToSearchQuery = addAttributeToSearchQuery;
42
+ function combineSearchQuery(additionalSearchQuery, searchQuery, logicalOperator = SearchEnums_1.LogicalOperator.And) {
43
+ if (searchQuery.type === SearchEnums_1.Type.Group && searchQuery.logical_operator === logicalOperator) {
44
+ const query = (0, lodash_1.cloneDeep)(searchQuery);
45
+ query.nodes.push(additionalSearchQuery);
46
+ return query;
47
+ }
48
+ return {
49
+ type: SearchEnums_1.Type.Group,
50
+ logical_operator: logicalOperator,
51
+ nodes: [
52
+ searchQuery,
53
+ additionalSearchQuery
54
+ ]
55
+ };
56
+ }
57
+ exports.combineSearchQuery = combineSearchQuery;
58
+ function buildAttributeQuery(searchAttribute) {
59
+ return {
60
+ type: SearchEnums_1.Type.Terminal,
61
+ service: searchAttribute.service,
62
+ parameters: {
63
+ attribute: searchAttribute.attribute,
64
+ negation: typeof searchAttribute.negation === "boolean" ? searchAttribute.negation : false,
65
+ operator: searchAttribute.operator,
66
+ value: searchAttribute.value
67
+ }
68
+ };
69
+ }
70
+ exports.buildAttributeQuery = buildAttributeQuery;
package/lib/app.js ADDED
File without changes
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@rcsb/rcsb-search-tools",
3
+ "version": "0.0.1",
4
+ "description": "RCSB PDB Search API request tools",
5
+ "main": "build/app.js",
6
+ "files": [
7
+ "lib"
8
+ ],
9
+ "scripts": {
10
+ "test": "jest",
11
+ "tsc": "tsc",
12
+ "publishApp": "npm publish"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git://github.com/rcsb/rcsb-search-tools.git"
17
+ },
18
+ "publishConfig": {
19
+ "registry": "https://registry.npmjs.org/"
20
+ },
21
+ "author": "Joan Segura Mora",
22
+ "license": "MIT",
23
+ "devDependencies": {
24
+ "@babel/core": "^7.18.9",
25
+ "@babel/preset-env": "^7.18.9",
26
+ "@types/jest": "^29.5.1",
27
+ "@types/lodash": "^4.14.194",
28
+ "@types/node-fetch": "^2.6.2",
29
+ "babel-loader": "^9.1.2",
30
+ "jest": "^29.5.0",
31
+ "lodash": "^4.17.21",
32
+ "node-fetch": "^2.6.7",
33
+ "ts-jest": "^29.1.0",
34
+ "ts-loader": "^9.3.1",
35
+ "ts-node": "^10.9.1",
36
+ "typescript": "^5.0.4",
37
+ "webpack": "^5.74.0",
38
+ "webpack-cli": "^5.1.1"
39
+ },
40
+ "dependencies": {
41
+ "@rcsb/rcsb-api-tools": "^4.1.5"
42
+ }
43
+ }