@yangfei_93sky/biocli 0.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/LICENSE +21 -0
- package/README.md +197 -0
- package/dist/batch.d.ts +20 -0
- package/dist/batch.js +69 -0
- package/dist/build-manifest.d.ts +38 -0
- package/dist/build-manifest.js +186 -0
- package/dist/cache.d.ts +28 -0
- package/dist/cache.js +126 -0
- package/dist/cli-manifest.json +1500 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +336 -0
- package/dist/clis/_shared/common.d.ts +8 -0
- package/dist/clis/_shared/common.js +13 -0
- package/dist/clis/_shared/eutils.d.ts +9 -0
- package/dist/clis/_shared/eutils.js +9 -0
- package/dist/clis/_shared/organism-db.d.ts +23 -0
- package/dist/clis/_shared/organism-db.js +58 -0
- package/dist/clis/_shared/xml-helpers.d.ts +58 -0
- package/dist/clis/_shared/xml-helpers.js +266 -0
- package/dist/clis/aggregate/enrichment.d.ts +7 -0
- package/dist/clis/aggregate/enrichment.js +105 -0
- package/dist/clis/aggregate/gene-dossier.d.ts +13 -0
- package/dist/clis/aggregate/gene-dossier.js +248 -0
- package/dist/clis/aggregate/gene-profile.d.ts +16 -0
- package/dist/clis/aggregate/gene-profile.js +305 -0
- package/dist/clis/aggregate/literature-brief.d.ts +7 -0
- package/dist/clis/aggregate/literature-brief.js +79 -0
- package/dist/clis/aggregate/variant-dossier.d.ts +11 -0
- package/dist/clis/aggregate/variant-dossier.js +161 -0
- package/dist/clis/aggregate/variant-interpret.d.ts +10 -0
- package/dist/clis/aggregate/variant-interpret.js +210 -0
- package/dist/clis/aggregate/workflow-prepare.d.ts +12 -0
- package/dist/clis/aggregate/workflow-prepare.js +228 -0
- package/dist/clis/aggregate/workflow-scout.d.ts +13 -0
- package/dist/clis/aggregate/workflow-scout.js +175 -0
- package/dist/clis/clinvar/search.d.ts +8 -0
- package/dist/clis/clinvar/search.js +61 -0
- package/dist/clis/clinvar/variant.d.ts +7 -0
- package/dist/clis/clinvar/variant.js +53 -0
- package/dist/clis/enrichr/analyze.d.ts +7 -0
- package/dist/clis/enrichr/analyze.js +48 -0
- package/dist/clis/ensembl/lookup.d.ts +6 -0
- package/dist/clis/ensembl/lookup.js +38 -0
- package/dist/clis/ensembl/vep.d.ts +7 -0
- package/dist/clis/ensembl/vep.js +86 -0
- package/dist/clis/ensembl/xrefs.d.ts +6 -0
- package/dist/clis/ensembl/xrefs.js +36 -0
- package/dist/clis/gene/fetch.d.ts +10 -0
- package/dist/clis/gene/fetch.js +96 -0
- package/dist/clis/gene/info.d.ts +7 -0
- package/dist/clis/gene/info.js +37 -0
- package/dist/clis/gene/search.d.ts +7 -0
- package/dist/clis/gene/search.js +71 -0
- package/dist/clis/geo/dataset.d.ts +7 -0
- package/dist/clis/geo/dataset.js +55 -0
- package/dist/clis/geo/download.d.ts +17 -0
- package/dist/clis/geo/download.js +115 -0
- package/dist/clis/geo/samples.d.ts +7 -0
- package/dist/clis/geo/samples.js +57 -0
- package/dist/clis/geo/search.d.ts +8 -0
- package/dist/clis/geo/search.js +66 -0
- package/dist/clis/kegg/convert.d.ts +7 -0
- package/dist/clis/kegg/convert.js +37 -0
- package/dist/clis/kegg/disease.d.ts +6 -0
- package/dist/clis/kegg/disease.js +57 -0
- package/dist/clis/kegg/link.d.ts +7 -0
- package/dist/clis/kegg/link.js +36 -0
- package/dist/clis/kegg/pathway.d.ts +6 -0
- package/dist/clis/kegg/pathway.js +37 -0
- package/dist/clis/pubmed/abstract.d.ts +7 -0
- package/dist/clis/pubmed/abstract.js +42 -0
- package/dist/clis/pubmed/cited-by.d.ts +7 -0
- package/dist/clis/pubmed/cited-by.js +77 -0
- package/dist/clis/pubmed/fetch.d.ts +6 -0
- package/dist/clis/pubmed/fetch.js +36 -0
- package/dist/clis/pubmed/info.yaml +22 -0
- package/dist/clis/pubmed/related.d.ts +7 -0
- package/dist/clis/pubmed/related.js +81 -0
- package/dist/clis/pubmed/search.d.ts +8 -0
- package/dist/clis/pubmed/search.js +63 -0
- package/dist/clis/snp/lookup.d.ts +7 -0
- package/dist/clis/snp/lookup.js +57 -0
- package/dist/clis/sra/download.d.ts +18 -0
- package/dist/clis/sra/download.js +217 -0
- package/dist/clis/sra/run.d.ts +8 -0
- package/dist/clis/sra/run.js +77 -0
- package/dist/clis/sra/search.d.ts +8 -0
- package/dist/clis/sra/search.js +83 -0
- package/dist/clis/string/enrichment.d.ts +7 -0
- package/dist/clis/string/enrichment.js +50 -0
- package/dist/clis/string/network.d.ts +7 -0
- package/dist/clis/string/network.js +47 -0
- package/dist/clis/string/partners.d.ts +4 -0
- package/dist/clis/string/partners.js +44 -0
- package/dist/clis/taxonomy/lookup.d.ts +8 -0
- package/dist/clis/taxonomy/lookup.js +54 -0
- package/dist/clis/uniprot/fetch.d.ts +7 -0
- package/dist/clis/uniprot/fetch.js +82 -0
- package/dist/clis/uniprot/search.d.ts +6 -0
- package/dist/clis/uniprot/search.js +65 -0
- package/dist/clis/uniprot/sequence.d.ts +7 -0
- package/dist/clis/uniprot/sequence.js +51 -0
- package/dist/commander-adapter.d.ts +27 -0
- package/dist/commander-adapter.js +286 -0
- package/dist/completion.d.ts +19 -0
- package/dist/completion.js +117 -0
- package/dist/config.d.ts +57 -0
- package/dist/config.js +94 -0
- package/dist/databases/enrichr.d.ts +28 -0
- package/dist/databases/enrichr.js +131 -0
- package/dist/databases/ensembl.d.ts +14 -0
- package/dist/databases/ensembl.js +106 -0
- package/dist/databases/index.d.ts +45 -0
- package/dist/databases/index.js +49 -0
- package/dist/databases/kegg.d.ts +26 -0
- package/dist/databases/kegg.js +136 -0
- package/dist/databases/ncbi.d.ts +28 -0
- package/dist/databases/ncbi.js +144 -0
- package/dist/databases/string-db.d.ts +19 -0
- package/dist/databases/string-db.js +105 -0
- package/dist/databases/uniprot.d.ts +13 -0
- package/dist/databases/uniprot.js +110 -0
- package/dist/discovery.d.ts +32 -0
- package/dist/discovery.js +235 -0
- package/dist/doctor.d.ts +19 -0
- package/dist/doctor.js +151 -0
- package/dist/errors.d.ts +68 -0
- package/dist/errors.js +105 -0
- package/dist/execution.d.ts +15 -0
- package/dist/execution.js +178 -0
- package/dist/hooks.d.ts +48 -0
- package/dist/hooks.js +58 -0
- package/dist/main.d.ts +13 -0
- package/dist/main.js +31 -0
- package/dist/ncbi-fetch.d.ts +10 -0
- package/dist/ncbi-fetch.js +10 -0
- package/dist/output.d.ts +18 -0
- package/dist/output.js +394 -0
- package/dist/pipeline/executor.d.ts +22 -0
- package/dist/pipeline/executor.js +40 -0
- package/dist/pipeline/index.d.ts +6 -0
- package/dist/pipeline/index.js +6 -0
- package/dist/pipeline/registry.d.ts +16 -0
- package/dist/pipeline/registry.js +31 -0
- package/dist/pipeline/steps/fetch.d.ts +21 -0
- package/dist/pipeline/steps/fetch.js +160 -0
- package/dist/pipeline/steps/transform.d.ts +26 -0
- package/dist/pipeline/steps/transform.js +92 -0
- package/dist/pipeline/steps/xml-parse.d.ts +12 -0
- package/dist/pipeline/steps/xml-parse.js +27 -0
- package/dist/pipeline/template.d.ts +35 -0
- package/dist/pipeline/template.js +312 -0
- package/dist/rate-limiter.d.ts +56 -0
- package/dist/rate-limiter.js +120 -0
- package/dist/registry-api.d.ts +15 -0
- package/dist/registry-api.js +13 -0
- package/dist/registry.d.ts +90 -0
- package/dist/registry.js +100 -0
- package/dist/schema.d.ts +80 -0
- package/dist/schema.js +72 -0
- package/dist/spinner.d.ts +19 -0
- package/dist/spinner.js +37 -0
- package/dist/types.d.ts +101 -0
- package/dist/types.js +27 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.js +40 -0
- package/dist/validate.d.ts +29 -0
- package/dist/validate.js +136 -0
- package/dist/verify.d.ts +20 -0
- package/dist/verify.js +131 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.js +36 -0
- package/dist/xml-parser.d.ts +19 -0
- package/dist/xml-parser.js +119 -0
- package/dist/yaml-schema.d.ts +40 -0
- package/dist/yaml-schema.js +62 -0
- package/package.json +68 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML parsing wrapper for NCBI responses.
|
|
3
|
+
*
|
|
4
|
+
* Uses fast-xml-parser with NCBI-specific configuration:
|
|
5
|
+
* - Attributes are preserved with '@_' prefix
|
|
6
|
+
* - Text nodes use '#text' key
|
|
7
|
+
* - Known NCBI elements that can repeat are always parsed as arrays
|
|
8
|
+
* (even when only a single element is present in the response)
|
|
9
|
+
*/
|
|
10
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
11
|
+
/**
|
|
12
|
+
* Set of NCBI XML element names that should always be parsed as arrays.
|
|
13
|
+
*
|
|
14
|
+
* When only a single child element exists, fast-xml-parser would normally
|
|
15
|
+
* return it as a scalar. Listing these tags here ensures they are always
|
|
16
|
+
* wrapped in an array, making downstream code simpler and more robust.
|
|
17
|
+
*/
|
|
18
|
+
const ARRAY_TAGS = new Set([
|
|
19
|
+
// PubMed
|
|
20
|
+
'PubmedArticle',
|
|
21
|
+
'PubmedBookArticle',
|
|
22
|
+
'Author',
|
|
23
|
+
'MeshHeading',
|
|
24
|
+
'Chemical',
|
|
25
|
+
'PublicationType',
|
|
26
|
+
'ArticleId',
|
|
27
|
+
'Keyword',
|
|
28
|
+
'Grant',
|
|
29
|
+
'Reference',
|
|
30
|
+
'ReferenceList',
|
|
31
|
+
'AbstractText',
|
|
32
|
+
'Affiliation',
|
|
33
|
+
'AffiliationInfo',
|
|
34
|
+
'Investigator',
|
|
35
|
+
'DataBank',
|
|
36
|
+
'AccessionNumber',
|
|
37
|
+
'CommentsCorrections',
|
|
38
|
+
// E-utilities generic
|
|
39
|
+
'Id',
|
|
40
|
+
'Item',
|
|
41
|
+
'Link',
|
|
42
|
+
'LinkSet',
|
|
43
|
+
'IdList',
|
|
44
|
+
'TranslationStack',
|
|
45
|
+
'TranslationSet',
|
|
46
|
+
'FieldList',
|
|
47
|
+
// Gene / Nucleotide / Protein
|
|
48
|
+
'Entrezgene',
|
|
49
|
+
'GBSeq',
|
|
50
|
+
'GBFeature',
|
|
51
|
+
'GBQualifier',
|
|
52
|
+
'GBReference',
|
|
53
|
+
'GBAuthor',
|
|
54
|
+
// GEO
|
|
55
|
+
'Series',
|
|
56
|
+
'Sample',
|
|
57
|
+
'Platform',
|
|
58
|
+
// SRA
|
|
59
|
+
'EXPERIMENT_PACKAGE',
|
|
60
|
+
'RUN',
|
|
61
|
+
// Taxonomy
|
|
62
|
+
'Taxon',
|
|
63
|
+
'LineageEx',
|
|
64
|
+
]);
|
|
65
|
+
/**
|
|
66
|
+
* Decode numeric HTML/XML character references: &#xHH; and &#DDD;
|
|
67
|
+
*
|
|
68
|
+
* fast-xml-parser decodes the standard 5 XML entities (& < > ' ")
|
|
69
|
+
* but does NOT decode numeric character references (ń β etc.).
|
|
70
|
+
* NCBI XML frequently uses these for accented characters in author names.
|
|
71
|
+
*/
|
|
72
|
+
function decodeHtmlEntities(text) {
|
|
73
|
+
return text.replace(/&#x([0-9a-fA-F]+);/g, (_m, hex) => String.fromCodePoint(parseInt(hex, 16))).replace(/&#(\d+);/g, (_m, dec) => String.fromCodePoint(parseInt(dec, 10)));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Inline markup tags that appear inside PubMed text fields.
|
|
77
|
+
* Stripped from raw XML before parsing to prevent text loss.
|
|
78
|
+
*/
|
|
79
|
+
const INLINE_TAG_RE = /<\/?(i|b|u|sup|sub|em|strong|italic|bold)(\s[^>]*)?\/?>/gi;
|
|
80
|
+
const defaultParser = new XMLParser({
|
|
81
|
+
ignoreAttributes: false,
|
|
82
|
+
attributeNamePrefix: '@_',
|
|
83
|
+
textNodeName: '#text',
|
|
84
|
+
isArray: (_name, _jPath, isLeafNode, isAttribute) => {
|
|
85
|
+
if (isAttribute)
|
|
86
|
+
return false;
|
|
87
|
+
// Extract the tag name from the jPath (last segment)
|
|
88
|
+
const tagName = _name;
|
|
89
|
+
return ARRAY_TAGS.has(tagName);
|
|
90
|
+
},
|
|
91
|
+
trimValues: true,
|
|
92
|
+
parseAttributeValue: true,
|
|
93
|
+
parseTagValue: true,
|
|
94
|
+
tagValueProcessor: (_tagName, tagValue) => {
|
|
95
|
+
if (typeof tagValue === 'string')
|
|
96
|
+
return decodeHtmlEntities(tagValue);
|
|
97
|
+
return tagValue;
|
|
98
|
+
},
|
|
99
|
+
attributeValueProcessor: (_attrName, attrValue) => {
|
|
100
|
+
if (typeof attrValue === 'string')
|
|
101
|
+
return decodeHtmlEntities(attrValue);
|
|
102
|
+
return attrValue;
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* Parse an XML string into a JavaScript object using NCBI-tuned settings.
|
|
107
|
+
*
|
|
108
|
+
* Pre-strips inline markup tags (<i>, <b>, <sup>, etc.) so their text
|
|
109
|
+
* content is preserved in the parent element's #text node.
|
|
110
|
+
*
|
|
111
|
+
* @param xml Raw XML response body from NCBI.
|
|
112
|
+
* @returns Parsed object tree.
|
|
113
|
+
*/
|
|
114
|
+
export function parseXml(xml) {
|
|
115
|
+
// Strip inline formatting tags before parsing to prevent text loss.
|
|
116
|
+
// e.g. "The Role of<i>TP53</i>in cancer" → "The Role of TP53 in cancer"
|
|
117
|
+
const cleaned = xml.replace(INLINE_TAG_RE, '');
|
|
118
|
+
return defaultParser.parse(cleaned);
|
|
119
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared YAML CLI definition types.
|
|
3
|
+
* Used by both discovery.ts (runtime) and build-manifest.ts (build-time).
|
|
4
|
+
*
|
|
5
|
+
* Also provides parseYamlCli() which converts a raw YAML object into a
|
|
6
|
+
* CliCommand and registers it via cli().
|
|
7
|
+
*/
|
|
8
|
+
import type { Arg } from './registry.js';
|
|
9
|
+
export interface YamlArgDefinition {
|
|
10
|
+
type?: string;
|
|
11
|
+
default?: unknown;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
positional?: boolean;
|
|
14
|
+
description?: string;
|
|
15
|
+
help?: string;
|
|
16
|
+
choices?: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface YamlCliDefinition {
|
|
19
|
+
site?: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
database?: string;
|
|
23
|
+
strategy?: string;
|
|
24
|
+
args?: Record<string, YamlArgDefinition>;
|
|
25
|
+
columns?: string[];
|
|
26
|
+
pipeline?: Record<string, unknown>[];
|
|
27
|
+
timeout?: number;
|
|
28
|
+
defaultFormat?: string;
|
|
29
|
+
aliases?: string[];
|
|
30
|
+
}
|
|
31
|
+
/** Convert YAML args definition to the internal Arg[] format. */
|
|
32
|
+
export declare function parseYamlArgs(args: Record<string, YamlArgDefinition> | undefined): Arg[];
|
|
33
|
+
/**
|
|
34
|
+
* Parse a raw YAML object into a CliCommand and register it.
|
|
35
|
+
*
|
|
36
|
+
* @param raw Parsed YAML object (from js-yaml.load)
|
|
37
|
+
* @param source File path or identifier for debugging
|
|
38
|
+
* @param defaultSite Fallback site name if not specified in YAML (e.g. derived from directory name)
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseYamlCli(raw: YamlCliDefinition, source: string, defaultSite?: string): void;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared YAML CLI definition types.
|
|
3
|
+
* Used by both discovery.ts (runtime) and build-manifest.ts (build-time).
|
|
4
|
+
*
|
|
5
|
+
* Also provides parseYamlCli() which converts a raw YAML object into a
|
|
6
|
+
* CliCommand and registers it via cli().
|
|
7
|
+
*/
|
|
8
|
+
import { cli, Strategy } from './registry.js';
|
|
9
|
+
// ── Arg normalizer ──────────────────────────────────────────────────────────
|
|
10
|
+
/** Convert YAML args definition to the internal Arg[] format. */
|
|
11
|
+
export function parseYamlArgs(args) {
|
|
12
|
+
if (!args || typeof args !== 'object')
|
|
13
|
+
return [];
|
|
14
|
+
const result = [];
|
|
15
|
+
for (const [argName, argDef] of Object.entries(args)) {
|
|
16
|
+
result.push({
|
|
17
|
+
name: argName,
|
|
18
|
+
type: argDef?.type ?? 'str',
|
|
19
|
+
default: argDef?.default,
|
|
20
|
+
required: argDef?.required ?? false,
|
|
21
|
+
positional: argDef?.positional ?? false,
|
|
22
|
+
help: argDef?.description ?? argDef?.help ?? '',
|
|
23
|
+
choices: argDef?.choices,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
// ── YAML → CliCommand ───────────────────────────────────────────────────────
|
|
29
|
+
function parseStrategy(rawStrategy) {
|
|
30
|
+
if (!rawStrategy)
|
|
31
|
+
return Strategy.PUBLIC;
|
|
32
|
+
const upper = rawStrategy.toUpperCase();
|
|
33
|
+
if (upper === 'API_KEY')
|
|
34
|
+
return Strategy.API_KEY;
|
|
35
|
+
return Strategy.PUBLIC;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse a raw YAML object into a CliCommand and register it.
|
|
39
|
+
*
|
|
40
|
+
* @param raw Parsed YAML object (from js-yaml.load)
|
|
41
|
+
* @param source File path or identifier for debugging
|
|
42
|
+
* @param defaultSite Fallback site name if not specified in YAML (e.g. derived from directory name)
|
|
43
|
+
*/
|
|
44
|
+
export function parseYamlCli(raw, source, defaultSite) {
|
|
45
|
+
const site = raw.site ?? defaultSite ?? 'unknown';
|
|
46
|
+
const name = raw.name ?? source.replace(/\.(yaml|yml)$/, '').split('/').pop() ?? 'unnamed';
|
|
47
|
+
const strategy = parseStrategy(raw.strategy);
|
|
48
|
+
const args = parseYamlArgs(raw.args);
|
|
49
|
+
cli({
|
|
50
|
+
site,
|
|
51
|
+
name,
|
|
52
|
+
aliases: raw.aliases,
|
|
53
|
+
description: raw.description,
|
|
54
|
+
database: raw.database,
|
|
55
|
+
strategy,
|
|
56
|
+
args,
|
|
57
|
+
columns: raw.columns,
|
|
58
|
+
pipeline: raw.pipeline,
|
|
59
|
+
timeoutSeconds: raw.timeout,
|
|
60
|
+
defaultFormat: raw.defaultFormat,
|
|
61
|
+
});
|
|
62
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yangfei_93sky/biocli",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Query biological databases from the terminal — agent-first bioinformatics CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/main.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md",
|
|
10
|
+
"LICENSE"
|
|
11
|
+
],
|
|
12
|
+
"bin": {
|
|
13
|
+
"biocli": "dist/main.js",
|
|
14
|
+
"ncbicli": "dist/main.js"
|
|
15
|
+
},
|
|
16
|
+
"exports": {
|
|
17
|
+
".": "./dist/main.js",
|
|
18
|
+
"./registry": "./dist/registry-api.js"
|
|
19
|
+
},
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=20.0.0"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"dev": "tsx src/main.ts",
|
|
25
|
+
"build": "npm run clean-dist && tsc -p tsconfig.build.json && npm run clean-yaml && npm run copy-yaml && npm run build-manifest",
|
|
26
|
+
"build-manifest": "node dist/build-manifest.js",
|
|
27
|
+
"clean-dist": "node scripts/clean-dist.cjs",
|
|
28
|
+
"clean-yaml": "node scripts/clean-yaml.cjs",
|
|
29
|
+
"copy-yaml": "node scripts/copy-yaml.cjs",
|
|
30
|
+
"start": "node dist/main.js",
|
|
31
|
+
"postinstall": "node scripts/postinstall.cjs || true",
|
|
32
|
+
"typecheck": "tsc --noEmit",
|
|
33
|
+
"lint": "tsc --noEmit",
|
|
34
|
+
"prepublishOnly": "npm run build",
|
|
35
|
+
"test": "vitest run --project unit --passWithNoTests",
|
|
36
|
+
"test:adapter": "vitest run --project adapter --passWithNoTests",
|
|
37
|
+
"test:e2e": "vitest run --project e2e --passWithNoTests",
|
|
38
|
+
"test:smoke": "vitest run --project smoke --passWithNoTests",
|
|
39
|
+
"test:all": "vitest run --passWithNoTests",
|
|
40
|
+
"smoke:core": "bash scripts/smoke-core.sh",
|
|
41
|
+
"smoke:live": "bash scripts/smoke-live.sh"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"ncbi",
|
|
45
|
+
"pubmed",
|
|
46
|
+
"bioinformatics",
|
|
47
|
+
"cli",
|
|
48
|
+
"gene",
|
|
49
|
+
"geo",
|
|
50
|
+
"sra"
|
|
51
|
+
],
|
|
52
|
+
"author": "",
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"chalk": "^5.3.0",
|
|
56
|
+
"cli-table3": "^0.6.5",
|
|
57
|
+
"commander": "^14.0.3",
|
|
58
|
+
"fast-xml-parser": "^4.5.0",
|
|
59
|
+
"js-yaml": "^4.1.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/js-yaml": "^4.0.9",
|
|
63
|
+
"@types/node": "^22.13.10",
|
|
64
|
+
"tsx": "^4.19.3",
|
|
65
|
+
"typescript": "^6.0.2",
|
|
66
|
+
"vitest": "^4.1.0"
|
|
67
|
+
}
|
|
68
|
+
}
|