p2s_mapper 1.4.0 → 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.
Files changed (134) hide show
  1. package/README.md +220 -39
  2. package/dist/alignmentQuality.d.ts +5 -5
  3. package/dist/alphaFoldModels.d.ts +4 -4
  4. package/dist/alphaFoldModels.js +4 -4
  5. package/dist/chooseMappedEntity.d.ts +11 -13
  6. package/dist/chooseMappedEntity.js +9 -12
  7. package/dist/chooseMappedEntity.js.map +1 -1
  8. package/dist/coordinates.d.ts +19 -19
  9. package/dist/coordinates.js.map +1 -1
  10. package/dist/dbIds.d.ts +1 -2
  11. package/dist/extractPerResidueConfidence.d.ts +1 -2
  12. package/dist/extractStructureSequences.d.ts +26 -34
  13. package/dist/extractStructureSequences.js +2 -2
  14. package/dist/extractStructureSequences.js.map +1 -1
  15. package/dist/fetchUtils.d.ts +7 -7
  16. package/dist/fetchUtils.js +26 -8
  17. package/dist/fetchUtils.js.map +1 -1
  18. package/dist/index.d.ts +1 -3
  19. package/dist/index.js +2 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/isoformRanking.d.ts +4 -1
  22. package/dist/mappings.d.ts +9 -12
  23. package/dist/mappings.js +4 -5
  24. package/dist/mappings.js.map +1 -1
  25. package/dist/pairwiseAlignment.d.ts +5 -4
  26. package/dist/pairwiseAlignment.js +9 -7
  27. package/dist/pairwiseAlignment.js.map +1 -1
  28. package/dist/pdbEntry.d.ts +32 -0
  29. package/dist/pdbEntry.js +182 -0
  30. package/dist/pdbEntry.js.map +1 -0
  31. package/dist/pdbUniProtMapping.d.ts +14 -39
  32. package/dist/pdbUniProtMapping.js +22 -140
  33. package/dist/pdbUniProtMapping.js.map +1 -1
  34. package/dist/structureFormat.d.ts +11 -18
  35. package/dist/structureFormat.js +4 -6
  36. package/dist/structureFormat.js.map +1 -1
  37. package/dist/structureSources.d.ts +37 -13
  38. package/dist/structureSources.js +144 -57
  39. package/dist/structureSources.js.map +1 -1
  40. package/dist/structureUrls.d.ts +13 -16
  41. package/dist/structureUrls.js +25 -23
  42. package/dist/structureUrls.js.map +1 -1
  43. package/dist/types.d.ts +2 -5
  44. package/dist/types.js +2 -5
  45. package/dist/types.js.map +1 -1
  46. package/dist/uniProtSearch.js +3 -8
  47. package/dist/uniProtSearch.js.map +1 -1
  48. package/esm/alignmentQuality.d.ts +5 -5
  49. package/esm/alphaFoldModels.d.ts +4 -4
  50. package/esm/alphaFoldModels.js +4 -4
  51. package/esm/chooseMappedEntity.d.ts +11 -13
  52. package/esm/chooseMappedEntity.js +9 -12
  53. package/esm/chooseMappedEntity.js.map +1 -1
  54. package/esm/coordinates.d.ts +19 -19
  55. package/esm/coordinates.js.map +1 -1
  56. package/esm/dbIds.d.ts +1 -2
  57. package/esm/extractPerResidueConfidence.d.ts +1 -2
  58. package/esm/extractStructureSequences.d.ts +26 -34
  59. package/esm/extractStructureSequences.js +2 -2
  60. package/esm/extractStructureSequences.js.map +1 -1
  61. package/esm/fetchUtils.d.ts +7 -7
  62. package/esm/fetchUtils.js +26 -8
  63. package/esm/fetchUtils.js.map +1 -1
  64. package/esm/index.d.ts +1 -3
  65. package/esm/index.js +2 -4
  66. package/esm/index.js.map +1 -1
  67. package/esm/isoformRanking.d.ts +4 -1
  68. package/esm/mappings.d.ts +9 -12
  69. package/esm/mappings.js +4 -5
  70. package/esm/mappings.js.map +1 -1
  71. package/esm/pairwiseAlignment.d.ts +5 -4
  72. package/esm/pairwiseAlignment.js +7 -5
  73. package/esm/pairwiseAlignment.js.map +1 -1
  74. package/esm/pdbEntry.d.ts +32 -0
  75. package/esm/pdbEntry.js +174 -0
  76. package/esm/pdbEntry.js.map +1 -0
  77. package/esm/pdbUniProtMapping.d.ts +14 -39
  78. package/esm/pdbUniProtMapping.js +22 -137
  79. package/esm/pdbUniProtMapping.js.map +1 -1
  80. package/esm/structureFormat.d.ts +11 -18
  81. package/esm/structureFormat.js +4 -6
  82. package/esm/structureFormat.js.map +1 -1
  83. package/esm/structureSources.d.ts +37 -13
  84. package/esm/structureSources.js +139 -55
  85. package/esm/structureSources.js.map +1 -1
  86. package/esm/structureUrls.d.ts +13 -16
  87. package/esm/structureUrls.js +23 -23
  88. package/esm/structureUrls.js.map +1 -1
  89. package/esm/types.d.ts +2 -5
  90. package/esm/types.js +2 -5
  91. package/esm/types.js.map +1 -1
  92. package/esm/uniProtSearch.js +3 -8
  93. package/esm/uniProtSearch.js.map +1 -1
  94. package/package.json +3 -2
  95. package/src/alignmentQuality.ts +5 -5
  96. package/src/alphaFoldModels.ts +4 -4
  97. package/src/chooseMappedEntity.ts +12 -15
  98. package/src/coordinates.ts +14 -17
  99. package/src/dbIds.ts +1 -1
  100. package/src/extractPerResidueConfidence.ts +1 -1
  101. package/src/extractStructureSequences.ts +26 -33
  102. package/src/fetchUtils.ts +30 -8
  103. package/src/index.ts +2 -4
  104. package/src/isoformRanking.ts +4 -4
  105. package/src/mappings.ts +9 -12
  106. package/src/pairwiseAlignment.ts +12 -9
  107. package/src/pdbEntry.ts +240 -0
  108. package/src/pdbUniProtMapping.ts +25 -164
  109. package/src/structureFormat.ts +11 -18
  110. package/src/structureSources.ts +194 -70
  111. package/src/structureUrls.ts +25 -23
  112. package/src/types.ts +2 -5
  113. package/src/uniProtSearch.ts +3 -8
  114. package/dist/pdbeBestStructures.d.ts +0 -23
  115. package/dist/pdbeBestStructures.js +0 -79
  116. package/dist/pdbeBestStructures.js.map +0 -1
  117. package/dist/pdbeEntryMolecules.d.ts +0 -7
  118. package/dist/pdbeEntryMolecules.js +0 -39
  119. package/dist/pdbeEntryMolecules.js.map +0 -1
  120. package/dist/siftsNumbering.d.ts +0 -23
  121. package/dist/siftsNumbering.js +0 -44
  122. package/dist/siftsNumbering.js.map +0 -1
  123. package/esm/pdbeBestStructures.d.ts +0 -23
  124. package/esm/pdbeBestStructures.js +0 -73
  125. package/esm/pdbeBestStructures.js.map +0 -1
  126. package/esm/pdbeEntryMolecules.d.ts +0 -7
  127. package/esm/pdbeEntryMolecules.js +0 -35
  128. package/esm/pdbeEntryMolecules.js.map +0 -1
  129. package/esm/siftsNumbering.d.ts +0 -23
  130. package/esm/siftsNumbering.js +0 -40
  131. package/esm/siftsNumbering.js.map +0 -1
  132. package/src/pdbeBestStructures.ts +0 -94
  133. package/src/pdbeEntryMolecules.ts +0 -37
  134. package/src/siftsNumbering.ts +0 -61
