@localeguard/core 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/baseline.d.ts +36 -0
- package/dist/src/baseline.d.ts.map +1 -0
- package/dist/src/baseline.js +51 -0
- package/dist/src/baseline.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/locale-parser/load.d.ts.map +1 -1
- package/dist/src/locale-parser/load.js +84 -13
- package/dist/src/locale-parser/load.js.map +1 -1
- package/dist/src/po/parse.d.ts +29 -0
- package/dist/src/po/parse.d.ts.map +1 -0
- package/dist/src/po/parse.js +113 -0
- package/dist/src/po/parse.js.map +1 -0
- package/dist/src/reporters/sarif.js +1 -1
- package/dist/src/types.d.ts +3 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/yaml/parse.d.ts +24 -0
- package/dist/src/yaml/parse.d.ts.map +1 -0
- package/dist/src/yaml/parse.js +152 -0
- package/dist/src/yaml/parse.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline support: record the issues that already exist in a project so that
|
|
3
|
+
* subsequent runs only fail on *new* issues. This lets teams adopt LocaleGuard
|
|
4
|
+
* on an existing codebase without fixing everything up front.
|
|
5
|
+
*
|
|
6
|
+
* Issues are matched by a line-independent signature (type + file + locale +
|
|
7
|
+
* key + message), so edits elsewhere in a file don't invalidate the baseline.
|
|
8
|
+
*/
|
|
9
|
+
import type { Issue } from "./types";
|
|
10
|
+
export interface BaselineEntry {
|
|
11
|
+
type: string;
|
|
12
|
+
file: string;
|
|
13
|
+
locale?: string;
|
|
14
|
+
key?: string;
|
|
15
|
+
message: string;
|
|
16
|
+
}
|
|
17
|
+
export interface Baseline {
|
|
18
|
+
version: number;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
issues: BaselineEntry[];
|
|
21
|
+
}
|
|
22
|
+
export declare const BASELINE_VERSION = 1;
|
|
23
|
+
export declare function issueSignature(issue: {
|
|
24
|
+
type: string;
|
|
25
|
+
file: string;
|
|
26
|
+
locale?: string;
|
|
27
|
+
key?: string;
|
|
28
|
+
message: string;
|
|
29
|
+
}): string;
|
|
30
|
+
export declare function createBaseline(issues: Issue[]): Baseline;
|
|
31
|
+
/** Split issues into those not in the baseline (kept) and a suppressed count. */
|
|
32
|
+
export declare function applyBaseline(issues: Issue[], baseline: Baseline): {
|
|
33
|
+
issues: Issue[];
|
|
34
|
+
suppressed: number;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=baseline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAQT;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAYxD;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,QAAQ,GACjB;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CASzC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline support: record the issues that already exist in a project so that
|
|
4
|
+
* subsequent runs only fail on *new* issues. This lets teams adopt LocaleGuard
|
|
5
|
+
* on an existing codebase without fixing everything up front.
|
|
6
|
+
*
|
|
7
|
+
* Issues are matched by a line-independent signature (type + file + locale +
|
|
8
|
+
* key + message), so edits elsewhere in a file don't invalidate the baseline.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.BASELINE_VERSION = void 0;
|
|
12
|
+
exports.issueSignature = issueSignature;
|
|
13
|
+
exports.createBaseline = createBaseline;
|
|
14
|
+
exports.applyBaseline = applyBaseline;
|
|
15
|
+
exports.BASELINE_VERSION = 1;
|
|
16
|
+
function issueSignature(issue) {
|
|
17
|
+
return JSON.stringify([
|
|
18
|
+
issue.type,
|
|
19
|
+
issue.file,
|
|
20
|
+
issue.locale ?? "",
|
|
21
|
+
issue.key ?? "",
|
|
22
|
+
issue.message,
|
|
23
|
+
]);
|
|
24
|
+
}
|
|
25
|
+
function createBaseline(issues) {
|
|
26
|
+
return {
|
|
27
|
+
version: exports.BASELINE_VERSION,
|
|
28
|
+
createdAt: new Date().toISOString(),
|
|
29
|
+
issues: issues.map((i) => ({
|
|
30
|
+
type: i.type,
|
|
31
|
+
file: i.file,
|
|
32
|
+
locale: i.locale,
|
|
33
|
+
key: i.key,
|
|
34
|
+
message: i.message,
|
|
35
|
+
})),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Split issues into those not in the baseline (kept) and a suppressed count. */
|
|
39
|
+
function applyBaseline(issues, baseline) {
|
|
40
|
+
const signatures = new Set(baseline.issues.map(issueSignature));
|
|
41
|
+
const kept = [];
|
|
42
|
+
let suppressed = 0;
|
|
43
|
+
for (const issue of issues) {
|
|
44
|
+
if (signatures.has(issueSignature(issue)))
|
|
45
|
+
suppressed += 1;
|
|
46
|
+
else
|
|
47
|
+
kept.push(issue);
|
|
48
|
+
}
|
|
49
|
+
return { issues: kept, suppressed };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=baseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/baseline.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAoBH,wCAcC;AAED,wCAYC;AAGD,sCAYC;AA7CY,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC,SAAgB,cAAc,CAAC,KAM9B;IACC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,MAAM,IAAI,EAAE;QAClB,KAAK,CAAC,GAAG,IAAI,EAAE;QACf,KAAK,CAAC,OAAO;KACd,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAAC,MAAe;IAC5C,OAAO;QACL,OAAO,EAAE,wBAAgB;QACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAgB,aAAa,CAC3B,MAAe,EACf,QAAkB;IAElB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAAE,UAAU,IAAI,CAAC,CAAC;;YACtD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,6 +6,10 @@ export { FRAMEWORK_PRESETS, applyFramework } from "./framework";
|
|
|
6
6
|
export type { FrameworkPreset } from "./framework";
|
|
7
7
|
export { parseJson, JsonParseError } from "./json/parse";
|
|
8
8
|
export type { ParsedJson } from "./json/parse";
|
|
9
|
+
export { parseYaml, YamlParseError } from "./yaml/parse";
|
|
10
|
+
export type { ParsedYaml } from "./yaml/parse";
|
|
11
|
+
export { parsePo, poKey } from "./po/parse";
|
|
12
|
+
export type { ParsedPo, PoEntry } from "./po/parse";
|
|
9
13
|
export { flatten } from "./flatten";
|
|
10
14
|
export type { FlattenOptions } from "./flatten";
|
|
11
15
|
export { findFiles, globToRegExp } from "./glob";
|
|
@@ -14,6 +18,8 @@ export { compareKeys } from "./key-comparator/compare";
|
|
|
14
18
|
export type { KeyDiff } from "./key-comparator/compare";
|
|
15
19
|
export { checkKeyUsage } from "./key-usage";
|
|
16
20
|
export type { KeyUsageOptions } from "./key-usage";
|
|
21
|
+
export { createBaseline, applyBaseline, issueSignature, BASELINE_VERSION } from "./baseline";
|
|
22
|
+
export type { Baseline, BaselineEntry } from "./baseline";
|
|
17
23
|
export { extractPlaceholders, comparePlaceholders, } from "./placeholder-validator/placeholder";
|
|
18
24
|
export type { PlaceholderDiff } from "./placeholder-validator/placeholder";
|
|
19
25
|
export { loadLocale } from "./locale-parser/load";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7F,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.formatSarif = exports.formatMarkdown = exports.formatJson = exports.formatText = exports.LocaleGuardError = exports.sortIssues = exports.summarizeIssues = exports.runCheck = exports.parseXliff = exports.loadLocale = exports.comparePlaceholders = exports.extractPlaceholders = exports.checkKeyUsage = exports.compareKeys = exports.globToRegExp = exports.findFiles = exports.flatten = exports.JsonParseError = exports.parseJson = exports.applyFramework = exports.FRAMEWORK_PRESETS = void 0;
|
|
20
|
+
exports.formatSarif = exports.formatMarkdown = exports.formatJson = exports.formatText = exports.LocaleGuardError = exports.sortIssues = exports.summarizeIssues = exports.runCheck = exports.parseXliff = exports.loadLocale = exports.comparePlaceholders = exports.extractPlaceholders = exports.BASELINE_VERSION = exports.issueSignature = exports.applyBaseline = exports.createBaseline = exports.checkKeyUsage = exports.compareKeys = exports.globToRegExp = exports.findFiles = exports.flatten = exports.poKey = exports.parsePo = exports.YamlParseError = exports.parseYaml = exports.JsonParseError = exports.parseJson = exports.applyFramework = exports.FRAMEWORK_PRESETS = void 0;
|
|
21
21
|
__exportStar(require("./types"), exports);
|
|
22
22
|
var framework_1 = require("./framework");
|
|
23
23
|
Object.defineProperty(exports, "FRAMEWORK_PRESETS", { enumerable: true, get: function () { return framework_1.FRAMEWORK_PRESETS; } });
|
|
@@ -25,6 +25,12 @@ Object.defineProperty(exports, "applyFramework", { enumerable: true, get: functi
|
|
|
25
25
|
var parse_1 = require("./json/parse");
|
|
26
26
|
Object.defineProperty(exports, "parseJson", { enumerable: true, get: function () { return parse_1.parseJson; } });
|
|
27
27
|
Object.defineProperty(exports, "JsonParseError", { enumerable: true, get: function () { return parse_1.JsonParseError; } });
|
|
28
|
+
var parse_2 = require("./yaml/parse");
|
|
29
|
+
Object.defineProperty(exports, "parseYaml", { enumerable: true, get: function () { return parse_2.parseYaml; } });
|
|
30
|
+
Object.defineProperty(exports, "YamlParseError", { enumerable: true, get: function () { return parse_2.YamlParseError; } });
|
|
31
|
+
var parse_3 = require("./po/parse");
|
|
32
|
+
Object.defineProperty(exports, "parsePo", { enumerable: true, get: function () { return parse_3.parsePo; } });
|
|
33
|
+
Object.defineProperty(exports, "poKey", { enumerable: true, get: function () { return parse_3.poKey; } });
|
|
28
34
|
var flatten_1 = require("./flatten");
|
|
29
35
|
Object.defineProperty(exports, "flatten", { enumerable: true, get: function () { return flatten_1.flatten; } });
|
|
30
36
|
var glob_1 = require("./glob");
|
|
@@ -34,6 +40,11 @@ var compare_1 = require("./key-comparator/compare");
|
|
|
34
40
|
Object.defineProperty(exports, "compareKeys", { enumerable: true, get: function () { return compare_1.compareKeys; } });
|
|
35
41
|
var key_usage_1 = require("./key-usage");
|
|
36
42
|
Object.defineProperty(exports, "checkKeyUsage", { enumerable: true, get: function () { return key_usage_1.checkKeyUsage; } });
|
|
43
|
+
var baseline_1 = require("./baseline");
|
|
44
|
+
Object.defineProperty(exports, "createBaseline", { enumerable: true, get: function () { return baseline_1.createBaseline; } });
|
|
45
|
+
Object.defineProperty(exports, "applyBaseline", { enumerable: true, get: function () { return baseline_1.applyBaseline; } });
|
|
46
|
+
Object.defineProperty(exports, "issueSignature", { enumerable: true, get: function () { return baseline_1.issueSignature; } });
|
|
47
|
+
Object.defineProperty(exports, "BASELINE_VERSION", { enumerable: true, get: function () { return baseline_1.BASELINE_VERSION; } });
|
|
37
48
|
var placeholder_1 = require("./placeholder-validator/placeholder");
|
|
38
49
|
Object.defineProperty(exports, "extractPlaceholders", { enumerable: true, get: function () { return placeholder_1.extractPlaceholders; } });
|
|
39
50
|
Object.defineProperty(exports, "comparePlaceholders", { enumerable: true, get: function () { return placeholder_1.comparePlaceholders; } });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAE1C,sCAAyD;AAAhD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAElC,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,+BAAiD;AAAxC,iGAAA,SAAS,OAAA;AAAE,oGAAA,YAAY,OAAA;AAEhC,oDAAuD;AAA9C,sGAAA,WAAW,OAAA;AAEpB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,mEAG6C;AAF3C,kHAAA,mBAAmB,OAAA;AACnB,kHAAA,mBAAmB,OAAA;AAGrB,6CAAkD;AAAzC,kGAAA,UAAU,OAAA;AAEnB,+CAAmD;AAA1C,mGAAA,UAAU,OAAA;AAEnB,iCAAkF;AAAzE,iGAAA,QAAQ,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAEhE,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AAEnB,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AACnB,iDAAsD;AAA7C,0GAAA,cAAc,OAAA;AAEvB,2CAAgD;AAAvC,oGAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAE1C,sCAAyD;AAAhD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAElC,sCAAyD;AAAhD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAElC,oCAA4C;AAAnC,gGAAA,OAAO,OAAA;AAAE,8FAAA,KAAK,OAAA;AAEvB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,+BAAiD;AAAxC,iGAAA,SAAS,OAAA;AAAE,oGAAA,YAAY,OAAA;AAEhC,oDAAuD;AAA9C,sGAAA,WAAW,OAAA;AAEpB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,uCAA6F;AAApF,0GAAA,cAAc,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAExE,mEAG6C;AAF3C,kHAAA,mBAAmB,OAAA;AACnB,kHAAA,mBAAmB,OAAA;AAGrB,6CAAkD;AAAzC,kGAAA,UAAU,OAAA;AAEnB,+CAAmD;AAA1C,mGAAA,UAAU,OAAA;AAEnB,iCAAkF;AAAzE,iGAAA,QAAQ,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAEhE,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AAEnB,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AACnB,iDAAsD;AAA7C,0GAAA,cAAc,OAAA;AAEvB,2CAAgD;AAAvC,oGAAA,WAAW,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EAAS,YAAY,EAAe,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9F,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kDAAkD;IAClD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA6BD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,YAAY,CA4E1E"}
|
|
@@ -48,23 +48,24 @@ const fs = __importStar(require("node:fs"));
|
|
|
48
48
|
const path = __importStar(require("node:path"));
|
|
49
49
|
const flatten_1 = require("../flatten");
|
|
50
50
|
const parse_1 = require("../json/parse");
|
|
51
|
+
const parse_2 = require("../yaml/parse");
|
|
52
|
+
const parse_3 = require("../po/parse");
|
|
51
53
|
const types_1 = require("../types");
|
|
52
54
|
const xliff_1 = require("./xliff");
|
|
53
|
-
function listLocaleFiles(locale, opts) {
|
|
55
|
+
function listLocaleFiles(locale, opts, extensions) {
|
|
54
56
|
const base = path.resolve(opts.rootDir, opts.localesPath);
|
|
55
57
|
const files = [];
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
for (const ext of extensions) {
|
|
59
|
+
const singleFile = path.join(base, `${locale}${ext}`);
|
|
60
|
+
if (isFile(singleFile))
|
|
61
|
+
files.push({ absPath: singleFile, namespace: null });
|
|
59
62
|
}
|
|
60
63
|
const dir = path.join(base, locale);
|
|
61
64
|
if (isDirectory(dir)) {
|
|
62
65
|
for (const entry of fs.readdirSync(dir).sort()) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
namespace: entry.slice(0, -".json".length),
|
|
67
|
-
});
|
|
66
|
+
const ext = extensions.find((e) => entry.endsWith(e));
|
|
67
|
+
if (ext) {
|
|
68
|
+
files.push({ absPath: path.join(dir, entry), namespace: entry.slice(0, -ext.length) });
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
}
|
|
@@ -74,7 +75,12 @@ function loadLocale(locale, opts) {
|
|
|
74
75
|
if (opts.localeFormat === "xliff") {
|
|
75
76
|
return loadXliffLocale(locale, opts);
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
if (opts.localeFormat === "po") {
|
|
79
|
+
return loadPoLocale(locale, opts);
|
|
80
|
+
}
|
|
81
|
+
const isYaml = opts.localeFormat === "yaml";
|
|
82
|
+
const formatName = isYaml ? "YAML" : "JSON";
|
|
83
|
+
const files = listLocaleFiles(locale, opts, isYaml ? [".yaml", ".yml"] : [".json"]);
|
|
78
84
|
const entries = new Map();
|
|
79
85
|
const issues = [];
|
|
80
86
|
for (const { absPath, namespace } of files) {
|
|
@@ -96,7 +102,7 @@ function loadLocale(locale, opts) {
|
|
|
96
102
|
}
|
|
97
103
|
let parsed;
|
|
98
104
|
try {
|
|
99
|
-
parsed = (0, parse_1.parseJson)(text);
|
|
105
|
+
parsed = isYaml ? (0, parse_2.parseYaml)(text) : (0, parse_1.parseJson)(text);
|
|
100
106
|
}
|
|
101
107
|
catch (err) {
|
|
102
108
|
const pe = err;
|
|
@@ -107,8 +113,8 @@ function loadLocale(locale, opts) {
|
|
|
107
113
|
namespace: namespace ?? undefined,
|
|
108
114
|
file: relPath,
|
|
109
115
|
line: pe.line,
|
|
110
|
-
message: `Invalid
|
|
111
|
-
suggestion:
|
|
116
|
+
message: `Invalid ${formatName}: ${pe.message}`,
|
|
117
|
+
suggestion: `Fix the ${formatName} syntax so the locale can be parsed.`,
|
|
112
118
|
});
|
|
113
119
|
continue;
|
|
114
120
|
}
|
|
@@ -219,6 +225,71 @@ function loadXliffLocale(locale, opts) {
|
|
|
219
225
|
}
|
|
220
226
|
return { locale, entries, issues, found: true };
|
|
221
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Load a gettext PO locale. The source locale uses `msgid` as the value; target
|
|
230
|
+
* locales use `msgstr` (entries with an empty `msgstr` are untranslated and
|
|
231
|
+
* surface as missing keys). The key is the msgid (prefixed by msgctxt context).
|
|
232
|
+
*/
|
|
233
|
+
function loadPoLocale(locale, opts) {
|
|
234
|
+
const isSource = opts.sourceLocale === locale;
|
|
235
|
+
const base = path.resolve(opts.rootDir, opts.localesPath);
|
|
236
|
+
const names = isSource
|
|
237
|
+
? [`${locale}.po`, `${locale}.pot`, "messages.pot", "messages.po"]
|
|
238
|
+
: [`${locale}.po`];
|
|
239
|
+
let absPath;
|
|
240
|
+
for (const name of names) {
|
|
241
|
+
const candidate = path.join(base, name);
|
|
242
|
+
if (isFile(candidate)) {
|
|
243
|
+
absPath = candidate;
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (!absPath)
|
|
248
|
+
return { locale, entries: new Map(), issues: [], found: false };
|
|
249
|
+
const relPath = path.relative(opts.rootDir, absPath) || absPath;
|
|
250
|
+
const entries = new Map();
|
|
251
|
+
const issues = [];
|
|
252
|
+
let text;
|
|
253
|
+
try {
|
|
254
|
+
text = fs.readFileSync(absPath, "utf8");
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
issues.push({
|
|
258
|
+
type: "invalid-json",
|
|
259
|
+
severity: types_1.SEVERITY_BY_TYPE["invalid-json"],
|
|
260
|
+
locale,
|
|
261
|
+
file: relPath,
|
|
262
|
+
message: `Could not read PO file: ${err.message}`,
|
|
263
|
+
});
|
|
264
|
+
return { locale, entries, issues, found: true };
|
|
265
|
+
}
|
|
266
|
+
const parsed = (0, parse_3.parsePo)(text);
|
|
267
|
+
for (const dup of parsed.duplicates) {
|
|
268
|
+
issues.push({
|
|
269
|
+
type: "duplicate-key",
|
|
270
|
+
severity: types_1.SEVERITY_BY_TYPE["duplicate-key"],
|
|
271
|
+
locale,
|
|
272
|
+
key: dup.key,
|
|
273
|
+
file: relPath,
|
|
274
|
+
line: dup.line,
|
|
275
|
+
message: `Duplicate msgid "${dup.key}"`,
|
|
276
|
+
suggestion: "Remove the duplicate entry.",
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
for (const entry of parsed.entries) {
|
|
280
|
+
const key = (0, parse_3.poKey)(entry);
|
|
281
|
+
if (isSource) {
|
|
282
|
+
// Classic gettext puts the source text in msgid; symbolic-id projects put
|
|
283
|
+
// it in the source file's msgstr. Prefer msgstr when present.
|
|
284
|
+
const value = entry.msgstr.trim().length > 0 ? entry.msgstr : entry.msgid;
|
|
285
|
+
entries.set(key, { value, file: relPath, line: entry.line });
|
|
286
|
+
}
|
|
287
|
+
else if (entry.msgstr.trim().length > 0) {
|
|
288
|
+
entries.set(key, { value: entry.msgstr, file: relPath, line: entry.line });
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return { locale, entries, issues, found: true };
|
|
292
|
+
}
|
|
222
293
|
function qualify(namespace, key) {
|
|
223
294
|
return namespace ? `${namespace}:${key}` : key;
|
|
224
295
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDH,
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDH,gCA4EC;AA/HD,4CAA8B;AAC9B,gDAAkC;AAElC,wCAAqC;AACrC,yCAA0C;AAC1C,yCAA0C;AAC1C,uCAA6C;AAC7C,oCAA4C;AAE5C,mCAAqC;AAoBrC,SAAS,eAAe,CAAC,MAAc,EAAE,IAAiB,EAAE,UAAoB;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,UAAU,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc,EAAE,IAAiB;IAC1D,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC;QAChE,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,wBAAgB,CAAC,cAAc,CAAC;gBAC1C,MAAM;gBACN,SAAS,EAAE,SAAS,IAAI,SAAS;gBACjC,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,+BAAgC,GAAa,CAAC,OAAO,EAAE;aACjE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,GAAyC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,wBAAgB,CAAC,cAAc,CAAC;gBAC1C,MAAM;gBACN,SAAS,EAAE,SAAS,IAAI,SAAS;gBACjC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,OAAO,EAAE,WAAW,UAAU,KAAK,EAAE,CAAC,OAAO,EAAE;gBAC/C,UAAU,EAAE,WAAW,UAAU,sCAAsC;aACxE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE,wBAAgB,CAAC,eAAe,CAAC;gBAC3C,MAAM;gBACN,SAAS,EAAE,SAAS,IAAI,SAAS;gBACjC,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC;gBACjC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,kBAAkB,GAAG,CAAC,IAAI,GAAG;gBACtC,UAAU,EAAE,oDAAoD;aACjE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,IAAA,iBAAO,EAAC,MAAM,CAAC,KAAK,EAAE;YACjC,kBAAkB,EAAE,IAAI,CAAC,aAAa,KAAK,gBAAgB;SAC5D,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;gBACjB,KAAK;gBACL,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAc,EAAE,IAAiB;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC;YACE,cAAc;YACd,gBAAgB;YAChB,YAAY,MAAM,MAAM;YACxB,YAAY,MAAM,QAAQ;YAC1B,GAAG,MAAM,MAAM;YACf,GAAG,MAAM,QAAQ;SAClB;QACH,CAAC,CAAC,CAAC,YAAY,MAAM,MAAM,EAAE,YAAY,MAAM,QAAQ,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,CAAC;IAE/F,IAAI,OAA2B,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,SAAS,CAAC;YACpB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAE9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,wBAAgB,CAAC,cAAc,CAAC;YAC1C,MAAM;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,8BAA+B,GAAa,CAAC,OAAO,EAAE;SAChE,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,wBAAgB,CAAC,cAAc,CAAC;YAC1C,MAAM;YACN,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,+DAA+D;YACxE,UAAU,EAAE,+CAA+C;SAC5D,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,wBAAgB,CAAC,eAAe,CAAC;YAC3C,MAAM;YACN,GAAG,EAAE,GAAG,CAAC,EAAE;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,sBAAsB,GAAG,CAAC,EAAE,GAAG;YACxC,UAAU,EAAE,uCAAuC;SACpD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAc,EAAE,IAAiB;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE,GAAG,MAAM,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC;QAClE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;IAErB,IAAI,OAA2B,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,SAAS,CAAC;YACpB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAE9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,wBAAgB,CAAC,cAAc,CAAC;YAC1C,MAAM;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,2BAA4B,GAAa,CAAC,OAAO,EAAE;SAC7D,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,wBAAgB,CAAC,eAAe,CAAC;YAC3C,MAAM;YACN,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,oBAAoB,GAAG,CAAC,GAAG,GAAG;YACvC,UAAU,EAAE,6BAA6B;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAA,aAAK,EAAC,KAAK,CAAC,CAAC;QACzB,IAAI,QAAQ,EAAE,CAAC;YACb,0EAA0E;YAC1E,8DAA8D;YAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,SAAwB,EAAE,GAAW;IACpD,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACjD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small parser for gettext PO files. Each entry has a `msgid` (the source
|
|
3
|
+
* string, used as the key) and a `msgstr` (the translation). `msgctxt` adds a
|
|
4
|
+
* context that disambiguates the key. Multi-line strings (continuation lines)
|
|
5
|
+
* and the standard escapes are supported.
|
|
6
|
+
*
|
|
7
|
+
* Interpolation in PO varies by project; LocaleGuard recognizes `{name}` /
|
|
8
|
+
* `{{name}}` style placeholders (not printf `%s` / `%(name)s`).
|
|
9
|
+
*/
|
|
10
|
+
export interface PoEntry {
|
|
11
|
+
context?: string;
|
|
12
|
+
msgid: string;
|
|
13
|
+
msgstr: string;
|
|
14
|
+
/** 1-based line of the entry's msgid. */
|
|
15
|
+
line: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ParsedPo {
|
|
18
|
+
entries: PoEntry[];
|
|
19
|
+
duplicates: {
|
|
20
|
+
key: string;
|
|
21
|
+
line: number;
|
|
22
|
+
}[];
|
|
23
|
+
}
|
|
24
|
+
export declare function poKey(entry: {
|
|
25
|
+
context?: string;
|
|
26
|
+
msgid: string;
|
|
27
|
+
}): string;
|
|
28
|
+
export declare function parsePo(text: string): ParsedPo;
|
|
29
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/po/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAExE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA2E9C"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A small parser for gettext PO files. Each entry has a `msgid` (the source
|
|
4
|
+
* string, used as the key) and a `msgstr` (the translation). `msgctxt` adds a
|
|
5
|
+
* context that disambiguates the key. Multi-line strings (continuation lines)
|
|
6
|
+
* and the standard escapes are supported.
|
|
7
|
+
*
|
|
8
|
+
* Interpolation in PO varies by project; LocaleGuard recognizes `{name}` /
|
|
9
|
+
* `{{name}}` style placeholders (not printf `%s` / `%(name)s`).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.poKey = poKey;
|
|
13
|
+
exports.parsePo = parsePo;
|
|
14
|
+
function poKey(entry) {
|
|
15
|
+
return entry.context ? `${entry.context}|${entry.msgid}` : entry.msgid;
|
|
16
|
+
}
|
|
17
|
+
function parsePo(text) {
|
|
18
|
+
const entries = [];
|
|
19
|
+
const lines = text.split("\n");
|
|
20
|
+
let current = { line: 0 };
|
|
21
|
+
let started = false;
|
|
22
|
+
let field = null;
|
|
23
|
+
const flush = () => {
|
|
24
|
+
if (started && current.msgid !== undefined) {
|
|
25
|
+
entries.push({
|
|
26
|
+
context: current.context,
|
|
27
|
+
msgid: current.msgid,
|
|
28
|
+
msgstr: current.msgstr ?? "",
|
|
29
|
+
line: current.line,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
current = { line: 0 };
|
|
33
|
+
started = false;
|
|
34
|
+
field = null;
|
|
35
|
+
};
|
|
36
|
+
for (let i = 0; i < lines.length; i++) {
|
|
37
|
+
const lineNo = i + 1;
|
|
38
|
+
const trimmed = (lines[i] ?? "").trim();
|
|
39
|
+
if (trimmed === "") {
|
|
40
|
+
flush();
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (trimmed.startsWith("#"))
|
|
44
|
+
continue;
|
|
45
|
+
if (trimmed.startsWith('"')) {
|
|
46
|
+
const piece = unescape(quoted(trimmed));
|
|
47
|
+
if (field === "msgid")
|
|
48
|
+
current.msgid = (current.msgid ?? "") + piece;
|
|
49
|
+
else if (field === "msgstr")
|
|
50
|
+
current.msgstr = (current.msgstr ?? "") + piece;
|
|
51
|
+
else if (field === "msgctxt")
|
|
52
|
+
current.context = (current.context ?? "") + piece;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const match = /^(msgctxt|msgid_plural|msgid|msgstr(?:\[\d+\])?)\s+(.*)$/.exec(trimmed);
|
|
56
|
+
if (!match)
|
|
57
|
+
continue;
|
|
58
|
+
const keyword = match[1];
|
|
59
|
+
const value = unescape(quoted(match[2]));
|
|
60
|
+
started = true;
|
|
61
|
+
if (keyword === "msgctxt") {
|
|
62
|
+
current.context = value;
|
|
63
|
+
field = "msgctxt";
|
|
64
|
+
}
|
|
65
|
+
else if (keyword === "msgid") {
|
|
66
|
+
current.msgid = value;
|
|
67
|
+
current.line = lineNo;
|
|
68
|
+
field = "msgid";
|
|
69
|
+
}
|
|
70
|
+
else if (keyword === "msgid_plural") {
|
|
71
|
+
field = "other";
|
|
72
|
+
}
|
|
73
|
+
else if (keyword === "msgstr" || keyword === "msgstr[0]") {
|
|
74
|
+
current.msgstr = value;
|
|
75
|
+
field = "msgstr";
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
field = "other"; // msgstr[1], msgstr[2], ...
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
flush();
|
|
82
|
+
// Drop the header entry (msgid "").
|
|
83
|
+
const real = entries.filter((e) => e.msgid !== "");
|
|
84
|
+
const duplicates = [];
|
|
85
|
+
const seen = new Set();
|
|
86
|
+
for (const entry of real) {
|
|
87
|
+
const key = poKey(entry);
|
|
88
|
+
if (seen.has(key))
|
|
89
|
+
duplicates.push({ key, line: entry.line });
|
|
90
|
+
else
|
|
91
|
+
seen.add(key);
|
|
92
|
+
}
|
|
93
|
+
return { entries: real, duplicates };
|
|
94
|
+
}
|
|
95
|
+
function quoted(text) {
|
|
96
|
+
const m = /^"((?:[^"\\]|\\.)*)"/.exec(text);
|
|
97
|
+
return m ? m[1] : "";
|
|
98
|
+
}
|
|
99
|
+
function unescape(text) {
|
|
100
|
+
return text.replace(/\\(.)/g, (_m, ch) => {
|
|
101
|
+
switch (ch) {
|
|
102
|
+
case "n":
|
|
103
|
+
return "\n";
|
|
104
|
+
case "t":
|
|
105
|
+
return "\t";
|
|
106
|
+
case "r":
|
|
107
|
+
return "\r";
|
|
108
|
+
default:
|
|
109
|
+
return ch; // \" \\ etc.
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/po/parse.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -42,7 +42,7 @@ export type Framework = "react-i18next" | "react-intl" | "next-intl" | "vue-i18n
|
|
|
42
42
|
*/
|
|
43
43
|
export type MessageFormat = "plain" | "icu-descriptor";
|
|
44
44
|
/** On-disk locale file format. */
|
|
45
|
-
export type LocaleFormat = "json" | "xliff";
|
|
45
|
+
export type LocaleFormat = "json" | "xliff" | "yaml" | "po";
|
|
46
46
|
export interface LocaleGuardConfig {
|
|
47
47
|
/** Optional framework preset; fills defaults for the fields below. */
|
|
48
48
|
framework?: Framework;
|
|
@@ -68,6 +68,8 @@ export interface LocaleGuardConfig {
|
|
|
68
68
|
blockOn?: IssueType[];
|
|
69
69
|
/** Opt in to reporting locale keys never referenced in code (default false). */
|
|
70
70
|
unusedKeys?: boolean;
|
|
71
|
+
/** Path to a baseline file of pre-existing issues to suppress (default localeguard-baseline.json). */
|
|
72
|
+
baseline?: string;
|
|
71
73
|
}
|
|
72
74
|
/** A literal translation-key reference found in source code. */
|
|
73
75
|
export interface KeyReference {
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,aAAa,GACb,WAAW,GACX,eAAe,GACf,sBAAsB,GACtB,eAAe,GACf,YAAY,GACZ,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B,0CAA0C;AAC1C,eAAO,MAAM,WAAW,EAAE,SAAS,EAUlC,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gFAAgF;AAChF,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,YAAY,GACZ,WAAW,GACX,UAAU,GACV,eAAe,GACf,SAAS,CAAC;AAEd;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAEvD,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAwBH,0CAA0C;AAC7B,QAAA,WAAW,GAAgB;IACtC,cAAc;IACd,eAAe;IACf,aAAa;IACb,WAAW;IACX,sBAAsB;IACtB,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,qBAAqB;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAwBH,0CAA0C;AAC7B,QAAA,WAAW,GAAgB;IACtC,cAAc;IACd,eAAe;IACf,aAAa;IACb,WAAW;IACX,sBAAsB;IACtB,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,qBAAqB;CACtB,CAAC;AAoHW,QAAA,gBAAgB,GAAgB;IAC3C,cAAc;IACd,aAAa;IACb,eAAe;IACf,sBAAsB;IACtB,eAAe;CAChB,CAAC;AAEF,sDAAsD;AACzC,QAAA,gBAAgB,GAAqC;IAChE,cAAc,EAAE,OAAO;IACvB,aAAa,EAAE,OAAO;IACtB,WAAW,EAAE,SAAS;IACtB,eAAe,EAAE,OAAO;IACxB,sBAAsB,EAAE,OAAO;IAC/B,0EAA0E;IAC1E,+CAA+C;IAC/C,eAAe,EAAE,OAAO;IACxB,sEAAsE;IACtE,YAAY,EAAE,SAAS;IACvB,qEAAqE;IACrE,2DAA2D;IAC3D,kBAAkB,EAAE,SAAS;IAC7B,qBAAqB,EAAE,SAAS;CACjC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal YAML parser for the subset used by locale files: indentation-based
|
|
3
|
+
* nested mappings, scalar values, comments, and simple scalar lists. It returns
|
|
4
|
+
* the same shape as the JSON parser (value + key lines + duplicates) so the
|
|
5
|
+
* locale loader can treat YAML and JSON the same way.
|
|
6
|
+
*
|
|
7
|
+
* Not supported (uncommon in locale files): anchors/aliases, block scalars
|
|
8
|
+
* (`|`, `>`), flow style (`{}`, `[]`), and multi-document streams.
|
|
9
|
+
*/
|
|
10
|
+
import type { JsonValue } from "../types";
|
|
11
|
+
export declare class YamlParseError extends Error {
|
|
12
|
+
readonly line: number;
|
|
13
|
+
constructor(message: string, line: number);
|
|
14
|
+
}
|
|
15
|
+
export interface ParsedYaml {
|
|
16
|
+
value: JsonValue;
|
|
17
|
+
keyLines: Map<string, number>;
|
|
18
|
+
duplicates: {
|
|
19
|
+
path: string;
|
|
20
|
+
line: number;
|
|
21
|
+
}[];
|
|
22
|
+
}
|
|
23
|
+
export declare function parseYaml(text: string): ParsedYaml;
|
|
24
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/yaml/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,cAAe,SAAQ,KAAK;aAGrB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK/B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAYD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAqElD"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A minimal YAML parser for the subset used by locale files: indentation-based
|
|
4
|
+
* nested mappings, scalar values, comments, and simple scalar lists. It returns
|
|
5
|
+
* the same shape as the JSON parser (value + key lines + duplicates) so the
|
|
6
|
+
* locale loader can treat YAML and JSON the same way.
|
|
7
|
+
*
|
|
8
|
+
* Not supported (uncommon in locale files): anchors/aliases, block scalars
|
|
9
|
+
* (`|`, `>`), flow style (`{}`, `[]`), and multi-document streams.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.YamlParseError = void 0;
|
|
13
|
+
exports.parseYaml = parseYaml;
|
|
14
|
+
class YamlParseError extends Error {
|
|
15
|
+
line;
|
|
16
|
+
constructor(message, line) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.line = line;
|
|
19
|
+
this.name = "YamlParseError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.YamlParseError = YamlParseError;
|
|
23
|
+
function parseYaml(text) {
|
|
24
|
+
const keyLines = new Map();
|
|
25
|
+
const duplicates = [];
|
|
26
|
+
const root = {};
|
|
27
|
+
const stack = [
|
|
28
|
+
{ indent: -1, node: root, parent: null, attach: null, path: "", seen: new Set(), nextIndex: 0 },
|
|
29
|
+
];
|
|
30
|
+
const lines = text.split("\n");
|
|
31
|
+
for (let i = 0; i < lines.length; i++) {
|
|
32
|
+
const lineNo = i + 1;
|
|
33
|
+
const rawLine = stripComment(lines[i] ?? "");
|
|
34
|
+
if (rawLine.trim() === "")
|
|
35
|
+
continue;
|
|
36
|
+
if (rawLine.startsWith("\t"))
|
|
37
|
+
throw new YamlParseError("Tabs are not allowed in indentation", lineNo);
|
|
38
|
+
const indent = rawLine.length - rawLine.trimStart().length;
|
|
39
|
+
const content = rawLine.trim();
|
|
40
|
+
while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
|
|
41
|
+
const popped = stack.pop();
|
|
42
|
+
if (popped.node === null && popped.parent !== null && popped.attach !== null) {
|
|
43
|
+
popped.parent[popped.attach] = null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const frame = stack[stack.length - 1];
|
|
47
|
+
if (content.startsWith("- ")) {
|
|
48
|
+
const arr = materialize(frame, true);
|
|
49
|
+
const index = frame.nextIndex++;
|
|
50
|
+
arr.push(parseScalar(content.slice(2).trim()));
|
|
51
|
+
keyLines.set(frame.path ? `${frame.path}.${index}` : String(index), lineNo);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const match = /^("(?:[^"]|\\.)*"|'[^']*'|[^:]+?)\s*:(?:\s+(.*))?$/.exec(content);
|
|
55
|
+
if (!match)
|
|
56
|
+
throw new YamlParseError("Invalid YAML line", lineNo);
|
|
57
|
+
const key = unquote(match[1].trim());
|
|
58
|
+
const rest = match[2]?.trim() ?? "";
|
|
59
|
+
const map = materialize(frame, false);
|
|
60
|
+
const fullPath = frame.path ? `${frame.path}.${key}` : key;
|
|
61
|
+
if (frame.seen.has(key))
|
|
62
|
+
duplicates.push({ path: fullPath, line: lineNo });
|
|
63
|
+
else
|
|
64
|
+
frame.seen.add(key);
|
|
65
|
+
keyLines.set(fullPath, lineNo);
|
|
66
|
+
if (rest === "") {
|
|
67
|
+
stack.push({
|
|
68
|
+
indent,
|
|
69
|
+
node: null,
|
|
70
|
+
parent: map,
|
|
71
|
+
attach: key,
|
|
72
|
+
path: fullPath,
|
|
73
|
+
seen: new Set(),
|
|
74
|
+
nextIndex: 0,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
map[key] = parseScalar(rest);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Materialize any trailing deferred frames as null.
|
|
82
|
+
for (let i = 1; i < stack.length; i++) {
|
|
83
|
+
const f = stack[i];
|
|
84
|
+
if (f.node === null && f.parent !== null && f.attach !== null) {
|
|
85
|
+
f.parent[f.attach] = null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { value: root, keyLines, duplicates };
|
|
89
|
+
}
|
|
90
|
+
function materialize(frame, asArray) {
|
|
91
|
+
if (frame.node === null) {
|
|
92
|
+
frame.node = asArray ? [] : {};
|
|
93
|
+
if (frame.parent !== null && frame.attach !== null) {
|
|
94
|
+
frame.parent[frame.attach] = frame.node;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return frame.node;
|
|
98
|
+
}
|
|
99
|
+
function parseScalar(text) {
|
|
100
|
+
if (text.length >= 2 && text.startsWith('"') && text.endsWith('"')) {
|
|
101
|
+
try {
|
|
102
|
+
return JSON.parse(text);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return text.slice(1, -1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (text.length >= 2 && text.startsWith("'") && text.endsWith("'")) {
|
|
109
|
+
return text.slice(1, -1).replace(/''/g, "'");
|
|
110
|
+
}
|
|
111
|
+
if (text === "true")
|
|
112
|
+
return true;
|
|
113
|
+
if (text === "false")
|
|
114
|
+
return false;
|
|
115
|
+
if (text === "null" || text === "~")
|
|
116
|
+
return null;
|
|
117
|
+
if (/^-?\d+$/.test(text))
|
|
118
|
+
return Number(text);
|
|
119
|
+
if (/^-?\d*\.\d+$/.test(text))
|
|
120
|
+
return Number(text);
|
|
121
|
+
return text;
|
|
122
|
+
}
|
|
123
|
+
function unquote(text) {
|
|
124
|
+
if (text.length >= 2 && text.startsWith('"') && text.endsWith('"')) {
|
|
125
|
+
try {
|
|
126
|
+
return JSON.parse(text);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return text.slice(1, -1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (text.length >= 2 && text.startsWith("'") && text.endsWith("'")) {
|
|
133
|
+
return text.slice(1, -1).replace(/''/g, "'");
|
|
134
|
+
}
|
|
135
|
+
return text;
|
|
136
|
+
}
|
|
137
|
+
function stripComment(line) {
|
|
138
|
+
let inSingle = false;
|
|
139
|
+
let inDouble = false;
|
|
140
|
+
for (let i = 0; i < line.length; i++) {
|
|
141
|
+
const ch = line[i];
|
|
142
|
+
if (ch === "'" && !inDouble)
|
|
143
|
+
inSingle = !inSingle;
|
|
144
|
+
else if (ch === '"' && !inSingle)
|
|
145
|
+
inDouble = !inDouble;
|
|
146
|
+
else if (ch === "#" && !inSingle && !inDouble && (i === 0 || line[i - 1] === " " || line[i - 1] === "\t")) {
|
|
147
|
+
return line.slice(0, i);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return line;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/yaml/parse.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED