@gmod/trix 3.0.9 → 3.0.10
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/dist/index.d.ts +2 -0
- package/dist/index.js +46 -6
- package/dist/index.js.map +1 -1
- package/esm/index.d.ts +2 -0
- package/esm/index.js +32 -4
- package/esm/index.js.map +1 -1
- package/package.json +8 -7
- package/src/index.ts +34 -4
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,9 @@ export default class Trix {
|
|
|
5
5
|
maxResults: number;
|
|
6
6
|
private decoder;
|
|
7
7
|
private indexCache?;
|
|
8
|
+
private ixFileSize?;
|
|
8
9
|
constructor(ixxFile: GenericFilehandle, ixFile: GenericFilehandle, maxResults?: number);
|
|
10
|
+
private getIxFileSize;
|
|
9
11
|
search(searchString: string, opts?: {
|
|
10
12
|
signal?: AbortSignal;
|
|
11
13
|
}): Promise<[string, string][]>;
|
package/dist/index.js
CHANGED
|
@@ -61,9 +61,34 @@ var Trix = /** @class */ (function () {
|
|
|
61
61
|
this.maxResults = maxResults;
|
|
62
62
|
this.decoder = new TextDecoder('utf8');
|
|
63
63
|
}
|
|
64
|
+
Trix.prototype.getIxFileSize = function (opts) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
66
|
+
var stat, _a;
|
|
67
|
+
return __generator(this, function (_b) {
|
|
68
|
+
switch (_b.label) {
|
|
69
|
+
case 0:
|
|
70
|
+
if (this.ixFileSize !== undefined) {
|
|
71
|
+
return [2 /*return*/, this.ixFileSize];
|
|
72
|
+
}
|
|
73
|
+
_b.label = 1;
|
|
74
|
+
case 1:
|
|
75
|
+
_b.trys.push([1, 3, , 4]);
|
|
76
|
+
return [4 /*yield*/, this.ixFile.stat(opts)];
|
|
77
|
+
case 2:
|
|
78
|
+
stat = _b.sent();
|
|
79
|
+
this.ixFileSize = stat.size;
|
|
80
|
+
return [2 /*return*/, this.ixFileSize];
|
|
81
|
+
case 3:
|
|
82
|
+
_a = _b.sent();
|
|
83
|
+
return [2 /*return*/, undefined];
|
|
84
|
+
case 4: return [2 /*return*/];
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
};
|
|
64
89
|
Trix.prototype.search = function (searchString, opts) {
|
|
65
90
|
return __awaiter(this, void 0, void 0, function () {
|
|
66
|
-
var resultArr, searchWords, firstWord, searchWord, res, end, buffer, done, str, lines, hits2, _i, lines_1, line, word, hits, res2;
|
|
91
|
+
var resultArr, searchWords, firstWord, searchWord, res, end, buffer, fileSize, done, str, lines, hits2, _i, lines_1, line, word, hits, bytesToRead, res2;
|
|
67
92
|
return __generator(this, function (_a) {
|
|
68
93
|
switch (_a.label) {
|
|
69
94
|
case 0:
|
|
@@ -76,6 +101,7 @@ var Trix = /** @class */ (function () {
|
|
|
76
101
|
case 1:
|
|
77
102
|
res = _a.sent();
|
|
78
103
|
end = res.end, buffer = res.buffer;
|
|
104
|
+
fileSize = res.fileSize;
|
|
79
105
|
done = false;
|
|
80
106
|
_a.label = 2;
|
|
81
107
|
case 2:
|
|
@@ -109,14 +135,22 @@ var Trix = /** @class */ (function () {
|
|
|
109
135
|
if (done || resultArr.length >= this.maxResults) {
|
|
110
136
|
return [3 /*break*/, 4];
|
|
111
137
|
}
|
|
112
|
-
|
|
138
|
+
// avoid reading past end of file
|
|
139
|
+
if (fileSize !== undefined && end >= fileSize) {
|
|
140
|
+
return [3 /*break*/, 4];
|
|
141
|
+
}
|
|
142
|
+
bytesToRead = CHUNK_SIZE;
|
|
143
|
+
if (fileSize !== undefined) {
|
|
144
|
+
bytesToRead = Math.min(CHUNK_SIZE, fileSize - end);
|
|
145
|
+
}
|
|
146
|
+
return [4 /*yield*/, this.ixFile.read(bytesToRead, end, opts)];
|
|
113
147
|
case 3:
|
|
114
148
|
res2 = _a.sent();
|
|
115
149
|
if (res2.length === 0) {
|
|
116
150
|
return [3 /*break*/, 4];
|
|
117
151
|
}
|
|
118
152
|
buffer = (0, util_ts_1.concatUint8Array)([buffer, res2]);
|
|
119
|
-
end +=
|
|
153
|
+
end += res2.length;
|
|
120
154
|
return [3 /*break*/, 2];
|
|
121
155
|
case 4:
|
|
122
156
|
// de-duplicate results based on the detail column (resultArr[1])
|
|
@@ -155,7 +189,7 @@ var Trix = /** @class */ (function () {
|
|
|
155
189
|
};
|
|
156
190
|
Trix.prototype.getBuffer = function (searchWord, opts) {
|
|
157
191
|
return __awaiter(this, void 0, void 0, function () {
|
|
158
|
-
var start, end, indexes, _i, indexes_1, _a, key, value, trimmedKey, buffer;
|
|
192
|
+
var start, end, indexes, _i, indexes_1, _a, key, value, trimmedKey, fileSize, buffer;
|
|
159
193
|
return __generator(this, function (_b) {
|
|
160
194
|
switch (_b.label) {
|
|
161
195
|
case 0:
|
|
@@ -172,10 +206,16 @@ var Trix = /** @class */ (function () {
|
|
|
172
206
|
end = value + CHUNK_SIZE;
|
|
173
207
|
}
|
|
174
208
|
}
|
|
175
|
-
return [4 /*yield*/, this.
|
|
209
|
+
return [4 /*yield*/, this.getIxFileSize(opts)];
|
|
176
210
|
case 2:
|
|
211
|
+
fileSize = _b.sent();
|
|
212
|
+
if (fileSize !== undefined) {
|
|
213
|
+
end = Math.min(end, fileSize);
|
|
214
|
+
}
|
|
215
|
+
return [4 /*yield*/, this.ixFile.read(end - start, start, opts)];
|
|
216
|
+
case 3:
|
|
177
217
|
buffer = _b.sent();
|
|
178
|
-
return [2 /*return*/, { buffer: buffer, end: end }];
|
|
218
|
+
return [2 /*return*/, { buffer: buffer, end: end, fileSize: fileSize }];
|
|
179
219
|
}
|
|
180
220
|
});
|
|
181
221
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,qCAA4C;AAI5C,IAAM,UAAU,GAAG,KAAK,CAAA;AAExB,4EAA4E;AAC5E,iEAAiE;AACjE,IAAM,YAAY,GAAG,EAAE,CAAA;AAEvB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
CHANGED
|
@@ -5,7 +5,9 @@ export default class Trix {
|
|
|
5
5
|
maxResults: number;
|
|
6
6
|
private decoder;
|
|
7
7
|
private indexCache?;
|
|
8
|
+
private ixFileSize?;
|
|
8
9
|
constructor(ixxFile: GenericFilehandle, ixFile: GenericFilehandle, maxResults?: number);
|
|
10
|
+
private getIxFileSize;
|
|
9
11
|
search(searchString: string, opts?: {
|
|
10
12
|
signal?: AbortSignal;
|
|
11
13
|
}): Promise<[string, string][]>;
|
package/esm/index.js
CHANGED
|
@@ -10,11 +10,26 @@ export default class Trix {
|
|
|
10
10
|
maxResults;
|
|
11
11
|
decoder = new TextDecoder('utf8');
|
|
12
12
|
indexCache;
|
|
13
|
+
ixFileSize;
|
|
13
14
|
constructor(ixxFile, ixFile, maxResults = 20) {
|
|
14
15
|
this.ixxFile = ixxFile;
|
|
15
16
|
this.ixFile = ixFile;
|
|
16
17
|
this.maxResults = maxResults;
|
|
17
18
|
}
|
|
19
|
+
async getIxFileSize(opts) {
|
|
20
|
+
if (this.ixFileSize !== undefined) {
|
|
21
|
+
return this.ixFileSize;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
// @ts-expect-error
|
|
25
|
+
const stat = await this.ixFile.stat(opts);
|
|
26
|
+
this.ixFileSize = stat.size;
|
|
27
|
+
return this.ixFileSize;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
18
33
|
async search(searchString, opts) {
|
|
19
34
|
let resultArr = [];
|
|
20
35
|
const searchWords = searchString.split(' ');
|
|
@@ -24,6 +39,7 @@ export default class Trix {
|
|
|
24
39
|
const searchWord = firstWord.toLowerCase();
|
|
25
40
|
const res = await this.getBuffer(searchWord, opts);
|
|
26
41
|
let { end, buffer } = res;
|
|
42
|
+
const { fileSize } = res;
|
|
27
43
|
let done = false;
|
|
28
44
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
29
45
|
while (!done) {
|
|
@@ -57,13 +73,21 @@ export default class Trix {
|
|
|
57
73
|
if (done || resultArr.length >= this.maxResults) {
|
|
58
74
|
break;
|
|
59
75
|
}
|
|
60
|
-
//
|
|
61
|
-
|
|
76
|
+
// avoid reading past end of file
|
|
77
|
+
if (fileSize !== undefined && end >= fileSize) {
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
// fetch more data, clamping to file size if known
|
|
81
|
+
let bytesToRead = CHUNK_SIZE;
|
|
82
|
+
if (fileSize !== undefined) {
|
|
83
|
+
bytesToRead = Math.min(CHUNK_SIZE, fileSize - end);
|
|
84
|
+
}
|
|
85
|
+
const res2 = await this.ixFile.read(bytesToRead, end, opts);
|
|
62
86
|
if (res2.length === 0) {
|
|
63
87
|
break;
|
|
64
88
|
}
|
|
65
89
|
buffer = concatUint8Array([buffer, res2]);
|
|
66
|
-
end +=
|
|
90
|
+
end += res2.length;
|
|
67
91
|
}
|
|
68
92
|
}
|
|
69
93
|
// de-duplicate results based on the detail column (resultArr[1])
|
|
@@ -101,8 +125,12 @@ export default class Trix {
|
|
|
101
125
|
end = value + CHUNK_SIZE;
|
|
102
126
|
}
|
|
103
127
|
}
|
|
128
|
+
const fileSize = await this.getIxFileSize(opts);
|
|
129
|
+
if (fileSize !== undefined) {
|
|
130
|
+
end = Math.min(end, fileSize);
|
|
131
|
+
}
|
|
104
132
|
const buffer = await this.ixFile.read(end - start, start, opts);
|
|
105
|
-
return { buffer, end };
|
|
133
|
+
return { buffer, end, fileSize };
|
|
106
134
|
}
|
|
107
135
|
}
|
|
108
136
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAI5C,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,4EAA4E;AAC5E,iEAAiE;AACjE,MAAM,YAAY,GAAG,EAAE,CAAA;AAEvB,MAAM,CAAC,OAAO,OAAO,IAAI;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmod/trix",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.10",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./esm/index.js",
|
|
@@ -41,18 +41,19 @@
|
|
|
41
41
|
"author": "Matt Morgan",
|
|
42
42
|
"repository": "GMOD/trix-js",
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@types/node": "^25.0.
|
|
45
|
-
"@typescript-eslint/eslint-plugin": "^8.53.
|
|
46
|
-
"@typescript-eslint/parser": "^8.53.
|
|
44
|
+
"@types/node": "^25.0.10",
|
|
45
|
+
"@typescript-eslint/eslint-plugin": "^8.53.1",
|
|
46
|
+
"@typescript-eslint/parser": "^8.53.1",
|
|
47
47
|
"eslint": "^9.0.0",
|
|
48
48
|
"eslint-plugin-import": "^2.31.0",
|
|
49
49
|
"eslint-plugin-unicorn": "^62.0.0",
|
|
50
50
|
"generic-filehandle2": "^2.0.18",
|
|
51
|
-
"prettier": "^3.8.
|
|
51
|
+
"prettier": "^3.8.1",
|
|
52
|
+
"puppeteer": "^24.0.0",
|
|
52
53
|
"rimraf": "^6.0.1",
|
|
53
54
|
"typescript": "^5.7.0",
|
|
54
|
-
"typescript-eslint": "^8.53.
|
|
55
|
-
"vitest": "^4.0.
|
|
55
|
+
"typescript-eslint": "^8.53.1",
|
|
56
|
+
"vitest": "^4.0.18"
|
|
56
57
|
},
|
|
57
58
|
"publishConfig": {
|
|
58
59
|
"access": "public"
|
package/src/index.ts
CHANGED
|
@@ -12,6 +12,7 @@ const ADDRESS_SIZE = 10
|
|
|
12
12
|
export default class Trix {
|
|
13
13
|
private decoder = new TextDecoder('utf8')
|
|
14
14
|
private indexCache?: readonly (readonly [string, number])[]
|
|
15
|
+
private ixFileSize?: number
|
|
15
16
|
|
|
16
17
|
constructor(
|
|
17
18
|
public ixxFile: GenericFilehandle,
|
|
@@ -19,6 +20,20 @@ export default class Trix {
|
|
|
19
20
|
public maxResults = 20,
|
|
20
21
|
) {}
|
|
21
22
|
|
|
23
|
+
private async getIxFileSize(opts?: { signal?: AbortSignal }) {
|
|
24
|
+
if (this.ixFileSize !== undefined) {
|
|
25
|
+
return this.ixFileSize
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
// @ts-expect-error
|
|
29
|
+
const stat = await this.ixFile.stat(opts)
|
|
30
|
+
this.ixFileSize = stat.size
|
|
31
|
+
return this.ixFileSize
|
|
32
|
+
} catch {
|
|
33
|
+
return undefined
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
22
37
|
async search(searchString: string, opts?: { signal?: AbortSignal }) {
|
|
23
38
|
let resultArr = [] as [string, string][]
|
|
24
39
|
const searchWords = searchString.split(' ')
|
|
@@ -30,6 +45,7 @@ export default class Trix {
|
|
|
30
45
|
const res = await this.getBuffer(searchWord, opts)
|
|
31
46
|
|
|
32
47
|
let { end, buffer } = res
|
|
48
|
+
const { fileSize } = res
|
|
33
49
|
let done = false
|
|
34
50
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
35
51
|
while (!done) {
|
|
@@ -68,13 +84,22 @@ export default class Trix {
|
|
|
68
84
|
break
|
|
69
85
|
}
|
|
70
86
|
|
|
71
|
-
//
|
|
72
|
-
|
|
87
|
+
// avoid reading past end of file
|
|
88
|
+
if (fileSize !== undefined && end >= fileSize) {
|
|
89
|
+
break
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// fetch more data, clamping to file size if known
|
|
93
|
+
let bytesToRead = CHUNK_SIZE
|
|
94
|
+
if (fileSize !== undefined) {
|
|
95
|
+
bytesToRead = Math.min(CHUNK_SIZE, fileSize - end)
|
|
96
|
+
}
|
|
97
|
+
const res2 = await this.ixFile.read(bytesToRead, end, opts)
|
|
73
98
|
if (res2.length === 0) {
|
|
74
99
|
break
|
|
75
100
|
}
|
|
76
101
|
buffer = concatUint8Array([buffer, res2])
|
|
77
|
-
end +=
|
|
102
|
+
end += res2.length
|
|
78
103
|
}
|
|
79
104
|
}
|
|
80
105
|
|
|
@@ -116,7 +141,12 @@ export default class Trix {
|
|
|
116
141
|
}
|
|
117
142
|
}
|
|
118
143
|
|
|
144
|
+
const fileSize = await this.getIxFileSize(opts)
|
|
145
|
+
if (fileSize !== undefined) {
|
|
146
|
+
end = Math.min(end, fileSize)
|
|
147
|
+
}
|
|
148
|
+
|
|
119
149
|
const buffer = await this.ixFile.read(end - start, start, opts)
|
|
120
|
-
return { buffer, end }
|
|
150
|
+
return { buffer, end, fileSize }
|
|
121
151
|
}
|
|
122
152
|
}
|