@utilix-tech/sdk 0.75.0 → 0.77.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.
@@ -3428,6 +3428,123 @@ function calculateCookieSizeBudget(cookieHeader, budgetBytes = DEFAULT_COOKIE_BU
3428
3428
  exceedsBudget: totalBytes > budgetBytes
3429
3429
  };
3430
3430
  }
3431
+ function parseRawHeaderBlock(raw) {
3432
+ const map = /* @__PURE__ */ new Map();
3433
+ for (const line of raw.split(/\r?\n/)) {
3434
+ const trimmed = line.trim();
3435
+ if (!trimmed) continue;
3436
+ const idx = trimmed.indexOf(":");
3437
+ if (idx === -1) continue;
3438
+ const name = trimmed.slice(0, idx).trim().toLowerCase();
3439
+ const value = trimmed.slice(idx + 1).trim();
3440
+ if (!map.has(name)) map.set(name, value);
3441
+ }
3442
+ return map;
3443
+ }
3444
+ var SECURITY_HEADER_CHECKS = [
3445
+ {
3446
+ header: "Content-Security-Policy",
3447
+ evaluate: (v) => {
3448
+ if (!v) return { status: "missing", note: "Without a CSP, an injected script runs with full page privileges." };
3449
+ if (/unsafe-inline|unsafe-eval/i.test(v)) return { status: "warning", note: "Contains unsafe-inline or unsafe-eval, which weakens XSS protection." };
3450
+ return { status: "pass", note: "Present. Use the CSP Header Builder tool to validate its directives in depth." };
3451
+ }
3452
+ },
3453
+ {
3454
+ header: "Strict-Transport-Security",
3455
+ evaluate: (v) => {
3456
+ if (!v) return { status: "missing", note: "Without HSTS, a user's first visit (and any later downgrade) can be sent over plain HTTP." };
3457
+ const maxAgeMatch = v.match(/max-age\s*=\s*(\d+)/i);
3458
+ if (!maxAgeMatch) return { status: "warning", note: "Present but missing a max-age directive." };
3459
+ const maxAge = Number(maxAgeMatch[1]);
3460
+ if (maxAge < 31536e3) return { status: "warning", note: "max-age is below the recommended 1 year (31536000 seconds)." };
3461
+ return { status: "pass", note: "Present with a max-age of at least 1 year." };
3462
+ }
3463
+ },
3464
+ {
3465
+ header: "X-Content-Type-Options",
3466
+ evaluate: (v) => {
3467
+ if (!v) return { status: "missing", note: "Without this header, browsers may MIME-sniff a response into an unintended content type." };
3468
+ if (v.trim().toLowerCase() !== "nosniff") return { status: "warning", note: `"nosniff" is the only valid value; this value won't take effect.` };
3469
+ return { status: "pass", note: "Set to the only valid value, nosniff." };
3470
+ }
3471
+ },
3472
+ {
3473
+ header: "X-Frame-Options",
3474
+ evaluate: (v) => {
3475
+ if (!v) return { status: "missing", note: "Without this (or a CSP frame-ancestors directive), the page can be framed by another site for clickjacking." };
3476
+ const upper = v.trim().toUpperCase();
3477
+ if (upper === "DENY" || upper === "SAMEORIGIN") return { status: "pass", note: `Framing restricted (${upper}).` };
3478
+ if (upper.startsWith("ALLOW-FROM")) return { status: "warning", note: "ALLOW-FROM is deprecated and ignored by most modern browsers." };
3479
+ return { status: "warning", note: "Unrecognized value." };
3480
+ }
3481
+ },
3482
+ {
3483
+ header: "Referrer-Policy",
3484
+ evaluate: (v) => {
3485
+ if (!v) return { status: "missing", note: "Without this header, the browser's default referrer behavior applies, which can leak full URLs to third parties." };
3486
+ if (v.trim().toLowerCase() === "unsafe-url") return { status: "warning", note: "unsafe-url leaks the full URL, including path and query string, to every destination." };
3487
+ return { status: "pass", note: "Present." };
3488
+ }
3489
+ },
3490
+ {
3491
+ header: "Permissions-Policy",
3492
+ evaluate: (v) => {
3493
+ if (!v) return { status: "missing", note: "Without this header, embedded content can use powerful browser features (camera, geolocation, etc.) unless restricted another way." };
3494
+ return { status: "pass", note: "Present." };
3495
+ }
3496
+ },
3497
+ {
3498
+ header: "Cross-Origin-Opener-Policy",
3499
+ evaluate: (v) => {
3500
+ if (!v) return { status: "missing", note: "Without COOP, this page can be put in the same browsing context group as a malicious opener window." };
3501
+ const lower = v.trim().toLowerCase();
3502
+ if (lower === "same-origin") return { status: "pass", note: "Set to same-origin, the strongest isolation value." };
3503
+ return { status: "warning", note: `Set to "${v.trim()}", which is weaker than same-origin.` };
3504
+ }
3505
+ },
3506
+ {
3507
+ header: "Cross-Origin-Embedder-Policy",
3508
+ evaluate: (v) => {
3509
+ if (!v) return { status: "missing", note: "Required alongside COOP for cross-origin isolation (e.g. to use SharedArrayBuffer)." };
3510
+ const lower = v.trim().toLowerCase();
3511
+ if (lower === "require-corp" || lower === "credentialless") return { status: "pass", note: `Set to ${lower}.` };
3512
+ return { status: "warning", note: `Unrecognized value "${v.trim()}".` };
3513
+ }
3514
+ },
3515
+ {
3516
+ header: "Cross-Origin-Resource-Policy",
3517
+ evaluate: (v) => {
3518
+ if (!v) return { status: "missing", note: "Without CORP, this resource can be loaded cross-origin by any site that knows its URL." };
3519
+ const lower = v.trim().toLowerCase();
3520
+ if (lower === "same-origin" || lower === "same-site") return { status: "pass", note: `Set to ${lower}.` };
3521
+ if (lower === "cross-origin") return { status: "warning", note: "Set to cross-origin, which allows any site to load this resource." };
3522
+ return { status: "warning", note: `Unrecognized value "${v.trim()}".` };
3523
+ }
3524
+ }
3525
+ ];
3526
+ function scoreSecurityHeaders(rawHeaders) {
3527
+ if (typeof rawHeaders !== "string" || !rawHeaders.trim()) {
3528
+ return { error: 'Paste one or more response headers, one per line in "Name: value" form' };
3529
+ }
3530
+ const headerMap = parseRawHeaderBlock(rawHeaders);
3531
+ if (headerMap.size === 0) {
3532
+ return { error: 'Could not parse any "Name: value" header lines from the input' };
3533
+ }
3534
+ const checks = SECURITY_HEADER_CHECKS.map((def) => {
3535
+ const value = headerMap.get(def.header.toLowerCase()) ?? null;
3536
+ const { status, note } = def.evaluate(value);
3537
+ return { header: def.header, status, value, note };
3538
+ });
3539
+ const passCount = checks.filter((c) => c.status === "pass").length;
3540
+ const warningCount = checks.filter((c) => c.status === "warning").length;
3541
+ const missingCount = checks.filter((c) => c.status === "missing").length;
3542
+ const totalChecks = checks.length;
3543
+ const points = passCount + warningCount * 0.5;
3544
+ const score = Math.round(points / totalChecks * 100);
3545
+ const grade = score >= 90 ? "A" : score >= 75 ? "B" : score >= 60 ? "C" : score >= 40 ? "D" : "F";
3546
+ return { checks, score, grade, passCount, warningCount, missingCount, totalChecks };
3547
+ }
3431
3548
 