@@ -1,6 +1,8 @@
1
1
  import type { FetchOptions } from './fetchUtils.ts';
2
+ export declare const RCSB_SEQUENCE_COORDINATES_URL = "https://sequence-coordinates.rcsb.org/graphql";
2
3
  export interface ExperimentalStructure {
3
4
  pdbId: string;
5
+ /** RCSB's name for it: 'X-ray', 'EM', 'NMR', ... */
4
6
  method: string;
5
7
  /** Å; absent for NMR and some EM entries */
6
8
  resolution?: number;
@@ -9,20 +11,42 @@ export interface ExperimentalStructure {
9
11
  end: number;
10
12
  /** fraction of the UniProt sequence the entry covers, 0..1 */
11
13
  coverage: number;
14
+ /** author chain ids of the protein */
15
+ chains: string[];
12
16
  }
13
- export declare function beaconsSummaryUrl(uniprotId: string): string;
17
+ /** One polymer entity aligned to the accession. */
18
+ export interface EntityAlignment {
19
+ /** RCSB's id, "1TUP_3" */
20
+ entityId: string;
21
+ pdbId: string;
22
+ start: number;
23
+ end: number;
24
+ coverage: number;
25
+ }
26
+ export interface EntityDetails {
27
+ method: string;
28
+ resolution?: number;
29
+ chains: string[];
30
+ }
31
+ export declare function entityAlignmentsQuery(uniprotId: string): string;
32
+ export declare const ENTITY_DETAILS_QUERY = "query($ids: [String!]!) { polymer_entities(entity_ids: $ids) {\n rcsb_id\n rcsb_polymer_entity_container_identifiers { auth_asym_ids }\n entry { rcsb_entry_info { experimental_method resolution_combined } }\n} }";
33
+ /**
34
+ * PDB entities only: the same list carries RCSB's computed models
35
+ * (`AF_AFP04637F1_1`), which a residue mapping does not exist for. The range
36
+ * spans every aligned region, as 3D-Beacons reported it.
37
+ */
38
+ export declare function parseEntityAlignments(data: unknown): EntityAlignment[];
39
+ export declare function parseEntityDetails(data: unknown): Map<string, EntityDetails>;
40
+ /**
41
+ * One row per entry, best coverage first and sharpest within a tie. An entry
42
+ * with several entities of the protein (a construct crystallised beside a
43
+ * different fragment of itself) takes the best-covering entity's range and
44
+ * every entity's chains.
45
+ */
46
+ export declare function experimentalStructures(alignments: EntityAlignment[], details: ReadonlyMap<string, EntityDetails>): ExperimentalStructure[];
14
47
  /**
15
- * PDBe entries only, best-covering first and sharpest within a tie.
16
- *
17
- * Predicted entries (AlphaFold, SWISS-MODEL, AlphaFill) are left out because a
18
- * prediction comes from AlphaFold's own API, which answers per model. And
19
- * 3D-Beacons files SASBDB's small-angle-scattering fits under "experimentally
20
- * determined" too, with numeric ids and near-full coverage — dystrophin's best
21
- * "structure" by coverage was SASBDB 436 — which are not entries a residue
22
- * mapping exists for. Hence the `provider === 'PDBe'` gate rather than the
23
- * category alone.
48
+ * Every PDB entry aligned to the accession. An accession with none, or one
49
+ * RCSB does not know, is `[]`; an isoform accession is asked as its entry,
50
+ * which is what the alignment is numbered on.
24
51
  */
25
- export declare function parseExperimentalStructures(json: unknown): ExperimentalStructure[];
26
- /** Best-effort: an unreachable API reads as "no entries", which costs a
27
- * structure suggestion and nothing else. */
28
52
  export declare function fetchExperimentalStructures(uniprotId: string, opts?: FetchOptions): Promise<ExperimentalStructure[]>;
@@ -1,87 +1,174 @@
1
1
  "use strict";
2
- // The experimental structures 3D-Beacons knows for a UniProt entry: every PDBe
3
- // entry mapped to the accession, with the UniProt range it covers and its
4
- // resolution, in one CORS-enabled call. That is what lets a page offer a
5
- // crystal structure beside a prediction without a PDB search of its own; take
6
- // the entry id from here and ask `fetchUniProtStructureMappings` for its
2
+ // The experimental structures RCSB aligns to a UniProt entry: every PDB entity
3
+ // carrying the accession, with the UniProt range it covers, then each entry's
4
+ // method, resolution and chains. Two CORS-enabled calls, which is what lets a
5
+ // page offer a crystal structure beside a prediction without a PDB search of
6
+ // its own; take the entry id from here and ask `fetchPdbEntry` for its
7
7
  // residue mapping.
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.beaconsSummaryUrl = beaconsSummaryUrl;
10
- exports.parseExperimentalStructures = parseExperimentalStructures;
9
+ exports.ENTITY_DETAILS_QUERY = exports.RCSB_SEQUENCE_COORDINATES_URL = void 0;
10
+ exports.entityAlignmentsQuery = entityAlignmentsQuery;
11
+ exports.parseEntityAlignments = parseEntityAlignments;
12
+ exports.parseEntityDetails = parseEntityDetails;
13
+ exports.experimentalStructures = experimentalStructures;
11
14
  exports.fetchExperimentalStructures = fetchExperimentalStructures;
12
- const fetchUtils_ts_1 = require("./fetchUtils.js");
13
- // Unfiltered: the `?provider=pdbe` form answered BRAF, HBB and BRCA2 with a 404
14
- // about one time in three (2026-10-09), and the parser keeps PDBe's entries
15
- // anyway.
16
- function beaconsSummaryUrl(uniprotId) {
17
- return `https://www.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/${encodeURIComponent(uniprotId)}.json`;
15
+ const pdbEntry_ts_1 = require("./pdbEntry.js");
16
+ const structureUrls_ts_1 = require("./structureUrls.js");
17
+ exports.RCSB_SEQUENCE_COORDINATES_URL = 'https://sequence-coordinates.rcsb.org/graphql';
18
+ function entityAlignmentsQuery(uniprotId) {
19
+ return `{ alignments(from: UNIPROT, to: PDB_ENTITY, queryId: "${uniprotId}") {
20
+ target_alignments {
21
+ target_id
22
+ coverage { query_coverage }
23
+ aligned_regions { query_begin query_end }
24
+ }
25
+ } }`;
18
26
  }
27
+ exports.ENTITY_DETAILS_QUERY = `query($ids: [String!]!) { polymer_entities(entity_ids: $ids) {
28
+ rcsb_id
29
+ rcsb_polymer_entity_container_identifiers { auth_asym_ids }
30
+ entry { rcsb_entry_info { experimental_method resolution_combined } }
31
+ } }`;
32
+ // RCSB's cap on ids per batch request
33
+ const DETAILS_BATCH = 1000;
19
34
  function isRecord(value) {
20
35
  return typeof value === 'object' && value !== null && !Array.isArray(value);
21
36
  }
22
37
  function finiteNumber(value) {
23
38
  return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
24
39
  }
40
+ function strings(value) {
41
+ return Array.isArray(value)
42
+ ? value.filter((v) => typeof v === 'string')
43
+ : [];
44
+ }
25
45
  /**
26
- * PDBe entries only, best-covering first and sharpest within a tie.
27
- *
28
- * Predicted entries (AlphaFold, SWISS-MODEL, AlphaFill) are left out because a
29
- * prediction comes from AlphaFold's own API, which answers per model. And
30
- * 3D-Beacons files SASBDB's small-angle-scattering fits under "experimentally
31
- * determined" too, with numeric ids and near-full coverage — dystrophin's best
32
- * "structure" by coverage was SASBDB 436 — which are not entries a residue
33
- * mapping exists for. Hence the `provider === 'PDBe'` gate rather than the
34
- * category alone.
46
+ * PDB entities only: the same list carries RCSB's computed models
47
+ * (`AF_AFP04637F1_1`), which a residue mapping does not exist for. The range
48
+ * spans every aligned region, as 3D-Beacons reported it.
35
49
  */
36
- function parseExperimentalStructures(json) {
37
- const structures = isRecord(json) ? json.structures : undefined;
38
- if (!Array.isArray(structures)) {
50
+ function parseEntityAlignments(data) {
51
+ const alignments = isRecord(data) ? data.alignments : undefined;
52
+ const targets = isRecord(alignments)
53
+ ? alignments.target_alignments
54
+ : undefined;
55
+ if (!Array.isArray(targets)) {
39
56
  return [];
40
57
  }
41
- return structures
42
- .flatMap(entry => {
43
- const s = isRecord(entry) ? entry.summary : undefined;
44
- if (!isRecord(s)) {
58
+ return targets.flatMap(target => {
59
+ if (!isRecord(target) || typeof target.target_id !== 'string') {
45
60
  return [];
46
61
  }
47
- const start = finiteNumber(s.uniprot_start);
48
- const end = finiteNumber(s.uniprot_end);
49
- const coverage = finiteNumber(s.coverage);
50
- return typeof s.model_identifier === 'string' &&
51
- s.provider === 'PDBe' &&
52
- s.model_category === 'EXPERIMENTALLY DETERMINED' &&
53
- start !== undefined &&
54
- end !== undefined &&
55
- coverage !== undefined
62
+ const [pdbId] = target.target_id.split('_');
63
+ const coverage = isRecord(target.coverage)
64
+ ? finiteNumber(target.coverage.query_coverage)
65
+ : undefined;
66
+ const regions = Array.isArray(target.aligned_regions)
67
+ ? target.aligned_regions.filter(isRecord)
68
+ : [];
69
+ const begins = regions.map(r => finiteNumber(r.query_begin));
70
+ const ends = regions.map(r => finiteNumber(r.query_end));
71
+ return pdbId !== undefined &&
72
+ (0, structureUrls_ts_1.isPdbId)(pdbId) &&
73
+ coverage !== undefined &&
74
+ begins.length > 0 &&
75
+ begins.every(b => b !== undefined) &&
76
+ ends.every(e => e !== undefined)
56
77
  ? [
57
78
  {
58
- pdbId: s.model_identifier.toLowerCase(),
59
- method: typeof s.experimental_method === 'string'
60
- ? s.experimental_method
61
- : 'experimental',
62
- resolution: finiteNumber(s.resolution),
63
- start,
64
- end,
79
+ entityId: target.target_id,
80
+ pdbId: pdbId.toLowerCase(),
81
+ start: Math.min(...begins),
82
+ end: Math.max(...ends),
65
83
  coverage,
66
84
  },
67
85
  ]
68
86
  : [];
69
- })
70
- .sort((a, b) => b.coverage - a.coverage ||
87
+ });
88
+ }
89
+ function parseEntityDetails(data) {
90
+ const entities = isRecord(data) ? data.polymer_entities : undefined;
91
+ const details = new Map();
92
+ for (const entity of Array.isArray(entities) ? entities : []) {
93
+ if (!isRecord(entity) || typeof entity.rcsb_id !== 'string') {
94
+ continue;
95
+ }
96
+ const ids = entity.rcsb_polymer_entity_container_identifiers;
97
+ const info = isRecord(entity.entry)
98
+ ? entity.entry.rcsb_entry_info
99
+ : undefined;
100
+ const resolutions = isRecord(info) ? info.resolution_combined : undefined;
101
+ const resolution = Array.isArray(resolutions)
102
+ ? finiteNumber(resolutions[0])
103
+ : undefined;
104
+ details.set(entity.rcsb_id, {
105
+ method: isRecord(info) && typeof info.experimental_method === 'string'
106
+ ? info.experimental_method
107
+ : 'experimental',
108
+ ...(resolution === undefined ? {} : { resolution }),
109
+ chains: strings(isRecord(ids) ? ids.auth_asym_ids : undefined),
110
+ });
111
+ }
112
+ return details;
113
+ }
114
+ /**
115
+ * One row per entry, best coverage first and sharpest within a tie. An entry
116
+ * with several entities of the protein (a construct crystallised beside a
117
+ * different fragment of itself) takes the best-covering entity's range and
118
+ * every entity's chains.
119
+ */
120
+ function experimentalStructures(alignments, details) {
121
+ const byEntry = new Map();
122
+ for (const a of alignments) {
123
+ const d = details.get(a.entityId);
124
+ if (!d) {
125
+ continue;
126
+ }
127
+ const existing = byEntry.get(a.pdbId);
128
+ if (!existing) {
129
+ byEntry.set(a.pdbId, {
130
+ pdbId: a.pdbId,
131
+ method: d.method,
132
+ ...(d.resolution === undefined ? {} : { resolution: d.resolution }),
133
+ start: a.start,
134
+ end: a.end,
135
+ coverage: a.coverage,
136
+ chains: [...d.chains],
137
+ });
138
+ continue;
139
+ }
140
+ for (const chain of d.chains) {
141
+ if (!existing.chains.includes(chain)) {
142
+ existing.chains.push(chain);
143
+ }
144
+ }
145
+ if (a.coverage > existing.coverage) {
146
+ Object.assign(existing, {
147
+ start: a.start,
148
+ end: a.end,
149
+ coverage: a.coverage,
150
+ });
151
+ }
152
+ }
153
+ return [...byEntry.values()].sort((a, b) => b.coverage - a.coverage ||
71
154
  (a.resolution ?? Infinity) - (b.resolution ?? Infinity));
72
155
  }
73
- /** Best-effort: an unreachable API reads as "no entries", which costs a
74
- * structure suggestion and nothing else. */
156
+ const ISOFORM_SUFFIX = /-\d+$/;
157
+ /**
158
+ * Every PDB entry aligned to the accession. An accession with none, or one
159
+ * RCSB does not know, is `[]`; an isoform accession is asked as its entry,
160
+ * which is what the alignment is numbered on.
161
+ */
75
162
  async function fetchExperimentalStructures(uniprotId, opts) {
76
- for (let attempt = 0; attempt < 2; attempt++) {
77
- const res = await (0, fetchUtils_ts_1.rawfetch)(beaconsSummaryUrl(uniprotId), opts).catch(() => undefined);
78
- if (res?.ok) {
79
- return parseExperimentalStructures(await res.json());
80
- }
81
- if (res?.status === 404 || opts?.signal?.aborted) {
82
- return [];
163
+ const alignments = parseEntityAlignments(await (0, pdbEntry_ts_1.graphqlFetch)(exports.RCSB_SEQUENCE_COORDINATES_URL, entityAlignmentsQuery(uniprotId.replace(ISOFORM_SUFFIX, '')), undefined, opts));
164
+ const ids = alignments.map(a => a.entityId);
165
+ const details = new Map();
166
+ for (let i = 0; i < ids.length; i += DETAILS_BATCH) {
167
+ const batch = parseEntityDetails(await (0, pdbEntry_ts_1.graphqlFetch)(pdbEntry_ts_1.RCSB_DATA_GRAPHQL_URL, exports.ENTITY_DETAILS_QUERY, { ids: ids.slice(i, i + DETAILS_BATCH) }, opts));
168
+ for (const [id, d] of batch) {
169
+ details.set(id, d);
83
170
  }
84
171
  }
85
- return [];
172
+ return experimentalStructures(alignments, details);
86
173
  }
87
174
  //# sourceMappingURL=structureSources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"structureSources.js","sourceRoot":"","sources":["../src/structureSources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structureSources.js","sourceRoot":"","sources":["../src/structureSources.ts"],"names":[],"mappings":"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"}
@@ -9,21 +9,18 @@ export declare function uniprotEntryUrl(uniprotId: string): string;
9
9
  */
10
10
  export declare function getAlphaFoldStructureUrl(uniprotId: string, version?: string): string;
11
11
  export declare function getPdbStructureUrl(pdbId: string): string;
12
+ export declare function isPdbId(value: string): boolean;
13
+ export declare function rcsbEntryUrl(pdbId: string): string;
12
14
  /**
13
- * Resolve the `{ pdbId }` shorthand to a concrete structure URL, so a
14
- * hand-authored snapshot or a short launch URL doesn't have to know RCSB's
15
- * filename format. An explicit `url` (or inline `data`) always wins.
16
- * Idempotent: re-resolving an already-resolved spec returns the same url.
15
+ * Resolve the `{ pdbId }` shorthand to a structure URL, so a hand-written config
16
+ * or a short launch URL needs no RCSB filename. An explicit `url` (or inline
17
+ * `data`) always wins, and resolving an already-resolved spec returns the same
18
+ * url.
17
19
  *
18
- * `uniprotId` deliberately resolves to no url here, and still outranks a
19
- * `pdbId`. An accession's files are whatever AlphaFold DB currently holds — an
20
- * isoform model, several fragments, a new model version — so the structure
21
- * keeps the accession and the structure loader asks the prediction API which
22
- * file to open.
23
- *
24
- * Shared by the Structure model's snapshot preprocessor and the
25
- * LaunchView-ProteinView extension point, which would otherwise each carry
26
- * their own copy of the same precedence rule.
20
+ * `uniprotId` resolves to no url and still outranks a `pdbId`. AlphaFold DB's
21
+ * files for an accession change (an isoform model, several fragments, a new
22
+ * model version), so the caller keeps the accession and asks
23
+ * `fetchAlphaFoldModels` which file to open.
27
24
  */
28
25
  export declare function resolveStructureUrl({ url, data, uniprotId, pdbId, }: {
29
26
  url?: string;
@@ -43,9 +40,9 @@ export declare function getUniprotIdFromAlphaFoldTarget(target: string): string
43
40
  export declare function getStructureUrlFromTarget(target: string, db: string): string | undefined;
44
41
  export declare function getConfidenceUrlFromTarget(target: string): string | undefined;
45
42
  /**
46
- * What a structure is called in the UI: its PDB id, its AlphaFold accession,
47
- * else the file's name. Shared by the view title, the alignment panel heading
48
- * and the hover readout, so one structure reads the same everywhere.
43
+ * The name to show for a structure: its PDB id, its AlphaFold accession, else
44
+ * the file's name. Use it wherever a structure is named, so each place shows
45
+ * the same name.
49
46
  */
50
47
  export declare function structureDisplayLabel({ url, data, uniprotId, }: {
51
48
  url?: string;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
- // Pure structure-URL builders and target parsers. Kept dependency-free so both
3
- // the launch flow and the ProteinView model (e.g. resolving a `uniprotId`/`pdbId`
4
- // shorthand at hydration) can import them without pulling in heavy launch code.
2
+ // Structure URL builders and target parsers, with no dependencies.
5
3
  Object.defineProperty(exports, "__esModule", { value: true });
6
4
  exports.uniprotGffUrl = uniprotGffUrl;
7
5
  exports.uniprotFastaUrl = uniprotFastaUrl;
8
6
  exports.uniprotEntryUrl = uniprotEntryUrl;
9
7
  exports.getAlphaFoldStructureUrl = getAlphaFoldStructureUrl;
10
8
  exports.getPdbStructureUrl = getPdbStructureUrl;
9
+ exports.isPdbId = isPdbId;
10
+ exports.rcsbEntryUrl = rcsbEntryUrl;
11
11
  exports.resolveStructureUrl = resolveStructureUrl;
12
12
  exports.getPdbIdFromUrl = getPdbIdFromUrl;
13
13
  exports.getUniprotIdFromAlphaFoldTarget = getUniprotIdFromAlphaFoldTarget;
@@ -15,10 +15,8 @@ exports.getStructureUrlFromTarget = getStructureUrlFromTarget;
15
15
  exports.getConfidenceUrlFromTarget = getConfidenceUrlFromTarget;
16
16
  exports.structureDisplayLabel = structureDisplayLabel;
17
17
  const ALPHAFOLD_VERSION = 'v6';
18
- // UniProt endpoints. rest.* is the machine API (the GFF the feature tracks and
19
- // the alignment's annotation rows both read, the FASTA the temporary protein
20
- // assembly is built from); www.*/entry is the human-facing entry page the UI
21
- // links to. Centralized so a path change is one edit rather than a grep.
18
+ // UniProt endpoints. rest.* is the machine API, serving the features as GFF
19
+ // and the sequence as FASTA; www.*/entry is the entry page for people.
22
20
  function uniprotGffUrl(uniprotId) {
23
21
  return `https://rest.uniprot.org/uniprotkb/${uniprotId}.gff`;
24
22
  }
@@ -40,21 +38,25 @@ function getAlphaFoldStructureUrl(uniprotId, version = ALPHAFOLD_VERSION) {
40
38
  function getPdbStructureUrl(pdbId) {
41
39
  return `https://files.rcsb.org/download/${pdbId}.cif`;
42
40
  }
41
+ // A PDB id is four characters, the first a digit: 1TUP, 6ZIO. Checked before
42
+ // a typed one reaches a fetch, so three characters on the way to four are not
43
+ // a 404 apiece.
44
+ function isPdbId(value) {
45
+ return /^[1-9][A-Za-z0-9]{3}$/.test(value);
46
+ }
47
+ function rcsbEntryUrl(pdbId) {
48
+ return `https://www.rcsb.org/structure/${pdbId.toUpperCase()}`;
49
+ }
43
50
  /**
44
- * Resolve the `{ pdbId }` shorthand to a concrete structure URL, so a
45
- * hand-authored snapshot or a short launch URL doesn't have to know RCSB's
46
- * filename format. An explicit `url` (or inline `data`) always wins.
47
- * Idempotent: re-resolving an already-resolved spec returns the same url.
48
- *
49
- * `uniprotId` deliberately resolves to no url here, and still outranks a
50
- * `pdbId`. An accession's files are whatever AlphaFold DB currently holds — an
51
- * isoform model, several fragments, a new model version — so the structure
52
- * keeps the accession and the structure loader asks the prediction API which
53
- * file to open.
51
+ * Resolve the `{ pdbId }` shorthand to a structure URL, so a hand-written config
52
+ * or a short launch URL needs no RCSB filename. An explicit `url` (or inline
53
+ * `data`) always wins, and resolving an already-resolved spec returns the same
54
+ * url.
54
55
  *
55
- * Shared by the Structure model's snapshot preprocessor and the
56
- * LaunchView-ProteinView extension point, which would otherwise each carry
57
- * their own copy of the same precedence rule.
56
+ * `uniprotId` resolves to no url and still outranks a `pdbId`. AlphaFold DB's
57
+ * files for an accession change (an isoform model, several fragments, a new
58
+ * model version), so the caller keeps the accession and asks
59
+ * `fetchAlphaFoldModels` which file to open.
58
60
  */
59
61
  function resolveStructureUrl({ url, data, uniprotId, pdbId, }) {
60
62
  if (url !== undefined || data !== undefined) {
@@ -121,9 +123,9 @@ function getConfidenceUrlFromTarget(target) {
121
123
  return undefined;
122
124
  }
123
125
  /**
124
- * What a structure is called in the UI: its PDB id, its AlphaFold accession,
125
- * else the file's name. Shared by the view title, the alignment panel heading
126
- * and the hover readout, so one structure reads the same everywhere.
126
+ * The name to show for a structure: its PDB id, its AlphaFold accession, else
127
+ * the file's name. Use it wherever a structure is named, so each place shows
128
+ * the same name.
127
129
  */
128
130
  function structureDisplayLabel({ url, data, uniprotId, }) {
129
131
  if (url === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"structureUrls.js","sourceRoot":"","sources":["../src/structureUrls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structureUrls.js","sourceRoot":"","sources":["../src/structureUrls.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -5,10 +5,7 @@ export declare const ALIGNMENT_ALGORITHMS: {
5
5
  };
6
6
  export declare const DEFAULT_ALIGNMENT_ALGORITHM: AlignmentAlgorithm;
7
7
  export declare const ALIGNMENT_ALGORITHM_VALUES: AlignmentAlgorithm[];
8
- /**
9
- * Parses an untrusted algorithm name (a URL session-spec param) into the union.
10
- * The only place a coercion is needed: the model property is an enumeration, so
11
- * everything downstream of hydration is already typed.
12
- */
8
+ /** Parses an untrusted algorithm name, such as a URL parameter, falling back
9
+ * to Smith-Waterman. */
13
10
  export declare function coerceAlignmentAlgorithm(value: string): AlignmentAlgorithm;
14
11
  export declare const ALIGNMENT_ALGORITHM_LABELS: Record<AlignmentAlgorithm, string>;
package/dist/types.js CHANGED
@@ -11,11 +11,8 @@ exports.ALIGNMENT_ALGORITHM_VALUES = [
11
11
  'needleman_wunsch',
12
12
  'smith_waterman',
13
13
  ];
14
- /**
15
- * Parses an untrusted algorithm name (a URL session-spec param) into the union.
16
- * The only place a coercion is needed: the model property is an enumeration, so
17
- * everything downstream of hydration is already typed.
18
- */
14
+ /** Parses an untrusted algorithm name, such as a URL parameter, falling back
15
+ * to Smith-Waterman. */
19
16
  function coerceAlignmentAlgorithm(value) {
20
17
  return (exports.ALIGNMENT_ALGORITHM_VALUES.find(v => v === value) ??
21
18
  exports.DEFAULT_ALIGNMENT_ALGORITHM);
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAmBA,4DAKC;AAtBY,QAAA,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;CACxB,CAAA;AAEG,QAAA,2BAA2B,GAAuB,gBAAgB,CAAA;AAElE,QAAA,0BAA0B,GAAyB;IAC9D,kBAAkB;IAClB,gBAAgB;CACjB,CAAA;AAED;;;;GAIG;AACH,SAAgB,wBAAwB,CAAC,KAAa;IACpD,OAAO,CACL,kCAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;QACjD,mCAA2B,CAC5B,CAAA;AACH,CAAC;AAEY,QAAA,0BAA0B,GAAuC;IAC5E,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;CACjC,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAgBA,4DAKC;AAnBY,QAAA,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;CACxB,CAAA;AAEG,QAAA,2BAA2B,GAAuB,gBAAgB,CAAA;AAElE,QAAA,0BAA0B,GAAyB;IAC9D,kBAAkB;IAClB,gBAAgB;CACjB,CAAA;AAED;wBACwB;AACxB,SAAgB,wBAAwB,CAAC,KAAa;IACpD,OAAO,CACL,kCAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;QACjD,mCAA2B,CAC5B,CAAA;AACH,CAAC;AAEY,QAAA,0BAA0B,GAAuC;IAC5E,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;CACjC,CAAA"}
@@ -51,7 +51,6 @@ async function searchByXref(id, opts) {
51
51
  return { entries: await searchUniProt(query, 10, opts), error: undefined };
52
52
  }
53
53
  catch (e) {
54
- console.error(`xref search failed for ${id}:`, e);
55
54
  return { entries: [], error: e };
56
55
  }
57
56
  }
@@ -63,18 +62,14 @@ async function searchByGeneName(geneName, organismId, opts) {
63
62
  // are 284812. The descendants are asked only on a miss, because for a
64
63
  // species with reviewed subspecies entries (human and Neanderthal) they
65
64
  // turn one answer into two.
66
- // The taxon itself has answered, so the wider question failing leaves
67
- // that answer standing rather than turning an empty result into an error.
65
+ // When the descendant search fails, the taxon's own empty result stands
66
+ // rather than becoming an error.
68
67
  const entries = exact.length === 0 && organismId
69
- ? await searchUniProt(buildGeneNameQuery(geneName, organismId, 'taxonomy_id'), 5, opts).catch((e) => {
70
- console.error(`descendant-taxon search failed for ${geneName}:`, e);
71
- return exact;
72
- })
68
+ ? await searchUniProt(buildGeneNameQuery(geneName, organismId, 'taxonomy_id'), 5, opts).catch(() => exact)
73
69
  : exact;
74
70
  return { entries, error: undefined };
75
71
  }
76
72
  catch (e) {
77
- console.error(`gene name search failed for ${geneName}:`, e);
78
73
  return { entries: [], error: e };
79
74
  }
80
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uniProtSearch.js","sourceRoot":"","sources":["../src/uniProtSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uniProtSearch.js","sourceRoot":"","sources":["../src/uniProtSearch.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,20 @@
1
1
  import type { PairwiseAlignment } from './mappings.ts';
2
2
  export interface AlignmentQuality {
3
- /** columns carrying a residue on both rows, i.e. mapped positions */
3
+ /** columns with a residue in both rows, i.e. mapped positions */
4
4
  aligned: number;
5
5
  identical: number;
6
6
  transcriptLength: number;
7
7
  structureLength: number;
8
8
  /** identical over aligned; 0 when nothing aligned */
9
9
  identity: number;
10
- /** identical over the shorter of the two sequences: the statistic that
11
- * separates a real match from a chance local alignment, see below */
10
+ /** identical over the shorter of the two sequences, which separates a
11
+ * real match from a chance local alignment (see LOW_IDENTITY_OVER_SHORTER) */
12
12
  identityOverShorter: number;
13
13
  /** aligned over the structure's length */
14
14
  structureCoverage: number;
15
15
  /** first and last transcript residue the alignment covers, 1-based
16
- * inclusive; 0 when nothing aligned. A structure is usually a fragment, and
17
- * which part of the protein it holds is the reader's first question. */
16
+ * inclusive; 0 when nothing aligned. A structure is usually a fragment, so
17
+ * these show which part of the protein it contains. */
18
18
  transcriptStart: number;
19
19
  transcriptEnd: number;
20
20
  }
@@ -22,11 +22,11 @@ export declare function parseAlphaFoldModels(json: unknown): AlphaFoldModel[];
22
22
  export declare function fetchAlphaFoldModels(uniprotId: string, opts?: FetchOptions): Promise<AlphaFoldModel[]>;
23
23
  /**
24
24
  * The model to open for a gene's transcripts: one folded from exactly a
25
- * transcript's translation, canonical first, so the view maps it as an
26
- * identity; else the canonical model; else the longest isoform model.
25
+ * transcript's translation, canonical first, so every residue maps to itself;
26
+ * else the canonical model; else the longest isoform model.
27
27
  *
28
- * Takes any record of sequences, since the structure loader knows one
29
- * translation rather than a gene's isoforms.
28
+ * Takes any record of sequences, since a caller may know one translation rather
29
+ * than a gene's isoforms.
30
30
  */
31
31
  export declare function pickAlphaFoldModel(models: AlphaFoldModel[], isoformSequences: Record<string, {
32
32
  seq: string;