@dev-pi2pie/word-counter 0.1.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.
- package/dist/cjs/detector.cjs +0 -2
- package/dist/cjs/index.cjs +0 -2
- package/dist/cjs/markdown.cjs +0 -2
- package/dist/esm/bin.mjs +2 -4
- package/dist/esm/detector.d.mts +1 -2
- package/dist/esm/detector.mjs +0 -2
- package/dist/esm/index.d.mts +1 -2
- package/dist/esm/index.mjs +0 -2
- package/dist/esm/markdown.mjs +0 -2
- package/dist/esm/worker/count-worker.mjs +0 -2
- package/dist/esm/worker-pool.mjs +0 -2
- package/dist/wasm-language-detector/language_detector.js +2 -2
- package/dist/wasm-language-detector/language_detector_bg.wasm +0 -0
- package/package.json +7 -4
- package/dist/cjs/detector.cjs.map +0 -1
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/markdown.cjs.map +0 -1
- package/dist/esm/bin.mjs.map +0 -1
- package/dist/esm/detector.mjs.map +0 -1
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/markdown.mjs.map +0 -1
- package/dist/esm/worker/count-worker.mjs.map +0 -1
- package/dist/esm/worker-pool.mjs.map +0 -1
package/dist/cjs/detector.cjs
CHANGED
package/dist/cjs/index.cjs
CHANGED
package/dist/cjs/markdown.cjs
CHANGED
package/dist/esm/bin.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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;
|
|
@@ -6607,5 +6607,3 @@ runCli().catch((error) => {
|
|
|
6607
6607
|
});
|
|
6608
6608
|
//#endregion
|
|
6609
6609
|
export {};
|
|
6610
|
-
|
|
6611
|
-
//# sourceMappingURL=bin.mjs.map
|
package/dist/esm/detector.d.mts
CHANGED
|
@@ -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 };
|
package/dist/esm/detector.mjs
CHANGED
|
@@ -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
|
package/dist/esm/index.d.mts
CHANGED
|
@@ -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 };
|
package/dist/esm/index.mjs
CHANGED
|
@@ -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
|
package/dist/esm/markdown.mjs
CHANGED
|
@@ -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
|
package/dist/esm/worker-pool.mjs
CHANGED
|
@@ -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
|
-
|
|
21
|
+
__wbg___wbindgen_throw_bd5a70920abf0236: function(arg0, arg1) {
|
|
22
22
|
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
23
23
|
},
|
|
24
|
-
|
|
24
|
+
__wbg_new_e4597c3f125a2038: function() {
|
|
25
25
|
const ret = new Object();
|
|
26
26
|
return ret;
|
|
27
27
|
},
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dev-pi2pie/word-counter",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6-canary.1",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"cli",
|
|
6
6
|
"intl-segmenter",
|
|
@@ -62,15 +62,18 @@
|
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/bun": "^1.3.11",
|
|
64
64
|
"@types/node": "^25.5.0",
|
|
65
|
-
"oxfmt": "^0.
|
|
66
|
-
"oxlint": "^1.
|
|
65
|
+
"oxfmt": "^0.43.0",
|
|
66
|
+
"oxlint": "^1.58.0",
|
|
67
67
|
"picocolors": "^1.1.1",
|
|
68
|
-
"tsdown": "^0.21.
|
|
68
|
+
"tsdown": "^0.21.7",
|
|
69
69
|
"typescript": "^6.0.2"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
72
|
"typescript": "^5 || ^6"
|
|
73
73
|
},
|
|
74
|
+
"overrides": {
|
|
75
|
+
"picomatch": "4.0.4"
|
|
76
|
+
},
|
|
74
77
|
"engines": {
|
|
75
78
|
"node": ">=22.18.0"
|
|
76
79
|
}
|
|
@@ -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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"}
|
package/dist/cjs/index.cjs.map
DELETED
|
@@ -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"}
|