3432
3549
  exports.CLIENT_HINTS = CLIENT_HINTS;
3433
3550
  exports.DNS_RECORD_TYPES = DNS_RECORD_TYPES;
@@ -3498,6 +3615,7 @@ exports.parseUserAgent = parseUserAgent;
3498
3615
  exports.parseVaryHeader = parseVaryHeader;
3499
3616
  exports.parseXContentTypeOptionsHeader = parseXContentTypeOptionsHeader;
3500
3617
  exports.parseXRobotsTag = parseXRobotsTag;
3618
+ exports.scoreSecurityHeaders = scoreSecurityHeaders;
3501
3619
  exports.searchHeaders = searchHeaders;
3502
3620
  exports.searchStatusCodes = searchStatusCodes;
3503
3621
  exports.splitSitemap = splitSitemap;
@@ -1 +1 @@
1
- export { A as AcceptLanguageEntry, a as AcceptLanguageResult, b as AuthResultEntry, B as BuildRangeHeaderOptions, C as CLIENT_HINTS, c as CacheControlDirective, d as CacheControlOptions, e as CacheControlResult, f as ClientHintDef, g as ClientHintValueType, h as ClientHintsBuildResult, i as ClientHintsParseResult, j as CloseCodeInfo, k as CloseCodeRange, l as ContentDispositionBuildOptions, m as ContentDispositionBuildResult, o as ContentDispositionParseResult, p as ContentRangeResult, q as ContentTypeRiskResult, r as ContentTypeSniffRisk, s as CookieAttributes, t as CookieCheckResult, u as CookieSizeBudgetResult, v as CookieSizeEntry, D as DNS_RECORD_TYPES, w as DnsRecord, x as DnsRecordType, y as DnsResponse, E as EmailHeaderAnalysis, z as EmailHeaderField, G as GeoResult, H as HTTP_HEADERS, F as HarEntry, I as HarParseResult, J as HarSummary, K as HeaderCategory, L as HstsOptions, M as HstsResult, N as HttpHeader, O as Ipv6AddressType, P as Ipv6ParseResult, Q as LINK_REL_VALUES, R as LinkHeaderEntry, S as LinkHeaderEntryInput, T as LinkHeaderResult, U as LinkRel, V as ManifestIconInfo, W as ManifestIssue, X as ManifestValidationResult, Y as MultipartParseResult, Z as MultipartPart, _ as OpcodeCategory, $ as OpcodeInfo, a0 as PERMISSIONS_POLICY_FEATURES, a1 as ParsedClientHint, a2 as ParsedDnsResult, a3 as ParsedGeoResult, a4 as PermissionsPolicyDirective, a5 as PermissionsPolicyFeatureInput, a6 as PermissionsPolicyResult, a7 as PreferParameter, a8 as PreferPreference, a9 as PreferResult, aa as PriorityResult, ab as REFERRER_POLICY_VALUES, ac as RangeEntry, ad as RangeEntryInput, ae as RangeHeaderResult, af as ReceivedHop, ag as ReferrerPolicyEntry, ah as ReferrerPolicyResult, ai as ReferrerPolicyValue, aj as RetryAfterDateResult, ak as RetryAfterResult, al as RetryAfterSecondsResult, am as RobotsGroup, an as RobotsIssue, ao as RobotsMetaTagFlag, ap as RobotsMetaTagOptions, aq as RobotsMetaTagResult, ar as RobotsRule, as as RobotsValidationResult, at as STATUS_CODES, au as SameSiteValue, av as SitemapIndexEntry, aw as SitemapIssue, ax as SitemapSplitFile, ay as SitemapUrlEntry, az as SitemapValidationResult, aA as SplitSitemapOptions, aB as SplitSitemapResult, aC as StatusCode, aD as UaDeviceType, aE as UserAgentInfo, aF as VaryHeaderEntry, aG as VaryHeaderResult, aH as XContentTypeOptionsHeader, aI as XContentTypeOptionsParseResult, aJ as XRobotsTagFlag, aK as XRobotsTagOptions, aL as XRobotsTagResult, aM as X_CONTENT_TYPE_OPTIONS_HEADER, aN as analyzeEmailHeaders, aO as assessContentTypeRisk, aP as buildAcceptLanguage, aQ as buildCacheControl, aR as buildClientHints, aS as buildContentDisposition, aT as buildDnsQueryUrl, aU as buildGeoUrl, aV as buildHsts, aW as buildLinkHeader, aX as buildMapUrl, aY as buildPermissionsPolicy, aZ as buildPreferHeader, a_ as buildPriorityHeader, a$ as buildRangeHeader, b0 as buildReferrerPolicy, b1 as buildRetryAfterHeader, b2 as buildRobotsMetaTag, b3 as buildVaryHeader, b4 as buildXContentTypeOptionsHeader, b5 as buildXRobotsTag, b6 as calculateCookieSizeBudget, b7 as checkSetCookieHeader, b8 as countryCodeToFlag, b9 as extractMultipartBoundary, ba as formatCoordinates, bb as formatTtl, bc as getByCategory, bd as getHeader, be as getHeadersByCategory, bf as getStatusByCategory, bg as getStatusCode, bh as isClientError, bi as isServerError, bj as isSuccess, bk as isValidIp, bl as isValidIpv4, bm as isValidIpv6, bn as listCloseCodes, bo as listOpcodes, bp as lookupCloseCode, bq as lookupOpcode, br as parseAcceptLanguage, bs as parseClientHintHeaders, bt as parseContentDisposition, bu as parseContentRangeHeader, bv as parseDnsResponse, bw as parseGeoResponse, bx as parseHar, by as parseHsts, bz as parseIpv6Address, bA as parseMultipartFormData, bB as parsePermissionsPolicy, bC as parsePreferHeader, bD as parsePriorityHeader, bE as parseRetryAfterHeader, bF as parseRobotsMetaTag, bG as parseUserAgent, bH as parseVaryHeader, bI as parseXContentTypeOptionsHeader, bJ as parseXRobotsTag, bK as searchHeaders, bL as searchStatusCodes, bM as splitSitemap, bN as statusCodeToText, bO as typeNumberToLabel, bP as validateDomain, bQ as validateHeaderName, bR as validateHeaderValue, bS as validateManifest, bT as validateRobotsTxt, bU as validateSitemap } from '../network-Da3meCWM.cjs';
1
+ export { A as AcceptLanguageEntry, a as AcceptLanguageResult, b as AuthResultEntry, B as BuildRangeHeaderOptions, C as CLIENT_HINTS, c as CacheControlDirective, d as CacheControlOptions, e as CacheControlResult, f as ClientHintDef, g as ClientHintValueType, h as ClientHintsBuildResult, i as ClientHintsParseResult, j as CloseCodeInfo, k as CloseCodeRange, l as ContentDispositionBuildOptions, m as ContentDispositionBuildResult, o as ContentDispositionParseResult, p as ContentRangeResult, q as ContentTypeRiskResult, r as ContentTypeSniffRisk, s as CookieAttributes, t as CookieCheckResult, u as CookieSizeBudgetResult, v as CookieSizeEntry, D as DNS_RECORD_TYPES, w as DnsRecord, x as DnsRecordType, y as DnsResponse, E as EmailHeaderAnalysis, z as EmailHeaderField, G as GeoResult, H as HTTP_HEADERS, F as HarEntry, I as HarParseResult, J as HarSummary, K as HeaderCategory, L as HstsOptions, M as HstsResult, N as HttpHeader, O as Ipv6AddressType, P as Ipv6ParseResult, Q as LINK_REL_VALUES, R as LinkHeaderEntry, S as LinkHeaderEntryInput, T as LinkHeaderResult, U as LinkRel, V as ManifestIconInfo, W as ManifestIssue, X as ManifestValidationResult, Y as MultipartParseResult, Z as MultipartPart, _ as OpcodeCategory, $ as OpcodeInfo, a0 as PERMISSIONS_POLICY_FEATURES, a1 as ParsedClientHint, a2 as ParsedDnsResult, a3 as ParsedGeoResult, a4 as PermissionsPolicyDirective, a5 as PermissionsPolicyFeatureInput, a6 as PermissionsPolicyResult, a7 as PreferParameter, a8 as PreferPreference, a9 as PreferResult, aa as PriorityResult, ab as REFERRER_POLICY_VALUES, ac as RangeEntry, ad as RangeEntryInput, ae as RangeHeaderResult, af as ReceivedHop, ag as ReferrerPolicyEntry, ah as ReferrerPolicyResult, ai as ReferrerPolicyValue, aj as RetryAfterDateResult, ak as RetryAfterResult, al as RetryAfterSecondsResult, am as RobotsGroup, an as RobotsIssue, ao as RobotsMetaTagFlag, ap as RobotsMetaTagOptions, aq as RobotsMetaTagResult, ar as RobotsRule, as as RobotsValidationResult, at as STATUS_CODES, au as SameSiteValue, av as SecurityHeaderCheck, aw as SecurityHeaderStatus, ax as SecurityHeadersScorecard, ay as SitemapIndexEntry, az as SitemapIssue, aA as SitemapSplitFile, aB as SitemapUrlEntry, aC as SitemapValidationResult, aD as SplitSitemapOptions, aE as SplitSitemapResult, aF as StatusCode, aG as UaDeviceType, aH as UserAgentInfo, aI as VaryHeaderEntry, aJ as VaryHeaderResult, aK as XContentTypeOptionsHeader, aL as XContentTypeOptionsParseResult, aM as XRobotsTagFlag, aN as XRobotsTagOptions, aO as XRobotsTagResult, aP as X_CONTENT_TYPE_OPTIONS_HEADER, aQ as analyzeEmailHeaders, aR as assessContentTypeRisk, aS as buildAcceptLanguage, aT as buildCacheControl, aU as buildClientHints, aV as buildContentDisposition, aW as buildDnsQueryUrl, aX as buildGeoUrl, aY as buildHsts, aZ as buildLinkHeader, a_ as buildMapUrl, a$ as buildPermissionsPolicy, b0 as buildPreferHeader, b1 as buildPriorityHeader, b2 as buildRangeHeader, b3 as buildReferrerPolicy, b4 as buildRetryAfterHeader, b5 as buildRobotsMetaTag, b6 as buildVaryHeader, b7 as buildXContentTypeOptionsHeader, b8 as buildXRobotsTag, b9 as calculateCookieSizeBudget, ba as checkSetCookieHeader, bb as countryCodeToFlag, bc as extractMultipartBoundary, bd as formatCoordinates, be as formatTtl, bf as getByCategory, bg as getHeader, bh as getHeadersByCategory, bi as getStatusByCategory, bj as getStatusCode, bk as isClientError, bl as isServerError, bm as isSuccess, bn as isValidIp, bo as isValidIpv4, bp as isValidIpv6, bq as listCloseCodes, br as listOpcodes, bs as lookupCloseCode, bt as lookupOpcode, bu as parseAcceptLanguage, bv as parseClientHintHeaders, bw as parseContentDisposition, bx as parseContentRangeHeader, by as parseDnsResponse, bz as parseGeoResponse, bA as parseHar, bB as parseHsts, bC as parseIpv6Address, bD as parseMultipartFormData, bE as parsePermissionsPolicy, bF as parsePreferHeader, bG as parsePriorityHeader, bH as parseRetryAfterHeader, bI as parseRobotsMetaTag, bJ as parseUserAgent, bK as parseVaryHeader, bL as parseXContentTypeOptionsHeader, bM as parseXRobotsTag, bN as scoreSecurityHeaders, bO as searchHeaders, bP as searchStatusCodes, bQ as splitSitemap, bR as statusCodeToText, bS as typeNumberToLabel, bT as validateDomain, bU as validateHeaderName, bV as validateHeaderValue, bW as validateManifest, bX as validateRobotsTxt, bY as validateSitemap } from '../network-BskZe1n2.cjs';
@@ -1 +1 @@
1
- export { A as AcceptLanguageEntry, a as AcceptLanguageResult, b as AuthResultEntry, B as BuildRangeHeaderOptions, C as CLIENT_HINTS, c as CacheControlDirective, d as CacheControlOptions, e as CacheControlResult, f as ClientHintDef, g as ClientHintValueType, h as ClientHintsBuildResult, i as ClientHintsParseResult, j as CloseCodeInfo, k as CloseCodeRange, l as ContentDispositionBuildOptions, m as ContentDispositionBuildResult, o as ContentDispositionParseResult, p as ContentRangeResult, q as ContentTypeRiskResult, r as ContentTypeSniffRisk, s as CookieAttributes, t as CookieCheckResult, u as CookieSizeBudgetResult, v as CookieSizeEntry, D as DNS_RECORD_TYPES, w as DnsRecord, x as DnsRecordType, y as DnsResponse, E as EmailHeaderAnalysis, z as EmailHeaderField, G as GeoResult, H as HTTP_HEADERS, F as HarEntry, I as HarParseResult, J as HarSummary, K as HeaderCategory, L as HstsOptions, M as HstsResult, N as HttpHeader, O as Ipv6AddressType, P as Ipv6ParseResult, Q as LINK_REL_VALUES, R as LinkHeaderEntry, S as LinkHeaderEntryInput, T as LinkHeaderResult, U as LinkRel, V as ManifestIconInfo, W as ManifestIssue, X as ManifestValidationResult, Y as MultipartParseResult, Z as MultipartPart, _ as OpcodeCategory, $ as OpcodeInfo, a0 as PERMISSIONS_POLICY_FEATURES, a1 as ParsedClientHint, a2 as ParsedDnsResult, a3 as ParsedGeoResult, a4 as PermissionsPolicyDirective, a5 as PermissionsPolicyFeatureInput, a6 as PermissionsPolicyResult, a7 as PreferParameter, a8 as PreferPreference, a9 as PreferResult, aa as PriorityResult, ab as REFERRER_POLICY_VALUES, ac as RangeEntry, ad as RangeEntryInput, ae as RangeHeaderResult, af as ReceivedHop, ag as ReferrerPolicyEntry, ah as ReferrerPolicyResult, ai as ReferrerPolicyValue, aj as RetryAfterDateResult, ak as RetryAfterResult, al as RetryAfterSecondsResult, am as RobotsGroup, an as RobotsIssue, ao as RobotsMetaTagFlag, ap as RobotsMetaTagOptions, aq as RobotsMetaTagResult, ar as RobotsRule, as as RobotsValidationResult, at as STATUS_CODES, au as SameSiteValue, av as SitemapIndexEntry, aw as SitemapIssue, ax as SitemapSplitFile, ay as SitemapUrlEntry, az as SitemapValidationResult, aA as SplitSitemapOptions, aB as SplitSitemapResult, aC as StatusCode, aD as UaDeviceType, aE as UserAgentInfo, aF as VaryHeaderEntry, aG as VaryHeaderResult, aH as XContentTypeOptionsHeader, aI as XContentTypeOptionsParseResult, aJ as XRobotsTagFlag, aK as XRobotsTagOptions, aL as XRobotsTagResult, aM as X_CONTENT_TYPE_OPTIONS_HEADER, aN as analyzeEmailHeaders, aO as assessContentTypeRisk, aP as buildAcceptLanguage, aQ as buildCacheControl, aR as buildClientHints, aS as buildContentDisposition, aT as buildDnsQueryUrl, aU as buildGeoUrl, aV as buildHsts, aW as buildLinkHeader, aX as buildMapUrl, aY as buildPermissionsPolicy, aZ as buildPreferHeader, a_ as buildPriorityHeader, a$ as buildRangeHeader, b0 as buildReferrerPolicy, b1 as buildRetryAfterHeader, b2 as buildRobotsMetaTag, b3 as buildVaryHeader, b4 as buildXContentTypeOptionsHeader, b5 as buildXRobotsTag, b6 as calculateCookieSizeBudget, b7 as checkSetCookieHeader, b8 as countryCodeToFlag, b9 as extractMultipartBoundary, ba as formatCoordinates, bb as formatTtl, bc as getByCategory, bd as getHeader, be as getHeadersByCategory, bf as getStatusByCategory, bg as getStatusCode, bh as isClientError, bi as isServerError, bj as isSuccess, bk as isValidIp, bl as isValidIpv4, bm as isValidIpv6, bn as listCloseCodes, bo as listOpcodes, bp as lookupCloseCode, bq as lookupOpcode, br as parseAcceptLanguage, bs as parseClientHintHeaders, bt as parseContentDisposition, bu as parseContentRangeHeader, bv as parseDnsResponse, bw as parseGeoResponse, bx as parseHar, by as parseHsts, bz as parseIpv6Address, bA as parseMultipartFormData, bB as parsePermissionsPolicy, bC as parsePreferHeader, bD as parsePriorityHeader, bE as parseRetryAfterHeader, bF as parseRobotsMetaTag, bG as parseUserAgent, bH as parseVaryHeader, bI as parseXContentTypeOptionsHeader, bJ as parseXRobotsTag, bK as searchHeaders, bL as searchStatusCodes, bM as splitSitemap, bN as statusCodeToText, bO as typeNumberToLabel, bP as validateDomain, bQ as validateHeaderName, bR as validateHeaderValue, bS as validateManifest, bT as validateRobotsTxt, bU as validateSitemap } from '../network-Da3meCWM.js';
1
+ export { A as AcceptLanguageEntry, a as AcceptLanguageResult, b as AuthResultEntry, B as BuildRangeHeaderOptions, C as CLIENT_HINTS, c as CacheControlDirective, d as CacheControlOptions, e as CacheControlResult, f as ClientHintDef, g as ClientHintValueType, h as ClientHintsBuildResult, i as ClientHintsParseResult, j as CloseCodeInfo, k as CloseCodeRange, l as ContentDispositionBuildOptions, m as ContentDispositionBuildResult, o as ContentDispositionParseResult, p as ContentRangeResult, q as ContentTypeRiskResult, r as ContentTypeSniffRisk, s as CookieAttributes, t as CookieCheckResult, u as CookieSizeBudgetResult, v as CookieSizeEntry, D as DNS_RECORD_TYPES, w as DnsRecord, x as DnsRecordType, y as DnsResponse, E as EmailHeaderAnalysis, z as EmailHeaderField, G as GeoResult, H as HTTP_HEADERS, F as HarEntry, I as HarParseResult, J as HarSummary, K as HeaderCategory, L as HstsOptions, M as HstsResult, N as HttpHeader, O as Ipv6AddressType, P as Ipv6ParseResult, Q as LINK_REL_VALUES, R as LinkHeaderEntry, S as LinkHeaderEntryInput, T as LinkHeaderResult, U as LinkRel, V as ManifestIconInfo, W as ManifestIssue, X as ManifestValidationResult, Y as MultipartParseResult, Z as MultipartPart, _ as OpcodeCategory, $ as OpcodeInfo, a0 as PERMISSIONS_POLICY_FEATURES, a1 as ParsedClientHint, a2 as ParsedDnsResult, a3 as ParsedGeoResult, a4 as PermissionsPolicyDirective, a5 as PermissionsPolicyFeatureInput, a6 as PermissionsPolicyResult, a7 as PreferParameter, a8 as PreferPreference, a9 as PreferResult, aa as PriorityResult, ab as REFERRER_POLICY_VALUES, ac as RangeEntry, ad as RangeEntryInput, ae as RangeHeaderResult, af as ReceivedHop, ag as ReferrerPolicyEntry, ah as ReferrerPolicyResult, ai as ReferrerPolicyValue, aj as RetryAfterDateResult, ak as RetryAfterResult, al as RetryAfterSecondsResult, am as RobotsGroup, an as RobotsIssue, ao as RobotsMetaTagFlag, ap as RobotsMetaTagOptions, aq as RobotsMetaTagResult, ar as RobotsRule, as as RobotsValidationResult, at as STATUS_CODES, au as SameSiteValue, av as SecurityHeaderCheck, aw as SecurityHeaderStatus, ax as SecurityHeadersScorecard, ay as SitemapIndexEntry, az as SitemapIssue, aA as SitemapSplitFile, aB as SitemapUrlEntry, aC as SitemapValidationResult, aD as SplitSitemapOptions, aE as SplitSitemapResult, aF as StatusCode, aG as UaDeviceType, aH as UserAgentInfo, aI as VaryHeaderEntry, aJ as VaryHeaderResult, aK as XContentTypeOptionsHeader, aL as XContentTypeOptionsParseResult, aM as XRobotsTagFlag, aN as XRobotsTagOptions, aO as XRobotsTagResult, aP as X_CONTENT_TYPE_OPTIONS_HEADER, aQ as analyzeEmailHeaders, aR as assessContentTypeRisk, aS as buildAcceptLanguage, aT as buildCacheControl, aU as buildClientHints, aV as buildContentDisposition, aW as buildDnsQueryUrl, aX as buildGeoUrl, aY as buildHsts, aZ as buildLinkHeader, a_ as buildMapUrl, a$ as buildPermissionsPolicy, b0 as buildPreferHeader, b1 as buildPriorityHeader, b2 as buildRangeHeader, b3 as buildReferrerPolicy, b4 as buildRetryAfterHeader, b5 as buildRobotsMetaTag, b6 as buildVaryHeader, b7 as buildXContentTypeOptionsHeader, b8 as buildXRobotsTag, b9 as calculateCookieSizeBudget, ba as checkSetCookieHeader, bb as countryCodeToFlag, bc as extractMultipartBoundary, bd as formatCoordinates, be as formatTtl, bf as getByCategory, bg as getHeader, bh as getHeadersByCategory, bi as getStatusByCategory, bj as getStatusCode, bk as isClientError, bl as isServerError, bm as isSuccess, bn as isValidIp, bo as isValidIpv4, bp as isValidIpv6, bq as listCloseCodes, br as listOpcodes, bs as lookupCloseCode, bt as lookupOpcode, bu as parseAcceptLanguage, bv as parseClientHintHeaders, bw as parseContentDisposition, bx as parseContentRangeHeader, by as parseDnsResponse, bz as parseGeoResponse, bA as parseHar, bB as parseHsts, bC as parseIpv6Address, bD as parseMultipartFormData, bE as parsePermissionsPolicy, bF as parsePreferHeader, bG as parsePriorityHeader, bH as parseRetryAfterHeader, bI as parseRobotsMetaTag, bJ as parseUserAgent, bK as parseVaryHeader, bL as parseXContentTypeOptionsHeader, bM as parseXRobotsTag, bN as scoreSecurityHeaders, bO as searchHeaders, bP as searchStatusCodes, bQ as splitSitemap, bR as statusCodeToText, bS as typeNumberToLabel, bT as validateDomain, bU as validateHeaderName, bV as validateHeaderValue, bW as validateManifest, bX as validateRobotsTxt, bY as validateSitemap } from '../network-BskZe1n2.js';
@@ -1,2 +1,2 @@
1
- export { CLIENT_HINTS, DNS_RECORD_TYPES, HTTP_HEADERS, LINK_REL_VALUES, PERMISSIONS_POLICY_FEATURES, REFERRER_POLICY_VALUES, STATUS_CODES, X_CONTENT_TYPE_OPTIONS_HEADER, analyzeEmailHeaders, assessContentTypeRisk, buildAcceptLanguage, buildCacheControl, buildClientHints, buildContentDisposition, buildDnsQueryUrl, buildGeoUrl, buildHsts, buildLinkHeader, buildMapUrl, buildPermissionsPolicy, buildPreferHeader, buildPriorityHeader, buildRangeHeader, buildReferrerPolicy, buildRetryAfterHeader, buildRobotsMetaTag, buildVaryHeader, buildXContentTypeOptionsHeader, buildXRobotsTag, calculateCookieSizeBudget, checkSetCookieHeader, countryCodeToFlag, extractMultipartBoundary, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, listCloseCodes, listOpcodes, lookupCloseCode, lookupOpcode, parseAcceptLanguage, parseClientHintHeaders, parseContentDisposition, parseContentRangeHeader, parseDnsResponse, parseGeoResponse, parseHar, parseHsts, parseIpv6Address, parseMultipartFormData, parsePermissionsPolicy, parsePreferHeader, parsePriorityHeader, parseRetryAfterHeader, parseRobotsMetaTag, parseUserAgent, parseVaryHeader, parseXContentTypeOptionsHeader, parseXRobotsTag, searchHeaders, searchStatusCodes, splitSitemap, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue, validateManifest, validateRobotsTxt, validateSitemap } from '../chunk-CXUOV672.js';
1
+ export { CLIENT_HINTS, DNS_RECORD_TYPES, HTTP_HEADERS, LINK_REL_VALUES, PERMISSIONS_POLICY_FEATURES, REFERRER_POLICY_VALUES, STATUS_CODES, X_CONTENT_TYPE_OPTIONS_HEADER, analyzeEmailHeaders, assessContentTypeRisk, buildAcceptLanguage, buildCacheControl, buildClientHints, buildContentDisposition, buildDnsQueryUrl, buildGeoUrl, buildHsts, buildLinkHeader, buildMapUrl, buildPermissionsPolicy, buildPreferHeader, buildPriorityHeader, buildRangeHeader, buildReferrerPolicy, buildRetryAfterHeader, buildRobotsMetaTag, buildVaryHeader, buildXContentTypeOptionsHeader, buildXRobotsTag, calculateCookieSizeBudget, checkSetCookieHeader, countryCodeToFlag, extractMultipartBoundary, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, listCloseCodes, listOpcodes, lookupCloseCode, lookupOpcode, parseAcceptLanguage, parseClientHintHeaders, parseContentDisposition, parseContentRangeHeader, parseDnsResponse, parseGeoResponse, parseHar, parseHsts, parseIpv6Address, parseMultipartFormData, parsePermissionsPolicy, parsePreferHeader, parsePriorityHeader, parseRetryAfterHeader, parseRobotsMetaTag, parseUserAgent, parseVaryHeader, parseXContentTypeOptionsHeader, parseXRobotsTag, scoreSecurityHeaders, searchHeaders, searchStatusCodes, splitSitemap, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue, validateManifest, validateRobotsTxt, validateSitemap } from '../chunk-KWS4ZCYG.js';
2
2
  import '../chunk-MLKGABMK.js';
