@dev-pi2pie/word-counter 0.1.5-canary.5 → 0.1.6-canary.1

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.
@@ -1495,5 +1495,3 @@ const cjsExports = {
1495
1495
  };
1496
1496
  module.exports = cjsExports;
1497
1497
  //#endregion
1498
-
1499
- //# sourceMappingURL=detector.cjs.map
@@ -17,5 +17,3 @@ const cjsExports = Object.assign(require_markdown.wc_default, {
17
17
  });
18
18
  module.exports = cjsExports;
19
19
  //#endregion
20
-
21
- //# sourceMappingURL=index.cjs.map
@@ -1388,5 +1388,3 @@ Object.defineProperty(exports, "wc_default", {
1388
1388
  return wc_default;
1389
1389
  }
1390
1390
  });
1391
-
1392
- //# sourceMappingURL=markdown.cjs.map
package/dist/esm/bin.mjs CHANGED
@@ -539,7 +539,7 @@ function resolveEnvConfig(env = process.env) {
539
539
  if (contentGateMode !== void 0) {
540
540
  config.contentGate = { mode: contentGateMode };
541
541
  config.inspect = {
542
- ...config.inspect ?? {},
542
+ ...config.inspect,
543
543
  contentGate: { mode: contentGateMode }
544
544
  };
545
545
  }
@@ -1271,7 +1271,7 @@ function meetsRequiredNodeVersion(version) {
1271
1271
  return version.patch >= REQUIRED_NODE_VERSION.patch;
1272
1272
  }
1273
1273
  function resolveRuntimeSummary(overrides = {}) {
1274
- const packageVersion = normalizePackageVersion(overrides.packageVersion ?? "0.1.5-canary.5");
1274
+ const packageVersion = normalizePackageVersion(overrides.packageVersion ?? "0.1.6-canary.1");
1275
1275
  const nodeVersion = overrides.nodeVersion ?? process.version;
1276
1276
  const parsedNodeVersion = parseNodeVersion(nodeVersion);
1277
1277
  return {
@@ -5362,7 +5362,7 @@ function normalizeVersion(value) {
5362
5362
  return trimmed;
5363
5363
  }
5364
5364
  function resolvePackageVersion(options = {}) {
5365
- const embeddedVersion = normalizeVersion(options.embeddedVersion ?? "0.1.5-canary.5");
5365
+ const embeddedVersion = normalizeVersion(options.embeddedVersion ?? "0.1.6-canary.1");
5366
5366
  if (embeddedVersion) return embeddedVersion;
5367
5367
  const maxLevels = options.maxLevels ?? 8;
5368
5368
  const resolveFromPath = options.resolveFromPath ?? resolveVersionFromPath;
@@ -5603,8 +5603,7 @@ function finalizeBatchSummaryFromFileResults(files, section, wcOptions, options
5603
5603
  //#region src/cli/batch/jobs/queue.ts
5604
5604
  async function runBoundedQueue(total, requestedJobs, worker) {
5605
5605
  if (total === 0) return [];
5606
- const safeRequestedJobs = Number.isFinite(requestedJobs) ? Math.floor(requestedJobs) : 1;
5607
- const concurrency = Math.max(1, Math.min(total, safeRequestedJobs));
5606
+ const concurrency = Math.max(1, Math.min(total, Number.isFinite(requestedJobs) ? Math.floor(requestedJobs) : 1));
5608
5607
  const results = Array.from({ length: total });
5609
5608
  let nextIndex = 0;
5610
5609
  const runWorker = async () => {
@@ -6608,5 +6607,3 @@ runCli().catch((error) => {
6608
6607
  });
6609
6608
  //#endregion
6610
6609
  export {};
6611
-
6612
- //# sourceMappingURL=bin.mjs.map
@@ -227,5 +227,4 @@ declare const DETECTOR_SOURCES: DetectorSource[];
227
227
  declare const DEFAULT_DETECTOR_RESULT_SOURCE: DetectorSource;
228
228
  declare function createDetectorResult(tag: string, source?: DetectorSource, confidence?: number, reliable?: boolean): DetectorResult;
229
229
  //#endregion
230
- export { DEFAULT_DETECTOR_MODE, DEFAULT_DETECTOR_RESULT_SOURCE, DETECTOR_MODES, DETECTOR_SOURCES, type DetectorContentGateMode, type DetectorContentGateOptions, type DetectorCountResult, type DetectorCountSections, type DetectorCountSectionsOptions, type DetectorDebugContext, type DetectorDebugSummary, type DetectorDebugVerbosity, type DetectorEvidenceConfig, type DetectorFallbackReason, type DetectorInspectChunk, type DetectorInspectDecision, type DetectorInspectEngine, type DetectorInspectEngineRaw, type DetectorInspectEngineResult, type DetectorInspectInput, type DetectorInspectInputOptions, type DetectorInspectInputSourceType, type DetectorInspectKind, type DetectorInspectOptions, type DetectorInspectPipelineResult, type DetectorInspectResult, type DetectorInspectSample, type DetectorInspectSchemaVersion, type DetectorInspectView, type DetectorInspectWindow, type DetectorLocaleOptions, type DetectorMode, type DetectorResult, type DetectorRuntimeOptions, type DetectorSource, type DetectorWordCounterOptions, WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE, assertDetectorModeImplemented, countSectionsWithDetector, createDetectorDebugSummary, createDetectorResult, inspectTextWithDetector, inspectTextWithRegexDetector, inspectTextWithWasmDetector, mergeDetectorDebugSummaries, resolveDetectorMode, segmentTextByLocaleWithDetector, wordCounterWithDetector };
231
- //# sourceMappingURL=detector.d.mts.map
230
+ export { DEFAULT_DETECTOR_MODE, DEFAULT_DETECTOR_RESULT_SOURCE, DETECTOR_MODES, DETECTOR_SOURCES, type DetectorContentGateMode, type DetectorContentGateOptions, type DetectorCountResult, type DetectorCountSections, type DetectorCountSectionsOptions, type DetectorDebugContext, type DetectorDebugSummary, type DetectorDebugVerbosity, type DetectorEvidenceConfig, type DetectorFallbackReason, type DetectorInspectChunk, type DetectorInspectDecision, type DetectorInspectEngine, type DetectorInspectEngineRaw, type DetectorInspectEngineResult, type DetectorInspectInput, type DetectorInspectInputOptions, type DetectorInspectInputSourceType, type DetectorInspectKind, type DetectorInspectOptions, type DetectorInspectPipelineResult, type DetectorInspectResult, type DetectorInspectSample, type DetectorInspectSchemaVersion, type DetectorInspectView, type DetectorInspectWindow, type DetectorLocaleOptions, type DetectorMode, type DetectorResult, type DetectorRuntimeOptions, type DetectorSource, type DetectorWordCounterOptions, WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE, assertDetectorModeImplemented, countSectionsWithDetector, createDetectorDebugSummary, createDetectorResult, inspectTextWithDetector, inspectTextWithRegexDetector, inspectTextWithWasmDetector, mergeDetectorDebugSummaries, resolveDetectorMode, segmentTextByLocaleWithDetector, wordCounterWithDetector };
@@ -1475,5 +1475,3 @@ function createDetectorResult(tag, source = DEFAULT_DETECTOR_RESULT_SOURCE, conf
1475
1475
  }
1476
1476
  //#endregion
1477
1477
  export { DEFAULT_DETECTOR_MODE, DEFAULT_DETECTOR_RESULT_SOURCE, DETECTOR_MODES, DETECTOR_SOURCES, WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE, assertDetectorModeImplemented, countSectionsWithDetector, createDetectorDebugSummary, createDetectorResult, inspectTextWithDetector, inspectTextWithRegexDetector, inspectTextWithWasmDetector, mergeDetectorDebugSummaries, resolveDetectorMode, segmentTextByLocaleWithDetector, wordCounterWithDetector };
1478
-
1479
- //# sourceMappingURL=detector.mjs.map
@@ -145,5 +145,4 @@ declare function parseMarkdown(input: string): ParsedMarkdown;
145
145
  //#region src/markdown/section-count.d.ts
146
146
  declare function countSections(input: string, section: SectionMode, options?: WordCounterOptions): SectionedResult;
147
147
  //#endregion
148
- export { NonWordCollection as _, SectionMode as a, WordCounterOptions as b, appendAll as c, countCharsForLocale as d, countWordsForLocale as f, LocaleChunk as g, LatinHintRule as h, ParsedMarkdown as i, wordCounter as l, LocaleDetectOptions as m, parseMarkdown as n, SectionedResult as o, segmentTextByLocale as p, FrontmatterType as r, showSingularOrPluralWord as s, countSections as t, DEFAULT_LATIN_HINT_RULES as u, WordCounterBreakdown as v, WordCounterResult as x, WordCounterMode as y };
149
- //# sourceMappingURL=index.d.mts.map
148
+ export { NonWordCollection as _, SectionMode as a, WordCounterOptions as b, appendAll as c, countCharsForLocale as d, countWordsForLocale as f, LocaleChunk as g, LatinHintRule as h, ParsedMarkdown as i, wordCounter as l, LocaleDetectOptions as m, parseMarkdown as n, SectionedResult as o, segmentTextByLocale as p, FrontmatterType as r, showSingularOrPluralWord as s, countSections as t, DEFAULT_LATIN_HINT_RULES as u, WordCounterBreakdown as v, WordCounterResult as x, WordCounterMode as y };
@@ -5,5 +5,3 @@ function showSingularOrPluralWord(count, word) {
5
5
  }
6
6
  //#endregion
7
7
  export { DEFAULT_LATIN_HINT_RULES, appendAll, countCharsForLocale, countSections, countWordsForLocale, wc_default as default, wc_default as wordCounter, parseMarkdown, segmentTextByLocale, showSingularOrPluralWord };
8
-
9
- //# sourceMappingURL=index.mjs.map
@@ -1281,5 +1281,3 @@ function countSections(input, section, options = {}) {
1281
1281
  }
1282
1282
  //#endregion
1283
1283
  export { mergeNonWordCollections as _, DEFAULT_HAN_TAG as a, countWordsForLocale as b, isLatinLocale as c, resolveMode as d, aggregateByLocale as f, createNonWordCollection as g, analyzeChunk as h, segmentTextByLocale as i, resolveLocaleDetectContext as l, analyzeCharChunk as m, parseMarkdown as n, DEFAULT_LOCALE as o, aggregateCharsByLocale as p, wc_default as r, detectLocaleForCharTrace as s, countSections as t, DEFAULT_LATIN_HINT_RULES as u, appendAll as v, countCharsForLocale as y };
1284
-
1285
- //# sourceMappingURL=markdown.mjs.map
@@ -2502,5 +2502,3 @@ parentPort.on("message", async (message) => {
2502
2502
  });
2503
2503
  //#endregion
2504
2504
  export {};
2505
-
2506
- //# sourceMappingURL=count-worker.mjs.map
@@ -201,5 +201,3 @@ async function countBatchInputsWithWorkerPool(options) {
201
201
  }
202
202
  //#endregion
203
203
  export { WorkerPoolTaskFatalError, WorkerPoolUnavailableError, countBatchInputsWithWorkerPool, isWorkerThreadsAvailable, resolveWorkerEntryUrl };
204
-
205
- //# sourceMappingURL=worker-pool.mjs.map
@@ -18,10 +18,10 @@ exports.detect_language = detect_language;
18
18
  function __wbg_get_imports() {
19
19
  const import0 = {
20
20
  __proto__: null,
21
- __wbg___wbindgen_throw_6ddd609b62940d55: function(arg0, arg1) {
21
+ __wbg___wbindgen_throw_bd5a70920abf0236: function(arg0, arg1) {
22
22
  throw new Error(getStringFromWasm0(arg0, arg1));
23
23
  },
24
- __wbg_new_ab79df5bd7c26067: function() {
24
+ __wbg_new_e4597c3f125a2038: function() {
25
25
  const ret = new Object();
26
26
  return ret;
27
27
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev-pi2pie/word-counter",
3
- "version": "0.1.5-canary.5",
3
+ "version": "0.1.6-canary.1",
4
4
  "keywords": [
5
5
  "cli",
6
6
  "intl-segmenter",
@@ -62,14 +62,17 @@
62
62
  "devDependencies": {
63
63
  "@types/bun": "^1.3.11",
64
64
  "@types/node": "^25.5.0",
65
- "oxfmt": "^0.41.0",
66
- "oxlint": "^1.56.0",
65
+ "oxfmt": "^0.43.0",
66
+ "oxlint": "^1.58.0",
67
67
  "picocolors": "^1.1.1",
68
- "tsdown": "^0.21.4",
69
- "typescript": "^5.9.3"
68
+ "tsdown": "^0.21.7",
69
+ "typescript": "^6.0.2"
70
70
  },
71
71
  "peerDependencies": {
72
- "typescript": "^5"
72
+ "typescript": "^5 || ^6"
73
+ },
74
+ "overrides": {
75
+ "picomatch": "4.0.4"
73
76
  },
74
77
  "engines": {
75
78
  "node": ">=22.18.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"detector.cjs","names":["resolveLocaleDetectContext","DEFAULT_LOCALE","detectLocaleForCharTrace","isLatinLocale","segmentTextByLocale","wordCounter","countSections","createNonWordCollection","resolveMode","analyzeCharChunk","aggregateCharsByLocale","analyzeChunk","aggregateByLocale","parseMarkdown","DEFAULT_HAN_TAG","DEFAULT_LOCALE","DEFAULT_HAN_TAG","DEFAULT_LOCALE","segmentTextByLocale","segmentTextByLocale"],"sources":["../../src/detector/debug.ts","../../src/detector/inspect-helpers.ts","../../src/detector/none.ts","../../src/detector/result-builder.ts","../../src/detector/sections.ts","../../src/detector/policy.ts","../../src/detector/wasm-inspect.ts","../../src/detector/whatlang-map.ts","../../src/detector/wasm-presegment.ts","../../src/detector/whatlang-wasm.ts","../../src/detector/wasm-engine.ts","../../src/detector/wasm-resolution.ts","../../src/detector/wasm-windows.ts","../../src/detector/wasm.ts","../../src/detector/inspect.ts","../../src/detector/index.ts","../../src/detector/index.cjs.ts"],"sourcesContent":["import type { SectionMode } from \"../markdown\";\nimport { DEFAULT_HAN_TAG, DEFAULT_LOCALE } from \"../wc/locale-detect\";\nimport type { WordCounterMode } from \"../wc/types\";\nimport type { DetectorRouteTag } from \"./policy\";\nimport type { DetectorMode } from \"./types\";\n\nexport type DetectorDebugVerbosity = \"compact\" | \"verbose\";\nexport const DETECTOR_EVIDENCE_PREVIEW_LIMIT = 160;\n\nexport type DetectorEvidenceConfig = {\n verbosity: DetectorDebugVerbosity;\n mode: WordCounterMode;\n section: SectionMode;\n};\n\nexport type DetectorDebugSummary = {\n mode: DetectorMode;\n engine: \"none\" | \"whatlang-wasm\";\n windowsTotal: number;\n accepted: number;\n fallback: number;\n routes: {\n latin: number;\n han: number;\n };\n acceptancePaths: {\n reliable: number;\n corroborated: number;\n };\n fallbackReasons: {\n notEligible: number;\n noCandidate: number;\n belowThreshold: number;\n qualityGate: number;\n corroborationUnreliable: number;\n };\n};\n\nexport type DetectorDebugContext = {\n emit?: (\n event: string,\n details?: Record<string, unknown>,\n options?: { verbosity?: DetectorDebugVerbosity },\n ) => void;\n summary?: DetectorDebugSummary;\n evidence?: DetectorEvidenceConfig;\n};\n\nexport type DetectorFallbackReason =\n | \"notEligible\"\n | \"noCandidate\"\n | \"belowThreshold\"\n | \"qualityGate\"\n | \"corroborationUnreliable\";\n\nexport function createDetectorDebugSummary(\n mode: DetectorMode,\n engine: DetectorDebugSummary[\"engine\"] = mode === \"wasm\" ? \"whatlang-wasm\" : \"none\",\n): DetectorDebugSummary {\n return {\n mode,\n engine,\n windowsTotal: 0,\n accepted: 0,\n fallback: 0,\n routes: {\n latin: 0,\n han: 0,\n },\n acceptancePaths: {\n reliable: 0,\n corroborated: 0,\n },\n fallbackReasons: {\n notEligible: 0,\n noCandidate: 0,\n belowThreshold: 0,\n qualityGate: 0,\n corroborationUnreliable: 0,\n },\n };\n}\n\nexport function mergeDetectorDebugSummaries(\n summaries: Array<DetectorDebugSummary | undefined>,\n): DetectorDebugSummary | undefined {\n const present = summaries.filter(\n (summary): summary is DetectorDebugSummary => summary !== undefined,\n );\n if (present.length === 0) {\n return undefined;\n }\n\n const first = present[0]!;\n const merged = createDetectorDebugSummary(first.mode, first.engine);\n for (const summary of present) {\n merged.windowsTotal += summary.windowsTotal;\n merged.accepted += summary.accepted;\n merged.fallback += summary.fallback;\n merged.routes.latin += summary.routes.latin;\n merged.routes.han += summary.routes.han;\n merged.acceptancePaths.reliable += summary.acceptancePaths.reliable;\n merged.acceptancePaths.corroborated += summary.acceptancePaths.corroborated;\n merged.fallbackReasons.notEligible += summary.fallbackReasons.notEligible;\n merged.fallbackReasons.noCandidate += summary.fallbackReasons.noCandidate;\n merged.fallbackReasons.belowThreshold += summary.fallbackReasons.belowThreshold;\n merged.fallbackReasons.qualityGate += summary.fallbackReasons.qualityGate;\n merged.fallbackReasons.corroborationUnreliable +=\n summary.fallbackReasons.corroborationUnreliable;\n }\n\n return merged;\n}\n\nexport function recordDetectorWindow(\n summary: DetectorDebugSummary | undefined,\n routeTag: DetectorRouteTag,\n): void {\n if (!summary) {\n return;\n }\n\n summary.windowsTotal += 1;\n if (routeTag === DEFAULT_LOCALE) {\n summary.routes.latin += 1;\n return;\n }\n if (routeTag === DEFAULT_HAN_TAG) {\n summary.routes.han += 1;\n }\n}\n\nexport function recordDetectorAccepted(\n summary: DetectorDebugSummary | undefined,\n path: \"reliable\" | \"corroborated\",\n): void {\n if (!summary) {\n return;\n }\n\n summary.accepted += 1;\n if (path === \"reliable\") {\n summary.acceptancePaths.reliable += 1;\n return;\n }\n\n summary.acceptancePaths.corroborated += 1;\n}\n\nexport function recordDetectorFallback(\n summary: DetectorDebugSummary | undefined,\n reason: DetectorFallbackReason,\n): void {\n if (!summary) {\n return;\n }\n\n summary.fallback += 1;\n summary.fallbackReasons[reason] += 1;\n}\n\nexport function createDetectorEvidencePreview(text: string): {\n preview: string;\n truncated: boolean;\n} {\n const collapsed = text.replace(/\\s+/gu, \" \").trim();\n const codePoints = Array.from(collapsed);\n if (codePoints.length <= DETECTOR_EVIDENCE_PREVIEW_LIMIT) {\n return {\n preview: collapsed,\n truncated: false,\n };\n }\n\n return {\n preview: codePoints.slice(0, DETECTOR_EVIDENCE_PREVIEW_LIMIT).join(\"\"),\n truncated: true,\n };\n}\n","import {\n DEFAULT_LOCALE,\n detectLocaleForCharTrace,\n isLatinLocale,\n resolveLocaleDetectContext,\n type LocaleDetectContext,\n type LocaleDetectOptions,\n type LocaleDetectTraceSource,\n} from \"../wc/locale-detect\";\nimport type { LocaleChunk } from \"../wc/types\";\nimport { createDetectorEvidencePreview, DETECTOR_EVIDENCE_PREVIEW_LIMIT } from \"./debug\";\nimport type {\n DetectorInspectChunk,\n DetectorInspectInput,\n DetectorInspectInputOptions,\n} from \"./inspect-types\";\n\nconst HARD_BOUNDARY_REGEX = /[\\r\\n,.!?;:,、。!?;:.。、]/u;\nconst LATIN_PROMOTION_BREAK_REGEX = /[\\s,.!?;:,、。!?;:.。、]/u;\n\nexport type TracedLocaleChunk = LocaleChunk & {\n source: \"script\" | \"hint\" | \"fallback\";\n reason?: string;\n};\n\nfunction findLastLatinPromotionBreakIndex(buffer: string): number {\n for (let index = buffer.length - 1; index >= 0; index -= 1) {\n const char = buffer[index];\n if (!char) {\n continue;\n }\n if (LATIN_PROMOTION_BREAK_REGEX.test(char)) {\n return index;\n }\n }\n return -1;\n}\n\nfunction mergeAdjacentTracedChunks(chunks: TracedLocaleChunk[]): TracedLocaleChunk[] {\n if (chunks.length === 0) {\n return chunks;\n }\n\n const merged: TracedLocaleChunk[] = [];\n let last = chunks[0]!;\n\n for (let index = 1; index < chunks.length; index += 1) {\n const chunk = chunks[index]!;\n if (chunk.locale === last.locale) {\n last = {\n ...last,\n text: last.text + chunk.text,\n };\n continue;\n }\n merged.push(last);\n last = chunk;\n }\n\n merged.push(last);\n return merged;\n}\n\nexport function segmentTextByLocaleWithTrace(\n text: string,\n options: LocaleDetectOptions = {},\n): TracedLocaleChunk[] {\n const context: LocaleDetectContext = resolveLocaleDetectContext(options);\n const chunks: TracedLocaleChunk[] = [];\n let currentLocale = DEFAULT_LOCALE;\n let currentSource: LocaleDetectTraceSource = \"fallback\";\n let currentReason = \"latin-fallback\";\n let buffer = \"\";\n let bufferHasScript = false;\n let sawCarryBoundary = false;\n\n const updateCarryBoundaryState = (detected: string | null, char: string): void => {\n if (detected !== null) {\n sawCarryBoundary = false;\n return;\n }\n if (HARD_BOUNDARY_REGEX.test(char)) {\n sawCarryBoundary = true;\n }\n };\n\n const pushChunk = (\n locale: string,\n textValue: string,\n source: LocaleDetectTraceSource,\n reason?: string,\n ) => {\n if (textValue.length === 0) {\n return;\n }\n chunks.push({\n locale,\n text: textValue,\n source,\n ...(reason ? { reason } : {}),\n });\n };\n\n for (const char of text) {\n const trace = detectLocaleForCharTrace(\n char,\n currentLocale,\n options,\n context,\n !sawCarryBoundary,\n !sawCarryBoundary,\n );\n const detected = trace.locale;\n const targetLocale = detected ?? currentLocale;\n\n if (buffer === \"\") {\n currentLocale = targetLocale;\n currentSource = trace.source ?? \"fallback\";\n currentReason = trace.reason ?? currentReason;\n buffer = char;\n bufferHasScript = detected !== null;\n updateCarryBoundaryState(detected, char);\n continue;\n }\n\n if (detected !== null && !bufferHasScript) {\n currentLocale = targetLocale;\n currentSource = trace.source ?? currentSource;\n currentReason = trace.reason ?? currentReason;\n buffer += char;\n bufferHasScript = true;\n updateCarryBoundaryState(detected, char);\n continue;\n }\n\n if (targetLocale !== currentLocale && detected !== null) {\n if (currentLocale === DEFAULT_LOCALE && isLatinLocale(targetLocale, context)) {\n const promotionBreakIndex = findLastLatinPromotionBreakIndex(buffer);\n if (promotionBreakIndex === -1) {\n currentLocale = targetLocale;\n currentSource = trace.source ?? currentSource;\n currentReason = trace.reason ?? currentReason;\n buffer += char;\n bufferHasScript = true;\n updateCarryBoundaryState(detected, char);\n continue;\n }\n\n const prefix = buffer.slice(0, promotionBreakIndex + 1);\n const suffix = buffer.slice(promotionBreakIndex + 1);\n pushChunk(currentLocale, prefix, currentSource, currentReason);\n currentLocale = targetLocale;\n currentSource = trace.source ?? currentSource;\n currentReason = trace.reason ?? currentReason;\n buffer = `${suffix}${char}`;\n bufferHasScript = true;\n updateCarryBoundaryState(detected, char);\n continue;\n }\n\n pushChunk(currentLocale, buffer, currentSource, currentReason);\n currentLocale = targetLocale;\n currentSource = trace.source ?? \"fallback\";\n currentReason = trace.reason ?? currentReason;\n buffer = char;\n bufferHasScript = true;\n updateCarryBoundaryState(detected, char);\n continue;\n }\n\n buffer += char;\n if (detected !== null) {\n bufferHasScript = true;\n }\n updateCarryBoundaryState(detected, char);\n }\n\n pushChunk(currentLocale, buffer, currentSource, currentReason);\n return mergeAdjacentTracedChunks(chunks);\n}\n\nexport function createInspectInput(\n text: string,\n inputOptions: DetectorInspectInputOptions | undefined,\n): DetectorInspectInput {\n const preview = createDetectorEvidencePreview(text);\n return {\n sourceType: inputOptions?.sourceType ?? \"inline\",\n ...(inputOptions?.path ? { path: inputOptions.path } : {}),\n textLength: text.length,\n textPreview: preview.preview,\n textPreviewTruncated: preview.truncated,\n };\n}\n\nexport function createInspectChunk(\n index: number,\n chunk: LocaleChunk,\n extras?: Pick<DetectorInspectChunk, \"source\" | \"reason\">,\n): DetectorInspectChunk {\n const preview = createDetectorEvidencePreview(chunk.text);\n return {\n index,\n locale: chunk.locale,\n textPreview: preview.preview,\n textPreviewTruncated: preview.truncated,\n ...(extras?.source ? { source: extras.source } : {}),\n ...(extras?.reason ? { reason: extras.reason } : {}),\n };\n}\n\nexport function createInspectPreview(text: string): {\n textPreview: string;\n textPreviewTruncated: boolean;\n} {\n const preview = createDetectorEvidencePreview(text);\n return {\n textPreview: preview.preview,\n textPreviewTruncated: preview.truncated,\n };\n}\n\nexport { DETECTOR_EVIDENCE_PREVIEW_LIMIT as DETECTOR_INSPECT_PREVIEW_LIMIT };\n","import { countSections } from \"../markdown\";\nimport wordCounter, { segmentTextByLocale } from \"../wc\";\nimport {\n createInspectChunk,\n createInspectInput,\n segmentTextByLocaleWithTrace,\n} from \"./inspect-helpers\";\nimport type { DetectorInspectOptions, DetectorInspectResult } from \"./inspect-types\";\nimport type {\n DetectorCountSectionsOptions,\n DetectorLocaleOptions,\n DetectorWordCounterOptions,\n} from \"./types\";\n\nexport async function segmentTextByLocaleWithRegexDetector(\n text: string,\n options: DetectorLocaleOptions = {},\n) {\n return segmentTextByLocale(text, options);\n}\n\nexport async function wordCounterWithRegexDetector(\n text: string,\n options: DetectorWordCounterOptions = {},\n) {\n return wordCounter(text, options);\n}\n\nexport async function countSectionsWithRegexDetector(\n input: string,\n section: Parameters<typeof countSections>[1],\n options: DetectorCountSectionsOptions = {},\n) {\n return countSections(input, section, options);\n}\n\nexport async function inspectTextWithRegexDetector(\n text: string,\n options: DetectorInspectOptions = {},\n): Promise<DetectorInspectResult> {\n if (text.trim().length === 0) {\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"pipeline\",\n detector: \"regex\",\n input: createInspectInput(text, options.input),\n chunks: [],\n decision: {\n kind: \"empty\",\n notes: [\"No detector-eligible content was present.\"],\n },\n resolvedChunks: [],\n };\n }\n\n const chunks = segmentTextByLocaleWithTrace(text, options);\n\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"pipeline\",\n detector: \"regex\",\n input: createInspectInput(text, options.input),\n chunks: chunks.map((chunk, index) =>\n createInspectChunk(index, chunk, {\n source: chunk.source,\n reason: chunk.reason,\n }),\n ),\n decision: {\n kind: \"deterministic\",\n notes: [\n \"Regex inspection does not use detector windows or engine confidence.\",\n \"Final locales come directly from script detection, hint rules, and fallback rules.\",\n ],\n },\n resolvedChunks: chunks.map((chunk, index) => createInspectChunk(index, chunk)),\n };\n}\n","import {\n analyzeCharChunk,\n analyzeChunk,\n aggregateByLocale,\n aggregateCharsByLocale,\n} from \"../wc/analyze\";\nimport { resolveMode } from \"../wc/mode\";\nimport { createNonWordCollection, mergeNonWordCollections } from \"../wc/non-words\";\nimport type {\n CharBreakdown,\n CharCollectorBreakdown,\n ChunkBreakdown,\n ChunkWithSegments,\n LocaleChunk,\n NonWordCollection,\n WordCounterMode,\n WordCounterOptions,\n WordCounterResult,\n} from \"../wc/types\";\n\nfunction getNonWordTotal(nonWords: NonWordCollection): number {\n return (\n nonWords.counts.emoji +\n nonWords.counts.symbols +\n nonWords.counts.punctuation +\n (nonWords.counts.whitespace ?? 0)\n );\n}\n\nfunction collectNonWordsAggregate(\n analyzed: Array<{ nonWords?: NonWordCollection }>,\n enabled: boolean,\n): NonWordCollection | undefined {\n if (!enabled) {\n return undefined;\n }\n const collection = createNonWordCollection();\n for (const chunk of analyzed) {\n if (!chunk.nonWords) {\n continue;\n }\n mergeNonWordCollections(collection, chunk.nonWords);\n }\n return collection;\n}\n\nexport function buildWordCounterResultFromChunks(\n chunks: LocaleChunk[],\n options: WordCounterOptions = {},\n): WordCounterResult {\n const mode: WordCounterMode = resolveMode(options.mode, \"chunk\");\n const collectNonWords = Boolean(options.nonWords);\n const includeWhitespace = Boolean(options.includeWhitespace);\n\n if (mode === \"char\" || mode === \"char-collector\") {\n const analyzed = chunks.map((chunk) =>\n analyzeCharChunk(chunk, collectNonWords, includeWhitespace),\n );\n const total = analyzed.reduce((sum, chunk) => sum + chunk.chars, 0);\n const counts = collectNonWords\n ? {\n words: analyzed.reduce((sum, chunk) => sum + chunk.wordChars, 0),\n nonWords: analyzed.reduce((sum, chunk) => sum + chunk.nonWordChars, 0),\n total,\n }\n : undefined;\n\n if (mode === \"char\") {\n const items: CharBreakdown[] = analyzed.map((chunk) => ({\n locale: chunk.locale,\n text: chunk.text,\n chars: chunk.chars,\n nonWords: chunk.nonWords,\n }));\n return {\n total,\n counts,\n breakdown: {\n mode,\n items,\n },\n };\n }\n\n const aggregated = aggregateCharsByLocale(analyzed);\n const items: CharCollectorBreakdown[] = aggregated.map((chunk) => ({\n locale: chunk.locale,\n chars: chunk.chars,\n nonWords: chunk.nonWords,\n }));\n return {\n total,\n counts,\n breakdown: {\n mode,\n items,\n },\n };\n }\n\n const analyzed = chunks.map((chunk) => analyzeChunk(chunk, collectNonWords, includeWhitespace));\n const wordsTotal = analyzed.reduce((sum, chunk) => sum + chunk.words, 0);\n const nonWordsTotal = collectNonWords\n ? analyzed.reduce((sum, chunk) => {\n if (!chunk.nonWords) {\n return sum;\n }\n return sum + getNonWordTotal(chunk.nonWords);\n }, 0)\n : 0;\n const total = analyzed.reduce((sum, chunk) => {\n let chunkTotal = chunk.words;\n if (collectNonWords && chunk.nonWords) {\n chunkTotal += getNonWordTotal(chunk.nonWords);\n }\n return sum + chunkTotal;\n }, 0);\n\n const counts = collectNonWords\n ? { words: wordsTotal, nonWords: nonWordsTotal, total }\n : undefined;\n\n if (mode === \"segments\") {\n const items: ChunkWithSegments[] = analyzed.map((chunk) => ({\n locale: chunk.locale,\n text: chunk.text,\n words: chunk.words,\n segments: chunk.segments,\n nonWords: chunk.nonWords,\n }));\n return {\n total,\n counts,\n breakdown: {\n mode,\n items,\n },\n };\n }\n\n if (mode === \"collector\") {\n const items = aggregateByLocale(analyzed);\n const nonWords = collectNonWordsAggregate(analyzed, collectNonWords);\n return {\n total,\n counts,\n breakdown: {\n mode,\n items,\n nonWords,\n },\n };\n }\n\n const items: ChunkBreakdown[] = analyzed.map((chunk) => ({\n locale: chunk.locale,\n text: chunk.text,\n words: chunk.words,\n nonWords: chunk.nonWords,\n }));\n\n return {\n total,\n counts,\n breakdown: {\n mode,\n items,\n },\n };\n}\n","import { parseMarkdown } from \"../markdown\";\nimport type { SectionMode, SectionedResult } from \"../markdown\";\nimport type { WordCounterResult } from \"../wc/types\";\nimport type { DetectorCountSectionsOptions } from \"./types\";\nimport { wordCounterWithDetector } from \"./index\";\n\nfunction normalizeText(value: unknown): string {\n if (value == null) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nasync function buildPerKeyItems(\n data: Record<string, unknown> | null,\n options: DetectorCountSectionsOptions,\n): Promise<Array<{ name: string; source: \"frontmatter\"; result: WordCounterResult }>> {\n if (!data || typeof data !== \"object\" || Array.isArray(data)) {\n return [];\n }\n\n return Promise.all(\n Object.entries(data).map(async ([key, value]) => {\n const valueText = normalizeText(value);\n const text = valueText ? `${key}: ${valueText}` : key;\n return {\n name: key,\n source: \"frontmatter\" as const,\n result: await wordCounterWithDetector(text, options),\n };\n }),\n );\n}\n\nasync function buildSingleItem(\n name: string,\n text: string,\n options: DetectorCountSectionsOptions,\n source: \"frontmatter\" | \"content\",\n): Promise<Array<{ name: string; source: \"frontmatter\" | \"content\"; result: WordCounterResult }>> {\n return [{ name, source, result: await wordCounterWithDetector(text, options) }];\n}\n\nfunction sumTotals(items: Array<{ result: WordCounterResult }>): number {\n return items.reduce((sum, item) => sum + item.result.total, 0);\n}\n\nexport async function countSectionsWithResolvedDetector(\n input: string,\n section: SectionMode,\n options: DetectorCountSectionsOptions = {},\n): Promise<SectionedResult> {\n if (section === \"all\") {\n const result = await wordCounterWithDetector(input, options);\n return {\n section,\n total: result.total,\n frontmatterType: null,\n items: [{ name: \"all\", source: \"content\", result }],\n };\n }\n\n const parsed = parseMarkdown(input);\n const frontmatterText = parsed.frontmatter ?? \"\";\n const contentText = parsed.content ?? \"\";\n\n let items: Array<{ name: string; source: \"frontmatter\" | \"content\"; result: WordCounterResult }> =\n [];\n\n if (section === \"frontmatter\") {\n items = await buildSingleItem(\"frontmatter\", frontmatterText, options, \"frontmatter\");\n } else if (section === \"content\") {\n items = await buildSingleItem(\"content\", contentText, options, \"content\");\n } else if (section === \"split\") {\n items = [\n ...(await buildSingleItem(\"frontmatter\", frontmatterText, options, \"frontmatter\")),\n ...(await buildSingleItem(\"content\", contentText, options, \"content\")),\n ];\n } else if (section === \"per-key\") {\n items = await buildPerKeyItems(parsed.data, options);\n } else if (section === \"split-per-key\") {\n items = [\n ...(await buildPerKeyItems(parsed.data, options)),\n ...(await buildSingleItem(\"content\", contentText, options, \"content\")),\n ];\n }\n\n return {\n section,\n total: sumTotals(items),\n frontmatterType: parsed.frontmatterType,\n items,\n };\n}\n","import { DEFAULT_HAN_TAG, DEFAULT_LOCALE } from \"../wc/locale-detect\";\nimport type { LocaleChunk } from \"../wc/types\";\nimport type { DetectorContentGateMode, DetectorResult } from \"./types\";\n\nexport const LATIN_WASM_MIN_SCRIPT_CHARS = 24;\nexport const HANI_WASM_MIN_SCRIPT_CHARS = 12;\nexport const LATIN_WASM_MIN_CONFIDENCE = 0.75;\nexport const HANI_WASM_MIN_CONFIDENCE = 0.9;\nexport const LATIN_WASM_CORROBORATED_MIN_CONFIDENCE = 0.7;\nconst LATIN_WASM_STRICT_MIN_SCRIPT_CHARS = 30;\nconst LATIN_WASM_LOOSE_MIN_SCRIPT_CHARS = 20;\nconst HANI_WASM_STRICT_MIN_SCRIPT_CHARS = 16;\nconst HANI_WASM_LOOSE_MIN_FOCUS_HAN_CHARS = 4;\n\nconst LATIN_SCRIPT_REGEX = /\\p{Script=Latin}/u;\nconst HAN_SCRIPT_REGEX = /\\p{Script=Han}/u;\nconst HANI_DIAGNOSTIC_SCRIPT_REGEX = /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}]/u;\nconst LATIN_WORD_REGEX = /\\p{Script=Latin}+/gu;\nconst WHITESPACE_REGEX = /\\s/u;\nconst JAPANESE_CONTEXT_LOCALE = \"ja\";\n\nexport type DetectorRouteTag = typeof DEFAULT_LOCALE | typeof DEFAULT_HAN_TAG;\nexport type DetectorContentGatePolicy = \"latinProse\" | \"none\";\nexport type DetectorDiagnosticTextSource = \"focus\" | \"borrowed-context\";\n\nexport type DetectorWindow = {\n routeTag: DetectorRouteTag;\n startIndex: number;\n endIndex: number;\n text: string;\n};\n\nexport type DetectorBorrowedContext = {\n leftChunkIndex?: number;\n rightChunkIndex?: number;\n};\n\nexport type DetectorDiagnosticSample = {\n focusText: string;\n text: string;\n normalizedText: string;\n normalizedApplied: boolean;\n textSource: DetectorDiagnosticTextSource;\n borrowedContext?: DetectorBorrowedContext;\n};\n\nexport type DetectorEligibilityResult = {\n scriptChars: number;\n minScriptChars: number;\n passed: boolean;\n};\n\nexport type DetectorContentGateResult = {\n applied: boolean;\n passed: boolean;\n policy: DetectorContentGatePolicy;\n mode: DetectorContentGateMode;\n};\n\nexport type DetectorCorroboratedAcceptance =\n | {\n accepted: true;\n confidence: number;\n hasReliableCorroboration: true;\n }\n | {\n accepted: false;\n confidence: number;\n hasReliableCorroboration: boolean;\n reason: \"mismatch\" | \"belowThreshold\" | \"unreliable\";\n };\n\nexport type DetectorRoutePolicy = {\n routeTag: DetectorRouteTag;\n eligibility: {\n evaluate: (\n sample: DetectorDiagnosticSample,\n mode?: DetectorContentGateMode,\n ) => DetectorEligibilityResult;\n };\n buildDiagnosticSample: (\n window: DetectorWindow,\n chunks: LocaleChunk[],\n ) => DetectorDiagnosticSample;\n evaluateContentGate: (\n sample: DetectorDiagnosticSample,\n mode?: DetectorContentGateMode,\n ) => DetectorContentGateResult;\n accept: (candidate: DetectorResult) => boolean;\n acceptCorroborated?: (\n raw: DetectorResult,\n normalized: DetectorResult,\n ) => DetectorCorroboratedAcceptance;\n fallbackTag: string;\n};\n\nfunction countMatchingChars(text: string, matcher: RegExp): number {\n let count = 0;\n for (const char of text) {\n if (matcher.test(char)) {\n count += 1;\n }\n }\n return count;\n}\n\nfunction getSampleScriptMatcher(routeTag: DetectorRouteTag): RegExp {\n return routeTag === DEFAULT_HAN_TAG ? HAN_SCRIPT_REGEX : LATIN_SCRIPT_REGEX;\n}\n\nfunction getEligibilityScriptMatcher(routeTag: DetectorRouteTag): RegExp {\n return routeTag === DEFAULT_HAN_TAG ? HANI_DIAGNOSTIC_SCRIPT_REGEX : LATIN_SCRIPT_REGEX;\n}\n\nfunction normalizeSampleText(text: string, routeTag: DetectorRouteTag): string {\n const matcher = getSampleScriptMatcher(routeTag);\n return [...text]\n .map((char) => {\n if (matcher.test(char) || WHITESPACE_REGEX.test(char)) {\n return char;\n }\n return \" \";\n })\n .join(\"\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction buildFocusOnlyDiagnosticSample(window: DetectorWindow): DetectorDiagnosticSample {\n const normalizedText = normalizeSampleText(window.text, window.routeTag);\n return {\n focusText: window.text,\n text: window.text,\n normalizedText,\n normalizedApplied: normalizedText !== window.text,\n textSource: \"focus\",\n };\n}\n\nfunction buildHaniDiagnosticSample(\n window: DetectorWindow,\n chunks: LocaleChunk[],\n): DetectorDiagnosticSample {\n const borrowedContext: DetectorBorrowedContext = {};\n const sampleParts: string[] = [];\n\n const leftChunk = chunks[window.startIndex - 1];\n if (leftChunk?.locale === JAPANESE_CONTEXT_LOCALE) {\n borrowedContext.leftChunkIndex = window.startIndex - 1;\n sampleParts.push(leftChunk.text);\n }\n\n sampleParts.push(window.text);\n\n const rightChunk = chunks[window.endIndex + 1];\n if (rightChunk?.locale === JAPANESE_CONTEXT_LOCALE) {\n borrowedContext.rightChunkIndex = window.endIndex + 1;\n sampleParts.push(rightChunk.text);\n }\n\n const text = sampleParts.join(\"\");\n const normalizedText = normalizeSampleText(text, window.routeTag);\n const borrowed =\n borrowedContext.leftChunkIndex !== undefined || borrowedContext.rightChunkIndex !== undefined;\n\n return {\n focusText: window.text,\n text,\n normalizedText,\n normalizedApplied: normalizedText !== text,\n textSource: borrowed ? \"borrowed-context\" : \"focus\",\n ...(borrowed ? { borrowedContext } : {}),\n };\n}\n\nfunction countLatinWords(text: string): number {\n return text.match(LATIN_WORD_REGEX)?.length ?? 0;\n}\n\nfunction isTechnicalLikeLatinLine(line: string, latinWords: number): boolean {\n const trimmed = line.trim();\n if (!trimmed) {\n return false;\n }\n\n if (/^[>#$]/u.test(trimmed)) {\n return true;\n }\n\n if (/(^|\\s)--[a-z0-9][a-z0-9-]*/iu.test(trimmed)) {\n return true;\n }\n\n if (/`[^`]+`/u.test(trimmed)) {\n return true;\n }\n\n if (/(^|[\\s\"'`])(?:\\.{0,2}\\/|\\/)?[\\w./-]+\\.[a-z0-9]{1,6}(?=$|[\\s\"'`])/iu.test(trimmed)) {\n return true;\n }\n\n if (/^[-*\\d.)\\s]*[\\p{L}\\p{N}_.-]+:\\s+\\S/iu.test(trimmed) && latinWords <= 8) {\n return true;\n }\n\n return false;\n}\n\nfunction shouldTreatLatinProseBlockAsSentenceLike(\n latinWords: number,\n lineCount: number,\n hasSentencePunctuation: boolean,\n): boolean {\n if (latinWords < 4) {\n return false;\n }\n\n if (hasSentencePunctuation) {\n return true;\n }\n\n return lineCount <= 1 ? latinWords >= 5 : latinWords >= 8;\n}\n\nfunction evaluateLatinContentGate(\n text: string,\n normalizedSample: string,\n mode: Exclude<DetectorContentGateMode, \"off\">,\n): DetectorContentGateResult {\n const minNormalizedLatinWords = mode === \"strict\" ? 5 : 4;\n const minProseWords = mode === \"strict\" ? 5 : mode === \"loose\" ? 3 : 4;\n const technicalWordSlack = mode === \"loose\" ? 2 : 0;\n const normalizedLatinWords = countLatinWords(normalizedSample);\n if (normalizedLatinWords < minNormalizedLatinWords) {\n return {\n applied: true,\n passed: false,\n policy: \"latinProse\",\n mode,\n };\n }\n\n let proseWords = 0;\n let technicalWords = 0;\n let proseBlockWords = 0;\n let proseBlockLines = 0;\n let proseBlockHasSentencePunctuation = false;\n\n const flushProseBlock = () => {\n if (\n shouldTreatLatinProseBlockAsSentenceLike(\n proseBlockWords,\n proseBlockLines,\n proseBlockHasSentencePunctuation,\n )\n ) {\n proseWords += proseBlockWords;\n }\n\n proseBlockWords = 0;\n proseBlockLines = 0;\n proseBlockHasSentencePunctuation = false;\n };\n\n for (const rawLine of text.split(/\\r?\\n/u)) {\n const line = rawLine.trim();\n if (!line || line === \"---\" || line === \"```\") {\n flushProseBlock();\n continue;\n }\n\n const latinWords = countLatinWords(line);\n if (latinWords === 0) {\n continue;\n }\n\n const technicalLike = isTechnicalLikeLatinLine(line, latinWords);\n if (technicalLike) {\n flushProseBlock();\n technicalWords += latinWords;\n continue;\n }\n\n proseBlockWords += latinWords;\n proseBlockLines += 1;\n proseBlockHasSentencePunctuation ||= /[.!?]/u.test(line);\n }\n\n flushProseBlock();\n return {\n applied: true,\n passed: proseWords >= minProseWords && proseWords + technicalWordSlack >= technicalWords,\n policy: \"latinProse\",\n mode,\n };\n}\n\nfunction evaluateEligibility(\n sample: DetectorDiagnosticSample,\n routeTag: DetectorRouteTag,\n minScriptChars: number,\n): DetectorEligibilityResult {\n const scriptChars = countMatchingChars(sample.text, getEligibilityScriptMatcher(routeTag));\n return {\n scriptChars,\n minScriptChars,\n passed: scriptChars >= minScriptChars,\n };\n}\n\nfunction getLatinEligibilityMinScriptChars(mode: DetectorContentGateMode = \"default\"): number {\n if (mode === \"strict\") {\n return LATIN_WASM_STRICT_MIN_SCRIPT_CHARS;\n }\n\n if (mode === \"loose\") {\n return LATIN_WASM_LOOSE_MIN_SCRIPT_CHARS;\n }\n\n return LATIN_WASM_MIN_SCRIPT_CHARS;\n}\n\nfunction evaluateHaniEligibility(\n sample: DetectorDiagnosticSample,\n mode: DetectorContentGateMode = \"default\",\n): DetectorEligibilityResult {\n if (mode === \"loose\") {\n const scriptChars = countMatchingChars(sample.focusText, HAN_SCRIPT_REGEX);\n return {\n scriptChars,\n minScriptChars: HANI_WASM_LOOSE_MIN_FOCUS_HAN_CHARS,\n passed: scriptChars >= HANI_WASM_LOOSE_MIN_FOCUS_HAN_CHARS,\n };\n }\n\n const minScriptChars =\n mode === \"strict\" ? HANI_WASM_STRICT_MIN_SCRIPT_CHARS : HANI_WASM_MIN_SCRIPT_CHARS;\n return evaluateEligibility(sample, DEFAULT_HAN_TAG, minScriptChars);\n}\n\nfunction shouldAcceptCandidate(\n confidence: number | undefined,\n reliable: boolean | undefined,\n minConfidence: number,\n): boolean {\n if (reliable !== true) {\n return false;\n }\n\n if (confidence === undefined) {\n return false;\n }\n\n return confidence >= minConfidence;\n}\n\nfunction evaluateLatinCorroboratedAcceptance(\n raw: DetectorResult,\n normalized: DetectorResult,\n): DetectorCorroboratedAcceptance {\n if (raw.tag !== normalized.tag) {\n return {\n accepted: false,\n confidence: Math.max(raw.confidence ?? 0, normalized.confidence ?? 0),\n hasReliableCorroboration: raw.reliable === true || normalized.reliable === true,\n reason: \"mismatch\",\n };\n }\n\n const confidence = Math.max(raw.confidence ?? 0, normalized.confidence ?? 0);\n const hasReliableCorroboration = raw.reliable === true || normalized.reliable === true;\n\n if (!hasReliableCorroboration && confidence >= LATIN_WASM_CORROBORATED_MIN_CONFIDENCE) {\n return {\n accepted: false,\n confidence,\n hasReliableCorroboration,\n reason: \"unreliable\",\n };\n }\n\n if (confidence < LATIN_WASM_CORROBORATED_MIN_CONFIDENCE) {\n return {\n accepted: false,\n confidence,\n hasReliableCorroboration,\n reason: \"belowThreshold\",\n };\n }\n\n if (!hasReliableCorroboration) {\n return {\n accepted: false,\n confidence,\n hasReliableCorroboration,\n reason: \"unreliable\",\n };\n }\n\n return {\n accepted: true,\n confidence,\n hasReliableCorroboration: true,\n };\n}\n\nfunction createLatinRoutePolicy(): DetectorRoutePolicy {\n return {\n routeTag: DEFAULT_LOCALE,\n eligibility: {\n evaluate(sample, mode = \"default\") {\n return evaluateEligibility(sample, DEFAULT_LOCALE, getLatinEligibilityMinScriptChars(mode));\n },\n },\n buildDiagnosticSample(window) {\n return buildFocusOnlyDiagnosticSample(window);\n },\n evaluateContentGate(sample, mode = \"default\") {\n if (mode === \"off\") {\n return {\n applied: false,\n passed: true,\n policy: \"none\",\n mode,\n };\n }\n\n return evaluateLatinContentGate(sample.text, sample.normalizedText, mode);\n },\n accept(candidate) {\n return shouldAcceptCandidate(\n candidate.confidence,\n candidate.reliable,\n LATIN_WASM_MIN_CONFIDENCE,\n );\n },\n acceptCorroborated(raw, normalized) {\n return evaluateLatinCorroboratedAcceptance(raw, normalized);\n },\n fallbackTag: DEFAULT_LOCALE,\n };\n}\n\nfunction createHaniRoutePolicy(): DetectorRoutePolicy {\n return {\n routeTag: DEFAULT_HAN_TAG,\n eligibility: {\n evaluate(sample, mode = \"default\") {\n return evaluateHaniEligibility(sample, mode);\n },\n },\n buildDiagnosticSample(window, chunks) {\n return buildHaniDiagnosticSample(window, chunks);\n },\n evaluateContentGate(_sample, mode = \"default\") {\n return {\n applied: false,\n passed: true,\n policy: \"none\",\n mode,\n };\n },\n accept(candidate) {\n return shouldAcceptCandidate(\n candidate.confidence,\n candidate.reliable,\n HANI_WASM_MIN_CONFIDENCE,\n );\n },\n fallbackTag: DEFAULT_HAN_TAG,\n };\n}\n\nexport const DETECTOR_ROUTE_POLICIES: Record<DetectorRouteTag, DetectorRoutePolicy> = {\n [DEFAULT_LOCALE]: createLatinRoutePolicy(),\n [DEFAULT_HAN_TAG]: createHaniRoutePolicy(),\n};\n\nexport function isAmbiguousDetectorRoute(locale: string): locale is DetectorRouteTag {\n return locale === DEFAULT_LOCALE || locale === DEFAULT_HAN_TAG;\n}\n\nexport function countScriptBearingCharsForRoute(text: string, routeTag: DetectorRouteTag): number {\n return countMatchingChars(text, getEligibilityScriptMatcher(routeTag));\n}\n\nexport function normalizeDetectorSampleForRoute(text: string, routeTag: DetectorRouteTag): string {\n return normalizeSampleText(text, routeTag);\n}\n","import { DETECTOR_ROUTE_POLICIES, type DetectorWindow } from \"./policy\";\nimport {\n createInspectChunk,\n createInspectPreview,\n type TracedLocaleChunk,\n} from \"./inspect-helpers\";\nimport type { DetectorInspectResult, DetectorInspectWindow } from \"./inspect-types\";\nimport type { ResolvedDetectorWindow } from \"./wasm-resolution\";\nimport type { ExecutedEngineSample } from \"./wasm-engine\";\n\nfunction buildInspectSample(\n sample:\n | ResolvedDetectorWindow[\"sample\"]\n | {\n text: string;\n normalizedText: string;\n normalizedApplied: boolean;\n textSource: \"focus\" | \"borrowed-context\";\n borrowedContext?: ResolvedDetectorWindow[\"sample\"][\"borrowedContext\"];\n },\n) {\n return {\n text: sample.text,\n textLength: sample.text.length,\n normalizedText: sample.normalizedText,\n normalizedApplied: sample.normalizedApplied,\n textSource: sample.textSource,\n ...(sample.borrowedContext ? { borrowedContext: sample.borrowedContext } : {}),\n };\n}\n\nexport function buildEmptyEngineInspectResult(\n input: DetectorInspectResult[\"input\"],\n): DetectorInspectResult {\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"engine\",\n detector: \"wasm\",\n input,\n sample: {\n text: \"\",\n textLength: 0,\n normalizedText: \"\",\n normalizedApplied: false,\n textSource: \"focus\",\n },\n decision: {\n kind: \"empty\",\n notes: [\"No detector-eligible content was present.\"],\n },\n };\n}\n\nexport async function buildEngineInspectResult(\n input: DetectorInspectResult[\"input\"],\n window: DetectorWindow,\n chunks: Array<{ locale: string; text: string }>,\n executeEngine: (\n sample: ReturnType<\n (typeof DETECTOR_ROUTE_POLICIES)[typeof window.routeTag][\"buildDiagnosticSample\"]\n >,\n routeTag: typeof window.routeTag,\n ) => Promise<ExecutedEngineSample>,\n): Promise<DetectorInspectResult> {\n const sample = DETECTOR_ROUTE_POLICIES[window.routeTag].buildDiagnosticSample(window, chunks);\n const { rawResult, rawRemapped, normalizedResult, normalizedRemapped } = await executeEngine(\n sample,\n window.routeTag,\n );\n\n if (!rawResult) {\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"engine\",\n detector: \"wasm\",\n input,\n routeTag: window.routeTag,\n sample: buildInspectSample(sample),\n };\n }\n\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"engine\",\n detector: \"wasm\",\n input,\n routeTag: window.routeTag,\n sample: buildInspectSample(sample),\n engine: {\n name: \"whatlang-wasm\",\n raw: rawResult,\n ...(normalizedResult ? { normalized: normalizedResult } : {}),\n remapped: {\n rawTag: rawRemapped?.tag ?? null,\n normalizedTag: normalizedRemapped?.tag ?? null,\n },\n },\n };\n}\n\nexport function buildEmptyPipelineInspectResult(\n input: DetectorInspectResult[\"input\"],\n): DetectorInspectResult {\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"pipeline\",\n detector: \"wasm\",\n input,\n chunks: [],\n windows: [],\n decision: {\n kind: \"empty\",\n notes: [\"No detector-eligible content was present.\"],\n },\n resolvedChunks: [],\n };\n}\n\nexport function buildPipelineInspectResult(\n input: DetectorInspectResult[\"input\"],\n tracedChunks: TracedLocaleChunk[],\n resolvedWindows: Array<ResolvedDetectorWindow & { window: DetectorWindow; windowIndex: number }>,\n finalResolved: Array<{ locale: string; text: string }>,\n): DetectorInspectResult {\n return {\n schemaVersion: 1,\n kind: \"detector-inspect\",\n view: \"pipeline\",\n detector: \"wasm\",\n input,\n chunks: tracedChunks.map((chunk, index) =>\n createInspectChunk(index, chunk, {\n source: chunk.source,\n }),\n ),\n windows: resolvedWindows.map(\n ({\n window,\n windowIndex,\n sample,\n eligibility,\n contentGate,\n engineExecuted,\n engineReason,\n decision,\n }) => {\n const focusPreview = createInspectPreview(sample.focusText);\n const samplePreview = createInspectPreview(sample.text);\n const normalizedPreview = createInspectPreview(sample.normalizedText);\n const inspectWindow: DetectorInspectWindow = {\n windowIndex,\n routeTag: window.routeTag,\n chunkRange: {\n start: window.startIndex,\n end: window.endIndex,\n },\n focusTextPreview: focusPreview.textPreview,\n focusTextPreviewTruncated: focusPreview.textPreviewTruncated,\n diagnosticSample: {\n textPreview: samplePreview.textPreview,\n textPreviewTruncated: samplePreview.textPreviewTruncated,\n normalizedTextPreview: normalizedPreview.textPreview,\n normalizedTextPreviewTruncated: normalizedPreview.textPreviewTruncated,\n normalizedApplied: sample.normalizedApplied,\n ...(sample.borrowedContext ? { borrowedContext: sample.borrowedContext } : {}),\n },\n eligibility,\n contentGate,\n engine: {\n executed: engineExecuted,\n ...(engineReason ? { reason: engineReason } : {}),\n },\n decision,\n };\n return inspectWindow;\n },\n ),\n resolvedChunks: finalResolved.map((chunk, index) => createInspectChunk(index, chunk)),\n };\n}\n","import { DEFAULT_HAN_TAG, DEFAULT_LOCALE } from \"../wc/locale-detect\";\nimport type { DetectorRouteTag } from \"./policy\";\nimport type { DetectorResult } from \"./types\";\n\nexport interface WhatlangWasmResult {\n lang: string;\n script: string;\n confidence: number;\n reliable: boolean;\n}\n\nconst LATIN_LANGUAGE_TAGS: Record<string, string> = {\n cat: \"ca\",\n ces: \"cs\",\n dan: \"da\",\n deu: \"de\",\n eng: \"en\",\n fin: \"fi\",\n fra: \"fr\",\n hun: \"hu\",\n ita: \"it\",\n lat: \"la\",\n nld: \"nl\",\n pol: \"pl\",\n por: \"pt\",\n ron: \"ro\",\n spa: \"es\",\n swe: \"sv\",\n tur: \"tr\",\n};\n\nconst HANI_LANGUAGE_TAGS: Record<string, string> = {\n cmn: \"zh\",\n jpn: \"ja\",\n};\n\nfunction hasSupportedScript(result: WhatlangWasmResult, routeTag: DetectorRouteTag): boolean {\n if (routeTag === DEFAULT_LOCALE) {\n return result.script === \"Latin\";\n }\n\n if (result.lang === \"cmn\") {\n return result.script === \"Mandarin\";\n }\n\n if (result.lang === \"jpn\") {\n return (\n result.script === \"Mandarin\" || result.script === \"Hiragana\" || result.script === \"Katakana\"\n );\n }\n\n return false;\n}\n\nfunction remapLanguageTag(lang: string, routeTag: DetectorRouteTag): string | undefined {\n if (routeTag === DEFAULT_LOCALE) {\n return LATIN_LANGUAGE_TAGS[lang];\n }\n\n return HANI_LANGUAGE_TAGS[lang];\n}\n\nexport function remapWhatlangResult(\n result: WhatlangWasmResult,\n routeTag: DetectorRouteTag,\n): DetectorResult | null {\n if (!hasSupportedScript(result, routeTag)) {\n return null;\n }\n\n const tag = remapLanguageTag(result.lang, routeTag);\n if (!tag) {\n return null;\n }\n\n return {\n tag,\n confidence: result.confidence,\n reliable: result.reliable,\n source: \"wasm\",\n };\n}\n\nexport function getDetectorFallbackTag(routeTag: DetectorRouteTag): string {\n return routeTag === DEFAULT_HAN_TAG ? DEFAULT_HAN_TAG : DEFAULT_LOCALE;\n}\n","import { segmentTextByLocale } from \"../wc\";\nimport { DEFAULT_LOCALE } from \"../wc/locale-detect\";\nimport type { LocaleChunk } from \"../wc/types\";\nimport { getDetectorFallbackTag } from \"./whatlang-map\";\nimport type { DetectorLocaleOptions } from \"./types\";\nimport type { DetectorWindow } from \"./policy\";\n\nexport function createDeferredLatinPreSegmentOptions(\n options: DetectorLocaleOptions,\n): DetectorLocaleOptions {\n return {\n ...options,\n latinLanguageHint: undefined,\n latinTagHint: undefined,\n latinLocaleHint: undefined,\n latinHintRules: undefined,\n useDefaultLatinHints: false,\n };\n}\n\nfunction createRuleOnlyLatinOptions(options: DetectorLocaleOptions): DetectorLocaleOptions {\n return {\n ...options,\n latinLanguageHint: undefined,\n latinTagHint: undefined,\n latinLocaleHint: undefined,\n };\n}\n\nfunction mergeAdjacentChunks(chunks: LocaleChunk[]): LocaleChunk[] {\n if (chunks.length === 0) {\n return chunks;\n }\n\n const merged: LocaleChunk[] = [];\n let last = chunks[0]!;\n\n for (let index = 1; index < chunks.length; index += 1) {\n const chunk = chunks[index]!;\n if (chunk.locale === last.locale) {\n last = {\n locale: last.locale,\n text: last.text + chunk.text,\n };\n continue;\n }\n merged.push(last);\n last = chunk;\n }\n\n merged.push(last);\n return merged;\n}\n\nexport function reapplyDeferredLatinFallback(\n chunks: LocaleChunk[],\n options: DetectorLocaleOptions,\n): LocaleChunk[] {\n const relabeled: LocaleChunk[] = [];\n\n for (const chunk of chunks) {\n if (chunk.locale !== DEFAULT_LOCALE) {\n relabeled.push(chunk);\n continue;\n }\n\n relabeled.push(...segmentTextByLocale(chunk.text, options));\n }\n\n return mergeAdjacentChunks(relabeled);\n}\n\nexport function reapplyResolvedLatinHintRules(\n resolvedChunks: LocaleChunk[],\n originalChunks: LocaleChunk[],\n options: DetectorLocaleOptions,\n): LocaleChunk[] {\n const relabeled: LocaleChunk[] = [];\n const ruleOnlyOptions = createRuleOnlyLatinOptions(options);\n\n for (let index = 0; index < resolvedChunks.length; index += 1) {\n const chunk = resolvedChunks[index];\n const originalChunk = originalChunks[index];\n if (!chunk || !originalChunk) {\n continue;\n }\n\n if (originalChunk.locale !== DEFAULT_LOCALE || chunk.locale === DEFAULT_LOCALE) {\n relabeled.push(chunk);\n continue;\n }\n\n const hintedChunks = segmentTextByLocale(chunk.text, ruleOnlyOptions).map((hintedChunk) => ({\n locale: hintedChunk.locale === DEFAULT_LOCALE ? chunk.locale : hintedChunk.locale,\n text: hintedChunk.text,\n }));\n relabeled.push(...hintedChunks);\n }\n\n return mergeAdjacentChunks(relabeled);\n}\n\nexport function resolveFallbackDebugOutcome(\n window: DetectorWindow,\n options: DetectorLocaleOptions,\n): {\n finalTag: string;\n finalLocales?: string[];\n} {\n const fallbackTag = getDetectorFallbackTag(window.routeTag);\n if (window.routeTag !== DEFAULT_LOCALE) {\n return { finalTag: fallbackTag };\n }\n\n const relabeled = reapplyDeferredLatinFallback(\n [\n {\n locale: fallbackTag,\n text: window.text,\n },\n ],\n options,\n );\n const finalLocales = relabeled.map((chunk) => chunk.locale);\n if (finalLocales.length === 1) {\n return {\n finalTag: finalLocales[0]!,\n };\n }\n\n return finalLocales.length > 1\n ? {\n finalTag: fallbackTag,\n finalLocales,\n }\n : {\n finalTag: fallbackTag,\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport type { DetectorRouteTag } from \"./policy\";\nimport type { WhatlangWasmResult } from \"./whatlang-map\";\n\nconst GENERATED_FOLDER_NAME = \"wasm-language-detector\";\nconst GENERATED_MODULE_FILE = \"language_detector.js\";\nconst MAX_SEARCH_DEPTH = 8;\nconst requireFromHere = createRequire(import.meta.url);\n\nexport const WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE =\n \"WASM detector runtime is unavailable. Run `bun run build:wasm` to generate it.\";\n\ntype WhatlangWasmModule = {\n detect_language: (text: string, routeTag: string) => WhatlangWasmResult | null;\n};\n\nlet modulePromise: Promise<WhatlangWasmModule> | null = null;\n\nfunction resolveCandidateModulePaths(): string[] {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = new Set<string>();\n let currentDir = moduleDir;\n\n for (let depth = 0; depth < MAX_SEARCH_DEPTH; depth += 1) {\n candidates.add(join(currentDir, GENERATED_FOLDER_NAME, GENERATED_MODULE_FILE));\n candidates.add(join(currentDir, \"generated\", GENERATED_FOLDER_NAME, GENERATED_MODULE_FILE));\n\n const parentDir = dirname(currentDir);\n if (parentDir === currentDir) {\n break;\n }\n currentDir = parentDir;\n }\n\n return [...candidates];\n}\n\nfunction resolveWhatlangWasmModulePath(): string {\n for (const candidate of resolveCandidateModulePaths()) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE);\n}\n\nasync function loadWhatlangWasmModule(): Promise<WhatlangWasmModule> {\n if (!modulePromise) {\n modulePromise = (async () => {\n const modulePath = resolveWhatlangWasmModulePath();\n return requireFromHere(modulePath) as WhatlangWasmModule;\n })();\n }\n\n return modulePromise;\n}\n\nexport async function detectWithWhatlangWasm(\n text: string,\n routeTag: DetectorRouteTag,\n): Promise<WhatlangWasmResult | null> {\n const wasmModule = await loadWhatlangWasmModule();\n return wasmModule.detect_language(text, routeTag);\n}\n","import type { DetectorDiagnosticSample, DetectorRouteTag } from \"./policy\";\nimport { remapWhatlangResult } from \"./whatlang-map\";\nimport { detectWithWhatlangWasm } from \"./whatlang-wasm\";\nimport type { DetectorResult } from \"./types\";\n\nexport type ExecutedEngineSample = {\n rawResult: Awaited<ReturnType<typeof detectWithWhatlangWasm>> | null;\n rawRemapped: DetectorResult | null;\n normalizedResult: Awaited<ReturnType<typeof detectWithWhatlangWasm>> | null;\n normalizedRemapped: DetectorResult | null;\n};\n\nexport function buildEvidenceSample(\n result: Awaited<ReturnType<typeof detectWithWhatlangWasm>> | null,\n remappedTag: string | null,\n) {\n return {\n lang: result?.lang ?? null,\n script: result?.script ?? null,\n confidence: result?.confidence ?? null,\n reliable: result?.reliable ?? null,\n remappedTag,\n };\n}\n\nexport async function executeEngineSample(\n sample: DetectorDiagnosticSample,\n routeTag: DetectorRouteTag,\n): Promise<ExecutedEngineSample> {\n const rawResult = await detectWithWhatlangWasm(sample.text, routeTag);\n const rawRemapped = rawResult ? remapWhatlangResult(rawResult, routeTag) : null;\n const normalizedResult =\n sample.normalizedApplied && sample.normalizedText.length > 0\n ? await detectWithWhatlangWasm(sample.normalizedText, routeTag)\n : null;\n const normalizedRemapped = normalizedResult\n ? remapWhatlangResult(normalizedResult, routeTag)\n : null;\n\n return {\n rawResult,\n rawRemapped,\n normalizedResult,\n normalizedRemapped,\n };\n}\n","import {\n createDetectorEvidencePreview,\n recordDetectorAccepted,\n recordDetectorFallback,\n recordDetectorWindow,\n type DetectorFallbackReason,\n} from \"./debug\";\nimport {\n DETECTOR_ROUTE_POLICIES,\n type DetectorContentGateResult,\n type DetectorDiagnosticSample,\n type DetectorEligibilityResult,\n type DetectorWindow,\n} from \"./policy\";\nimport type { LocaleChunk } from \"../wc/types\";\nimport { getDetectorFallbackTag } from \"./whatlang-map\";\nimport type { DetectorLocaleOptions } from \"./types\";\nimport { buildEvidenceSample, executeEngineSample } from \"./wasm-engine\";\nimport { resolveFallbackDebugOutcome } from \"./wasm-presegment\";\n\nexport type ResolvedDetectorWindow = {\n resolvedLocale: string;\n sample: DetectorDiagnosticSample;\n eligibility: DetectorEligibilityResult;\n contentGate: DetectorContentGateResult;\n engineExecuted: boolean;\n engineReason?: \"notEligible\";\n rawResult: Awaited<ReturnType<typeof executeEngineSample>>[\"rawResult\"];\n rawRemappedTag: string | null;\n normalizedResult: Awaited<ReturnType<typeof executeEngineSample>>[\"normalizedResult\"];\n normalizedRemappedTag: string | null;\n decision: {\n accepted: boolean;\n path: \"reliable\" | \"corroborated\" | null;\n finalTag: string;\n finalLocales?: string[];\n fallbackReason: DetectorFallbackReason | null;\n };\n};\n\nfunction emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample,\n eligibility,\n contentGate,\n rawResult,\n rawRemappedTag,\n normalizedResult,\n normalizedRemappedTag,\n decision,\n debug,\n}: {\n window: DetectorWindow;\n windowIndex: number;\n sample: DetectorDiagnosticSample;\n eligibility: DetectorEligibilityResult;\n contentGate: DetectorContentGateResult;\n rawResult: ResolvedDetectorWindow[\"rawResult\"];\n rawRemappedTag: string | null;\n normalizedResult: ResolvedDetectorWindow[\"normalizedResult\"];\n normalizedRemappedTag: string | null;\n decision: ResolvedDetectorWindow[\"decision\"];\n debug?: DetectorLocaleOptions[\"detectorDebug\"];\n}): void {\n const evidence = debug?.evidence;\n if (!evidence || !debug.emit) {\n return;\n }\n\n const baseDetails = {\n engine: \"whatlang-wasm\",\n routeTag: window.routeTag,\n windowIndex,\n startIndex: window.startIndex,\n endIndex: window.endIndex,\n mode: evidence.mode,\n section: evidence.section,\n textLength: sample.text.length,\n focusTextLength: sample.focusText.length,\n normalizedLength: sample.normalizedText.length,\n normalizedApplied: sample.normalizedApplied,\n textSource: sample.textSource,\n scriptChars: eligibility.scriptChars,\n minScriptChars: eligibility.minScriptChars,\n eligible: eligibility.passed,\n contentGate,\n qualityGate: contentGate.passed,\n raw: buildEvidenceSample(rawResult, rawRemappedTag),\n normalized: buildEvidenceSample(normalizedResult, normalizedRemappedTag),\n decision,\n ...(sample.borrowedContext ? { borrowedContext: sample.borrowedContext } : {}),\n };\n\n if (evidence.verbosity === \"verbose\") {\n debug.emit(\n \"detector.window.evidence\",\n {\n ...baseDetails,\n text: sample.text,\n normalizedText: sample.normalizedText,\n },\n { verbosity: \"verbose\" },\n );\n return;\n }\n\n const textPreview = createDetectorEvidencePreview(sample.text);\n const normalizedPreview = createDetectorEvidencePreview(sample.normalizedText);\n debug.emit(\n \"detector.window.evidence\",\n {\n ...baseDetails,\n textPreview: textPreview.preview,\n textPreviewTruncated: textPreview.truncated,\n normalizedPreview: normalizedPreview.preview,\n normalizedPreviewTruncated: normalizedPreview.truncated,\n },\n { verbosity: \"compact\" },\n );\n}\n\nexport async function resolveWindowLocale(\n window: DetectorWindow,\n windowIndex: number,\n chunks: LocaleChunk[],\n options: DetectorLocaleOptions,\n debug?: DetectorLocaleOptions[\"detectorDebug\"],\n): Promise<ResolvedDetectorWindow> {\n const routePolicy = DETECTOR_ROUTE_POLICIES[window.routeTag];\n const sample = routePolicy.buildDiagnosticSample(window, chunks);\n const configuredMode = options.contentGate?.mode;\n const eligibility = routePolicy.eligibility.evaluate(sample, configuredMode);\n const contentGate = routePolicy.evaluateContentGate(sample, configuredMode);\n\n recordDetectorWindow(debug?.summary, window.routeTag);\n debug?.emit?.(\n \"detector.window.start\",\n {\n routeTag: window.routeTag,\n startIndex: window.startIndex,\n endIndex: window.endIndex,\n textLength: window.text.length,\n sampleTextLength: sample.text.length,\n textSource: sample.textSource,\n ...(sample.borrowedContext ? { borrowedContext: sample.borrowedContext } : {}),\n },\n { verbosity: \"verbose\" },\n );\n\n if (!eligibility.passed) {\n recordDetectorFallback(debug?.summary, \"notEligible\");\n const fallbackDebugOutcome = resolveFallbackDebugOutcome(window, options);\n const resolution: ResolvedDetectorWindow = {\n resolvedLocale: getDetectorFallbackTag(window.routeTag),\n sample,\n eligibility,\n contentGate,\n engineExecuted: false,\n engineReason: \"notEligible\",\n rawResult: null,\n rawRemappedTag: null,\n normalizedResult: null,\n normalizedRemappedTag: null,\n decision: {\n accepted: false,\n path: null,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n fallbackReason: \"notEligible\",\n },\n };\n emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample: resolution.sample,\n eligibility: resolution.eligibility,\n contentGate: resolution.contentGate,\n rawResult: resolution.rawResult,\n rawRemappedTag: resolution.rawRemappedTag,\n normalizedResult: resolution.normalizedResult,\n normalizedRemappedTag: resolution.normalizedRemappedTag,\n decision: resolution.decision,\n debug,\n });\n debug?.emit?.(\"detector.window.fallback\", {\n routeTag: window.routeTag,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n reason: \"notEligible\",\n });\n return resolution;\n }\n\n const { rawResult, rawRemapped, normalizedResult, normalizedRemapped } =\n await executeEngineSample(sample, window.routeTag);\n debug?.emit?.(\n \"detector.window.sample\",\n {\n routeTag: window.routeTag,\n normalizedApplied: sample.normalizedApplied,\n normalizedLength: sample.normalizedText.length,\n textSource: sample.textSource,\n contentGate,\n qualityGate: contentGate.passed,\n rawTag: rawRemapped?.tag ?? null,\n rawConfidence: rawRemapped?.confidence ?? null,\n rawReliable: rawRemapped?.reliable ?? null,\n ...(sample.borrowedContext ? { borrowedContext: sample.borrowedContext } : {}),\n },\n { verbosity: \"verbose\" },\n );\n debug?.emit?.(\n \"detector.window.candidates\",\n {\n routeTag: window.routeTag,\n normalizedTag: normalizedRemapped?.tag ?? null,\n normalizedConfidence: normalizedRemapped?.confidence ?? null,\n normalizedReliable: normalizedRemapped?.reliable ?? null,\n },\n { verbosity: \"verbose\" },\n );\n\n const candidates = [rawRemapped, normalizedRemapped].filter((value) => value !== null);\n if (candidates.length === 0) {\n recordDetectorFallback(debug?.summary, \"noCandidate\");\n const fallbackDebugOutcome = resolveFallbackDebugOutcome(window, options);\n const resolution: ResolvedDetectorWindow = {\n resolvedLocale: getDetectorFallbackTag(window.routeTag),\n sample,\n eligibility,\n contentGate,\n engineExecuted: true,\n rawResult,\n rawRemappedTag: rawRemapped?.tag ?? null,\n normalizedResult,\n normalizedRemappedTag: normalizedRemapped?.tag ?? null,\n decision: {\n accepted: false,\n path: null,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n fallbackReason: \"noCandidate\",\n },\n };\n emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample: resolution.sample,\n eligibility: resolution.eligibility,\n contentGate: resolution.contentGate,\n rawResult: resolution.rawResult,\n rawRemappedTag: resolution.rawRemappedTag,\n normalizedResult: resolution.normalizedResult,\n normalizedRemappedTag: resolution.normalizedRemappedTag,\n decision: resolution.decision,\n debug,\n });\n debug?.emit?.(\"detector.window.fallback\", {\n routeTag: window.routeTag,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n reason: \"noCandidate\",\n });\n return resolution;\n }\n\n const strongestCandidate = candidates.reduce((best, current) => {\n if (!best) {\n return current;\n }\n return (current.confidence ?? 0) > (best.confidence ?? 0) ? current : best;\n }, candidates[0]);\n\n if (strongestCandidate && contentGate.passed && routePolicy.accept(strongestCandidate)) {\n recordDetectorAccepted(debug?.summary, \"reliable\");\n const resolution: ResolvedDetectorWindow = {\n resolvedLocale: strongestCandidate.tag,\n sample,\n eligibility,\n contentGate,\n engineExecuted: true,\n rawResult,\n rawRemappedTag: rawRemapped?.tag ?? null,\n normalizedResult,\n normalizedRemappedTag: normalizedRemapped?.tag ?? null,\n decision: {\n accepted: true,\n path: \"reliable\",\n finalTag: strongestCandidate.tag,\n fallbackReason: null,\n },\n };\n emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample: resolution.sample,\n eligibility: resolution.eligibility,\n contentGate: resolution.contentGate,\n rawResult: resolution.rawResult,\n rawRemappedTag: resolution.rawRemappedTag,\n normalizedResult: resolution.normalizedResult,\n normalizedRemappedTag: resolution.normalizedRemappedTag,\n decision: resolution.decision,\n debug,\n });\n debug?.emit?.(\"detector.window.accepted\", {\n routeTag: window.routeTag,\n finalTag: strongestCandidate.tag,\n acceptancePath: \"reliable\",\n confidence: strongestCandidate.confidence ?? null,\n reliable: strongestCandidate.reliable ?? null,\n });\n return resolution;\n }\n\n if (contentGate.passed && routePolicy.acceptCorroborated && rawRemapped && normalizedRemapped) {\n const corroborated = routePolicy.acceptCorroborated(rawRemapped, normalizedRemapped);\n if (corroborated.accepted) {\n recordDetectorAccepted(debug?.summary, \"corroborated\");\n const resolution: ResolvedDetectorWindow = {\n resolvedLocale: rawRemapped.tag,\n sample,\n eligibility,\n contentGate,\n engineExecuted: true,\n rawResult,\n rawRemappedTag: rawRemapped.tag,\n normalizedResult,\n normalizedRemappedTag: normalizedRemapped.tag,\n decision: {\n accepted: true,\n path: \"corroborated\",\n finalTag: rawRemapped.tag,\n fallbackReason: null,\n },\n };\n emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample: resolution.sample,\n eligibility: resolution.eligibility,\n contentGate: resolution.contentGate,\n rawResult: resolution.rawResult,\n rawRemappedTag: resolution.rawRemappedTag,\n normalizedResult: resolution.normalizedResult,\n normalizedRemappedTag: resolution.normalizedRemappedTag,\n decision: resolution.decision,\n debug,\n });\n debug?.emit?.(\"detector.window.accepted\", {\n routeTag: window.routeTag,\n finalTag: rawRemapped.tag,\n acceptancePath: \"corroborated\",\n confidence: corroborated.confidence,\n reliable: corroborated.hasReliableCorroboration,\n });\n return resolution;\n }\n\n if (corroborated.reason === \"unreliable\") {\n recordDetectorFallback(debug?.summary, \"corroborationUnreliable\");\n const fallbackDebugOutcome = resolveFallbackDebugOutcome(window, options);\n const resolution: ResolvedDetectorWindow = {\n resolvedLocale: getDetectorFallbackTag(window.routeTag),\n sample,\n eligibility,\n contentGate,\n engineExecuted: true,\n rawResult,\n rawRemappedTag: rawRemapped.tag,\n normalizedResult,\n normalizedRemappedTag: normalizedRemapped.tag,\n decision: {\n accepted: false,\n path: null,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n fallbackReason: \"corroborationUnreliable\",\n },\n };\n emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample: resolution.sample,\n eligibility: resolution.eligibility,\n contentGate: resolution.contentGate,\n rawResult: resolution.rawResult,\n rawRemappedTag: resolution.rawRemappedTag,\n normalizedResult: resolution.normalizedResult,\n normalizedRemappedTag: resolution.normalizedRemappedTag,\n decision: resolution.decision,\n debug,\n });\n debug?.emit?.(\"detector.window.fallback\", {\n routeTag: window.routeTag,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n reason: \"corroborationUnreliable\",\n });\n return resolution;\n }\n }\n\n const fallbackReason = contentGate.passed ? \"belowThreshold\" : \"qualityGate\";\n recordDetectorFallback(debug?.summary, fallbackReason);\n const fallbackDebugOutcome = resolveFallbackDebugOutcome(window, options);\n const resolution: ResolvedDetectorWindow = {\n resolvedLocale: getDetectorFallbackTag(window.routeTag),\n sample,\n eligibility,\n contentGate,\n engineExecuted: true,\n rawResult,\n rawRemappedTag: rawRemapped?.tag ?? null,\n normalizedResult,\n normalizedRemappedTag: normalizedRemapped?.tag ?? null,\n decision: {\n accepted: false,\n path: null,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n fallbackReason,\n },\n };\n emitDetectorWindowEvidence({\n window,\n windowIndex,\n sample: resolution.sample,\n eligibility: resolution.eligibility,\n contentGate: resolution.contentGate,\n rawResult: resolution.rawResult,\n rawRemappedTag: resolution.rawRemappedTag,\n normalizedResult: resolution.normalizedResult,\n normalizedRemappedTag: resolution.normalizedRemappedTag,\n decision: resolution.decision,\n debug,\n });\n debug?.emit?.(\"detector.window.fallback\", {\n routeTag: window.routeTag,\n finalTag: fallbackDebugOutcome.finalTag,\n ...(fallbackDebugOutcome.finalLocales\n ? { finalLocales: fallbackDebugOutcome.finalLocales }\n : {}),\n reason: fallbackReason,\n });\n return resolution;\n}\n","import type { LocaleChunk } from \"../wc/types\";\nimport { isAmbiguousDetectorRoute, type DetectorWindow } from \"./policy\";\n\nexport function buildDetectorWindows(chunks: LocaleChunk[]): DetectorWindow[] {\n const windows: DetectorWindow[] = [];\n\n for (let index = 0; index < chunks.length; index += 1) {\n const chunk = chunks[index];\n if (!chunk || !isAmbiguousDetectorRoute(chunk.locale)) {\n continue;\n }\n\n const previousWindow = windows[windows.length - 1];\n if (\n previousWindow &&\n previousWindow.routeTag === chunk.locale &&\n previousWindow.endIndex === index - 1\n ) {\n previousWindow.endIndex = index;\n previousWindow.text += chunk.text;\n continue;\n }\n\n windows.push({\n routeTag: chunk.locale,\n startIndex: index,\n endIndex: index,\n text: chunk.text,\n });\n }\n\n return windows;\n}\n","import { segmentTextByLocale } from \"../wc\";\nimport { resolveLocaleDetectContext } from \"../wc/locale-detect\";\nimport { buildWordCounterResultFromChunks } from \"./result-builder\";\nimport { countSectionsWithResolvedDetector } from \"./sections\";\nimport { type DetectorWindow } from \"./policy\";\nimport { createInspectInput, segmentTextByLocaleWithTrace } from \"./inspect-helpers\";\nimport type { DetectorInspectOptions, DetectorInspectResult } from \"./inspect-types\";\nimport {\n buildEmptyEngineInspectResult,\n buildEmptyPipelineInspectResult,\n buildEngineInspectResult,\n buildPipelineInspectResult,\n} from \"./wasm-inspect\";\nimport {\n createDeferredLatinPreSegmentOptions,\n reapplyDeferredLatinFallback,\n reapplyResolvedLatinHintRules,\n} from \"./wasm-presegment\";\nimport { executeEngineSample } from \"./wasm-engine\";\nimport { resolveWindowLocale, type ResolvedDetectorWindow } from \"./wasm-resolution\";\nimport { buildDetectorWindows } from \"./wasm-windows\";\nimport { WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE } from \"./whatlang-wasm\";\nimport type {\n DetectorCountSectionsOptions,\n DetectorLocaleOptions,\n DetectorWordCounterOptions,\n} from \"./types\";\n\nexport { WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE };\n\nexport async function segmentTextByLocaleWithWasmDetector(\n text: string,\n options: DetectorLocaleOptions = {},\n) {\n // Validate the original hint configuration up front even though Latin hinting\n // is deferred until after detector routing in WASM mode.\n resolveLocaleDetectContext(options);\n\n const chunks = segmentTextByLocale(text, createDeferredLatinPreSegmentOptions(options));\n const resolved = [...chunks];\n const windows = buildDetectorWindows(chunks);\n\n for (const [windowIndex, window] of windows.entries()) {\n const resolution = await resolveWindowLocale(\n window,\n windowIndex,\n chunks,\n options,\n options.detectorDebug,\n );\n for (let index = window.startIndex; index <= window.endIndex; index += 1) {\n const chunk = resolved[index];\n if (!chunk) {\n continue;\n }\n resolved[index] = {\n ...chunk,\n locale: resolution.resolvedLocale,\n };\n }\n }\n\n options.detectorDebug?.emit?.(\"detector.summary\", options.detectorDebug.summary, {\n verbosity: \"compact\",\n });\n const hintRelabeled = reapplyResolvedLatinHintRules(resolved, chunks, options);\n return reapplyDeferredLatinFallback(hintRelabeled, options);\n}\n\nexport async function wordCounterWithWasmDetector(\n text: string,\n options: DetectorWordCounterOptions = {},\n) {\n const chunks = await segmentTextByLocaleWithWasmDetector(text, options);\n return buildWordCounterResultFromChunks(chunks, options);\n}\n\nexport async function countSectionsWithWasmDetector(\n input: string,\n section: Parameters<typeof countSectionsWithResolvedDetector>[1],\n options: DetectorCountSectionsOptions = {},\n) {\n return countSectionsWithResolvedDetector(input, section, options);\n}\n\nexport async function inspectTextWithWasmDetector(\n text: string,\n options: DetectorInspectOptions = {},\n): Promise<DetectorInspectResult> {\n const input = createInspectInput(text, options.input);\n const tracedChunks = segmentTextByLocaleWithTrace(\n text,\n createDeferredLatinPreSegmentOptions(options),\n );\n const chunks = tracedChunks.map(({ locale, text: chunkText }) => ({\n locale,\n text: chunkText,\n }));\n const windows = buildDetectorWindows(chunks);\n\n if (options.view === \"engine\") {\n if (windows.length === 0) {\n return buildEmptyEngineInspectResult(input);\n }\n\n const window = windows[0]!;\n return buildEngineInspectResult(input, window, chunks, executeEngineSample);\n }\n\n if (text.trim().length === 0) {\n return buildEmptyPipelineInspectResult(input);\n }\n\n const resolved = [...chunks];\n const resolvedWindows: Array<\n ResolvedDetectorWindow & { window: DetectorWindow; windowIndex: number }\n > = [];\n\n for (const [windowIndex, window] of windows.entries()) {\n const resolution = await resolveWindowLocale(window, windowIndex, chunks, options);\n resolvedWindows.push({\n ...resolution,\n window,\n windowIndex,\n });\n for (let index = window.startIndex; index <= window.endIndex; index += 1) {\n const chunk = resolved[index];\n if (!chunk) {\n continue;\n }\n resolved[index] = {\n ...chunk,\n locale: resolution.resolvedLocale,\n };\n }\n }\n\n const hintRelabeled = reapplyResolvedLatinHintRules(resolved, chunks, options);\n const finalResolved = reapplyDeferredLatinFallback(hintRelabeled, options);\n\n return buildPipelineInspectResult(input, tracedChunks, resolvedWindows, finalResolved);\n}\n","import { inspectTextWithRegexDetector } from \"./none\";\nimport type { DetectorInspectOptions, DetectorInspectResult } from \"./inspect-types\";\nimport type { DetectorMode } from \"./types\";\nimport { inspectTextWithWasmDetector } from \"./wasm\";\n\nfunction resolveInspectDetectorMode(\n mode: DetectorMode | undefined,\n view: DetectorInspectOptions[\"view\"],\n): DetectorMode {\n if (mode) {\n return mode;\n }\n\n void view;\n return \"wasm\";\n}\n\nexport async function inspectTextWithDetector(\n text: string,\n options: DetectorInspectOptions = {},\n): Promise<DetectorInspectResult> {\n const view = options.view ?? \"pipeline\";\n const detector = resolveInspectDetectorMode(options.detector, view);\n\n if (detector === \"regex\" && view === \"engine\") {\n throw new Error('`view: \"engine\"` requires `detector: \"wasm\"`.');\n }\n\n if (detector === \"regex\") {\n return inspectTextWithRegexDetector(text, {\n ...options,\n detector,\n view: \"pipeline\",\n });\n }\n\n return inspectTextWithWasmDetector(text, {\n ...options,\n detector,\n view,\n });\n}\n","import type { SectionMode } from \"../markdown\";\nimport type { LocaleChunk } from \"../wc/types\";\nimport {\n countSectionsWithRegexDetector,\n inspectTextWithRegexDetector,\n segmentTextByLocaleWithRegexDetector,\n wordCounterWithRegexDetector,\n} from \"./none\";\nimport {\n countSectionsWithWasmDetector,\n inspectTextWithWasmDetector,\n segmentTextByLocaleWithWasmDetector,\n WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE,\n wordCounterWithWasmDetector,\n} from \"./wasm\";\nimport { inspectTextWithDetector } from \"./inspect\";\nimport { createDetectorDebugSummary, mergeDetectorDebugSummaries } from \"./debug\";\nimport type {\n DetectorContentGateMode,\n DetectorContentGateOptions,\n DetectorCountSectionsOptions,\n DetectorLocaleOptions,\n DetectorMode,\n DetectorResult,\n DetectorSource,\n DetectorWordCounterOptions,\n} from \"./types\";\n\nexport type {\n DetectorContentGateMode,\n DetectorContentGateOptions,\n DetectorCountSections,\n DetectorCountSectionsOptions,\n DetectorCountResult,\n DetectorLocaleOptions,\n DetectorMode,\n DetectorResult,\n DetectorRuntimeOptions,\n DetectorSource,\n DetectorWordCounterOptions,\n} from \"./types\";\nexport type {\n DetectorInspectChunk,\n DetectorInspectDecision,\n DetectorInspectEngine,\n DetectorInspectEngineRaw,\n DetectorInspectEngineResult,\n DetectorInspectInput,\n DetectorInspectInputOptions,\n DetectorInspectInputSourceType,\n DetectorInspectKind,\n DetectorInspectOptions,\n DetectorInspectPipelineResult,\n DetectorInspectResult,\n DetectorInspectSample,\n DetectorInspectSchemaVersion,\n DetectorInspectView,\n DetectorInspectWindow,\n} from \"./inspect-types\";\nexport type {\n DetectorDebugContext,\n DetectorDebugSummary,\n DetectorDebugVerbosity,\n DetectorEvidenceConfig,\n DetectorFallbackReason,\n} from \"./debug\";\n\nexport const DETECTOR_MODES: DetectorMode[] = [\"regex\", \"wasm\"];\nexport const DEFAULT_DETECTOR_MODE: DetectorMode = \"regex\";\n\nexport function resolveDetectorMode(mode?: DetectorMode): DetectorMode {\n return mode ?? DEFAULT_DETECTOR_MODE;\n}\n\nexport function assertDetectorModeImplemented(mode?: DetectorMode): void {\n void mode;\n}\n\nexport async function segmentTextByLocaleWithDetector(\n text: string,\n options: DetectorLocaleOptions = {},\n): Promise<LocaleChunk[]> {\n const mode = resolveDetectorMode(options.detector);\n if (mode === \"wasm\") {\n return segmentTextByLocaleWithWasmDetector(text, options);\n }\n return segmentTextByLocaleWithRegexDetector(text, options);\n}\n\nexport async function wordCounterWithDetector(\n text: string,\n options: DetectorWordCounterOptions = {},\n) {\n const mode = resolveDetectorMode(options.detector);\n if (mode === \"wasm\") {\n return wordCounterWithWasmDetector(text, options);\n }\n return wordCounterWithRegexDetector(text, options);\n}\n\nexport async function countSectionsWithDetector(\n input: string,\n section: SectionMode,\n options: DetectorCountSectionsOptions = {},\n) {\n const mode = resolveDetectorMode(options.detector);\n if (mode === \"wasm\") {\n return countSectionsWithWasmDetector(input, section, options);\n }\n return countSectionsWithRegexDetector(input, section, options);\n}\n\nexport const DETECTOR_SOURCES: DetectorSource[] = [\"script\", \"hint\", \"wasm\"];\nexport const DEFAULT_DETECTOR_RESULT_SOURCE: DetectorSource = \"script\";\nexport { WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE };\nexport {\n createDetectorDebugSummary,\n inspectTextWithDetector,\n inspectTextWithRegexDetector,\n inspectTextWithWasmDetector,\n mergeDetectorDebugSummaries,\n};\n\nexport function createDetectorResult(\n tag: string,\n source: DetectorSource = DEFAULT_DETECTOR_RESULT_SOURCE,\n confidence?: number,\n reliable?: boolean,\n): DetectorResult {\n return {\n tag,\n source,\n ...(confidence === undefined ? {} : { confidence }),\n ...(reliable === undefined ? {} : { reliable }),\n };\n}\n","import {\n assertDetectorModeImplemented,\n countSectionsWithDetector,\n createDetectorDebugSummary,\n createDetectorResult,\n DEFAULT_DETECTOR_MODE,\n DEFAULT_DETECTOR_RESULT_SOURCE,\n DETECTOR_MODES,\n DETECTOR_SOURCES,\n inspectTextWithDetector,\n inspectTextWithRegexDetector,\n inspectTextWithWasmDetector,\n mergeDetectorDebugSummaries,\n resolveDetectorMode,\n segmentTextByLocaleWithDetector,\n WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE,\n wordCounterWithDetector,\n} from \"./index\";\n\nconst cjsExports = {\n assertDetectorModeImplemented,\n countSectionsWithDetector,\n createDetectorDebugSummary,\n createDetectorResult,\n DEFAULT_DETECTOR_MODE,\n DEFAULT_DETECTOR_RESULT_SOURCE,\n DETECTOR_MODES,\n DETECTOR_SOURCES,\n inspectTextWithDetector,\n inspectTextWithRegexDetector,\n inspectTextWithWasmDetector,\n mergeDetectorDebugSummaries,\n resolveDetectorMode,\n segmentTextByLocaleWithDetector,\n WASM_DETECTOR_RUNTIME_UNAVAILABLE_MESSAGE,\n wordCounterWithDetector,\n};\n\nexport = cjsExports;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":["wordCounter"],"sources":["../../src/utils/show-singular-or-plural-word.ts","../../src/index.cjs.ts"],"sourcesContent":["export function showSingularOrPluralWord(count: number, word: string): string {\n return `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n}\n","import wordCounter, { countCharsForLocale, countWordsForLocale, segmentTextByLocale } from \"./wc\";\nimport { parseMarkdown, countSections } from \"./markdown\";\nimport { showSingularOrPluralWord } from \"./utils\";\n\nconst cjsExports = Object.assign(wordCounter, {\n default: wordCounter,\n wordCounter,\n countCharsForLocale,\n countWordsForLocale,\n segmentTextByLocale,\n parseMarkdown,\n countSections,\n showSingularOrPluralWord,\n});\n\nexport = cjsExports;\n"],"mappings":";;AAAA,SAAgB,yBAAyB,OAAe,MAAsB;AAC5E,QAAO,GAAG,MAAM,GAAG,OAAO,UAAU,IAAI,KAAK;;;;ACG/C,MAAM,aAAa,OAAO,OAAOA,iBAAAA,YAAa;CAC5C,SAASA,iBAAAA;CACT,aAAA,iBAAA;CACA,qBAAA,iBAAA;CACA,qBAAA,iBAAA;CACA,qBAAA,iBAAA;CACA,eAAA,iBAAA;CACA,eAAA,iBAAA;CACA;CACD,CAAC;iBAEO"}