hunspell-reader 6.31.1 → 7.0.0-alpha.2

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/bin.js CHANGED
@@ -1,5 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- 'use strict';
4
-
5
- require('./dist/app');
3
+ import './dist/app.js';
@@ -1,8 +1,8 @@
1
1
  import type { Sequence } from 'gensequence';
2
- import type { Aff } from './aff';
3
- import type { AffWord } from './affDef';
4
- import type { WordInfo } from './types';
5
- export { WordInfo } from './types';
2
+ import type { Aff } from './aff.js';
3
+ import type { AffWord } from './affDef.js';
4
+ import type { WordInfo } from './types.js';
5
+ export { WordInfo } from './types.js';
6
6
  export interface HunspellSrcData {
7
7
  /** The Aff rules to use with the dictionary entries */
8
8
  aff: Aff;
@@ -1,36 +1,11 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.createMatchingWordsFilter = exports.IterableHunspellReader = void 0;
27
- const fs = __importStar(require("fs/promises"));
28
- const gensequence_1 = require("gensequence");
29
- const iconv_lite_1 = require("iconv-lite");
30
- const affReader_1 = require("./affReader");
31
- const util_1 = require("./util");
1
+ import * as fs from 'fs/promises';
2
+ import { genSequence } from 'gensequence';
3
+ import pkgIconvLite from 'iconv-lite';
4
+ import { parseAffFileToAff } from './affReader.js';
5
+ import { filterOrderedList } from './util.js';
6
+ const { decode } = pkgIconvLite;
32
7
  const defaultEncoding = 'UTF-8';
33
- class IterableHunspellReader {
8
+ export class IterableHunspellReader {
34
9
  constructor(src) {
35
10
  this.src = src;
36
11
  this.aff = src.aff;
@@ -52,7 +27,7 @@ class IterableHunspellReader {
52
27
  * @internal
53
28
  */
54
29
  dicWordsSeq() {
55
- return (0, gensequence_1.genSequence)(this.src.dic).map((line) => {
30
+ return genSequence(this.src.dic).map((line) => {
56
31
  const [word, rules] = line.split('/', 2);
57
32
  return { word, rules, prefixes: [], suffixes: [] };
58
33
  });
@@ -89,7 +64,7 @@ class IterableHunspellReader {
89
64
  * It is mostly used for monitoring progress in combination with `size`.
90
65
  */
91
66
  seqTransformDictionaryEntries(tapPreApplyRules, maxDepth) {
92
- const seq = (0, gensequence_1.genSequence)(this.src.dic);
67
+ const seq = genSequence(this.src.dic);
93
68
  let count = 0;
94
69
  const dicWords = tapPreApplyRules ? seq.map((a) => (tapPreApplyRules(a, count++), a)) : seq;
95
70
  return dicWords.map((dicWord) => this.aff.applyRulesToDicEntry(dicWord, maxDepth));
@@ -128,9 +103,9 @@ class IterableHunspellReader {
128
103
  * @returns IterableHunspellReader
129
104
  */
130
105
  static async createFromFiles(affFile, dicFile) {
131
- const aff = await (0, affReader_1.parseAffFileToAff)(affFile, defaultEncoding);
106
+ const aff = await parseAffFileToAff(affFile, defaultEncoding);
132
107
  const buffer = await fs.readFile(dicFile);
133
- const dicFileContent = (0, iconv_lite_1.decode)(buffer, aff.affInfo.SET);
108
+ const dicFileContent = decode(buffer, aff.affInfo.SET);
134
109
  const dic = dicFileContent
135
110
  .split('\n')
136
111
  .slice(1) // The first entry is the count of entries.
@@ -139,9 +114,7 @@ class IterableHunspellReader {
139
114
  return new IterableHunspellReader({ aff, dic });
140
115
  }
141
116
  }
142
- exports.IterableHunspellReader = IterableHunspellReader;
143
- function createMatchingWordsFilter() {
144
- return (0, util_1.filterOrderedList)((a, b) => a !== b);
117
+ export function createMatchingWordsFilter() {
118
+ return filterOrderedList((a, b) => a !== b);
145
119
  }
146
- exports.createMatchingWordsFilter = createMatchingWordsFilter;
147
120
  //# sourceMappingURL=IterableHunspellReader.js.map
package/dist/aff.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { AffInfo, AffWord, AffWordFlags, Fx, Rule, Substitution } from './affDef';
2
- import { Converter } from './converter';
1
+ import type { AffInfo, AffWord, AffWordFlags, Fx, Rule, Substitution } from './affDef.js';
2
+ import { Converter } from './converter.js';
3
3
  /** The `word` field in a Converted AffWord has been converted using the OCONV mapping */
4
4
  export type ConvertedAffWord = AffWord;
5
5
  export declare class Aff {
package/dist/aff.js CHANGED
@@ -1,43 +1,17 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.debug = exports.filterAff = exports.compareAff = exports.asAffWord = exports.flagsToString = exports.affWordToColoredString = exports.logAffWord = exports.processRules = exports.Aff = void 0;
27
- const GS = __importStar(require("gensequence"));
28
- const gensequence_1 = require("gensequence");
29
- const util = __importStar(require("util"));
30
- const converter_1 = require("./converter");
31
- const util_1 = require("./util");
1
+ import * as GS from 'gensequence';
2
+ import { genSequence as gs } from 'gensequence';
3
+ import * as util from 'util';
4
+ import { Converter } from './converter.js';
5
+ import { filterOrderedList, isDefined } from './util.js';
32
6
  const log = false;
33
7
  const DefaultMaxDepth = 5;
34
- class Aff {
8
+ export class Aff {
35
9
  constructor(affInfo) {
36
10
  this.affInfo = affInfo;
37
11
  this._maxSuffixDepth = DefaultMaxDepth;
38
12
  this.rules = processRules(affInfo);
39
- this._iConv = new converter_1.Converter(affInfo.ICONV || []);
40
- this._oConv = new converter_1.Converter(affInfo.OCONV || []);
13
+ this._iConv = new Converter(affInfo.ICONV || []);
14
+ this._oConv = new Converter(affInfo.OCONV || []);
41
15
  }
42
16
  get maxSuffixDepth() {
43
17
  return this._maxSuffixDepth;
@@ -76,7 +50,7 @@ class Aff {
76
50
  flags: { ...acc.flags, ...rule.flags },
77
51
  }), { rulesApplied: affWord.rulesApplied, flags: affWord.flags });
78
52
  const rules = this.joinRules(allRules.filter((rule) => !rule.flags).map((rule) => rule.id));
79
- const affixRules = allRules.map((rule) => rule.sfx || rule.pfx).filter(util_1.isDefined);
53
+ const affixRules = allRules.map((rule) => rule.sfx || rule.pfx).filter(isDefined);
80
54
  const wordWithFlags = { word, flags, rulesApplied, rules: '', base, suffix, prefix, dic };
81
55
  return [wordWithFlags, ...this.applyAffixesToWord(affixRules, { ...wordWithFlags, rules }, remainingDepth)]
82
56
  .filter(({ flags }) => !flags.isNeedAffix)
@@ -148,7 +122,7 @@ class Aff {
148
122
  const rulesToSplit = AF[idx] || rules;
149
123
  return this.separateRules(rulesToSplit)
150
124
  .map((key) => this.rules.get(key))
151
- .filter(util_1.isDefined);
125
+ .filter(isDefined);
152
126
  }
153
127
  joinRules(rules) {
154
128
  switch (this.affInfo.FLAG) {
@@ -175,7 +149,6 @@ class Aff {
175
149
  return this._oConv;
176
150
  }
177
151
  }
178
- exports.Aff = Aff;
179
152
  function signature(aff) {
180
153
  const { word, flags } = aff;
181
154
  const sig = Object.entries(flags)
@@ -185,11 +158,11 @@ function signature(aff) {
185
158
  .join('');
186
159
  return word + '|' + sig;
187
160
  }
188
- function processRules(affInfo) {
189
- const sfxRules = (0, gensequence_1.genSequence)(affInfo.SFX || [])
161
+ export function processRules(affInfo) {
162
+ const sfxRules = gs(affInfo.SFX || [])
190
163
  .map(([, sfx]) => sfx)
191
164
  .map((sfx) => ({ id: sfx.id, type: 'sfx', sfx }));
192
- const pfxRules = (0, gensequence_1.genSequence)(affInfo.PFX || [])
165
+ const pfxRules = gs(affInfo.PFX || [])
193
166
  .map(([, pfx]) => pfx)
194
167
  .map((pfx) => ({ id: pfx.id, type: 'pfx', pfx }));
195
168
  const flagRules = GS.sequenceFromObject(affInfo)
@@ -205,7 +178,6 @@ function processRules(affInfo) {
205
178
  }, new Map());
206
179
  return rules;
207
180
  }
208
- exports.processRules = processRules;
209
181
  const affFlag = {
210
182
  KEEPCASE: { isKeepCase: true },
211
183
  WARN: { isWarning: true },
@@ -251,7 +223,7 @@ const _FlagToLongStringMap = {
251
223
  };
252
224
  const flagToStringMap = _FlagToStringMap;
253
225
  const flagToLongStringMap = _FlagToLongStringMap;
254
- function logAffWord(affWord, message) {
226
+ export function logAffWord(affWord, message) {
255
227
  /* istanbul ignore if */
256
228
  if (log) {
257
229
  const dump = util.inspect(affWord, { showHidden: false, depth: 5, colors: true });
@@ -259,24 +231,21 @@ function logAffWord(affWord, message) {
259
231
  }
260
232
  return affWord;
261
233
  }
262
- exports.logAffWord = logAffWord;
263
234
  /* istanbul ignore next */
264
- function affWordToColoredString(affWord) {
235
+ export function affWordToColoredString(affWord) {
265
236
  return util
266
237
  .inspect({ ...affWord, flags: flagsToString(affWord.flags) }, { showHidden: false, depth: 5, colors: true })
267
238
  .replace(/(\s|\n|\r)+/g, ' ');
268
239
  }
269
- exports.affWordToColoredString = affWordToColoredString;
270
240
  /* istanbul ignore next */
271
- function flagsToString(flags) {
241
+ export function flagsToString(flags) {
272
242
  return [...Object.entries(flags)]
273
243
  .filter(([, v]) => !!v)
274
244
  .map(([k]) => flagToLongStringMap[k])
275
245
  .sort()
276
246
  .join(':');
277
247
  }
278
- exports.flagsToString = flagsToString;
279
- function asAffWord(word, rules = '', flags = {}) {
248
+ export function asAffWord(word, rules = '', flags = {}) {
280
249
  return {
281
250
  word,
282
251
  base: word,
@@ -288,8 +257,7 @@ function asAffWord(word, rules = '', flags = {}) {
288
257
  dic: rules ? word + '/' + rules : word,
289
258
  };
290
259
  }
291
- exports.asAffWord = asAffWord;
292
- function compareAff(a, b) {
260
+ export function compareAff(a, b) {
293
261
  if (a.word !== b.word) {
294
262
  return a.word < b.word ? -1 : 1;
295
263
  }
@@ -297,16 +265,14 @@ function compareAff(a, b) {
297
265
  const sigB = signature(b);
298
266
  return sigA < sigB ? -1 : sigA > sigB ? 1 : 0;
299
267
  }
300
- exports.compareAff = compareAff;
301
268
  /**
302
269
  * Returns a filter function that will filter adjacent AffWords
303
270
  * It compares the word and the flags.
304
271
  */
305
- function filterAff() {
306
- return (0, util_1.filterOrderedList)((a, b) => a.word !== b.word || signature(a) !== signature(b));
272
+ export function filterAff() {
273
+ return filterOrderedList((a, b) => a.word !== b.word || signature(a) !== signature(b));
307
274
  }
308
- exports.filterAff = filterAff;
309
- exports.debug = {
275
+ export const debug = {
310
276
  signature,
311
277
  };
312
278
  function removeNeedAffix(flags) {
package/dist/affDef.js CHANGED
@@ -1,7 +1,6 @@
1
- "use strict";
2
1
  // cspell:words uppercased
3
2
  // cspell:words KEEPCASE WARN NEEDAFFIX FORCEUCASE FORBIDDENWORD NOSUGGEST WORDCHARS
4
3
  // cspell:words COMPOUNDBEGIN COMPOUNDMIDDLE COMPOUNDEND COMPOUNDPERMITFLAG COMPOUNDFORBIDFLAG
5
4
  // cspell:words MAXDIFF COMPOUNDMIN COMPOUNDRULE COMPOUNDFLAG COMPOUNDLAST FORBIDWARN
6
- Object.defineProperty(exports, "__esModule", { value: true });
5
+ export {};
7
6
  //# sourceMappingURL=affDef.js.map
@@ -1,5 +1,5 @@
1
- import { Aff } from './aff';
2
- import type { AffInfo, Fx } from './affDef';
1
+ import { Aff } from './aff.js';
2
+ import type { AffInfo, Fx } from './affDef.js';
3
3
  export interface ConvEntry {
4
4
  from: string;
5
5
  to: string;
package/dist/affReader.js CHANGED
@@ -1,14 +1,9 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.testing = exports.parseAffFileToAff = exports.parseAff = exports.parseAffFile = void 0;
7
- const assert_1 = __importDefault(require("assert"));
8
- const promises_1 = require("fs/promises");
9
- const iconv_lite_1 = require("iconv-lite");
10
- const aff_1 = require("./aff");
11
- const util_1 = require("./util");
1
+ import assert from 'assert';
2
+ import { readFile } from 'fs/promises';
3
+ import pkgIconvLite from 'iconv-lite';
4
+ import { Aff } from './aff.js';
5
+ import { cleanObject, isDefined } from './util.js';
6
+ const { decode } = pkgIconvLite;
12
7
  const fixRegex = {
13
8
  SFX: { m: /$/, r: '$' },
14
9
  PFX: { m: /^/, r: '^' },
@@ -97,7 +92,7 @@ function tablePfxOrSfx(fieldValue, line) {
97
92
  return fieldValue;
98
93
  }
99
94
  const fixRuleSet = fieldValue.get(subField);
100
- (0, assert_1.default)(fixRuleSet);
95
+ assert(fixRuleSet);
101
96
  const substitutionSets = fixRuleSet.substitutionSets;
102
97
  const ruleAsString = rule.condition.source;
103
98
  if (!substitutionSets.has(ruleAsString)) {
@@ -107,7 +102,7 @@ function tablePfxOrSfx(fieldValue, line) {
107
102
  });
108
103
  }
109
104
  const substitutionSet = substitutionSets.get(ruleAsString);
110
- (0, assert_1.default)(substitutionSet);
105
+ assert(substitutionSet);
111
106
  const [attachText, attachRules] = rule.affix.split('/', 2);
112
107
  substitutionSet.substitutions.push({
113
108
  remove: rule.stripping,
@@ -203,7 +198,7 @@ function toRep(values) {
203
198
  return values.map((v) => ({ match: v[0], replaceWith: v[1] }));
204
199
  }
205
200
  function toSingleStrings(values) {
206
- return values.map((v) => v[0]).filter(util_1.isDefined);
201
+ return values.map((v) => v[0]).filter(isDefined);
207
202
  }
208
203
  function toAffMap(values) {
209
204
  return toSingleStrings(values);
@@ -298,19 +293,18 @@ function collectionToAffInfo(affFieldCollectionTable, encoding) {
298
293
  WARN: affFieldCollectionTable.WARN.getValue(),
299
294
  WORDCHARS: affFieldCollectionTable.WORDCHARS.getValue(),
300
295
  };
301
- return (0, util_1.cleanObject)(result);
296
+ return cleanObject(result);
302
297
  }
303
- async function parseAffFile(filename, encoding = UTF8) {
304
- const buffer = await (0, promises_1.readFile)(filename);
305
- const file = (0, iconv_lite_1.decode)(buffer, encoding);
298
+ export async function parseAffFile(filename, encoding = UTF8) {
299
+ const buffer = await readFile(filename);
300
+ const file = decode(buffer, encoding);
306
301
  const affInfo = parseAff(file, encoding);
307
302
  if (affInfo.SET && affInfo.SET.toLowerCase() !== encoding.toLowerCase()) {
308
- return parseAff((0, iconv_lite_1.decode)(buffer, affInfo.SET.toLowerCase()), affInfo.SET);
303
+ return parseAff(decode(buffer, affInfo.SET.toLowerCase()), affInfo.SET);
309
304
  }
310
305
  return affInfo;
311
306
  }
312
- exports.parseAffFile = parseAffFile;
313
- function parseAff(affFileContent, encoding = UTF8) {
307
+ export function parseAff(affFileContent, encoding = UTF8) {
314
308
  const lines = affFileContent.split(/\r?\n/g);
315
309
  const affFieldCollectionTable = createAffFieldTable();
316
310
  affFieldCollectionTable.SET.addLine({ option: 'SET', value: encoding });
@@ -325,17 +319,15 @@ function parseAff(affFileContent, encoding = UTF8) {
325
319
  });
326
320
  return collectionToAffInfo(affFieldCollectionTable, encoding);
327
321
  }
328
- exports.parseAff = parseAff;
329
- function parseAffFileToAff(filename, encoding) {
330
- return parseAffFile(filename, encoding).then((affInfo) => new aff_1.Aff(affInfo));
322
+ export function parseAffFileToAff(filename, encoding) {
323
+ return parseAffFile(filename, encoding).then((affInfo) => new Aff(affInfo));
331
324
  }
332
- exports.parseAffFileToAff = parseAffFileToAff;
333
325
  function parseLine(line) {
334
326
  const result = line.match(affixLine) || ['', ''];
335
327
  const [, option, value] = result;
336
328
  return { option, value: value || undefined };
337
329
  }
338
- exports.testing = {
330
+ export const testing = {
339
331
  parseAffixRule,
340
332
  tablePfxOrSfx,
341
333
  parseLine,
@@ -1,4 +1,4 @@
1
1
  import type { DictionaryInformation } from '@cspell/cspell-types';
2
- import type { AffInfo } from './affDef';
2
+ import type { AffInfo } from './affDef.js';
3
3
  export declare function affToDicInfo(aff: AffInfo, locale: string): DictionaryInformation;
4
4
  //# sourceMappingURL=affToDicInfo.d.ts.map
@@ -1,19 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.affToDicInfo = void 0;
4
- const sync_1 = require("@cspell/cspell-pipe/sync");
5
- const textUtils_1 = require("./textUtils");
6
- function affToDicInfo(aff, locale) {
1
+ import { opConcatMap, opMap, pipe } from '@cspell/cspell-pipe/sync';
2
+ import { removeAccents, toRange } from './textUtils.js';
3
+ export function affToDicInfo(aff, locale) {
7
4
  const alphabetInfo = extractAlphabet(aff, locale);
8
5
  return {
9
6
  ...alphabetInfo,
10
7
  ...extractSuggestionEditCosts(aff, alphabetInfo),
11
8
  locale,
12
- alphabet: (0, textUtils_1.toRange)(alphabetInfo.alphabet, 5),
13
- accents: (0, textUtils_1.toRange)([...alphabetInfo.accents].sort().join('')),
9
+ alphabet: toRange(alphabetInfo.alphabet, 5),
10
+ accents: toRange([...alphabetInfo.accents].sort().join('')),
14
11
  };
15
12
  }
16
- exports.affToDicInfo = affToDicInfo;
17
13
  function extractAlphabet(aff, locale) {
18
14
  const sources = [
19
15
  aff.MAP,
@@ -96,7 +92,7 @@ function calcAccentForms(letters) {
96
92
  return s;
97
93
  }
98
94
  for (const letter of letters) {
99
- const base = (0, textUtils_1.removeAccents)(letter);
95
+ const base = removeAccents(letter);
100
96
  const formCollection = getForm(base);
101
97
  formCollection.add(base);
102
98
  formCollection.add(letter);
@@ -112,9 +108,9 @@ function joinCharMap(values) {
112
108
  }
113
109
  function calcCrossAccentCapsMap(accentForms, locale) {
114
110
  function calc(form) {
115
- return new Set((0, sync_1.pipe)(form, (0, sync_1.opConcatMap)((letter) => calcCapitalizationForms(letter, locale))));
111
+ return new Set(pipe(form, opConcatMap((letter) => calcCapitalizationForms(letter, locale))));
116
112
  }
117
- const values = (0, sync_1.pipe)(accentForms, (0, sync_1.opMap)(calc));
113
+ const values = pipe(accentForms, opMap(calc));
118
114
  return [...values];
119
115
  }
120
116
  // function addAccents(cleanLetter: string, accents: Iterable<string>, collection: Set<string>) {
@@ -129,8 +125,8 @@ function calcCrossAccentCapsMap(accentForms, locale) {
129
125
  function extractFxLetters(fxm) {
130
126
  if (!fxm)
131
127
  return undefined;
132
- const substations = (0, sync_1.pipe)(fxm.values(), (0, sync_1.opConcatMap)((f) => f.substitutionSets.values()), (0, sync_1.opConcatMap)((s) => s.substitutions));
133
- const partials = (0, sync_1.pipe)(substations, (0, sync_1.opConcatMap)((sub) => [sub.remove, sub.attach]));
128
+ const substations = pipe(fxm.values(), opConcatMap((f) => f.substitutionSets.values()), opConcatMap((s) => s.substitutions));
129
+ const partials = pipe(substations, opConcatMap((sub) => [sub.remove, sub.attach]));
134
130
  return [...partials];
135
131
  }
136
132
  function* groupsOfN(values, n) {
package/dist/app.js CHANGED
@@ -1,14 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const commander_1 = require("commander");
4
- const commandDictInfo_1 = require("./commandDictInfo");
5
- const commandWords_1 = require("./commandWords");
6
- // eslint-disable-next-line @typescript-eslint/no-var-requires
7
- const packageInfo = require('../package.json');
1
+ import { program } from 'commander';
2
+ import { readFileSync } from 'fs';
3
+ import { getCommand as getDictInfoCommand } from './commandDictInfo.js';
4
+ import { getCommand as commandWords } from './commandWords.js';
5
+ const pkgRaw = readFileSync(new URL('../package.json', import.meta.url), 'utf8');
6
+ const packageInfo = JSON.parse(pkgRaw);
8
7
  const version = packageInfo['version'];
9
- commander_1.program.version(version);
10
- commander_1.program.addCommand((0, commandWords_1.getCommand)());
11
- commander_1.program.addCommand((0, commandDictInfo_1.getCommand)());
12
- commander_1.program.showHelpAfterError();
13
- commander_1.program.parseAsync(process.argv);
8
+ program.version(version);
9
+ program.addCommand(commandWords());
10
+ program.addCommand(getDictInfoCommand());
11
+ program.showHelpAfterError();
12
+ program.parseAsync(process.argv);
14
13
  //# sourceMappingURL=app.js.map
@@ -1,26 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCommand = void 0;
4
1
  // cSpell:ignore findup
5
- const commander_1 = require("commander");
6
- const affReader_1 = require("./affReader");
7
- const affToDicInfo_1 = require("./affToDicInfo");
8
- const textUtils_1 = require("./textUtils");
9
- function getCommand() {
10
- const commander = new commander_1.Command('cspell-dict-info');
2
+ import { Command } from 'commander';
3
+ import { parseAffFile } from './affReader.js';
4
+ import { affToDicInfo } from './affToDicInfo.js';
5
+ import { escapeUnicodeCode } from './textUtils.js';
6
+ export function getCommand() {
7
+ const commander = new Command('cspell-dict-info');
11
8
  commander
12
9
  .arguments('<hunspell_aff_file> <locale>')
13
10
  .description('Display the CSpell Dictionary Information')
14
11
  .action(action);
15
12
  return commander;
16
13
  }
17
- exports.getCommand = getCommand;
18
14
  async function action(hunspellFile, locale) {
19
15
  const baseFile = hunspellFile.replace(/\.(dic|aff)$/, '');
20
16
  const affFile = baseFile + '.aff';
21
- const aff = await (0, affReader_1.parseAffFile)(affFile);
22
- const info = (0, affToDicInfo_1.affToDicInfo)(aff, locale);
17
+ const aff = await parseAffFile(affFile);
18
+ const info = affToDicInfo(aff, locale);
23
19
  const rawJson = JSON.stringify(info, null, 2);
24
- console.log((0, textUtils_1.escapeUnicodeCode)(rawJson));
20
+ console.log(escapeUnicodeCode(rawJson));
25
21
  }
26
22
  //# sourceMappingURL=commandDictInfo.js.map
@@ -1,18 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCommand = void 0;
4
1
  // cSpell:ignore findup
5
- const commander_1 = require("commander");
6
- const fs_1 = require("fs");
7
- const gensequence_1 = require("gensequence");
8
- const aff_1 = require("./aff");
9
- const IterableHunspellReader_1 = require("./IterableHunspellReader");
10
- const iterableToStream_1 = require("./iterableToStream");
11
- const util_1 = require("./util");
2
+ import { Command } from 'commander';
3
+ import { createWriteStream, openSync, writeSync } from 'fs';
4
+ import { genSequence } from 'gensequence';
5
+ import { asAffWord } from './aff.js';
6
+ import { IterableHunspellReader } from './IterableHunspellReader.js';
7
+ import { iterableToStream } from './iterableToStream.js';
8
+ import { batch, uniqueFilter } from './util.js';
12
9
  const uniqueHistorySize = 500000;
13
10
  let logStream = process.stderr;
14
- function getCommand() {
15
- const commander = new commander_1.Command('words');
11
+ export function getCommand() {
12
+ const commander = new Command('words');
16
13
  commander
17
14
  .arguments('<hunspell_dic_file>')
18
15
  .option('-o, --output <file>', 'output file - defaults to stdout')
@@ -32,7 +29,6 @@ function getCommand() {
32
29
  .action(action);
33
30
  return commander;
34
31
  }
35
- exports.getCommand = getCommand;
36
32
  function notify(message, newLine = true) {
37
33
  message = message + (newLine ? '\n' : '');
38
34
  logStream.write(message, 'utf-8');
@@ -52,9 +48,9 @@ function appendRules(aff) {
52
48
  function writeSeqToFile(seq, outFile) {
53
49
  return new Promise((resolve, reject) => {
54
50
  let resolved = false;
55
- const out = outFile ? (0, fs_1.createWriteStream)(outFile) : process.stdout;
56
- const bufferedSeq = (0, gensequence_1.genSequence)((0, util_1.batch)(seq, 500)).map((batch) => batch.join(''));
57
- const dataStream = (0, iterableToStream_1.iterableToStream)(bufferedSeq);
51
+ const out = outFile ? createWriteStream(outFile) : process.stdout;
52
+ const bufferedSeq = genSequence(batch(seq, 500)).map((batch) => batch.join(''));
53
+ const dataStream = iterableToStream(bufferedSeq);
58
54
  const fileStream = dataStream.pipe(out);
59
55
  const endEvents = ['finish', 'close', 'end'];
60
56
  function resolvePromise() {
@@ -113,7 +109,7 @@ async function actionPrime(hunspellDicFilename, options) {
113
109
  log(`Dic file: ${dicFile}`);
114
110
  log(`Aff file: ${affFile}`);
115
111
  log(`Generating Words...`);
116
- const reader = await IterableHunspellReader_1.IterableHunspellReader.createFromFiles(affFile, dicFile);
112
+ const reader = await IterableHunspellReader.createFromFiles(affFile, dicFile);
117
113
  if (max_depth && Number.parseInt(max_depth) >= 0) {
118
114
  reader.maxDepth = Number.parseInt(max_depth);
119
115
  }
@@ -147,8 +143,8 @@ async function actionPrime(hunspellDicFilename, options) {
147
143
  : () => {
148
144
  /* void */
149
145
  };
150
- const seqWords = transform ? reader.seqAffWords(callback) : reader.seqRootWords().map(aff_1.asAffWord);
151
- const filterUnique = unique ? (0, util_1.uniqueFilter)(uniqueHistorySize) : (_) => true;
146
+ const seqWords = transform ? reader.seqAffWords(callback) : reader.seqRootWords().map(asAffWord);
147
+ const filterUnique = unique ? uniqueFilter(uniqueHistorySize) : (_) => true;
152
148
  const applyTransformers = (aff) => transformers.reduce((aff, fn) => fn(aff), aff);
153
149
  const applyFilters = (aff) => filters.reduce((cur, fn) => cur && fn(aff), true);
154
150
  const allWords = seqWords
@@ -162,8 +158,8 @@ async function actionPrime(hunspellDicFilename, options) {
162
158
  if (sort) {
163
159
  log('Sorting...');
164
160
  const data = words.toArray().sort().join('');
165
- const fd = outputFile ? (0, fs_1.openSync)(outputFile, 'w') : 1;
166
- (0, fs_1.writeSync)(fd, data);
161
+ const fd = outputFile ? openSync(outputFile, 'w') : 1;
162
+ writeSync(fd, data);
167
163
  }
168
164
  else {
169
165
  await writeSeqToFile(words, outputFile);
package/dist/converter.js CHANGED
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Converter = void 0;
4
1
  const regexSpecialCharacters = /[|\\{}()[\]^$+*?.]/g;
5
- class Converter {
2
+ export class Converter {
6
3
  constructor(convList) {
7
4
  const match = convList.map(({ from }) => from.replace(regexSpecialCharacters, '\\$&')).join('|');
8
5
  this._match = new RegExp(match, 'g');
@@ -18,5 +15,4 @@ class Converter {
18
15
  });
19
16
  }
20
17
  }
21
- exports.Converter = Converter;
22
18
  //# sourceMappingURL=converter.js.map
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export type { AffInfo, AffWord } from './affDef';
2
- export { parseAff, parseAffFile as readAffFile } from './affReader';
3
- export { createMatchingWordsFilter, type HunspellSrcData, IterableHunspellReader, type WordInfo, } from './IterableHunspellReader';
4
- export { IterableHunspellReader as HunspellReader } from './IterableHunspellReader';
5
- export { uniqueFilter } from './util';
1
+ export type { AffInfo, AffWord } from './affDef.js';
2
+ export { parseAff, parseAffFile as readAffFile } from './affReader.js';
3
+ export { createMatchingWordsFilter, type HunspellSrcData, IterableHunspellReader, type WordInfo, } from './IterableHunspellReader.js';
4
+ export { IterableHunspellReader as HunspellReader } from './IterableHunspellReader.js';
5
+ export { uniqueFilter } from './util.js';
6
6
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,14 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uniqueFilter = exports.HunspellReader = exports.IterableHunspellReader = exports.createMatchingWordsFilter = exports.readAffFile = exports.parseAff = void 0;
4
- var affReader_1 = require("./affReader");
5
- Object.defineProperty(exports, "parseAff", { enumerable: true, get: function () { return affReader_1.parseAff; } });
6
- Object.defineProperty(exports, "readAffFile", { enumerable: true, get: function () { return affReader_1.parseAffFile; } });
7
- var IterableHunspellReader_1 = require("./IterableHunspellReader");
8
- Object.defineProperty(exports, "createMatchingWordsFilter", { enumerable: true, get: function () { return IterableHunspellReader_1.createMatchingWordsFilter; } });
9
- Object.defineProperty(exports, "IterableHunspellReader", { enumerable: true, get: function () { return IterableHunspellReader_1.IterableHunspellReader; } });
10
- var IterableHunspellReader_2 = require("./IterableHunspellReader");
11
- Object.defineProperty(exports, "HunspellReader", { enumerable: true, get: function () { return IterableHunspellReader_2.IterableHunspellReader; } });
12
- var util_1 = require("./util");
13
- Object.defineProperty(exports, "uniqueFilter", { enumerable: true, get: function () { return util_1.uniqueFilter; } });
1
+ export { parseAff, parseAffFile as readAffFile } from './affReader.js';
2
+ export { createMatchingWordsFilter, IterableHunspellReader, } from './IterableHunspellReader.js';
3
+ export { IterableHunspellReader as HunspellReader } from './IterableHunspellReader.js';
4
+ export { uniqueFilter } from './util.js';
14
5
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
3
  import * as stream from 'stream';
4
4
  export type Streamable = string | Buffer;
5
5
  export type IterableLike<T> = Iterable<T> | IterableIterator<T>;
@@ -1,37 +1,10 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.iterableToStream = void 0;
27
- const stream = __importStar(require("stream"));
1
+ import * as stream from 'stream';
28
2
  /**
29
3
  * Transform an iterable into a node readable stream.
30
4
  */
31
- function iterableToStream(src, options = { encoding: 'utf8' }) {
5
+ export function iterableToStream(src, options = { encoding: 'utf8' }) {
32
6
  return new ReadableObservableStream(src, options);
33
7
  }
34
- exports.iterableToStream = iterableToStream;
35
8
  class ReadableObservableStream extends stream.Readable {
36
9
  constructor(_source, options) {
37
10
  super(options);
@@ -60,5 +33,5 @@ class ReadableObservableStream extends stream.Readable {
60
33
  }
61
34
  }
62
35
  }
63
- exports.default = iterableToStream;
36
+ export default iterableToStream;
64
37
  //# sourceMappingURL=iterableToStream.js.map
package/dist/textUtils.js CHANGED
@@ -1,16 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeLooseAccents = exports.removeAccents = exports.toRange = exports.escapeUnicodeCode = void 0;
4
1
  /**
5
2
  * Escape Unicode Characters
6
3
  * @param text
7
4
  * @param regexp
8
5
  * @returns
9
6
  */
10
- function escapeUnicodeCode(text, regexp = /\p{M}/gu) {
7
+ export function escapeUnicodeCode(text, regexp = /\p{M}/gu) {
11
8
  return text.replace(regexp, replaceWithUnicode);
12
9
  }
13
- exports.escapeUnicodeCode = escapeUnicodeCode;
14
10
  function replaceWithUnicode(substring) {
15
11
  const start = 0x20;
16
12
  const end = 0x7a;
@@ -34,7 +30,7 @@ function replaceWithUnicode(substring) {
34
30
  *
35
31
  * @param letters - sorted letters
36
32
  */
37
- function toRange(letters, minLength = 4) {
33
+ export function toRange(letters, minLength = 4) {
38
34
  const chars = [];
39
35
  let begin = 0;
40
36
  let end = 0;
@@ -72,13 +68,10 @@ function toRange(letters, minLength = 4) {
72
68
  pushRange();
73
69
  return chars.join('');
74
70
  }
75
- exports.toRange = toRange;
76
- function removeAccents(text) {
71
+ export function removeAccents(text) {
77
72
  return removeLooseAccents(text.normalize('NFD'));
78
73
  }
79
- exports.removeAccents = removeAccents;
80
- function removeLooseAccents(text) {
74
+ export function removeLooseAccents(text) {
81
75
  return text.replace(/\p{M}/gu, '');
82
76
  }
83
- exports.removeLooseAccents = removeLooseAccents;
84
77
  //# sourceMappingURL=textUtils.js.map
package/dist/types.js CHANGED
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=types.js.map
package/dist/util.js CHANGED
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cleanObject = exports.isDefined = exports.filterOrderedList = exports.batch = exports.uniqueFilter = exports.hrTimeToSeconds = void 0;
4
- function hrTimeToSeconds([seconds, nanoseconds]) {
1
+ export function hrTimeToSeconds([seconds, nanoseconds]) {
5
2
  return seconds + nanoseconds / 1000000000;
6
3
  }
7
- exports.hrTimeToSeconds = hrTimeToSeconds;
8
- function uniqueFilter(historySize, key = (a) => a) {
4
+ export function uniqueFilter(historySize, key = (a) => a) {
9
5
  const f0 = new Set();
10
6
  const f1 = new Set();
11
7
  const found = [f0, f1, f0];
@@ -25,8 +21,7 @@ function uniqueFilter(historySize, key = (a) => a) {
25
21
  return r;
26
22
  };
27
23
  }
28
- exports.uniqueFilter = uniqueFilter;
29
- function* batch(i, size) {
24
+ export function* batch(i, size) {
30
25
  let data = [];
31
26
  for (const t of i) {
32
27
  data.push(t);
@@ -39,12 +34,11 @@ function* batch(i, size) {
39
34
  yield data;
40
35
  }
41
36
  }
42
- exports.batch = batch;
43
37
  /**
44
38
  * Generate a filter function that will remove adjacent values that compare to falsy;
45
39
  * @param compare function to evaluate if two values are considered the same.
46
40
  */
47
- function filterOrderedList(compare) {
41
+ export function filterOrderedList(compare) {
48
42
  let last;
49
43
  return function (t) {
50
44
  const r = last === undefined ? last !== t : !!compare(last, t);
@@ -52,17 +46,15 @@ function filterOrderedList(compare) {
52
46
  return r;
53
47
  };
54
48
  }
55
- exports.filterOrderedList = filterOrderedList;
56
- function isDefined(v) {
49
+ export function isDefined(v) {
57
50
  return v !== undefined;
58
51
  }
59
- exports.isDefined = isDefined;
60
52
  /**
61
53
  * Remove all `undefined` values from an Object.
62
54
  * @param obj
63
55
  * @returns the same object.
64
56
  */
65
- function cleanObject(obj) {
57
+ export function cleanObject(obj) {
66
58
  if (typeof obj != 'object')
67
59
  return obj;
68
60
  const r = obj;
@@ -73,5 +65,4 @@ function cleanObject(obj) {
73
65
  }
74
66
  return obj;
75
67
  }
76
- exports.cleanObject = cleanObject;
77
68
  //# sourceMappingURL=util.js.map
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "hunspell-reader",
3
- "version": "6.31.1",
3
+ "version": "7.0.0-alpha.2",
4
4
  "description": "A library for reading Hunspell Dictionary Files",
5
5
  "bin": "bin.js",
6
- "main": "dist/index.js",
7
- "typings": "dist/index.d.ts",
6
+ "type": "module",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
8
14
  "files": [
9
15
  "dist",
10
16
  "bin.js",
@@ -13,14 +19,15 @@
13
19
  "!**/*.test.*"
14
20
  ],
15
21
  "scripts": {
16
- "test-unit": "jest",
22
+ "test-unit": "vitest run",
17
23
  "test-spelling": "cspell \"src/**/*.ts\" \"*.md\"",
18
- "smoke-test": "../bin.js words ./dictionaries/nl -n 100",
24
+ "smoke-test": "./bin.js words ./dictionaries/nl -n 100",
19
25
  "test": "pnpm run test-unit",
20
26
  "build": "tsc -p .",
21
- "lint": "prettier -w \"**/*.{md,yaml,yml,json,ts}\"",
22
- "clean": "shx rm -rf dist coverage .tsbuildinfo",
23
- "coverage": "jest --coverage",
27
+ "clean": "shx rm -rf dist temp coverage \"*.tsbuildInfo\"",
28
+ "coverage": "pnpm coverage:vitest && pnpm coverage:fix",
29
+ "coverage:vitest": "vitest run --coverage",
30
+ "coverage:fix": "nyc report --temp-dir \"$(pwd)/coverage\" --reporter lcov --report-dir \"$(pwd)/coverage\" --cwd ../..",
24
31
  "watch": "tsc -w"
25
32
  },
26
33
  "repository": {
@@ -37,20 +44,20 @@
37
44
  },
38
45
  "homepage": "https://github.com/streetsidesoftware/cspell/tree/main/packages/hunspell-reader#readme",
39
46
  "devDependencies": {
40
- "@types/jest": "^29.5.0",
47
+ "@types/jest": "^29.5.1",
41
48
  "jest": "^29.5.0",
42
- "ts-jest": "^29.0.5",
49
+ "ts-jest": "^29.1.0",
43
50
  "typescript": "^4.9.5"
44
51
  },
45
52
  "dependencies": {
46
- "@cspell/cspell-pipe": "^6.31.1",
47
- "@cspell/cspell-types": "^6.31.1",
48
- "commander": "^10.0.0",
53
+ "@cspell/cspell-pipe": "^7.0.0-alpha.2",
54
+ "@cspell/cspell-types": "^7.0.0-alpha.2",
55
+ "commander": "^10.0.1",
49
56
  "gensequence": "^5.0.2",
50
57
  "iconv-lite": "^0.6.3"
51
58
  },
52
59
  "engines": {
53
- "node": ">=14"
60
+ "node": ">=16"
54
61
  },
55
- "gitHead": "43c3652e27588f6643cf78fd764f12f497f89fbf"
62
+ "gitHead": "a1b7c5daeef5afdb14d6444318f450b9fd9c035a"
56
63
  }