@intlayer/cli 9.0.0-canary.0 → 9.0.0-canary.10
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/auth/login.cjs +42 -29
- package/dist/cjs/auth/login.cjs.map +1 -1
- package/dist/cjs/cli.cjs +25 -12
- package/dist/cjs/cli.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/init.cjs +332 -2
- package/dist/cjs/init.cjs.map +1 -1
- package/dist/cjs/initBuildOptimization.cjs +81 -0
- package/dist/cjs/initBuildOptimization.cjs.map +1 -0
- package/dist/cjs/initCompiler.cjs +117 -0
- package/dist/cjs/initCompiler.cjs.map +1 -0
- package/dist/cjs/initMCP.cjs +22 -19
- package/dist/cjs/initMCP.cjs.map +1 -1
- package/dist/cjs/initSkills.cjs +21 -18
- package/dist/cjs/initSkills.cjs.map +1 -1
- package/dist/cjs/reviewDoc/reviewDoc.cjs +38 -11
- package/dist/cjs/reviewDoc/reviewDoc.cjs.map +1 -1
- package/dist/cjs/reviewDoc/reviewDocBlockAware.cjs +55 -38
- package/dist/cjs/reviewDoc/reviewDocBlockAware.cjs.map +1 -1
- package/dist/cjs/reviewDoc/reviewDocLog.cjs +48 -0
- package/dist/cjs/reviewDoc/reviewDocLog.cjs.map +1 -0
- package/dist/cjs/translateDoc/translateFile.cjs +1 -1
- package/dist/cjs/utils/formatLineRanges.cjs +44 -0
- package/dist/cjs/utils/formatLineRanges.cjs.map +1 -0
- package/dist/esm/auth/login.mjs +42 -29
- package/dist/esm/auth/login.mjs.map +1 -1
- package/dist/esm/cli.mjs +25 -12
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/init.mjs +332 -4
- package/dist/esm/init.mjs.map +1 -1
- package/dist/esm/initBuildOptimization.mjs +78 -0
- package/dist/esm/initBuildOptimization.mjs.map +1 -0
- package/dist/esm/initCompiler.mjs +114 -0
- package/dist/esm/initCompiler.mjs.map +1 -0
- package/dist/esm/initMCP.mjs +22 -19
- package/dist/esm/initMCP.mjs.map +1 -1
- package/dist/esm/initSkills.mjs +21 -18
- package/dist/esm/initSkills.mjs.map +1 -1
- package/dist/esm/reviewDoc/reviewDoc.mjs +38 -11
- package/dist/esm/reviewDoc/reviewDoc.mjs.map +1 -1
- package/dist/esm/reviewDoc/reviewDocBlockAware.mjs +55 -38
- package/dist/esm/reviewDoc/reviewDocBlockAware.mjs.map +1 -1
- package/dist/esm/reviewDoc/reviewDocLog.mjs +46 -0
- package/dist/esm/reviewDoc/reviewDocLog.mjs.map +1 -0
- package/dist/esm/translateDoc/translateFile.mjs +1 -1
- package/dist/esm/utils/formatLineRanges.mjs +42 -0
- package/dist/esm/utils/formatLineRanges.mjs.map +1 -0
- package/dist/types/auth/login.d.ts +13 -4
- package/dist/types/auth/login.d.ts.map +1 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/init.d.ts +1 -1
- package/dist/types/init.d.ts.map +1 -1
- package/dist/types/initBuildOptimization.d.ts +20 -0
- package/dist/types/initBuildOptimization.d.ts.map +1 -0
- package/dist/types/initCompiler.d.ts +18 -0
- package/dist/types/initCompiler.d.ts.map +1 -0
- package/dist/types/initMCP.d.ts +3 -1
- package/dist/types/initMCP.d.ts.map +1 -1
- package/dist/types/initSkills.d.ts +1 -1
- package/dist/types/initSkills.d.ts.map +1 -1
- package/dist/types/reviewDoc/reviewDoc.d.ts +8 -1
- package/dist/types/reviewDoc/reviewDoc.d.ts.map +1 -1
- package/dist/types/reviewDoc/reviewDocBlockAware.d.ts +8 -6
- package/dist/types/reviewDoc/reviewDocBlockAware.d.ts.map +1 -1
- package/dist/types/reviewDoc/reviewDocLog.d.ts +25 -0
- package/dist/types/reviewDoc/reviewDocLog.d.ts.map +1 -0
- package/dist/types/utils/formatLineRanges.d.ts +21 -0
- package/dist/types/utils/formatLineRanges.d.ts.map +1 -0
- package/package.json +14 -14
- package/dist/cjs/translation-alignment/alignBlocks.cjs +0 -68
- package/dist/cjs/translation-alignment/alignBlocks.cjs.map +0 -1
- package/dist/cjs/translation-alignment/computeSimilarity.cjs +0 -26
- package/dist/cjs/translation-alignment/computeSimilarity.cjs.map +0 -1
- package/dist/cjs/translation-alignment/fingerprintBlock.cjs +0 -24
- package/dist/cjs/translation-alignment/fingerprintBlock.cjs.map +0 -1
- package/dist/cjs/translation-alignment/index.cjs +0 -22
- package/dist/cjs/translation-alignment/mapChangedLinesToBlocks.cjs +0 -19
- package/dist/cjs/translation-alignment/mapChangedLinesToBlocks.cjs.map +0 -1
- package/dist/cjs/translation-alignment/normalizeBlock.cjs +0 -23
- package/dist/cjs/translation-alignment/normalizeBlock.cjs.map +0 -1
- package/dist/cjs/translation-alignment/pipeline.cjs +0 -38
- package/dist/cjs/translation-alignment/pipeline.cjs.map +0 -1
- package/dist/cjs/translation-alignment/planActions.cjs +0 -47
- package/dist/cjs/translation-alignment/planActions.cjs.map +0 -1
- package/dist/cjs/translation-alignment/rebuildDocument.cjs +0 -50
- package/dist/cjs/translation-alignment/rebuildDocument.cjs.map +0 -1
- package/dist/cjs/translation-alignment/segmentDocument.cjs +0 -67
- package/dist/cjs/translation-alignment/segmentDocument.cjs.map +0 -1
- package/dist/cjs/translation-alignment/types.cjs +0 -0
- package/dist/esm/translation-alignment/alignBlocks.mjs +0 -67
- package/dist/esm/translation-alignment/alignBlocks.mjs.map +0 -1
- package/dist/esm/translation-alignment/computeSimilarity.mjs +0 -23
- package/dist/esm/translation-alignment/computeSimilarity.mjs.map +0 -1
- package/dist/esm/translation-alignment/fingerprintBlock.mjs +0 -21
- package/dist/esm/translation-alignment/fingerprintBlock.mjs.map +0 -1
- package/dist/esm/translation-alignment/index.mjs +0 -11
- package/dist/esm/translation-alignment/mapChangedLinesToBlocks.mjs +0 -17
- package/dist/esm/translation-alignment/mapChangedLinesToBlocks.mjs.map +0 -1
- package/dist/esm/translation-alignment/normalizeBlock.mjs +0 -21
- package/dist/esm/translation-alignment/normalizeBlock.mjs.map +0 -1
- package/dist/esm/translation-alignment/pipeline.mjs +0 -36
- package/dist/esm/translation-alignment/pipeline.mjs.map +0 -1
- package/dist/esm/translation-alignment/planActions.mjs +0 -45
- package/dist/esm/translation-alignment/planActions.mjs.map +0 -1
- package/dist/esm/translation-alignment/rebuildDocument.mjs +0 -47
- package/dist/esm/translation-alignment/rebuildDocument.mjs.map +0 -1
- package/dist/esm/translation-alignment/segmentDocument.mjs +0 -65
- package/dist/esm/translation-alignment/segmentDocument.mjs.map +0 -1
- package/dist/esm/translation-alignment/types.mjs +0 -0
- package/dist/types/translation-alignment/alignBlocks.d.ts +0 -7
- package/dist/types/translation-alignment/alignBlocks.d.ts.map +0 -1
- package/dist/types/translation-alignment/computeSimilarity.d.ts +0 -6
- package/dist/types/translation-alignment/computeSimilarity.d.ts.map +0 -1
- package/dist/types/translation-alignment/fingerprintBlock.d.ts +0 -7
- package/dist/types/translation-alignment/fingerprintBlock.d.ts.map +0 -1
- package/dist/types/translation-alignment/index.d.ts +0 -11
- package/dist/types/translation-alignment/mapChangedLinesToBlocks.d.ts +0 -7
- package/dist/types/translation-alignment/mapChangedLinesToBlocks.d.ts.map +0 -1
- package/dist/types/translation-alignment/normalizeBlock.d.ts +0 -7
- package/dist/types/translation-alignment/normalizeBlock.d.ts.map +0 -1
- package/dist/types/translation-alignment/pipeline.d.ts +0 -25
- package/dist/types/translation-alignment/pipeline.d.ts.map +0 -1
- package/dist/types/translation-alignment/planActions.d.ts +0 -7
- package/dist/types/translation-alignment/planActions.d.ts.map +0 -1
- package/dist/types/translation-alignment/rebuildDocument.d.ts +0 -32
- package/dist/types/translation-alignment/rebuildDocument.d.ts.map +0 -1
- package/dist/types/translation-alignment/segmentDocument.d.ts +0 -7
- package/dist/types/translation-alignment/segmentDocument.d.ts.map +0 -1
- package/dist/types/translation-alignment/types.d.ts +0 -49
- package/dist/types/translation-alignment/types.d.ts.map +0 -1
|
@@ -5,12 +5,21 @@ type LoginOptions = {
|
|
|
5
5
|
cmsUrl?: string;
|
|
6
6
|
configOptions?: GetConfigurationOptions;
|
|
7
7
|
/**
|
|
8
|
-
* When false, do not call process.exit(0) after a successful
|
|
9
|
-
*
|
|
10
|
-
* Defaults to true to preserve existing standalone-login behaviour.
|
|
11
|
-
* Access-key login always exits because the user must configure .env first.
|
|
8
|
+
* When false, do not call process.exit(0) after a successful login so the
|
|
9
|
+
* caller can continue (e.g. retry a command inline, or finish an interactive
|
|
10
|
+
* setup). Defaults to true to preserve existing standalone-login behaviour.
|
|
12
11
|
*/
|
|
13
12
|
exitAfter?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Invoked with the access-key credentials when the login flow returns a
|
|
15
|
+
* `clientId` / `clientSecret` pair. When provided, the caller takes ownership
|
|
16
|
+
* of persisting the credentials (e.g. writing them to `.env` and enabling the
|
|
17
|
+
* editor in the config), so the default manual-setup instructions are skipped.
|
|
18
|
+
*/
|
|
19
|
+
onCredentials?: (credentials: {
|
|
20
|
+
clientId: string;
|
|
21
|
+
clientSecret: string;
|
|
22
|
+
}) => void | Promise<void>;
|
|
14
23
|
};
|
|
15
24
|
declare const login: (options?: LoginOptions) => Promise<void>;
|
|
16
25
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","names":[],"sources":["../../../src/auth/login.ts"],"mappings":";;;KAiEK,YAAA;EACH,MAAA;EACA,aAAA,GAAgB,uBAAA;EAFD
|
|
1
|
+
{"version":3,"file":"login.d.ts","names":[],"sources":["../../../src/auth/login.ts"],"mappings":";;;KAiEK,YAAA;EACH,MAAA;EACA,aAAA,GAAgB,uBAAA;EAFD;;;;;EAQf,SAAA;EAAA;;;;;;EAOA,aAAA,IAAiB,WAAA;IACf,QAAA;IACA,YAAA;EAAA,aACW,OAAA;AAAA;AAAA,cAGF,KAAA,GAAe,OAAA,GAAS,YAAA,KAAiB,OAAA"}
|
package/dist/types/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","names":[],"sources":["../../src/cli.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","names":[],"sources":["../../src/cli.ts"],"mappings":";;;cA4Ca,OAAA;AAAA,KA4IR,UAAA;EACH,MAAA;EACA,OAAA;AAAA;AAAA,KAGU,oBAAA;EACV,OAAA;EACA,GAAA;EACA,OAAA;EACA,OAAA;EACA,UAAA;AAAA,IACE,UAAA;AANJ;;;;;;;;AAAA,cAuEa,MAAA,QAAa,OAAA"}
|
package/dist/types/init.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { InitOptions } from "@intlayer/chokidar/cli";
|
|
|
2
2
|
|
|
3
3
|
//#region src/init.d.ts
|
|
4
4
|
declare const findProjectRoot: (startDir: string) => string;
|
|
5
|
-
declare const init: (projectRoot?: string, options?: InitOptions) => Promise<void>;
|
|
5
|
+
declare const init: (projectRoot?: string, options?: InitOptions, interactive?: boolean) => Promise<void>;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { findProjectRoot, init };
|
|
8
8
|
//# sourceMappingURL=init.d.ts.map
|
package/dist/types/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","names":[],"sources":["../../src/init.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"init.d.ts","names":[],"sources":["../../src/init.ts"],"mappings":";;;cAsBa,eAAA,GAAmB,QAAA;AAAA,cA0enB,IAAA,GACX,WAAA,WACA,OAAA,GAAU,WAAA,EACV,WAAA,eAAqB,OAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/initBuildOptimization.d.ts
|
|
2
|
+
/** Intlayer build optimization plugin choices for Next.js. */
|
|
3
|
+
type BuildOptimizationPlugin = 'babel' | 'swc';
|
|
4
|
+
/**
|
|
5
|
+
* Interactive prompt to select a build optimization plugin for Next.js and
|
|
6
|
+
* scaffold the required files. The two options are independent — pick one:
|
|
7
|
+
*
|
|
8
|
+
* - `@intlayer/babel` — runs the full compiler pipeline (extract, purge, minify,
|
|
9
|
+
* optimize) through Babel. Installs `@intlayer/babel` and creates a
|
|
10
|
+
* `babel.config.js`.
|
|
11
|
+
* - `@intlayer/swc` — lightweight SWC plugin that rewrites `useIntlayer` imports.
|
|
12
|
+
* Installs only the dependency; `withIntlayer` wires it in automatically, so
|
|
13
|
+
* no config file is required.
|
|
14
|
+
*
|
|
15
|
+
* @param projectRoot - Optional project root; defaults to the current directory.
|
|
16
|
+
*/
|
|
17
|
+
declare const initBuildOptimization: (projectRoot?: string) => Promise<void>;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { BuildOptimizationPlugin, initBuildOptimization };
|
|
20
|
+
//# sourceMappingURL=initBuildOptimization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initBuildOptimization.d.ts","names":[],"sources":["../../src/initBuildOptimization.ts"],"mappings":";;KAWY,uBAAA;;;;;AAuBZ;;;;;;;;;cAAa,qBAAA,GACX,WAAA,cACC,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/initCompiler.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Scaffolds the Intlayer compiler for the current project during interactive
|
|
4
|
+
* init.
|
|
5
|
+
*
|
|
6
|
+
* - **Vite** — nothing to do: since v9 the compiler is built into the
|
|
7
|
+
* `intlayer()` plugin in `vite.config.ts`, so this only confirms the setup
|
|
8
|
+
* to the user.
|
|
9
|
+
* - **Next.js** — installs `@intlayer/babel` and writes a `babel.config.js`
|
|
10
|
+
* that runs the extract + optimize compiler passes.
|
|
11
|
+
*
|
|
12
|
+
* In non-interactive init this function is never called, so the compiler setup
|
|
13
|
+
* is left untouched.
|
|
14
|
+
*/
|
|
15
|
+
declare const initCompiler: (projectRoot?: string) => Promise<void>;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { initCompiler };
|
|
18
|
+
//# sourceMappingURL=initCompiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initCompiler.d.ts","names":[],"sources":["../../src/initCompiler.ts"],"mappings":";;AAyEA;;;;;;;;;;;;cAAa,YAAA,GAAsB,WAAA,cAAuB,OAAA"}
|
package/dist/types/initMCP.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { Platform } from "@intlayer/chokidar/cli";
|
|
2
|
+
|
|
1
3
|
//#region src/initMCP.d.ts
|
|
2
|
-
declare const initMCP: (projectRoot?: string) => Promise<void>;
|
|
4
|
+
declare const initMCP: (projectRoot?: string, preselectedPlatform?: Platform) => Promise<void>;
|
|
3
5
|
//#endregion
|
|
4
6
|
export { initMCP };
|
|
5
7
|
//# sourceMappingURL=initMCP.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initMCP.d.ts","names":[],"sources":["../../src/initMCP.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"initMCP.d.ts","names":[],"sources":["../../src/initMCP.ts"],"mappings":";;;cAYa,OAAA,GACX,WAAA,WACA,mBAAA,GAAsB,QAAA,KAAQ,OAAA"}
|
|
@@ -7,7 +7,7 @@ declare const PLATFORM_OPTIONS: Array<{
|
|
|
7
7
|
hint: string;
|
|
8
8
|
}>;
|
|
9
9
|
declare const getDetectedPlatform: () => Platform | undefined;
|
|
10
|
-
declare const initSkills: (projectRoot?: string) => Promise<void>;
|
|
10
|
+
declare const initSkills: (projectRoot?: string, preselectedPlatform?: Platform) => Promise<void>;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { PLATFORM_OPTIONS, getDetectedPlatform, initSkills };
|
|
13
13
|
//# sourceMappingURL=initSkills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initSkills.d.ts","names":[],"sources":["../../src/initSkills.ts"],"mappings":";;;cAuBa,gBAAA,EAAkB,KAAA;EAC7B,KAAA,EAAO,QAAA;EACP,KAAA;EACA,IAAA;AAAA;AAAA,cAOW,mBAAA,QAA0B,QAAA;AAAA,cAiB1B,UAAA,
|
|
1
|
+
{"version":3,"file":"initSkills.d.ts","names":[],"sources":["../../src/initSkills.ts"],"mappings":";;;cAuBa,gBAAA,EAAkB,KAAA;EAC7B,KAAA,EAAO,QAAA;EACP,KAAA;EACA,IAAA;AAAA;AAAA,cAOW,mBAAA,QAA0B,QAAA;AAAA,cAiB1B,UAAA,GACX,WAAA,WACA,mBAAA,GAAsB,QAAA,KAAQ,OAAA"}
|
|
@@ -17,6 +17,12 @@ type ReviewDocOptions = {
|
|
|
17
17
|
skipIfModifiedAfter?: number | string | Date;
|
|
18
18
|
skipIfExists?: boolean;
|
|
19
19
|
gitOptions?: ListGitFilesOptions;
|
|
20
|
+
/**
|
|
21
|
+
* Log-only mode. Instead of translating the changed blocks with AI, log the
|
|
22
|
+
* blocks that need attention (with line numbers and content) for the base and
|
|
23
|
+
* target locales, so another agent can generate the translations.
|
|
24
|
+
*/
|
|
25
|
+
log?: boolean;
|
|
20
26
|
};
|
|
21
27
|
/**
|
|
22
28
|
* Main audit function: scans all .md files in "en/" (unless you specified DOC_LIST),
|
|
@@ -34,7 +40,8 @@ declare const reviewDoc: ({
|
|
|
34
40
|
skipIfModifiedBefore,
|
|
35
41
|
skipIfModifiedAfter,
|
|
36
42
|
skipIfExists,
|
|
37
|
-
gitOptions
|
|
43
|
+
gitOptions,
|
|
44
|
+
log
|
|
38
45
|
}: ReviewDocOptions) => Promise<void>;
|
|
39
46
|
//#endregion
|
|
40
47
|
export { reviewDoc };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewDoc.d.ts","names":[],"sources":["../../../src/reviewDoc/reviewDoc.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"reviewDoc.d.ts","names":[],"sources":["../../../src/reviewDoc/reviewDoc.ts"],"mappings":";;;;;;KAqCK,gBAAA;EACH,UAAA;EACA,OAAA,EAAS,MAAA;EACT,mBAAA;EACA,UAAA,EAAY,MAAA;EACZ,SAAA,GAAY,SAAA;EACZ,2BAAA;EACA,aAAA,GAAgB,uBAAA;EAChB,kBAAA;EACA,oBAAA,qBAAyC,IAAA;EACzC,mBAAA,qBAAwC,IAAA;EACxC,YAAA;EACA,UAAA,GAAa,mBAAA;EAAmB;;;;;EAMhC,GAAA;AAAA;;;;;cAOW,SAAA;EAAmB,UAAA;EAAA,OAAA;EAAA,mBAAA;EAAA,UAAA;EAAA,SAAA;EAAA,2BAAA;EAAA,aAAA;EAAA,kBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,YAAA;EAAA,UAAA;EAAA;AAAA,GAc7B,gBAAA,KAAgB,OAAA"}
|
|
@@ -7,12 +7,14 @@ import { AIConfig } from "@intlayer/ai";
|
|
|
7
7
|
//#region src/reviewDoc/reviewDocBlockAware.d.ts
|
|
8
8
|
/**
|
|
9
9
|
* Review a file using block-aware alignment.
|
|
10
|
-
*
|
|
11
|
-
* 1. Segments both
|
|
12
|
-
* 2. Aligns blocks using structure (special chars, numbers) and context
|
|
13
|
-
* 3. Detects which blocks changed, were added, or deleted
|
|
14
|
-
* 4.
|
|
15
|
-
* 5.
|
|
10
|
+
*
|
|
11
|
+
* 1. Segments both base and target documents into semantic blocks.
|
|
12
|
+
* 2. Aligns blocks using structure (special chars, numbers) and context.
|
|
13
|
+
* 3. Detects which blocks changed, were added, or deleted.
|
|
14
|
+
* 4. Applies deletions immediately without AI.
|
|
15
|
+
* 5. Sends changed/new blocks to AI in bottom-up order (last block first), so
|
|
16
|
+
* line numbers of earlier blocks are not shifted by edits below them.
|
|
17
|
+
* 6. Rewrites the file after each block so progress is persisted incrementally.
|
|
16
18
|
*/
|
|
17
19
|
declare const reviewFileBlockAware: (baseFilePath: string, outputFilePath: string, locale: Locale, baseLocale: Locale, aiOptions?: AIOptions, configOptions?: GetConfigurationOptions, customInstructions?: string, changedLines?: number[], aiClient?: AIClient, aiConfig?: AIConfig) => Promise<void>;
|
|
18
20
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewDocBlockAware.d.ts","names":[],"sources":["../../../src/reviewDoc/reviewDocBlockAware.ts"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"reviewDocBlockAware.d.ts","names":[],"sources":["../../../src/reviewDoc/reviewDocBlockAware.ts"],"mappings":";;;;;;;;;AA0CA;;;;;;;;;cAAa,oBAAA,GACX,YAAA,UACA,cAAA,UACA,MAAA,EAAQ,MAAA,EACR,UAAA,EAAY,MAAA,EACZ,SAAA,GAAY,SAAA,EACZ,aAAA,GAAgB,uBAAA,EAChB,kBAAA,WACA,YAAA,aACA,QAAA,GAAW,QAAA,EACX,QAAA,GAAW,QAAA,KAAQ,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { GetConfigurationOptions } from "@intlayer/config/node";
|
|
2
|
+
import { Locale } from "@intlayer/types/allLocales";
|
|
3
|
+
import { ReviewReport } from "@intlayer/chokidar/docReview";
|
|
4
|
+
|
|
5
|
+
//#region src/reviewDoc/reviewDocLog.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Log-only review of a single file/locale pair.
|
|
8
|
+
*
|
|
9
|
+
* Instead of calling an AI to translate the changed blocks, this compares the
|
|
10
|
+
* base document with its translation and logs the blocks that need attention
|
|
11
|
+
* (with their line ranges and content) so another agent or a human can generate
|
|
12
|
+
* the missing translations.
|
|
13
|
+
*
|
|
14
|
+
* @param baseFilePath - Absolute path of the base (source) document.
|
|
15
|
+
* @param outputFilePath - Absolute path of the target (translated) document.
|
|
16
|
+
* @param locale - The target locale being reviewed.
|
|
17
|
+
* @param baseLocale - The base locale used as reference.
|
|
18
|
+
* @param configOptions - Optional Intlayer configuration overrides.
|
|
19
|
+
* @param changedLines - 1-based base line numbers that changed (from git), if any.
|
|
20
|
+
* @returns The structured review report.
|
|
21
|
+
*/
|
|
22
|
+
declare const logReviewFileBlocks: (baseFilePath: string, outputFilePath: string, locale: Locale, baseLocale: Locale, configOptions?: GetConfigurationOptions, changedLines?: number[]) => Promise<ReviewReport>;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { logReviewFileBlocks };
|
|
25
|
+
//# sourceMappingURL=reviewDocLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewDocLog.d.ts","names":[],"sources":["../../../src/reviewDoc/reviewDocLog.ts"],"mappings":";;;;;;;AA+BA;;;;;;;;;;;;;;cAAa,mBAAA,GACX,YAAA,UACA,cAAA,UACA,MAAA,EAAQ,MAAA,EACR,UAAA,EAAY,MAAA,EACZ,aAAA,GAAgB,uBAAA,EAChB,YAAA,gBACC,OAAA,CAAQ,YAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/utils/formatLineRanges.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Formats a list of line numbers into a compact, human-readable string where
|
|
4
|
+
* runs of consecutive lines are collapsed into ranges.
|
|
5
|
+
*
|
|
6
|
+
* The input is sorted and de-duplicated first, so callers don't need to
|
|
7
|
+
* pre-process it. A run of a single line is printed as the bare number; a run
|
|
8
|
+
* of two or more consecutive lines is printed as `start-end`.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* formatLineRanges([2, 3, 4, 5, 333, 412, 413, 414]);
|
|
12
|
+
* // → '2-5, 333, 412-414'
|
|
13
|
+
*
|
|
14
|
+
* @param lineNumbers - The (possibly unsorted, possibly duplicated) line numbers.
|
|
15
|
+
* @param separator - String inserted between groups. Defaults to `', '`.
|
|
16
|
+
* @returns The grouped string, or an empty string when no lines are provided.
|
|
17
|
+
*/
|
|
18
|
+
declare const formatLineRanges: (lineNumbers: number[], separator?: string) => string;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { formatLineRanges };
|
|
21
|
+
//# sourceMappingURL=formatLineRanges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatLineRanges.d.ts","names":[],"sources":["../../../src/utils/formatLineRanges.ts"],"mappings":";;AAgBA;;;;;;;;;;;;;;;cAAa,gBAAA,GACX,WAAA,YACA,SAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/cli",
|
|
3
|
-
"version": "9.0.0-canary.
|
|
3
|
+
"version": "9.0.0-canary.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Provides uniform command-line interface scripts for Intlayer, used in packages like intlayer-cli and intlayer.",
|
|
6
6
|
"keywords": [
|
|
@@ -67,33 +67,33 @@
|
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"@clack/prompts": "0.11.0",
|
|
70
|
-
"@intlayer/api": "9.0.0-canary.
|
|
71
|
-
"@intlayer/babel": "9.0.0-canary.
|
|
72
|
-
"@intlayer/chokidar": "9.0.0-canary.
|
|
73
|
-
"@intlayer/config": "9.0.0-canary.
|
|
74
|
-
"@intlayer/core": "9.0.0-canary.
|
|
75
|
-
"@intlayer/dictionaries-entry": "9.0.0-canary.
|
|
76
|
-
"@intlayer/remote-dictionaries-entry": "9.0.0-canary.
|
|
77
|
-
"@intlayer/types": "9.0.0-canary.
|
|
78
|
-
"@intlayer/unmerged-dictionaries-entry": "9.0.0-canary.
|
|
70
|
+
"@intlayer/api": "9.0.0-canary.10",
|
|
71
|
+
"@intlayer/babel": "9.0.0-canary.10",
|
|
72
|
+
"@intlayer/chokidar": "9.0.0-canary.10",
|
|
73
|
+
"@intlayer/config": "9.0.0-canary.10",
|
|
74
|
+
"@intlayer/core": "9.0.0-canary.10",
|
|
75
|
+
"@intlayer/dictionaries-entry": "9.0.0-canary.10",
|
|
76
|
+
"@intlayer/remote-dictionaries-entry": "9.0.0-canary.10",
|
|
77
|
+
"@intlayer/types": "9.0.0-canary.10",
|
|
78
|
+
"@intlayer/unmerged-dictionaries-entry": "9.0.0-canary.10",
|
|
79
79
|
"commander": "14.0.3",
|
|
80
80
|
"enquirer": "2.4.1",
|
|
81
81
|
"eventsource": "4.1.0",
|
|
82
82
|
"fast-glob": "3.3.3"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
|
-
"@intlayer/ai": "9.0.0-canary.
|
|
86
|
-
"@types/node": "25.9.
|
|
85
|
+
"@intlayer/ai": "9.0.0-canary.10",
|
|
86
|
+
"@types/node": "25.9.4",
|
|
87
87
|
"@utils/ts-config": "1.0.4",
|
|
88
88
|
"@utils/ts-config-types": "1.0.4",
|
|
89
89
|
"@utils/tsdown-config": "1.0.4",
|
|
90
90
|
"rimraf": "6.1.3",
|
|
91
91
|
"tsdown": "0.21.10",
|
|
92
92
|
"typescript": "6.0.3",
|
|
93
|
-
"vitest": "4.1.
|
|
93
|
+
"vitest": "4.1.9"
|
|
94
94
|
},
|
|
95
95
|
"peerDependencies": {
|
|
96
|
-
"@intlayer/ai": "9.0.0-canary.
|
|
96
|
+
"@intlayer/ai": "9.0.0-canary.10"
|
|
97
97
|
},
|
|
98
98
|
"peerDependenciesMeta": {
|
|
99
99
|
"@intlayer/ai": {
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_translation_alignment_computeSimilarity = require('./computeSimilarity.cjs');
|
|
3
|
-
|
|
4
|
-
//#region src/translation-alignment/alignBlocks.ts
|
|
5
|
-
const alignEnglishAndFrenchBlocks = (defaultBlocks, secondaryBlocks) => {
|
|
6
|
-
const defaultLength = defaultBlocks.length;
|
|
7
|
-
const secondaryLength = secondaryBlocks.length;
|
|
8
|
-
const scoreMatrix = Array.from({ length: defaultLength + 1 }, () => Array.from({ length: secondaryLength + 1 }, () => 0));
|
|
9
|
-
const traceMatrix = Array.from({ length: defaultLength + 1 }, () => Array.from({ length: secondaryLength + 1 }, () => "diagonal"));
|
|
10
|
-
const gapPenalty = -2;
|
|
11
|
-
const computeMatchScore = (defaultIndex, secondaryIndex) => {
|
|
12
|
-
const defaultBlock = defaultBlocks[defaultIndex];
|
|
13
|
-
const secondaryBlock = secondaryBlocks[secondaryIndex];
|
|
14
|
-
const typeBonus = defaultBlock.type === secondaryBlock.type ? 2 : 0;
|
|
15
|
-
const anchorSimilarity = require_translation_alignment_computeSimilarity.computeJaccardSimilarity(defaultBlock.anchorText, secondaryBlock.anchorText, 3);
|
|
16
|
-
return typeBonus + (Math.min(defaultBlock.content.length, secondaryBlock.content.length) / Math.max(defaultBlock.content.length, secondaryBlock.content.length) > .75 ? 1 : 0) + anchorSimilarity * 8;
|
|
17
|
-
};
|
|
18
|
-
for (let i = 1; i <= defaultLength; i += 1) {
|
|
19
|
-
scoreMatrix[i][0] = scoreMatrix[i - 1][0] + gapPenalty;
|
|
20
|
-
traceMatrix[i][0] = "up";
|
|
21
|
-
}
|
|
22
|
-
for (let j = 1; j <= secondaryLength; j += 1) {
|
|
23
|
-
scoreMatrix[0][j] = scoreMatrix[0][j - 1] + gapPenalty;
|
|
24
|
-
traceMatrix[0][j] = "left";
|
|
25
|
-
}
|
|
26
|
-
for (let i = 1; i <= defaultLength; i += 1) for (let j = 1; j <= secondaryLength; j += 1) {
|
|
27
|
-
const match = scoreMatrix[i - 1][j - 1] + computeMatchScore(i - 1, j - 1);
|
|
28
|
-
const deleteGap = scoreMatrix[i - 1][j] + gapPenalty;
|
|
29
|
-
const insertGap = scoreMatrix[i][j - 1] + gapPenalty;
|
|
30
|
-
const best = Math.max(match, deleteGap, insertGap);
|
|
31
|
-
scoreMatrix[i][j] = best;
|
|
32
|
-
traceMatrix[i][j] = best === match ? "diagonal" : best === deleteGap ? "up" : "left";
|
|
33
|
-
}
|
|
34
|
-
const result = [];
|
|
35
|
-
let i = defaultLength;
|
|
36
|
-
let j = secondaryLength;
|
|
37
|
-
while (i > 0 || j > 0) if (i > 0 && j > 0 && traceMatrix[i][j] === "diagonal") {
|
|
38
|
-
const englishIndex = i - 1;
|
|
39
|
-
const frenchIndex = j - 1;
|
|
40
|
-
const similarityScore = require_translation_alignment_computeSimilarity.computeJaccardSimilarity(defaultBlocks[englishIndex].anchorText, secondaryBlocks[frenchIndex].anchorText, 3);
|
|
41
|
-
result.unshift({
|
|
42
|
-
englishIndex,
|
|
43
|
-
frenchIndex,
|
|
44
|
-
similarityScore
|
|
45
|
-
});
|
|
46
|
-
i -= 1;
|
|
47
|
-
j -= 1;
|
|
48
|
-
} else if (i > 0 && (j === 0 || traceMatrix[i][j] === "up")) {
|
|
49
|
-
result.unshift({
|
|
50
|
-
englishIndex: i - 1,
|
|
51
|
-
frenchIndex: null,
|
|
52
|
-
similarityScore: 0
|
|
53
|
-
});
|
|
54
|
-
i -= 1;
|
|
55
|
-
} else if (j > 0 && (i === 0 || traceMatrix[i][j] === "left")) {
|
|
56
|
-
result.unshift({
|
|
57
|
-
englishIndex: -1,
|
|
58
|
-
frenchIndex: j - 1,
|
|
59
|
-
similarityScore: 0
|
|
60
|
-
});
|
|
61
|
-
j -= 1;
|
|
62
|
-
}
|
|
63
|
-
return result;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
//#endregion
|
|
67
|
-
exports.alignEnglishAndFrenchBlocks = alignEnglishAndFrenchBlocks;
|
|
68
|
-
//# sourceMappingURL=alignBlocks.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alignBlocks.cjs","names":["computeJaccardSimilarity"],"sources":["../../../src/translation-alignment/alignBlocks.ts"],"sourcesContent":["import { computeJaccardSimilarity } from './computeSimilarity';\nimport type { AlignmentPair, FingerprintedBlock } from './types';\n\nexport const alignEnglishAndFrenchBlocks = (\n defaultBlocks: FingerprintedBlock[],\n secondaryBlocks: FingerprintedBlock[]\n): AlignmentPair[] => {\n // Needleman–Wunsch style global alignment using anchor similarity and type equality\n const defaultLength = defaultBlocks.length;\n const secondaryLength = secondaryBlocks.length;\n\n const scoreMatrix: number[][] = Array.from(\n { length: defaultLength + 1 },\n () => Array.from({ length: secondaryLength + 1 }, () => 0)\n );\n const traceMatrix: ('diagonal' | 'up' | 'left')[][] = Array.from(\n { length: defaultLength + 1 },\n () => Array.from({ length: secondaryLength + 1 }, () => 'diagonal')\n );\n\n const gapPenalty = -2;\n\n const computeMatchScore = (\n defaultIndex: number,\n secondaryIndex: number\n ): number => {\n const defaultBlock = defaultBlocks[defaultIndex];\n const secondaryBlock = secondaryBlocks[secondaryIndex];\n const typeBonus = defaultBlock.type === secondaryBlock.type ? 2 : 0;\n const anchorSimilarity = computeJaccardSimilarity(\n defaultBlock.anchorText,\n secondaryBlock.anchorText,\n 3\n );\n const lengthRatio =\n Math.min(defaultBlock.content.length, secondaryBlock.content.length) /\n Math.max(defaultBlock.content.length, secondaryBlock.content.length);\n const lengthBonus = lengthRatio > 0.75 ? 1 : 0;\n return typeBonus + lengthBonus + anchorSimilarity * 8; // weighted toward anchor similarity\n };\n\n // initialize first row and column\n for (let i = 1; i <= defaultLength; i += 1) {\n scoreMatrix[i][0] = scoreMatrix[i - 1][0] + gapPenalty;\n traceMatrix[i][0] = 'up';\n }\n for (let j = 1; j <= secondaryLength; j += 1) {\n scoreMatrix[0][j] = scoreMatrix[0][j - 1] + gapPenalty;\n traceMatrix[0][j] = 'left';\n }\n\n // fill\n for (let i = 1; i <= defaultLength; i += 1) {\n for (let j = 1; j <= secondaryLength; j += 1) {\n const match = scoreMatrix[i - 1][j - 1] + computeMatchScore(i - 1, j - 1);\n const deleteGap = scoreMatrix[i - 1][j] + gapPenalty;\n const insertGap = scoreMatrix[i][j - 1] + gapPenalty;\n\n const best = Math.max(match, deleteGap, insertGap);\n scoreMatrix[i][j] = best;\n traceMatrix[i][j] =\n best === match ? 'diagonal' : best === deleteGap ? 'up' : 'left';\n }\n }\n\n // traceback\n const result: AlignmentPair[] = [];\n let i = defaultLength;\n let j = secondaryLength;\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && traceMatrix[i][j] === 'diagonal') {\n const englishIndex = i - 1;\n const frenchIndex = j - 1;\n const similarityScore = computeJaccardSimilarity(\n defaultBlocks[englishIndex].anchorText,\n secondaryBlocks[frenchIndex].anchorText,\n 3\n );\n result.unshift({ englishIndex, frenchIndex, similarityScore });\n i -= 1;\n j -= 1;\n } else if (i > 0 && (j === 0 || traceMatrix[i][j] === 'up')) {\n result.unshift({\n englishIndex: i - 1,\n frenchIndex: null,\n similarityScore: 0,\n });\n i -= 1;\n } else if (j > 0 && (i === 0 || traceMatrix[i][j] === 'left')) {\n // french block has no corresponding english block (deleted)\n result.unshift({\n englishIndex: -1,\n frenchIndex: j - 1,\n similarityScore: 0,\n });\n j -= 1;\n }\n }\n return result;\n};\n"],"mappings":";;;;AAGA,MAAa,+BACX,eACA,oBACoB;CAEpB,MAAM,gBAAgB,cAAc;CACpC,MAAM,kBAAkB,gBAAgB;CAExC,MAAM,cAA0B,MAAM,KACpC,EAAE,QAAQ,gBAAgB,GAAG,QACvB,MAAM,KAAK,EAAE,QAAQ,kBAAkB,GAAG,QAAQ,EAAE,CAC3D;CACD,MAAM,cAAgD,MAAM,KAC1D,EAAE,QAAQ,gBAAgB,GAAG,QACvB,MAAM,KAAK,EAAE,QAAQ,kBAAkB,GAAG,QAAQ,WAAW,CACpE;CAED,MAAM,aAAa;CAEnB,MAAM,qBACJ,cACA,mBACW;EACX,MAAM,eAAe,cAAc;EACnC,MAAM,iBAAiB,gBAAgB;EACvC,MAAM,YAAY,aAAa,SAAS,eAAe,OAAO,IAAI;EAClE,MAAM,mBAAmBA,yEACvB,aAAa,YACb,eAAe,YACf,EACD;AAKD,SAAO,aAHL,KAAK,IAAI,aAAa,QAAQ,QAAQ,eAAe,QAAQ,OAAO,GACpE,KAAK,IAAI,aAAa,QAAQ,QAAQ,eAAe,QAAQ,OAAO,GACpC,MAAO,IAAI,KACZ,mBAAmB;;AAItD,MAAK,IAAI,IAAI,GAAG,KAAK,eAAe,KAAK,GAAG;AAC1C,cAAY,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK;AAC5C,cAAY,GAAG,KAAK;;AAEtB,MAAK,IAAI,IAAI,GAAG,KAAK,iBAAiB,KAAK,GAAG;AAC5C,cAAY,GAAG,KAAK,YAAY,GAAG,IAAI,KAAK;AAC5C,cAAY,GAAG,KAAK;;AAItB,MAAK,IAAI,IAAI,GAAG,KAAK,eAAe,KAAK,EACvC,MAAK,IAAI,IAAI,GAAG,KAAK,iBAAiB,KAAK,GAAG;EAC5C,MAAM,QAAQ,YAAY,IAAI,GAAG,IAAI,KAAK,kBAAkB,IAAI,GAAG,IAAI,EAAE;EACzE,MAAM,YAAY,YAAY,IAAI,GAAG,KAAK;EAC1C,MAAM,YAAY,YAAY,GAAG,IAAI,KAAK;EAE1C,MAAM,OAAO,KAAK,IAAI,OAAO,WAAW,UAAU;AAClD,cAAY,GAAG,KAAK;AACpB,cAAY,GAAG,KACb,SAAS,QAAQ,aAAa,SAAS,YAAY,OAAO;;CAKhE,MAAM,SAA0B,EAAE;CAClC,IAAI,IAAI;CACR,IAAI,IAAI;AACR,QAAO,IAAI,KAAK,IAAI,EAClB,KAAI,IAAI,KAAK,IAAI,KAAK,YAAY,GAAG,OAAO,YAAY;EACtD,MAAM,eAAe,IAAI;EACzB,MAAM,cAAc,IAAI;EACxB,MAAM,kBAAkBA,yEACtB,cAAc,cAAc,YAC5B,gBAAgB,aAAa,YAC7B,EACD;AACD,SAAO,QAAQ;GAAE;GAAc;GAAa;GAAiB,CAAC;AAC9D,OAAK;AACL,OAAK;YACI,IAAI,MAAM,MAAM,KAAK,YAAY,GAAG,OAAO,OAAO;AAC3D,SAAO,QAAQ;GACb,cAAc,IAAI;GAClB,aAAa;GACb,iBAAiB;GAClB,CAAC;AACF,OAAK;YACI,IAAI,MAAM,MAAM,KAAK,YAAY,GAAG,OAAO,SAAS;AAE7D,SAAO,QAAQ;GACb,cAAc;GACd,aAAa,IAAI;GACjB,iBAAiB;GAClB,CAAC;AACF,OAAK;;AAGT,QAAO"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
//#region src/translation-alignment/computeSimilarity.ts
|
|
4
|
-
const generateCharacterShingles = (text, shingleLength) => {
|
|
5
|
-
const normalized = text.replace(/\s+/g, " ").trim();
|
|
6
|
-
const set = /* @__PURE__ */ new Set();
|
|
7
|
-
if (normalized.length < shingleLength) {
|
|
8
|
-
if (normalized.length > 0) set.add(normalized);
|
|
9
|
-
return set;
|
|
10
|
-
}
|
|
11
|
-
for (let index = 0; index <= normalized.length - shingleLength; index += 1) set.add(normalized.slice(index, index + shingleLength));
|
|
12
|
-
return set;
|
|
13
|
-
};
|
|
14
|
-
const computeJaccardSimilarity = (a, b, shingleLength = 3) => {
|
|
15
|
-
const setA = generateCharacterShingles(a, shingleLength);
|
|
16
|
-
const setB = generateCharacterShingles(b, shingleLength);
|
|
17
|
-
if (setA.size === 0 && setB.size === 0) return 1;
|
|
18
|
-
const intersectionSize = Array.from(setA).filter((token) => setB.has(token)).length;
|
|
19
|
-
const unionSize = new Set([...Array.from(setA), ...Array.from(setB)]).size;
|
|
20
|
-
return unionSize === 0 ? 0 : intersectionSize / unionSize;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
//#endregion
|
|
24
|
-
exports.computeJaccardSimilarity = computeJaccardSimilarity;
|
|
25
|
-
exports.generateCharacterShingles = generateCharacterShingles;
|
|
26
|
-
//# sourceMappingURL=computeSimilarity.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"computeSimilarity.cjs","names":[],"sources":["../../../src/translation-alignment/computeSimilarity.ts"],"sourcesContent":["// Character shingle Jaccard similarity (language agnostic)\nexport const generateCharacterShingles = (\n text: string,\n shingleLength: number\n): Set<string> => {\n const normalized = text.replace(/\\s+/g, ' ').trim();\n const set = new Set<string>();\n if (normalized.length < shingleLength) {\n if (normalized.length > 0) {\n set.add(normalized);\n }\n return set;\n }\n for (let index = 0; index <= normalized.length - shingleLength; index += 1) {\n set.add(normalized.slice(index, index + shingleLength));\n }\n return set;\n};\n\nexport const computeJaccardSimilarity = (\n a: string,\n b: string,\n shingleLength: number = 3\n): number => {\n const setA = generateCharacterShingles(a, shingleLength);\n const setB = generateCharacterShingles(b, shingleLength);\n if (setA.size === 0 && setB.size === 0) return 1;\n const intersectionSize = Array.from(setA).filter((token) =>\n setB.has(token)\n ).length;\n const unionSize = new Set([...Array.from(setA), ...Array.from(setB)]).size;\n return unionSize === 0 ? 0 : intersectionSize / unionSize;\n};\n"],"mappings":";;;AACA,MAAa,6BACX,MACA,kBACgB;CAChB,MAAM,aAAa,KAAK,QAAQ,QAAQ,IAAI,CAAC,MAAM;CACnD,MAAM,sBAAM,IAAI,KAAa;AAC7B,KAAI,WAAW,SAAS,eAAe;AACrC,MAAI,WAAW,SAAS,EACtB,KAAI,IAAI,WAAW;AAErB,SAAO;;AAET,MAAK,IAAI,QAAQ,GAAG,SAAS,WAAW,SAAS,eAAe,SAAS,EACvE,KAAI,IAAI,WAAW,MAAM,OAAO,QAAQ,cAAc,CAAC;AAEzD,QAAO;;AAGT,MAAa,4BACX,GACA,GACA,gBAAwB,MACb;CACX,MAAM,OAAO,0BAA0B,GAAG,cAAc;CACxD,MAAM,OAAO,0BAA0B,GAAG,cAAc;AACxD,KAAI,KAAK,SAAS,KAAK,KAAK,SAAS,EAAG,QAAO;CAC/C,MAAM,mBAAmB,MAAM,KAAK,KAAK,CAAC,QAAQ,UAChD,KAAK,IAAI,MAAM,CAChB,CAAC;CACF,MAAM,YAAY,IAAI,IAAI,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;AACtE,QAAO,cAAc,IAAI,IAAI,mBAAmB"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
let node_crypto = require("node:crypto");
|
|
4
|
-
node_crypto = require_runtime.__toESM(node_crypto);
|
|
5
|
-
|
|
6
|
-
//#region src/translation-alignment/fingerprintBlock.ts
|
|
7
|
-
const computeStringDigest = (text) => node_crypto.default.createHash("sha256").update(text).digest("hex");
|
|
8
|
-
const fingerprintBlock = (block, previousBlock, nextBlock) => {
|
|
9
|
-
const semanticDigest = computeStringDigest(block.semanticText);
|
|
10
|
-
const anchorDigest = computeStringDigest(block.anchorText);
|
|
11
|
-
const compositeKey = `${semanticDigest}:${anchorDigest}`;
|
|
12
|
-
const contextKey = computeStringDigest(`${computeStringDigest(previousBlock?.semanticText ?? "")}:${computeStringDigest(nextBlock?.semanticText ?? "")}`);
|
|
13
|
-
return {
|
|
14
|
-
...block,
|
|
15
|
-
semanticDigest,
|
|
16
|
-
anchorDigest,
|
|
17
|
-
compositeKey,
|
|
18
|
-
contextKey
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
//#endregion
|
|
23
|
-
exports.fingerprintBlock = fingerprintBlock;
|
|
24
|
-
//# sourceMappingURL=fingerprintBlock.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintBlock.cjs","names":["crypto"],"sources":["../../../src/translation-alignment/fingerprintBlock.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport type { FingerprintedBlock, NormalizedBlock } from './types';\n\nconst computeStringDigest = (text: string): string =>\n crypto.createHash('sha256').update(text).digest('hex');\n\nexport const fingerprintBlock = (\n block: NormalizedBlock,\n previousBlock: NormalizedBlock | null,\n nextBlock: NormalizedBlock | null\n): FingerprintedBlock => {\n const semanticDigest = computeStringDigest(block.semanticText);\n const anchorDigest = computeStringDigest(block.anchorText);\n const compositeKey = `${semanticDigest}:${anchorDigest}`;\n\n const previousDigest = computeStringDigest(previousBlock?.semanticText ?? '');\n const nextDigest = computeStringDigest(nextBlock?.semanticText ?? '');\n const contextKey = computeStringDigest(`${previousDigest}:${nextDigest}`);\n\n return {\n ...block,\n semanticDigest,\n anchorDigest,\n compositeKey,\n contextKey,\n };\n};\n"],"mappings":";;;;;;AAGA,MAAM,uBAAuB,SAC3BA,oBAAO,WAAW,SAAS,CAAC,OAAO,KAAK,CAAC,OAAO,MAAM;AAExD,MAAa,oBACX,OACA,eACA,cACuB;CACvB,MAAM,iBAAiB,oBAAoB,MAAM,aAAa;CAC9D,MAAM,eAAe,oBAAoB,MAAM,WAAW;CAC1D,MAAM,eAAe,GAAG,eAAe,GAAG;CAI1C,MAAM,aAAa,oBAAoB,GAFhB,oBAAoB,eAAe,gBAAgB,GAElB,CAAC,GADtC,oBAAoB,WAAW,gBAAgB,GACI,GAAG;AAEzE,QAAO;EACL,GAAG;EACH;EACA;EACA;EACA;EACD"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_translation_alignment_computeSimilarity = require('./computeSimilarity.cjs');
|
|
3
|
-
const require_translation_alignment_alignBlocks = require('./alignBlocks.cjs');
|
|
4
|
-
const require_translation_alignment_fingerprintBlock = require('./fingerprintBlock.cjs');
|
|
5
|
-
const require_translation_alignment_mapChangedLinesToBlocks = require('./mapChangedLinesToBlocks.cjs');
|
|
6
|
-
const require_translation_alignment_normalizeBlock = require('./normalizeBlock.cjs');
|
|
7
|
-
const require_translation_alignment_planActions = require('./planActions.cjs');
|
|
8
|
-
const require_translation_alignment_rebuildDocument = require('./rebuildDocument.cjs');
|
|
9
|
-
const require_translation_alignment_segmentDocument = require('./segmentDocument.cjs');
|
|
10
|
-
const require_translation_alignment_pipeline = require('./pipeline.cjs');
|
|
11
|
-
|
|
12
|
-
exports.alignEnglishAndFrenchBlocks = require_translation_alignment_alignBlocks.alignEnglishAndFrenchBlocks;
|
|
13
|
-
exports.buildAlignmentPlan = require_translation_alignment_pipeline.buildAlignmentPlan;
|
|
14
|
-
exports.computeJaccardSimilarity = require_translation_alignment_computeSimilarity.computeJaccardSimilarity;
|
|
15
|
-
exports.fingerprintBlock = require_translation_alignment_fingerprintBlock.fingerprintBlock;
|
|
16
|
-
exports.generateCharacterShingles = require_translation_alignment_computeSimilarity.generateCharacterShingles;
|
|
17
|
-
exports.identifySegmentsToReview = require_translation_alignment_rebuildDocument.identifySegmentsToReview;
|
|
18
|
-
exports.mapChangedLinesToBlocks = require_translation_alignment_mapChangedLinesToBlocks.mapChangedLinesToBlocks;
|
|
19
|
-
exports.mergeReviewedSegments = require_translation_alignment_rebuildDocument.mergeReviewedSegments;
|
|
20
|
-
exports.normalizeBlock = require_translation_alignment_normalizeBlock.normalizeBlock;
|
|
21
|
-
exports.planAlignmentActions = require_translation_alignment_planActions.planAlignmentActions;
|
|
22
|
-
exports.segmentDocument = require_translation_alignment_segmentDocument.segmentDocument;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
//#region src/translation-alignment/mapChangedLinesToBlocks.ts
|
|
4
|
-
const mapChangedLinesToBlocks = (blocks, changedLines) => {
|
|
5
|
-
const changedSet = /* @__PURE__ */ new Set();
|
|
6
|
-
if (!changedLines || changedLines.length === 0) return changedSet;
|
|
7
|
-
const changedLookup = new Set(changedLines);
|
|
8
|
-
blocks.forEach((block, index) => {
|
|
9
|
-
for (let line = block.lineStart; line <= block.lineEnd; line += 1) if (changedLookup.has(line)) {
|
|
10
|
-
changedSet.add(index);
|
|
11
|
-
break;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
return changedSet;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
//#endregion
|
|
18
|
-
exports.mapChangedLinesToBlocks = mapChangedLinesToBlocks;
|
|
19
|
-
//# sourceMappingURL=mapChangedLinesToBlocks.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mapChangedLinesToBlocks.cjs","names":[],"sources":["../../../src/translation-alignment/mapChangedLinesToBlocks.ts"],"sourcesContent":["import type { Block, LineChange } from './types';\n\nexport const mapChangedLinesToBlocks = (\n blocks: Block[],\n changedLines: LineChange[]\n): Set<number> => {\n const changedSet = new Set<number>();\n if (!changedLines || changedLines.length === 0) return changedSet;\n\n const changedLookup = new Set<number>(changedLines);\n\n blocks.forEach((block, index) => {\n for (let line = block.lineStart; line <= block.lineEnd; line += 1) {\n if (changedLookup.has(line)) {\n changedSet.add(index);\n break;\n }\n }\n });\n\n return changedSet;\n};\n"],"mappings":";;;AAEA,MAAa,2BACX,QACA,iBACgB;CAChB,MAAM,6BAAa,IAAI,KAAa;AACpC,KAAI,CAAC,gBAAgB,aAAa,WAAW,EAAG,QAAO;CAEvD,MAAM,gBAAgB,IAAI,IAAY,aAAa;AAEnD,QAAO,SAAS,OAAO,UAAU;AAC/B,OAAK,IAAI,OAAO,MAAM,WAAW,QAAQ,MAAM,SAAS,QAAQ,EAC9D,KAAI,cAAc,IAAI,KAAK,EAAE;AAC3B,cAAW,IAAI,MAAM;AACrB;;GAGJ;AAEF,QAAO"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
//#region src/translation-alignment/normalizeBlock.ts
|
|
4
|
-
const removeMarkdownFormatting = (text) => {
|
|
5
|
-
return text.replace(/`{1,3}[^`]*`{1,3}/g, " ").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/_([^_]+)_/g, "$1").replace(/~~([^~]+)~~/g, "$1").replace(/!?\[[^\]]*\]\([^)]*\)/g, " ").replace(/^\s*#{1,6}\s+/gm, "").replace(/^\s*>\s?/gm, "").replace(/^\s*[-*+]\s+/gm, "").replace(/^\s*\d+\.\s+/gm, "");
|
|
6
|
-
};
|
|
7
|
-
const collapseWhitespace = (text) => text.replace(/\s+/g, " ").trim();
|
|
8
|
-
const stripLettersKeepDigitsAndSymbols = (text) => {
|
|
9
|
-
return text.replace(/\p{L}+/gu, "");
|
|
10
|
-
};
|
|
11
|
-
const normalizeBlock = (block) => {
|
|
12
|
-
const semanticCollapsed = collapseWhitespace(removeMarkdownFormatting(block.content).toLowerCase());
|
|
13
|
-
const anchorCollapsed = collapseWhitespace(stripLettersKeepDigitsAndSymbols(block.content));
|
|
14
|
-
return {
|
|
15
|
-
...block,
|
|
16
|
-
semanticText: semanticCollapsed,
|
|
17
|
-
anchorText: anchorCollapsed
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
//#endregion
|
|
22
|
-
exports.normalizeBlock = normalizeBlock;
|
|
23
|
-
//# sourceMappingURL=normalizeBlock.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeBlock.cjs","names":[],"sources":["../../../src/translation-alignment/normalizeBlock.ts"],"sourcesContent":["import type { Block, NormalizedBlock } from './types';\n\nconst removeMarkdownFormatting = (text: string): string => {\n return text\n .replace(/`{1,3}[^`]*`{1,3}/g, ' ')\n .replace(/\\*\\*([^*]+)\\*\\*/g, '$1')\n .replace(/\\*([^*]+)\\*/g, '$1')\n .replace(/_([^_]+)_/g, '$1')\n .replace(/~~([^~]+)~~/g, '$1')\n .replace(/!?\\[[^\\]]*\\]\\([^)]*\\)/g, ' ')\n .replace(/^\\s*#{1,6}\\s+/gm, '')\n .replace(/^\\s*>\\s?/gm, '')\n .replace(/^\\s*[-*+]\\s+/gm, '')\n .replace(/^\\s*\\d+\\.\\s+/gm, '');\n};\n\nconst collapseWhitespace = (text: string): string =>\n text.replace(/\\s+/g, ' ').trim();\n\nconst stripLettersKeepDigitsAndSymbols = (text: string): string => {\n // Keep digits and non-letter characters, remove all letters (including accents)\n return text.replace(/\\p{L}+/gu, '');\n};\n\nexport const normalizeBlock = (block: Block): NormalizedBlock => {\n const contentWithoutMarkdown = removeMarkdownFormatting(block.content);\n const semanticLowercased = contentWithoutMarkdown.toLowerCase();\n const semanticCollapsed = collapseWhitespace(semanticLowercased);\n\n const anchorOnlySymbols = stripLettersKeepDigitsAndSymbols(block.content);\n const anchorCollapsed = collapseWhitespace(anchorOnlySymbols);\n\n return {\n ...block,\n semanticText: semanticCollapsed,\n anchorText: anchorCollapsed,\n };\n};\n"],"mappings":";;;AAEA,MAAM,4BAA4B,SAAyB;AACzD,QAAO,KACJ,QAAQ,sBAAsB,IAAI,CAClC,QAAQ,oBAAoB,KAAK,CACjC,QAAQ,gBAAgB,KAAK,CAC7B,QAAQ,cAAc,KAAK,CAC3B,QAAQ,gBAAgB,KAAK,CAC7B,QAAQ,0BAA0B,IAAI,CACtC,QAAQ,mBAAmB,GAAG,CAC9B,QAAQ,cAAc,GAAG,CACzB,QAAQ,kBAAkB,GAAG,CAC7B,QAAQ,kBAAkB,GAAG;;AAGlC,MAAM,sBAAsB,SAC1B,KAAK,QAAQ,QAAQ,IAAI,CAAC,MAAM;AAElC,MAAM,oCAAoC,SAAyB;AAEjE,QAAO,KAAK,QAAQ,YAAY,GAAG;;AAGrC,MAAa,kBAAkB,UAAkC;CAG/D,MAAM,oBAAoB,mBAFK,yBAAyB,MAAM,QACb,CAAC,aACa,CAAC;CAGhE,MAAM,kBAAkB,mBADE,iCAAiC,MAAM,QACL,CAAC;AAE7D,QAAO;EACL,GAAG;EACH,cAAc;EACd,YAAY;EACb"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_translation_alignment_alignBlocks = require('./alignBlocks.cjs');
|
|
3
|
-
const require_translation_alignment_fingerprintBlock = require('./fingerprintBlock.cjs');
|
|
4
|
-
const require_translation_alignment_mapChangedLinesToBlocks = require('./mapChangedLinesToBlocks.cjs');
|
|
5
|
-
const require_translation_alignment_normalizeBlock = require('./normalizeBlock.cjs');
|
|
6
|
-
const require_translation_alignment_planActions = require('./planActions.cjs');
|
|
7
|
-
const require_translation_alignment_rebuildDocument = require('./rebuildDocument.cjs');
|
|
8
|
-
const require_translation_alignment_segmentDocument = require('./segmentDocument.cjs');
|
|
9
|
-
|
|
10
|
-
//#region src/translation-alignment/pipeline.ts
|
|
11
|
-
const buildAlignmentPlan = ({ englishText, frenchText, changedLines, similarityOptions }) => {
|
|
12
|
-
const englishBlocksRaw = require_translation_alignment_segmentDocument.segmentDocument(englishText);
|
|
13
|
-
const frenchBlocksRaw = require_translation_alignment_segmentDocument.segmentDocument(frenchText);
|
|
14
|
-
const englishNormalized = englishBlocksRaw.map(require_translation_alignment_normalizeBlock.normalizeBlock);
|
|
15
|
-
const frenchNormalized = frenchBlocksRaw.map(require_translation_alignment_normalizeBlock.normalizeBlock);
|
|
16
|
-
const englishBlocks = englishNormalized.map((block, index, array) => require_translation_alignment_fingerprintBlock.fingerprintBlock(block, array[index - 1] ?? null, array[index + 1] ?? null));
|
|
17
|
-
const frenchBlocks = frenchNormalized.map((block, index, array) => require_translation_alignment_fingerprintBlock.fingerprintBlock(block, array[index - 1] ?? null, array[index + 1] ?? null));
|
|
18
|
-
const plan = require_translation_alignment_planActions.planAlignmentActions(require_translation_alignment_alignBlocks.alignEnglishAndFrenchBlocks(englishBlocks, frenchBlocks), require_translation_alignment_mapChangedLinesToBlocks.mapChangedLinesToBlocks(englishBlocks, Array.isArray(changedLines) ? changedLines : []), {
|
|
19
|
-
minimumMatchForReuse: similarityOptions?.minimumMatchForReuse ?? .9,
|
|
20
|
-
minimumMatchForNearDuplicate: similarityOptions?.minimumMatchForNearDuplicate ?? .8
|
|
21
|
-
});
|
|
22
|
-
const { segmentsToReview } = require_translation_alignment_rebuildDocument.identifySegmentsToReview({
|
|
23
|
-
englishBlocks,
|
|
24
|
-
frenchBlocks,
|
|
25
|
-
plan
|
|
26
|
-
});
|
|
27
|
-
return {
|
|
28
|
-
englishBlocks,
|
|
29
|
-
frenchBlocks,
|
|
30
|
-
plan,
|
|
31
|
-
segmentsToReview
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
//#endregion
|
|
36
|
-
exports.buildAlignmentPlan = buildAlignmentPlan;
|
|
37
|
-
exports.mergeReviewedSegments = require_translation_alignment_rebuildDocument.mergeReviewedSegments;
|
|
38
|
-
//# sourceMappingURL=pipeline.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.cjs","names":["segmentDocument","normalizeBlock","fingerprintBlock","planAlignmentActions","alignEnglishAndFrenchBlocks","mapChangedLinesToBlocks","identifySegmentsToReview"],"sources":["../../../src/translation-alignment/pipeline.ts"],"sourcesContent":["import { alignEnglishAndFrenchBlocks } from './alignBlocks';\nimport { fingerprintBlock } from './fingerprintBlock';\nimport { mapChangedLinesToBlocks } from './mapChangedLinesToBlocks';\nimport { normalizeBlock } from './normalizeBlock';\nimport { planAlignmentActions } from './planActions';\nimport {\n identifySegmentsToReview,\n mergeReviewedSegments,\n type SegmentToReview,\n} from './rebuildDocument';\nimport { segmentDocument } from './segmentDocument';\nimport type {\n AlignmentPlan,\n FingerprintedBlock,\n SimilarityOptions,\n} from './types';\n\nexport type BuildAlignmentPlanInput = {\n englishText: string;\n frenchText: string;\n changedLines: number[] | undefined;\n similarityOptions?: Partial<SimilarityOptions>;\n};\n\nexport type BuildAlignmentPlanOutput = {\n englishBlocks: FingerprintedBlock[];\n frenchBlocks: FingerprintedBlock[];\n plan: AlignmentPlan;\n segmentsToReview: SegmentToReview[];\n};\n\nexport const buildAlignmentPlan = ({\n englishText,\n frenchText,\n changedLines,\n similarityOptions,\n}: BuildAlignmentPlanInput): BuildAlignmentPlanOutput => {\n const englishBlocksRaw = segmentDocument(englishText);\n const frenchBlocksRaw = segmentDocument(frenchText);\n\n const englishNormalized = englishBlocksRaw.map(normalizeBlock);\n const frenchNormalized = frenchBlocksRaw.map(normalizeBlock);\n\n const englishBlocks: FingerprintedBlock[] = englishNormalized.map(\n (block, index, array) =>\n fingerprintBlock(\n block,\n array[index - 1] ?? null,\n array[index + 1] ?? null\n )\n );\n const frenchBlocks: FingerprintedBlock[] = frenchNormalized.map(\n (block, index, array) =>\n fingerprintBlock(\n block,\n array[index - 1] ?? null,\n array[index + 1] ?? null\n )\n );\n\n const alignment = alignEnglishAndFrenchBlocks(englishBlocks, frenchBlocks);\n\n const changedIndexes = mapChangedLinesToBlocks(\n englishBlocks,\n Array.isArray(changedLines) ? changedLines : []\n );\n\n const plan = planAlignmentActions(alignment, changedIndexes, {\n minimumMatchForReuse: similarityOptions?.minimumMatchForReuse ?? 0.9,\n minimumMatchForNearDuplicate:\n similarityOptions?.minimumMatchForNearDuplicate ?? 0.8,\n });\n\n const { segmentsToReview } = identifySegmentsToReview({\n englishBlocks,\n frenchBlocks,\n plan,\n });\n\n return { englishBlocks, frenchBlocks, plan, segmentsToReview };\n};\n\nexport type { SegmentToReview };\nexport { mergeReviewedSegments };\n"],"mappings":";;;;;;;;;;AA+BA,MAAa,sBAAsB,EACjC,aACA,YACA,cACA,wBACuD;CACvD,MAAM,mBAAmBA,8DAAgB,YAAY;CACrD,MAAM,kBAAkBA,8DAAgB,WAAW;CAEnD,MAAM,oBAAoB,iBAAiB,IAAIC,4DAAe;CAC9D,MAAM,mBAAmB,gBAAgB,IAAIA,4DAAe;CAE5D,MAAM,gBAAsC,kBAAkB,KAC3D,OAAO,OAAO,UACbC,gEACE,OACA,MAAM,QAAQ,MAAM,MACpB,MAAM,QAAQ,MAAM,KACrB,CACJ;CACD,MAAM,eAAqC,iBAAiB,KACzD,OAAO,OAAO,UACbA,gEACE,OACA,MAAM,QAAQ,MAAM,MACpB,MAAM,QAAQ,MAAM,KACrB,CACJ;CASD,MAAM,OAAOC,+DAPKC,sEAA4B,eAAe,aAOlB,EALpBC,8EACrB,eACA,MAAM,QAAQ,aAAa,GAAG,eAAe,EAAE,CAGU,EAAE;EAC3D,sBAAsB,mBAAmB,wBAAwB;EACjE,8BACE,mBAAmB,gCAAgC;EACtD,CAAC;CAEF,MAAM,EAAE,qBAAqBC,uEAAyB;EACpD;EACA;EACA;EACD,CAAC;AAEF,QAAO;EAAE;EAAe;EAAc;EAAM;EAAkB"}
|