@utilix-tech/sdk 0.95.0 → 0.97.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,14 @@
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.97.0
6
+ - Add `calculatePositionSize` (position-size-risk-calculator): compute a trade's position size from account size, risk percent per trade, entry price, and stop-loss price, plus the risk/reward ratio against an optional target price.
7
+ - Add `detectWeaselWords` (weasel-word-detector): scan text for weasel words, vague hedging phrases that imply evidence or consensus without naming a checkable source, like "studies show" or "many experts believe".
8
+
9
+ ## 0.96.0
10
+ - Add `validateRoutingNumber` (aba-routing-number-validator): validate a 9-digit US bank routing number via its weighted mod-10 checksum, identifying the routing number's type and Federal Reserve district from its first two digits.
11
+ - Add `auditMarkdownImageAltText` (markdown-image-alt-text-auditor): scan a Markdown document's inline images and flag alt text accessibility smells, missing/empty alt text, generic placeholder words, a redundant "image of" prefix, and alt text that's just the image's own filename.
12
+
5
13
  ## 0.95.0
6
14
  - Add `readPngChunks` (png-chunk-inspector): walk a PNG's chunk stream directly from its bytes to report every chunk's type, offset, size, and CRC-32 validity, plus the decoded IHDR header and common ancillary chunks (tEXt, pHYs, gAMA, tIME, acTL).
7
15
  - Add `estimateAudioFileSize` (audio-file-size-estimator): estimate an audio file's size before recording or exporting it, uncompressed PCM size from sample rate/bit depth/channels or compressed size from a target bitrate.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @utilix-tech/sdk
2
2
 
3
- **742 developer utility functions for Node.js: runs locally, no API key required.**
3
+ **744 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)
@@ -782,6 +782,26 @@ readPngChunks(pngBytes);
782
782
  import { estimateAudioFileSize } from "@utilix-tech/sdk/units";
783
783
  estimateAudioFileSize({ mode: "pcm", durationSeconds: 60, sampleRateHz: 44100, bitDepth: 16, channels: 2 });
784
784
  // { mode: "pcm", durationSeconds: 60, sampleRateHz: 44100, bitDepth: 16, channels: 2, dataBytes: 10584000, fileSizeBytes: 10584044, fileSizeMB: 10.58, fileSizeMiB: 10.09 }
