@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.
@@ -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"}
@@ -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";
@@ -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; } });
@@ -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;AAQH,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;AA+BD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,YAAY,CAuE1E"}
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 singleFile = path.join(base, `${locale}.json`);
57
- if (isFile(singleFile)) {
58
- files.push({ absPath: singleFile, namespace: null });
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
- if (entry.endsWith(".json")) {
64
- files.push({
65
- absPath: path.join(dir, entry),
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
- const files = listLocaleFiles(locale, opts);
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 JSON: ${pe.message}`,
111
- suggestion: "Fix the JSON syntax so the locale can be parsed.",
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":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -51,7 +51,7 @@ function formatSarif(result, opts = {}) {
51
51
  driver: {
52
52
  name: "LocaleGuard",
53
53
  informationUri: "https://github.com/isamrish/localeguard",
54
- version: opts.toolVersion ?? "0.4.0",
54
+ version: opts.toolVersion ?? "0.5.0",
55
55
  rules,
56
56
  },
57
57
  },
@@ -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 {
@@ -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;AAE5C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oEAAoE;IACpE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,uDAAuD;IACvD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,uEAAuE;IACvE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,yDAAyD;IACzD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,yCAAyC;IACzC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAMvC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAe7D,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -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;AAkHW,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@localeguard/core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Core localization checks for LocaleGuard: locale parsing, key comparison, and interpolation validation.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "isamrish",