@utilix-tech/sdk 0.83.0 → 0.85.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +2 -2
  3. package/dist/{chunk-IEPWZERQ.js → chunk-6EJVNQSY.js} +38 -1
  4. package/dist/{chunk-OFLNVDNX.js → chunk-BCISWFVJ.js} +50 -1
  5. package/dist/{chunk-QVOK3BXM.js → chunk-FB6CCFR5.js} +77 -1
  6. package/dist/{chunk-KXUHXQFO.js → chunk-RMXZMYSG.js} +107 -1
  7. package/dist/{code-COUhffgE.d.cts → code-mkKV7BQ4.d.cts} +33 -2
  8. package/dist/{code-COUhffgE.d.ts → code-mkKV7BQ4.d.ts} +33 -2
  9. package/dist/index.cjs +268 -0
  10. package/dist/index.d.cts +4 -4
  11. package/dist/index.d.ts +4 -4
  12. package/dist/index.js +4 -4
  13. package/dist/{text-CNn3whZA.d.ts → text-xY5MJwr0.d.cts} +34 -2
  14. package/dist/{text-CNn3whZA.d.cts → text-xY5MJwr0.d.ts} +34 -2
  15. package/dist/{time-KqJjdqII.d.cts → time-VMAy_SrV.d.cts} +22 -2
  16. package/dist/{time-KqJjdqII.d.ts → time-VMAy_SrV.d.ts} +22 -2
  17. package/dist/tools/code.cjs +106 -0
  18. package/dist/tools/code.d.cts +1 -1
  19. package/dist/tools/code.d.ts +1 -1
  20. package/dist/tools/code.js +1 -1
  21. package/dist/tools/text.cjs +76 -0
  22. package/dist/tools/text.d.cts +1 -1
  23. package/dist/tools/text.d.ts +1 -1
  24. package/dist/tools/text.js +1 -1
  25. package/dist/tools/time.cjs +37 -0
  26. package/dist/tools/time.d.cts +1 -1
  27. package/dist/tools/time.d.ts +1 -1
  28. package/dist/tools/time.js +1 -1
  29. package/dist/tools/units.cjs +49 -0
  30. package/dist/tools/units.d.cts +1 -1
  31. package/dist/tools/units.d.ts +1 -1
  32. package/dist/tools/units.js +1 -1
  33. package/dist/{units-D7YRRwei.d.cts → units-DwIvTP-X.d.cts} +27 -2
  34. package/dist/{units-D7YRRwei.d.ts → units-DwIvTP-X.d.ts} +27 -2
  35. package/package.json +1 -1
@@ -6,6 +6,7 @@
6
6
  * - date-diff : parseDate, humanizeDiff, diffDates, COMMON_DATE_PRESETS
7
7
  * - timezone : TIMEZONES, getTimezoneOffset, convertTime, formatInTimezone, getAllZonesForTime
8
8
  * - cron-next : parseCronExpression, getNextRuns, formatRunDate, getRunInterval
9
+ * - cron-overlap-detector : findCronOverlaps
9
10
  * - iso8601-duration : parseIso8601Duration, formatIso8601Duration
10
11
  */
11
12
  interface TimestampResult {
@@ -112,6 +113,22 @@ declare function getNextRuns(expr: string, count?: number, fromDate?: Date): Dat
112
113
  };
113
114
  declare function formatRunDate(date: Date, timezone?: string): string;
114
115
  declare function getRunInterval(dates: Date[]): string;
116
+ interface CronOverlap {
117
+ date: Date;
118
+ expressionIndexes: number[];
119
+ }
120
+ interface CronOverlapResult {
121
+ overlaps: CronOverlap[];
122
+ windowDays: number;
123
+ truncated: boolean;
124
+ }
125
+ /**
126
+ * Walk minute-by-minute over `windowDays` and flag every minute where two or
127
+ * more of the given 5-field cron expressions fire at once.
128
+ */
129
+ declare function findCronOverlaps(expressions: string[], windowDays?: number, fromDate?: Date): CronOverlapResult | {
130
+ error: string;
131
+ };
115
132
  interface DurationParseResult {
116
133
  input: string;
117
134
  years: number;
@@ -158,6 +175,8 @@ declare const time_COMMON_CRONS: typeof COMMON_CRONS;
158
175
  declare const time_COMMON_DATE_PRESETS: typeof COMMON_DATE_PRESETS;
159
176
  type time_CronField = CronField;
160
177
  type time_CronNextField = CronNextField;
178
+ type time_CronOverlap = CronOverlap;
179
+ type time_CronOverlapResult = CronOverlapResult;
161
180
  type time_CronResult = CronResult;
162
181
  type time_DateDiffResult = DateDiffResult;
163
182
  type time_DurationFormatResult = DurationFormatResult;
@@ -168,6 +187,7 @@ type time_TimestampResult = TimestampResult;
168
187
  type time_TimezoneEntry = TimezoneEntry;
169
188
  declare const time_convertTime: typeof convertTime;
170
189
  declare const time_diffDates: typeof diffDates;
190
+ declare const time_findCronOverlaps: typeof findCronOverlaps;
171
191
  declare const time_formatInTimezone: typeof formatInTimezone;
172
192
  declare const time_formatIso8601Duration: typeof formatIso8601Duration;
173
193
  declare const time_formatRelative: typeof formatRelative;
@@ -185,7 +205,7 @@ declare const time_parseCronExpression: typeof parseCronExpression;
185
205
  declare const time_parseDate: typeof parseDate;
186
206
  declare const time_parseIso8601Duration: typeof parseIso8601Duration;
187
207
  declare namespace time {
188
- export { time_COMMON_CRONS as COMMON_CRONS, time_COMMON_DATE_PRESETS as COMMON_DATE_PRESETS, type time_CronField as CronField, type time_CronNextField as CronNextField, type time_CronResult as CronResult, type time_DateDiffResult as DateDiffResult, type time_DurationFormatResult as DurationFormatResult, type time_DurationParseResult as DurationParseResult, type time_ParsedCron as ParsedCron, time_TIMEZONES as TIMEZONES, type time_TimestampResult as TimestampResult, type time_TimezoneEntry as TimezoneEntry, time_convertTime as convertTime, time_diffDates as diffDates, time_formatInTimezone as formatInTimezone, time_formatIso8601Duration as formatIso8601Duration, time_formatRelative as formatRelative, time_formatRunDate as formatRunDate, time_fromIsoString as fromIsoString, time_fromUnix as fromUnix, time_getAllZonesForTime as getAllZonesForTime, time_getNextRuns as getNextRuns, time_getNow as getNow, time_getRunInterval as getRunInterval, time_getTimezoneOffset as getTimezoneOffset, time_humanizeDiff as humanizeDiff, time_parseCron as parseCron, time_parseCronExpression as parseCronExpression, time_parseDate as parseDate, time_parseIso8601Duration as parseIso8601Duration };
208
+ export { time_COMMON_CRONS as COMMON_CRONS, time_COMMON_DATE_PRESETS as COMMON_DATE_PRESETS, type time_CronField as CronField, type time_CronNextField as CronNextField, type time_CronOverlap as CronOverlap, type time_CronOverlapResult as CronOverlapResult, type time_CronResult as CronResult, type time_DateDiffResult as DateDiffResult, type time_DurationFormatResult as DurationFormatResult, type time_DurationParseResult as DurationParseResult, type time_ParsedCron as ParsedCron, time_TIMEZONES as TIMEZONES, type time_TimestampResult as TimestampResult, type time_TimezoneEntry as TimezoneEntry, time_convertTime as convertTime, time_diffDates as diffDates, time_findCronOverlaps as findCronOverlaps, time_formatInTimezone as formatInTimezone, time_formatIso8601Duration as formatIso8601Duration, time_formatRelative as formatRelative, time_formatRunDate as formatRunDate, time_fromIsoString as fromIsoString, time_fromUnix as fromUnix, time_getAllZonesForTime as getAllZonesForTime, time_getNextRuns as getNextRuns, time_getNow as getNow, time_getRunInterval as getRunInterval, time_getTimezoneOffset as getTimezoneOffset, time_humanizeDiff as humanizeDiff, time_parseCron as parseCron, time_parseCronExpression as parseCronExpression, time_parseDate as parseDate, time_parseIso8601Duration as parseIso8601Duration };
189
209
  }
190
210
 
191
- export { parseIso8601Duration as A, COMMON_CRONS as C, type DateDiffResult as D, type ParsedCron as P, TIMEZONES as T, COMMON_DATE_PRESETS as a, type CronField as b, type CronNextField as c, type CronResult as d, type DurationFormatResult as e, type DurationParseResult as f, type TimestampResult as g, type TimezoneEntry as h, convertTime as i, diffDates as j, formatInTimezone as k, formatIso8601Duration as l, formatRelative as m, formatRunDate as n, fromIsoString as o, fromUnix as p, getAllZonesForTime as q, getNextRuns as r, getNow as s, time as t, getRunInterval as u, getTimezoneOffset as v, humanizeDiff as w, parseCron as x, parseCronExpression as y, parseDate as z };
211
+ export { parseCron as A, parseCronExpression as B, COMMON_CRONS as C, type DateDiffResult as D, parseDate as E, parseIso8601Duration as F, type ParsedCron as P, TIMEZONES as T, COMMON_DATE_PRESETS as a, type CronField as b, type CronNextField as c, type CronOverlap as d, type CronOverlapResult as e, type CronResult as f, type DurationFormatResult as g, type DurationParseResult as h, type TimestampResult as i, type TimezoneEntry as j, convertTime as k, diffDates as l, findCronOverlaps as m, formatInTimezone as n, formatIso8601Duration as o, formatRelative as p, formatRunDate as q, fromIsoString as r, fromUnix as s, time as t, getAllZonesForTime as u, getNextRuns as v, getNow as w, getRunInterval as x, getTimezoneOffset as y, humanizeDiff as z };
@@ -1801,6 +1801,111 @@ function normalizeRef(ref) {
1801
1801
  const tagPart = parsed.digest ? `@${parsed.digest}` : parsed.tag ? `:${parsed.tag}` : "";
1802
1802
  return `${parsed.registry}/${ns}${parsed.repository}${tagPart}`;
1803
1803
  }
1804
+ function _parseDockerfileInstructions(content) {
1805
+ const rawLines = content.replace(/\r\n/g, "\n").split("\n");
1806
+ const instructions = [];
1807
+ let buffer = "";
1808
+ let bufferStartLine = 0;
1809
+ for (let i = 0; i < rawLines.length; i++) {
1810
+ const lineNo = i + 1;
1811
+ const line = rawLines[i];
1812
+ const trimmed = line.trim();
1813
+ if (buffer === "") {
1814
+ if (trimmed === "" || trimmed.startsWith("#")) continue;
1815
+ bufferStartLine = lineNo;
1816
+ buffer = line.trimEnd();
1817
+ } else {
1818
+ buffer += "\n" + line.trimEnd();
1819
+ }
1820
+ if (buffer.endsWith("\\")) {
1821
+ buffer = buffer.slice(0, -1);
1822
+ continue;
1823
+ }
1824
+ const match = buffer.trim().match(/^([A-Za-z]+)\s*([\s\S]*)$/);
1825
+ if (match) {
1826
+ instructions.push({ instruction: match[1].toUpperCase(), args: match[2].trim(), line: bufferStartLine });
1827
+ }
1828
+ buffer = "";
1829
+ }
1830
+ return instructions;
1831
+ }
1832
+ var _DOCKERFILE_TAR_RE = /\.(tar(\.(gz|bz2|xz))?|tgz|tbz2|txz)$/i;
1833
+ function lintDockerfile(content) {
1834
+ if (!content || !content.trim()) return { error: "Dockerfile content is required" };
1835
+ const instructions = _parseDockerfileInstructions(content);
1836
+ if (instructions.length === 0) return { error: "No Dockerfile instructions found" };
1837
+ const fromInstructions = instructions.filter((i) => i.instruction === "FROM");
1838
+ if (fromInstructions.length === 0) return { error: "No FROM instruction found; this does not look like a valid Dockerfile" };
1839
+ const stageNames = /* @__PURE__ */ new Set();
1840
+ const stages = fromInstructions.map((inst, idx) => {
1841
+ const asMatch = inst.args.match(/^(\S+)(?:\s+AS\s+(\S+))?/i);
1842
+ const baseImage = asMatch ? asMatch[1] : inst.args.split(/\s+/)[0];
1843
+ const name = asMatch && asMatch[2] ? asMatch[2] : null;
1844
+ if (name) stageNames.add(name.toLowerCase());
1845
+ return { index: idx, name, baseImage, fromLine: inst.line };
1846
+ });
1847
+ const findings = [];
1848
+ for (const stage of stages) {
1849
+ const base = stage.baseImage;
1850
+ if (base.toLowerCase() === "scratch") continue;
1851
+ if (stageNames.has(base.toLowerCase())) continue;
1852
+ const withoutDigest = base.split("@")[0];
1853
+ const hasTag = withoutDigest.includes(":");
1854
+ const tag = hasTag ? withoutDigest.split(":").pop() : null;
1855
+ if (!hasTag) {
1856
+ findings.push({
1857
+ rule: "unpinned-base-image",
1858
+ severity: "warning",
1859
+ line: stage.fromLine,
1860
+ message: `FROM ${base} has no tag, so it resolves to ":latest", which can silently change what gets built on a future run. Pin an explicit version tag instead.`
1861
+ });
1862
+ } else if (tag === "latest") {
1863
+ findings.push({
1864
+ rule: "unpinned-base-image",
1865
+ severity: "warning",
1866
+ line: stage.fromLine,
1867
+ message: `FROM ${base} is explicitly pinned to the "latest" tag, which is a moving target rather than a fixed version. Pin an explicit version tag instead.`
1868
+ });
1869
+ }
1870
+ }
1871
+ const finalStage = stages[stages.length - 1];
1872
+ const finalStageInstructions = instructions.filter((i) => i.line >= finalStage.fromLine);
1873
+ if (!finalStageInstructions.some((i) => i.instruction === "WORKDIR")) {
1874
+ findings.push({
1875
+ rule: "missing-workdir",
1876
+ severity: "warning",
1877
+ line: finalStage.fromLine,
1878
+ message: 'No WORKDIR instruction in the final stage, so RUN/CMD/ENTRYPOINT execute from "/" by default. Set an explicit WORKDIR.'
1879
+ });
1880
+ }
1881
+ if (!finalStageInstructions.some((i) => i.instruction === "USER")) {
1882
+ findings.push({
1883
+ rule: "running-as-root",
1884
+ severity: "warning",
1885
+ line: finalStage.fromLine,
1886
+ message: "No USER instruction in the final stage, so the container runs as root by default. Add a non-root USER unless root is genuinely required."
1887
+ });
1888
+ }
1889
+ for (const inst of instructions) {
1890
+ if (inst.instruction !== "ADD") continue;
1891
+ const parts = inst.args.split(/\s+/).filter(Boolean).filter((p) => !p.startsWith("--"));
1892
+ if (parts.length < 2) continue;
1893
+ const sources = parts.slice(0, -1);
1894
+ for (const src of sources) {
1895
+ const isUrl = /^https?:\/\//i.test(src);
1896
+ const isTar = _DOCKERFILE_TAR_RE.test(src);
1897
+ if (!isUrl && !isTar) {
1898
+ findings.push({
1899
+ rule: "add-vs-copy",
1900
+ severity: "info",
1901
+ line: inst.line,
1902
+ message: `ADD ${src} copies a local file/directory, not a URL or an auto-extracting archive. Use COPY instead, since ADD's extra behavior (remote fetch, tar auto-extract) doesn't apply here.`
1903
+ });
1904
+ }
1905
+ }
1906
+ }
1907
+ return { findings, stages };
1908
+ }
1804
1909
  function removeJsComments(code) {
1805
1910
  let result = "";
1806
1911
  let i = 0;
@@ -4295,6 +4400,7 @@ exports.getJsStats = getJsStats;
4295
4400
  exports.getMethodColor = getMethodColor;
4296
4401
  exports.isValidTag = isValidTag;
4297
4402
  exports.lintConventionalCommit = lintConventionalCommit;
4403
+ exports.lintDockerfile = lintDockerfile;
4298
4404
  exports.lookupMime = lookupMime;
4299
4405
  exports.minifyCss = minifyCss;
4300
4406
  exports.minifyGql = minifyGql;
@@ -1 +1 @@
1
- export { A as ALL_FLAGS, a as ApiEndpoint, b as ApiInfo, d as AriaIssue, e as AriaValidationResult, C as CHEATSHEET, f as CheatsheetEntry, g as CommitTrailer, h as CommitTrailerResult, i as ConnectionStringHost, j as ConnectionStringResult, k as ConventionalCommitFinding, l as ConventionalCommitFooter, m as ConventionalCommitOptions, n as ConventionalCommitParsed, o as ConventionalCommitResult, p as ConventionalCommitSeverity, q as CssResult, D as DEFAULT_COMMIT_TYPES, r as DependencyAuditDuplicate, s as DependencyAuditEntry, t as DependencyAuditIssue, u as DependencyAuditResult, v as DependencyRangeType, w as DependencySection, x as DockerImageRef, E as EditorConfigIssue, y as EditorConfigProperty, z as EditorConfigSection, B as EditorConfigValidationResult, F as EnvEntry, G as EnvParseResult, H as ExportsIssue, I as ExportsShape, J as ExportsValidationResult, K as FenceTagIssue, L as FenceTagIssueType, M as FenceValidationResult, N as GitCommandConfig, O as GitCommandResult, P as GitOperation, Q as GithubUrlInfo, R as GithubUrlType, S as GitignoreTestResult, T as GqlFormatResult, U as HtmlFormatResult, V as HtmlMinifyOptions, W as HtmlMinifyResult, X as JsMinifyOptions, Y as JsMinifyResult, Z as KNOWN_LANGUAGE_TAGS, _ as LinkReferenceDefinition, $ as LinkReferenceUsage, a0 as MIME_TABLE, a1 as MarkdownFootnoteDefinition, a2 as MarkdownFootnoteReference, a3 as MarkdownFootnoteResult, a4 as MarkdownLinkReferenceResult, a5 as MatchResult, a6 as MimeEntry, a7 as MimeLookupResult, a8 as OPERATIONS, a9 as ParsedSpec, aa as PlaceholderStyle, ab as RedosFinding, ac as RedosResult, ad as RedosSeverity, ae as RegexBackreferenceInfo, af as RegexError, ag as RegexFlag, ah as RegexGroupAnalysis, ai as RegexGroupInfo, aj as RegexGroupIssue, ak as RegexMatch, al as RegexResult, am as RegexSuccess, an as ResolvedLinkReference, ao as SQL_DEFAULT_OPTIONS, ap as Segment, aq as SpecVersion, ar as SqlDialect, as as SqlFormatOptions, at as SqlPlaceholder, au as SqlPlaceholderResult, av as SvgSpriteResult, aw as SvgSpriteSymbol, ax as TestPatternResult, ay as TsconfigIssue, az as TsconfigValidationResult, aA as analyzeRegexGroups, aB as auditDependencyRanges, aC as buildDockerPull, aD as buildDockerRun, aE as buildGitCommand, aF as collapseHtmlWhitespace, aG as collapseJsWhitespace, aH as countProperties, aI as countRules, aJ as countSqlPlaceholders, aK as detectDialect, aL as detectOperationType, aM as detectRedos, aN as envToExport, aO as envToJson, aP as extractMarkdownFootnotes, aQ as extractMarkdownLinkReferences, aR as extractSvgSpriteSymbols, aS as formatCss, aT as formatGql, aU as formatHtml, aV as formatSql, aW as getEndpointsByTag, aX as getHtmlStats, aY as getJsStats, aZ as getMethodColor, a_ as isValidTag, a$ as lintConventionalCommit, b0 as lookupMime, b1 as minifyCss, b2 as minifyGql, b3 as minifyHtml, b4 as minifyJs, b5 as minifySql, b6 as normalizeRef, b7 as parseCommitTrailers, b8 as parseConnectionString, b9 as parseDockerImage, ba as parseEnv, bb as parseGitCommand, bc as parseGithubUrl, bd as parseSpec, be as removeConsoleCalls, bf as removeEmptyAttributes, bg as removeHtmlComments, bh as removeJsComments, bi as removeRedundantAttributes, bj as searchCheatsheet, bk as searchEndpoints, bl as splitStatements, bm as testGitignorePatterns, bn as testPattern, bo as testRegex, bp as validateAria, bq as validateEditorConfig, br as validateEnvKey, bs as validateFenceLanguageTags, bt as validatePackageExports, bu as validateTsconfig } from '../code-COUhffgE.cjs';
1
+ export { A as ALL_FLAGS, a as ApiEndpoint, b as ApiInfo, d as AriaIssue, e as AriaValidationResult, C as CHEATSHEET, f as CheatsheetEntry, g as CommitTrailer, h as CommitTrailerResult, i as ConnectionStringHost, j as ConnectionStringResult, k as ConventionalCommitFinding, l as ConventionalCommitFooter, m as ConventionalCommitOptions, n as ConventionalCommitParsed, o as ConventionalCommitResult, p as ConventionalCommitSeverity, q as CssResult, D as DEFAULT_COMMIT_TYPES, r as DependencyAuditDuplicate, s as DependencyAuditEntry, t as DependencyAuditIssue, u as DependencyAuditResult, v as DependencyRangeType, w as DependencySection, x as DockerImageRef, y as DockerfileLintFinding, z as DockerfileLintResult, B as DockerfileStage, E as EditorConfigIssue, F as EditorConfigProperty, G as EditorConfigSection, H as EditorConfigValidationResult, I as EnvEntry, J as EnvParseResult, K as ExportsIssue, L as ExportsShape, M as ExportsValidationResult, N as FenceTagIssue, O as FenceTagIssueType, P as FenceValidationResult, Q as GitCommandConfig, R as GitCommandResult, S as GitOperation, T as GithubUrlInfo, U as GithubUrlType, V as GitignoreTestResult, W as GqlFormatResult, X as HtmlFormatResult, Y as HtmlMinifyOptions, Z as HtmlMinifyResult, _ as JsMinifyOptions, $ as JsMinifyResult, a0 as KNOWN_LANGUAGE_TAGS, a1 as LinkReferenceDefinition, a2 as LinkReferenceUsage, a3 as MIME_TABLE, a4 as MarkdownFootnoteDefinition, a5 as MarkdownFootnoteReference, a6 as MarkdownFootnoteResult, a7 as MarkdownLinkReferenceResult, a8 as MatchResult, a9 as MimeEntry, aa as MimeLookupResult, ab as OPERATIONS, ac as ParsedSpec, ad as PlaceholderStyle, ae as RedosFinding, af as RedosResult, ag as RedosSeverity, ah as RegexBackreferenceInfo, ai as RegexError, aj as RegexFlag, ak as RegexGroupAnalysis, al as RegexGroupInfo, am as RegexGroupIssue, an as RegexMatch, ao as RegexResult, ap as RegexSuccess, aq as ResolvedLinkReference, ar as SQL_DEFAULT_OPTIONS, as as Segment, at as SpecVersion, au as SqlDialect, av as SqlFormatOptions, aw as SqlPlaceholder, ax as SqlPlaceholderResult, ay as SvgSpriteResult, az as SvgSpriteSymbol, aA as TestPatternResult, aB as TsconfigIssue, aC as TsconfigValidationResult, aD as analyzeRegexGroups, aE as auditDependencyRanges, aF as buildDockerPull, aG as buildDockerRun, aH as buildGitCommand, aI as collapseHtmlWhitespace, aJ as collapseJsWhitespace, aK as countProperties, aL as countRules, aM as countSqlPlaceholders, aN as detectDialect, aO as detectOperationType, aP as detectRedos, aQ as envToExport, aR as envToJson, aS as extractMarkdownFootnotes, aT as extractMarkdownLinkReferences, aU as extractSvgSpriteSymbols, aV as formatCss, aW as formatGql, aX as formatHtml, aY as formatSql, aZ as getEndpointsByTag, a_ as getHtmlStats, a$ as getJsStats, b0 as getMethodColor, b1 as isValidTag, b2 as lintConventionalCommit, b3 as lintDockerfile, b4 as lookupMime, b5 as minifyCss, b6 as minifyGql, b7 as minifyHtml, b8 as minifyJs, b9 as minifySql, ba as normalizeRef, bb as parseCommitTrailers, bc as parseConnectionString, bd as parseDockerImage, be as parseEnv, bf as parseGitCommand, bg as parseGithubUrl, bh as parseSpec, bi as removeConsoleCalls, bj as removeEmptyAttributes, bk as removeHtmlComments, bl as removeJsComments, bm as removeRedundantAttributes, bn as searchCheatsheet, bo as searchEndpoints, bp as splitStatements, bq as testGitignorePatterns, br as testPattern, bs as testRegex, bt as validateAria, bu as validateEditorConfig, bv as validateEnvKey, bw as validateFenceLanguageTags, bx as validatePackageExports, by as validateTsconfig } from '../code-mkKV7BQ4.cjs';
@@ -1 +1 @@
1
- export { A as ALL_FLAGS, a as ApiEndpoint, b as ApiInfo, d as AriaIssue, e as AriaValidationResult, C as CHEATSHEET, f as CheatsheetEntry, g as CommitTrailer, h as CommitTrailerResult, i as ConnectionStringHost, j as ConnectionStringResult, k as ConventionalCommitFinding, l as ConventionalCommitFooter, m as ConventionalCommitOptions, n as ConventionalCommitParsed, o as ConventionalCommitResult, p as ConventionalCommitSeverity, q as CssResult, D as DEFAULT_COMMIT_TYPES, r as DependencyAuditDuplicate, s as DependencyAuditEntry, t as DependencyAuditIssue, u as DependencyAuditResult, v as DependencyRangeType, w as DependencySection, x as DockerImageRef, E as EditorConfigIssue, y as EditorConfigProperty, z as EditorConfigSection, B as EditorConfigValidationResult, F as EnvEntry, G as EnvParseResult, H as ExportsIssue, I as ExportsShape, J as ExportsValidationResult, K as FenceTagIssue, L as FenceTagIssueType, M as FenceValidationResult, N as GitCommandConfig, O as GitCommandResult, P as GitOperation, Q as GithubUrlInfo, R as GithubUrlType, S as GitignoreTestResult, T as GqlFormatResult, U as HtmlFormatResult, V as HtmlMinifyOptions, W as HtmlMinifyResult, X as JsMinifyOptions, Y as JsMinifyResult, Z as KNOWN_LANGUAGE_TAGS, _ as LinkReferenceDefinition, $ as LinkReferenceUsage, a0 as MIME_TABLE, a1 as MarkdownFootnoteDefinition, a2 as MarkdownFootnoteReference, a3 as MarkdownFootnoteResult, a4 as MarkdownLinkReferenceResult, a5 as MatchResult, a6 as MimeEntry, a7 as MimeLookupResult, a8 as OPERATIONS, a9 as ParsedSpec, aa as PlaceholderStyle, ab as RedosFinding, ac as RedosResult, ad as RedosSeverity, ae as RegexBackreferenceInfo, af as RegexError, ag as RegexFlag, ah as RegexGroupAnalysis, ai as RegexGroupInfo, aj as RegexGroupIssue, ak as RegexMatch, al as RegexResult, am as RegexSuccess, an as ResolvedLinkReference, ao as SQL_DEFAULT_OPTIONS, ap as Segment, aq as SpecVersion, ar as SqlDialect, as as SqlFormatOptions, at as SqlPlaceholder, au as SqlPlaceholderResult, av as SvgSpriteResult, aw as SvgSpriteSymbol, ax as TestPatternResult, ay as TsconfigIssue, az as TsconfigValidationResult, aA as analyzeRegexGroups, aB as auditDependencyRanges, aC as buildDockerPull, aD as buildDockerRun, aE as buildGitCommand, aF as collapseHtmlWhitespace, aG as collapseJsWhitespace, aH as countProperties, aI as countRules, aJ as countSqlPlaceholders, aK as detectDialect, aL as detectOperationType, aM as detectRedos, aN as envToExport, aO as envToJson, aP as extractMarkdownFootnotes, aQ as extractMarkdownLinkReferences, aR as extractSvgSpriteSymbols, aS as formatCss, aT as formatGql, aU as formatHtml, aV as formatSql, aW as getEndpointsByTag, aX as getHtmlStats, aY as getJsStats, aZ as getMethodColor, a_ as isValidTag, a$ as lintConventionalCommit, b0 as lookupMime, b1 as minifyCss, b2 as minifyGql, b3 as minifyHtml, b4 as minifyJs, b5 as minifySql, b6 as normalizeRef, b7 as parseCommitTrailers, b8 as parseConnectionString, b9 as parseDockerImage, ba as parseEnv, bb as parseGitCommand, bc as parseGithubUrl, bd as parseSpec, be as removeConsoleCalls, bf as removeEmptyAttributes, bg as removeHtmlComments, bh as removeJsComments, bi as removeRedundantAttributes, bj as searchCheatsheet, bk as searchEndpoints, bl as splitStatements, bm as testGitignorePatterns, bn as testPattern, bo as testRegex, bp as validateAria, bq as validateEditorConfig, br as validateEnvKey, bs as validateFenceLanguageTags, bt as validatePackageExports, bu as validateTsconfig } from '../code-COUhffgE.js';
1
+ export { A as ALL_FLAGS, a as ApiEndpoint, b as ApiInfo, d as AriaIssue, e as AriaValidationResult, C as CHEATSHEET, f as CheatsheetEntry, g as CommitTrailer, h as CommitTrailerResult, i as ConnectionStringHost, j as ConnectionStringResult, k as ConventionalCommitFinding, l as ConventionalCommitFooter, m as ConventionalCommitOptions, n as ConventionalCommitParsed, o as ConventionalCommitResult, p as ConventionalCommitSeverity, q as CssResult, D as DEFAULT_COMMIT_TYPES, r as DependencyAuditDuplicate, s as DependencyAuditEntry, t as DependencyAuditIssue, u as DependencyAuditResult, v as DependencyRangeType, w as DependencySection, x as DockerImageRef, y as DockerfileLintFinding, z as DockerfileLintResult, B as DockerfileStage, E as EditorConfigIssue, F as EditorConfigProperty, G as EditorConfigSection, H as EditorConfigValidationResult, I as EnvEntry, J as EnvParseResult, K as ExportsIssue, L as ExportsShape, M as ExportsValidationResult, N as FenceTagIssue, O as FenceTagIssueType, P as FenceValidationResult, Q as GitCommandConfig, R as GitCommandResult, S as GitOperation, T as GithubUrlInfo, U as GithubUrlType, V as GitignoreTestResult, W as GqlFormatResult, X as HtmlFormatResult, Y as HtmlMinifyOptions, Z as HtmlMinifyResult, _ as JsMinifyOptions, $ as JsMinifyResult, a0 as KNOWN_LANGUAGE_TAGS, a1 as LinkReferenceDefinition, a2 as LinkReferenceUsage, a3 as MIME_TABLE, a4 as MarkdownFootnoteDefinition, a5 as MarkdownFootnoteReference, a6 as MarkdownFootnoteResult, a7 as MarkdownLinkReferenceResult, a8 as MatchResult, a9 as MimeEntry, aa as MimeLookupResult, ab as OPERATIONS, ac as ParsedSpec, ad as PlaceholderStyle, ae as RedosFinding, af as RedosResult, ag as RedosSeverity, ah as RegexBackreferenceInfo, ai as RegexError, aj as RegexFlag, ak as RegexGroupAnalysis, al as RegexGroupInfo, am as RegexGroupIssue, an as RegexMatch, ao as RegexResult, ap as RegexSuccess, aq as ResolvedLinkReference, ar as SQL_DEFAULT_OPTIONS, as as Segment, at as SpecVersion, au as SqlDialect, av as SqlFormatOptions, aw as SqlPlaceholder, ax as SqlPlaceholderResult, ay as SvgSpriteResult, az as SvgSpriteSymbol, aA as TestPatternResult, aB as TsconfigIssue, aC as TsconfigValidationResult, aD as analyzeRegexGroups, aE as auditDependencyRanges, aF as buildDockerPull, aG as buildDockerRun, aH as buildGitCommand, aI as collapseHtmlWhitespace, aJ as collapseJsWhitespace, aK as countProperties, aL as countRules, aM as countSqlPlaceholders, aN as detectDialect, aO as detectOperationType, aP as detectRedos, aQ as envToExport, aR as envToJson, aS as extractMarkdownFootnotes, aT as extractMarkdownLinkReferences, aU as extractSvgSpriteSymbols, aV as formatCss, aW as formatGql, aX as formatHtml, aY as formatSql, aZ as getEndpointsByTag, a_ as getHtmlStats, a$ as getJsStats, b0 as getMethodColor, b1 as isValidTag, b2 as lintConventionalCommit, b3 as lintDockerfile, b4 as lookupMime, b5 as minifyCss, b6 as minifyGql, b7 as minifyHtml, b8 as minifyJs, b9 as minifySql, ba as normalizeRef, bb as parseCommitTrailers, bc as parseConnectionString, bd as parseDockerImage, be as parseEnv, bf as parseGitCommand, bg as parseGithubUrl, bh as parseSpec, bi as removeConsoleCalls, bj as removeEmptyAttributes, bk as removeHtmlComments, bl as removeJsComments, bm as removeRedundantAttributes, bn as searchCheatsheet, bo as searchEndpoints, bp as splitStatements, bq as testGitignorePatterns, br as testPattern, bs as testRegex, bt as validateAria, bu as validateEditorConfig, bv as validateEnvKey, bw as validateFenceLanguageTags, bx as validatePackageExports, by as validateTsconfig } from '../code-mkKV7BQ4.js';
@@ -1,2 +1,2 @@
1
- export { ALL_FLAGS, CHEATSHEET, DEFAULT_COMMIT_TYPES, KNOWN_LANGUAGE_TAGS, MIME_TABLE, OPERATIONS, SQL_DEFAULT_OPTIONS, analyzeRegexGroups, auditDependencyRanges, buildDockerPull, buildDockerRun, buildGitCommand, collapseHtmlWhitespace, collapseJsWhitespace, countProperties, countRules, countSqlPlaceholders, detectDialect, detectOperationType, detectRedos, envToExport, envToJson, extractMarkdownFootnotes, extractMarkdownLinkReferences, extractSvgSpriteSymbols, formatCss, formatGql, formatHtml, formatSql, getEndpointsByTag, getHtmlStats, getJsStats, getMethodColor, isValidTag, lintConventionalCommit, lookupMime, minifyCss, minifyGql, minifyHtml, minifyJs, minifySql, normalizeRef, parseCommitTrailers, parseConnectionString, parseDockerImage, parseEnv, parseGitCommand, parseGithubUrl, parseSpec, removeConsoleCalls, removeEmptyAttributes, removeHtmlComments, removeJsComments, removeRedundantAttributes, searchCheatsheet, searchEndpoints, splitStatements, testGitignorePatterns, testPattern, testRegex, validateAria, validateEditorConfig, validateEnvKey, validateFenceLanguageTags, validatePackageExports, validateTsconfig } from '../chunk-KXUHXQFO.js';
1
+ export { ALL_FLAGS, CHEATSHEET, DEFAULT_COMMIT_TYPES, KNOWN_LANGUAGE_TAGS, MIME_TABLE, OPERATIONS, SQL_DEFAULT_OPTIONS, analyzeRegexGroups, auditDependencyRanges, buildDockerPull, buildDockerRun, buildGitCommand, collapseHtmlWhitespace, collapseJsWhitespace, countProperties, countRules, countSqlPlaceholders, detectDialect, detectOperationType, detectRedos, envToExport, envToJson, extractMarkdownFootnotes, extractMarkdownLinkReferences, extractSvgSpriteSymbols, formatCss, formatGql, formatHtml, formatSql, getEndpointsByTag, getHtmlStats, getJsStats, getMethodColor, isValidTag, lintConventionalCommit, lintDockerfile, lookupMime, minifyCss, minifyGql, minifyHtml, minifyJs, minifySql, normalizeRef, parseCommitTrailers, parseConnectionString, parseDockerImage, parseEnv, parseGitCommand, parseGithubUrl, parseSpec, removeConsoleCalls, removeEmptyAttributes, removeHtmlComments, removeJsComments, removeRedundantAttributes, searchCheatsheet, searchEndpoints, splitStatements, testGitignorePatterns, testPattern, testRegex, validateAria, validateEditorConfig, validateEnvKey, validateFenceLanguageTags, validatePackageExports, validateTsconfig } from '../chunk-RMXZMYSG.js';
2
2
  import '../chunk-MLKGABMK.js';
@@ -3121,6 +3121,81 @@ function checkOxfordCommaConsistency(text) {
3121
3121
  const consistent = withOxfordComma === 0 || withoutOxfordComma === 0;
3122
3122
  return { totalLists: instances.length, withOxfordComma, withoutOxfordComma, consistent, instances };
3123
3123
  }
3124
+ function dashContextSnippet(text, index, matchLen) {
3125
+ const start = Math.max(0, index - 20);
3126
+ const end = Math.min(text.length, index + matchLen + 20);
3127
+ const body = text.slice(start, end).replace(/\s+/g, " ").trim();
3128
+ return (start > 0 ? "\u2026" : "") + body + (end < text.length ? "\u2026" : "");
3129
+ }
3130
+ function checkDashUsage(text) {
3131
+ const issues = [];
3132
+ const enDashCount = (text.match(/–/g) ?? []).length;
3133
+ const hyphenCount = (text.match(/-/g) ?? []).length;
3134
+ const doubleHyphenMatches = [...text.matchAll(/-{2,}/g)];
3135
+ for (const m of doubleHyphenMatches) {
3136
+ const index = m.index ?? 0;
3137
+ issues.push({
3138
+ type: "double-hyphen",
3139
+ index,
3140
+ context: dashContextSnippet(text, index, m[0].length),
3141
+ message: `Found ${m[0].length} consecutive hyphens ("${m[0]}"); likely meant to be an em dash (\u2014) or en dash (\u2013).`
3142
+ });
3143
+ }
3144
+ const spacedHyphenMatches = [...text.matchAll(/(?<=\S) - (?=\S)/g)];
3145
+ for (const m of spacedHyphenMatches) {
3146
+ const index = m.index ?? 0;
3147
+ issues.push({
3148
+ type: "spaced-hyphen",
3149
+ index,
3150
+ context: dashContextSnippet(text, index, m[0].length),
3151
+ message: "A hyphen surrounded by spaces usually signals an intended em dash (\u2014), not a hyphenated compound word."
3152
+ });
3153
+ }
3154
+ const emDashOccurrences = [...text.matchAll(/—/g)];
3155
+ let spacedEm = 0;
3156
+ let unspacedEm = 0;
3157
+ for (const m of emDashOccurrences) {
3158
+ const idx = m.index ?? 0;
3159
+ const before = text[idx - 1];
3160
+ const after = text[idx + 1];
3161
+ if (before === " " && after === " ") spacedEm++;
3162
+ else if (before !== " " && after !== " ") unspacedEm++;
3163
+ }
3164
+ let dominantEmDashStyle = "none";
3165
+ let emDashSpacingConsistent = true;
3166
+ if (emDashOccurrences.length > 0) {
3167
+ dominantEmDashStyle = spacedEm >= unspacedEm ? "spaced" : "unspaced";
3168
+ emDashSpacingConsistent = spacedEm === 0 || unspacedEm === 0;
3169
+ if (!emDashSpacingConsistent) {
3170
+ for (const m of emDashOccurrences) {
3171
+ const idx = m.index ?? 0;
3172
+ const before = text[idx - 1];
3173
+ const after = text[idx + 1];
3174
+ const isSpaced = before === " " && after === " ";
3175
+ const matchesDominant = dominantEmDashStyle === "spaced" ? isSpaced : !isSpaced;
3176
+ if (!matchesDominant) {
3177
+ issues.push({
3178
+ type: "inconsistent-em-dash-spacing",
3179
+ index: idx,
3180
+ context: dashContextSnippet(text, idx, 1),
3181
+ message: `This em dash is ${isSpaced ? "spaced" : "unspaced"}, but the document mostly uses ${dominantEmDashStyle} em dashes.`
3182
+ });
3183
+ }
3184
+ }
3185
+ }
3186
+ }
3187
+ issues.sort((a, b) => a.index - b.index);
3188
+ return {
3189
+ emDashCount: emDashOccurrences.length,
3190
+ enDashCount,
3191
+ hyphenCount,
3192
+ doubleHyphenCount: doubleHyphenMatches.length,
3193
+ spacedHyphenCount: spacedHyphenMatches.length,
3194
+ emDashSpacingConsistent,
3195
+ dominantEmDashStyle,
3196
+ issues
3197
+ };
3198
+ }
3124
3199
 
3125
3200
  exports.CASE_FORMATS = CASE_FORMATS;
3126
3201
  exports.DEFAULT_CONVERT_OPTIONS = DEFAULT_CONVERT_OPTIONS;
@@ -3136,6 +3211,7 @@ exports.applyOp = applyOp;
3136
3211
  exports.applyOps = applyOps;
3137
3212
  exports.calculateStringDistance = calculateStringDistance;
3138
3213
  exports.centerText = centerText;
3214
+ exports.checkDashUsage = checkDashUsage;
3139
3215
  exports.checkOxfordCommaConsistency = checkOxfordCommaConsistency;
3140
3216
  exports.convertAll = convertAll;
3141
3217
  exports.convertCase = convertCase;
@@ -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, 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
+ export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DashIssue, e as DashIssueType, f as DashUsageResult, g as DiffFile, h as DiffHunk, i as DiffLine, j as DiffResult, k as DiffType, l as DiffViewerLine, E as EMOJI_TABLE, m as ESCAPE_MODES, n as EmojiEntry, o as EscapeMode, F as FillerCategory, p as FillerMatch, q as FillerWordResult, K as KeywordDensityEntry, r as KeywordDensityOptions, s as KeywordDensityResult, L as LINE_OPS, u as LineOp, v as LineType, w as LoremUnit, M as MORSE_CODE, x as MarkdownResult, y as MorseOptions, O as OxfordCommaInstance, z as OxfordCommaResult, P as ParsedDiff, B as ParsedTable, G as PassiveVoiceMatch, H as PassiveVoiceResult, I as PassiveVoiceSentence, R as ReadabilityResult, J as ReadabilityScore, S as SentenceLengthBucket, N as SentenceLengthDistribution, Q as SlugSeparator, T as StringDistanceMode, U as StringDistanceResult, V as TableOptions, W as TextAnalysis, X as WordCountResult, Y as WordyPhraseMatch, Z as WordyPhraseResult, _ as addBorder, $ as analyzeKeywordDensity, a0 as analyzeSentenceLengths, a1 as analyzeText, a2 as applyOp, a3 as applyOps, a4 as calculateStringDistance, a5 as centerText, a6 as checkDashUsage, a7 as checkOxfordCommaConsistency, a8 as convertAll, a9 as convertCase, aa as countWords, ab as csvToHtml, ac as csvToMarkdown, ad as detectDelimiter, ae as detectFillerWords, af as detectPassiveVoice, ag as detectWordyPhrases, ah as diffLines, ai as diffLinesSimple, aj as diffStats, ak as escapeAll, al as escapeString, am as extractHeadings, an as formatReadingTime, ao as generate, ap as generateDiff, aq as generateHtmlTable, ar as generateMarkdownTable, as as generateParagraphs, at as generateSentences, au as generateWords, av as getAvailableFonts, aw as getEmojiByCategory, ax as getEmojiByChar, ay as getEmojiByShortcode, az as getEmojiCategories, aA as getMorseForChar, aB as getMorseTiming, aC as htmlToMarkdown, aD as isValidMorse, aE as markdownToHtml, aF as morseToText, aG as numberToOrdinal, aH as numberToRoman, aI as numberToWords, aJ as ordinalWords, aK as parseDiff, aL as parseTableData, aM as readabilityScore, aN as renderMarkdown, aO as romanToNumber, aP as scoreReadability, aQ as searchEmoji, aR as sentenceCount, aS as slugify, aT as slugifyAll, aU as syllableCount, aV as textToAscii, aW as textToMorse, aX as unescapeString, aY as wordFrequency } from '../text-xY5MJwr0.cjs';
@@ -1 +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, 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
+ export { A as AsciiFont, a as AsciiOptions, C as CASE_FORMATS, b as CaseFormat, c as ConvertOptions, D as DEFAULT_CONVERT_OPTIONS, d as DashIssue, e as DashIssueType, f as DashUsageResult, g as DiffFile, h as DiffHunk, i as DiffLine, j as DiffResult, k as DiffType, l as DiffViewerLine, E as EMOJI_TABLE, m as ESCAPE_MODES, n as EmojiEntry, o as EscapeMode, F as FillerCategory, p as FillerMatch, q as FillerWordResult, K as KeywordDensityEntry, r as KeywordDensityOptions, s as KeywordDensityResult, L as LINE_OPS, u as LineOp, v as LineType, w as LoremUnit, M as MORSE_CODE, x as MarkdownResult, y as MorseOptions, O as OxfordCommaInstance, z as OxfordCommaResult, P as ParsedDiff, B as ParsedTable, G as PassiveVoiceMatch, H as PassiveVoiceResult, I as PassiveVoiceSentence, R as ReadabilityResult, J as ReadabilityScore, S as SentenceLengthBucket, N as SentenceLengthDistribution, Q as SlugSeparator, T as StringDistanceMode, U as StringDistanceResult, V as TableOptions, W as TextAnalysis, X as WordCountResult, Y as WordyPhraseMatch, Z as WordyPhraseResult, _ as addBorder, $ as analyzeKeywordDensity, a0 as analyzeSentenceLengths, a1 as analyzeText, a2 as applyOp, a3 as applyOps, a4 as calculateStringDistance, a5 as centerText, a6 as checkDashUsage, a7 as checkOxfordCommaConsistency, a8 as convertAll, a9 as convertCase, aa as countWords, ab as csvToHtml, ac as csvToMarkdown, ad as detectDelimiter, ae as detectFillerWords, af as detectPassiveVoice, ag as detectWordyPhrases, ah as diffLines, ai as diffLinesSimple, aj as diffStats, ak as escapeAll, al as escapeString, am as extractHeadings, an as formatReadingTime, ao as generate, ap as generateDiff, aq as generateHtmlTable, ar as generateMarkdownTable, as as generateParagraphs, at as generateSentences, au as generateWords, av as getAvailableFonts, aw as getEmojiByCategory, ax as getEmojiByChar, ay as getEmojiByShortcode, az as getEmojiCategories, aA as getMorseForChar, aB as getMorseTiming, aC as htmlToMarkdown, aD as isValidMorse, aE as markdownToHtml, aF as morseToText, aG as numberToOrdinal, aH as numberToRoman, aI as numberToWords, aJ as ordinalWords, aK as parseDiff, aL as parseTableData, aM as readabilityScore, aN as renderMarkdown, aO as romanToNumber, aP as scoreReadability, aQ as searchEmoji, aR as sentenceCount, aS as slugify, aT as slugifyAll, aU as syllableCount, aV as textToAscii, aW as textToMorse, aX as unescapeString, aY as wordFrequency } from '../text-xY5MJwr0.js';
@@ -1,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, 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';
1
+ export { CASE_FORMATS, DEFAULT_CONVERT_OPTIONS, EMOJI_TABLE, ESCAPE_MODES, LINE_OPS, MORSE_CODE, addBorder, analyzeKeywordDensity, analyzeSentenceLengths, analyzeText, applyOp, applyOps, calculateStringDistance, centerText, checkDashUsage, checkOxfordCommaConsistency, convertAll, convertCase, countWords, csvToHtml, csvToMarkdown, detectDelimiter, detectFillerWords, detectPassiveVoice, detectWordyPhrases, diffLines, diffLinesSimple, diffStats, escapeAll, escapeString, extractHeadings, formatReadingTime, generate, generateDiff, generateHtmlTable, generateMarkdownTable, generateParagraphs, generateSentences, generateWords, getAvailableFonts, getEmojiByCategory, getEmojiByChar, getEmojiByShortcode, getEmojiCategories, getMorseForChar, getMorseTiming, htmlToMarkdown, isValidMorse, markdownToHtml, morseToText, numberToOrdinal, numberToRoman, numberToWords, ordinalWords, parseDiff, parseTableData, readabilityScore, renderMarkdown, romanToNumber, scoreReadability, searchEmoji, sentenceCount, slugify, slugifyAll, syllableCount, textToAscii, textToMorse, unescapeString, wordFrequency } from '../chunk-FB6CCFR5.js';
2
2
  import '../chunk-MLKGABMK.js';
@@ -659,6 +659,42 @@ function getRunInterval(dates) {
659
659
  const days = Math.round(diffMins / 1440);
660
660
  return `Every ${days} days`;
661
661
  }
662
+ var MAX_CRON_OVERLAPS = 200;
663
+ function findCronOverlaps(expressions, windowDays = 30, fromDate) {
664
+ if (expressions.length < 2) return { error: "Provide at least two cron expressions to check for overlaps" };
665
+ if (expressions.length > 10) return { error: "Provide 10 or fewer cron expressions" };
666
+ if (windowDays < 1 || windowDays > 365) return { error: "windowDays must be between 1 and 365" };
667
+ const parsedList = [];
668
+ for (let i = 0; i < expressions.length; i++) {
669
+ const parsed = parseCronExpression(expressions[i]);
670
+ if (typeof parsed === "object" && "error" in parsed) {
671
+ return { error: `Expression ${i + 1} ("${expressions[i]}"): ${parsed.error}` };
672
+ }
673
+ parsedList.push(parsed);
674
+ }
675
+ const start = fromDate ? new Date(fromDate) : /* @__PURE__ */ new Date();
676
+ const cursor = new Date(start);
677
+ cursor.setSeconds(0, 0);
678
+ cursor.setMinutes(cursor.getMinutes() + 1);
679
+ const endTime = cursor.getTime() + windowDays * 24 * 60 * 60 * 1e3;
680
+ const overlaps = [];
681
+ let truncated = false;
682
+ while (cursor.getTime() < endTime) {
683
+ const matched = [];
684
+ for (let i = 0; i < parsedList.length; i++) {
685
+ if (matchesCron(cursor, parsedList[i])) matched.push(i);
686
+ }
687
+ if (matched.length >= 2) {
688
+ if (overlaps.length >= MAX_CRON_OVERLAPS) {
689
+ truncated = true;
690
+ break;
691
+ }
692
+ overlaps.push({ date: new Date(cursor), expressionIndexes: matched });
693
+ }
694
+ cursor.setMinutes(cursor.getMinutes() + 1);
695
+ }
696
+ return { overlaps, windowDays, truncated };
697
+ }
662
698
  var DURATION_SECONDS_PER_YEAR = 365 * 86400;
663
699
  var DURATION_SECONDS_PER_MONTH = 30 * 86400;
664
700
  function humanizeDurationParts(parts) {
@@ -756,6 +792,7 @@ exports.COMMON_DATE_PRESETS = COMMON_DATE_PRESETS;
756
792
  exports.TIMEZONES = TIMEZONES;
757
793
  exports.convertTime = convertTime;
758
794
  exports.diffDates = diffDates;
795
+ exports.findCronOverlaps = findCronOverlaps;
759
796
  exports.formatInTimezone = formatInTimezone;
760
797
  exports.formatIso8601Duration = formatIso8601Duration;
761
798
  exports.formatRelative = formatRelative;
@@ -1 +1 @@
1
- export { C as COMMON_CRONS, a as COMMON_DATE_PRESETS, b as CronField, c as CronNextField, d as CronResult, D as DateDiffResult, e as DurationFormatResult, f as DurationParseResult, P as ParsedCron, T as TIMEZONES, g as TimestampResult, h as TimezoneEntry, i as convertTime, j as diffDates, k as formatInTimezone, l as formatIso8601Duration, m as formatRelative, n as formatRunDate, o as fromIsoString, p as fromUnix, q as getAllZonesForTime, r as getNextRuns, s as getNow, u as getRunInterval, v as getTimezoneOffset, w as humanizeDiff, x as parseCron, y as parseCronExpression, z as parseDate, A as parseIso8601Duration } from '../time-KqJjdqII.cjs';
1
+ export { C as COMMON_CRONS, a as COMMON_DATE_PRESETS, b as CronField, c as CronNextField, d as CronOverlap, e as CronOverlapResult, f as CronResult, D as DateDiffResult, g as DurationFormatResult, h as DurationParseResult, P as ParsedCron, T as TIMEZONES, i as TimestampResult, j as TimezoneEntry, k as convertTime, l as diffDates, m as findCronOverlaps, n as formatInTimezone, o as formatIso8601Duration, p as formatRelative, q as formatRunDate, r as fromIsoString, s as fromUnix, u as getAllZonesForTime, v as getNextRuns, w as getNow, x as getRunInterval, y as getTimezoneOffset, z as humanizeDiff, A as parseCron, B as parseCronExpression, E as parseDate, F as parseIso8601Duration } from '../time-VMAy_SrV.cjs';
@@ -1 +1 @@
1
- export { C as COMMON_CRONS, a as COMMON_DATE_PRESETS, b as CronField, c as CronNextField, d as CronResult, D as DateDiffResult, e as DurationFormatResult, f as DurationParseResult, P as ParsedCron, T as TIMEZONES, g as TimestampResult, h as TimezoneEntry, i as convertTime, j as diffDates, k as formatInTimezone, l as formatIso8601Duration, m as formatRelative, n as formatRunDate, o as fromIsoString, p as fromUnix, q as getAllZonesForTime, r as getNextRuns, s as getNow, u as getRunInterval, v as getTimezoneOffset, w as humanizeDiff, x as parseCron, y as parseCronExpression, z as parseDate, A as parseIso8601Duration } from '../time-KqJjdqII.js';
1
+ export { C as COMMON_CRONS, a as COMMON_DATE_PRESETS, b as CronField, c as CronNextField, d as CronOverlap, e as CronOverlapResult, f as CronResult, D as DateDiffResult, g as DurationFormatResult, h as DurationParseResult, P as ParsedCron, T as TIMEZONES, i as TimestampResult, j as TimezoneEntry, k as convertTime, l as diffDates, m as findCronOverlaps, n as formatInTimezone, o as formatIso8601Duration, p as formatRelative, q as formatRunDate, r as fromIsoString, s as fromUnix, u as getAllZonesForTime, v as getNextRuns, w as getNow, x as getRunInterval, y as getTimezoneOffset, z as humanizeDiff, A as parseCron, B as parseCronExpression, E as parseDate, F as parseIso8601Duration } from '../time-VMAy_SrV.js';
@@ -1,2 +1,2 @@
1
- export { COMMON_CRONS, COMMON_DATE_PRESETS, TIMEZONES, convertTime, diffDates, formatInTimezone, formatIso8601Duration, formatRelative, formatRunDate, fromIsoString, fromUnix, getAllZonesForTime, getNextRuns, getNow, getRunInterval, getTimezoneOffset, humanizeDiff, parseCron, parseCronExpression, parseDate, parseIso8601Duration } from '../chunk-IEPWZERQ.js';
1
+ export { COMMON_CRONS, COMMON_DATE_PRESETS, TIMEZONES, convertTime, diffDates, findCronOverlaps, formatInTimezone, formatIso8601Duration, formatRelative, formatRunDate, fromIsoString, fromUnix, getAllZonesForTime, getNextRuns, getNow, getRunInterval, getTimezoneOffset, humanizeDiff, parseCron, parseCronExpression, parseDate, parseIso8601Duration } from '../chunk-6EJVNQSY.js';
2
2
  import '../chunk-MLKGABMK.js';
@@ -2695,6 +2695,54 @@ function calculateRealRateOfReturn(input) {
2695
2695
  solvedFor
2696
2696
  };
2697
2697
  }
2698
+ var CREDIT_CARD_MIN_PAYMENT_MAX_MONTHS = 1200;
2699
+ function calculateCreditCardMinimumPayment(balance, aprPercent, minPaymentPercent, minPaymentFloor = 0) {
2700
+ if (!Number.isFinite(balance) || balance <= 0) {
2701
+ return { error: "balance must be a finite number greater than zero" };
2702
+ }
2703
+ if (!Number.isFinite(aprPercent) || aprPercent < 0) {
2704
+ return { error: "aprPercent must be a finite, non-negative number" };
2705
+ }
2706
+ if (!Number.isFinite(minPaymentPercent) || minPaymentPercent <= 0) {
2707
+ return { error: "minPaymentPercent must be a finite number greater than zero" };
2708
+ }
2709
+ if (!Number.isFinite(minPaymentFloor) || minPaymentFloor < 0) {
2710
+ return { error: "minPaymentFloor must be a finite, non-negative number" };
2711
+ }
2712
+ const round22 = (n) => Math.round(n * 100) / 100;
2713
+ const monthlyRate = aprPercent / 100 / 12;
2714
+ let bal = balance;
2715
+ let totalInterestPaid = 0;
2716
+ let totalPaid = 0;
2717
+ let firstMonthPayment = 0;
2718
+ let finalMonthPayment = 0;
2719
+ let month = 0;
2720
+ while (bal > 5e-3 && month < CREDIT_CARD_MIN_PAYMENT_MAX_MONTHS) {
2721
+ month++;
2722
+ const interest = bal * monthlyRate;
2723
+ bal += interest;
2724
+ totalInterestPaid += interest;
2725
+ let payment = Math.max(bal * (minPaymentPercent / 100), minPaymentFloor);
2726
+ if (payment > bal) payment = bal;
2727
+ bal -= payment;
2728
+ totalPaid += payment;
2729
+ finalMonthPayment = round22(payment);
2730
+ if (month === 1) firstMonthPayment = round22(payment);
2731
+ }
2732
+ if (bal > 5e-3) {
2733
+ return {
2734
+ error: `balance cannot be paid off within ${CREDIT_CARD_MIN_PAYMENT_MAX_MONTHS} months at this minimum-payment formula; increase minPaymentPercent or minPaymentFloor`
2735
+ };
2736
+ }
2737
+ return {
2738
+ monthsToPayoff: month,
2739
+ yearsToPayoff: round22(month / 12),
2740
+ totalInterestPaid: round22(totalInterestPaid),
2741
+ totalPaid: round22(totalPaid),
2742
+ firstMonthPayment,
2743
+ finalMonthPayment
2744
+ };
2745
+ }
2698
2746
 
2699
2747
  exports.BASE_LABELS = BASE_LABELS;
2700
2748
  exports.BASE_PREFIXES = BASE_PREFIXES;
@@ -2721,6 +2769,7 @@ exports.calculateCashRounding = calculateCashRounding;
2721
2769
  exports.calculateCdMaturity = calculateCdMaturity;
2722
2770
  exports.calculateChange = calculateChange;
2723
2771
  exports.calculateCompoundInterest = calculateCompoundInterest;
2772
+ exports.calculateCreditCardMinimumPayment = calculateCreditCardMinimumPayment;
2724
2773
  exports.calculateCreditUtilization = calculateCreditUtilization;
2725
2774
  exports.calculateDebtToIncomeRatio = calculateDebtToIncomeRatio;
2726
2775
  exports.calculateDepreciationSchedule = calculateDepreciationSchedule;
@@ -1 +1 @@
1
- export { A as AmortizationRow, a as AprApyDirection, b as AprApyResult, c as AspectRatioResult, B as BASE_LABELS, d as BASE_PREFIXES, e as BYTE_UNITS, f as BarcodeFormat, g as BarcodeValidationResult, h as BaseConvertResult, i as BlendedLoanRateResult, j as BreakEvenInput, k as BreakEvenResult, l as ByteConvertResult, m as ByteUnit, C as COMMON_CURRENCIES, n as COMMON_LOCALES, o as COMMON_PERMISSIONS, p as COMMON_RATIOS, q as COMMON_SIZES, r as COMMON_TAX_RATES, s as COMMON_TIP_PERCENTAGES, t as COMMON_VIEWPORTS, v as CardValidationResult, w as CashBreakdownResult, x as CashChangeResult, y as CashDenominationItem, z as CashRoundingMode, D as CashRoundingResult, E as CdMaturityResult, F as CompareUnitPricesResult, G as CompoundInterestResult, H as CompoundYearRow, I as CreditAccountInput, J as CreditAccountResult, K as CreditUtilizationResult, L as DebtItemInput, M as DebtItemResult, N as DebtPayoffComparison, O as DebtPayoffInput, P as DebtPayoffPlanResult, Q as DebtPayoffScheduleEntry, R as DebtPayoffStrategy, S as DebtPayoffStrategyResult, T as DebtToIncomeRatioResult, U as DepreciationMethod, V as DepreciationResult, W as DepreciationYear, X as Dimensions, Y as DiscountField, Z as DiscountInput, _ as DiscountResult, $ as DtiTier, a0 as EmiResult, a1 as EmiTenureUnit, a2 as EmiYearlyBreakdownRow, a3 as ExtraPaymentPayoffResult, a4 as FilePermissions, a5 as FileSizeUnit, a6 as FormatOptions, a7 as FreelancerRateInput, a8 as FreelancerRateResult, a9 as GPA_GRADE_POINTS, aa as GpaCourse, ab as GpaCourseResult, ac as GpaResult, ad as IbanValidationResult, ae as IpConversion, af as IsbnFormat, ag as IsbnResult, ah as IsinValidationResult, ai as LoanBalanceInput, aj as LoanBalanceResult, ak as LoanPrepaymentPenaltyResult, al as LoanRefinanceResult, am as LoanResult, an as MarginMarkupField, ao as MarginMarkupInput, ap as MarginMarkupResult, aq as MortgagePointsResult, ar as MovingAveragePoint, as as MovingAverageResult, at as NotationStyle, au as NumberBase, av as PaybackPeriodInput, aw as PaybackPeriodResult, ax as PercentChangeDirection, ay as PercentageChangeResult, az as Permission, aA as PrepaymentPenaltyType, aB as PxConvertResult, aC as RealRateField, aD as RealRateOfReturnInput, aE as RealRateOfReturnResult, aF as RequiredBandwidthResult, aG as RoiInput, aH as RoiResult, aI as RuleOf72Direction, aJ as RuleOf72Result, aK as SavingsGoalInput, aL as SavingsGoalMode, aM as SavingsGoalResult, aN as SemverVersion, aO as SimpleInterestResult, aP as SubnetInfo, aQ as SuccessiveDiscountResult, aR as SuccessiveDiscountStep, aS as TaxDirection, aT as TaxEquivalentYieldDirection, aU as TaxEquivalentYieldResult, aV as TaxResult, aW as TimeValueDirection, aX as TimeValueResult, aY as TipSplitResult, aZ as TransferSpeedUnit, a_ as TransferTimeResult, a$ as USD_DENOMINATIONS, b0 as UnitPriceItem, b1 as UnitPriceResult, b2 as UtilizationTier, b3 as VideoBitrateInput, b4 as VideoBitrateMode, b5 as VideoBitrateResult, b6 as ViewportConvertResult, b7 as VinValidationResult, b8 as applySuccessiveDiscounts, b9 as autoFormat, ba as bumpVersion, bb as calcAspectRatio, bc as calcSubnet, bd as calculateBlendedLoanRate, be as calculateBreakEven, bf as calculateCashBreakdown, bg as calculateCashRounding, bh as calculateCdMaturity, bi as calculateChange, bj as calculateCompoundInterest, bk as calculateCreditUtilization, bl as calculateDebtToIncomeRatio, bm as calculateDepreciationSchedule, bn as calculateDiscount, bo as calculateEmi, bp as calculateExtraPaymentPayoff, bq as calculateFreelancerRate, br as calculateGpa, bs as calculateLoan, bt as calculateLoanPrepaymentPenalty, bu as calculateLoanRefinance, bv as calculateMarginMarkup, bw as calculateMortgagePoints, bx as calculateMovingAverages, by as calculatePaybackPeriod, bz as calculatePercentageChange, bA as calculateRealRateOfReturn, bB as calculateRequiredBandwidth, bC as calculateRoi, bD as calculateRuleOf72, bE as calculateSavingsGoal, bF as calculateSimpleInterest, bG as calculateTax, bH as calculateTaxEquivalentYield, bI as calculateTimeValue, bJ as calculateTipSplit, bK as calculateTransferTime, bL as calculateVideoBitrate, bM as compareSemver, bN as compareUnitPrices, bO as convert, bP as convertAprApy, bQ as convertBytes, bR as convertIp, bS as coverBox, bT as decimalToIp, bU as decimalToIpCidr, bV as describePermissions, bW as fitIntoBox, bX as formatNumber, bY as formatValue, bZ as formatVwValue, b_ as formatWithSeparator, b$ as gcd, c0 as ipFromBinary, c1 as ipFromDecimal, c2 as ipFromHex, c3 as ipToBinary, c4 as ipToDecimal, c5 as ipToDecimalCidr, c6 as ipToHex, c7 as ipToOctal, c8 as isValid, c9 as isValidCidr, ca as isValidIp, cb as isValidIpv4, cc as marginToMarkup, cd as markupToMargin, ce as octalToPermissions, cf as parseFileSize, cg as parseInput, ch as parseNumberString, ci as parseSemver, cj as permissionsToChmod, ck as permissionsToOctal, cl as permissionsToSymbolic, cm as planDebtPayoff, cn as ptToPx, co as pxToAll, cp as pxToViewport, cq as remToPx, cr as satisfiesRange, cs as scaleByHeight, ct as scaleByWidth, cu as sortVersions, cv as splitSubnet, cw as symbolicToPermissions, cx as validateBarcode, cy as validateCardNumber, cz as validateIban, cA as validateIsbn, cB as validateIsin, cC as validateVin, cD as viewportToPx } from '../units-D7YRRwei.cjs';
1
+ export { A as AmortizationRow, a as AprApyDirection, b as AprApyResult, c as AspectRatioResult, B as BASE_LABELS, d as BASE_PREFIXES, e as BYTE_UNITS, f as BarcodeFormat, g as BarcodeValidationResult, h as BaseConvertResult, i as BlendedLoanRateResult, j as BreakEvenInput, k as BreakEvenResult, l as ByteConvertResult, m as ByteUnit, C as COMMON_CURRENCIES, n as COMMON_LOCALES, o as COMMON_PERMISSIONS, p as COMMON_RATIOS, q as COMMON_SIZES, r as COMMON_TAX_RATES, s as COMMON_TIP_PERCENTAGES, t as COMMON_VIEWPORTS, v as CardValidationResult, w as CashBreakdownResult, x as CashChangeResult, y as CashDenominationItem, z as CashRoundingMode, D as CashRoundingResult, E as CdMaturityResult, F as CompareUnitPricesResult, G as CompoundInterestResult, H as CompoundYearRow, I as CreditAccountInput, J as CreditAccountResult, K as CreditCardMinimumPaymentResult, L as CreditUtilizationResult, M as DebtItemInput, N as DebtItemResult, O as DebtPayoffComparison, P as DebtPayoffInput, Q as DebtPayoffPlanResult, R as DebtPayoffScheduleEntry, S as DebtPayoffStrategy, T as DebtPayoffStrategyResult, U as DebtToIncomeRatioResult, V as DepreciationMethod, W as DepreciationResult, X as DepreciationYear, Y as Dimensions, Z as DiscountField, _ as DiscountInput, $ as DiscountResult, a0 as DtiTier, a1 as EmiResult, a2 as EmiTenureUnit, a3 as EmiYearlyBreakdownRow, a4 as ExtraPaymentPayoffResult, a5 as FilePermissions, a6 as FileSizeUnit, a7 as FormatOptions, a8 as FreelancerRateInput, a9 as FreelancerRateResult, aa as GPA_GRADE_POINTS, ab as GpaCourse, ac as GpaCourseResult, ad as GpaResult, ae as IbanValidationResult, af as IpConversion, ag as IsbnFormat, ah as IsbnResult, ai as IsinValidationResult, aj as LoanBalanceInput, ak as LoanBalanceResult, al as LoanPrepaymentPenaltyResult, am as LoanRefinanceResult, an as LoanResult, ao as MarginMarkupField, ap as MarginMarkupInput, aq as MarginMarkupResult, ar as MortgagePointsResult, as as MovingAveragePoint, at as MovingAverageResult, au as NotationStyle, av as NumberBase, aw as PaybackPeriodInput, ax as PaybackPeriodResult, ay as PercentChangeDirection, az as PercentageChangeResult, aA as Permission, aB as PrepaymentPenaltyType, aC as PxConvertResult, aD as RealRateField, aE as RealRateOfReturnInput, aF as RealRateOfReturnResult, aG as RequiredBandwidthResult, aH as RoiInput, aI as RoiResult, aJ as RuleOf72Direction, aK as RuleOf72Result, aL as SavingsGoalInput, aM as SavingsGoalMode, aN as SavingsGoalResult, aO as SemverVersion, aP as SimpleInterestResult, aQ as SubnetInfo, aR as SuccessiveDiscountResult, aS as SuccessiveDiscountStep, aT as TaxDirection, aU as TaxEquivalentYieldDirection, aV as TaxEquivalentYieldResult, aW as TaxResult, aX as TimeValueDirection, aY as TimeValueResult, aZ as TipSplitResult, a_ as TransferSpeedUnit, a$ as TransferTimeResult, b0 as USD_DENOMINATIONS, b1 as UnitPriceItem, b2 as UnitPriceResult, b3 as UtilizationTier, b4 as VideoBitrateInput, b5 as VideoBitrateMode, b6 as VideoBitrateResult, b7 as ViewportConvertResult, b8 as VinValidationResult, b9 as applySuccessiveDiscounts, ba as autoFormat, bb as bumpVersion, bc as calcAspectRatio, bd as calcSubnet, be as calculateBlendedLoanRate, bf as calculateBreakEven, bg as calculateCashBreakdown, bh as calculateCashRounding, bi as calculateCdMaturity, bj as calculateChange, bk as calculateCompoundInterest, bl as calculateCreditCardMinimumPayment, bm as calculateCreditUtilization, bn as calculateDebtToIncomeRatio, bo as calculateDepreciationSchedule, bp as calculateDiscount, bq as calculateEmi, br as calculateExtraPaymentPayoff, bs as calculateFreelancerRate, bt as calculateGpa, bu as calculateLoan, bv as calculateLoanPrepaymentPenalty, bw as calculateLoanRefinance, bx as calculateMarginMarkup, by as calculateMortgagePoints, bz as calculateMovingAverages, bA as calculatePaybackPeriod, bB as calculatePercentageChange, bC as calculateRealRateOfReturn, bD as calculateRequiredBandwidth, bE as calculateRoi, bF as calculateRuleOf72, bG as calculateSavingsGoal, bH as calculateSimpleInterest, bI as calculateTax, bJ as calculateTaxEquivalentYield, bK as calculateTimeValue, bL as calculateTipSplit, bM as calculateTransferTime, bN as calculateVideoBitrate, bO as compareSemver, bP as compareUnitPrices, bQ as convert, bR as convertAprApy, bS as convertBytes, bT as convertIp, bU as coverBox, bV as decimalToIp, bW as decimalToIpCidr, bX as describePermissions, bY as fitIntoBox, bZ as formatNumber, b_ as formatValue, b$ as formatVwValue, c0 as formatWithSeparator, c1 as gcd, c2 as ipFromBinary, c3 as ipFromDecimal, c4 as ipFromHex, c5 as ipToBinary, c6 as ipToDecimal, c7 as ipToDecimalCidr, c8 as ipToHex, c9 as ipToOctal, ca as isValid, cb as isValidCidr, cc as isValidIp, cd as isValidIpv4, ce as marginToMarkup, cf as markupToMargin, cg as octalToPermissions, ch as parseFileSize, ci as parseInput, cj as parseNumberString, ck as parseSemver, cl as permissionsToChmod, cm as permissionsToOctal, cn as permissionsToSymbolic, co as planDebtPayoff, cp as ptToPx, cq as pxToAll, cr as pxToViewport, cs as remToPx, ct as satisfiesRange, cu as scaleByHeight, cv as scaleByWidth, cw as sortVersions, cx as splitSubnet, cy as symbolicToPermissions, cz as validateBarcode, cA as validateCardNumber, cB as validateIban, cC as validateIsbn, cD as validateIsin, cE as validateVin, cF as viewportToPx } from '../units-DwIvTP-X.cjs';
@@ -1 +1 @@
1
- export { A as AmortizationRow, a as AprApyDirection, b as AprApyResult, c as AspectRatioResult, B as BASE_LABELS, d as BASE_PREFIXES, e as BYTE_UNITS, f as BarcodeFormat, g as BarcodeValidationResult, h as BaseConvertResult, i as BlendedLoanRateResult, j as BreakEvenInput, k as BreakEvenResult, l as ByteConvertResult, m as ByteUnit, C as COMMON_CURRENCIES, n as COMMON_LOCALES, o as COMMON_PERMISSIONS, p as COMMON_RATIOS, q as COMMON_SIZES, r as COMMON_TAX_RATES, s as COMMON_TIP_PERCENTAGES, t as COMMON_VIEWPORTS, v as CardValidationResult, w as CashBreakdownResult, x as CashChangeResult, y as CashDenominationItem, z as CashRoundingMode, D as CashRoundingResult, E as CdMaturityResult, F as CompareUnitPricesResult, G as CompoundInterestResult, H as CompoundYearRow, I as CreditAccountInput, J as CreditAccountResult, K as CreditUtilizationResult, L as DebtItemInput, M as DebtItemResult, N as DebtPayoffComparison, O as DebtPayoffInput, P as DebtPayoffPlanResult, Q as DebtPayoffScheduleEntry, R as DebtPayoffStrategy, S as DebtPayoffStrategyResult, T as DebtToIncomeRatioResult, U as DepreciationMethod, V as DepreciationResult, W as DepreciationYear, X as Dimensions, Y as DiscountField, Z as DiscountInput, _ as DiscountResult, $ as DtiTier, a0 as EmiResult, a1 as EmiTenureUnit, a2 as EmiYearlyBreakdownRow, a3 as ExtraPaymentPayoffResult, a4 as FilePermissions, a5 as FileSizeUnit, a6 as FormatOptions, a7 as FreelancerRateInput, a8 as FreelancerRateResult, a9 as GPA_GRADE_POINTS, aa as GpaCourse, ab as GpaCourseResult, ac as GpaResult, ad as IbanValidationResult, ae as IpConversion, af as IsbnFormat, ag as IsbnResult, ah as IsinValidationResult, ai as LoanBalanceInput, aj as LoanBalanceResult, ak as LoanPrepaymentPenaltyResult, al as LoanRefinanceResult, am as LoanResult, an as MarginMarkupField, ao as MarginMarkupInput, ap as MarginMarkupResult, aq as MortgagePointsResult, ar as MovingAveragePoint, as as MovingAverageResult, at as NotationStyle, au as NumberBase, av as PaybackPeriodInput, aw as PaybackPeriodResult, ax as PercentChangeDirection, ay as PercentageChangeResult, az as Permission, aA as PrepaymentPenaltyType, aB as PxConvertResult, aC as RealRateField, aD as RealRateOfReturnInput, aE as RealRateOfReturnResult, aF as RequiredBandwidthResult, aG as RoiInput, aH as RoiResult, aI as RuleOf72Direction, aJ as RuleOf72Result, aK as SavingsGoalInput, aL as SavingsGoalMode, aM as SavingsGoalResult, aN as SemverVersion, aO as SimpleInterestResult, aP as SubnetInfo, aQ as SuccessiveDiscountResult, aR as SuccessiveDiscountStep, aS as TaxDirection, aT as TaxEquivalentYieldDirection, aU as TaxEquivalentYieldResult, aV as TaxResult, aW as TimeValueDirection, aX as TimeValueResult, aY as TipSplitResult, aZ as TransferSpeedUnit, a_ as TransferTimeResult, a$ as USD_DENOMINATIONS, b0 as UnitPriceItem, b1 as UnitPriceResult, b2 as UtilizationTier, b3 as VideoBitrateInput, b4 as VideoBitrateMode, b5 as VideoBitrateResult, b6 as ViewportConvertResult, b7 as VinValidationResult, b8 as applySuccessiveDiscounts, b9 as autoFormat, ba as bumpVersion, bb as calcAspectRatio, bc as calcSubnet, bd as calculateBlendedLoanRate, be as calculateBreakEven, bf as calculateCashBreakdown, bg as calculateCashRounding, bh as calculateCdMaturity, bi as calculateChange, bj as calculateCompoundInterest, bk as calculateCreditUtilization, bl as calculateDebtToIncomeRatio, bm as calculateDepreciationSchedule, bn as calculateDiscount, bo as calculateEmi, bp as calculateExtraPaymentPayoff, bq as calculateFreelancerRate, br as calculateGpa, bs as calculateLoan, bt as calculateLoanPrepaymentPenalty, bu as calculateLoanRefinance, bv as calculateMarginMarkup, bw as calculateMortgagePoints, bx as calculateMovingAverages, by as calculatePaybackPeriod, bz as calculatePercentageChange, bA as calculateRealRateOfReturn, bB as calculateRequiredBandwidth, bC as calculateRoi, bD as calculateRuleOf72, bE as calculateSavingsGoal, bF as calculateSimpleInterest, bG as calculateTax, bH as calculateTaxEquivalentYield, bI as calculateTimeValue, bJ as calculateTipSplit, bK as calculateTransferTime, bL as calculateVideoBitrate, bM as compareSemver, bN as compareUnitPrices, bO as convert, bP as convertAprApy, bQ as convertBytes, bR as convertIp, bS as coverBox, bT as decimalToIp, bU as decimalToIpCidr, bV as describePermissions, bW as fitIntoBox, bX as formatNumber, bY as formatValue, bZ as formatVwValue, b_ as formatWithSeparator, b$ as gcd, c0 as ipFromBinary, c1 as ipFromDecimal, c2 as ipFromHex, c3 as ipToBinary, c4 as ipToDecimal, c5 as ipToDecimalCidr, c6 as ipToHex, c7 as ipToOctal, c8 as isValid, c9 as isValidCidr, ca as isValidIp, cb as isValidIpv4, cc as marginToMarkup, cd as markupToMargin, ce as octalToPermissions, cf as parseFileSize, cg as parseInput, ch as parseNumberString, ci as parseSemver, cj as permissionsToChmod, ck as permissionsToOctal, cl as permissionsToSymbolic, cm as planDebtPayoff, cn as ptToPx, co as pxToAll, cp as pxToViewport, cq as remToPx, cr as satisfiesRange, cs as scaleByHeight, ct as scaleByWidth, cu as sortVersions, cv as splitSubnet, cw as symbolicToPermissions, cx as validateBarcode, cy as validateCardNumber, cz as validateIban, cA as validateIsbn, cB as validateIsin, cC as validateVin, cD as viewportToPx } from '../units-D7YRRwei.js';
1
+ export { A as AmortizationRow, a as AprApyDirection, b as AprApyResult, c as AspectRatioResult, B as BASE_LABELS, d as BASE_PREFIXES, e as BYTE_UNITS, f as BarcodeFormat, g as BarcodeValidationResult, h as BaseConvertResult, i as BlendedLoanRateResult, j as BreakEvenInput, k as BreakEvenResult, l as ByteConvertResult, m as ByteUnit, C as COMMON_CURRENCIES, n as COMMON_LOCALES, o as COMMON_PERMISSIONS, p as COMMON_RATIOS, q as COMMON_SIZES, r as COMMON_TAX_RATES, s as COMMON_TIP_PERCENTAGES, t as COMMON_VIEWPORTS, v as CardValidationResult, w as CashBreakdownResult, x as CashChangeResult, y as CashDenominationItem, z as CashRoundingMode, D as CashRoundingResult, E as CdMaturityResult, F as CompareUnitPricesResult, G as CompoundInterestResult, H as CompoundYearRow, I as CreditAccountInput, J as CreditAccountResult, K as CreditCardMinimumPaymentResult, L as CreditUtilizationResult, M as DebtItemInput, N as DebtItemResult, O as DebtPayoffComparison, P as DebtPayoffInput, Q as DebtPayoffPlanResult, R as DebtPayoffScheduleEntry, S as DebtPayoffStrategy, T as DebtPayoffStrategyResult, U as DebtToIncomeRatioResult, V as DepreciationMethod, W as DepreciationResult, X as DepreciationYear, Y as Dimensions, Z as DiscountField, _ as DiscountInput, $ as DiscountResult, a0 as DtiTier, a1 as EmiResult, a2 as EmiTenureUnit, a3 as EmiYearlyBreakdownRow, a4 as ExtraPaymentPayoffResult, a5 as FilePermissions, a6 as FileSizeUnit, a7 as FormatOptions, a8 as FreelancerRateInput, a9 as FreelancerRateResult, aa as GPA_GRADE_POINTS, ab as GpaCourse, ac as GpaCourseResult, ad as GpaResult, ae as IbanValidationResult, af as IpConversion, ag as IsbnFormat, ah as IsbnResult, ai as IsinValidationResult, aj as LoanBalanceInput, ak as LoanBalanceResult, al as LoanPrepaymentPenaltyResult, am as LoanRefinanceResult, an as LoanResult, ao as MarginMarkupField, ap as MarginMarkupInput, aq as MarginMarkupResult, ar as MortgagePointsResult, as as MovingAveragePoint, at as MovingAverageResult, au as NotationStyle, av as NumberBase, aw as PaybackPeriodInput, ax as PaybackPeriodResult, ay as PercentChangeDirection, az as PercentageChangeResult, aA as Permission, aB as PrepaymentPenaltyType, aC as PxConvertResult, aD as RealRateField, aE as RealRateOfReturnInput, aF as RealRateOfReturnResult, aG as RequiredBandwidthResult, aH as RoiInput, aI as RoiResult, aJ as RuleOf72Direction, aK as RuleOf72Result, aL as SavingsGoalInput, aM as SavingsGoalMode, aN as SavingsGoalResult, aO as SemverVersion, aP as SimpleInterestResult, aQ as SubnetInfo, aR as SuccessiveDiscountResult, aS as SuccessiveDiscountStep, aT as TaxDirection, aU as TaxEquivalentYieldDirection, aV as TaxEquivalentYieldResult, aW as TaxResult, aX as TimeValueDirection, aY as TimeValueResult, aZ as TipSplitResult, a_ as TransferSpeedUnit, a$ as TransferTimeResult, b0 as USD_DENOMINATIONS, b1 as UnitPriceItem, b2 as UnitPriceResult, b3 as UtilizationTier, b4 as VideoBitrateInput, b5 as VideoBitrateMode, b6 as VideoBitrateResult, b7 as ViewportConvertResult, b8 as VinValidationResult, b9 as applySuccessiveDiscounts, ba as autoFormat, bb as bumpVersion, bc as calcAspectRatio, bd as calcSubnet, be as calculateBlendedLoanRate, bf as calculateBreakEven, bg as calculateCashBreakdown, bh as calculateCashRounding, bi as calculateCdMaturity, bj as calculateChange, bk as calculateCompoundInterest, bl as calculateCreditCardMinimumPayment, bm as calculateCreditUtilization, bn as calculateDebtToIncomeRatio, bo as calculateDepreciationSchedule, bp as calculateDiscount, bq as calculateEmi, br as calculateExtraPaymentPayoff, bs as calculateFreelancerRate, bt as calculateGpa, bu as calculateLoan, bv as calculateLoanPrepaymentPenalty, bw as calculateLoanRefinance, bx as calculateMarginMarkup, by as calculateMortgagePoints, bz as calculateMovingAverages, bA as calculatePaybackPeriod, bB as calculatePercentageChange, bC as calculateRealRateOfReturn, bD as calculateRequiredBandwidth, bE as calculateRoi, bF as calculateRuleOf72, bG as calculateSavingsGoal, bH as calculateSimpleInterest, bI as calculateTax, bJ as calculateTaxEquivalentYield, bK as calculateTimeValue, bL as calculateTipSplit, bM as calculateTransferTime, bN as calculateVideoBitrate, bO as compareSemver, bP as compareUnitPrices, bQ as convert, bR as convertAprApy, bS as convertBytes, bT as convertIp, bU as coverBox, bV as decimalToIp, bW as decimalToIpCidr, bX as describePermissions, bY as fitIntoBox, bZ as formatNumber, b_ as formatValue, b$ as formatVwValue, c0 as formatWithSeparator, c1 as gcd, c2 as ipFromBinary, c3 as ipFromDecimal, c4 as ipFromHex, c5 as ipToBinary, c6 as ipToDecimal, c7 as ipToDecimalCidr, c8 as ipToHex, c9 as ipToOctal, ca as isValid, cb as isValidCidr, cc as isValidIp, cd as isValidIpv4, ce as marginToMarkup, cf as markupToMargin, cg as octalToPermissions, ch as parseFileSize, ci as parseInput, cj as parseNumberString, ck as parseSemver, cl as permissionsToChmod, cm as permissionsToOctal, cn as permissionsToSymbolic, co as planDebtPayoff, cp as ptToPx, cq as pxToAll, cr as pxToViewport, cs as remToPx, ct as satisfiesRange, cu as scaleByHeight, cv as scaleByWidth, cw as sortVersions, cx as splitSubnet, cy as symbolicToPermissions, cz as validateBarcode, cA as validateCardNumber, cB as validateIban, cC as validateIsbn, cD as validateIsin, cE as validateVin, cF as viewportToPx } from '../units-DwIvTP-X.js';
@@ -1,2 +1,2 @@
1
- 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, calculateBlendedLoanRate, calculateBreakEven, calculateCashBreakdown, calculateCashRounding, calculateCdMaturity, calculateChange, calculateCompoundInterest, calculateCreditUtilization, calculateDebtToIncomeRatio, calculateDepreciationSchedule, calculateDiscount, calculateEmi, calculateExtraPaymentPayoff, calculateFreelancerRate, calculateGpa, calculateLoan, calculateLoanPrepaymentPenalty, calculateLoanRefinance, calculateMarginMarkup, calculateMortgagePoints, calculateMovingAverages, calculatePaybackPeriod, calculatePercentageChange, calculateRealRateOfReturn, calculateRequiredBandwidth, calculateRoi, calculateRuleOf72, calculateSavingsGoal, calculateSimpleInterest, calculateTax, calculateTaxEquivalentYield, calculateTimeValue, calculateTipSplit, calculateTransferTime, calculateVideoBitrate, compareSemver, compareUnitPrices, convert, convertAprApy, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, 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, validateBarcode, validateCardNumber, validateIban, validateIsbn, validateIsin, validateVin, viewportToPx } from '../chunk-OFLNVDNX.js';
1
+ 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, 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, calculateSavingsGoal, calculateSimpleInterest, calculateTax, calculateTaxEquivalentYield, calculateTimeValue, calculateTipSplit, calculateTransferTime, calculateVideoBitrate, compareSemver, compareUnitPrices, convert, convertAprApy, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, 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, validateBarcode, validateCardNumber, validateIban, validateIsbn, validateIsin, validateVin, viewportToPx } from '../chunk-BCISWFVJ.js';
2
2
  import '../chunk-MLKGABMK.js';