785
+
786
+ // Validate a US bank routing number (ABA/RTN) and identify its Federal Reserve district
787
+ import { validateRoutingNumber } from "@utilix-tech/sdk/units";
788
+ validateRoutingNumber("021000021");
789
+ // { valid: true, checksumValid: true, length: 9, formatted: "0210 0002 1", routingNumberType: "primary", federalReserveDistrict: { code: 2, bank: "New York" } }
790
+
791
+ // Audit a Markdown document's images for alt text accessibility smells
792
+ import { auditMarkdownImageAltText } from "@utilix-tech/sdk/data";
793
+ auditMarkdownImageAltText("![](photo.png)\n![Photo of a mountain](mountain.jpg)");
794
+ // { images: [...], issues: [{ line: 1, type: "empty-alt", ... }, { line: 2, type: "redundant-prefix", ... }], imageCount: 2 }
795
+
796
+ // Compute a trade's position size and risk from account size, entry, and stop-loss
797
+ import { calculatePositionSize } from "@utilix-tech/sdk/units";
798
+ calculatePositionSize({ accountSize: 10000, riskPercent: 1, entryPrice: 50, stopLossPrice: 48, targetPrice: 56 });
799
+ // { direction: "long", riskAmount: 100, perUnitRisk: 2, positionSizeUnits: 50, positionValue: 2500, dollarRisk: 100, riskRewardRatio: 3, targetOnCorrectSide: true }
800
+
801
+ // Scan text for weasel words that imply evidence without naming a source
802
+ import { detectWeaselWords } from "@utilix-tech/sdk/text";
803
+ detectWeaselWords("Studies show that many experts believe this works.");
804
+ // { totalWords: 8, totalMatches: 2, density: 25, matches: [{ phrase: "many experts believe", count: 1, indices: [...] }, { phrase: "studies show", count: 1, indices: [...] }] }
785
805
  ```
786
806
 
787
807
  ---
@@ -29,6 +29,7 @@ __export(text_exports, {
29
29
  detectDelimiter: () => detectDelimiter,
30
30
  detectFillerWords: () => detectFillerWords,
31
31
  detectPassiveVoice: () => detectPassiveVoice,
32
+ detectWeaselWords: () => detectWeaselWords,
32
33
  detectWordyPhrases: () => detectWordyPhrases,
33
34
  diffLines: () => diffLines,
34
35
  diffLinesSimple: () => diffLinesSimple,
@@ -3330,5 +3331,61 @@ function checkAcronymExpansion(text) {
3330
3331
  issues.sort((a, b) => a.index - b.index);
3331
3332
  return { acronyms, issues };
3332
3333
  }
3334
+ var WEASEL_PHRASES = [
3335
+ "many experts believe",
3336
+ "some experts say",
3337
+ "experts agree",
3338
+ "critics argue",
3339
+ "studies show",
3340
+ "studies have shown",
3341
+ "research shows",
3342
+ "research suggests",
3343
+ "it is widely believed",
3344
+ "it is widely known",
3345
+ "it is widely regarded",
3346
+ "it is generally accepted",
3347
+ "it is often said",
3348
+ "it has been suggested",
3349
+ "it is said that",
3350
+ "some say",
3351
+ "some people believe",
3352
+ "some people think",
3353
+ "many believe",
3354
+ "many people think",
3355
+ "many claim",
3356
+ "observers note",
3357
+ "sources say",
3358
+ "according to some",
3359
+ "widely regarded as",
3360
+ "many consider",
3361
+ "some scientists believe",
3362
+ "some argue",
3363
+ "reportedly",
3364
+ "allegedly"
3365
+ ];
3366
+ function _weaselRegex(phrase) {
3367
+ const tokens = phrase.split(/\s+/).map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
3368
+ return new RegExp("\\b" + tokens.join("\\s+") + "\\b", "gi");
3369
+ }
3370
+ function detectWeaselWords(text) {
3371
+ const totalWords = (text.match(/[A-Za-z0-9']+/g) ?? []).length;
3372
+ const matches = [];
3373
+ for (const phrase of WEASEL_PHRASES) {
3374
+ const re = _weaselRegex(phrase);
3375
+ const indices = [];
3376
+ let m;
3377
+ while ((m = re.exec(text)) !== null) {
3378
+ indices.push(m.index);
3379
+ if (m.index === re.lastIndex) re.lastIndex++;
3380
+ }
3381
+ if (indices.length > 0) {
3382
+ matches.push({ phrase, count: indices.length, indices });
3383
+ }
3384
+ }
3385
+ matches.sort((a, b) => b.count - a.count || a.phrase.localeCompare(b.phrase));
3386
+ const totalMatches = matches.reduce((s, x) => s + x.count, 0);
3387
+ const density = totalWords > 0 ? Math.round(totalMatches / totalWords * 1e3) / 10 : 0;
3388
+ return { totalWords, totalMatches, density, matches };
3389
+ }
3333
3390
 
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 };
3391
+ 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, detectWeaselWords, 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 };
@@ -46,6 +46,7 @@ __export(units_exports, {
46
46
  calculateMovingAverages: () => calculateMovingAverages,
47
47
  calculatePaybackPeriod: () => calculatePaybackPeriod,
48
48
  calculatePercentageChange: () => calculatePercentageChange,
49
+ calculatePositionSize: () => calculatePositionSize,
49
50
  calculateRealRateOfReturn: () => calculateRealRateOfReturn,
50
51
  calculateRequiredBandwidth: () => calculateRequiredBandwidth,
51
52
  calculateRoi: () => calculateRoi,
@@ -116,6 +117,7 @@ __export(units_exports, {
116
117
  validateIban: () => validateIban,
117
118
  validateIsbn: () => validateIsbn,
118
119
  validateIsin: () => validateIsin,
120
+ validateRoutingNumber: () => validateRoutingNumber,
119
121
  validateVin: () => validateVin,
120
122
  viewportToPx: () => viewportToPx
121
123
  });
@@ -3217,5 +3219,90 @@ function estimateAudioFileSize(input) {
3217
3219
  }
3218
3220
  return { error: 'mode must be "pcm" or "compressed"' };
3219
3221
  }
3222
+ var ABA_FEDERAL_RESERVE_BANKS = {
3223
+ 1: "Boston",
3224
+ 2: "New York",
3225
+ 3: "Philadelphia",
3226
+ 4: "Cleveland",
3227
+ 5: "Richmond",
3228
+ 6: "Atlanta",
3229
+ 7: "Chicago",
3230
+ 8: "St. Louis",
3231
+ 9: "Minneapolis",
3232
+ 10: "Kansas City",
3233
+ 11: "Dallas",
3234
+ 12: "San Francisco"
3235
+ };
3236
+ function abaDistrictAndType(prefix) {
3237
+ if (prefix >= 1 && prefix <= 12) {
3238
+ return { type: "primary", district: { code: prefix, bank: ABA_FEDERAL_RESERVE_BANKS[prefix] } };
3239
+ }
3240
+ if (prefix >= 21 && prefix <= 32) {
3241
+ const code = prefix - 20;
3242
+ return { type: "thrift", district: { code, bank: ABA_FEDERAL_RESERVE_BANKS[code] } };
3243
+ }
3244
+ if (prefix >= 61 && prefix <= 72) {
3245
+ const code = prefix - 60;
3246
+ return { type: "electronic", district: { code, bank: ABA_FEDERAL_RESERVE_BANKS[code] } };
3247
+ }
3248
+ if (prefix === 80) {
3249
+ return { type: "traveler-check", district: null };
3250
+ }
3251
+ return { type: "unknown", district: null };
3252
+ }
3253
+ function formatRoutingNumber(digits) {
3254
+ return `${digits.slice(0, 4)} ${digits.slice(4, 8)} ${digits.slice(8)}`;
3255
+ }
3256
+ function validateRoutingNumber(input) {
3257
+ if (!input || !input.trim()) return { error: "Input is empty" };
3258
+ const digits = input.replace(/[\s-]/g, "");
3259
+ if (!/^\d+$/.test(digits)) return { error: "Routing number must contain only digits, spaces, or hyphens" };
3260
+ if (digits.length !== 9) return { error: `Routing number length (${digits.length}) must be exactly 9 digits` };
3261
+ const d = digits.split("").map(Number);
3262
+ const sum = 3 * (d[0] + d[3] + d[6]) + 7 * (d[1] + d[4] + d[7]) + 1 * (d[2] + d[5] + d[8]);
3263
+ const checksumValid = sum % 10 === 0;
3264
+ const prefix = Number(digits.slice(0, 2));
3265
+ const { type, district } = abaDistrictAndType(prefix);
3266
+ return {
3267
+ valid: checksumValid,
3268
+ checksumValid,
3269
+ length: digits.length,
3270
+ formatted: formatRoutingNumber(digits),
3271
+ routingNumberType: type,
3272
+ federalReserveDistrict: district
3273
+ };
3274
+ }
3275
+ function calculatePositionSize(input) {
3276
+ const { accountSize, riskPercent, entryPrice, stopLossPrice, targetPrice } = input;
3277
+ if (!(accountSize > 0)) return { error: "accountSize must be greater than 0" };
3278
+ if (!(riskPercent > 0) || riskPercent > 100) return { error: "riskPercent must be greater than 0 and at most 100" };
3279
+ if (!(entryPrice > 0)) return { error: "entryPrice must be greater than 0" };
3280
+ if (!(stopLossPrice > 0)) return { error: "stopLossPrice must be greater than 0" };
3281
+ if (entryPrice === stopLossPrice) return { error: "entryPrice and stopLossPrice must differ" };
3282
+ if (targetPrice !== void 0 && !(targetPrice > 0)) return { error: "targetPrice must be greater than 0" };
3283
+ const direction = stopLossPrice < entryPrice ? "long" : "short";
3284
+ const riskAmount = accountSize * (riskPercent / 100);
3285
+ const perUnitRisk = Math.abs(entryPrice - stopLossPrice);
3286
+ const positionSizeUnits = Math.floor(riskAmount / perUnitRisk);
3287
+ const positionValue = positionSizeUnits * entryPrice;
3288
+ const dollarRisk = positionSizeUnits * perUnitRisk;
3289
+ let riskRewardRatio = null;
3290
+ let targetOnCorrectSide = null;
3291
+ if (targetPrice !== void 0) {
3292
+ const reward = Math.abs(targetPrice - entryPrice);
3293
+ riskRewardRatio = Math.round(reward / perUnitRisk * 100) / 100;
3294
+ targetOnCorrectSide = direction === "long" ? targetPrice > entryPrice : targetPrice < entryPrice;
3295
+ }
3296
+ return {
3297
+ direction,
3298
+ riskAmount: Math.round(riskAmount * 100) / 100,
3299
+ perUnitRisk: Math.round(perUnitRisk * 1e4) / 1e4,
3300
+ positionSizeUnits,
3301
+ positionValue: Math.round(positionValue * 100) / 100,
3302
+ dollarRisk: Math.round(dollarRisk * 100) / 100,
3303
+ riskRewardRatio,
3304
+ targetOnCorrectSide
3305
+ };
3306
+ }
3220
3307
 
3221
- export { BASE_LABELS, BASE_PREFIXES, BYTE_UNITS, COMMON_CURRENCIES, COMMON_LOCALES, COMMON_PERMISSIONS, COMMON_RATIOS, COMMON_SIZES, COMMON_TAX_RATES, COMMON_TIP_PERCENTAGES, COMMON_VIEWPORTS, GPA_GRADE_POINTS, USD_DENOMINATIONS, applySuccessiveDiscounts, autoFormat, bumpVersion, calcAspectRatio, calcSubnet, calculateAnnuityPayout, calculateBlendedLoanRate, calculateBreakEven, calculateCashBreakdown, calculateCashRounding, calculateCdMaturity, calculateChange, calculateCompoundInterest, calculateCreditCardMinimumPayment, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateDepreciationSchedule, calculateDiscount, calculateEmi, calculateExtraPaymentPayoff, calculateFreelancerRate, calculateGpa, calculateLoan, calculateLoanPrepaymentPenalty, calculateLoanRefinance, calculateMarginMarkup, calculateMortgagePoints, calculateMovingAverages, calculatePaybackPeriod, calculatePercentageChange, calculateRealRateOfReturn, calculateRequiredBandwidth, calculateRoi, calculateRuleOf72, calculateSalesCommission, calculateSavingsGoal, calculateSimpleInterest, calculateTax, calculateTaxEquivalentYield, calculateTimeValue, calculateTipSplit, calculateTransferTime, calculateVideoBitrate, compareSemver, compareUnitPrices, convert, convertAprApy, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, detectNegativeAmortization, estimateAudioFileSize, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, intersectSemverRanges, ipFromBinary, ipFromDecimal, ipFromHex, ipToBinary, ipToDecimal, ipToDecimalCidr, ipToHex, ipToOctal, isValid, isValidCidr, isValidIp, isValidIpv4, marginToMarkup, markupToMargin, octalToPermissions, parseFileSize, parseInput, parseNumberString, parseSemver, permissionsToChmod, permissionsToOctal, permissionsToSymbolic, planDebtPayoff, ptToPx, pxToAll, pxToViewport, remToPx, satisfiesRange, scaleByHeight, scaleByWidth, sortVersions, splitSubnet, symbolicToPermissions, units_exports, validateBarcode, validateCardNumber, validateIban, validateIsbn, validateIsin, validateVin, viewportToPx };
3308
+ export { BASE_LABELS, BASE_PREFIXES, BYTE_UNITS, COMMON_CURRENCIES, COMMON_LOCALES, COMMON_PERMISSIONS, COMMON_RATIOS, COMMON_SIZES, COMMON_TAX_RATES, COMMON_TIP_PERCENTAGES, COMMON_VIEWPORTS, GPA_GRADE_POINTS, USD_DENOMINATIONS, applySuccessiveDiscounts, autoFormat, bumpVersion, calcAspectRatio, calcSubnet, calculateAnnuityPayout, calculateBlendedLoanRate, calculateBreakEven, calculateCashBreakdown, calculateCashRounding, calculateCdMaturity, calculateChange, calculateCompoundInterest, calculateCreditCardMinimumPayment, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateDepreciationSchedule, calculateDiscount, calculateEmi, calculateExtraPaymentPayoff, calculateFreelancerRate, calculateGpa, calculateLoan, calculateLoanPrepaymentPenalty, calculateLoanRefinance, calculateMarginMarkup, calculateMortgagePoints, calculateMovingAverages, calculatePaybackPeriod, calculatePercentageChange, calculatePositionSize, calculateRealRateOfReturn, calculateRequiredBandwidth, calculateRoi, calculateRuleOf72, calculateSalesCommission, calculateSavingsGoal, calculateSimpleInterest, calculateTax, calculateTaxEquivalentYield, calculateTimeValue, calculateTipSplit, calculateTransferTime, calculateVideoBitrate, compareSemver, compareUnitPrices, convert, convertAprApy, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, detectNegativeAmortization, estimateAudioFileSize, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, intersectSemverRanges, ipFromBinary, ipFromDecimal, ipFromHex, ipToBinary, ipToDecimal, ipToDecimalCidr, ipToHex, ipToOctal, isValid, isValidCidr, isValidIp, isValidIpv4, marginToMarkup, markupToMargin, octalToPermissions, parseFileSize, parseInput, parseNumberString, parseSemver, permissionsToChmod, permissionsToOctal, permissionsToSymbolic, planDebtPayoff, ptToPx, pxToAll, pxToViewport, remToPx, satisfiesRange, scaleByHeight, scaleByWidth, sortVersions, splitSubnet, symbolicToPermissions, units_exports, validateBarcode, validateCardNumber, validateIban, validateIsbn, validateIsin, validateRoutingNumber, validateVin, viewportToPx };
@@ -7,6 +7,7 @@ var data_exports = {};
7
7
  __export(data_exports, {
8
8
  alignMarkdownTables: () => alignMarkdownTables,
9
9
  analyzeCaptionSpeed: () => analyzeCaptionSpeed,
10
+ auditMarkdownImageAltText: () => auditMarkdownImageAltText,
10
11
  calculateMarkdownTaskListProgress: () => calculateMarkdownTaskListProgress,
11
12
  checkMarkdownInternalLinks: () => checkMarkdownInternalLinks,
12
13
  convertSubtitles: () => convertSubtitles,
@@ -2223,5 +2224,89 @@ function summarizeCsvColumnStats(input, options) {
2223
2224
  });
2224
2225
  return { columns, rowCount: parsed.rows.length };
2225
2226
  }
2227
+ var MARKDOWN_IMAGE_RE = /!\[([^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
2228
+ var MARKDOWN_IMAGE_GENERIC_ALT_WORDS = /* @__PURE__ */ new Set([
2229
+ "image",
2230
+ "picture",
2231
+ "photo",
2232
+ "photograph",
2233
+ "pic",
2234
+ "img",
2235
+ "graphic",
2236
+ "screenshot",
2237
+ "icon",
2238
+ "logo"
2239
+ ]);
2240
+ var MARKDOWN_IMAGE_REDUNDANT_PREFIX_RE = /^(image|picture|photo|photograph)\s+of\s+/i;
2241
+ var MARKDOWN_IMAGE_FILENAME_EXT_RE = /\.(png|jpe?g|gif|svg|webp|bmp|avif|tiff?)$/i;
2242
+ function markdownImageBasenameWithoutExt(src) {
2243
+ const withoutQuery = src.split(/[?#]/)[0];
2244
+ const file = withoutQuery.split("/").pop() ?? withoutQuery;
2245
+ return file.replace(MARKDOWN_IMAGE_FILENAME_EXT_RE, "");
2246
+ }
2247
+ function auditMarkdownImageAltText(markdown) {
2248
+ if (typeof markdown !== "string") return { error: "markdown must be a string" };
2249
+ const lines = markdown.replace(/\r\n/g, "\n").split("\n");
2250
+ const images = [];
2251
+ const issues = [];
2252
+ let inFence = false;
2253
+ let fenceMarker = "";
2254
+ lines.forEach((line, idx) => {
2255
+ const fenceMatch = line.match(/^\s*(```+|~~~+)/);
2256
+ if (fenceMatch) {
2257
+ if (!inFence) {
2258
+ inFence = true;
2259
+ fenceMarker = fenceMatch[1][0];
2260
+ } else if (fenceMatch[1][0] === fenceMarker) {
2261
+ inFence = false;
2262
+ }
2263
+ return;
2264
+ }
2265
+ if (inFence) return;
2266
+ const lineNo = idx + 1;
2267
+ MARKDOWN_IMAGE_RE.lastIndex = 0;
2268
+ let match;
2269
+ while ((match = MARKDOWN_IMAGE_RE.exec(line)) !== null) {
2270
+ const alt = match[1].trim();
2271
+ const src = match[2];
2272
+ images.push({ line: lineNo, alt, src });
2273
+ if (alt === "") {
2274
+ issues.push({
2275
+ line: lineNo,
2276
+ type: "empty-alt",
2277
+ src,
2278
+ message: `Image at line ${lineNo} has no alt text (src: ${src}). If this image is purely decorative, an intentionally empty alt is fine; otherwise it needs a description.`
2279
+ });
2280
+ continue;
2281
+ }
2282
+ if (MARKDOWN_IMAGE_GENERIC_ALT_WORDS.has(alt.toLowerCase())) {
2283
+ issues.push({
2284
+ line: lineNo,
2285
+ type: "generic-alt",
2286
+ src,
2287
+ message: `Alt text "${alt}" at line ${lineNo} is a generic placeholder and doesn't describe the image's content.`
2288
+ });
2289
+ }
2290
+ if (MARKDOWN_IMAGE_REDUNDANT_PREFIX_RE.test(alt)) {
2291
+ issues.push({
2292
+ line: lineNo,
2293
+ type: "redundant-prefix",
2294
+ src,
2295
+ message: `Alt text "${alt}" at line ${lineNo} starts with a redundant prefix; screen readers already announce images, so "${alt.replace(MARKDOWN_IMAGE_REDUNDANT_PREFIX_RE, "")}" reads better.`
2296
+ });
2297
+ }
2298
+ const baseName = markdownImageBasenameWithoutExt(src);
2299
+ if (MARKDOWN_IMAGE_FILENAME_EXT_RE.test(alt) || baseName !== "" && alt.toLowerCase() === baseName.toLowerCase()) {
2300
+ issues.push({
2301
+ line: lineNo,
2302
+ type: "filename-as-alt",
2303
+ src,
2304
+ message: `Alt text "${alt}" at line ${lineNo} looks like the image's own filename rather than a description.`
2305
+ });
2306
+ }
2307
+ }
2308
+ });
2309
+ return { images, issues, imageCount: images.length };
2310
+ }
2226
2311
 
