@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 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
- return [4 /*yield*/, this.ixFile.read(CHUNK_SIZE, end, opts)];
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 += CHUNK_SIZE;
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.ixFile.read(end - start, start, opts)];
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":"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"}
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
- // fetch more data
61
- const res2 = await this.ixFile.read(CHUNK_SIZE, end, opts);
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 += CHUNK_SIZE;
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":"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"}
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.9",
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.9",
45
- "@typescript-eslint/eslint-plugin": "^8.53.0",
46
- "@typescript-eslint/parser": "^8.53.0",
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.0",
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.0",
55
- "vitest": "^4.0.17"
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
- // fetch more data
72
- const res2 = await this.ixFile.read(CHUNK_SIZE, end, opts)
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 += CHUNK_SIZE
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
  }