@extenshi/cli 0.23.1 → 0.25.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.
Files changed (114) hide show
  1. package/README.md +1 -1
  2. package/dist/amo-source.d.ts +88 -17
  3. package/dist/amo-source.d.ts.map +1 -1
  4. package/dist/amo-source.js +442 -116
  5. package/dist/amo-source.js.map +1 -1
  6. package/dist/amowebstore-md.d.ts +26 -0
  7. package/dist/amowebstore-md.d.ts.map +1 -1
  8. package/dist/amowebstore-md.js +32 -3
  9. package/dist/amowebstore-md.js.map +1 -1
  10. package/dist/auto-update.d.ts +46 -3
  11. package/dist/auto-update.d.ts.map +1 -1
  12. package/dist/auto-update.js +94 -19
  13. package/dist/auto-update.js.map +1 -1
  14. package/dist/chromewebstore-md.d.ts +7 -0
  15. package/dist/chromewebstore-md.d.ts.map +1 -1
  16. package/dist/chromewebstore-md.js +20 -3
  17. package/dist/chromewebstore-md.js.map +1 -1
  18. package/dist/cli.js +73 -20
  19. package/dist/cli.js.map +1 -1
  20. package/dist/compliance-review.d.ts +5 -1
  21. package/dist/compliance-review.d.ts.map +1 -1
  22. package/dist/compliance-review.js +10 -5
  23. package/dist/compliance-review.js.map +1 -1
  24. package/dist/cws-policies.d.ts.map +1 -1
  25. package/dist/cws-policies.js +4 -0
  26. package/dist/cws-policies.js.map +1 -1
  27. package/dist/edgewebstore-md.d.ts +14 -0
  28. package/dist/edgewebstore-md.d.ts.map +1 -1
  29. package/dist/edgewebstore-md.js +20 -5
  30. package/dist/edgewebstore-md.js.map +1 -1
  31. package/dist/evidence-ingest.d.ts +67 -5
  32. package/dist/evidence-ingest.d.ts.map +1 -1
  33. package/dist/evidence-ingest.js +146 -21
  34. package/dist/evidence-ingest.js.map +1 -1
  35. package/dist/generate-listing.d.ts +18 -6
  36. package/dist/generate-listing.d.ts.map +1 -1
  37. package/dist/generate-listing.js +62 -19
  38. package/dist/generate-listing.js.map +1 -1
  39. package/dist/json-ld.d.ts +43 -5
  40. package/dist/json-ld.d.ts.map +1 -1
  41. package/dist/json-ld.js +53 -1
  42. package/dist/json-ld.js.map +1 -1
  43. package/dist/landing-sections.d.ts +21 -3
  44. package/dist/landing-sections.d.ts.map +1 -1
  45. package/dist/landing-sections.js +63 -17
  46. package/dist/landing-sections.js.map +1 -1
  47. package/dist/listing-checks.d.ts +15 -9
  48. package/dist/listing-checks.d.ts.map +1 -1
  49. package/dist/listing-checks.js +54 -46
  50. package/dist/listing-checks.js.map +1 -1
  51. package/dist/listing-data-flows.d.ts +140 -0
  52. package/dist/listing-data-flows.d.ts.map +1 -0
  53. package/dist/listing-data-flows.js +454 -0
  54. package/dist/listing-data-flows.js.map +1 -0
  55. package/dist/listing.d.ts +48 -0
  56. package/dist/listing.d.ts.map +1 -1
  57. package/dist/listing.js +201 -23
  58. package/dist/listing.js.map +1 -1
  59. package/dist/localize-parity.d.ts +26 -0
  60. package/dist/localize-parity.d.ts.map +1 -0
  61. package/dist/localize-parity.js +227 -0
  62. package/dist/localize-parity.js.map +1 -0
  63. package/dist/localize.d.ts +6 -0
  64. package/dist/localize.d.ts.map +1 -1
  65. package/dist/localize.js +4 -4
  66. package/dist/localize.js.map +1 -1
  67. package/dist/media.d.ts.map +1 -1
  68. package/dist/media.js +1 -2
  69. package/dist/media.js.map +1 -1
  70. package/dist/package.d.ts +13 -0
  71. package/dist/package.d.ts.map +1 -1
  72. package/dist/package.js +1 -1
  73. package/dist/package.js.map +1 -1
  74. package/dist/page.d.ts +16 -0
  75. package/dist/page.d.ts.map +1 -1
  76. package/dist/page.js +49 -4
  77. package/dist/page.js.map +1 -1
  78. package/dist/permission-justifications.d.ts +19 -1
  79. package/dist/permission-justifications.d.ts.map +1 -1
  80. package/dist/permission-justifications.js +129 -0
  81. package/dist/permission-justifications.js.map +1 -1
  82. package/dist/png.d.ts +40 -0
  83. package/dist/png.d.ts.map +1 -0
  84. package/dist/png.js +266 -0
  85. package/dist/png.js.map +1 -0
  86. package/dist/review-checks.d.ts +54 -13
  87. package/dist/review-checks.d.ts.map +1 -1
  88. package/dist/review-checks.js +367 -56
  89. package/dist/review-checks.js.map +1 -1
  90. package/dist/review-risk.d.ts +8 -3
  91. package/dist/review-risk.d.ts.map +1 -1
  92. package/dist/review-risk.js +14 -4
  93. package/dist/review-risk.js.map +1 -1
  94. package/dist/review-stores.d.ts +63 -0
  95. package/dist/review-stores.d.ts.map +1 -0
  96. package/dist/review-stores.js +92 -0
  97. package/dist/review-stores.js.map +1 -0
  98. package/dist/screenshots-scenes.d.ts +13 -0
  99. package/dist/screenshots-scenes.d.ts.map +1 -1
  100. package/dist/screenshots-scenes.js +20 -2
  101. package/dist/screenshots-scenes.js.map +1 -1
  102. package/dist/screenshots.d.ts +6 -4
  103. package/dist/screenshots.d.ts.map +1 -1
  104. package/dist/screenshots.js +31 -11
  105. package/dist/screenshots.js.map +1 -1
  106. package/dist/smoke.d.ts +54 -6
  107. package/dist/smoke.d.ts.map +1 -1
  108. package/dist/smoke.js +302 -26
  109. package/dist/smoke.js.map +1 -1
  110. package/dist/store-assets.d.ts +20 -3
  111. package/dist/store-assets.d.ts.map +1 -1
  112. package/dist/store-assets.js +17 -7
  113. package/dist/store-assets.js.map +1 -1
  114. package/package.json +1 -1
