@jbrowse/text-indexing 4.3.0 → 5.0.0-beta.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/esm/TextIndexing.d.ts +6 -4
- package/esm/TextIndexing.js +53 -112
- package/esm/index.d.ts +2 -2
- package/esm/index.js +6 -3
- package/esm/util.d.ts +5 -72
- package/esm/util.js +6 -10
- package/package.json +8 -11
package/esm/TextIndexing.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { indexType } from './util.ts';
|
|
2
|
+
import type { StatusCallback } from '@jbrowse/core/util';
|
|
3
|
+
import type { StopToken } from '@jbrowse/core/util/stopToken';
|
|
2
4
|
import type { Track } from '@jbrowse/text-indexing-core';
|
|
3
5
|
export declare function indexTracks(args: {
|
|
4
6
|
tracks: Track[];
|
|
5
|
-
outDir
|
|
6
|
-
stopToken?:
|
|
7
|
+
outDir: string;
|
|
8
|
+
stopToken?: StopToken;
|
|
7
9
|
attributesToIndex?: string[];
|
|
8
10
|
assemblyNames?: string[];
|
|
9
11
|
featureTypesToExclude?: string[];
|
|
10
12
|
indexType?: indexType;
|
|
11
|
-
statusCallback:
|
|
12
|
-
}): Promise<
|
|
13
|
+
statusCallback: StatusCallback | undefined;
|
|
14
|
+
}): Promise<void>;
|
package/esm/TextIndexing.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { Readable } from 'stream';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { generateMeta, indexGff3, indexVcf, sanitizeForFilename, } from '@jbrowse/text-indexing-core';
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { Readable } from 'node:stream';
|
|
4
|
+
import { checkStopTokenThrottled, checkStopToken, createStopTokenChecker, } from '@jbrowse/core/util/stopToken';
|
|
5
|
+
import { TRIX_DIR, defaultAttributesToIndex, defaultFeatureTypesToExclude, generateMeta, indexFiles, isSupportedIndexingAdapter, trixFilePaths, } from '@jbrowse/text-indexing-core';
|
|
7
6
|
import { ixIxxStream } from 'ixixx';
|
|
8
7
|
export async function indexTracks(args) {
|
|
9
8
|
const { tracks, outDir, attributesToIndex, featureTypesToExclude, assemblyNames, indexType, statusCallback, stopToken, } = args;
|
|
@@ -28,26 +27,20 @@ export async function indexTracks(args) {
|
|
|
28
27
|
stopToken,
|
|
29
28
|
}));
|
|
30
29
|
checkStopToken(stopToken);
|
|
31
|
-
return [];
|
|
32
30
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const trixDir = path.join(outDir, 'trix');
|
|
39
|
-
if (!fs.existsSync(trixDir)) {
|
|
40
|
-
fs.mkdirSync(trixDir);
|
|
41
|
-
}
|
|
31
|
+
function ensureTrixDir(outDir) {
|
|
32
|
+
fs.mkdirSync(path.join(outDir, TRIX_DIR), { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
async function perTrackIndex({ tracks, statusCallback, outDir, attributesToIndex = defaultAttributesToIndex, featureTypesToExclude = defaultFeatureTypesToExclude, stopToken, }) {
|
|
35
|
+
ensureTrixDir(outDir);
|
|
42
36
|
const supportedTracks = tracks.filter(track => isSupportedIndexingAdapter(track.adapter?.type));
|
|
43
37
|
for (const trackConfig of supportedTracks) {
|
|
44
38
|
const { trackId, assemblyNames } = trackConfig;
|
|
45
|
-
const id = `${trackId}-index`;
|
|
46
39
|
await indexDriver({
|
|
47
40
|
tracks: [trackConfig],
|
|
48
41
|
outDir,
|
|
49
42
|
attributesToIndex,
|
|
50
|
-
name:
|
|
43
|
+
name: `${trackId}-index`,
|
|
51
44
|
featureTypesToExclude,
|
|
52
45
|
assemblyNames,
|
|
53
46
|
statusCallback,
|
|
@@ -55,28 +48,20 @@ async function perTrackIndex({ tracks, statusCallback, outDir: paramOutDir, attr
|
|
|
55
48
|
});
|
|
56
49
|
}
|
|
57
50
|
}
|
|
58
|
-
async function aggregateIndex({ tracks, statusCallback, outDir
|
|
59
|
-
const outFlag = paramOutDir || '.';
|
|
60
|
-
const isDir = fs.lstatSync(outFlag).isDirectory();
|
|
61
|
-
const confFilePath = isDir ? path.join(outFlag, 'config.json') : outFlag;
|
|
62
|
-
const outDir = path.dirname(confFilePath);
|
|
63
|
-
const trixDir = path.join(outDir, 'trix');
|
|
64
|
-
if (!fs.existsSync(trixDir)) {
|
|
65
|
-
fs.mkdirSync(trixDir);
|
|
66
|
-
}
|
|
51
|
+
async function aggregateIndex({ tracks, statusCallback, outDir, attributesToIndex = defaultAttributesToIndex, featureTypesToExclude = defaultFeatureTypesToExclude, stopToken, assemblyNames, }) {
|
|
67
52
|
if (!assemblyNames) {
|
|
68
53
|
throw new Error('No assemblies passed. Assemblies required for aggregate indexes');
|
|
69
54
|
}
|
|
55
|
+
ensureTrixDir(outDir);
|
|
70
56
|
for (const asm of assemblyNames) {
|
|
71
|
-
const id = `${asm}-index`;
|
|
72
57
|
const supportedTracks = tracks
|
|
73
58
|
.filter(track => isSupportedIndexingAdapter(track.adapter?.type))
|
|
74
|
-
.filter(track =>
|
|
59
|
+
.filter(track => track.assemblyNames.includes(asm));
|
|
75
60
|
await indexDriver({
|
|
76
61
|
tracks: supportedTracks,
|
|
77
|
-
outDir
|
|
62
|
+
outDir,
|
|
78
63
|
attributesToIndex,
|
|
79
|
-
name:
|
|
64
|
+
name: `${asm}-index`,
|
|
80
65
|
featureTypesToExclude,
|
|
81
66
|
assemblyNames: [asm],
|
|
82
67
|
statusCallback,
|
|
@@ -85,15 +70,47 @@ async function aggregateIndex({ tracks, statusCallback, outDir: paramOutDir, att
|
|
|
85
70
|
}
|
|
86
71
|
}
|
|
87
72
|
async function indexDriver({ tracks, outDir, attributesToIndex, name, featureTypesToExclude, assemblyNames, statusCallback, stopToken, }) {
|
|
73
|
+
const checker = createStopTokenChecker(stopToken);
|
|
74
|
+
// accumulate across tracks so an aggregate index reports monotonic progress
|
|
75
|
+
// rather than resetting to zero at each track. The denominator grows as each
|
|
76
|
+
// track's size is discovered (we don't stat every file up front), but the
|
|
77
|
+
// numerator only ever increases
|
|
78
|
+
let bankedBytes = 0;
|
|
79
|
+
let cumulativeTotal = 0;
|
|
88
80
|
const readable = Readable.from(indexFiles({
|
|
89
81
|
tracks,
|
|
90
82
|
attributesToIndex,
|
|
91
83
|
outDir,
|
|
92
84
|
featureTypesToExclude,
|
|
93
|
-
|
|
94
|
-
|
|
85
|
+
checkAbort: () => {
|
|
86
|
+
checkStopTokenThrottled(checker);
|
|
87
|
+
},
|
|
88
|
+
makeProgress: () => {
|
|
89
|
+
let trackTotal = 0;
|
|
90
|
+
return {
|
|
91
|
+
onStart: bytes => {
|
|
92
|
+
trackTotal = bytes;
|
|
93
|
+
cumulativeTotal += bytes;
|
|
94
|
+
},
|
|
95
|
+
onUpdate: bytes => {
|
|
96
|
+
statusCallback?.({
|
|
97
|
+
message: 'Indexing files',
|
|
98
|
+
current: bankedBytes + bytes,
|
|
99
|
+
total: cumulativeTotal,
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
onDone: () => {
|
|
103
|
+
bankedBytes += trackTotal;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
},
|
|
95
107
|
}));
|
|
96
|
-
|
|
108
|
+
// records stream straight into ixIxx, so 'end' is where the byte counts stop
|
|
109
|
+
// and the sort's own tail begins — otherwise minutes of a bar stuck at 100%
|
|
110
|
+
readable.on('end', () => {
|
|
111
|
+
statusCallback?.('Sorting and writing index');
|
|
112
|
+
});
|
|
113
|
+
statusCallback?.('Indexing files');
|
|
97
114
|
await runIxIxx(readable, outDir, name);
|
|
98
115
|
checkStopToken(stopToken);
|
|
99
116
|
generateMeta({
|
|
@@ -106,83 +123,7 @@ async function indexDriver({ tracks, outDir, attributesToIndex, name, featureTyp
|
|
|
106
123
|
});
|
|
107
124
|
checkStopToken(stopToken);
|
|
108
125
|
}
|
|
109
|
-
async function* indexFiles({ tracks, attributesToIndex: idx1, outDir, featureTypesToExclude: edx1, statusCallback, }) {
|
|
110
|
-
for (const track of tracks) {
|
|
111
|
-
const { adapter, textSearching } = track;
|
|
112
|
-
const { type } = adapter || {};
|
|
113
|
-
const { indexingFeatureTypesToExclude: featureTypesToExclude = edx1, indexingAttributes: attributesToIndex = idx1, } = textSearching || {};
|
|
114
|
-
let myTotalBytes;
|
|
115
|
-
if (type === 'Gff3Adapter') {
|
|
116
|
-
yield* indexGff3({
|
|
117
|
-
config: track,
|
|
118
|
-
attributesToIndex,
|
|
119
|
-
inLocation: getLoc('gffLocation', track),
|
|
120
|
-
outDir,
|
|
121
|
-
featureTypesToExclude,
|
|
122
|
-
onStart: totalBytes => {
|
|
123
|
-
myTotalBytes = totalBytes;
|
|
124
|
-
},
|
|
125
|
-
onUpdate: progressBytes => {
|
|
126
|
-
statusCallback(`${progressBytes}/${myTotalBytes}`);
|
|
127
|
-
},
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
else if (type === 'Gff3TabixAdapter') {
|
|
131
|
-
yield* indexGff3({
|
|
132
|
-
config: track,
|
|
133
|
-
attributesToIndex,
|
|
134
|
-
inLocation: getLoc('gffGzLocation', track),
|
|
135
|
-
outDir,
|
|
136
|
-
featureTypesToExclude,
|
|
137
|
-
onStart: totalBytes => {
|
|
138
|
-
myTotalBytes = totalBytes;
|
|
139
|
-
},
|
|
140
|
-
onUpdate: progressBytes => {
|
|
141
|
-
statusCallback(`${progressBytes}/${myTotalBytes}`);
|
|
142
|
-
},
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
else if (type === 'VcfAdapter') {
|
|
146
|
-
yield* indexVcf({
|
|
147
|
-
config: track,
|
|
148
|
-
attributesToIndex,
|
|
149
|
-
inLocation: getLoc('vcfLocation', track),
|
|
150
|
-
outDir,
|
|
151
|
-
onStart: totalBytes => {
|
|
152
|
-
myTotalBytes = totalBytes;
|
|
153
|
-
},
|
|
154
|
-
onUpdate: progressBytes => {
|
|
155
|
-
statusCallback(`${progressBytes}/${myTotalBytes}`);
|
|
156
|
-
},
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
else if (type === 'VcfTabixAdapter') {
|
|
160
|
-
yield* indexVcf({
|
|
161
|
-
config: track,
|
|
162
|
-
attributesToIndex,
|
|
163
|
-
inLocation: getLoc('vcfGzLocation', track),
|
|
164
|
-
outDir,
|
|
165
|
-
onStart: totalBytes => {
|
|
166
|
-
myTotalBytes = totalBytes;
|
|
167
|
-
},
|
|
168
|
-
onUpdate: progressBytes => {
|
|
169
|
-
statusCallback(`${progressBytes}/${myTotalBytes}`);
|
|
170
|
-
},
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
function getLoc(attr, config) {
|
|
177
|
-
const elt = config.adapter?.[attr];
|
|
178
|
-
if (!elt) {
|
|
179
|
-
throw new Error(`can't get find ${attr} from ${config.adapter} for text indexing`);
|
|
180
|
-
}
|
|
181
|
-
return elt.uri || elt.localPath;
|
|
182
|
-
}
|
|
183
126
|
function runIxIxx(readStream, idxLocation, name) {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
const ixxFilename = path.join(idxLocation, 'trix', `${safeName}.ixx`);
|
|
187
|
-
return ixIxxStream(readStream, ixFilename, ixxFilename);
|
|
127
|
+
const { ix, ixx } = trixFilePaths(idxLocation, name);
|
|
128
|
+
return ixIxxStream(readStream, ix, ixx);
|
|
188
129
|
}
|
package/esm/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { createTextSearchConf, findTrackConfigsToIndex } from './util.ts';
|
|
2
|
+
export type { indexType } from './util.ts';
|
|
3
3
|
export { indexTracks } from './TextIndexing.ts';
|
package/esm/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// This package is the desktop-facing wrapper around `@jbrowse/text-indexing-core`
|
|
2
|
+
// — it adds `indexTracks` and the config helpers below, and nothing else. It
|
|
3
|
+
// deliberately re-exports none of core's surface: a symbol gets one import path,
|
|
4
|
+
// so the two packages cannot drift into disagreeing about the same name.
|
|
5
|
+
export { createTextSearchConf, findTrackConfigsToIndex } from './util.js';
|
|
6
|
+
export { indexTracks } from './TextIndexing.js';
|
package/esm/util.d.ts
CHANGED
|
@@ -1,88 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export interface IndexedFastaAdapter {
|
|
3
|
-
type: 'IndexedFastaAdapter';
|
|
4
|
-
fastaLocation: UriLocation;
|
|
5
|
-
faiLocation: UriLocation;
|
|
6
|
-
}
|
|
7
|
-
export interface BgzipFastaAdapter {
|
|
8
|
-
type: 'BgzipFastaAdapter';
|
|
9
|
-
fastaLocation: UriLocation;
|
|
10
|
-
faiLocation: UriLocation;
|
|
11
|
-
gziLocation: UriLocation;
|
|
12
|
-
}
|
|
13
|
-
export interface TwoBitAdapter {
|
|
14
|
-
type: 'TwoBitAdapter';
|
|
15
|
-
twoBitLocation: UriLocation;
|
|
16
|
-
}
|
|
17
|
-
export interface ChromeSizesAdapter {
|
|
18
|
-
type: 'ChromSizesAdapter';
|
|
19
|
-
chromSizesLocation: UriLocation;
|
|
20
|
-
}
|
|
21
|
-
export interface CustomSequenceAdapter {
|
|
22
|
-
type: string;
|
|
23
|
-
}
|
|
24
|
-
export interface RefNameAliasAdapter {
|
|
25
|
-
type: 'RefNameAliasAdapter';
|
|
26
|
-
location: UriLocation;
|
|
27
|
-
}
|
|
28
|
-
export interface CustomRefNameAliasAdapter {
|
|
29
|
-
type: string;
|
|
30
|
-
}
|
|
31
|
-
export interface Assembly {
|
|
32
|
-
displayName?: string;
|
|
33
|
-
name: string;
|
|
34
|
-
aliases?: string[];
|
|
35
|
-
sequence: Sequence;
|
|
36
|
-
refNameAliases?: {
|
|
37
|
-
adapter: RefNameAliasAdapter | CustomRefNameAliasAdapter;
|
|
38
|
-
};
|
|
39
|
-
refNameColors?: string[];
|
|
40
|
-
}
|
|
41
|
-
export interface Sequence {
|
|
42
|
-
type: 'ReferenceSequenceTrack';
|
|
43
|
-
trackId: string;
|
|
44
|
-
adapter: IndexedFastaAdapter | BgzipFastaAdapter | TwoBitAdapter | ChromeSizesAdapter | CustomSequenceAdapter;
|
|
45
|
-
}
|
|
46
|
-
export interface TrixTextSearchAdapter {
|
|
47
|
-
type: string;
|
|
48
|
-
textSearchAdapterId: string;
|
|
49
|
-
ixFilePath: UriLocation | LocalPathLocation;
|
|
50
|
-
ixxFilePath: UriLocation | LocalPathLocation;
|
|
51
|
-
metaFilePath: UriLocation | LocalPathLocation;
|
|
52
|
-
assemblyNames: string[];
|
|
53
|
-
}
|
|
54
|
-
export interface TextSearching {
|
|
55
|
-
indexingFeatureTypesToExclude?: string[];
|
|
56
|
-
indexingAttributes?: string[];
|
|
57
|
-
textSearchAdapter?: TrixTextSearchAdapter;
|
|
58
|
-
[key: string]: unknown;
|
|
59
|
-
}
|
|
60
|
-
export interface Config {
|
|
61
|
-
assemblies?: Assembly[];
|
|
62
|
-
assembly?: Assembly;
|
|
63
|
-
configuration?: Record<string, unknown>;
|
|
64
|
-
aggregateTextSearchAdapters?: TrixTextSearchAdapter[];
|
|
65
|
-
connections?: unknown[];
|
|
66
|
-
defaultSession?: Record<string, unknown>;
|
|
67
|
-
tracks?: Track[];
|
|
68
|
-
}
|
|
1
|
+
import type { Track } from '@jbrowse/text-indexing-core';
|
|
69
2
|
export type indexType = 'aggregate' | 'perTrack';
|
|
70
3
|
export declare function createTextSearchConf(name: string, trackIds: string[], assemblyNames: string[], locationPath: string): {
|
|
71
4
|
type: string;
|
|
72
5
|
textSearchAdapterId: string;
|
|
73
6
|
ixFilePath: {
|
|
74
7
|
localPath: string;
|
|
75
|
-
locationType:
|
|
8
|
+
locationType: 'LocalPathLocation';
|
|
76
9
|
};
|
|
77
10
|
ixxFilePath: {
|
|
78
11
|
localPath: string;
|
|
79
|
-
locationType:
|
|
12
|
+
locationType: 'LocalPathLocation';
|
|
80
13
|
};
|
|
81
14
|
metaFilePath: {
|
|
82
15
|
localPath: string;
|
|
83
|
-
locationType:
|
|
16
|
+
locationType: 'LocalPathLocation';
|
|
84
17
|
};
|
|
85
18
|
tracks: string[];
|
|
86
19
|
assemblyNames: string[];
|
|
87
20
|
};
|
|
88
|
-
export declare function findTrackConfigsToIndex(tracks: Track[], trackIds: string[]
|
|
21
|
+
export declare function findTrackConfigsToIndex(tracks: Track[], trackIds: string[]): Track[];
|
package/esm/util.js
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { isSupportedIndexingAdapter } from '@jbrowse/core/util';
|
|
3
|
-
import { sanitizeForFilename } from '@jbrowse/text-indexing-core';
|
|
1
|
+
import { isSupportedIndexingAdapter, trixFilePaths, } from '@jbrowse/text-indexing-core';
|
|
4
2
|
export function createTextSearchConf(name, trackIds, assemblyNames, locationPath) {
|
|
5
|
-
const
|
|
6
|
-
const n = sanitizeForFilename(name);
|
|
3
|
+
const paths = trixFilePaths(locationPath, name);
|
|
7
4
|
return {
|
|
8
5
|
type: 'TrixTextSearchAdapter',
|
|
9
6
|
textSearchAdapterId: name,
|
|
10
7
|
ixFilePath: {
|
|
11
|
-
localPath:
|
|
8
|
+
localPath: paths.ix,
|
|
12
9
|
locationType: 'LocalPathLocation',
|
|
13
10
|
},
|
|
14
11
|
ixxFilePath: {
|
|
15
|
-
localPath:
|
|
12
|
+
localPath: paths.ixx,
|
|
16
13
|
locationType: 'LocalPathLocation',
|
|
17
14
|
},
|
|
18
15
|
metaFilePath: {
|
|
19
|
-
localPath:
|
|
16
|
+
localPath: paths.meta,
|
|
20
17
|
locationType: 'LocalPathLocation',
|
|
21
18
|
},
|
|
22
19
|
tracks: trackIds,
|
|
23
20
|
assemblyNames,
|
|
24
21
|
};
|
|
25
22
|
}
|
|
26
|
-
export function findTrackConfigsToIndex(tracks, trackIds
|
|
23
|
+
export function findTrackConfigsToIndex(tracks, trackIds) {
|
|
27
24
|
return trackIds
|
|
28
25
|
.map(trackId => {
|
|
29
26
|
const currentTrack = tracks.find(t => trackId === t.trackId);
|
|
@@ -32,6 +29,5 @@ export function findTrackConfigsToIndex(tracks, trackIds, assemblyName) {
|
|
|
32
29
|
}
|
|
33
30
|
return currentTrack;
|
|
34
31
|
})
|
|
35
|
-
.filter(track => assemblyName ? track.assemblyNames.includes(assemblyName) : true)
|
|
36
32
|
.filter(track => isSupportedIndexingAdapter(track.adapter?.type));
|
|
37
33
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/text-indexing",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "JBrowse 2 text indexing for desktop",
|
|
6
6
|
"keywords": [
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
"esm"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"ixixx": "^3.0.
|
|
28
|
-
"@jbrowse/text-indexing-core": "^
|
|
29
|
-
"@jbrowse/core": "^
|
|
27
|
+
"ixixx": "^3.0.13",
|
|
28
|
+
"@jbrowse/text-indexing-core": "^5.0.0-beta.1",
|
|
29
|
+
"@jbrowse/core": "^5.0.0-beta.1"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"react": ">=
|
|
33
|
-
"react-dom": ">=
|
|
32
|
+
"react": ">=19.0.0",
|
|
33
|
+
"react-dom": ">=19.0.0"
|
|
34
34
|
},
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
38
|
"sideEffects": false,
|
|
39
39
|
"scripts": {
|
|
40
|
-
"build:esm": "tsc
|
|
40
|
+
"build:esm": "node ../../node_modules/typescript7/bin/tsc --build tsconfig.build.esm.json",
|
|
41
41
|
"build": "pnpm build:esm",
|
|
42
42
|
"test": "cd ../..; jest --passWithNoTests packages/text-indexing",
|
|
43
43
|
"clean": "rimraf esm *.tsbuildinfo",
|
|
@@ -45,9 +45,6 @@
|
|
|
45
45
|
},
|
|
46
46
|
"types": "esm/index.d.ts",
|
|
47
47
|
"exports": {
|
|
48
|
-
".":
|
|
49
|
-
"types": "./esm/index.d.ts",
|
|
50
|
-
"import": "./esm/index.js"
|
|
51
|
-
}
|
|
48
|
+
".": "./esm/index.js"
|
|
52
49
|
}
|
|
53
50
|
}
|