@jbrowse/plugin-spreadsheet-view 2.17.0 → 2.18.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 (197) hide show
  1. package/dist/LaunchSpreadsheetView/index.d.ts +1 -1
  2. package/dist/LaunchSpreadsheetView/index.js +1 -3
  3. package/dist/SpreadsheetView/ImportWizard.d.ts +51 -0
  4. package/dist/SpreadsheetView/ImportWizard.js +240 -0
  5. package/dist/SpreadsheetView/SpreadsheetModel.d.ts +79 -0
  6. package/dist/SpreadsheetView/SpreadsheetModel.js +133 -0
  7. package/dist/SpreadsheetView/SpreadsheetViewModel.d.ts +299 -0
  8. package/dist/SpreadsheetView/SpreadsheetViewModel.js +94 -0
  9. package/dist/SpreadsheetView/components/BreakendMultiLevelOptionDialog.d.ts +1 -0
  10. package/dist/SpreadsheetView/components/BreakendMultiLevelOptionDialog.js +5 -0
  11. package/dist/SpreadsheetView/components/BreakendSingleLevelOptionDialog.d.ts +1 -0
  12. package/dist/SpreadsheetView/components/BreakendSingleLevelOptionDialog.js +5 -0
  13. package/dist/SpreadsheetView/components/FeatureMenu.d.ts +8 -0
  14. package/dist/SpreadsheetView/components/FeatureMenu.js +95 -0
  15. package/dist/SpreadsheetView/components/ImportWizard.d.ts +2 -2
  16. package/dist/SpreadsheetView/components/ImportWizard.js +40 -43
  17. package/dist/SpreadsheetView/components/LocationCell.d.ts +8 -0
  18. package/dist/SpreadsheetView/components/LocationCell.js +31 -0
  19. package/dist/SpreadsheetView/components/NumberEditor.d.ts +1 -1
  20. package/dist/SpreadsheetView/components/NumberEditor.js +1 -3
  21. package/dist/SpreadsheetView/components/SpreadsheetDataGrid.d.ts +6 -0
  22. package/dist/SpreadsheetView/components/SpreadsheetDataGrid.js +27 -0
  23. package/dist/SpreadsheetView/components/SpreadsheetView.d.ts +3 -3
  24. package/dist/SpreadsheetView/components/SpreadsheetView.js +23 -44
  25. package/dist/SpreadsheetView/components/TrackSelector.d.ts +7 -0
  26. package/dist/SpreadsheetView/components/TrackSelector.js +49 -0
  27. package/dist/SpreadsheetView/importAdapters/BedImport.d.ts +26 -17
  28. package/dist/SpreadsheetView/importAdapters/BedImport.js +53 -139
  29. package/dist/SpreadsheetView/importAdapters/BedpeImport.d.ts +36 -0
  30. package/dist/SpreadsheetView/importAdapters/BedpeImport.js +79 -0
  31. package/dist/SpreadsheetView/importAdapters/STARFusionImport.d.ts +25 -9
  32. package/dist/SpreadsheetView/importAdapters/STARFusionImport.js +27 -62
  33. package/dist/SpreadsheetView/importAdapters/VcfImport.d.ts +19 -12
  34. package/dist/SpreadsheetView/importAdapters/VcfImport.js +53 -98
  35. package/dist/SpreadsheetView/importAdapters/isNumber.d.ts +1 -0
  36. package/dist/SpreadsheetView/importAdapters/isNumber.js +14 -0
  37. package/dist/SpreadsheetView/importAdapters/util.d.ts +2 -0
  38. package/dist/SpreadsheetView/importAdapters/util.js +22 -0
  39. package/dist/SpreadsheetView/index.d.ts +2 -2
  40. package/dist/SpreadsheetView/index.js +2 -2
  41. package/dist/SpreadsheetView/util.d.ts +7 -0
  42. package/dist/SpreadsheetView/util.js +13 -0
  43. package/dist/index.d.ts +1 -1
  44. package/dist/index.js +1 -3
  45. package/esm/LaunchSpreadsheetView/index.d.ts +1 -1
  46. package/esm/LaunchSpreadsheetView/index.js +1 -3
  47. package/esm/SpreadsheetView/ImportWizard.d.ts +51 -0
  48. package/esm/SpreadsheetView/ImportWizard.js +214 -0
  49. package/esm/SpreadsheetView/SpreadsheetModel.d.ts +79 -0
  50. package/esm/SpreadsheetView/SpreadsheetModel.js +127 -0
  51. package/esm/SpreadsheetView/SpreadsheetViewModel.d.ts +299 -0
  52. package/esm/SpreadsheetView/SpreadsheetViewModel.js +88 -0
  53. package/esm/SpreadsheetView/components/BreakendMultiLevelOptionDialog.d.ts +1 -0
  54. package/esm/SpreadsheetView/components/BreakendMultiLevelOptionDialog.js +1 -0
  55. package/esm/SpreadsheetView/components/BreakendSingleLevelOptionDialog.d.ts +1 -0
  56. package/esm/SpreadsheetView/components/BreakendSingleLevelOptionDialog.js +1 -0
  57. package/esm/SpreadsheetView/components/FeatureMenu.d.ts +8 -0
  58. package/esm/SpreadsheetView/components/FeatureMenu.js +66 -0
  59. package/esm/SpreadsheetView/components/ImportWizard.d.ts +2 -2
  60. package/esm/SpreadsheetView/components/ImportWizard.js +41 -44
  61. package/esm/SpreadsheetView/components/LocationCell.d.ts +8 -0
  62. package/esm/SpreadsheetView/components/LocationCell.js +25 -0
  63. package/esm/SpreadsheetView/components/NumberEditor.d.ts +1 -1
  64. package/esm/SpreadsheetView/components/NumberEditor.js +2 -4
  65. package/esm/SpreadsheetView/components/SpreadsheetDataGrid.d.ts +6 -0
  66. package/esm/SpreadsheetView/components/SpreadsheetDataGrid.js +22 -0
  67. package/esm/SpreadsheetView/components/SpreadsheetView.d.ts +3 -3
  68. package/esm/SpreadsheetView/components/SpreadsheetView.js +24 -45
  69. package/esm/SpreadsheetView/components/TrackSelector.d.ts +7 -0
  70. package/esm/SpreadsheetView/components/TrackSelector.js +24 -0
  71. package/esm/SpreadsheetView/importAdapters/BedImport.d.ts +26 -17
  72. package/esm/SpreadsheetView/importAdapters/BedImport.js +53 -137
  73. package/esm/SpreadsheetView/importAdapters/BedpeImport.d.ts +36 -0
  74. package/esm/SpreadsheetView/importAdapters/BedpeImport.js +76 -0
  75. package/esm/SpreadsheetView/importAdapters/STARFusionImport.d.ts +25 -9
  76. package/esm/SpreadsheetView/importAdapters/STARFusionImport.js +27 -62
  77. package/esm/SpreadsheetView/importAdapters/VcfImport.d.ts +19 -12
  78. package/esm/SpreadsheetView/importAdapters/VcfImport.js +53 -97
  79. package/esm/SpreadsheetView/importAdapters/isNumber.d.ts +1 -0
  80. package/esm/SpreadsheetView/importAdapters/isNumber.js +11 -0
  81. package/esm/SpreadsheetView/importAdapters/util.d.ts +2 -0
  82. package/esm/SpreadsheetView/importAdapters/util.js +18 -0
  83. package/esm/SpreadsheetView/index.d.ts +2 -2
  84. package/esm/SpreadsheetView/index.js +2 -2
  85. package/esm/SpreadsheetView/util.d.ts +7 -0
  86. package/esm/SpreadsheetView/util.js +10 -0
  87. package/esm/index.d.ts +1 -1
  88. package/esm/index.js +1 -3
  89. package/package.json +6 -6
  90. package/dist/SpreadsheetView/components/CellData.d.ts +0 -9
  91. package/dist/SpreadsheetView/components/CellData.js +0 -14
  92. package/dist/SpreadsheetView/components/ColumnFilterControls.d.ts +0 -3
  93. package/dist/SpreadsheetView/components/ColumnFilterControls.js +0 -58
  94. package/dist/SpreadsheetView/components/ColumnMenu.d.ts +0 -16
  95. package/dist/SpreadsheetView/components/ColumnMenu.js +0 -140
  96. package/dist/SpreadsheetView/components/DataRow.d.ts +0 -12
  97. package/dist/SpreadsheetView/components/DataRow.js +0 -81
  98. package/dist/SpreadsheetView/components/DataTable.d.ts +0 -10
  99. package/dist/SpreadsheetView/components/DataTable.js +0 -42
  100. package/dist/SpreadsheetView/components/DataTableHeader.d.ts +0 -6
  101. package/dist/SpreadsheetView/components/DataTableHeader.js +0 -104
  102. package/dist/SpreadsheetView/components/GlobalFilterControls.d.ts +0 -5
  103. package/dist/SpreadsheetView/components/GlobalFilterControls.js +0 -68
  104. package/dist/SpreadsheetView/components/RowCountMessage.d.ts +0 -6
  105. package/dist/SpreadsheetView/components/RowCountMessage.js +0 -33
  106. package/dist/SpreadsheetView/components/RowMenu.d.ts +0 -9
  107. package/dist/SpreadsheetView/components/RowMenu.js +0 -39
  108. package/dist/SpreadsheetView/components/SortIndicator.d.ts +0 -6
  109. package/dist/SpreadsheetView/components/SortIndicator.js +0 -27
  110. package/dist/SpreadsheetView/components/Spreadsheet.d.ts +0 -11
  111. package/dist/SpreadsheetView/components/Spreadsheet.js +0 -25
  112. package/dist/SpreadsheetView/components/StatusBar.d.ts +0 -11
  113. package/dist/SpreadsheetView/components/StatusBar.js +0 -44
  114. package/dist/SpreadsheetView/importAdapters/ImportUtils.d.ts +0 -42
  115. package/dist/SpreadsheetView/importAdapters/ImportUtils.js +0 -123
  116. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +0 -12
  117. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -20
  118. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +0 -12
  119. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -20
  120. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +0 -12
  121. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -20
  122. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +0 -13
  123. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -183
  124. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +0 -19
  125. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -23
  126. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +0 -30
  127. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -126
  128. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +0 -28
  129. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -129
  130. package/dist/SpreadsheetView/models/ColumnDataTypes/index.d.ts +0 -71
  131. package/dist/SpreadsheetView/models/ColumnDataTypes/index.js +0 -37
  132. package/dist/SpreadsheetView/models/FilterControls.d.ts +0 -26
  133. package/dist/SpreadsheetView/models/FilterControls.js +0 -85
  134. package/dist/SpreadsheetView/models/ImportWizard.d.ts +0 -31
  135. package/dist/SpreadsheetView/models/ImportWizard.js +0 -186
  136. package/dist/SpreadsheetView/models/Row.d.ts +0 -17
  137. package/dist/SpreadsheetView/models/Row.js +0 -43
  138. package/dist/SpreadsheetView/models/Spreadsheet.d.ts +0 -260
  139. package/dist/SpreadsheetView/models/Spreadsheet.js +0 -174
  140. package/dist/SpreadsheetView/models/SpreadsheetView.d.ts +0 -482
  141. package/dist/SpreadsheetView/models/SpreadsheetView.js +0 -199
  142. package/dist/SpreadsheetView/models/StaticRowSet.d.ts +0 -163
  143. package/dist/SpreadsheetView/models/StaticRowSet.js +0 -56
  144. package/esm/SpreadsheetView/components/CellData.d.ts +0 -9
  145. package/esm/SpreadsheetView/components/CellData.js +0 -9
  146. package/esm/SpreadsheetView/components/ColumnFilterControls.d.ts +0 -3
  147. package/esm/SpreadsheetView/components/ColumnFilterControls.js +0 -53
  148. package/esm/SpreadsheetView/components/ColumnMenu.d.ts +0 -16
  149. package/esm/SpreadsheetView/components/ColumnMenu.js +0 -135
  150. package/esm/SpreadsheetView/components/DataRow.d.ts +0 -12
  151. package/esm/SpreadsheetView/components/DataRow.js +0 -76
  152. package/esm/SpreadsheetView/components/DataTable.d.ts +0 -10
  153. package/esm/SpreadsheetView/components/DataTable.js +0 -37
  154. package/esm/SpreadsheetView/components/DataTableHeader.d.ts +0 -6
  155. package/esm/SpreadsheetView/components/DataTableHeader.js +0 -76
  156. package/esm/SpreadsheetView/components/GlobalFilterControls.d.ts +0 -5
  157. package/esm/SpreadsheetView/components/GlobalFilterControls.js +0 -40
  158. package/esm/SpreadsheetView/components/RowCountMessage.d.ts +0 -6
  159. package/esm/SpreadsheetView/components/RowCountMessage.js +0 -28
  160. package/esm/SpreadsheetView/components/RowMenu.d.ts +0 -9
  161. package/esm/SpreadsheetView/components/RowMenu.js +0 -34
  162. package/esm/SpreadsheetView/components/SortIndicator.d.ts +0 -6
  163. package/esm/SpreadsheetView/components/SortIndicator.js +0 -21
  164. package/esm/SpreadsheetView/components/Spreadsheet.d.ts +0 -11
  165. package/esm/SpreadsheetView/components/Spreadsheet.js +0 -20
  166. package/esm/SpreadsheetView/components/StatusBar.d.ts +0 -11
  167. package/esm/SpreadsheetView/components/StatusBar.js +0 -39
  168. package/esm/SpreadsheetView/importAdapters/ImportUtils.d.ts +0 -42
  169. package/esm/SpreadsheetView/importAdapters/ImportUtils.js +0 -95
  170. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +0 -12
  171. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -15
  172. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +0 -12
  173. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -15
  174. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +0 -12
  175. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -15
  176. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +0 -13
  177. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -178
  178. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +0 -19
  179. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -20
  180. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +0 -30
  181. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -119
  182. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +0 -28
  183. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -122
  184. package/esm/SpreadsheetView/models/ColumnDataTypes/index.d.ts +0 -71
  185. package/esm/SpreadsheetView/models/ColumnDataTypes/index.js +0 -29
  186. package/esm/SpreadsheetView/models/FilterControls.d.ts +0 -26
  187. package/esm/SpreadsheetView/models/FilterControls.js +0 -83
  188. package/esm/SpreadsheetView/models/ImportWizard.d.ts +0 -31
  189. package/esm/SpreadsheetView/models/ImportWizard.js +0 -161
  190. package/esm/SpreadsheetView/models/Row.d.ts +0 -17
  191. package/esm/SpreadsheetView/models/Row.js +0 -41
  192. package/esm/SpreadsheetView/models/Spreadsheet.d.ts +0 -260
  193. package/esm/SpreadsheetView/models/Spreadsheet.js +0 -169
  194. package/esm/SpreadsheetView/models/SpreadsheetView.d.ts +0 -482
  195. package/esm/SpreadsheetView/models/SpreadsheetView.js +0 -194
  196. package/esm/SpreadsheetView/models/StaticRowSet.d.ts +0 -163
  197. package/esm/SpreadsheetView/models/StaticRowSet.js +0 -51