@@ -3027,6 +3027,100 @@ function getEmojiByCategory(category) {
3027
3027
  function getEmojiCategories() {
3028
3028
  return Array.from(new Set(EMOJI_TABLE.map((e) => e.category)));
3029
3029
  }
3030
+ var WORDY_PHRASES = [
3031
+ { phrase: "due to the fact that", suggestion: "because" },
3032
+ { phrase: "in spite of the fact that", suggestion: "although" },
3033
+ { phrase: "despite the fact that", suggestion: "although" },
3034
+ { phrase: "in order to", suggestion: "to" },
3035
+ { phrase: "for the purpose of", suggestion: "for" },
3036
+ { phrase: "in the event that", suggestion: "if" },
3037
+ { phrase: "in the near future", suggestion: "soon" },
3038
+ { phrase: "at this point in time", suggestion: "now" },
3039
+ { phrase: "at the present time", suggestion: "now" },
3040
+ { phrase: "on a daily basis", suggestion: "daily" },
3041
+ { phrase: "on a regular basis", suggestion: "regularly" },
3042
+ { phrase: "in a timely manner", suggestion: "promptly" },
3043
+ { phrase: "with regard to", suggestion: "regarding" },
3044
+ { phrase: "with respect to", suggestion: "regarding" },
3045
+ { phrase: "in regards to", suggestion: "regarding" },
3046
+ { phrase: "with the exception of", suggestion: "except" },
3047
+ { phrase: "in close proximity to", suggestion: "near" },
3048
+ { phrase: "take into consideration", suggestion: "consider" },
3049
+ { phrase: "give consideration to", suggestion: "consider" },
3050
+ { phrase: "make a decision", suggestion: "decide" },
3051
+ { phrase: "is able to", suggestion: "can" },
3052
+ { phrase: "are able to", suggestion: "can" },
3053
+ { phrase: "a large number of", suggestion: "many" },
3054
+ { phrase: "a majority of", suggestion: "most" },
3055
+ { phrase: "each and every", suggestion: "each" },
3056
+ { phrase: "first and foremost", suggestion: "first" },
3057
+ { phrase: "last but not least", suggestion: "finally" },
3058
+ { phrase: "null and void", suggestion: "void" },
3059
+ { phrase: "whether or not", suggestion: "whether" },
3060
+ { phrase: "the reason why", suggestion: "the reason" },
3061
+ { phrase: "end result", suggestion: "result" },
3062
+ { phrase: "future plans", suggestion: "plans" },
3063
+ { phrase: "past history", suggestion: "history" },
3064
+ { phrase: "basic fundamentals", suggestion: "fundamentals" },
3065
+ { phrase: "absolutely essential", suggestion: "essential" },
3066
+ { phrase: "it is important to note that", suggestion: "(often removable)" },
3067
+ { phrase: "as a matter of fact", suggestion: "in fact" },
3068
+ { phrase: "in the process of", suggestion: "(often removable)" }
3069
+ ];
3070
+ function _wordyRegex(phrase) {
3071
+ const tokens = phrase.split(/\s+/).map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
3072
+ return new RegExp("\\b" + tokens.join("\\s+") + "\\b", "gi");
3073
+ }
3074
+ function detectWordyPhrases(text) {
3075
+ const totalWords = (text.match(/[A-Za-z0-9']+/g) ?? []).length;
3076
+ const matches = [];
3077
+ for (const entry of WORDY_PHRASES) {
3078
+ const re = _wordyRegex(entry.phrase);
3079
+ const indices = [];
3080
+ let m;
3081
+ while ((m = re.exec(text)) !== null) {
3082
+ indices.push(m.index);
3083
+ if (m.index === re.lastIndex) re.lastIndex++;
3084
+ }
3085
+ if (indices.length > 0) {
3086
+ matches.push({ phrase: entry.phrase, suggestion: entry.suggestion, count: indices.length, indices });
3087
+ }
3088
+ }
3089
+ matches.sort((a, b) => b.count - a.count || a.phrase.localeCompare(b.phrase));
3090
+ const totalMatches = matches.reduce((s, m) => s + m.count, 0);
3091
+ const density = totalWords > 0 ? Math.round(totalMatches / totalWords * 1e3) / 10 : 0;
3092
+ return { totalWords, totalMatches, density, matches };
3093
+ }
3094
+ var _OXFORD_CONJ_RE = /(,)?\s+\b(?:and|or)\b\s+/gi;
3095
+ function checkOxfordCommaConsistency(text) {
3096
+ const instances = [];
3097
+ _OXFORD_CONJ_RE.lastIndex = 0;
3098
+ let m;
3099
+ while ((m = _OXFORD_CONJ_RE.exec(text)) !== null) {
3100
+ const matchStart = m.index;
3101
+ const hasCommaBefore = !!m[1];
3102
+ let clauseStart = -1;
3103
+ for (const ch of [".", "!", "?", "\n"]) {
3104
+ const idx = text.lastIndexOf(ch, matchStart - 1);
3105
+ if (idx > clauseStart) clauseStart = idx;
3106
+ }
3107
+ clauseStart += 1;
3108
+ const clause = text.slice(clauseStart, matchStart);
3109
+ const commaCount = (clause.match(/,/g) ?? []).length;
3110
+ if (commaCount < 1) continue;
3111
+ const snippetStart = Math.max(clauseStart, matchStart - 60);
3112
+ const afterConjEnd = _OXFORD_CONJ_RE.lastIndex;
3113
+ const tail = text.slice(afterConjEnd);
3114
+ const boundaryOffset = tail.search(/[.!?\n,]/);
3115
+ const snippetEnd = boundaryOffset === -1 ? Math.min(text.length, afterConjEnd + 40) : afterConjEnd + boundaryOffset;
3116
+ const snippet = text.slice(snippetStart, snippetEnd).trim();
3117
+ instances.push({ snippet, hasOxfordComma: hasCommaBefore, index: matchStart });
3118
+ }
3119
+ const withOxfordComma = instances.filter((i) => i.hasOxfordComma).length;
3120
+ const withoutOxfordComma = instances.length - withOxfordComma;
3121
+ const consistent = withOxfordComma === 0 || withoutOxfordComma === 0;
3122
+ return { totalLists: instances.length, withOxfordComma, withoutOxfordComma, consistent, instances };
3123
+ }
3030
3124
 
3031
3125
  exports.CASE_FORMATS = CASE_FORMATS;
3032
3126
  exports.DEFAULT_CONVERT_OPTIONS = DEFAULT_CONVERT_OPTIONS;
@@ -3042,6 +3136,7 @@ exports.applyOp = applyOp;
3042
3136
  exports.applyOps = applyOps;
3043
3137
  exports.calculateStringDistance = calculateStringDistance;
3044
3138
  exports.centerText = centerText;
3139
+ exports.checkOxfordCommaConsistency = checkOxfordCommaConsistency;
3045
3140
  exports.convertAll = convertAll;
3046
3141
  exports.convertCase = convertCase;
3047
3142
  exports.countWords = countWords;
@@ -3050,6 +3145,7 @@ exports.csvToMarkdown = csvToMarkdown;
3050
3145
  exports.detectDelimiter = detectDelimiter;
3051
3146
  exports.detectFillerWords = detectFillerWords;
3052
3147
  exports.detectPassiveVoice = detectPassiveVoice;
3148
+ exports.detectWordyPhrases = detectWordyPhrases;
3053
3149
  exports.diffLines = diffLines;
3054
3150
  exports.diffLinesSimple = diffLinesSimple;
3055
3151
  exports.diffStats = diffStats;
@@ -1 +1 @@
1
- export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DiffFile, e as DiffHunk, f as DiffLine, g as DiffResult, h as DiffType, i as DiffViewerLine, E as EMOJI_TABLE, j as ESCAPE_MODES, k as EmojiEntry, l as EscapeMode, F as FillerCategory, m as FillerMatch, n as FillerWordResult, K as KeywordDensityEntry, o as KeywordDensityOptions, p as KeywordDensityResult, L as LINE_OPS, q as LineOp, r as LineType, s as LoremUnit, M as MORSE_CODE, u as MarkdownResult, v as MorseOptions, P as ParsedDiff, w as ParsedTable, x as PassiveVoiceMatch, y as PassiveVoiceResult, z as PassiveVoiceSentence, R as ReadabilityResult, B as ReadabilityScore, S as SentenceLengthBucket, G as SentenceLengthDistribution, H as SlugSeparator, I as StringDistanceMode, J as StringDistanceResult, T as TableOptions, N as TextAnalysis, W as WordCountResult, O as addBorder, Q as analyzeKeywordDensity, U as analyzeSentenceLengths, V as analyzeText, X as applyOp, Y as applyOps, Z as calculateStringDistance, _ as centerText, $ as convertAll, a0 as convertCase, a1 as countWords, a2 as csvToHtml, a3 as csvToMarkdown, a4 as detectDelimiter, a5 as detectFillerWords, a6 as detectPassiveVoice, a7 as diffLines, a8 as diffLinesSimple, a9 as diffStats, aa as escapeAll, ab as escapeString, ac as extractHeadings, ad as formatReadingTime, ae as generate, af as generateDiff, ag as generateHtmlTable, ah as generateMarkdownTable, ai as generateParagraphs, aj as generateSentences, ak as generateWords, al as getAvailableFonts, am as getEmojiByCategory, an as getEmojiByChar, ao as getEmojiByShortcode, ap as getEmojiCategories, aq as getMorseForChar, ar as getMorseTiming, as as htmlToMarkdown, at as isValidMorse, au as markdownToHtml, av as morseToText, aw as numberToOrdinal, ax as numberToRoman, ay as numberToWords, az as ordinalWords, aA as parseDiff, aB as parseTableData, aC as readabilityScore, aD as renderMarkdown, aE as romanToNumber, aF as scoreReadability, aG as searchEmoji, aH as sentenceCount, aI as slugify, aJ as slugifyAll, aK as syllableCount, aL as textToAscii, aM as textToMorse, aN as unescapeString, aO as wordFrequency } from '../text-DWUcY8H1.cjs';
1
+ export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DiffFile, e as DiffHunk, f as DiffLine, g as DiffResult, h as DiffType, i as DiffViewerLine, E as EMOJI_TABLE, j as ESCAPE_MODES, k as EmojiEntry, l as EscapeMode, F as FillerCategory, m as FillerMatch, n as FillerWordResult, K as KeywordDensityEntry, o as KeywordDensityOptions, p as KeywordDensityResult, L as LINE_OPS, q as LineOp, r as LineType, s as LoremUnit, M as MORSE_CODE, u as MarkdownResult, v as MorseOptions, O as OxfordCommaInstance, w as OxfordCommaResult, P as ParsedDiff, x as ParsedTable, y as PassiveVoiceMatch, z as PassiveVoiceResult, B as PassiveVoiceSentence, R as ReadabilityResult, G as ReadabilityScore, S as SentenceLengthBucket, H as SentenceLengthDistribution, I as SlugSeparator, J as StringDistanceMode, N as StringDistanceResult, T as TableOptions, Q as TextAnalysis, W as WordCountResult, U as WordyPhraseMatch, V as WordyPhraseResult, X as addBorder, Y as analyzeKeywordDensity, Z as analyzeSentenceLengths, _ as analyzeText, $ as applyOp, a0 as applyOps, a1 as calculateStringDistance, a2 as centerText, a3 as checkOxfordCommaConsistency, a4 as convertAll, a5 as convertCase, a6 as countWords, a7 as csvToHtml, a8 as csvToMarkdown, a9 as detectDelimiter, aa as detectFillerWords, ab as detectPassiveVoice, ac as detectWordyPhrases, ad as diffLines, ae as diffLinesSimple, af as diffStats, ag as escapeAll, ah as escapeString, ai as extractHeadings, aj as formatReadingTime, ak as generate, al as generateDiff, am as generateHtmlTable, an as generateMarkdownTable, ao as generateParagraphs, ap as generateSentences, aq as generateWords, ar as getAvailableFonts, as as getEmojiByCategory, at as getEmojiByChar, au as getEmojiByShortcode, av as getEmojiCategories, aw as getMorseForChar, ax as getMorseTiming, ay as htmlToMarkdown, az as isValidMorse, aA as markdownToHtml, aB as morseToText, aC as numberToOrdinal, aD as numberToRoman, aE as numberToWords, aF as ordinalWords, aG as parseDiff, aH as parseTableData, aI as readabilityScore, aJ as renderMarkdown, aK as romanToNumber, aL as scoreReadability, aM as searchEmoji, aN as sentenceCount, aO as slugify, aP as slugifyAll, aQ as syllableCount, aR as textToAscii, aS as textToMorse, aT as unescapeString, aU as wordFrequency } from '../text-CNn3whZA.cjs';
@@ -1 +1 @@
1
- export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DiffFile, e as DiffHunk, f as DiffLine, g as DiffResult, h as DiffType, i as DiffViewerLine, E as EMOJI_TABLE, j as ESCAPE_MODES, k as EmojiEntry, l as EscapeMode, F as FillerCategory, m as FillerMatch, n as FillerWordResult, K as KeywordDensityEntry, o as KeywordDensityOptions, p as KeywordDensityResult, L as LINE_OPS, q as LineOp, r as LineType, s as LoremUnit, M as MORSE_CODE, u as MarkdownResult, v as MorseOptions, P as ParsedDiff, w as ParsedTable, x as PassiveVoiceMatch, y as PassiveVoiceResult, z as PassiveVoiceSentence, R as ReadabilityResult, B as ReadabilityScore, S as SentenceLengthBucket, G as SentenceLengthDistribution, H as SlugSeparator, I as StringDistanceMode, J as StringDistanceResult, T as TableOptions, N as TextAnalysis, W as WordCountResult, O as addBorder, Q as analyzeKeywordDensity, U as analyzeSentenceLengths, V as analyzeText, X as applyOp, Y as applyOps, Z as calculateStringDistance, _ as centerText, $ as convertAll, a0 as convertCase, a1 as countWords, a2 as csvToHtml, a3 as csvToMarkdown, a4 as detectDelimiter, a5 as detectFillerWords, a6 as detectPassiveVoice, a7 as diffLines, a8 as diffLinesSimple, a9 as diffStats, aa as escapeAll, ab as escapeString, ac as extractHeadings, ad as formatReadingTime, ae as generate, af as generateDiff, ag as generateHtmlTable, ah as generateMarkdownTable, ai as generateParagraphs, aj as generateSentences, ak as generateWords, al as getAvailableFonts, am as getEmojiByCategory, an as getEmojiByChar, ao as getEmojiByShortcode, ap as getEmojiCategories, aq as getMorseForChar, ar as getMorseTiming, as as htmlToMarkdown, at as isValidMorse, au as markdownToHtml, av as morseToText, aw as numberToOrdinal, ax as numberToRoman, ay as numberToWords, az as ordinalWords, aA as parseDiff, aB as parseTableData, aC as readabilityScore, aD as renderMarkdown, aE as romanToNumber, aF as scoreReadability, aG as searchEmoji, aH as sentenceCount, aI as slugify, aJ as slugifyAll, aK as syllableCount, aL as textToAscii, aM as textToMorse, aN as unescapeString, aO as wordFrequency } from '../text-DWUcY8H1.js';
1
+ export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DiffFile, e as DiffHunk, f as DiffLine, g as DiffResult, h as DiffType, i as DiffViewerLine, E as EMOJI_TABLE, j as ESCAPE_MODES, k as EmojiEntry, l as EscapeMode, F as FillerCategory, m as FillerMatch, n as FillerWordResult, K as KeywordDensityEntry, o as KeywordDensityOptions, p as KeywordDensityResult, L as LINE_OPS, q as LineOp, r as LineType, s as LoremUnit, M as MORSE_CODE, u as MarkdownResult, v as MorseOptions, O as OxfordCommaInstance, w as OxfordCommaResult, P as ParsedDiff, x as ParsedTable, y as PassiveVoiceMatch, z as PassiveVoiceResult, B as PassiveVoiceSentence, R as ReadabilityResult, G as ReadabilityScore, S as SentenceLengthBucket, H as SentenceLengthDistribution, I as SlugSeparator, J as StringDistanceMode, N as StringDistanceResult, T as TableOptions, Q as TextAnalysis, W as WordCountResult, U as WordyPhraseMatch, V as WordyPhraseResult, X as addBorder, Y as analyzeKeywordDensity, Z as analyzeSentenceLengths, _ as analyzeText, $ as applyOp, a0 as applyOps, a1 as calculateStringDistance, a2 as centerText, a3 as checkOxfordCommaConsistency, a4 as convertAll, a5 as convertCase, a6 as countWords, a7 as csvToHtml, a8 as csvToMarkdown, a9 as detectDelimiter, aa as detectFillerWords, ab as detectPassiveVoice, ac as detectWordyPhrases, ad as diffLines, ae as diffLinesSimple, af as diffStats, ag as escapeAll, ah as escapeString, ai as extractHeadings, aj as formatReadingTime, ak as generate, al as generateDiff, am as generateHtmlTable, an as generateMarkdownTable, ao as generateParagraphs, ap as generateSentences, aq as generateWords, ar as getAvailableFonts, as as getEmojiByCategory, at as getEmojiByChar, au as getEmojiByShortcode, av as getEmojiCategories, aw as getMorseForChar, ax as getMorseTiming, ay as htmlToMarkdown, az as isValidMorse, aA as markdownToHtml, aB as morseToText, aC as numberToOrdinal, aD as numberToRoman, aE as numberToWords, aF as ordinalWords, aG as parseDiff, aH as parseTableData, aI as readabilityScore, aJ as renderMarkdown, aK as romanToNumber, aL as scoreReadability, aM as searchEmoji, aN as sentenceCount, aO as slugify, aP as slugifyAll, aQ as syllableCount, aR as textToAscii, aS as textToMorse, aT as unescapeString, aU as wordFrequency } from '../text-CNn3whZA.js';
@@ -1,2 +1,2 @@
1
- export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, unescapeString, wordFrequency } from '../chunk-P7TXG7CI.js';
1
+ export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, checkOxfordCommaConsistency, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, detectWordyPhrases, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, unescapeString, wordFrequency } from '../chunk-QVOK3BXM.js';
2
2
  import '../chunk-MLKGABMK.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@utilix-tech/sdk",
3
- "version": "0.75.0",
3
+ "version": "0.77.0",
4
4
  "description": "154+ developer utility tools for Node.js: JSON, encoding, hashing, color, CSS, network and more. Runs locally, no API key required.",
5
5
  "author": "Utilix <hello@utilix.tech>",
6
6
  "license": "MIT",