2227
- export { alignMarkdownTables, analyzeCaptionSpeed, calculateMarkdownTaskListProgress, checkMarkdownInternalLinks, convertSubtitles, csvToJson, csvToSqlInsert, data_exports, dedupeNdjson, detectDelimiter, detectSubtitleFormat, diffEnvExample, envToExport, envToJson, findCsvDuplicateRows, findYamlDuplicateKeys, formatNdjson, formatSubtitleTimestamp, formatToml, formatXml, generateMarkdownToc, getSection, getSectionNames, getTomlStats, getXmlStats, getYamlStats, inferCsvColumnTypes, iniToJson, jsonArrayToNdjson, jsonToIni, jsonToToml, jsonToXml, minifyNdjson, minifyToml, minifyXml, ndjsonToCsv, ndjsonToJsonArray, parseCsv, parseEnv, parseFrontMatter, parseIni, parseSubtitleTimestamp, parseSubtitles, parseXmlToObject, resolveYamlAnchors, serializeSubtitles, shiftSubtitles, stringifyIni, summarizeCsvColumnStats, toCsvString, tomlToJson, validateEnvKey, validateIni, validateMarkdownHeadingHierarchy, validateNdjson, validateToml, validateXml, validateYaml, xmlToJson };
2312
+ export { alignMarkdownTables, analyzeCaptionSpeed, auditMarkdownImageAltText, calculateMarkdownTaskListProgress, checkMarkdownInternalLinks, convertSubtitles, csvToJson, csvToSqlInsert, data_exports, dedupeNdjson, detectDelimiter, detectSubtitleFormat, diffEnvExample, envToExport, envToJson, findCsvDuplicateRows, findYamlDuplicateKeys, formatNdjson, formatSubtitleTimestamp, formatToml, formatXml, generateMarkdownToc, getSection, getSectionNames, getTomlStats, getXmlStats, getYamlStats, inferCsvColumnTypes, iniToJson, jsonArrayToNdjson, jsonToIni, jsonToToml, jsonToXml, minifyNdjson, minifyToml, minifyXml, ndjsonToCsv, ndjsonToJsonArray, parseCsv, parseEnv, parseFrontMatter, parseIni, parseSubtitleTimestamp, parseSubtitles, parseXmlToObject, resolveYamlAnchors, serializeSubtitles, shiftSubtitles, stringifyIni, summarizeCsvColumnStats, toCsvString, tomlToJson, validateEnvKey, validateIni, validateMarkdownHeadingHierarchy, validateNdjson, validateToml, validateXml, validateYaml, xmlToJson };
@@ -25,6 +25,7 @@
25
25
  * - markdown-internal-link-checker: checkMarkdownInternalLinks
26
26
  * - yaml-duplicate-key-detector: findYamlDuplicateKeys
27
27
  * - csv-column-stats-summarizer: summarizeCsvColumnStats
28
+ * - markdown-image-alt-text-auditor: auditMarkdownImageAltText
28
29
  */