@@ -1,9 +1,25 @@
1
- import { ParseOptions } from './ImportUtils';
2
- import type { Buffer } from 'buffer';
3
- export declare function parseSTARFusionBuffer(buffer: Buffer, options: ParseOptions): Promise<{
4
- rowSet: import("./ImportUtils").RowSet;
5
- columnDisplayOrder: number[];
6
- hasColumnNames: boolean;
7
- columns: import("./ImportUtils").Column[];
8
- assemblyName: string | undefined;
9
- }>;
1
+ export declare function parseSTARFusionBuffer(buffer: Uint8Array): {
2
+ columns: {
3
+ name: string;
4
+ }[];
5
+ rowSet: {
6
+ rows: {
7
+ cellData: {
8
+ [k: string]: string | number;
9
+ };
10
+ feature: {
11
+ mate: {
12
+ refName: string | undefined;
13
+ start: number;
14
+ end: number;
15
+ strand: number | undefined;
16
+ };
17
+ refName: string | undefined;
18
+ start: number;
19
+ end: number;
20
+ strand: number | undefined;
21
+ uniqueId: string;
22
+ };
23
+ }[];
24
+ };
25
+ };
@@ -1,70 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseSTARFusionBuffer = parseSTARFusionBuffer;
4
- const ImportUtils_1 = require("./ImportUtils");
4
+ const isNumber_1 = require("./isNumber");
5
+ const util_1 = require("./util");
5
6
  function parseSTARFusionBreakpointString(str) {
6
7
  const fields = str.split(':');
7
- const refName = fields[0];
8
- const pos = Number.parseInt(fields[1], 10);
9
- const strand = fields[2] === '-' ? -1 : 1;
10
- return { refName, pos, strand };
8
+ return {
9
+ refName: fields[0],
10
+ start: +fields[1],
11
+ end: +fields[1] + 1,
12
+ strand: (0, util_1.parseStrand)(fields[2]),
13
+ };
11
14
  }
