@utilix-tech/sdk 0.94.0 → 0.96.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 +8 -0
- package/README.md +23 -3
- package/dist/{chunk-XAPHAUPI.js → chunk-4EFSPTRH.js} +106 -1
- package/dist/{chunk-PEMPPDMM.js → chunk-NTHUTIZH.js} +86 -1
- package/dist/{chunk-ZWFZRDQ4.js → chunk-YSS4VVZU.js} +112 -1
- package/dist/{data-3qMdFIF5.d.ts → data-Dg5dEwWl.d.cts} +37 -2
- package/dist/{data-3qMdFIF5.d.cts → data-Dg5dEwWl.d.ts} +37 -2
- package/dist/index.cjs +301 -0
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/{media-DF8BS-iA.d.cts → media-C8Y67lUI.d.cts} +62 -2
- package/dist/{media-DF8BS-iA.d.ts → media-C8Y67lUI.d.ts} +62 -2
- package/dist/tools/data.cjs +85 -0
- package/dist/tools/data.d.cts +1 -1
- package/dist/tools/data.d.ts +1 -1
- package/dist/tools/data.js +1 -1
- package/dist/tools/media.cjs +111 -0
- package/dist/tools/media.d.cts +1 -1
- package/dist/tools/media.d.ts +1 -1
- package/dist/tools/media.js +1 -1
- package/dist/tools/units.cjs +105 -0
- package/dist/tools/units.d.cts +1 -1
- package/dist/tools/units.d.ts +1 -1
- package/dist/tools/units.js +1 -1
- package/dist/{units-DnWrOTSV.d.ts → units-CG7wn_qJ.d.cts} +82 -2
- package/dist/{units-DnWrOTSV.d.cts → units-CG7wn_qJ.d.ts} +82 -2
- package/package.json +2 -2
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.96.0
|
|
6
|
+
- 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.
|
|
7
|
+
- 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.
|
|
8
|
+
|
|
9
|
+
## 0.95.0
|
|
10
|
+
- 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).
|
|
11
|
+
- 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.
|
|
12
|
+
|
|
5
13
|
## 0.94.0
|
|
6
14
|
- Add `buildAltSvcHeader`/`parseAltSvcHeader` (alt-svc-header-builder): build an `Alt-Svc` response header (RFC 7838) from one or more alternative services with a plain-English note per protocol-id, flagging outdated HTTP/3 draft protocol-ids, or parse an existing header back into its alternatives, including the special `clear` value.
|
|
7
15
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @utilix-tech/sdk
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**744 developer utility functions for Node.js: runs locally, no API key required.**
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@utilix-tech/sdk)
|
|
6
6
|
[](https://www.npmjs.com/package/@utilix-tech/sdk)
|
|
@@ -772,6 +772,26 @@ summarizeGitDiffStat(" src/foo.ts | 12 +++++-------\n 1 file changed, 5 insertio
|
|
|
772
772
|
import { buildAltSvcHeader, parseAltSvcHeader } from "@utilix-tech/sdk/network";
|
|
773
773
|
buildAltSvcHeader([{ protocolId: "h3", port: 443, maxAge: 86400 }]);
|
|
774
774
|
// { header: 'Alt-Svc: h3=":443"; ma=86400', headerValue: 'h3=":443"; ma=86400', entries: [{ protocolId: "h3", authority: ":443", maxAge: 86400, persist: false, note: "..." }], cleared: false, warnings: [] }
|
|
775
|
+
|
|
776
|
+
// Walk a PNG's chunk stream directly from its bytes: type, offset, size, CRC validity
|
|
777
|
+
import { readPngChunks } from "@utilix-tech/sdk/media";
|
|
778
|
+
readPngChunks(pngBytes);
|
|
779
|
+
// { valid: true, fileSize: 1024, chunkCount: 5, chunks: [{ type: "IHDR", offset: 8, dataLength: 13, crcValid: true, critical: true }, ...], header: { width: 64, height: 64, bitDepth: 8, colorType: "rgba", hasAlpha: true, interlace: false }, textChunks: [], physicalDimensions: null, gamma: null, lastModified: null, isAnimated: false }
|
|
780
|
+
|
|
781
|
+
// Estimate an audio file's size before recording/exporting it
|
|
782
|
+
import { estimateAudioFileSize } from "@utilix-tech/sdk/units";
|
|
783
|
+
estimateAudioFileSize({ mode: "pcm", durationSeconds: 60, sampleRateHz: 44100, bitDepth: 16, channels: 2 });
|
|
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("\n");
|
|
794
|
+
// { images: [...], issues: [{ line: 1, type: "empty-alt", ... }, { line: 2, type: "redundant-prefix", ... }], imageCount: 2 }
|
|
775
795
|
```
|
|
776
796
|
|
|
777
797
|
---
|
|
@@ -1090,7 +1110,7 @@ readMidiInfo(new Uint8Array(midiBytes));
|
|
|
1090
1110
|
| `@utilix-tech/sdk/data` | CSV, YAML, TOML, XML, INI, NDJSON parse and convert, NDJSON record deduplicator, SRT/WebVTT subtitles, Markdown front matter parser, YAML anchor/alias resolver, CSV column type inferencer, Markdown table column aligner, Markdown heading hierarchy validator, Markdown internal link checker |
|
|
1091
1111
|
| `@utilix-tech/sdk/generators` | UUID v4/v7, ULID, passwords, strength check, entropy estimator, fake data, CSP nonce generator |
|
|
1092
1112
|
| `@utilix-tech/sdk/time` | Date diff, timezone convert, cron parse, relative time |
|
|
1093
|
-
| `@utilix-tech/sdk/units` | Bytes, CSS px/rem, number bases, currency format, credit card/IBAN/barcode/ISBN/VIN/ISIN validation, loan calculator, EMI calculator, compound/simple interest calculators, VAT/sales tax calculator, tip/bill split calculator, break-even point calculator, Rule of 72 calculator, savings goal calculator, ROI calculator, cash denomination/till calculator, payback period calculator, CD maturity calculator, debt-to-income ratio calculator, freelancer hourly rate calculator, debt snowball/avalanche payoff planner, tax-equivalent yield calculator, mortgage discount points break-even calculator, loan prepayment penalty calculator, data transfer time / required bandwidth estimator, real rate of return (Fisher equation) calculator, sales commission calculator (flat or tiered), annuity payout calculator, semver range intersection checker |
|
|
1113
|
+
| `@utilix-tech/sdk/units` | Bytes, CSS px/rem, number bases, currency format, credit card/IBAN/barcode/ISBN/VIN/ISIN validation, loan calculator, EMI calculator, compound/simple interest calculators, VAT/sales tax calculator, tip/bill split calculator, break-even point calculator, Rule of 72 calculator, savings goal calculator, ROI calculator, cash denomination/till calculator, payback period calculator, CD maturity calculator, debt-to-income ratio calculator, freelancer hourly rate calculator, debt snowball/avalanche payoff planner, tax-equivalent yield calculator, mortgage discount points break-even calculator, loan prepayment penalty calculator, data transfer time / required bandwidth estimator, real rate of return (Fisher equation) calculator, sales commission calculator (flat or tiered), annuity payout calculator, semver range intersection checker, audio file size estimator |
|
|
1094
1114
|
| `@utilix-tech/sdk/network` | HTTP status codes, IP validation, country flags, geolocation URLs, HAR file parsing, User-Agent parsing, IPv6 address compress/expand, Permissions-Policy header builder, Client Hints header builder/parser, Content-Disposition header builder/parser, X-Content-Type-Options header builder/risk assessor, sitemap.xml validator, sitemap index splitter, robots.txt validator, robots.txt generator, Prefer header builder/parser (RFC 7240), Retry-After header builder/parser (RFC 9110), Priority header builder/parser (RFC 9218), WebSocket close code reference/lookup, Strict-Transport-Security (HSTS) header builder/parser, X-Robots-Tag header builder/parser, WebSocket frame opcode reference/lookup, robots meta tag builder/parser, Cookie header byte-size budget calculator, Alt-Svc header builder/parser (RFC 7838) |
|
|
1095
1115
|
| `@utilix-tech/sdk/api` | cURL build/parse, JWT decode/sign, JWKS parse, CORS headers, CSP header, TOTP/HOTP code generator, webhook HMAC signature verifier |
|
|
1096
1116
|
| `@utilix-tech/sdk/code` | SQL format/minify, HTML format/minify, regex tester, GraphQL format, MIME type lookup, GitHub URL parsing, regex ReDoS detector, Conventional Commits linter, package.json exports field validator, package.json dependency range auditor, regex capture group/backreference visualizer, SVG sprite symbol extractor, ARIA role & attribute validator, database connection string parser, Markdown code fence language tag validator, SQL query parameter placeholder counter, Markdown link reference extractor, regex character class builder, Dockerfile linter, Mermaid diagram syntax validator |
|
|
@@ -1098,7 +1118,7 @@ readMidiInfo(new Uint8Array(midiBytes));
|
|
|
1098
1118
|
| `@utilix-tech/sdk/css` | CSS gradient, box-shadow, border-radius, keyframe animation generators |
|
|
1099
1119
|
| `@utilix-tech/sdk/misc` | SVG optimize/sanitize, file size format, Unicode inspector |
|
|
1100
1120
|
| `@utilix-tech/sdk/ai_agent` | Token estimate/trim, chunk text, extract URLs/JSON/keywords, sanitize HTML, flatten/merge JSON, dedupe lines, validate schema, PII/secret/injection detect, vector similarity, few-shot prompt formatter, tool-definition schema linter, retry/backoff schedule calculator, prompt template variable extractor |
|
|
1101
|
-
| `@utilix-tech/sdk/media` | Image format & dimension reading from raw bytes (PNG, JPEG, GIF, WebP, BMP); PDF metadata reading; PDF page dimension/orientation listing; WAV audio info; ID3 tags; ICO favicon inspection; FLAC metadata reading; MP4/WebM video info; GIF frame/loop inspection |
|
|
1121
|
+
| `@utilix-tech/sdk/media` | Image format & dimension reading from raw bytes (PNG, JPEG, GIF, WebP, BMP); PDF metadata reading; PDF page dimension/orientation listing; WAV audio info; ID3 tags; ICO favicon inspection; FLAC metadata reading; MP4/WebM video info; GIF frame/loop inspection; PNG chunk stream inspection with CRC validation |
|
|
1102
1122
|
|
|
1103
1123
|
---
|
|
1104
1124
|
|
|
@@ -70,6 +70,7 @@ __export(units_exports, {
|
|
|
70
70
|
decimalToIpCidr: () => decimalToIpCidr,
|
|
71
71
|
describePermissions: () => describePermissions,
|
|
72
72
|
detectNegativeAmortization: () => detectNegativeAmortization,
|
|
73
|
+
estimateAudioFileSize: () => estimateAudioFileSize,
|
|
73
74
|
fitIntoBox: () => fitIntoBox,
|
|
74
75
|
formatNumber: () => formatNumber,
|
|
75
76
|
formatValue: () => formatValue,
|
|
@@ -115,6 +116,7 @@ __export(units_exports, {
|
|
|
115
116
|
validateIban: () => validateIban,
|
|
116
117
|
validateIsbn: () => validateIsbn,
|
|
117
118
|
validateIsin: () => validateIsin,
|
|
119
|
+
validateRoutingNumber: () => validateRoutingNumber,
|
|
118
120
|
validateVin: () => validateVin,
|
|
119
121
|
viewportToPx: () => viewportToPx
|
|
120
122
|
});
|
|
@@ -3166,5 +3168,108 @@ function detectNegativeAmortization(input) {
|
|
|
3166
3168
|
capCrossedMonth
|
|
3167
3169
|
};
|
|
3168
3170
|
}
|
|
3171
|
+
var AUDIO_FILE_SIZE_WAV_HEADER_BYTES = 44;
|
|
3172
|
+
function estimateAudioFileSize(input) {
|
|
3173
|
+
const { mode, durationSeconds } = input;
|
|
3174
|
+
if (!Number.isFinite(durationSeconds) || durationSeconds <= 0) {
|
|
3175
|
+
return { error: "durationSeconds must be a positive number" };
|
|
3176
|
+
}
|
|
3177
|
+
const round22 = (n) => Math.round(n * 100) / 100;
|
|
3178
|
+
if (mode === "pcm") {
|
|
3179
|
+
const { sampleRateHz, bitDepth, channels } = input;
|
|
3180
|
+
if (!Number.isFinite(sampleRateHz) || sampleRateHz <= 0) {
|
|
3181
|
+
return { error: 'sampleRateHz must be a positive number for mode "pcm"' };
|
|
3182
|
+
}
|
|
3183
|
+
if (!Number.isFinite(bitDepth) || bitDepth <= 0) {
|
|
3184
|
+
return { error: 'bitDepth must be a positive number for mode "pcm"' };
|
|
3185
|
+
}
|
|
3186
|
+
if (!Number.isInteger(channels) || channels <= 0) {
|
|
3187
|
+
return { error: 'channels must be a positive whole number for mode "pcm"' };
|
|
3188
|
+
}
|
|
3189
|
+
const dataBytes = sampleRateHz * (bitDepth / 8) * channels * durationSeconds;
|
|
3190
|
+
const fileSizeBytes = dataBytes + AUDIO_FILE_SIZE_WAV_HEADER_BYTES;
|
|
3191
|
+
return {
|
|
3192
|
+
mode,
|
|
3193
|
+
durationSeconds,
|
|
3194
|
+
sampleRateHz,
|
|
3195
|
+
bitDepth,
|
|
3196
|
+
channels,
|
|
3197
|
+
dataBytes: Math.round(dataBytes),
|
|
3198
|
+
fileSizeBytes: Math.round(fileSizeBytes),
|
|
3199
|
+
fileSizeMB: round22(fileSizeBytes / 1e6),
|
|
3200
|
+
fileSizeMiB: round22(fileSizeBytes / 1048576)
|
|
3201
|
+
};
|
|
3202
|
+
}
|
|
3203
|
+
if (mode === "compressed") {
|
|
3204
|
+
const { bitrateKbps } = input;
|
|
3205
|
+
if (!Number.isFinite(bitrateKbps) || bitrateKbps <= 0) {
|
|
3206
|
+
return { error: 'bitrateKbps must be a positive number for mode "compressed"' };
|
|
3207
|
+
}
|
|
3208
|
+
const dataBytes = bitrateKbps * 1e3 * durationSeconds / 8;
|
|
3209
|
+
return {
|
|
3210
|
+
mode,
|
|
3211
|
+
durationSeconds,
|
|
3212
|
+
bitrateKbps,
|
|
3213
|
+
dataBytes: Math.round(dataBytes),
|
|
3214
|
+
fileSizeBytes: Math.round(dataBytes),
|
|
3215
|
+
fileSizeMB: round22(dataBytes / 1e6),
|
|
3216
|
+
fileSizeMiB: round22(dataBytes / 1048576)
|
|
3217
|
+
};
|
|
3218
|
+
}
|
|
3219
|
+
return { error: 'mode must be "pcm" or "compressed"' };
|
|
3220
|
+
}
|
|
3221
|
+
var ABA_FEDERAL_RESERVE_BANKS = {
|
|
3222
|
+
1: "Boston",
|
|
3223
|
+
2: "New York",
|
|
3224
|
+
3: "Philadelphia",
|
|
3225
|
+
4: "Cleveland",
|
|
3226
|
+
5: "Richmond",
|
|
3227
|
+
6: "Atlanta",
|
|
3228
|
+
7: "Chicago",
|
|
3229
|
+
8: "St. Louis",
|
|
3230
|
+
9: "Minneapolis",
|
|
3231
|
+
10: "Kansas City",
|
|
3232
|
+
11: "Dallas",
|
|
3233
|
+
12: "San Francisco"
|
|
3234
|
+
};
|
|
3235
|
+
function abaDistrictAndType(prefix) {
|
|
3236
|
+
if (prefix >= 1 && prefix <= 12) {
|
|
3237
|
+
return { type: "primary", district: { code: prefix, bank: ABA_FEDERAL_RESERVE_BANKS[prefix] } };
|
|
3238
|
+
}
|
|
3239
|
+
if (prefix >= 21 && prefix <= 32) {
|
|
3240
|
+
const code = prefix - 20;
|
|
3241
|
+
return { type: "thrift", district: { code, bank: ABA_FEDERAL_RESERVE_BANKS[code] } };
|
|
3242
|
+
}
|
|
3243
|
+
if (prefix >= 61 && prefix <= 72) {
|
|
3244
|
+
const code = prefix - 60;
|
|
3245
|
+
return { type: "electronic", district: { code, bank: ABA_FEDERAL_RESERVE_BANKS[code] } };
|
|
3246
|
+
}
|
|
3247
|
+
if (prefix === 80) {
|
|
3248
|
+
return { type: "traveler-check", district: null };
|
|
3249
|
+
}
|
|
3250
|
+
return { type: "unknown", district: null };
|
|
3251
|
+
}
|
|
3252
|
+
function formatRoutingNumber(digits) {
|
|
3253
|
+
return `${digits.slice(0, 4)} ${digits.slice(4, 8)} ${digits.slice(8)}`;
|
|
3254
|
+
}
|
|
3255
|
+
function validateRoutingNumber(input) {
|
|
3256
|
+
if (!input || !input.trim()) return { error: "Input is empty" };
|
|
3257
|
+
const digits = input.replace(/[\s-]/g, "");
|
|
3258
|
+
if (!/^\d+$/.test(digits)) return { error: "Routing number must contain only digits, spaces, or hyphens" };
|
|
3259
|
+
if (digits.length !== 9) return { error: `Routing number length (${digits.length}) must be exactly 9 digits` };
|
|
3260
|
+
const d = digits.split("").map(Number);
|
|
3261
|
+
const sum = 3 * (d[0] + d[3] + d[6]) + 7 * (d[1] + d[4] + d[7]) + 1 * (d[2] + d[5] + d[8]);
|
|
3262
|
+
const checksumValid = sum % 10 === 0;
|
|
3263
|
+
const prefix = Number(digits.slice(0, 2));
|
|
3264
|
+
const { type, district } = abaDistrictAndType(prefix);
|
|
3265
|
+
return {
|
|
3266
|
+
valid: checksumValid,
|
|
3267
|
+
checksumValid,
|
|
3268
|
+
length: digits.length,
|
|
3269
|
+
formatted: formatRoutingNumber(digits),
|
|
3270
|
+
routingNumberType: type,
|
|
3271
|
+
federalReserveDistrict: district
|
|
3272
|
+
};
|
|
3273
|
+
}
|
|
3169
3274
|
|
|
3170
|
-
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, 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 };
|
|
3275
|
+
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, 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 };
|
|
@@ -13,6 +13,7 @@ __export(media_exports, {
|
|
|
13
13
|
readPdfMetadata: () => readPdfMetadata,
|
|
14
14
|
readPdfOutline: () => readPdfOutline,
|
|
15
15
|
readPdfPageDimensions: () => readPdfPageDimensions,
|
|
16
|
+
readPngChunks: () => readPngChunks,
|
|
16
17
|
readVideoInfo: () => readVideoInfo,
|
|
17
18
|
readWavInfo: () => readWavInfo
|
|
18
19
|
});
|
|
@@ -1506,5 +1507,115 @@ function readMidiInfo(bytes) {
|
|
|
1506
1507
|
tracks
|
|
1507
1508
|
};
|
|
1508
1509
|
}
|
|
1510
|
+
var PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];
|
|
1511
|
+
var PNG_CRC_TABLE = null;
|
|
1512
|
+
function getPngCrcTable() {
|
|
1513
|
+
if (PNG_CRC_TABLE) return PNG_CRC_TABLE;
|
|
1514
|
+
const table = new Uint32Array(256);
|
|
1515
|
+
for (let n = 0; n < 256; n++) {
|
|
1516
|
+
let c = n;
|
|
1517
|
+
for (let k = 0; k < 8; k++) {
|
|
1518
|
+
c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
|
|
1519
|
+
}
|
|
1520
|
+
table[n] = c;
|
|
1521
|
+
}
|
|
1522
|
+
PNG_CRC_TABLE = table;
|
|
1523
|
+
return table;
|
|
1524
|
+
}
|
|
1525
|
+
function pngCrc32(bytes) {
|
|
1526
|
+
const table = getPngCrcTable();
|
|
1527
|
+
let crc = 4294967295;
|
|
1528
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
1529
|
+
crc = table[(crc ^ bytes[i]) & 255] ^ crc >>> 8;
|
|
1530
|
+
}
|
|
1531
|
+
return (crc ^ 4294967295) >>> 0;
|
|
1532
|
+
}
|
|
1533
|
+
function pad2(n) {
|
|
1534
|
+
return n < 10 ? `0${n}` : `${n}`;
|
|
1535
|
+
}
|
|
1536
|
+
function readPngChunks(bytes) {
|
|
1537
|
+
if (bytes.length < 8) return { error: "File too small to be a valid PNG file" };
|
|
1538
|
+
for (let i = 0; i < 8; i++) {
|
|
1539
|
+
if (bytes[i] !== PNG_SIGNATURE[i]) return { error: "Not a valid PNG file (bad 8-byte signature)" };
|
|
1540
|
+
}
|
|
1541
|
+
const chunks = [];
|
|
1542
|
+
const textChunks = [];
|
|
1543
|
+
let header = null;
|
|
1544
|
+
let physicalDimensions = null;
|
|
1545
|
+
let gamma = null;
|
|
1546
|
+
let lastModified = null;
|
|
1547
|
+
let isAnimated = false;
|
|
1548
|
+
let offset = 8;
|
|
1549
|
+
while (offset + 8 <= bytes.length) {
|
|
1550
|
+
const dataLength = readU32BE(bytes, offset);
|
|
1551
|
+
const type = String.fromCharCode(bytes[offset + 4], bytes[offset + 5], bytes[offset + 6], bytes[offset + 7]);
|
|
1552
|
+
const dataStart = offset + 8;
|
|
1553
|
+
const dataEnd = dataStart + dataLength;
|
|
1554
|
+
const crcOffset = dataEnd;
|
|
1555
|
+
if (crcOffset + 4 > bytes.length) {
|
|
1556
|
+
return { error: `Truncated chunk "${type}" at offset ${offset}` };
|
|
1557
|
+
}
|
|
1558
|
+
const data = bytes.subarray(dataStart, dataEnd);
|
|
1559
|
+
const expectedCrc = readU32BE(bytes, crcOffset);
|
|
1560
|
+
const actualCrc = pngCrc32(bytes.subarray(offset + 4, dataEnd));
|
|
1561
|
+
const firstChar = type.charCodeAt(0);
|
|
1562
|
+
const critical = firstChar >= 65 && firstChar <= 90;
|
|
1563
|
+
chunks.push({ type, offset, dataLength, crcValid: actualCrc === expectedCrc, critical });
|
|
1564
|
+
if (type === "IHDR" && data.length >= 13) {
|
|
1565
|
+
const colorTypeNum = data[9];
|
|
1566
|
+
header = {
|
|
1567
|
+
width: readU32BE(data, 0),
|
|
1568
|
+
height: readU32BE(data, 4),
|
|
1569
|
+
bitDepth: data[8],
|
|
1570
|
+
colorType: PNG_COLOR_TYPES[colorTypeNum] ?? "unknown",
|
|
1571
|
+
hasAlpha: colorTypeNum === 4 || colorTypeNum === 6,
|
|
1572
|
+
interlace: data[12] === 1
|
|
1573
|
+
};
|
|
1574
|
+
} else if (type === "tEXt") {
|
|
1575
|
+
const nullIdx = data.indexOf(0);
|
|
1576
|
+
if (nullIdx !== -1) {
|
|
1577
|
+
textChunks.push({
|
|
1578
|
+
keyword: Buffer.from(data.subarray(0, nullIdx)).toString("latin1"),
|
|
1579
|
+
text: Buffer.from(data.subarray(nullIdx + 1)).toString("latin1"),
|
|
1580
|
+
compressed: false
|
|
1581
|
+
});
|
|
1582
|
+
}
|
|
1583
|
+
} else if (type === "zTXt" || type === "iTXt") {
|
|
1584
|
+
const nullIdx = data.indexOf(0);
|
|
1585
|
+
if (nullIdx !== -1) {
|
|
1586
|
+
textChunks.push({ keyword: Buffer.from(data.subarray(0, nullIdx)).toString("latin1"), text: null, compressed: true });
|
|
1587
|
+
}
|
|
1588
|
+
} else if (type === "pHYs" && data.length >= 9) {
|
|
1589
|
+
physicalDimensions = {
|
|
1590
|
+
pixelsPerUnitX: readU32BE(data, 0),
|
|
1591
|
+
pixelsPerUnitY: readU32BE(data, 4),
|
|
1592
|
+
unit: data[8] === 1 ? "meter" : "unknown"
|
|
1593
|
+
};
|
|
1594
|
+
} else if (type === "gAMA" && data.length >= 4) {
|
|
1595
|
+
gamma = readU32BE(data, 0) / 1e5;
|
|
1596
|
+
} else if (type === "tIME" && data.length >= 7) {
|
|
1597
|
+
const year = data[0] << 8 | data[1];
|
|
1598
|
+
lastModified = `${year}-${pad2(data[2])}-${pad2(data[3])}T${pad2(data[4])}:${pad2(data[5])}:${pad2(data[6])}Z`;
|
|
1599
|
+
} else if (type === "acTL") {
|
|
1600
|
+
isAnimated = true;
|
|
1601
|
+
}
|
|
1602
|
+
offset = crcOffset + 4;
|
|
1603
|
+
if (type === "IEND") break;
|
|
1604
|
+
}
|
|
1605
|
+
if (chunks.length === 0) return { error: "No chunks found after the PNG signature" };
|
|
1606
|
+
if (!header) return { error: "Missing required IHDR chunk" };
|
|
1607
|
+
return {
|
|
1608
|
+
valid: true,
|
|
1609
|
+
fileSize: bytes.length,
|
|
1610
|
+
chunkCount: chunks.length,
|
|
1611
|
+
chunks,
|
|
1612
|
+
header,
|
|
1613
|
+
textChunks,
|
|
1614
|
+
physicalDimensions,
|
|
1615
|
+
gamma,
|
|
1616
|
+
lastModified,
|
|
1617
|
+
isAnimated
|
|
1618
|
+
};
|
|
1619
|
+
}
|
|
1509
1620
|
|
|
1510
|
-
export { inspectGifFrames, media_exports, readExifData, readFlacInfo, readIcoInfo, readId3Tags, readImageInfo, readMidiInfo, readPdfMetadata, readPdfOutline, readPdfPageDimensions, readVideoInfo, readWavInfo };
|
|
1621
|
+
export { inspectGifFrames, media_exports, readExifData, readFlacInfo, readIcoInfo, readId3Tags, readImageInfo, readMidiInfo, readPdfMetadata, readPdfOutline, readPdfPageDimensions, readPngChunks, readVideoInfo, readWavInfo };
|
|
@@ -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 (``) 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
|
|
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 };
|