@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.
- package/README.md +1 -1
- package/dist/amo-source.d.ts +88 -17
- package/dist/amo-source.d.ts.map +1 -1
- package/dist/amo-source.js +442 -116
- package/dist/amo-source.js.map +1 -1
- package/dist/amowebstore-md.d.ts +26 -0
- package/dist/amowebstore-md.d.ts.map +1 -1
- package/dist/amowebstore-md.js +32 -3
- package/dist/amowebstore-md.js.map +1 -1
- package/dist/auto-update.d.ts +46 -3
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +94 -19
- package/dist/auto-update.js.map +1 -1
- package/dist/chromewebstore-md.d.ts +7 -0
- package/dist/chromewebstore-md.d.ts.map +1 -1
- package/dist/chromewebstore-md.js +20 -3
- package/dist/chromewebstore-md.js.map +1 -1
- package/dist/cli.js +73 -20
- package/dist/cli.js.map +1 -1
- package/dist/compliance-review.d.ts +5 -1
- package/dist/compliance-review.d.ts.map +1 -1
- package/dist/compliance-review.js +10 -5
- package/dist/compliance-review.js.map +1 -1
- package/dist/cws-policies.d.ts.map +1 -1
- package/dist/cws-policies.js +4 -0
- package/dist/cws-policies.js.map +1 -1
- package/dist/edgewebstore-md.d.ts +14 -0
- package/dist/edgewebstore-md.d.ts.map +1 -1
- package/dist/edgewebstore-md.js +20 -5
- package/dist/edgewebstore-md.js.map +1 -1
- package/dist/evidence-ingest.d.ts +67 -5
- package/dist/evidence-ingest.d.ts.map +1 -1
- package/dist/evidence-ingest.js +146 -21
- package/dist/evidence-ingest.js.map +1 -1
- package/dist/generate-listing.d.ts +18 -6
- package/dist/generate-listing.d.ts.map +1 -1
- package/dist/generate-listing.js +62 -19
- package/dist/generate-listing.js.map +1 -1
- package/dist/json-ld.d.ts +43 -5
- package/dist/json-ld.d.ts.map +1 -1
- package/dist/json-ld.js +53 -1
- package/dist/json-ld.js.map +1 -1
- package/dist/landing-sections.d.ts +21 -3
- package/dist/landing-sections.d.ts.map +1 -1
- package/dist/landing-sections.js +63 -17
- package/dist/landing-sections.js.map +1 -1
- package/dist/listing-checks.d.ts +15 -9
- package/dist/listing-checks.d.ts.map +1 -1
- package/dist/listing-checks.js +54 -46
- package/dist/listing-checks.js.map +1 -1
- package/dist/listing-data-flows.d.ts +140 -0
- package/dist/listing-data-flows.d.ts.map +1 -0
- package/dist/listing-data-flows.js +454 -0
- package/dist/listing-data-flows.js.map +1 -0
- package/dist/listing.d.ts +48 -0
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +201 -23
- package/dist/listing.js.map +1 -1
- package/dist/localize-parity.d.ts +26 -0
- package/dist/localize-parity.d.ts.map +1 -0
- package/dist/localize-parity.js +227 -0
- package/dist/localize-parity.js.map +1 -0
- package/dist/localize.d.ts +6 -0
- package/dist/localize.d.ts.map +1 -1
- package/dist/localize.js +4 -4
- package/dist/localize.js.map +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +1 -2
- package/dist/media.js.map +1 -1
- package/dist/package.d.ts +13 -0
- package/dist/package.d.ts.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/dist/page.d.ts +16 -0
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +49 -4
- package/dist/page.js.map +1 -1
- package/dist/permission-justifications.d.ts +19 -1
- package/dist/permission-justifications.d.ts.map +1 -1
- package/dist/permission-justifications.js +129 -0
- package/dist/permission-justifications.js.map +1 -1
- package/dist/png.d.ts +40 -0
- package/dist/png.d.ts.map +1 -0
- package/dist/png.js +266 -0
- package/dist/png.js.map +1 -0
- package/dist/review-checks.d.ts +54 -13
- package/dist/review-checks.d.ts.map +1 -1
- package/dist/review-checks.js +367 -56
- package/dist/review-checks.js.map +1 -1
- package/dist/review-risk.d.ts +8 -3
- package/dist/review-risk.d.ts.map +1 -1
- package/dist/review-risk.js +14 -4
- package/dist/review-risk.js.map +1 -1
- package/dist/review-stores.d.ts +63 -0
- package/dist/review-stores.d.ts.map +1 -0
- package/dist/review-stores.js +92 -0
- package/dist/review-stores.js.map +1 -0
- package/dist/screenshots-scenes.d.ts +13 -0
- package/dist/screenshots-scenes.d.ts.map +1 -1
- package/dist/screenshots-scenes.js +20 -2
- package/dist/screenshots-scenes.js.map +1 -1
- package/dist/screenshots.d.ts +6 -4
- package/dist/screenshots.d.ts.map +1 -1
- package/dist/screenshots.js +31 -11
- package/dist/screenshots.js.map +1 -1
- package/dist/smoke.d.ts +54 -6
- package/dist/smoke.d.ts.map +1 -1
- package/dist/smoke.js +302 -26
- package/dist/smoke.js.map +1 -1
- package/dist/store-assets.d.ts +20 -3
- package/dist/store-assets.d.ts.map +1 -1
- package/dist/store-assets.js +17 -7
- package/dist/store-assets.js.map +1 -1
- 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
|
-
|
|
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
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
|
236
|
-
byLocale.
|
|
237
|
-
|
|
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,
|
|
246
|
-
// package's answer stands.
|
|
247
|
-
const preferred = draft.appliesToAllLocales ? artifact.defaultLocale : draft.defaultLocale;
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
-
//
|
|
310
|
-
|
|
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
|
-
|
|
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
|
//
|
package/dist/listing.js.map
CHANGED
|
@@ -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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"}
|