29
30
  interface ValidationResult {
30
31
  valid: boolean;
@@ -656,6 +657,35 @@ interface CsvColumnStatsResult {
656
657
  declare function summarizeCsvColumnStats(input: string, options?: CsvColumnStatsOptions): CsvColumnStatsResult | {
657
658
  error: string;
658
659
  };
660
+ type MarkdownImageAltIssueType = 'empty-alt' | 'generic-alt' | 'redundant-prefix' | 'filename-as-alt';
661
+ interface MarkdownImageEntry {
662
+ line: number;
663
+ alt: string;
664
+ src: string;
665
+ }
666
+ interface MarkdownImageAltIssue {
667
+ line: number;
668
+ type: MarkdownImageAltIssueType;
669
+ src: string;
670
+ message: string;
671
+ }
672
+ interface MarkdownImageAltTextAuditResult {
673
+ images: MarkdownImageEntry[];
674
+ issues: MarkdownImageAltIssue[];
675
+ imageCount: number;
676
+ }
677
+ /**
678
+ * Scan a Markdown document's inline images (`![alt](src)`) and flag alt
679
+ * text accessibility smells: missing/empty alt text, a generic placeholder
680
+ * word used alone ("image", "photo"), alt text that's just the image's own
681
+ * filename, and a redundant "image of"/"photo of" prefix that screen
682
+ * readers already announce. Only inline image syntax is scanned;
683
+ * reference-style images (`![alt][ref]`) and raw HTML `<img>` tags are not
684
+ * detected, and fenced code blocks are skipped.
685
+ */
686
+ declare function auditMarkdownImageAltText(markdown: string): MarkdownImageAltTextAuditResult | {
687
+ error: string;
688
+ };
659
689
 
660
690
  type data_CaptionSpeedCue = CaptionSpeedCue;
661
691
  type data_CaptionSpeedResult = CaptionSpeedResult;
@@ -687,6 +717,10 @@ type data_HeadingIssueType = HeadingIssueType;
687
717
  type data_IniSection = IniSection;
688
718
  type data_MarkdownAnchorHeading = MarkdownAnchorHeading;
689
719
  type data_MarkdownAnchorLink = MarkdownAnchorLink;
720
+ type data_MarkdownImageAltIssue = MarkdownImageAltIssue;
721
+ type data_MarkdownImageAltIssueType = MarkdownImageAltIssueType;
722
+ type data_MarkdownImageAltTextAuditResult = MarkdownImageAltTextAuditResult;
723
+ type data_MarkdownImageEntry = MarkdownImageEntry;
690
724
  type data_MarkdownInternalLinkCheckResult = MarkdownInternalLinkCheckResult;
691
725
  type data_MarkdownTableAlignResult = MarkdownTableAlignResult;
692
726
  type data_MarkdownTableColumnAlignment = MarkdownTableColumnAlignment;
@@ -717,6 +751,7 @@ type data_YamlDuplicateKeyError = YamlDuplicateKeyError;
717
751
  type data_YamlDuplicateKeyResult = YamlDuplicateKeyResult;
718
752
  declare const data_alignMarkdownTables: typeof alignMarkdownTables;
719
753
  declare const data_analyzeCaptionSpeed: typeof analyzeCaptionSpeed;
754
+ declare const data_auditMarkdownImageAltText: typeof auditMarkdownImageAltText;
720
755
  declare const data_calculateMarkdownTaskListProgress: typeof calculateMarkdownTaskListProgress;
721
756
  declare const data_checkMarkdownInternalLinks: typeof checkMarkdownInternalLinks;
722
757
  declare const data_convertSubtitles: typeof convertSubtitles;
@@ -774,7 +809,7 @@ declare const data_validateXml: typeof validateXml;
774
809
  declare const data_validateYaml: typeof validateYaml;
775
810
  declare const data_xmlToJson: typeof xmlToJson;
776
811
  declare namespace data {
777
- export { type data_CaptionSpeedCue as CaptionSpeedCue, type data_CaptionSpeedResult as CaptionSpeedResult, type data_ConvertedSubtitles as ConvertedSubtitles, type data_CsvColumnMostCommon as CsvColumnMostCommon, type data_CsvColumnStats as CsvColumnStats, type data_CsvColumnStatsOptions as CsvColumnStatsOptions, type data_CsvColumnStatsResult as CsvColumnStatsResult, type data_CsvColumnType as CsvColumnType, type data_CsvColumnTypeInfo as CsvColumnTypeInfo, type data_CsvColumnTypeOptions as CsvColumnTypeOptions, type data_CsvColumnTypeResult as CsvColumnTypeResult, type data_CsvDuplicateGroup as CsvDuplicateGroup, type data_CsvDuplicateOptions as CsvDuplicateOptions, type data_CsvDuplicateResult as CsvDuplicateResult, type data_CsvParseResult as CsvParseResult, type data_CsvToSqlOptions as CsvToSqlOptions, type data_CsvToSqlResult as CsvToSqlResult, type data_EnvDiffError as EnvDiffError, type data_EnvDiffResult as EnvDiffResult, type data_EnvEntry as EnvEntry, type data_EnvParseResult as EnvParseResult, type data_FrontMatterError as FrontMatterError, type data_FrontMatterResult as FrontMatterResult, type data_HeadingEntry as HeadingEntry, type data_HeadingHierarchyResult as HeadingHierarchyResult, type data_HeadingIssue as HeadingIssue, type data_HeadingIssueType as HeadingIssueType, type data_IniSection as IniSection, type data_MarkdownAnchorHeading as MarkdownAnchorHeading, type data_MarkdownAnchorLink as MarkdownAnchorLink, type data_MarkdownInternalLinkCheckResult as MarkdownInternalLinkCheckResult, type data_MarkdownTableAlignResult as MarkdownTableAlignResult, type data_MarkdownTableColumnAlignment as MarkdownTableColumnAlignment, type data_MarkdownTableInfo as MarkdownTableInfo, type data_MarkdownTaskListItem as MarkdownTaskListItem, type data_MarkdownTaskListProgressResult as MarkdownTaskListProgressResult, type data_MarkdownTaskListSectionSummary as MarkdownTaskListSectionSummary, type data_MarkdownTocEntry as MarkdownTocEntry, type data_MarkdownTocOptions as MarkdownTocOptions, type data_MarkdownTocResult as MarkdownTocResult, type data_NdjsonDedupeResult as NdjsonDedupeResult, type data_NdjsonLineResult as NdjsonLineResult, type data_NdjsonValidateResult as NdjsonValidateResult, type data_ParseOptions as ParseOptions, type data_ParsedIni as ParsedIni, type data_ParsedSubtitles as ParsedSubtitles, type data_SubtitleCue as SubtitleCue, type data_SubtitleFormat as SubtitleFormat, type data_TomlFormatResult as TomlFormatResult, type data_ValidationResult as ValidationResult, type data_XmlFormatResult as XmlFormatResult, type data_XmlToJsonOptions as XmlToJsonOptions, type data_YamlAnchorInfo as YamlAnchorInfo, type data_YamlAnchorResolveError as YamlAnchorResolveError, type data_YamlAnchorResolveResult as YamlAnchorResolveResult, type data_YamlDuplicateKeyEntry as YamlDuplicateKeyEntry, type data_YamlDuplicateKeyError as YamlDuplicateKeyError, type data_YamlDuplicateKeyResult as YamlDuplicateKeyResult, data_alignMarkdownTables as alignMarkdownTables, data_analyzeCaptionSpeed as analyzeCaptionSpeed, data_calculateMarkdownTaskListProgress as calculateMarkdownTaskListProgress, data_checkMarkdownInternalLinks as checkMarkdownInternalLinks, data_convertSubtitles as convertSubtitles, data_csvToJson as csvToJson, data_csvToSqlInsert as csvToSqlInsert, data_dedupeNdjson as dedupeNdjson, data_detectDelimiter as detectDelimiter, data_detectSubtitleFormat as detectSubtitleFormat, data_diffEnvExample as diffEnvExample, data_envToExport as envToExport, data_envToJson as envToJson, data_findCsvDuplicateRows as findCsvDuplicateRows, data_findYamlDuplicateKeys as findYamlDuplicateKeys, data_formatNdjson as formatNdjson, data_formatSubtitleTimestamp as formatSubtitleTimestamp, data_formatToml as formatToml, data_formatXml as formatXml, data_generateMarkdownToc as generateMarkdownToc, data_getSection as getSection, data_getSectionNames as getSectionNames, data_getTomlStats as getTomlStats, data_getXmlStats as getXmlStats, data_getYamlStats as getYamlStats, data_inferCsvColumnTypes as inferCsvColumnTypes, data_iniToJson as iniToJson, data_jsonArrayToNdjson as jsonArrayToNdjson, data_jsonToIni as jsonToIni, data_jsonToToml as jsonToToml, data_jsonToXml as jsonToXml, data_minifyNdjson as minifyNdjson, data_minifyToml as minifyToml, data_minifyXml as minifyXml, data_ndjsonToCsv as ndjsonToCsv, data_ndjsonToJsonArray as ndjsonToJsonArray, data_parseCsv as parseCsv, data_parseEnv as parseEnv, data_parseFrontMatter as parseFrontMatter, data_parseIni as parseIni, data_parseSubtitleTimestamp as parseSubtitleTimestamp, data_parseSubtitles as parseSubtitles, data_parseXmlToObject as parseXmlToObject, data_resolveYamlAnchors as resolveYamlAnchors, data_serializeSubtitles as serializeSubtitles, data_shiftSubtitles as shiftSubtitles, data_stringifyIni as stringifyIni, data_summarizeCsvColumnStats as summarizeCsvColumnStats, data_toCsvString as toCsvString, data_tomlToJson as tomlToJson, data_validateEnvKey as validateEnvKey, data_validateIni as validateIni, data_validateMarkdownHeadingHierarchy as validateMarkdownHeadingHierarchy, data_validateNdjson as validateNdjson, data_validateToml as validateToml, data_validateXml as validateXml, data_validateYaml as validateYaml, data_xmlToJson as xmlToJson };
812
+ export { type data_CaptionSpeedCue as CaptionSpeedCue, type data_CaptionSpeedResult as CaptionSpeedResult, type data_ConvertedSubtitles as ConvertedSubtitles, type data_CsvColumnMostCommon as CsvColumnMostCommon, type data_CsvColumnStats as CsvColumnStats, type data_CsvColumnStatsOptions as CsvColumnStatsOptions, type data_CsvColumnStatsResult as CsvColumnStatsResult, type data_CsvColumnType as CsvColumnType, type data_CsvColumnTypeInfo as CsvColumnTypeInfo, type data_CsvColumnTypeOptions as CsvColumnTypeOptions, type data_CsvColumnTypeResult as CsvColumnTypeResult, type data_CsvDuplicateGroup as CsvDuplicateGroup, type data_CsvDuplicateOptions as CsvDuplicateOptions, type data_CsvDuplicateResult as CsvDuplicateResult, type data_CsvParseResult as CsvParseResult, type data_CsvToSqlOptions as CsvToSqlOptions, type data_CsvToSqlResult as CsvToSqlResult, type data_EnvDiffError as EnvDiffError, type data_EnvDiffResult as EnvDiffResult, type data_EnvEntry as EnvEntry, type data_EnvParseResult as EnvParseResult, type data_FrontMatterError as FrontMatterError, type data_FrontMatterResult as FrontMatterResult, type data_HeadingEntry as HeadingEntry, type data_HeadingHierarchyResult as HeadingHierarchyResult, type data_HeadingIssue as HeadingIssue, type data_HeadingIssueType as HeadingIssueType, type data_IniSection as IniSection, type data_MarkdownAnchorHeading as MarkdownAnchorHeading, type data_MarkdownAnchorLink as MarkdownAnchorLink, type data_MarkdownImageAltIssue as MarkdownImageAltIssue, type data_MarkdownImageAltIssueType as MarkdownImageAltIssueType, type data_MarkdownImageAltTextAuditResult as MarkdownImageAltTextAuditResult, type data_MarkdownImageEntry as MarkdownImageEntry, type data_MarkdownInternalLinkCheckResult as MarkdownInternalLinkCheckResult, type data_MarkdownTableAlignResult as MarkdownTableAlignResult, type data_MarkdownTableColumnAlignment as MarkdownTableColumnAlignment, type data_MarkdownTableInfo as MarkdownTableInfo, type data_MarkdownTaskListItem as MarkdownTaskListItem, type data_MarkdownTaskListProgressResult as MarkdownTaskListProgressResult, type data_MarkdownTaskListSectionSummary as MarkdownTaskListSectionSummary, type data_MarkdownTocEntry as MarkdownTocEntry, type data_MarkdownTocOptions as MarkdownTocOptions, type data_MarkdownTocResult as MarkdownTocResult, type data_NdjsonDedupeResult as NdjsonDedupeResult, type data_NdjsonLineResult as NdjsonLineResult, type data_NdjsonValidateResult as NdjsonValidateResult, type data_ParseOptions as ParseOptions, type data_ParsedIni as ParsedIni, type data_ParsedSubtitles as ParsedSubtitles, type data_SubtitleCue as SubtitleCue, type data_SubtitleFormat as SubtitleFormat, type data_TomlFormatResult as TomlFormatResult, type data_ValidationResult as ValidationResult, type data_XmlFormatResult as XmlFormatResult, type data_XmlToJsonOptions as XmlToJsonOptions, type data_YamlAnchorInfo as YamlAnchorInfo, type data_YamlAnchorResolveError as YamlAnchorResolveError, type data_YamlAnchorResolveResult as YamlAnchorResolveResult, type data_YamlDuplicateKeyEntry as YamlDuplicateKeyEntry, type data_YamlDuplicateKeyError as YamlDuplicateKeyError, type data_YamlDuplicateKeyResult as YamlDuplicateKeyResult, data_alignMarkdownTables as alignMarkdownTables, data_analyzeCaptionSpeed as analyzeCaptionSpeed, data_auditMarkdownImageAltText as auditMarkdownImageAltText, data_calculateMarkdownTaskListProgress as calculateMarkdownTaskListProgress, data_checkMarkdownInternalLinks as checkMarkdownInternalLinks, data_convertSubtitles as convertSubtitles, data_csvToJson as csvToJson, data_csvToSqlInsert as csvToSqlInsert, data_dedupeNdjson as dedupeNdjson, data_detectDelimiter as detectDelimiter, data_detectSubtitleFormat as detectSubtitleFormat, data_diffEnvExample as diffEnvExample, data_envToExport as envToExport, data_envToJson as envToJson, data_findCsvDuplicateRows as findCsvDuplicateRows, data_findYamlDuplicateKeys as findYamlDuplicateKeys, data_formatNdjson as formatNdjson, data_formatSubtitleTimestamp as formatSubtitleTimestamp, data_formatToml as formatToml, data_formatXml as formatXml, data_generateMarkdownToc as generateMarkdownToc, data_getSection as getSection, data_getSectionNames as getSectionNames, data_getTomlStats as getTomlStats, data_getXmlStats as getXmlStats, data_getYamlStats as getYamlStats, data_inferCsvColumnTypes as inferCsvColumnTypes, data_iniToJson as iniToJson, data_jsonArrayToNdjson as jsonArrayToNdjson, data_jsonToIni as jsonToIni, data_jsonToToml as jsonToToml, data_jsonToXml as jsonToXml, data_minifyNdjson as minifyNdjson, data_minifyToml as minifyToml, data_minifyXml as minifyXml, data_ndjsonToCsv as ndjsonToCsv, data_ndjsonToJsonArray as ndjsonToJsonArray, data_parseCsv as parseCsv, data_parseEnv as parseEnv, data_parseFrontMatter as parseFrontMatter, data_parseIni as parseIni, data_parseSubtitleTimestamp as parseSubtitleTimestamp, data_parseSubtitles as parseSubtitles, data_parseXmlToObject as parseXmlToObject, data_resolveYamlAnchors as resolveYamlAnchors, data_serializeSubtitles as serializeSubtitles, data_shiftSubtitles as shiftSubtitles, data_stringifyIni as stringifyIni, data_summarizeCsvColumnStats as summarizeCsvColumnStats, data_toCsvString as toCsvString, data_tomlToJson as tomlToJson, data_validateEnvKey as validateEnvKey, data_validateIni as validateIni, data_validateMarkdownHeadingHierarchy as validateMarkdownHeadingHierarchy, data_validateNdjson as validateNdjson, data_validateToml as validateToml, data_validateXml as validateXml, data_validateYaml as validateYaml, data_xmlToJson as xmlToJson };
778
813
  }
779
814
 
780
- export { type YamlAnchorInfo as $, type MarkdownTableAlignResult as A, type MarkdownTableColumnAlignment as B, type CaptionSpeedCue as C, type MarkdownTableInfo as D, type EnvDiffError as E, type FrontMatterError as F, type MarkdownTaskListItem as G, type HeadingEntry as H, type IniSection as I, type MarkdownTaskListProgressResult as J, type MarkdownTaskListSectionSummary as K, type MarkdownTocEntry as L, type MarkdownAnchorHeading as M, type MarkdownTocOptions as N, type MarkdownTocResult as O, type NdjsonDedupeResult as P, type NdjsonLineResult as Q, type NdjsonValidateResult as R, type ParseOptions as S, type ParsedIni as T, type ParsedSubtitles as U, type SubtitleCue as V, type SubtitleFormat as W, type TomlFormatResult as X, type ValidationResult as Y, type XmlFormatResult as Z, type XmlToJsonOptions as _, type CaptionSpeedResult as a, type YamlAnchorResolveError as a0, type YamlAnchorResolveResult as a1, type YamlDuplicateKeyEntry as a2, type YamlDuplicateKeyError as a3, type YamlDuplicateKeyResult as a4, alignMarkdownTables as a5, analyzeCaptionSpeed as a6, calculateMarkdownTaskListProgress as a7, checkMarkdownInternalLinks as a8, convertSubtitles as a9, minifyNdjson as aA, minifyToml as aB, minifyXml as aC, ndjsonToCsv as aD, ndjsonToJsonArray as aE, parseCsv as aF, parseEnv as aG, parseFrontMatter as aH, parseIni as aI, parseSubtitleTimestamp as aJ, parseSubtitles as aK, parseXmlToObject as aL, resolveYamlAnchors as aM, serializeSubtitles as aN, shiftSubtitles as aO, stringifyIni as aP, summarizeCsvColumnStats as aQ, toCsvString as aR, tomlToJson as aS, validateEnvKey as aT, validateIni as aU, validateMarkdownHeadingHierarchy as aV, validateNdjson as aW, validateToml as aX, validateXml as aY, validateYaml as aZ, xmlToJson as a_, csvToJson as aa, csvToSqlInsert as ab, dedupeNdjson as ac, detectDelimiter as ad, detectSubtitleFormat as ae, diffEnvExample as af, envToExport as ag, envToJson as ah, findCsvDuplicateRows as ai, findYamlDuplicateKeys as aj, formatNdjson as ak, formatSubtitleTimestamp as al, formatToml as am, formatXml as an, generateMarkdownToc as ao, getSection as ap, getSectionNames as aq, getTomlStats as ar, getXmlStats as as, getYamlStats as at, inferCsvColumnTypes as au, iniToJson as av, jsonArrayToNdjson as aw, jsonToIni as ax, jsonToToml as ay, jsonToXml as az, type ConvertedSubtitles as b, type CsvColumnMostCommon as c, data as d, type CsvColumnStats as e, type CsvColumnStatsOptions as f, type CsvColumnStatsResult as g, type CsvColumnType as h, type CsvColumnTypeInfo as i, type CsvColumnTypeOptions as j, type CsvColumnTypeResult as k, type CsvDuplicateGroup as l, type CsvDuplicateOptions as m, type CsvDuplicateResult as n, type CsvParseResult as o, type CsvToSqlOptions as p, type CsvToSqlResult as q, type EnvDiffResult as r, type EnvEntry as s, type EnvParseResult as t, type FrontMatterResult as u, type HeadingHierarchyResult as v, type HeadingIssue as w, type HeadingIssueType as x, type MarkdownAnchorLink as y, type MarkdownInternalLinkCheckResult as z };
815
+ export { type TomlFormatResult as $, type MarkdownImageAltIssueType as A, type MarkdownImageAltTextAuditResult as B, type CaptionSpeedCue as C, type MarkdownImageEntry as D, type EnvDiffError as E, type FrontMatterError as F, type MarkdownInternalLinkCheckResult as G, type HeadingEntry as H, type IniSection as I, type MarkdownTableAlignResult as J, type MarkdownTableColumnAlignment as K, type MarkdownTableInfo as L, type MarkdownAnchorHeading as M, type MarkdownTaskListItem as N, type MarkdownTaskListProgressResult as O, type MarkdownTaskListSectionSummary as P, type MarkdownTocEntry as Q, type MarkdownTocOptions as R, type MarkdownTocResult as S, type NdjsonDedupeResult as T, type NdjsonLineResult as U, type NdjsonValidateResult as V, type ParseOptions as W, type ParsedIni as X, type ParsedSubtitles as Y, type SubtitleCue as Z, type SubtitleFormat as _, type CaptionSpeedResult as a, validateNdjson as a$, type ValidationResult as a0, type XmlFormatResult as a1, type XmlToJsonOptions as a2, type YamlAnchorInfo as a3, type YamlAnchorResolveError as a4, type YamlAnchorResolveResult as a5, type YamlDuplicateKeyEntry as a6, type YamlDuplicateKeyError as a7, type YamlDuplicateKeyResult as a8, alignMarkdownTables as a9, iniToJson as aA, jsonArrayToNdjson as aB, jsonToIni as aC, jsonToToml as aD, jsonToXml as aE, minifyNdjson as aF, minifyToml as aG, minifyXml as aH, ndjsonToCsv as aI, ndjsonToJsonArray as aJ, parseCsv as aK, parseEnv as aL, parseFrontMatter as aM, parseIni as aN, parseSubtitleTimestamp as aO, parseSubtitles as aP, parseXmlToObject as aQ, resolveYamlAnchors as aR, serializeSubtitles as aS, shiftSubtitles as aT, stringifyIni as aU, summarizeCsvColumnStats as aV, toCsvString as aW, tomlToJson as aX, validateEnvKey as aY, validateIni as aZ, validateMarkdownHeadingHierarchy as a_, analyzeCaptionSpeed as aa, auditMarkdownImageAltText as ab, calculateMarkdownTaskListProgress as ac, checkMarkdownInternalLinks as ad, convertSubtitles as ae, csvToJson as af, csvToSqlInsert as ag, dedupeNdjson as ah, detectDelimiter as ai, detectSubtitleFormat as aj, diffEnvExample as ak, envToExport as al, envToJson as am, findCsvDuplicateRows as an, findYamlDuplicateKeys as ao, formatNdjson as ap, formatSubtitleTimestamp as aq, formatToml as ar, formatXml as as, generateMarkdownToc as at, getSection as au, getSectionNames as av, getTomlStats as aw, getXmlStats as ax, getYamlStats as ay, inferCsvColumnTypes as az, type ConvertedSubtitles as b, validateToml as b0, validateXml as b1, validateYaml as b2, xmlToJson as b3, type CsvColumnMostCommon as c, data as d, type CsvColumnStats as e, type CsvColumnStatsOptions as f, type CsvColumnStatsResult as g, type CsvColumnType as h, type CsvColumnTypeInfo as i, type CsvColumnTypeOptions as j, type CsvColumnTypeResult as k, type CsvDuplicateGroup as l, type CsvDuplicateOptions as m, type CsvDuplicateResult as n, type CsvParseResult as o, type CsvToSqlOptions as p, type CsvToSqlResult as q, type EnvDiffResult as r, type EnvEntry as s, type EnvParseResult as t, type FrontMatterResult as u, type HeadingHierarchyResult as v, type HeadingIssue as w, type HeadingIssueType as x, type MarkdownAnchorLink as y, type MarkdownImageAltIssue as z };
@@ -25,6 +25,7 @@
25
25
  * - markdown-internal-link-checker: checkMarkdownInternalLinks
26
26
  * - yaml-duplicate-key-detector: findYamlDuplicateKeys
27
27
  * - csv-column-stats-summarizer: summarizeCsvColumnStats
28
+ * - markdown-image-alt-text-auditor: auditMarkdownImageAltText
28
29
  */
29
30
  interface ValidationResult {
30
31
  valid: boolean;
@@ -656,6 +657,35 @@ interface CsvColumnStatsResult {
656
657
  declare function summarizeCsvColumnStats(input: string, options?: CsvColumnStatsOptions): CsvColumnStatsResult | {
657
658
  error: string;
658
659
  };
660
+ type MarkdownImageAltIssueType = 'empty-alt' | 'generic-alt' | 'redundant-prefix' | 'filename-as-alt';
661
+ interface MarkdownImageEntry {
662
+ line: number;
663
+ alt: string;
664
+ src: string;
665
+ }
666
+ interface MarkdownImageAltIssue {
667
+ line: number;
668
+ type: MarkdownImageAltIssueType;
669
+ src: string;
670
+ message: string;
671
+ }
672
+ interface MarkdownImageAltTextAuditResult {
673
+ images: MarkdownImageEntry[];
674
+ issues: MarkdownImageAltIssue[];
675
+ imageCount: number;
676
+ }
677
+ /**
678
+ * Scan a Markdown document's inline images (`![alt](src)`) and flag alt
679
+ * text accessibility smells: missing/empty alt text, a generic placeholder
680
+ * word used alone ("image", "photo"), alt text that's just the image's own
681
+ * filename, and a redundant "image of"/"photo of" prefix that screen
682
+ * readers already announce. Only inline image syntax is scanned;
683
+ * reference-style images (`![alt][ref]`) and raw HTML `<img>` tags are not
684
+ * detected, and fenced code blocks are skipped.
685
+ */
686
+ declare function auditMarkdownImageAltText(markdown: string): MarkdownImageAltTextAuditResult | {
687
+ error: string;
688
+ };
659
689
 
660
690
  type data_CaptionSpeedCue = CaptionSpeedCue;
661
691
  type data_CaptionSpeedResult = CaptionSpeedResult;
@@ -687,6 +717,10 @@ type data_HeadingIssueType = HeadingIssueType;
687
717
  type data_IniSection = IniSection;
688
718
  type data_MarkdownAnchorHeading = MarkdownAnchorHeading;
689
719
  type data_MarkdownAnchorLink = MarkdownAnchorLink;
720
+ type data_MarkdownImageAltIssue = MarkdownImageAltIssue;
721
+ type data_MarkdownImageAltIssueType = MarkdownImageAltIssueType;
722
+ type data_MarkdownImageAltTextAuditResult = MarkdownImageAltTextAuditResult;
723
+ type data_MarkdownImageEntry = MarkdownImageEntry;
690
724
  type data_MarkdownInternalLinkCheckResult = MarkdownInternalLinkCheckResult;
691
725
  type data_MarkdownTableAlignResult = MarkdownTableAlignResult;
692
726
  type data_MarkdownTableColumnAlignment = MarkdownTableColumnAlignment;
@@ -717,6 +751,7 @@ type data_YamlDuplicateKeyError = YamlDuplicateKeyError;
717
751
  type data_YamlDuplicateKeyResult = YamlDuplicateKeyResult;
718
752
  declare const data_alignMarkdownTables: typeof alignMarkdownTables;
719
753
  declare const data_analyzeCaptionSpeed: typeof analyzeCaptionSpeed;
754
+ declare const data_auditMarkdownImageAltText: typeof auditMarkdownImageAltText;
720
755
  declare const data_calculateMarkdownTaskListProgress: typeof calculateMarkdownTaskListProgress;
721
756
  declare const data_checkMarkdownInternalLinks: typeof checkMarkdownInternalLinks;
722
757
  declare const data_convertSubtitles: typeof convertSubtitles;
@@ -774,7 +809,7 @@ declare const data_validateXml: typeof validateXml;
774
809
  declare const data_validateYaml: typeof validateYaml;
775
810
  declare const data_xmlToJson: typeof xmlToJson;
776
811
  declare namespace data {
777
- export { type data_CaptionSpeedCue as CaptionSpeedCue, type data_CaptionSpeedResult as CaptionSpeedResult, type data_ConvertedSubtitles as ConvertedSubtitles, type data_CsvColumnMostCommon as CsvColumnMostCommon, type data_CsvColumnStats as CsvColumnStats, type data_CsvColumnStatsOptions as CsvColumnStatsOptions, type data_CsvColumnStatsResult as CsvColumnStatsResult, type data_CsvColumnType as CsvColumnType, type data_CsvColumnTypeInfo as CsvColumnTypeInfo, type data_CsvColumnTypeOptions as CsvColumnTypeOptions, type data_CsvColumnTypeResult as CsvColumnTypeResult, type data_CsvDuplicateGroup as CsvDuplicateGroup, type data_CsvDuplicateOptions as CsvDuplicateOptions, type data_CsvDuplicateResult as CsvDuplicateResult, type data_CsvParseResult as CsvParseResult, type data_CsvToSqlOptions as CsvToSqlOptions, type data_CsvToSqlResult as CsvToSqlResult, type data_EnvDiffError as EnvDiffError, type data_EnvDiffResult as EnvDiffResult, type data_EnvEntry as EnvEntry, type data_EnvParseResult as EnvParseResult, type data_FrontMatterError as FrontMatterError, type data_FrontMatterResult as FrontMatterResult, type data_HeadingEntry as HeadingEntry, type data_HeadingHierarchyResult as HeadingHierarchyResult, type data_HeadingIssue as HeadingIssue, type data_HeadingIssueType as HeadingIssueType, type data_IniSection as IniSection, type data_MarkdownAnchorHeading as MarkdownAnchorHeading, type data_MarkdownAnchorLink as MarkdownAnchorLink, type data_MarkdownInternalLinkCheckResult as MarkdownInternalLinkCheckResult, type data_MarkdownTableAlignResult as MarkdownTableAlignResult, type data_MarkdownTableColumnAlignment as MarkdownTableColumnAlignment, type data_MarkdownTableInfo as MarkdownTableInfo, type data_MarkdownTaskListItem as MarkdownTaskListItem, type data_MarkdownTaskListProgressResult as MarkdownTaskListProgressResult, type data_MarkdownTaskListSectionSummary as MarkdownTaskListSectionSummary, type data_MarkdownTocEntry as MarkdownTocEntry, type data_MarkdownTocOptions as MarkdownTocOptions, type data_MarkdownTocResult as MarkdownTocResult, type data_NdjsonDedupeResult as NdjsonDedupeResult, type data_NdjsonLineResult as NdjsonLineResult, type data_NdjsonValidateResult as NdjsonValidateResult, type data_ParseOptions as ParseOptions, type data_ParsedIni as ParsedIni, type data_ParsedSubtitles as ParsedSubtitles, type data_SubtitleCue as SubtitleCue, type data_SubtitleFormat as SubtitleFormat, type data_TomlFormatResult as TomlFormatResult, type data_ValidationResult as ValidationResult, type data_XmlFormatResult as XmlFormatResult, type data_XmlToJsonOptions as XmlToJsonOptions, type data_YamlAnchorInfo as YamlAnchorInfo, type data_YamlAnchorResolveError as YamlAnchorResolveError, type data_YamlAnchorResolveResult as YamlAnchorResolveResult, type data_YamlDuplicateKeyEntry as YamlDuplicateKeyEntry, type data_YamlDuplicateKeyError as YamlDuplicateKeyError, type data_YamlDuplicateKeyResult as YamlDuplicateKeyResult, data_alignMarkdownTables as alignMarkdownTables, data_analyzeCaptionSpeed as analyzeCaptionSpeed, data_calculateMarkdownTaskListProgress as calculateMarkdownTaskListProgress, data_checkMarkdownInternalLinks as checkMarkdownInternalLinks, data_convertSubtitles as convertSubtitles, data_csvToJson as csvToJson, data_csvToSqlInsert as csvToSqlInsert, data_dedupeNdjson as dedupeNdjson, data_detectDelimiter as detectDelimiter, data_detectSubtitleFormat as detectSubtitleFormat, data_diffEnvExample as diffEnvExample, data_envToExport as envToExport, data_envToJson as envToJson, data_findCsvDuplicateRows as findCsvDuplicateRows, data_findYamlDuplicateKeys as findYamlDuplicateKeys, data_formatNdjson as formatNdjson, data_formatSubtitleTimestamp as formatSubtitleTimestamp, data_formatToml as formatToml, data_formatXml as formatXml, data_generateMarkdownToc as generateMarkdownToc, data_getSection as getSection, data_getSectionNames as getSectionNames, data_getTomlStats as getTomlStats, data_getXmlStats as getXmlStats, data_getYamlStats as getYamlStats, data_inferCsvColumnTypes as inferCsvColumnTypes, data_iniToJson as iniToJson, data_jsonArrayToNdjson as jsonArrayToNdjson, data_jsonToIni as jsonToIni, data_jsonToToml as jsonToToml, data_jsonToXml as jsonToXml, data_minifyNdjson as minifyNdjson, data_minifyToml as minifyToml, data_minifyXml as minifyXml, data_ndjsonToCsv as ndjsonToCsv, data_ndjsonToJsonArray as ndjsonToJsonArray, data_parseCsv as parseCsv, data_parseEnv as parseEnv, data_parseFrontMatter as parseFrontMatter, data_parseIni as parseIni, data_parseSubtitleTimestamp as parseSubtitleTimestamp, data_parseSubtitles as parseSubtitles, data_parseXmlToObject as parseXmlToObject, data_resolveYamlAnchors as resolveYamlAnchors, data_serializeSubtitles as serializeSubtitles, data_shiftSubtitles as shiftSubtitles, data_stringifyIni as stringifyIni, data_summarizeCsvColumnStats as summarizeCsvColumnStats, data_toCsvString as toCsvString, data_tomlToJson as tomlToJson, data_validateEnvKey as validateEnvKey, data_validateIni as validateIni, data_validateMarkdownHeadingHierarchy as validateMarkdownHeadingHierarchy, data_validateNdjson as validateNdjson, data_validateToml as validateToml, data_validateXml as validateXml, data_validateYaml as validateYaml, data_xmlToJson as xmlToJson };
812
+ export { type data_CaptionSpeedCue as CaptionSpeedCue, type data_CaptionSpeedResult as CaptionSpeedResult, type data_ConvertedSubtitles as ConvertedSubtitles, type data_CsvColumnMostCommon as CsvColumnMostCommon, type data_CsvColumnStats as CsvColumnStats, type data_CsvColumnStatsOptions as CsvColumnStatsOptions, type data_CsvColumnStatsResult as CsvColumnStatsResult, type data_CsvColumnType as CsvColumnType, type data_CsvColumnTypeInfo as CsvColumnTypeInfo, type data_CsvColumnTypeOptions as CsvColumnTypeOptions, type data_CsvColumnTypeResult as CsvColumnTypeResult, type data_CsvDuplicateGroup as CsvDuplicateGroup, type data_CsvDuplicateOptions as CsvDuplicateOptions, type data_CsvDuplicateResult as CsvDuplicateResult, type data_CsvParseResult as CsvParseResult, type data_CsvToSqlOptions as CsvToSqlOptions, type data_CsvToSqlResult as CsvToSqlResult, type data_EnvDiffError as EnvDiffError, type data_EnvDiffResult as EnvDiffResult, type data_EnvEntry as EnvEntry, type data_EnvParseResult as EnvParseResult, type data_FrontMatterError as FrontMatterError, type data_FrontMatterResult as FrontMatterResult, type data_HeadingEntry as HeadingEntry, type data_HeadingHierarchyResult as HeadingHierarchyResult, type data_HeadingIssue as HeadingIssue, type data_HeadingIssueType as HeadingIssueType, type data_IniSection as IniSection, type data_MarkdownAnchorHeading as MarkdownAnchorHeading, type data_MarkdownAnchorLink as MarkdownAnchorLink, type data_MarkdownImageAltIssue as MarkdownImageAltIssue, type data_MarkdownImageAltIssueType as MarkdownImageAltIssueType, type data_MarkdownImageAltTextAuditResult as MarkdownImageAltTextAuditResult, type data_MarkdownImageEntry as MarkdownImageEntry, type data_MarkdownInternalLinkCheckResult as MarkdownInternalLinkCheckResult, type data_MarkdownTableAlignResult as MarkdownTableAlignResult, type data_MarkdownTableColumnAlignment as MarkdownTableColumnAlignment, type data_MarkdownTableInfo as MarkdownTableInfo, type data_MarkdownTaskListItem as MarkdownTaskListItem, type data_MarkdownTaskListProgressResult as MarkdownTaskListProgressResult, type data_MarkdownTaskListSectionSummary as MarkdownTaskListSectionSummary, type data_MarkdownTocEntry as MarkdownTocEntry, type data_MarkdownTocOptions as MarkdownTocOptions, type data_MarkdownTocResult as MarkdownTocResult, type data_NdjsonDedupeResult as NdjsonDedupeResult, type data_NdjsonLineResult as NdjsonLineResult, type data_NdjsonValidateResult as NdjsonValidateResult, type data_ParseOptions as ParseOptions, type data_ParsedIni as ParsedIni, type data_ParsedSubtitles as ParsedSubtitles, type data_SubtitleCue as SubtitleCue, type data_SubtitleFormat as SubtitleFormat, type data_TomlFormatResult as TomlFormatResult, type data_ValidationResult as ValidationResult, type data_XmlFormatResult as XmlFormatResult, type data_XmlToJsonOptions as XmlToJsonOptions, type data_YamlAnchorInfo as YamlAnchorInfo, type data_YamlAnchorResolveError as YamlAnchorResolveError, type data_YamlAnchorResolveResult as YamlAnchorResolveResult, type data_YamlDuplicateKeyEntry as YamlDuplicateKeyEntry, type data_YamlDuplicateKeyError as YamlDuplicateKeyError, type data_YamlDuplicateKeyResult as YamlDuplicateKeyResult, data_alignMarkdownTables as alignMarkdownTables, data_analyzeCaptionSpeed as analyzeCaptionSpeed, data_auditMarkdownImageAltText as auditMarkdownImageAltText, data_calculateMarkdownTaskListProgress as calculateMarkdownTaskListProgress, data_checkMarkdownInternalLinks as checkMarkdownInternalLinks, data_convertSubtitles as convertSubtitles, data_csvToJson as csvToJson, data_csvToSqlInsert as csvToSqlInsert, data_dedupeNdjson as dedupeNdjson, data_detectDelimiter as detectDelimiter, data_detectSubtitleFormat as detectSubtitleFormat, data_diffEnvExample as diffEnvExample, data_envToExport as envToExport, data_envToJson as envToJson, data_findCsvDuplicateRows as findCsvDuplicateRows, data_findYamlDuplicateKeys as findYamlDuplicateKeys, data_formatNdjson as formatNdjson, data_formatSubtitleTimestamp as formatSubtitleTimestamp, data_formatToml as formatToml, data_formatXml as formatXml, data_generateMarkdownToc as generateMarkdownToc, data_getSection as getSection, data_getSectionNames as getSectionNames, data_getTomlStats as getTomlStats, data_getXmlStats as getXmlStats, data_getYamlStats as getYamlStats, data_inferCsvColumnTypes as inferCsvColumnTypes, data_iniToJson as iniToJson, data_jsonArrayToNdjson as jsonArrayToNdjson, data_jsonToIni as jsonToIni, data_jsonToToml as jsonToToml, data_jsonToXml as jsonToXml, data_minifyNdjson as minifyNdjson, data_minifyToml as minifyToml, data_minifyXml as minifyXml, data_ndjsonToCsv as ndjsonToCsv, data_ndjsonToJsonArray as ndjsonToJsonArray, data_parseCsv as parseCsv, data_parseEnv as parseEnv, data_parseFrontMatter as parseFrontMatter, data_parseIni as parseIni, data_parseSubtitleTimestamp as parseSubtitleTimestamp, data_parseSubtitles as parseSubtitles, data_parseXmlToObject as parseXmlToObject, data_resolveYamlAnchors as resolveYamlAnchors, data_serializeSubtitles as serializeSubtitles, data_shiftSubtitles as shiftSubtitles, data_stringifyIni as stringifyIni, data_summarizeCsvColumnStats as summarizeCsvColumnStats, data_toCsvString as toCsvString, data_tomlToJson as tomlToJson, data_validateEnvKey as validateEnvKey, data_validateIni as validateIni, data_validateMarkdownHeadingHierarchy as validateMarkdownHeadingHierarchy, data_validateNdjson as validateNdjson, data_validateToml as validateToml, data_validateXml as validateXml, data_validateYaml as validateYaml, data_xmlToJson as xmlToJson };
778
813
  }
779
814
 
780
- export { type YamlAnchorInfo as $, type MarkdownTableAlignResult as A, type MarkdownTableColumnAlignment as B, type CaptionSpeedCue as C, type MarkdownTableInfo as D, type EnvDiffError as E, type FrontMatterError as F, type MarkdownTaskListItem as G, type HeadingEntry as H, type IniSection as I, type MarkdownTaskListProgressResult as J, type MarkdownTaskListSectionSummary as K, type MarkdownTocEntry as L, type MarkdownAnchorHeading as M, type MarkdownTocOptions as N, type MarkdownTocResult as O, type NdjsonDedupeResult as P, type NdjsonLineResult as Q, type NdjsonValidateResult as R, type ParseOptions as S, type ParsedIni as T, type ParsedSubtitles as U, type SubtitleCue as V, type SubtitleFormat as W, type TomlFormatResult as X, type ValidationResult as Y, type XmlFormatResult as Z, type XmlToJsonOptions as _, type CaptionSpeedResult as a, type YamlAnchorResolveError as a0, type YamlAnchorResolveResult as a1, type YamlDuplicateKeyEntry as a2, type YamlDuplicateKeyError as a3, type YamlDuplicateKeyResult as a4, alignMarkdownTables as a5, analyzeCaptionSpeed as a6, calculateMarkdownTaskListProgress as a7, checkMarkdownInternalLinks as a8, convertSubtitles as a9, minifyNdjson as aA, minifyToml as aB, minifyXml as aC, ndjsonToCsv as aD, ndjsonToJsonArray as aE, parseCsv as aF, parseEnv as aG, parseFrontMatter as aH, parseIni as aI, parseSubtitleTimestamp as aJ, parseSubtitles as aK, parseXmlToObject as aL, resolveYamlAnchors as aM, serializeSubtitles as aN, shiftSubtitles as aO, stringifyIni as aP, summarizeCsvColumnStats as aQ, toCsvString as aR, tomlToJson as aS, validateEnvKey as aT, validateIni as aU, validateMarkdownHeadingHierarchy as aV, validateNdjson as aW, validateToml as aX, validateXml as aY, validateYaml as aZ, xmlToJson as a_, csvToJson as aa, csvToSqlInsert as ab, dedupeNdjson as ac, detectDelimiter as ad, detectSubtitleFormat as ae, diffEnvExample as af, envToExport as ag, envToJson as ah, findCsvDuplicateRows as ai, findYamlDuplicateKeys as aj, formatNdjson as ak, formatSubtitleTimestamp as al, formatToml as am, formatXml as an, generateMarkdownToc as ao, getSection as ap, getSectionNames as aq, getTomlStats as ar, getXmlStats as as, getYamlStats as at, inferCsvColumnTypes as au, iniToJson as av, jsonArrayToNdjson as aw, jsonToIni as ax, jsonToToml as ay, jsonToXml as az, type ConvertedSubtitles as b, type CsvColumnMostCommon as c, data as d, type CsvColumnStats as e, type CsvColumnStatsOptions as f, type CsvColumnStatsResult as g, type CsvColumnType as h, type CsvColumnTypeInfo as i, type CsvColumnTypeOptions as j, type CsvColumnTypeResult as k, type CsvDuplicateGroup as l, type CsvDuplicateOptions as m, type CsvDuplicateResult as n, type CsvParseResult as o, type CsvToSqlOptions as p, type CsvToSqlResult as q, type EnvDiffResult as r, type EnvEntry as s, type EnvParseResult as t, type FrontMatterResult as u, type HeadingHierarchyResult as v, type HeadingIssue as w, type HeadingIssueType as x, type MarkdownAnchorLink as y, type MarkdownInternalLinkCheckResult as z };
815
+ export { type TomlFormatResult as $, type MarkdownImageAltIssueType as A, type MarkdownImageAltTextAuditResult as B, type CaptionSpeedCue as C, type MarkdownImageEntry as D, type EnvDiffError as E, type FrontMatterError as F, type MarkdownInternalLinkCheckResult as G, type HeadingEntry as H, type IniSection as I, type MarkdownTableAlignResult as J, type MarkdownTableColumnAlignment as K, type MarkdownTableInfo as L, type MarkdownAnchorHeading as M, type MarkdownTaskListItem as N, type MarkdownTaskListProgressResult as O, type MarkdownTaskListSectionSummary as P, type MarkdownTocEntry as Q, type MarkdownTocOptions as R, type MarkdownTocResult as S, type NdjsonDedupeResult as T, type NdjsonLineResult as U, type NdjsonValidateResult as V, type ParseOptions as W, type ParsedIni as X, type ParsedSubtitles as Y, type SubtitleCue as Z, type SubtitleFormat as _, type CaptionSpeedResult as a, validateNdjson as a$, type ValidationResult as a0, type XmlFormatResult as a1, type XmlToJsonOptions as a2, type YamlAnchorInfo as a3, type YamlAnchorResolveError as a4, type YamlAnchorResolveResult as a5, type YamlDuplicateKeyEntry as a6, type YamlDuplicateKeyError as a7, type YamlDuplicateKeyResult as a8, alignMarkdownTables as a9, iniToJson as aA, jsonArrayToNdjson as aB, jsonToIni as aC, jsonToToml as aD, jsonToXml as aE, minifyNdjson as aF, minifyToml as aG, minifyXml as aH, ndjsonToCsv as aI, ndjsonToJsonArray as aJ, parseCsv as aK, parseEnv as aL, parseFrontMatter as aM, parseIni as aN, parseSubtitleTimestamp as aO, parseSubtitles as aP, parseXmlToObject as aQ, resolveYamlAnchors as aR, serializeSubtitles as aS, shiftSubtitles as aT, stringifyIni as aU, summarizeCsvColumnStats as aV, toCsvString as aW, tomlToJson as aX, validateEnvKey as aY, validateIni as aZ, validateMarkdownHeadingHierarchy as a_, analyzeCaptionSpeed as aa, auditMarkdownImageAltText as ab, calculateMarkdownTaskListProgress as ac, checkMarkdownInternalLinks as ad, convertSubtitles as ae, csvToJson as af, csvToSqlInsert as ag, dedupeNdjson as ah, detectDelimiter as ai, detectSubtitleFormat as aj, diffEnvExample as ak, envToExport as al, envToJson as am, findCsvDuplicateRows as an, findYamlDuplicateKeys as ao, formatNdjson as ap, formatSubtitleTimestamp as aq, formatToml as ar, formatXml as as, generateMarkdownToc as at, getSection as au, getSectionNames as av, getTomlStats as aw, getXmlStats as ax, getYamlStats as ay, inferCsvColumnTypes as az, type ConvertedSubtitles as b, validateToml as b0, validateXml as b1, validateYaml as b2, xmlToJson as b3, type CsvColumnMostCommon as c, data as d, type CsvColumnStats as e, type CsvColumnStatsOptions as f, type CsvColumnStatsResult as g, type CsvColumnType as h, type CsvColumnTypeInfo as i, type CsvColumnTypeOptions as j, type CsvColumnTypeResult as k, type CsvDuplicateGroup as l, type CsvDuplicateOptions as m, type CsvDuplicateResult as n, type CsvParseResult as o, type CsvToSqlOptions as p, type CsvToSqlResult as q, type EnvDiffResult as r, type EnvEntry as s, type EnvParseResult as t, type FrontMatterResult as u, type HeadingHierarchyResult as v, type HeadingIssue as w, type HeadingIssueType as x, type MarkdownAnchorLink as y, type MarkdownImageAltIssue as z };