12
- const numericColumns = {
13
- SpanningFragCount: true,
14
- FFPM: true,
15
- LeftBreakEntropy: true,
16
- RightBreakEntropy: true,
17
- JunctionReadCount: true,
18
- };
19
- async function parseSTARFusionBuffer(buffer, options) {
20
- const data = await (0, ImportUtils_1.parseTsvBuffer)(buffer, {
21
- hasColumnNameLine: true,
22
- columnNameLineNumber: 1,
23
- selectedAssemblyName: options.selectedAssemblyName,
24
- isValidRefName: () => false,
25
- });
26
- // remove the # in #FusionName
27
- data.columns[0].name = data.columns[0].name.replace('#', '');
28
- // set some columns to be numeric
29
- data.columns.forEach(col => {
30
- if (numericColumns[col.name]) {
31
- col.dataType = { type: 'Number' };
32
- }
33
- });
34
- // decorate each row with a feature object in its extendedData
35
- data.rowSet.rows.forEach((row, rowNumber) => {
36
- const featureData = {};
37
- row.cells.forEach(({ text }, columnNumber) => {
38
- const column = data.columns[columnNumber];
39
- if (column.name === 'LeftBreakpoint' && text) {
40
- const { refName, pos, strand } = parseSTARFusionBreakpointString(text);
41
- featureData.refName = refName;
42
- featureData.start = pos;
43
- featureData.end = pos;
44
- featureData.strand = strand;
45
- }
46
- else if (column.name === 'RightBreakpoint' && text) {
47
- const { refName, pos, strand } = parseSTARFusionBreakpointString(text);
48
- featureData.mate = {
49
- refName,
50
- start: pos,
51
- end: pos,
52
- strand,
15
+ function parseSTARFusionBuffer(buffer) {
16
+ const lines = (0, util_1.bufferToLines)(buffer);
17
+ const columns = lines[0].slice(1).split('\t');
18
+ return {
19
+ columns: columns.map(c => ({ name: c })),
20
+ rowSet: {
21
+ rows: lines.slice(1).map((line, rowNumber) => {
22
+ const cols = line.split('\t');
23
+ const row = Object.fromEntries(columns.map((h, i) => [h, (0, isNumber_1.isNumber)(cols[i]) ? +cols[i] : cols[i]]));
24
+ return {
25
+ cellData: row,
26
+ feature: {
27
+ uniqueId: `sf-${rowNumber}`,
28
+ ...parseSTARFusionBreakpointString(row.LeftBreakpoint),
29
+ mate: parseSTARFusionBreakpointString(row.RightBreakpoint),
30
+ },
53
31
  };
54
- }
55
- else if (text && numericColumns[column.name]) {
56
- // some other column, numeric
57
- featureData[column.name] = Number.parseFloat(text);
58
- }
59
- else {
60
- // some other column, text
61
- featureData[column.name] = text;
62
- }
63
- });
64
- featureData.uniqueId = `sf-${rowNumber + 1}`;
65
- row.extendedData = {
66
- feature: featureData,
67
- };
68
- });
69
- return data;
32
+ }),
33
+ },
34
+ };
70
35
  }
@@ -1,13 +1,20 @@
1
- import { RowSet, Column, ParseOptions } from './ImportUtils';
2
- import type { Buffer } from 'buffer';
3
- export declare function parseVcfBuffer(buffer: Buffer, options?: ParseOptions): {
4
- rowSet: RowSet;
5
- columnDisplayOrder: number[];
6
- hasColumnNames: boolean;
7
- columns: Column[];
8
- assemblyName: string | undefined;
9
- };
10
- export declare function splitVcfFileHeaderAndBody(wholeFile: string): {
11
- header: string;
12
- body: string;
1
+ export declare function parseVcfBuffer(buffer: Uint8Array): {
2
+ columns: {
3
+ name: string;
4
+ }[];
5
+ rowSet: {
6
+ rows: {
7
+ cellData: {
8
+ CHROM: string | undefined;
9
+ POS: number;
10
+ ID: string | undefined;
11
+ REF: string | undefined;
12
+ ALT: string | undefined;
13
+ QUAL: string | number | undefined;
14
+ FILTER: string | undefined;
15
+ FORMAT: string | undefined;
16
+ };
17
+ feature: any;
18
+ }[];
19
+ };
13
20
  };
@@ -4,108 +4,63 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.parseVcfBuffer = parseVcfBuffer;
7
- exports.splitVcfFileHeaderAndBody = splitVcfFileHeaderAndBody;
8
7
  const vcf_1 = __importDefault(require("@gmod/vcf"));
9
8
  const plugin_variants_1 = require("@jbrowse/plugin-variants");
10
- const ImportUtils_1 = require("./ImportUtils");
11
- const vcfCoreColumns = [
12
- { name: 'CHROM', type: 'Text' }, // 0
13
- { name: 'POS', type: 'Number' }, // 1
14
- { name: 'ID', type: 'Text' }, // 2
15
- { name: 'REF', type: 'Text' }, // 3
16
- { name: 'ALT', type: 'Text' }, // 4
17
- { name: 'QUAL', type: 'Number' }, // 5
18
- { name: 'FILTER', type: 'Text' }, // 6
19
- { name: 'INFO', type: 'Text' }, // 7
20
- { name: 'FORMAT', type: 'Text' }, // 8
21
- ];
22
- function vcfRecordToRow(vcfParser, line, lineNumber) {
23
- const vcfVariant = vcfParser.parseLine(line);
24
- const vcfFeature = new plugin_variants_1.VcfFeature({
25
- variant: vcfVariant,
26
- parser: vcfParser,
27
- id: `vcf-${lineNumber}`,
28
- });
29
- const data = line.split('\t').map(d => (d === '.' ? '' : d));
30
- // no format column, add blank
31
- if (data.length === 8) {
32
- data.push('');
33
- }
34
- const row = {
35
- id: String(lineNumber + 1),
36
- extendedData: { vcfFeature: vcfFeature.toJSON() },
37
- cells: data.map((text, columnNumber) => {
38
- return {
39
- columnNumber,
40
- text,
41
- };
42
- }),
43
- };
44
- return row;
45
- }
46
- function parseVcfBuffer(buffer, options = {}) {
47
- const { selectedAssemblyName } = options;
48
- let { header, body } = splitVcfFileHeaderAndBody((0, ImportUtils_1.bufferToString)(buffer));
49
- const rows = [];
9
+ const isNumber_1 = require("./isNumber");
10
+ const util_1 = require("./util");
11
+ function parseVcfBuffer(buffer) {
12
+ const lines = (0, util_1.bufferToLines)(buffer);
13
+ const header = lines.filter(l => l.startsWith('#')).join('\n');
14
+ const body = lines.filter(l => !l.startsWith('#'));
50
15
  const vcfParser = new vcf_1.default({ header });
51
- header = ''; // garbage collect
52
- body.split(/\n|\r\n|\r/).forEach((line, lineNumber) => {
53
- if (/\S/.test(line)) {
54
- rows.push(vcfRecordToRow(vcfParser, line, lineNumber));
55
- }
56
- });
57
- body = ''; // garbage collect
58
- const rowSet = {
59
- isLoaded: true,
60
- rows,
61
- };
62
- const columnDisplayOrder = [];
63
- const columns = [];
64
- for (let i = 0; i < vcfCoreColumns.length; i += 1) {
65
- columnDisplayOrder.push(i);
66
- columns[i] = {
67
- name: vcfCoreColumns[i].name,
68
- dataType: { type: vcfCoreColumns[i].type },
69
- };
70
- }
71
- for (let i = 0; i < vcfParser.samples.length; i += 1) {
72
- const oi = vcfCoreColumns.length + i;
73
- columnDisplayOrder.push(oi);
74
- columns[oi] = {
75
- name: vcfParser.samples[i],
76
- dataType: { type: 'Text' },
77
- };
78
- }
79
- columnDisplayOrder.push(columnDisplayOrder.length);
80
- columns.unshift({
81
- name: 'Location',
82
- dataType: { type: 'LocString' },
83
- isDerived: true,
84
- derivationFunctionText: `jexl:{text:row.extendedData.vcfFeature.refName+':'\n
85
- +row.extendedData.vcfFeature.start+'..'+row.extendedData.vcfFeature.end, extendedData:\n
86
- {refName:row.extendedData.vcfFeature.refName,start:row.extendedData.vcfFeature.start,end:row.extendedData.vcfFeature.end}}`,
87
- });
88
- return {
89
- rowSet,
90
- columnDisplayOrder,
91
- hasColumnNames: true,
92
- columns,
93
- assemblyName: selectedAssemblyName,
94
- };
95
- }
96
- function splitVcfFileHeaderAndBody(wholeFile) {
97
- // split into header and the rest of the file
98
- let headerEndIndex = 0;
99
- let prevChar;
100
- for (; headerEndIndex < wholeFile.length; headerEndIndex += 1) {
101
- const c = wholeFile[headerEndIndex];
102
- if (prevChar === '\n' && c !== '#') {
103
- break;
104
- }
105
- prevChar = c;
16
+ const keys = new Set();
17
+ const rows = [];
18
+ let i = 0;
19
+ for (const line of body) {
20
+ const [CHROM, POS, ID, REF, ALT, QUAL, FILTER, INFO, FORMAT, ...rest] = line.split('\t');
21
+ const ret = Object.fromEntries((INFO === null || INFO === void 0 ? void 0 : INFO.split(';').map(f => f.trim()).map(e => {
22
+ const [key, val = 'true'] = e.split('=');
23
+ const k = `INFO.${key.trim()}`;
24
+ keys.add(k);
25
+ const v = val.trim();
26
+ return [k, (0, isNumber_1.isNumber)(v) ? +v : v];
27
+ })) || []);
28
+ rows.push({
29
+ cellData: {
30
+ CHROM,
31
+ POS: +POS,
32
+ ID,
33
+ REF,
34
+ ALT,
35
+ QUAL: (0, isNumber_1.isNumber)(QUAL) ? +QUAL : QUAL,
36
+ FILTER,
37
+ FORMAT,
38
+ ...ret,
39
+ ...Object.fromEntries(vcfParser.samples.map((s, idx) => [s, rest[idx]])),
40
+ },
41
+ feature: new plugin_variants_1.VcfFeature({
42
+ parser: vcfParser,
43
+ variant: vcfParser.parseLine(line),
44
+ id: `vcf-${i}`,
45
+ }).toJSON(),
46
+ });
47
+ i++;
106
48
  }
107
49
  return {
108
- header: wholeFile.slice(0, Math.max(0, headerEndIndex)),
109
- body: wholeFile.slice(headerEndIndex),
50
+ columns: [
51
+ 'CHROM',
52
+ 'POS',
53
+ 'ID',
54
+ 'REF',
55
+ 'ALT',
56
+ 'QUAL',
57
+ 'FILTER',
58
+ ...keys,
59
+ 'FORMAT',
60
+ ...vcfParser.samples,
61
+ ].map(c => ({ name: c })),
62
+ rowSet: {
63
+ rows,
64
+ },
110
65
  };
111
66
  }
@@ -0,0 +1 @@
1
+ export declare function isNumber(num: unknown): num is number;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNumber = isNumber;
4
+ function isNumber(num) {
5
+ if (typeof num === 'number') {
6
+ return num - num === 0;
7
+ }
8
+ else if (typeof num === 'string' && num.trim() !== '') {
9
+ return Number.isFinite(+num);
10
+ }
11
+ else {
12
+ return false;
13
+ }
14
+ }
@@ -0,0 +1,2 @@
1
+ export declare function parseStrand(strand?: string): 1 | -1 | undefined;
2
+ export declare function bufferToLines(buffer: Uint8Array): string[];
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStrand = parseStrand;
4
+ exports.bufferToLines = bufferToLines;
5
+ function parseStrand(strand) {
6
+ if (strand === '+') {
7
+ return 1;
8
+ }
9
+ else if (strand === '-') {
10
+ return -1;
11
+ }
12
+ else {
13
+ return undefined;
14
+ }
15
+ }
16
+ function bufferToLines(buffer) {
17
+ return new TextDecoder('utf8')
18
+ .decode(buffer)
19
+ .split(/\n|\r\n|\r/)
20
+ .map(f => f.trim())
21
+ .filter(f => !!f);
22
+ }
@@ -1,3 +1,3 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
2
  export default function SpreadsheetViewF(pluginManager: PluginManager): void;
3
- export { type SpreadsheetViewModel, type SpreadsheetViewStateModel, } from './models/SpreadsheetView';
3
+ export type { SpreadsheetViewModel, SpreadsheetViewStateModel, } from './SpreadsheetViewModel';
@@ -29,13 +29,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.default = SpreadsheetViewF;
30
30
  const react_1 = require("react");
31
31
  const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
32
- const SpreadsheetView_1 = __importDefault(require("./models/SpreadsheetView"));
32
+ const SpreadsheetViewModel_1 = __importDefault(require("./SpreadsheetViewModel"));
33
33
  function SpreadsheetViewF(pluginManager) {
34
34
  pluginManager.addViewType(() => {
35
35
  return new pluggableElementTypes_1.ViewType({
36
36
  name: 'SpreadsheetView',
37
37
  displayName: 'Spreadsheet view',
38
- stateModel: SpreadsheetView_1.default,
38
+ stateModel: (0, SpreadsheetViewModel_1.default)(),
39
39
  ReactComponent: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SpreadsheetView')))),
40
40
  });
41
41
  });
@@ -0,0 +1,7 @@
1
+ import type { AbstractSessionModel } from '@jbrowse/core/util';
2
+ export declare function locationLinkClick({ assemblyName, session, locString, spreadsheetViewId, }: {
3
+ assemblyName: string;
4
+ session: AbstractSessionModel;
5
+ locString: string;
6
+ spreadsheetViewId: string;
7
+ }): Promise<void>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.locationLinkClick = locationLinkClick;
4
+ function locationLinkClick({ assemblyName, session, locString, spreadsheetViewId, }) {
5
+ const newViewId = `${spreadsheetViewId}_${assemblyName}`;
6
+ let view = session.views.find(v => v.id === newViewId);
7
+ if (!view) {
8
+ view = session.addView('LinearGenomeView', {
9
+ id: newViewId,
10
+ });
11
+ }
12
+ return view.navToLocString(locString, assemblyName);
13
+ }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
2
1
  import Plugin from '@jbrowse/core/Plugin';
2
+ import type PluginManager from '@jbrowse/core/PluginManager';
3
3
  export default class SpreadsheetViewPlugin extends Plugin {
4
4
  name: string;
5
5
  install(pluginManager: PluginManager): void;
package/dist/index.js CHANGED
@@ -5,11 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
7
7
  const util_1 = require("@jbrowse/core/util");
8
- // icons
9
8
  const ViewComfy_1 = __importDefault(require("@mui/icons-material/ViewComfy"));
10
- // locals
11
- const SpreadsheetView_1 = __importDefault(require("./SpreadsheetView"));
12
9
  const LaunchSpreadsheetView_1 = __importDefault(require("./LaunchSpreadsheetView"));
10
+ const SpreadsheetView_1 = __importDefault(require("./SpreadsheetView"));
13
11
  class SpreadsheetViewPlugin extends Plugin_1.default {
14
12
  constructor() {
15
13
  super(...arguments);
@@ -1,2 +1,2 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
2
  export default function LaunchSpreadsheetViewF(pluginManager: PluginManager): void;
@@ -1,7 +1,5 @@
1
1
  export default function LaunchSpreadsheetViewF(pluginManager) {
2
- pluginManager.addToExtensionPoint('LaunchView-SpreadsheetView',
3
- // @ts-expect-error
4
- async ({ session, assembly, uri, fileType, }) => {
2
+ pluginManager.addToExtensionPoint('LaunchView-SpreadsheetView', async ({ session, assembly, uri, fileType, }) => {
5
3
  var _a, _b;
6
4
  const view = session.addView('SpreadsheetView');
7
5
  const exts = uri.split('.');
@@ -0,0 +1,51 @@
1
+ import type { FileLocation } from '@jbrowse/core/util';
2
+ import type { Instance } from 'mobx-state-tree';
3
+ export default function stateModelFactory(): import("mobx-state-tree").IModelType<{
4
+ fileType: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
5
+ hasColumnNameLine: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
6
+ columnNameLineNumber: import("mobx-state-tree").IType<number | undefined, number, number>;
7
+ selectedAssemblyName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
8
+ cachedFileLocation: import("mobx-state-tree").IType<FileLocation | undefined, FileLocation | undefined, FileLocation | undefined>;
9
+ }, {
10
+ fileTypes: string[];
11
+ fileSource: any;
12
+ error: unknown;
13
+ loading: boolean;
14
+ } & {
15
+ readonly isReadyToOpen: any;
16
+ readonly fileName: any;
17
+ readonly requiresUnzip: any;
18
+ isValidRefName(refName: string, assemblyName?: string): boolean;
19
+ tracksForAssembly(selectedAssembly: string): {
20
+ track: {
21
+ [x: string]: any;
22
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
23
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
24
+ [x: string]: any;
25
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
26
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
27
+ [x: string]: any;
28
+ } & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
29
+ } & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
30
+ } & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
31
+ label: string;
32
+ assemblyNames: any;
33
+ type: string;
34
+ loc: FileLocation;
35
+ }[];
36
+ } & {
37
+ setSelectedAssemblyName(s: string): void;
38
+ setFileSource(newSource: unknown): void;
39
+ setColumnNameLineNumber(newnumber: number): void;
40
+ setFileType(typeName: string): void;
41
+ setError(error: unknown): void;
42
+ setLoading(arg: boolean): void;
43
+ cancelButton(): void;
44
+ setCachedFileHandle(arg: FileLocation): void;
45
+ } & {
46
+ import(assemblyName: string): Promise<void>;
47
+ } & {
48
+ afterAttach(): void;
49
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
50
+ export type ImportWizardStateModel = ReturnType<typeof stateModelFactory>;
51
+ export type ImportWizardModel = Instance<ImportWizardStateModel>;