package/dist/listing.js CHANGED
@@ -128,6 +128,26 @@ export function listingFromArtifact(manifest, files) {
128
128
  function asOptionalString(value) {
129
129
  return typeof value === 'string' && value.trim() ? value : undefined;
130
130
  }
131
+ /**
132
+ * A draft's locale tag in the spelling the package uses for the same locale.
133
+ *
134
+ * `_locales` directories are named with an underscore (`pt_BR`, `zh_CN`), while
135
+ * people and store consoles write BCP 47 (`pt-BR`). Without this a `pt-BR`
136
+ * block never meets the package's `pt_BR` name and the report lists the
137
+ * locale twice, half-filled each time.
138
+ */
139
+ function localeKey(locale) {
140
+ return locale.trim().replace(/-/g, '_');
141
+ }
142
+ /** Field names a draft block may carry — used to tell ignored text apart from unknown keys. */
143
+ const DRAFT_TEXT_KEYS = [
144
+ 'name',
145
+ 'title',
146
+ 'shortDescription',
147
+ 'short_description',
148
+ 'description',
149
+ 'fullDescription',
150
+ ];
131
151
  /**
132
152
  * One locale block of a draft file. Accepts both the store's snake_case field
133
153
  * names and the camelCase ones a developer is likelier to type — refusing a
@@ -138,7 +158,7 @@ function parseLocaleBlock(locale, raw) {
138
158
  return null;
139
159
  const o = raw;
140
160
  const entry = {
141
- locale,
161
+ locale: localeKey(locale),
142
162
  name: asOptionalString(o.name) ?? asOptionalString(o.title),
143
163
  shortDescription: asOptionalString(o.shortDescription) ?? asOptionalString(o.short_description),
144
164
  description: asOptionalString(o.description) ?? asOptionalString(o.fullDescription),
@@ -153,6 +173,12 @@ function parseLocaleBlock(locale, raw) {
153
173
  * { "name": "…", "shortDescription": "…", "description": "…" }
154
174
  * { "defaultLocale": "en", "locales": { "en": { … }, "ru": { … } } }
155
175
  *
176
+ * They do not mix. With `locales` present every locale — the default one
177
+ * included — has to sit inside it, and top-level text is ignored with a
178
+ * warning: applying it to a locale would mean guessing which one the developer
179
+ * meant, and checking the guess would report findings against the wrong
180
+ * translation.
181
+ *
156
182
  * Throws on a file that is not an object or that yields no usable text — unlike
157
183
  * the artifact path, the developer explicitly pointed at this file, so silence
158
184
  * would look like a passing check.
@@ -165,20 +191,55 @@ export function parseListingFile(raw) {
165
191
  const declaredDefault = asOptionalString(o.defaultLocale) ?? asOptionalString(o.default_locale);
166
192
  const localesRaw = o.locales;
167
193
  if (localesRaw && typeof localesRaw === 'object' && !Array.isArray(localesRaw)) {
194
+ const warnings = [];
195
+ const ignored = DRAFT_TEXT_KEYS.filter((key) => asOptionalString(o[key]));
196
+ if (ignored.length > 0) {
197
+ warnings.push(`top-level ${ignored.map((key) => `"${key}"`).join(', ')} ${ignored.length === 1 ? 'is' : 'are'} ignored ` +
198
+ 'because the file has "locales" — move that text into its locale block, e.g. "locales": { "en": { … } }');
199
+ }
168
200
  const locales = [];
169
201
  for (const [locale, block] of Object.entries(localesRaw)) {
170
202
  const parsed = parseLocaleBlock(locale, block);
171
- if (parsed)
172
- locales.push(parsed);
203
+ if (!parsed) {
204
+ // Dropping a block silently is how English vanished on 2026-10-10;
205
+ // say which one went and why.
206
+ warnings.push(block && typeof block === 'object' && !Array.isArray(block)
207
+ ? `locale "${locale}" has no name, shortDescription or description; skipped`
208
+ : `locale "${locale}" is not an object like { "name": …, "description": … }; skipped`);
209
+ continue;
210
+ }
211
+ if (locales.some((l) => l.locale.toLowerCase() === parsed.locale.toLowerCase())) {
212
+ warnings.push(`locale "${parsed.locale}" appears more than once in "locales"; only the first block is checked`);
213
+ continue;
214
+ }
215
+ locales.push(parsed);
173
216
  }
174
217
  if (locales.length === 0) {
175
218
  throw new Error('listing file has a "locales" object but no locale carries any text');
176
219
  }
177
220
  locales.sort((a, b) => a.locale.localeCompare(b.locale));
178
- const defaultLocale = declaredDefault && locales.some((l) => l.locale === declaredDefault)
179
- ? declaredDefault
180
- : locales[0].locale;
181
- return { source: 'draft', defaultLocale, locales };
221
+ const declared = declaredDefault ? localeKey(declaredDefault) : undefined;
222
+ // Case-insensitive like every other locale match here; the block's own spelling wins.
223
+ const declaredBlock = declared
224
+ ? locales.find((l) => l.locale.toLowerCase() === declared.toLowerCase())
225
+ : undefined;
226
+ if (declared && !declaredBlock) {
227
+ warnings.push(`defaultLocale "${declared}" has no block in "locales"`);
228
+ }
229
+ const listing = { source: 'draft', defaultLocale: locales[0].locale, locales };
230
+ if (declaredBlock) {
231
+ listing.defaultLocale = declaredBlock.locale;
232
+ }
233
+ else {
234
+ // No usable declaration: the package's default_locale decides at merge
235
+ // time; standing alone, English is the likelier default than whichever
236
+ // tag sorts first.
237
+ listing.defaultLocale = locales.some((l) => l.locale === 'en') ? 'en' : locales[0].locale;
238
+ listing.defaultLocaleInferred = true;
239
+ }
240
+ if (warnings.length > 0)
241
+ listing.warnings = warnings;
242
+ return listing;
182
243
  }
183
244
  const flat = parseLocaleBlock(declaredDefault ?? DEFAULT_LOCALE_FALLBACK, o);
184
245
  if (!flat) {
@@ -230,11 +291,14 @@ export function mergeListings(artifact, draft) {
230
291
  }
231
292
  else {
232
293
  // A per-locale draft names its language, so it matches by key and wins
233
- // field by field. It never propagates to a locale it did not name.
294
+ // field by field. It never propagates to a locale it did not name. Keys
295
+ // match case-insensitively (`pt_br` is the package's `pt_BR`), and the
296
+ // package's spelling is kept.
234
297
  for (const d of draft.locales) {
235
- const existing = byLocale.get(d.locale);
236
- byLocale.set(d.locale, {
237
- locale: d.locale,
298
+ const key = [...byLocale.keys()].find((k) => k.toLowerCase() === d.locale.toLowerCase()) ?? d.locale;
299
+ const existing = byLocale.get(key);
300
+ byLocale.set(key, {
301
+ locale: key,
238
302
  name: d.name ?? existing?.name,
239
303
  shortDescription: d.shortDescription ?? existing?.shortDescription,
240
304
  description: d.description ?? existing?.description,
@@ -242,15 +306,16 @@ export function mergeListings(artifact, draft) {
242
306
  }
243
307
  }
244
308
  const locales = [...byLocale.values()].filter(hasText).sort((a, b) => a.locale.localeCompare(b.locale));
245
- // A flat draft carries no opinion about which locale is default, so the
246
- // package's answer stands.
247
- const preferred = draft.appliesToAllLocales ? artifact.defaultLocale : draft.defaultLocale;
248
- const defaultLocale = locales.some((l) => l.locale === preferred)
249
- ? preferred
250
- : locales.some((l) => l.locale === artifact.defaultLocale)
251
- ? artifact.defaultLocale
252
- : (locales[0]?.locale ?? draft.defaultLocale);
253
- return { source: draft.source, defaultLocale, locales };
309
+ // A flat draft carries no opinion about which locale is default, and neither
310
+ // does a per-locale one that never said — so the package's answer stands.
311
+ const preferred = draft.appliesToAllLocales || draft.defaultLocaleInferred ? artifact.defaultLocale : draft.defaultLocale;
312
+ const find = (tag) => locales.find((l) => l.locale.toLowerCase() === tag.toLowerCase())?.locale;
313
+ const defaultLocale = find(preferred) ?? find(artifact.defaultLocale) ?? locales[0]?.locale ?? draft.defaultLocale;
314
+ const merged = { source: draft.source, defaultLocale, locales };
315
+ const warnings = [...(artifact.warnings ?? []), ...(draft.warnings ?? [])];
316
+ if (warnings.length > 0)
317
+ merged.warnings = warnings;
318
+ return merged;
254
319
  }
255
320
  /**
256
321
  * The published catalog listing as an overlay.
@@ -283,6 +348,109 @@ export function listingFromCatalog(text) {
283
348
  appliesToAllLocales: true,
284
349
  };
285
350
  }
351
+ /** `## en`, `## pt-BR (default)` — a locale heading, not a section title like `## Name`. */
352
+ const LOCALE_HEADING_RE = /^##[ \t]+([A-Za-z]{2,3}(?:[-_][A-Za-z0-9]{2,8})*)[ \t]*(\(default\))?[ \t]*$/;
353
+ /** `- **Name:** …` / `**Summary**: …` — one labelled field inside a locale block. */
354
+ const FIELD_LINE_RE = /^[ \t]*(?:[-*+][ \t]+)?\*\*[ \t]*(name|title|summary|short description|description)[ \t]*(?::[ \t]*\*\*|\*\*[ \t]*:)[ \t]*(.*)$/i;
355
+ const FIELD_FOR_LABEL = {
356
+ name: 'name',
357
+ title: 'name',
358
+ summary: 'shortDescription',
359
+ 'short description': 'shortDescription',
360
+ description: 'description',
361
+ };
362
+ /**
363
+ * Read a multi-locale listing markdown — the one-file-per-project shape:
364
+ *
365
+ * ## en (default)
366
+ * - **Name:** Tab Sorter
367
+ * - **Summary:** Groups the tabs in your window by site.
368
+ * - **Description:**
369
+ *
370
+ * The full description, as many paragraphs as it takes.
371
+ *
372
+ * ## ru
373
+ * - **Name:** …
374
+ *
375
+ * Name and Summary are one line each; the Description runs to the next locale
376
+ * heading. Anything before the first locale heading (notes, tables) and any
377
+ * `##` section that carries no labelled field is ignored, which is also what
378
+ * keeps a CHROMEWEBSTORE.md — whose headings are field names, not locales —
379
+ * out of this parser.
380
+ *
381
+ * Returns the same object a per-locale `listing.json` holds, plus what was
382
+ * skipped, or `null` when the file has no locale block at all.
383
+ */
384
+ export function listingDraftFromLocalesMd(md) {
385
+ const blocks = [];
386
+ let current = null;
387
+ for (const line of md.split(/\r?\n/)) {
388
+ const heading = LOCALE_HEADING_RE.exec(line);
389
+ if (heading) {
390
+ // `## EN` is `en`: the language subtag is case-insensitive, the region keeps its spelling.
391
+ current = {
392
+ tag: heading[1].replace(/^[A-Za-z]+/, (lang) => lang.toLowerCase()),
393
+ heading: heading[1],
394
+ isDefault: Boolean(heading[2]),
395
+ lines: [],
396
+ };
397
+ blocks.push(current);
398
+ }
399
+ else if (/^#{1,2}[ \t]/.test(line)) {
400
+ // Any other top-level section ends the locale block it follows.
401
+ current = null;
402
+ }
403
+ else if (current) {
404
+ current.lines.push(line);
405
+ }
406
+ }
407
+ const locales = {};
408
+ const warnings = [];
409
+ let defaultLocale;
410
+ for (const block of blocks) {
411
+ const fields = {};
412
+ let open = null;
413
+ const body = [];
414
+ for (const line of block.lines) {
415
+ // Once the Description has opened it runs to the next heading: a bold
416
+ // `**Name:**` inside its prose is text, not a new field.
417
+ const field = open === 'description' ? null : FIELD_LINE_RE.exec(line);
418
+ if (field) {
419
+ open = FIELD_FOR_LABEL[field[1].toLowerCase()];
420
+ if (open === 'description')
421
+ body.push(field[2]);
422
+ else if (field[2].trim())
423
+ fields[open] = field[2].trim();
424
+ continue;
425
+ }
426
+ if (open === 'description')
427
+ body.push(line);
428
+ }
429
+ const description = body
430
+ .join('\n')
431
+ .replace(/(?:\n[ \t]*(?:-{3,}|\*{3,})[ \t]*)+\s*$/, '')
432
+ .trim();
433
+ if (description)
434
+ fields.description = description;
435
+ if (Object.keys(fields).length === 0) {
436
+ warnings.push(`"## ${block.heading}" has no **Name:**, **Summary:** or **Description:** line; skipped`);
437
+ continue;
438
+ }
439
+ const key = localeKey(block.tag);
440
+ if (Object.keys(locales).some((k) => k.toLowerCase() === key.toLowerCase())) {
441
+ warnings.push(`"## ${block.heading}" appears more than once; only the first block is checked`);
442
+ continue;
443
+ }
444
+ locales[key] = fields;
445
+ if (block.isDefault && defaultLocale)
446
+ warnings.push(`"## ${block.heading}" is marked (default) too; the first marked locale (${defaultLocale}) stays default`);
447
+ else if (block.isDefault)
448
+ defaultLocale = key;
449
+ }
450
+ if (Object.keys(locales).length === 0)
451
+ return null;
452
+ return { draft: defaultLocale ? { defaultLocale, locales } : { locales }, warnings };
453
+ }
286
454
  /**
287
455
  * Assemble the listing to check: the package's localized name/description,
288
456
  * overlaid with the draft file when one was passed.
@@ -304,10 +472,15 @@ export function assembleListing(manifest, files, listingPath, catalog) {
304
472
  throw new Error(`Listing file not found: ${listingPath}`);
305
473
  }
306
474
  let parsed;
475
+ const parseWarnings = [];
307
476
  const raw = fs.readFileSync(listingPath, 'utf8');
308
477
  if (listingPath.toLowerCase().endsWith('.md')) {
309
- // CHROMEWEBSTORE.md is the same draft as listing.json, in markdown.
310
- parsed = listingDraftFromChromeWebStoreMd(raw);
478
+ // Both markdown shapes are the same draft as listing.json: one block per
479
+ // `## <locale>` (LISTINGS.md), or the single-listing CHROMEWEBSTORE.md.
480
+ const perLocale = listingDraftFromLocalesMd(raw);
481
+ if (perLocale)
482
+ parseWarnings.push(...perLocale.warnings);
483
+ parsed = perLocale ? perLocale.draft : listingDraftFromChromeWebStoreMd(raw);
311
484
  }
312
485
  else {
313
486
  try {
@@ -317,12 +490,17 @@ export function assembleListing(manifest, files, listingPath, catalog) {
317
490
  throw new Error(`Listing file is not valid JSON: ${err.message}`);
318
491
  }
319
492
  }
493
+ let draft;
320
494
  try {
321
- listing = mergeListings(fromArtifact, parseListingFile(parsed));
495
+ draft = parseListingFile(parsed);
322
496
  }
323
497
  catch (err) {
324
498
  throw new Error(`${listingPath}: ${err.message}`);
325
499
  }
500
+ const warnings = [...parseWarnings, ...(draft.warnings ?? [])];
501
+ if (warnings.length > 0)
502
+ draft = { ...draft, warnings: warnings.map((w) => `${listingPath}: ${w}`) };
503
+ listing = mergeListings(fromArtifact, draft);
326
504
  }
327
505
  // The catalog goes LAST, and that ordering is the whole design.
328
506
  //
@@ -1 +1 @@
1
- {"version":3,"file":"listing.js","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listing.js","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface LocalizationCheckResult {
2
+ mode: 'review' | 'parity-only';
3
+ locales: string[];
4
+ errors: string[];
5
+ /** Why parity-only ran when the caller did not ask for it. */
6
+ note?: string;
7
+ }
8
+ /**
9
+ * What can be checked without prepare/apply metadata: the default locale exists, every locale has
10
+ * the same keys and placeholders as it, no catalog has an unusable entry, and a translation adds no
11
+ * listing risk the default locale lacks.
12
+ */
13
+ export declare function checkLocalizationParity(directory: string, protect?: string): {
14
+ locales: string[];
15
+ errors: string[];
16
+ };
17
+ /**
18
+ * `localize check`. The review gate needs `.extenshi-localization.json`, which only `localize apply`
19
+ * writes; a project with its own translation generator has none, so every key would be "unreviewed".
20
+ * Without it, check what is verifiable and say so.
21
+ */
22
+ export declare function runLocalizationCheck(directory: string, options?: {
23
+ protect?: string;
24
+ parityOnly?: boolean;
25
+ }): LocalizationCheckResult;
26
+ //# sourceMappingURL=localize-parity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localize-parity.d.ts","sourceRoot":"","sources":["../src/localize-parity.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAA;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AA2LD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsEzC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,uBAAuB,CAUzB"}
@@ -0,0 +1,227 @@
1
+ import fs from 'node:fs';
2
+ import { isExtensionLocale } from './extension-localization.js';
3
+ import { checkLocalization, listingGate, read, STATE, safePath } from './localize.js';
4
+ // extension-localization.ts tokenizes the same way but is mirrored byte-for-byte elsewhere, so it is not extended;
5
+ // here a named placeholder may also contain @, which Chrome allows.
6
+ const TOKEN = /\${2,}|\$[A-Za-z0-9_@]+\$|\$[1-9]|\$/g;
7
+ // https://developer.chrome.com/docs/extensions/mv3/i18n-messages/ lists this alphabet for message and placeholder
8
+ // names. Review mode is stricter (no @, no prototype-like names, because its keys become object properties); this
9
+ // mode follows Chrome, so a catalog can pass here and still be refused by prepare/apply.
10
+ const NAME = /^[A-Za-z0-9_@]+$/;
11
+ function object(value) {
12
+ return !!value && typeof value === 'object' && !Array.isArray(value);
13
+ }
14
+ function tokens(message) {
15
+ return message.match(TOKEN) ?? [];
16
+ }
17
+ const canonical = (list) => list.map((token) => token.toLowerCase()).sort();
18
+ const collapse = (message) => message.replace(/\${2,}/g, (run) => run.slice(1));
19
+ /** A catalog, 'missing' when the file is absent, or undefined after reporting why it cannot be used. */
20
+ function loadCatalog(root, code, errors) {
21
+ const relative = `_locales/${code}/messages.json`;
22
+ try {
23
+ if (!fs.existsSync(safePath(root, relative)))
24
+ return 'missing';
25
+ const value = read(root, relative);
26
+ if (object(value))
27
+ return value;
28
+ errors.push(`${code}: ${relative} must be a JSON object of messages [invalid-catalog]`);
29
+ }
30
+ catch (error) {
31
+ // Symlinks, size limit and bad JSON belong to this locale; the others are still checked.
32
+ errors.push(`${code}: ${relative} could not be read: ${error.message} [invalid-catalog]`);
33
+ }
34
+ return undefined;
35
+ }
36
+ /** Rules that need only the catalog itself. */
37
+ function inspect(code, raw, errors) {
38
+ const catalog = { present: new Map(), entries: new Map() };
39
+ const report = (key, text, rule) => errors.push(`${code}.${key}: ${text} [${rule}]`);
40
+ for (const [key, value] of Object.entries(raw)) {
41
+ if (key.startsWith('@@')) {
42
+ report(key, 'names starting with @@ are reserved for predefined messages (@@ui_locale, @@bidi_dir, …); Chrome supplies them, so do not define them', 'reserved-name');
43
+ continue;
44
+ }
45
+ if (!NAME.test(key)) {
46
+ report(key, 'message names may only contain A-Z, a-z, 0-9, _ and @', 'invalid-key');
47
+ continue;
48
+ }
49
+ const lower = key.toLowerCase();
50
+ if (catalog.present.has(lower)) {
51
+ report(key, `differs only by case from ${catalog.present.get(lower)}; message names are case-insensitive`, 'duplicate-key');
52
+ continue;
53
+ }
54
+ catalog.present.set(lower, key);
55
+ if (!object(value) || typeof value.message !== 'string') {
56
+ report(key, 'expected an object with a string "message"', 'invalid-message');
57
+ continue;
58
+ }
59
+ const message = value.message;
60
+ if (!message.trim()) {
61
+ report(key, 'empty message', 'empty-message');
62
+ continue;
63
+ }
64
+ const placeholders = new Map();
65
+ let sound = true;
66
+ if (value.placeholders !== undefined) {
67
+ if (!object(value.placeholders)) {
68
+ report(key, '"placeholders" must be an object', 'invalid-placeholders');
69
+ continue;
70
+ }
71
+ for (const [name, definition] of Object.entries(value.placeholders)) {
72
+ if (!NAME.test(name) ||
73
+ placeholders.has(name.toLowerCase()) ||
74
+ !object(definition) ||
75
+ typeof definition.content !== 'string') {
76
+ report(key, `invalid placeholder ${name}: it needs a unique name and a string "content"`, 'invalid-placeholders');
77
+ sound = false;
78
+ continue;
79
+ }
80
+ placeholders.set(name.toLowerCase(), definition.content);
81
+ }
82
+ }
83
+ if (!sound)
84
+ continue;
85
+ const named = new Map(tokens(message).map((token) => [token.toLowerCase(), token]));
86
+ for (const [lowered, token] of named)
87
+ if (/^\$[a-z0-9_@]+\$$/.test(lowered) && !placeholders.has(lowered.slice(1, -1)))
88
+ report(key, `${token} is used but not defined in "placeholders"`, 'undefined-placeholder');
89
+ catalog.entries.set(lower, { key, message, placeholders });
90
+ }
91
+ return catalog;
92
+ }
93
+ /** Rules that compare a translation with the default locale. */
94
+ function compare(code, sourceCode, source, target, protectedTerms, errors) {
95
+ const report = (key, text, rule) => errors.push(`${code}.${key}: ${text} [${rule}]`);
96
+ for (const [lower, key] of source.present)
97
+ if (!target.present.has(lower))
98
+ report(key, `missing from ${code}; Chrome falls back to ${sourceCode}`, 'key-parity');
99
+ for (const [lower, key] of target.present)
100
+ if (!source.present.has(lower))
101
+ report(key, `not defined in ${sourceCode}; the default locale must define every message`, 'key-parity');
102
+ for (const [lower, original] of source.entries) {
103
+ const translated = target.entries.get(lower);
104
+ if (!translated)
105
+ continue;
106
+ const was = tokens(original.message);
107
+ const now = tokens(translated.message);
108
+ if (canonical(was).join('\n') !== canonical(now).join('\n'))
109
+ report(translated.key, `placeholders, substitutions or dollar escapes differ: ${sourceCode} has [${was.join(' ')}], ${code} has [${now.join(' ')}]`, 'placeholder-parity');
110
+ for (const name of new Set([...original.placeholders.keys(), ...translated.placeholders.keys()])) {
111
+ const sourceContent = original.placeholders.get(name);
112
+ const content = translated.placeholders.get(name);
113
+ if (sourceContent === content)
114
+ continue;
115
+ report(translated.key, sourceContent === undefined
116
+ ? `placeholder ${name} is not defined in ${sourceCode}`
117
+ : content === undefined
118
+ ? `placeholder ${name} is missing; ${sourceCode} defines it`
119
+ : `placeholder ${name} content is ${JSON.stringify(content)}, ${sourceCode} has ${JSON.stringify(sourceContent)}`, 'placeholder-parity');
120
+ }
121
+ for (const term of protectedTerms)
122
+ if (term && collapse(original.message).includes(term) && !collapse(translated.message).includes(term))
123
+ report(translated.key, `protected term "${term}" is missing`, 'protected-term');
124
+ }
125
+ }
126
+ function readConfig(root) {
127
+ const config = read(root, 'localization.json', {});
128
+ if (!object(config))
129
+ throw new Error('Invalid localization.json');
130
+ const list = (value, label) => {
131
+ if (value === undefined)
132
+ return [];
133
+ if (!Array.isArray(value) || value.some((item) => typeof item !== 'string'))
134
+ throw new Error(label);
135
+ return value;
136
+ };
137
+ return {
138
+ sourceLocale: config.sourceLocale,
139
+ targetLocales: list(config.targetLocales, 'Invalid targetLocales configuration'),
140
+ protectedTerms: list(config.protectedTerms, 'Invalid protectedTerms configuration'),
141
+ };
142
+ }
143
+ /**
144
+ * What can be checked without prepare/apply metadata: the default locale exists, every locale has
145
+ * the same keys and placeholders as it, no catalog has an unusable entry, and a translation adds no
146
+ * listing risk the default locale lacks.
147
+ */
148
+ export function checkLocalizationParity(directory, protect) {
149
+ const root = fs.realpathSync(directory);
150
+ const errors = [];
151
+ if (!fs.existsSync(safePath(root, 'manifest.json')))
152
+ throw new Error(`manifest.json not found in ${directory}`);
153
+ const manifest = read(root, 'manifest.json');
154
+ if (!object(manifest))
155
+ throw new Error('manifest.json must be a JSON object');
156
+ const localesDirectory = safePath(root, '_locales');
157
+ const hasLocales = fs.existsSync(localesDirectory) && fs.statSync(localesDirectory).isDirectory();
158
+ const sourceCode = manifest.default_locale;
159
+ if (sourceCode === undefined) {
160
+ errors.push(hasLocales
161
+ ? 'manifest.json: default_locale is required when _locales/ exists [default-locale]'
162
+ : 'manifest.json: no default_locale and no _locales/ directory, so there is nothing to check [default-locale]');
163
+ return { locales: [], errors };
164
+ }
165
+ // Chrome ignores a locale outside the supported list, so a catalog under one is never shown to anybody.
166
+ if (typeof sourceCode !== 'string' || !isExtensionLocale(sourceCode)) {
167
+ errors.push(`manifest.json: default_locale ${JSON.stringify(sourceCode)} is not a supported extension locale (codes look like en, pt_BR, es_419) [default-locale]`);
168
+ return { locales: [], errors };
169
+ }
170
+ const sourceRaw = hasLocales ? loadCatalog(root, sourceCode, errors) : 'missing';
171
+ if (sourceRaw === 'missing') {
172
+ errors.push(`manifest.json: default_locale is "${sourceCode}" but _locales/${sourceCode}/messages.json does not exist [default-locale]`);
173
+ return { locales: [], errors };
174
+ }
175
+ if (!sourceRaw)
176
+ return { locales: [], errors };
177
+ const config = readConfig(root);
178
+ if (config.sourceLocale && config.sourceLocale !== sourceCode)
179
+ errors.push(`localization.json: sourceLocale ${JSON.stringify(config.sourceLocale)} differs from manifest default_locale "${sourceCode}" [default-locale]`);
180
+ const protectedTerms = [...config.protectedTerms, ...(protect?.split(',').filter(Boolean) ?? [])];
181
+ const present = fs
182
+ .readdirSync(localesDirectory, { withFileTypes: true })
183
+ .filter((entry) => (entry.isDirectory() || entry.isSymbolicLink()) && !entry.name.startsWith('.'))
184
+ .map((entry) => entry.name);
185
+ const locales = [...new Set([...present, ...config.targetLocales])]
186
+ .filter((code) => code !== sourceCode)
187
+ .sort();
188
+ const sourceErrors = errors.length;
189
+ const source = inspect(sourceCode, sourceRaw, errors);
190
+ const sourceClean = errors.length === sourceErrors;
191
+ for (const code of locales) {
192
+ if (!isExtensionLocale(code)) {
193
+ errors.push(`${code}: not a supported extension locale, so Chrome ignores it (codes look like en, pt_BR, es_419) [unsupported-locale]`);
194
+ continue;
195
+ }
196
+ const raw = loadCatalog(root, code, errors);
197
+ if (raw === 'missing')
198
+ errors.push(`${code}: _locales/${code}/messages.json not found [missing-catalog]`);
199
+ if (typeof raw !== 'object')
200
+ continue;
201
+ const before = errors.length;
202
+ compare(code, sourceCode, source, inspect(code, raw, errors), protectedTerms, errors);
203
+ // Same gate as review mode, which also runs it only on a locale that has no other error: it reads the
204
+ // manifest and the two catalogs, never review metadata.
205
+ if (sourceClean && errors.length === before)
206
+ for (const error of new Set(listingGate(manifest, sourceCode, sourceRaw, raw)))
207
+ errors.push(`${code}: ${error} [listing-risk]`);
208
+ }
209
+ return { locales, errors };
210
+ }
211
+ /**
212
+ * `localize check`. The review gate needs `.extenshi-localization.json`, which only `localize apply`
213
+ * writes; a project with its own translation generator has none, so every key would be "unreviewed".
214
+ * Without it, check what is verifiable and say so.
215
+ */
216
+ export function runLocalizationCheck(directory, options = {}) {
217
+ if (options.parityOnly)
218
+ return { mode: 'parity-only', ...checkLocalizationParity(directory, options.protect) };
219
+ if (!fs.existsSync(safePath(fs.realpathSync(directory), STATE)))
220
+ return {
221
+ mode: 'parity-only',
222
+ ...checkLocalizationParity(directory, options.protect),
223
+ note: `No ${STATE}: translations are not tracked by localize prepare/apply, so the review gate was skipped and only key, placeholder, catalog and listing-risk rules ran. Pass --parity-only to ask for this explicitly.`,
224
+ };
225
+ return { mode: 'review', ...checkLocalization(directory, options.protect) };
226
+ }
227
+ //# sourceMappingURL=localize-parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localize-parity.js","sourceRoot":"","sources":["../src/localize-parity.ts"],"names":[],"mappings":"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"}