@utilix-tech/sdk 0.88.0 → 0.89.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  Full release notes for all Utilix surfaces (browser tools, REST API, SDKs, MCP server) live at [utilix.tech/changelog](https://utilix.tech/changelog). This file tracks just this package.
4
4
 
5
+ ## 0.89.0
6
+ - Add `checkAcronymExpansion` (acronym-expansion-checker): scan text for acronyms and flag any used before being expanded on first mention, recognizing both the "full term (ACRONYM)" and "ACRONYM (full term)" conventions, with acronyms never expanded anywhere reported separately.
7
+
5
8
  ## 0.88.0
6
9
  - Add `validateMermaidSyntax` (mermaid-syntax-validator): check a Mermaid diagram definition for syntax errors with line numbers, including an unterminated subgraph, unbalanced node brackets, a malformed edge arrow, and a sequence-diagram participant referenced before its explicit declaration.
7
10
  - Add `calculateAnnuityPayout` (annuity-payout-calculator): solve the standard annuity formula in either direction, the periodic payout a lump sum funds, or the lump sum required to fund a target payout, for an ordinary or annuity-due structure.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @utilix-tech/sdk
2
2
 
3
- **727 developer utility functions for Node.js: runs locally, no API key required.**
3
+ **728 developer utility functions for Node.js: runs locally, no API key required.**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@utilix-tech/sdk?style=flat-square&color=cb3837)](https://www.npmjs.com/package/@utilix-tech/sdk)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/@utilix-tech/sdk?style=flat-square)](https://www.npmjs.com/package/@utilix-tech/sdk)
@@ -161,7 +161,8 @@ import { convertCase, slugify, countWords, generateWords, generateParagraphs,
161
161
  escapeString, htmlToMarkdown, applyOps, detectPassiveVoice, scoreReadability,
162
162
  detectFillerWords, detectWordyPhrases, checkOxfordCommaConsistency,
163
163
  calculateStringDistance, analyzeSentenceLengths,
164
- analyzeKeywordDensity, searchEmoji, getEmojiByShortcode } from "@utilix-tech/sdk/text";
164
+ analyzeKeywordDensity, searchEmoji, getEmojiByShortcode,
165
+ checkAcronymExpansion } from "@utilix-tech/sdk/text";
165
166
 
166
167
  convertCase("hello world", "camelCase"); // "helloWorld"
167
168
  convertCase("hello world", "PascalCase"); // "HelloWorld"
@@ -214,6 +215,10 @@ getEmojiByShortcode(":joy:"); // { emoji: "😂", name: "face with tears of joy
214
215
  // Keyword/phrase frequency and density (occurrences per 100 words); ngramSize 2 or 3 for phrases
215
216
  analyzeKeywordDensity("machine learning models power machine learning systems");
216
217
  // { totalWords: 7, uniqueKeywords: 5, ngramSize: 1, keywords: [{ keyword: "learning", count: 2, density: 28.6 }, ...] }
218
+
219
+ // Flag an acronym used before it is expanded on first mention, and any never expanded at all
220
+ checkAcronymExpansion("The API returned an error. The Application Programming Interface (API) was patched.");
221
+ // { acronyms: [{ acronym: "API", occurrences: 2, usedBeforeExpansion: true, ... }], issues: [{ type: "used-before-expansion", ... }] }
217
222
  ```
218
223
 
219
224
  ---
@@ -18,6 +18,7 @@ __export(text_exports, {
18
18
  applyOps: () => applyOps,
19
19
  calculateStringDistance: () => calculateStringDistance,
20
20
  centerText: () => centerText,
21
+ checkAcronymExpansion: () => checkAcronymExpansion,
21
22
  checkDashUsage: () => checkDashUsage,
22
23
  checkOxfordCommaConsistency: () => checkOxfordCommaConsistency,
23
24
  convertAll: () => convertAll,
@@ -3267,5 +3268,67 @@ function checkDashUsage(text) {
3267
3268
  issues
3268
3269
  };
3269
3270
  }
3271
+ var ACRONYM_TOKEN_RE = /\b[A-Z][A-Z0-9]{1,9}\b/g;
3272
+ var ACRONYM_IN_PARENS_RE = /\(([A-Z][A-Z0-9]{1,9})\)/g;
3273
+ var ACRONYM_THEN_EXPANSION_RE = /\b([A-Z][A-Z0-9]{1,9})\b\s*\(([a-zA-Z][^()]{1,100})\)/g;
3274
+ function acronymContextSnippet(text, index, matchLen) {
3275
+ const start = Math.max(0, index - 25);
3276
+ const end = Math.min(text.length, index + matchLen + 25);
3277
+ const body = text.slice(start, end).replace(/\s+/g, " ").trim();
3278
+ return (start > 0 ? "\u2026" : "") + body + (end < text.length ? "\u2026" : "");
3279
+ }
3280
+ function checkAcronymExpansion(text) {
3281
+ const definedAt = /* @__PURE__ */ new Map();
3282
+ for (const m of text.matchAll(ACRONYM_IN_PARENS_RE)) {
3283
+ const acronym = m[1];
3284
+ const idx = (m.index ?? 0) + 1;
3285
+ const existing = definedAt.get(acronym);
3286
+ if (existing === void 0 || idx < existing) definedAt.set(acronym, idx);
3287
+ }
3288
+ for (const m of text.matchAll(ACRONYM_THEN_EXPANSION_RE)) {
3289
+ const acronym = m[1];
3290
+ const idx = m.index ?? 0;
3291
+ const existing = definedAt.get(acronym);
3292
+ if (existing === void 0 || idx < existing) definedAt.set(acronym, idx);
3293
+ }
3294
+ const occurrencesByAcronym = /* @__PURE__ */ new Map();
3295
+ for (const m of text.matchAll(ACRONYM_TOKEN_RE)) {
3296
+ const acronym = m[0];
3297
+ const idx = m.index ?? 0;
3298
+ const list = occurrencesByAcronym.get(acronym);
3299
+ if (list) list.push(idx);
3300
+ else occurrencesByAcronym.set(acronym, [idx]);
3301
+ }
3302
+ const acronyms = [];
3303
+ const issues = [];
3304
+ for (const [acronym, indicesUnsorted] of occurrencesByAcronym) {
3305
+ const indices = [...indicesUnsorted].sort((a, b) => a - b);
3306
+ const firstUsedAt = indices[0];
3307
+ const expandedAt = definedAt.has(acronym) ? definedAt.get(acronym) : null;
3308
+ const earlyUse = expandedAt !== null ? indices.find((i) => i < expandedAt) : void 0;
3309
+ const usedBeforeExpansion = earlyUse !== void 0;
3310
+ acronyms.push({ acronym, occurrences: indices.length, firstUsedAt, expandedAt, usedBeforeExpansion });
3311
+ if (usedBeforeExpansion) {
3312
+ issues.push({
3313
+ type: "used-before-expansion",
3314
+ acronym,
3315
+ index: earlyUse,
3316
+ context: acronymContextSnippet(text, earlyUse, acronym.length),
3317
+ message: `"${acronym}" is used here before it's expanded later in the document (at character ${expandedAt}).`
3318
+ });
3319
+ } else if (expandedAt === null) {
3320
+ issues.push({
3321
+ type: "never-expanded",
3322
+ acronym,
3323
+ index: firstUsedAt,
3324
+ context: acronymContextSnippet(text, firstUsedAt, acronym.length),
3325
+ message: `"${acronym}" is never expanded anywhere in this document.`
3326
+ });
3327
+ }
3328
+ }
3329
+ acronyms.sort((a, b) => a.firstUsedAt - b.firstUsedAt);
3330
+ issues.sort((a, b) => a.index - b.index);
3331
+ return { acronyms, issues };
3332
+ }
3270
3333
 
3271
- export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, checkDashUsage, checkOxfordCommaConsistency, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, detectWordyPhrases, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, text_exports, unescapeString, wordFrequency };
3334
+ export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, checkAcronymExpansion, checkDashUsage, checkOxfordCommaConsistency, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, detectWordyPhrases, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, text_exports, unescapeString, wordFrequency };
package/dist/index.cjs CHANGED
@@ -2319,6 +2319,7 @@ __export(text_exports, {
2319
2319
  applyOps: () => applyOps,
2320
2320
  calculateStringDistance: () => calculateStringDistance,
2321
2321
  centerText: () => centerText,
2322
+ checkAcronymExpansion: () => checkAcronymExpansion,
2322
2323
  checkDashUsage: () => checkDashUsage,
2323
2324
  checkOxfordCommaConsistency: () => checkOxfordCommaConsistency,
2324
2325
  convertAll: () => convertAll,
@@ -5568,6 +5569,68 @@ function checkDashUsage(text) {
5568
5569
  issues
5569
5570
  };
5570
5571
  }
5572
+ var ACRONYM_TOKEN_RE = /\b[A-Z][A-Z0-9]{1,9}\b/g;
5573
+ var ACRONYM_IN_PARENS_RE = /\(([A-Z][A-Z0-9]{1,9})\)/g;
5574
+ var ACRONYM_THEN_EXPANSION_RE = /\b([A-Z][A-Z0-9]{1,9})\b\s*\(([a-zA-Z][^()]{1,100})\)/g;
5575
+ function acronymContextSnippet(text, index, matchLen) {
5576
+ const start = Math.max(0, index - 25);
5577
+ const end = Math.min(text.length, index + matchLen + 25);
5578
+ const body = text.slice(start, end).replace(/\s+/g, " ").trim();
5579
+ return (start > 0 ? "\u2026" : "") + body + (end < text.length ? "\u2026" : "");
5580
+ }
5581
+ function checkAcronymExpansion(text) {
5582
+ const definedAt = /* @__PURE__ */ new Map();
5583
+ for (const m of text.matchAll(ACRONYM_IN_PARENS_RE)) {
5584
+ const acronym = m[1];
5585
+ const idx = (m.index ?? 0) + 1;
5586
+ const existing = definedAt.get(acronym);
5587
+ if (existing === void 0 || idx < existing) definedAt.set(acronym, idx);
5588
+ }
5589
+ for (const m of text.matchAll(ACRONYM_THEN_EXPANSION_RE)) {
5590
+ const acronym = m[1];
5591
+ const idx = m.index ?? 0;
5592
+ const existing = definedAt.get(acronym);
5593
+ if (existing === void 0 || idx < existing) definedAt.set(acronym, idx);
5594
+ }
5595
+ const occurrencesByAcronym = /* @__PURE__ */ new Map();
5596
+ for (const m of text.matchAll(ACRONYM_TOKEN_RE)) {
5597
+ const acronym = m[0];
5598
+ const idx = m.index ?? 0;
5599
+ const list = occurrencesByAcronym.get(acronym);
5600
+ if (list) list.push(idx);
5601
+ else occurrencesByAcronym.set(acronym, [idx]);
5602
+ }
5603
+ const acronyms = [];
5604
+ const issues = [];
5605
+ for (const [acronym, indicesUnsorted] of occurrencesByAcronym) {
5606
+ const indices = [...indicesUnsorted].sort((a, b) => a - b);
5607
+ const firstUsedAt = indices[0];
5608
+ const expandedAt = definedAt.has(acronym) ? definedAt.get(acronym) : null;
5609
+ const earlyUse = expandedAt !== null ? indices.find((i) => i < expandedAt) : void 0;
5610
+ const usedBeforeExpansion = earlyUse !== void 0;
5611
+ acronyms.push({ acronym, occurrences: indices.length, firstUsedAt, expandedAt, usedBeforeExpansion });
5612
+ if (usedBeforeExpansion) {
5613
+ issues.push({
5614
+ type: "used-before-expansion",
5615
+ acronym,
5616
+ index: earlyUse,
5617
+ context: acronymContextSnippet(text, earlyUse, acronym.length),
5618
+ message: `"${acronym}" is used here before it's expanded later in the document (at character ${expandedAt}).`
5619
+ });
5620
+ } else if (expandedAt === null) {
5621
+ issues.push({
5622
+ type: "never-expanded",
5623
+ acronym,
5624
+ index: firstUsedAt,
5625
+ context: acronymContextSnippet(text, firstUsedAt, acronym.length),
5626
+ message: `"${acronym}" is never expanded anywhere in this document.`
5627
+ });
5628
+ }
5629
+ }
5630
+ acronyms.sort((a, b) => a.firstUsedAt - b.firstUsedAt);
5631
+ issues.sort((a, b) => a.index - b.index);
5632
+ return { acronyms, issues };
5633
+ }
5571
5634
 
5572
5635
  // src/tools/data.ts
5573
5636
  var data_exports = {};
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { j as json } from './json-Ca6gZCNB.cjs';
2
2
  export { e as encoding } from './encoding-Dk3wpmb3.cjs';
3
3
  export { h as hashing } from './hashing-CJjlvqS_.cjs';
4
- export { t as text } from './text-xY5MJwr0.cjs';
4
+ export { t as text } from './text-DOopHoK3.cjs';
5
5
  export { d as data } from './data-Cz1Q0sg0.cjs';
6
6
  export { g as generators } from './generators-DAXXrMvG.cjs';
7
7
  export { t as time } from './time-VMAy_SrV.cjs';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { j as json } from './json-Ca6gZCNB.js';
2
2
  export { e as encoding } from './encoding-Dk3wpmb3.js';
3
3
  export { h as hashing } from './hashing-CJjlvqS_.js';
4
- export { t as text } from './text-xY5MJwr0.js';
4
+ export { t as text } from './text-DOopHoK3.js';
5
5
  export { d as data } from './data-Cz1Q0sg0.js';
6
6
  export { g as generators } from './generators-DAXXrMvG.js';
7
7
  export { t as time } from './time-VMAy_SrV.js';
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ export { ai_agent_exports as ai_agent } from './chunk-5VVC7BHS.js';
10
10
  export { json_exports as json } from './chunk-WUOZHCIC.js';
11
11
  export { encoding_exports as encoding } from './chunk-DOWQZUTP.js';
12
12
  export { hashing_exports as hashing } from './chunk-PET2CGTH.js';
13
- export { text_exports as text } from './chunk-FB6CCFR5.js';
13
+ export { text_exports as text } from './chunk-YQJ7CEUL.js';
14
14
  export { data_exports as data } from './chunk-CUQDHXUX.js';
15
15
  export { generators_exports as generators } from './chunk-422ICOZX.js';
16
16
  export { time_exports as time } from './chunk-6EJVNQSY.js';
@@ -26,6 +26,7 @@
26
26
  * - keyword-density-analyzer: analyzeKeywordDensity
27
27
  * - emoji-lookup : searchEmoji, getEmojiByShortcode, getEmojiByChar, getEmojiByCategory, getEmojiCategories, EMOJI_TABLE
28
28
  * - em-dash-usage-checker: checkDashUsage
29
+ * - acronym-expansion-checker: checkAcronymExpansion
29
30
  */
30
31
  interface WordCountResult {
31
32
  words: number;
@@ -484,7 +485,43 @@ interface DashUsageResult {
484
485
  * pasted alongside prose can occasionally be flagged.
485
486
  */
486
487
  declare function checkDashUsage(text: string): DashUsageResult;
488
+ type AcronymIssueType = 'used-before-expansion' | 'never-expanded';
489
+ interface AcronymIssue {
490
+ type: AcronymIssueType;
491
+ acronym: string;
492
+ index: number;
493
+ context: string;
494
+ message: string;
495
+ }
496
+ interface AcronymUsage {
497
+ acronym: string;
498
+ occurrences: number;
499
+ firstUsedAt: number;
500
+ expandedAt: number | null;
501
+ usedBeforeExpansion: boolean;
502
+ }
503
+ interface AcronymCheckResult {
504
+ acronyms: AcronymUsage[];
505
+ issues: AcronymIssue[];
506
+ }
507
+ /**
508
+ * Scan text for acronyms (2-10 character all-caps tokens) and flag any that
509
+ * are used before being expanded on first mention, per standard technical
510
+ * writing style guides. Recognizes both expansion conventions: the full term
511
+ * followed by the acronym in parentheses ("Application Programming Interface
512
+ * (API)"), and the acronym followed by its expansion in parentheses ("API
513
+ * (Application Programming Interface)"). An acronym with no expansion found
514
+ * anywhere in the text is reported separately as never expanded, rather than
515
+ * as used too early. Pure regex heuristic, not a dictionary of real acronyms:
516
+ * a proper noun styled in all caps, a Roman numeral, or a pluralized acronym
517
+ * like "APIs" can be missed or misread.
518
+ */
519
+ declare function checkAcronymExpansion(text: string): AcronymCheckResult;
487
520
 
521
+ type text_AcronymCheckResult = AcronymCheckResult;
522
+ type text_AcronymIssue = AcronymIssue;
523
+ type text_AcronymIssueType = AcronymIssueType;
524
+ type text_AcronymUsage = AcronymUsage;
488
525
  type text_AsciiFont = AsciiFont;
489
526
  type text_AsciiOptions = AsciiOptions;
490
527
  declare const text_CASE_FORMATS: typeof CASE_FORMATS;
@@ -544,6 +581,7 @@ declare const text_applyOp: typeof applyOp;
544
581
  declare const text_applyOps: typeof applyOps;
545
582
  declare const text_calculateStringDistance: typeof calculateStringDistance;
546
583
  declare const text_centerText: typeof centerText;
584
+ declare const text_checkAcronymExpansion: typeof checkAcronymExpansion;
547
585
  declare const text_checkDashUsage: typeof checkDashUsage;
548
586
  declare const text_checkOxfordCommaConsistency: typeof checkOxfordCommaConsistency;
549
587
  declare const text_convertAll: typeof convertAll;
@@ -600,7 +638,7 @@ declare const text_textToMorse: typeof textToMorse;
600
638
  declare const text_unescapeString: typeof unescapeString;
601
639
  declare const text_wordFrequency: typeof wordFrequency;
602
640
  declare namespace text {
603
- export { type text_AsciiFont as AsciiFont, type text_AsciiOptions as AsciiOptions, text_CASE_FORMATS as CASE_FORMATS, type text_CaseFormat as CaseFormat, type text_ConvertOptions as ConvertOptions, text_DEFAULT_CONVERT_OPTIONS as DEFAULT_CONVERT_OPTIONS, type text_DashIssue as DashIssue, type text_DashIssueType as DashIssueType, type text_DashUsageResult as DashUsageResult, type text_DiffFile as DiffFile, type text_DiffHunk as DiffHunk, type text_DiffLine as DiffLine, type text_DiffResult as DiffResult, type text_DiffType as DiffType, type text_DiffViewerLine as DiffViewerLine, text_EMOJI_TABLE as EMOJI_TABLE, text_ESCAPE_MODES as ESCAPE_MODES, type text_EmojiEntry as EmojiEntry, type text_EscapeMode as EscapeMode, type text_FillerCategory as FillerCategory, type text_FillerMatch as FillerMatch, type text_FillerWordResult as FillerWordResult, type text_KeywordDensityEntry as KeywordDensityEntry, type text_KeywordDensityOptions as KeywordDensityOptions, type text_KeywordDensityResult as KeywordDensityResult, text_LINE_OPS as LINE_OPS, type text_LineOp as LineOp, type text_LineType as LineType, type text_LoremUnit as LoremUnit, text_MORSE_CODE as MORSE_CODE, type text_MarkdownResult as MarkdownResult, type text_MorseOptions as MorseOptions, type text_OxfordCommaInstance as OxfordCommaInstance, type text_OxfordCommaResult as OxfordCommaResult, type text_ParsedDiff as ParsedDiff, type text_ParsedTable as ParsedTable, type text_PassiveVoiceMatch as PassiveVoiceMatch, type text_PassiveVoiceResult as PassiveVoiceResult, type text_PassiveVoiceSentence as PassiveVoiceSentence, type text_ReadabilityResult as ReadabilityResult, type text_ReadabilityScore as ReadabilityScore, type text_SentenceLengthBucket as SentenceLengthBucket, type text_SentenceLengthDistribution as SentenceLengthDistribution, type text_SlugSeparator as SlugSeparator, type text_StringDistanceMode as StringDistanceMode, type text_StringDistanceResult as StringDistanceResult, type text_TableOptions as TableOptions, type text_TextAnalysis as TextAnalysis, type text_WordCountResult as WordCountResult, type text_WordyPhraseMatch as WordyPhraseMatch, type text_WordyPhraseResult as WordyPhraseResult, text_addBorder as addBorder, text_analyzeKeywordDensity as analyzeKeywordDensity, text_analyzeSentenceLengths as analyzeSentenceLengths, text_analyzeText as analyzeText, text_applyOp as applyOp, text_applyOps as applyOps, text_calculateStringDistance as calculateStringDistance, text_centerText as centerText, text_checkDashUsage as checkDashUsage, text_checkOxfordCommaConsistency as checkOxfordCommaConsistency, text_convertAll as convertAll, text_convertCase as convertCase, text_countWords as countWords, text_csvToHtml as csvToHtml, text_csvToMarkdown as csvToMarkdown, text_detectDelimiter as detectDelimiter, text_detectFillerWords as detectFillerWords, text_detectPassiveVoice as detectPassiveVoice, text_detectWordyPhrases as detectWordyPhrases, text_diffLines as diffLines, text_diffLinesSimple as diffLinesSimple, text_diffStats as diffStats, text_escapeAll as escapeAll, text_escapeString as escapeString, text_extractHeadings as extractHeadings, text_formatReadingTime as formatReadingTime, text_generate as generate, text_generateDiff as generateDiff, text_generateHtmlTable as generateHtmlTable, text_generateMarkdownTable as generateMarkdownTable, text_generateParagraphs as generateParagraphs, text_generateSentences as generateSentences, text_generateWords as generateWords, text_getAvailableFonts as getAvailableFonts, text_getEmojiByCategory as getEmojiByCategory, text_getEmojiByChar as getEmojiByChar, text_getEmojiByShortcode as getEmojiByShortcode, text_getEmojiCategories as getEmojiCategories, text_getMorseForChar as getMorseForChar, text_getMorseTiming as getMorseTiming, text_htmlToMarkdown as htmlToMarkdown, text_isValidMorse as isValidMorse, text_markdownToHtml as markdownToHtml, text_morseToText as morseToText, text_numberToOrdinal as numberToOrdinal, text_numberToRoman as numberToRoman, text_numberToWords as numberToWords, text_ordinalWords as ordinalWords, text_parseDiff as parseDiff, text_parseTableData as parseTableData, text_readabilityScore as readabilityScore, text_renderMarkdown as renderMarkdown, text_romanToNumber as romanToNumber, text_scoreReadability as scoreReadability, text_searchEmoji as searchEmoji, text_sentenceCount as sentenceCount, text_slugify as slugify, text_slugifyAll as slugifyAll, text_syllableCount as syllableCount, text_textToAscii as textToAscii, text_textToMorse as textToMorse, text_unescapeString as unescapeString, text_wordFrequency as wordFrequency };
641
+ export { type text_AcronymCheckResult as AcronymCheckResult, type text_AcronymIssue as AcronymIssue, type text_AcronymIssueType as AcronymIssueType, type text_AcronymUsage as AcronymUsage, type text_AsciiFont as AsciiFont, type text_AsciiOptions as AsciiOptions, text_CASE_FORMATS as CASE_FORMATS, type text_CaseFormat as CaseFormat, type text_ConvertOptions as ConvertOptions, text_DEFAULT_CONVERT_OPTIONS as DEFAULT_CONVERT_OPTIONS, type text_DashIssue as DashIssue, type text_DashIssueType as DashIssueType, type text_DashUsageResult as DashUsageResult, type text_DiffFile as DiffFile, type text_DiffHunk as DiffHunk, type text_DiffLine as DiffLine, type text_DiffResult as DiffResult, type text_DiffType as DiffType, type text_DiffViewerLine as DiffViewerLine, text_EMOJI_TABLE as EMOJI_TABLE, text_ESCAPE_MODES as ESCAPE_MODES, type text_EmojiEntry as EmojiEntry, type text_EscapeMode as EscapeMode, type text_FillerCategory as FillerCategory, type text_FillerMatch as FillerMatch, type text_FillerWordResult as FillerWordResult, type text_KeywordDensityEntry as KeywordDensityEntry, type text_KeywordDensityOptions as KeywordDensityOptions, type text_KeywordDensityResult as KeywordDensityResult, text_LINE_OPS as LINE_OPS, type text_LineOp as LineOp, type text_LineType as LineType, type text_LoremUnit as LoremUnit, text_MORSE_CODE as MORSE_CODE, type text_MarkdownResult as MarkdownResult, type text_MorseOptions as MorseOptions, type text_OxfordCommaInstance as OxfordCommaInstance, type text_OxfordCommaResult as OxfordCommaResult, type text_ParsedDiff as ParsedDiff, type text_ParsedTable as ParsedTable, type text_PassiveVoiceMatch as PassiveVoiceMatch, type text_PassiveVoiceResult as PassiveVoiceResult, type text_PassiveVoiceSentence as PassiveVoiceSentence, type text_ReadabilityResult as ReadabilityResult, type text_ReadabilityScore as ReadabilityScore, type text_SentenceLengthBucket as SentenceLengthBucket, type text_SentenceLengthDistribution as SentenceLengthDistribution, type text_SlugSeparator as SlugSeparator, type text_StringDistanceMode as StringDistanceMode, type text_StringDistanceResult as StringDistanceResult, type text_TableOptions as TableOptions, type text_TextAnalysis as TextAnalysis, type text_WordCountResult as WordCountResult, type text_WordyPhraseMatch as WordyPhraseMatch, type text_WordyPhraseResult as WordyPhraseResult, text_addBorder as addBorder, text_analyzeKeywordDensity as analyzeKeywordDensity, text_analyzeSentenceLengths as analyzeSentenceLengths, text_analyzeText as analyzeText, text_applyOp as applyOp, text_applyOps as applyOps, text_calculateStringDistance as calculateStringDistance, text_centerText as centerText, text_checkAcronymExpansion as checkAcronymExpansion, text_checkDashUsage as checkDashUsage, text_checkOxfordCommaConsistency as checkOxfordCommaConsistency, text_convertAll as convertAll, text_convertCase as convertCase, text_countWords as countWords, text_csvToHtml as csvToHtml, text_csvToMarkdown as csvToMarkdown, text_detectDelimiter as detectDelimiter, text_detectFillerWords as detectFillerWords, text_detectPassiveVoice as detectPassiveVoice, text_detectWordyPhrases as detectWordyPhrases, text_diffLines as diffLines, text_diffLinesSimple as diffLinesSimple, text_diffStats as diffStats, text_escapeAll as escapeAll, text_escapeString as escapeString, text_extractHeadings as extractHeadings, text_formatReadingTime as formatReadingTime, text_generate as generate, text_generateDiff as generateDiff, text_generateHtmlTable as generateHtmlTable, text_generateMarkdownTable as generateMarkdownTable, text_generateParagraphs as generateParagraphs, text_generateSentences as generateSentences, text_generateWords as generateWords, text_getAvailableFonts as getAvailableFonts, text_getEmojiByCategory as getEmojiByCategory, text_getEmojiByChar as getEmojiByChar, text_getEmojiByShortcode as getEmojiByShortcode, text_getEmojiCategories as getEmojiCategories, text_getMorseForChar as getMorseForChar, text_getMorseTiming as getMorseTiming, text_htmlToMarkdown as htmlToMarkdown, text_isValidMorse as isValidMorse, text_markdownToHtml as markdownToHtml, text_morseToText as morseToText, text_numberToOrdinal as numberToOrdinal, text_numberToRoman as numberToRoman, text_numberToWords as numberToWords, text_ordinalWords as ordinalWords, text_parseDiff as parseDiff, text_parseTableData as parseTableData, text_readabilityScore as readabilityScore, text_renderMarkdown as renderMarkdown, text_romanToNumber as romanToNumber, text_scoreReadability as scoreReadability, text_searchEmoji as searchEmoji, text_sentenceCount as sentenceCount, text_slugify as slugify, text_slugifyAll as slugifyAll, text_syllableCount as syllableCount, text_textToAscii as textToAscii, text_textToMorse as textToMorse, text_unescapeString as unescapeString, text_wordFrequency as wordFrequency };
604
642
  }
605
643
 
606
- export { analyzeKeywordDensity as $, type AsciiFont as A, type ParsedTable as B, CASE_FORMATS as C, DEFAULT_CONVERT_OPTIONS as D, EMOJI_TABLE as E, type FillerCategory as F, type PassiveVoiceMatch as G, type PassiveVoiceResult as H, type PassiveVoiceSentence as I, type ReadabilityScore as J, type KeywordDensityEntry as K, LINE_OPS as L, MORSE_CODE as M, type SentenceLengthDistribution as N, type OxfordCommaInstance as O, type ParsedDiff as P, type SlugSeparator as Q, type ReadabilityResult as R, type SentenceLengthBucket as S, type StringDistanceMode as T, type StringDistanceResult as U, type TableOptions as V, type TextAnalysis as W, type WordCountResult as X, type WordyPhraseMatch as Y, type WordyPhraseResult as Z, addBorder as _, type AsciiOptions as a, analyzeSentenceLengths as a0, analyzeText as a1, applyOp as a2, applyOps as a3, calculateStringDistance as a4, centerText as a5, checkDashUsage as a6, checkOxfordCommaConsistency as a7, convertAll as a8, convertCase as a9, getMorseForChar as aA, getMorseTiming as aB, htmlToMarkdown as aC, isValidMorse as aD, markdownToHtml as aE, morseToText as aF, numberToOrdinal as aG, numberToRoman as aH, numberToWords as aI, ordinalWords as aJ, parseDiff as aK, parseTableData as aL, readabilityScore as aM, renderMarkdown as aN, romanToNumber as aO, scoreReadability as aP, searchEmoji as aQ, sentenceCount as aR, slugify as aS, slugifyAll as aT, syllableCount as aU, textToAscii as aV, textToMorse as aW, unescapeString as aX, wordFrequency as aY, countWords as aa, csvToHtml as ab, csvToMarkdown as ac, detectDelimiter as ad, detectFillerWords as ae, detectPassiveVoice as af, detectWordyPhrases as ag, diffLines as ah, diffLinesSimple as ai, diffStats as aj, escapeAll as ak, escapeString as al, extractHeadings as am, formatReadingTime as an, generate as ao, generateDiff as ap, generateHtmlTable as aq, generateMarkdownTable as ar, generateParagraphs as as, generateSentences as at, generateWords as au, getAvailableFonts as av, getEmojiByCategory as aw, getEmojiByChar as ax, getEmojiByShortcode as ay, getEmojiCategories as az, type CaseFormat as b, type ConvertOptions as c, type DashIssue as d, type DashIssueType as e, type DashUsageResult as f, type DiffFile as g, type DiffHunk as h, type DiffLine as i, type DiffResult as j, type DiffType as k, type DiffViewerLine as l, ESCAPE_MODES as m, type EmojiEntry as n, type EscapeMode as o, type FillerMatch as p, type FillerWordResult as q, type KeywordDensityOptions as r, type KeywordDensityResult as s, text as t, type LineOp as u, type LineType as v, type LoremUnit as w, type MarkdownResult as x, type MorseOptions as y, type OxfordCommaResult as z };
644
+ export { type WordCountResult as $, type AcronymCheckResult as A, type LoremUnit as B, CASE_FORMATS as C, DEFAULT_CONVERT_OPTIONS as D, EMOJI_TABLE as E, type FillerCategory as F, type MarkdownResult as G, type MorseOptions as H, type OxfordCommaResult as I, type ParsedTable as J, type KeywordDensityEntry as K, LINE_OPS as L, MORSE_CODE as M, type PassiveVoiceMatch as N, type OxfordCommaInstance as O, type ParsedDiff as P, type PassiveVoiceResult as Q, type PassiveVoiceSentence as R, type ReadabilityResult as S, type ReadabilityScore as T, type SentenceLengthBucket as U, type SentenceLengthDistribution as V, type SlugSeparator as W, type StringDistanceMode as X, type StringDistanceResult as Y, type TableOptions as Z, type TextAnalysis as _, type AcronymIssue as a, textToMorse as a$, type WordyPhraseMatch as a0, type WordyPhraseResult as a1, addBorder as a2, analyzeKeywordDensity as a3, analyzeSentenceLengths as a4, analyzeText as a5, applyOp as a6, applyOps as a7, calculateStringDistance as a8, centerText as a9, getAvailableFonts as aA, getEmojiByCategory as aB, getEmojiByChar as aC, getEmojiByShortcode as aD, getEmojiCategories as aE, getMorseForChar as aF, getMorseTiming as aG, htmlToMarkdown as aH, isValidMorse as aI, markdownToHtml as aJ, morseToText as aK, numberToOrdinal as aL, numberToRoman as aM, numberToWords as aN, ordinalWords as aO, parseDiff as aP, parseTableData as aQ, readabilityScore as aR, renderMarkdown as aS, romanToNumber as aT, scoreReadability as aU, searchEmoji as aV, sentenceCount as aW, slugify as aX, slugifyAll as aY, syllableCount as aZ, textToAscii as a_, checkAcronymExpansion as aa, checkDashUsage as ab, checkOxfordCommaConsistency as ac, convertAll as ad, convertCase as ae, countWords as af, csvToHtml as ag, csvToMarkdown as ah, detectDelimiter as ai, detectFillerWords as aj, detectPassiveVoice as ak, detectWordyPhrases as al, diffLines as am, diffLinesSimple as an, diffStats as ao, escapeAll as ap, escapeString as aq, extractHeadings as ar, formatReadingTime as as, generate as at, generateDiff as au, generateHtmlTable as av, generateMarkdownTable as aw, generateParagraphs as ax, generateSentences as ay, generateWords as az, type AcronymIssueType as b, unescapeString as b0, wordFrequency as b1, type AcronymUsage as c, type AsciiFont as d, type AsciiOptions as e, type CaseFormat as f, type ConvertOptions as g, type DashIssue as h, type DashIssueType as i, type DashUsageResult as j, type DiffFile as k, type DiffHunk as l, type DiffLine as m, type DiffResult as n, type DiffType as o, type DiffViewerLine as p, ESCAPE_MODES as q, type EmojiEntry as r, type EscapeMode as s, text as t, type FillerMatch as u, type FillerWordResult as v, type KeywordDensityOptions as w, type KeywordDensityResult as x, type LineOp as y, type LineType as z };
@@ -26,6 +26,7 @@
26
26
  * - keyword-density-analyzer: analyzeKeywordDensity
27
27
  * - emoji-lookup : searchEmoji, getEmojiByShortcode, getEmojiByChar, getEmojiByCategory, getEmojiCategories, EMOJI_TABLE
28
28
  * - em-dash-usage-checker: checkDashUsage
29
+ * - acronym-expansion-checker: checkAcronymExpansion
29
30
  */
30
31
  interface WordCountResult {
31
32
  words: number;
@@ -484,7 +485,43 @@ interface DashUsageResult {
484
485
  * pasted alongside prose can occasionally be flagged.
485
486
  */
486
487
  declare function checkDashUsage(text: string): DashUsageResult;
488
+ type AcronymIssueType = 'used-before-expansion' | 'never-expanded';
489
+ interface AcronymIssue {
490
+ type: AcronymIssueType;
491
+ acronym: string;
492
+ index: number;
493
+ context: string;
494
+ message: string;
495
+ }
496
+ interface AcronymUsage {
497
+ acronym: string;
498
+ occurrences: number;
499
+ firstUsedAt: number;
500
+ expandedAt: number | null;
501
+ usedBeforeExpansion: boolean;
502
+ }
503
+ interface AcronymCheckResult {
504
+ acronyms: AcronymUsage[];
505
+ issues: AcronymIssue[];
506
+ }
507
+ /**
508
+ * Scan text for acronyms (2-10 character all-caps tokens) and flag any that
509
+ * are used before being expanded on first mention, per standard technical
510
+ * writing style guides. Recognizes both expansion conventions: the full term
511
+ * followed by the acronym in parentheses ("Application Programming Interface
512
+ * (API)"), and the acronym followed by its expansion in parentheses ("API
513
+ * (Application Programming Interface)"). An acronym with no expansion found
514
+ * anywhere in the text is reported separately as never expanded, rather than
515
+ * as used too early. Pure regex heuristic, not a dictionary of real acronyms:
516
+ * a proper noun styled in all caps, a Roman numeral, or a pluralized acronym
517
+ * like "APIs" can be missed or misread.
518
+ */
519
+ declare function checkAcronymExpansion(text: string): AcronymCheckResult;
487
520
 
521
+ type text_AcronymCheckResult = AcronymCheckResult;
522
+ type text_AcronymIssue = AcronymIssue;
523
+ type text_AcronymIssueType = AcronymIssueType;
524
+ type text_AcronymUsage = AcronymUsage;
488
525
  type text_AsciiFont = AsciiFont;
489
526
  type text_AsciiOptions = AsciiOptions;
490
527
  declare const text_CASE_FORMATS: typeof CASE_FORMATS;
@@ -544,6 +581,7 @@ declare const text_applyOp: typeof applyOp;
544
581
  declare const text_applyOps: typeof applyOps;
545
582
  declare const text_calculateStringDistance: typeof calculateStringDistance;
546
583
  declare const text_centerText: typeof centerText;
584
+ declare const text_checkAcronymExpansion: typeof checkAcronymExpansion;
547
585
  declare const text_checkDashUsage: typeof checkDashUsage;
548
586
  declare const text_checkOxfordCommaConsistency: typeof checkOxfordCommaConsistency;
549
587
  declare const text_convertAll: typeof convertAll;
@@ -600,7 +638,7 @@ declare const text_textToMorse: typeof textToMorse;
600
638
  declare const text_unescapeString: typeof unescapeString;
601
639
  declare const text_wordFrequency: typeof wordFrequency;
602
640
  declare namespace text {
603
- export { type text_AsciiFont as AsciiFont, type text_AsciiOptions as AsciiOptions, text_CASE_FORMATS as CASE_FORMATS, type text_CaseFormat as CaseFormat, type text_ConvertOptions as ConvertOptions, text_DEFAULT_CONVERT_OPTIONS as DEFAULT_CONVERT_OPTIONS, type text_DashIssue as DashIssue, type text_DashIssueType as DashIssueType, type text_DashUsageResult as DashUsageResult, type text_DiffFile as DiffFile, type text_DiffHunk as DiffHunk, type text_DiffLine as DiffLine, type text_DiffResult as DiffResult, type text_DiffType as DiffType, type text_DiffViewerLine as DiffViewerLine, text_EMOJI_TABLE as EMOJI_TABLE, text_ESCAPE_MODES as ESCAPE_MODES, type text_EmojiEntry as EmojiEntry, type text_EscapeMode as EscapeMode, type text_FillerCategory as FillerCategory, type text_FillerMatch as FillerMatch, type text_FillerWordResult as FillerWordResult, type text_KeywordDensityEntry as KeywordDensityEntry, type text_KeywordDensityOptions as KeywordDensityOptions, type text_KeywordDensityResult as KeywordDensityResult, text_LINE_OPS as LINE_OPS, type text_LineOp as LineOp, type text_LineType as LineType, type text_LoremUnit as LoremUnit, text_MORSE_CODE as MORSE_CODE, type text_MarkdownResult as MarkdownResult, type text_MorseOptions as MorseOptions, type text_OxfordCommaInstance as OxfordCommaInstance, type text_OxfordCommaResult as OxfordCommaResult, type text_ParsedDiff as ParsedDiff, type text_ParsedTable as ParsedTable, type text_PassiveVoiceMatch as PassiveVoiceMatch, type text_PassiveVoiceResult as PassiveVoiceResult, type text_PassiveVoiceSentence as PassiveVoiceSentence, type text_ReadabilityResult as ReadabilityResult, type text_ReadabilityScore as ReadabilityScore, type text_SentenceLengthBucket as SentenceLengthBucket, type text_SentenceLengthDistribution as SentenceLengthDistribution, type text_SlugSeparator as SlugSeparator, type text_StringDistanceMode as StringDistanceMode, type text_StringDistanceResult as StringDistanceResult, type text_TableOptions as TableOptions, type text_TextAnalysis as TextAnalysis, type text_WordCountResult as WordCountResult, type text_WordyPhraseMatch as WordyPhraseMatch, type text_WordyPhraseResult as WordyPhraseResult, text_addBorder as addBorder, text_analyzeKeywordDensity as analyzeKeywordDensity, text_analyzeSentenceLengths as analyzeSentenceLengths, text_analyzeText as analyzeText, text_applyOp as applyOp, text_applyOps as applyOps, text_calculateStringDistance as calculateStringDistance, text_centerText as centerText, text_checkDashUsage as checkDashUsage, text_checkOxfordCommaConsistency as checkOxfordCommaConsistency, text_convertAll as convertAll, text_convertCase as convertCase, text_countWords as countWords, text_csvToHtml as csvToHtml, text_csvToMarkdown as csvToMarkdown, text_detectDelimiter as detectDelimiter, text_detectFillerWords as detectFillerWords, text_detectPassiveVoice as detectPassiveVoice, text_detectWordyPhrases as detectWordyPhrases, text_diffLines as diffLines, text_diffLinesSimple as diffLinesSimple, text_diffStats as diffStats, text_escapeAll as escapeAll, text_escapeString as escapeString, text_extractHeadings as extractHeadings, text_formatReadingTime as formatReadingTime, text_generate as generate, text_generateDiff as generateDiff, text_generateHtmlTable as generateHtmlTable, text_generateMarkdownTable as generateMarkdownTable, text_generateParagraphs as generateParagraphs, text_generateSentences as generateSentences, text_generateWords as generateWords, text_getAvailableFonts as getAvailableFonts, text_getEmojiByCategory as getEmojiByCategory, text_getEmojiByChar as getEmojiByChar, text_getEmojiByShortcode as getEmojiByShortcode, text_getEmojiCategories as getEmojiCategories, text_getMorseForChar as getMorseForChar, text_getMorseTiming as getMorseTiming, text_htmlToMarkdown as htmlToMarkdown, text_isValidMorse as isValidMorse, text_markdownToHtml as markdownToHtml, text_morseToText as morseToText, text_numberToOrdinal as numberToOrdinal, text_numberToRoman as numberToRoman, text_numberToWords as numberToWords, text_ordinalWords as ordinalWords, text_parseDiff as parseDiff, text_parseTableData as parseTableData, text_readabilityScore as readabilityScore, text_renderMarkdown as renderMarkdown, text_romanToNumber as romanToNumber, text_scoreReadability as scoreReadability, text_searchEmoji as searchEmoji, text_sentenceCount as sentenceCount, text_slugify as slugify, text_slugifyAll as slugifyAll, text_syllableCount as syllableCount, text_textToAscii as textToAscii, text_textToMorse as textToMorse, text_unescapeString as unescapeString, text_wordFrequency as wordFrequency };
641
+ export { type text_AcronymCheckResult as AcronymCheckResult, type text_AcronymIssue as AcronymIssue, type text_AcronymIssueType as AcronymIssueType, type text_AcronymUsage as AcronymUsage, type text_AsciiFont as AsciiFont, type text_AsciiOptions as AsciiOptions, text_CASE_FORMATS as CASE_FORMATS, type text_CaseFormat as CaseFormat, type text_ConvertOptions as ConvertOptions, text_DEFAULT_CONVERT_OPTIONS as DEFAULT_CONVERT_OPTIONS, type text_DashIssue as DashIssue, type text_DashIssueType as DashIssueType, type text_DashUsageResult as DashUsageResult, type text_DiffFile as DiffFile, type text_DiffHunk as DiffHunk, type text_DiffLine as DiffLine, type text_DiffResult as DiffResult, type text_DiffType as DiffType, type text_DiffViewerLine as DiffViewerLine, text_EMOJI_TABLE as EMOJI_TABLE, text_ESCAPE_MODES as ESCAPE_MODES, type text_EmojiEntry as EmojiEntry, type text_EscapeMode as EscapeMode, type text_FillerCategory as FillerCategory, type text_FillerMatch as FillerMatch, type text_FillerWordResult as FillerWordResult, type text_KeywordDensityEntry as KeywordDensityEntry, type text_KeywordDensityOptions as KeywordDensityOptions, type text_KeywordDensityResult as KeywordDensityResult, text_LINE_OPS as LINE_OPS, type text_LineOp as LineOp, type text_LineType as LineType, type text_LoremUnit as LoremUnit, text_MORSE_CODE as MORSE_CODE, type text_MarkdownResult as MarkdownResult, type text_MorseOptions as MorseOptions, type text_OxfordCommaInstance as OxfordCommaInstance, type text_OxfordCommaResult as OxfordCommaResult, type text_ParsedDiff as ParsedDiff, type text_ParsedTable as ParsedTable, type text_PassiveVoiceMatch as PassiveVoiceMatch, type text_PassiveVoiceResult as PassiveVoiceResult, type text_PassiveVoiceSentence as PassiveVoiceSentence, type text_ReadabilityResult as ReadabilityResult, type text_ReadabilityScore as ReadabilityScore, type text_SentenceLengthBucket as SentenceLengthBucket, type text_SentenceLengthDistribution as SentenceLengthDistribution, type text_SlugSeparator as SlugSeparator, type text_StringDistanceMode as StringDistanceMode, type text_StringDistanceResult as StringDistanceResult, type text_TableOptions as TableOptions, type text_TextAnalysis as TextAnalysis, type text_WordCountResult as WordCountResult, type text_WordyPhraseMatch as WordyPhraseMatch, type text_WordyPhraseResult as WordyPhraseResult, text_addBorder as addBorder, text_analyzeKeywordDensity as analyzeKeywordDensity, text_analyzeSentenceLengths as analyzeSentenceLengths, text_analyzeText as analyzeText, text_applyOp as applyOp, text_applyOps as applyOps, text_calculateStringDistance as calculateStringDistance, text_centerText as centerText, text_checkAcronymExpansion as checkAcronymExpansion, text_checkDashUsage as checkDashUsage, text_checkOxfordCommaConsistency as checkOxfordCommaConsistency, text_convertAll as convertAll, text_convertCase as convertCase, text_countWords as countWords, text_csvToHtml as csvToHtml, text_csvToMarkdown as csvToMarkdown, text_detectDelimiter as detectDelimiter, text_detectFillerWords as detectFillerWords, text_detectPassiveVoice as detectPassiveVoice, text_detectWordyPhrases as detectWordyPhrases, text_diffLines as diffLines, text_diffLinesSimple as diffLinesSimple, text_diffStats as diffStats, text_escapeAll as escapeAll, text_escapeString as escapeString, text_extractHeadings as extractHeadings, text_formatReadingTime as formatReadingTime, text_generate as generate, text_generateDiff as generateDiff, text_generateHtmlTable as generateHtmlTable, text_generateMarkdownTable as generateMarkdownTable, text_generateParagraphs as generateParagraphs, text_generateSentences as generateSentences, text_generateWords as generateWords, text_getAvailableFonts as getAvailableFonts, text_getEmojiByCategory as getEmojiByCategory, text_getEmojiByChar as getEmojiByChar, text_getEmojiByShortcode as getEmojiByShortcode, text_getEmojiCategories as getEmojiCategories, text_getMorseForChar as getMorseForChar, text_getMorseTiming as getMorseTiming, text_htmlToMarkdown as htmlToMarkdown, text_isValidMorse as isValidMorse, text_markdownToHtml as markdownToHtml, text_morseToText as morseToText, text_numberToOrdinal as numberToOrdinal, text_numberToRoman as numberToRoman, text_numberToWords as numberToWords, text_ordinalWords as ordinalWords, text_parseDiff as parseDiff, text_parseTableData as parseTableData, text_readabilityScore as readabilityScore, text_renderMarkdown as renderMarkdown, text_romanToNumber as romanToNumber, text_scoreReadability as scoreReadability, text_searchEmoji as searchEmoji, text_sentenceCount as sentenceCount, text_slugify as slugify, text_slugifyAll as slugifyAll, text_syllableCount as syllableCount, text_textToAscii as textToAscii, text_textToMorse as textToMorse, text_unescapeString as unescapeString, text_wordFrequency as wordFrequency };
604
642
  }
605
643
 
606
- export { analyzeKeywordDensity as $, type AsciiFont as A, type ParsedTable as B, CASE_FORMATS as C, DEFAULT_CONVERT_OPTIONS as D, EMOJI_TABLE as E, type FillerCategory as F, type PassiveVoiceMatch as G, type PassiveVoiceResult as H, type PassiveVoiceSentence as I, type ReadabilityScore as J, type KeywordDensityEntry as K, LINE_OPS as L, MORSE_CODE as M, type SentenceLengthDistribution as N, type OxfordCommaInstance as O, type ParsedDiff as P, type SlugSeparator as Q, type ReadabilityResult as R, type SentenceLengthBucket as S, type StringDistanceMode as T, type StringDistanceResult as U, type TableOptions as V, type TextAnalysis as W, type WordCountResult as X, type WordyPhraseMatch as Y, type WordyPhraseResult as Z, addBorder as _, type AsciiOptions as a, analyzeSentenceLengths as a0, analyzeText as a1, applyOp as a2, applyOps as a3, calculateStringDistance as a4, centerText as a5, checkDashUsage as a6, checkOxfordCommaConsistency as a7, convertAll as a8, convertCase as a9, getMorseForChar as aA, getMorseTiming as aB, htmlToMarkdown as aC, isValidMorse as aD, markdownToHtml as aE, morseToText as aF, numberToOrdinal as aG, numberToRoman as aH, numberToWords as aI, ordinalWords as aJ, parseDiff as aK, parseTableData as aL, readabilityScore as aM, renderMarkdown as aN, romanToNumber as aO, scoreReadability as aP, searchEmoji as aQ, sentenceCount as aR, slugify as aS, slugifyAll as aT, syllableCount as aU, textToAscii as aV, textToMorse as aW, unescapeString as aX, wordFrequency as aY, countWords as aa, csvToHtml as ab, csvToMarkdown as ac, detectDelimiter as ad, detectFillerWords as ae, detectPassiveVoice as af, detectWordyPhrases as ag, diffLines as ah, diffLinesSimple as ai, diffStats as aj, escapeAll as ak, escapeString as al, extractHeadings as am, formatReadingTime as an, generate as ao, generateDiff as ap, generateHtmlTable as aq, generateMarkdownTable as ar, generateParagraphs as as, generateSentences as at, generateWords as au, getAvailableFonts as av, getEmojiByCategory as aw, getEmojiByChar as ax, getEmojiByShortcode as ay, getEmojiCategories as az, type CaseFormat as b, type ConvertOptions as c, type DashIssue as d, type DashIssueType as e, type DashUsageResult as f, type DiffFile as g, type DiffHunk as h, type DiffLine as i, type DiffResult as j, type DiffType as k, type DiffViewerLine as l, ESCAPE_MODES as m, type EmojiEntry as n, type EscapeMode as o, type FillerMatch as p, type FillerWordResult as q, type KeywordDensityOptions as r, type KeywordDensityResult as s, text as t, type LineOp as u, type LineType as v, type LoremUnit as w, type MarkdownResult as x, type MorseOptions as y, type OxfordCommaResult as z };
644
+ export { type WordCountResult as $, type AcronymCheckResult as A, type LoremUnit as B, CASE_FORMATS as C, DEFAULT_CONVERT_OPTIONS as D, EMOJI_TABLE as E, type FillerCategory as F, type MarkdownResult as G, type MorseOptions as H, type OxfordCommaResult as I, type ParsedTable as J, type KeywordDensityEntry as K, LINE_OPS as L, MORSE_CODE as M, type PassiveVoiceMatch as N, type OxfordCommaInstance as O, type ParsedDiff as P, type PassiveVoiceResult as Q, type PassiveVoiceSentence as R, type ReadabilityResult as S, type ReadabilityScore as T, type SentenceLengthBucket as U, type SentenceLengthDistribution as V, type SlugSeparator as W, type StringDistanceMode as X, type StringDistanceResult as Y, type TableOptions as Z, type TextAnalysis as _, type AcronymIssue as a, textToMorse as a$, type WordyPhraseMatch as a0, type WordyPhraseResult as a1, addBorder as a2, analyzeKeywordDensity as a3, analyzeSentenceLengths as a4, analyzeText as a5, applyOp as a6, applyOps as a7, calculateStringDistance as a8, centerText as a9, getAvailableFonts as aA, getEmojiByCategory as aB, getEmojiByChar as aC, getEmojiByShortcode as aD, getEmojiCategories as aE, getMorseForChar as aF, getMorseTiming as aG, htmlToMarkdown as aH, isValidMorse as aI, markdownToHtml as aJ, morseToText as aK, numberToOrdinal as aL, numberToRoman as aM, numberToWords as aN, ordinalWords as aO, parseDiff as aP, parseTableData as aQ, readabilityScore as aR, renderMarkdown as aS, romanToNumber as aT, scoreReadability as aU, searchEmoji as aV, sentenceCount as aW, slugify as aX, slugifyAll as aY, syllableCount as aZ, textToAscii as a_, checkAcronymExpansion as aa, checkDashUsage as ab, checkOxfordCommaConsistency as ac, convertAll as ad, convertCase as ae, countWords as af, csvToHtml as ag, csvToMarkdown as ah, detectDelimiter as ai, detectFillerWords as aj, detectPassiveVoice as ak, detectWordyPhrases as al, diffLines as am, diffLinesSimple as an, diffStats as ao, escapeAll as ap, escapeString as aq, extractHeadings as ar, formatReadingTime as as, generate as at, generateDiff as au, generateHtmlTable as av, generateMarkdownTable as aw, generateParagraphs as ax, generateSentences as ay, generateWords as az, type AcronymIssueType as b, unescapeString as b0, wordFrequency as b1, type AcronymUsage as c, type AsciiFont as d, type AsciiOptions as e, type CaseFormat as f, type ConvertOptions as g, type DashIssue as h, type DashIssueType as i, type DashUsageResult as j, type DiffFile as k, type DiffHunk as l, type DiffLine as m, type DiffResult as n, type DiffType as o, type DiffViewerLine as p, ESCAPE_MODES as q, type EmojiEntry as r, type EscapeMode as s, text as t, type FillerMatch as u, type FillerWordResult as v, type KeywordDensityOptions as w, type KeywordDensityResult as x, type LineOp as y, type LineType as z };
@@ -3196,6 +3196,68 @@ function checkDashUsage(text) {
3196
3196
  issues
3197
3197
  };
3198
3198
  }
3199
+ var ACRONYM_TOKEN_RE = /\b[A-Z][A-Z0-9]{1,9}\b/g;
3200
+ var ACRONYM_IN_PARENS_RE = /\(([A-Z][A-Z0-9]{1,9})\)/g;
3201
+ var ACRONYM_THEN_EXPANSION_RE = /\b([A-Z][A-Z0-9]{1,9})\b\s*\(([a-zA-Z][^()]{1,100})\)/g;
3202
+ function acronymContextSnippet(text, index, matchLen) {
3203
+ const start = Math.max(0, index - 25);
3204
+ const end = Math.min(text.length, index + matchLen + 25);
3205
+ const body = text.slice(start, end).replace(/\s+/g, " ").trim();
3206
+ return (start > 0 ? "\u2026" : "") + body + (end < text.length ? "\u2026" : "");
3207
+ }
3208
+ function checkAcronymExpansion(text) {
3209
+ const definedAt = /* @__PURE__ */ new Map();
3210
+ for (const m of text.matchAll(ACRONYM_IN_PARENS_RE)) {
3211
+ const acronym = m[1];
3212
+ const idx = (m.index ?? 0) + 1;
3213
+ const existing = definedAt.get(acronym);
3214
+ if (existing === void 0 || idx < existing) definedAt.set(acronym, idx);
3215
+ }
3216
+ for (const m of text.matchAll(ACRONYM_THEN_EXPANSION_RE)) {
3217
+ const acronym = m[1];
3218
+ const idx = m.index ?? 0;
3219
+ const existing = definedAt.get(acronym);
3220
+ if (existing === void 0 || idx < existing) definedAt.set(acronym, idx);
3221
+ }
3222
+ const occurrencesByAcronym = /* @__PURE__ */ new Map();
3223
+ for (const m of text.matchAll(ACRONYM_TOKEN_RE)) {
3224
+ const acronym = m[0];
3225
+ const idx = m.index ?? 0;
3226
+ const list = occurrencesByAcronym.get(acronym);
3227
+ if (list) list.push(idx);
3228
+ else occurrencesByAcronym.set(acronym, [idx]);
3229
+ }
3230
+ const acronyms = [];
3231
+ const issues = [];
3232
+ for (const [acronym, indicesUnsorted] of occurrencesByAcronym) {
3233
+ const indices = [...indicesUnsorted].sort((a, b) => a - b);
3234
+ const firstUsedAt = indices[0];
3235
+ const expandedAt = definedAt.has(acronym) ? definedAt.get(acronym) : null;
3236
+ const earlyUse = expandedAt !== null ? indices.find((i) => i < expandedAt) : void 0;
3237
+ const usedBeforeExpansion = earlyUse !== void 0;
3238
+ acronyms.push({ acronym, occurrences: indices.length, firstUsedAt, expandedAt, usedBeforeExpansion });
3239
+ if (usedBeforeExpansion) {
3240
+ issues.push({
3241
+ type: "used-before-expansion",
3242
+ acronym,
3243
+ index: earlyUse,
3244
+ context: acronymContextSnippet(text, earlyUse, acronym.length),
3245
+ message: `"${acronym}" is used here before it's expanded later in the document (at character ${expandedAt}).`
3246
+ });
3247
+ } else if (expandedAt === null) {
3248
+ issues.push({
3249
+ type: "never-expanded",
3250
+ acronym,
3251
+ index: firstUsedAt,
3252
+ context: acronymContextSnippet(text, firstUsedAt, acronym.length),
3253
+ message: `"${acronym}" is never expanded anywhere in this document.`
3254
+ });
3255
+ }
3256
+ }
3257
+ acronyms.sort((a, b) => a.firstUsedAt - b.firstUsedAt);
3258
+ issues.sort((a, b) => a.index - b.index);
3259
+ return { acronyms, issues };
3260
+ }
3199
3261
 
3200
3262
  exports.CASE_FORMATS = CASE_FORMATS;
3201
3263
  exports.DEFAULT_CONVERT_OPTIONS = DEFAULT_CONVERT_OPTIONS;
@@ -3211,6 +3273,7 @@ exports.applyOp = applyOp;
3211
3273
  exports.applyOps = applyOps;
3212
3274
  exports.calculateStringDistance = calculateStringDistance;
3213
3275
  exports.centerText = centerText;
3276
+ exports.checkAcronymExpansion = checkAcronymExpansion;
3214
3277
  exports.checkDashUsage = checkDashUsage;
3215
3278
  exports.checkOxfordCommaConsistency = checkOxfordCommaConsistency;
3216
3279
  exports.convertAll = convertAll;
@@ -1 +1 @@
1
- export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DashIssue, e as DashIssueType, f as DashUsageResult, g as DiffFile, h as DiffHunk, i as DiffLine, j as DiffResult, k as DiffType, l as DiffViewerLine, E as EMOJI_TABLE, m as ESCAPE_MODES, n as EmojiEntry, o as EscapeMode, F as FillerCategory, p as FillerMatch, q as FillerWordResult, K as KeywordDensityEntry, r as KeywordDensityOptions, s as KeywordDensityResult, L as LINE_OPS, u as LineOp, v as LineType, w as LoremUnit, M as MORSE_CODE, x as MarkdownResult, y as MorseOptions, O as OxfordCommaInstance, z as OxfordCommaResult, P as ParsedDiff, B as ParsedTable, G as PassiveVoiceMatch, H as PassiveVoiceResult, I as PassiveVoiceSentence, R as ReadabilityResult, J as ReadabilityScore, S as SentenceLengthBucket, N as SentenceLengthDistribution, Q as SlugSeparator, T as StringDistanceMode, U as StringDistanceResult, V as TableOptions, W as TextAnalysis, X as WordCountResult, Y as WordyPhraseMatch, Z as WordyPhraseResult, _ as addBorder, $ as analyzeKeywordDensity, a0 as analyzeSentenceLengths, a1 as analyzeText, a2 as applyOp, a3 as applyOps, a4 as calculateStringDistance, a5 as centerText, a6 as checkDashUsage, a7 as checkOxfordCommaConsistency, a8 as convertAll, a9 as convertCase, aa as countWords, ab as csvToHtml, ac as csvToMarkdown, ad as detectDelimiter, ae as detectFillerWords, af as detectPassiveVoice, ag as detectWordyPhrases, ah as diffLines, ai as diffLinesSimple, aj as diffStats, ak as escapeAll, al as escapeString, am as extractHeadings, an as formatReadingTime, ao as generate, ap as generateDiff, aq as generateHtmlTable, ar as generateMarkdownTable, as as generateParagraphs, at as generateSentences, au as generateWords, av as getAvailableFonts, aw as getEmojiByCategory, ax as getEmojiByChar, ay as getEmojiByShortcode, az as getEmojiCategories, aA as getMorseForChar, aB as getMorseTiming, aC as htmlToMarkdown, aD as isValidMorse, aE as markdownToHtml, aF as morseToText, aG as numberToOrdinal, aH as numberToRoman, aI as numberToWords, aJ as ordinalWords, aK as parseDiff, aL as parseTableData, aM as readabilityScore, aN as renderMarkdown, aO as romanToNumber, aP as scoreReadability, aQ as searchEmoji, aR as sentenceCount, aS as slugify, aT as slugifyAll, aU as syllableCount, aV as textToAscii, aW as textToMorse, aX as unescapeString, aY as wordFrequency } from '../text-xY5MJwr0.cjs';
1
+ export { A as AcronymCheckResult, a as AcronymIssue, b as AcronymIssueType, c as AcronymUsage, d as AsciiFont, e as AsciiOptions, C as CASE_FORMATS, f as CaseFormat, g as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, h as DashIssue, i as DashIssueType, j as DashUsageResult, k as DiffFile, l as DiffHunk, m as DiffLine, n as DiffResult, o as DiffType, p as DiffViewerLine, E as EMOJI_TABLE, q as ESCAPE_MODES, r as EmojiEntry, s as EscapeMode, F as FillerCategory, u as FillerMatch, v as FillerWordResult, K as KeywordDensityEntry, w as KeywordDensityOptions, x as KeywordDensityResult, L as LINE_OPS, y as LineOp, z as LineType, B as LoremUnit, M as MORSE_CODE, G as MarkdownResult, H as MorseOptions, O as OxfordCommaInstance, I as OxfordCommaResult, P as ParsedDiff, J as ParsedTable, N as PassiveVoiceMatch, Q as PassiveVoiceResult, R as PassiveVoiceSentence, S as ReadabilityResult, T as ReadabilityScore, U as SentenceLengthBucket, V as SentenceLengthDistribution, W as SlugSeparator, X as StringDistanceMode, Y as StringDistanceResult, Z as TableOptions, _ as TextAnalysis, $ as WordCountResult, a0 as WordyPhraseMatch, a1 as WordyPhraseResult, a2 as addBorder, a3 as analyzeKeywordDensity, a4 as analyzeSentenceLengths, a5 as analyzeText, a6 as applyOp, a7 as applyOps, a8 as calculateStringDistance, a9 as centerText, aa as checkAcronymExpansion, ab as checkDashUsage, ac as checkOxfordCommaConsistency, ad as convertAll, ae as convertCase, af as countWords, ag as csvToHtml, ah as csvToMarkdown, ai as detectDelimiter, aj as detectFillerWords, ak as detectPassiveVoice, al as detectWordyPhrases, am as diffLines, an as diffLinesSimple, ao as diffStats, ap as escapeAll, aq as escapeString, ar as extractHeadings, as as formatReadingTime, at as generate, au as generateDiff, av as generateHtmlTable, aw as generateMarkdownTable, ax as generateParagraphs, ay as generateSentences, az as generateWords, aA as getAvailableFonts, aB as getEmojiByCategory, aC as getEmojiByChar, aD as getEmojiByShortcode, aE as getEmojiCategories, aF as getMorseForChar, aG as getMorseTiming, aH as htmlToMarkdown, aI as isValidMorse, aJ as markdownToHtml, aK as morseToText, aL as numberToOrdinal, aM as numberToRoman, aN as numberToWords, aO as ordinalWords, aP as parseDiff, aQ as parseTableData, aR as readabilityScore, aS as renderMarkdown, aT as romanToNumber, aU as scoreReadability, aV as searchEmoji, aW as sentenceCount, aX as slugify, aY as slugifyAll, aZ as syllableCount, a_ as textToAscii, a$ as textToMorse, b0 as unescapeString, b1 as wordFrequency } from '../text-DOopHoK3.cjs';
@@ -1 +1 @@
1
- export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DashIssue, e as DashIssueType, f as DashUsageResult, g as DiffFile, h as DiffHunk, i as DiffLine, j as DiffResult, k as DiffType, l as DiffViewerLine, E as EMOJI_TABLE, m as ESCAPE_MODES, n as EmojiEntry, o as EscapeMode, F as FillerCategory, p as FillerMatch, q as FillerWordResult, K as KeywordDensityEntry, r as KeywordDensityOptions, s as KeywordDensityResult, L as LINE_OPS, u as LineOp, v as LineType, w as LoremUnit, M as MORSE_CODE, x as MarkdownResult, y as MorseOptions, O as OxfordCommaInstance, z as OxfordCommaResult, P as ParsedDiff, B as ParsedTable, G as PassiveVoiceMatch, H as PassiveVoiceResult, I as PassiveVoiceSentence, R as ReadabilityResult, J as ReadabilityScore, S as SentenceLengthBucket, N as SentenceLengthDistribution, Q as SlugSeparator, T as StringDistanceMode, U as StringDistanceResult, V as TableOptions, W as TextAnalysis, X as WordCountResult, Y as WordyPhraseMatch, Z as WordyPhraseResult, _ as addBorder, $ as analyzeKeywordDensity, a0 as analyzeSentenceLengths, a1 as analyzeText, a2 as applyOp, a3 as applyOps, a4 as calculateStringDistance, a5 as centerText, a6 as checkDashUsage, a7 as checkOxfordCommaConsistency, a8 as convertAll, a9 as convertCase, aa as countWords, ab as csvToHtml, ac as csvToMarkdown, ad as detectDelimiter, ae as detectFillerWords, af as detectPassiveVoice, ag as detectWordyPhrases, ah as diffLines, ai as diffLinesSimple, aj as diffStats, ak as escapeAll, al as escapeString, am as extractHeadings, an as formatReadingTime, ao as generate, ap as generateDiff, aq as generateHtmlTable, ar as generateMarkdownTable, as as generateParagraphs, at as generateSentences, au as generateWords, av as getAvailableFonts, aw as getEmojiByCategory, ax as getEmojiByChar, ay as getEmojiByShortcode, az as getEmojiCategories, aA as getMorseForChar, aB as getMorseTiming, aC as htmlToMarkdown, aD as isValidMorse, aE as markdownToHtml, aF as morseToText, aG as numberToOrdinal, aH as numberToRoman, aI as numberToWords, aJ as ordinalWords, aK as parseDiff, aL as parseTableData, aM as readabilityScore, aN as renderMarkdown, aO as romanToNumber, aP as scoreReadability, aQ as searchEmoji, aR as sentenceCount, aS as slugify, aT as slugifyAll, aU as syllableCount, aV as textToAscii, aW as textToMorse, aX as unescapeString, aY as wordFrequency } from '../text-xY5MJwr0.js';
1
+ export { A as AcronymCheckResult, a as AcronymIssue, b as AcronymIssueType, c as AcronymUsage, d as AsciiFont, e as AsciiOptions, C as CASE_FORMATS, f as CaseFormat, g as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, h as DashIssue, i as DashIssueType, j as DashUsageResult, k as DiffFile, l as DiffHunk, m as DiffLine, n as DiffResult, o as DiffType, p as DiffViewerLine, E as EMOJI_TABLE, q as ESCAPE_MODES, r as EmojiEntry, s as EscapeMode, F as FillerCategory, u as FillerMatch, v as FillerWordResult, K as KeywordDensityEntry, w as KeywordDensityOptions, x as KeywordDensityResult, L as LINE_OPS, y as LineOp, z as LineType, B as LoremUnit, M as MORSE_CODE, G as MarkdownResult, H as MorseOptions, O as OxfordCommaInstance, I as OxfordCommaResult, P as ParsedDiff, J as ParsedTable, N as PassiveVoiceMatch, Q as PassiveVoiceResult, R as PassiveVoiceSentence, S as ReadabilityResult, T as ReadabilityScore, U as SentenceLengthBucket, V as SentenceLengthDistribution, W as SlugSeparator, X as StringDistanceMode, Y as StringDistanceResult, Z as TableOptions, _ as TextAnalysis, $ as WordCountResult, a0 as WordyPhraseMatch, a1 as WordyPhraseResult, a2 as addBorder, a3 as analyzeKeywordDensity, a4 as analyzeSentenceLengths, a5 as analyzeText, a6 as applyOp, a7 as applyOps, a8 as calculateStringDistance, a9 as centerText, aa as checkAcronymExpansion, ab as checkDashUsage, ac as checkOxfordCommaConsistency, ad as convertAll, ae as convertCase, af as countWords, ag as csvToHtml, ah as csvToMarkdown, ai as detectDelimiter, aj as detectFillerWords, ak as detectPassiveVoice, al as detectWordyPhrases, am as diffLines, an as diffLinesSimple, ao as diffStats, ap as escapeAll, aq as escapeString, ar as extractHeadings, as as formatReadingTime, at as generate, au as generateDiff, av as generateHtmlTable, aw as generateMarkdownTable, ax as generateParagraphs, ay as generateSentences, az as generateWords, aA as getAvailableFonts, aB as getEmojiByCategory, aC as getEmojiByChar, aD as getEmojiByShortcode, aE as getEmojiCategories, aF as getMorseForChar, aG as getMorseTiming, aH as htmlToMarkdown, aI as isValidMorse, aJ as markdownToHtml, aK as morseToText, aL as numberToOrdinal, aM as numberToRoman, aN as numberToWords, aO as ordinalWords, aP as parseDiff, aQ as parseTableData, aR as readabilityScore, aS as renderMarkdown, aT as romanToNumber, aU as scoreReadability, aV as searchEmoji, aW as sentenceCount, aX as slugify, aY as slugifyAll, aZ as syllableCount, a_ as textToAscii, a$ as textToMorse, b0 as unescapeString, b1 as wordFrequency } from '../text-DOopHoK3.js';
@@ -1,2 +1,2 @@
1
- export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, checkDashUsage, checkOxfordCommaConsistency, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, detectWordyPhrases, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, unescapeString, wordFrequency } from '../chunk-FB6CCFR5.js';
1
+ export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, checkAcronymExpansion, checkDashUsage, checkOxfordCommaConsistency, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, detectWordyPhrases, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, unescapeString, wordFrequency } from '../chunk-YQJ7CEUL.js';
2
2
  import '../chunk-MLKGABMK.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@utilix-tech/sdk",
3
- "version": "0.88.0",
4
- "description": "154+ developer utility tools for Node.js: JSON, encoding, hashing, color, CSS, network and more. Runs locally, no API key required.",
3
+ "version": "0.89.0",
4
+ "description": "728 developer utility functions for Node.js: JSON, encoding, hashing, color, CSS, network and more. Runs locally, no API key required.",
5
5
  "author": "Utilix <hello@utilix.tech>",
6
6
  "license": "MIT",
7
7
  "homepage": "https://www.utilix.tech/docs#node-sdk",