@extenshi/cli 0.23.1 → 0.24.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 (49) hide show
  1. package/dist/amo-source.d.ts +88 -17
  2. package/dist/amo-source.d.ts.map +1 -1
  3. package/dist/amo-source.js +437 -116
  4. package/dist/amo-source.js.map +1 -1
  5. package/dist/cli.js +42 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/compliance-review.d.ts +5 -1
  8. package/dist/compliance-review.d.ts.map +1 -1
  9. package/dist/compliance-review.js +10 -5
  10. package/dist/compliance-review.js.map +1 -1
  11. package/dist/cws-policies.d.ts.map +1 -1
  12. package/dist/cws-policies.js +4 -0
  13. package/dist/cws-policies.js.map +1 -1
  14. package/dist/listing-checks.d.ts +15 -9
  15. package/dist/listing-checks.d.ts.map +1 -1
  16. package/dist/listing-checks.js +54 -46
  17. package/dist/listing-checks.js.map +1 -1
  18. package/dist/listing.d.ts +48 -0
  19. package/dist/listing.d.ts.map +1 -1
  20. package/dist/listing.js +201 -23
  21. package/dist/listing.js.map +1 -1
  22. package/dist/png.d.ts +40 -0
  23. package/dist/png.d.ts.map +1 -0
  24. package/dist/png.js +208 -0
  25. package/dist/png.js.map +1 -0
  26. package/dist/review-checks.d.ts +48 -13
  27. package/dist/review-checks.d.ts.map +1 -1
  28. package/dist/review-checks.js +364 -56
  29. package/dist/review-checks.js.map +1 -1
  30. package/dist/review-risk.d.ts +8 -3
  31. package/dist/review-risk.d.ts.map +1 -1
  32. package/dist/review-risk.js +14 -4
  33. package/dist/review-risk.js.map +1 -1
  34. package/dist/review-stores.d.ts +63 -0
  35. package/dist/review-stores.d.ts.map +1 -0
  36. package/dist/review-stores.js +92 -0
  37. package/dist/review-stores.js.map +1 -0
  38. package/dist/screenshots-scenes.d.ts +13 -0
  39. package/dist/screenshots-scenes.d.ts.map +1 -1
  40. package/dist/screenshots-scenes.js +20 -2
  41. package/dist/screenshots-scenes.js.map +1 -1
  42. package/dist/screenshots.d.ts +6 -4
  43. package/dist/screenshots.d.ts.map +1 -1
  44. package/dist/screenshots.js +31 -10
  45. package/dist/screenshots.js.map +1 -1
  46. package/dist/store-assets.d.ts.map +1 -1
  47. package/dist/store-assets.js +7 -3
  48. package/dist/store-assets.js.map +1 -1
  49. 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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"}
package/dist/png.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * PNG output for store artwork and screenshots: 24-bit RGB when every pixel is
3
+ * opaque, RGBA otherwise.
4
+ *
5
+ * resvg and Chromium both write RGBA (colour type 6) even for a fully opaque
6
+ * image, and the Chrome Web Store asks for screenshots and promo tiles as
7
+ * 24-bit PNGs with no alpha. Re-encoding is lossless — the pixels are the same,
8
+ * only the unused alpha byte goes.
9
+ *
10
+ * Deliberately small: 8-bit, non-interlaced, colour types 2 and 6 — exactly
11
+ * what resvg and Chromium produce. Anything else passes through untouched.
12
+ */
13
+ /**
14
+ * Encode raw 8-bit pixels; each row gets the filter with the smallest sum of
15
+ * absolute values. `keep` are whole chunks (colour space, pixel density) copied
16
+ * from a source PNG so the re-encoded image renders the same.
17
+ */
18
+ export declare function encodePng(data: Uint8Array, width: number, height: number, channels: 3 | 4, keep?: readonly Buffer[]): Buffer;
19
+ export interface DecodedPng {
20
+ width: number;
21
+ height: number;
22
+ /** 3 for RGB, 4 for RGBA. */
23
+ channels: 3 | 4;
24
+ data: Uint8Array;
25
+ /** Colour-space and density chunks, verbatim, for a faithful re-encode. */
26
+ keep: Buffer[];
27
+ }
28
+ /** Decode an 8-bit, non-interlaced RGB or RGBA PNG; null for anything else. */
29
+ export declare function decodePng(png: Uint8Array): DecodedPng | null;
30
+ /** RGBA pixels → an RGB PNG when every pixel is opaque, null when any is not. */
31
+ export declare function rgbPngIfOpaque(rgba: Uint8Array, width: number, height: number, keep?: readonly Buffer[]): Buffer | null;
32
+ /**
33
+ * The same image as a 24-bit PNG when it is fully opaque; the input unchanged
34
+ * when it has transparency, is already RGB, or is a format this module does
35
+ * not read.
36
+ */
37
+ export declare function opaquePngAsRgb(png: Uint8Array): Buffer;
38
+ /** The PNG colour type from IHDR (2 = RGB, 6 = RGBA). */
39
+ export declare function pngColorType(png: Uint8Array): number;
40
+ //# sourceMappingURL=png.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA0CH;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,GAAG,CAAC,EACf,IAAI,GAAE,SAAS,MAAM,EAAO,GAC1B,MAAM,CAmDR;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,6BAA6B;IAC7B,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,EAAE,CAAA;CACd;AAKD,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CA4D5D;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAC7B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,SAAS,MAAM,EAAO,GAC1B,MAAM,GAAG,IAAI,CASf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAKtD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEpD"}
package/dist/png.js ADDED
@@ -0,0 +1,208 @@
1
+ /**
2
+ * PNG output for store artwork and screenshots: 24-bit RGB when every pixel is
3
+ * opaque, RGBA otherwise.
4
+ *
5
+ * resvg and Chromium both write RGBA (colour type 6) even for a fully opaque
6
+ * image, and the Chrome Web Store asks for screenshots and promo tiles as
7
+ * 24-bit PNGs with no alpha. Re-encoding is lossless — the pixels are the same,
8
+ * only the unused alpha byte goes.
9
+ *
10
+ * Deliberately small: 8-bit, non-interlaced, colour types 2 and 6 — exactly
11
+ * what resvg and Chromium produce. Anything else passes through untouched.
12
+ */
13
+ import { deflateSync, inflateSync } from 'node:zlib';
14
+ const SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
15
+ const COLOR_RGB = 2;
16
+ const COLOR_RGBA = 6;
17
+ const CRC_TABLE = (() => {
18
+ const table = new Uint32Array(256);
19
+ for (let n = 0; n < 256; n++) {
20
+ let c = n;
21
+ for (let k = 0; k < 8; k++)
22
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
23
+ table[n] = c >>> 0;
24
+ }
25
+ return table;
26
+ })();
27
+ // zlib.crc32 needs Node 20.15/22.2; the CLI supports Node 20.0.
28
+ function crc32(buf) {
29
+ let c = 0xffffffff;
30
+ for (const byte of buf)
31
+ c = CRC_TABLE[(c ^ byte) & 0xff] ^ (c >>> 8);
32
+ return (c ^ 0xffffffff) >>> 0;
33
+ }
34
+ function chunk(type, data) {
35
+ const head = Buffer.alloc(8);
36
+ head.writeUInt32BE(data.length, 0);
37
+ head.write(type, 4, 'ascii');
38
+ const crc = Buffer.alloc(4);
39
+ crc.writeUInt32BE(crc32(Buffer.concat([head.subarray(4), data])), 0);
40
+ return Buffer.concat([head, data, crc]);
41
+ }
42
+ function paeth(a, b, c) {
43
+ const p = a + b - c;
44
+ const pa = Math.abs(p - a);
45
+ const pb = Math.abs(p - b);
46
+ const pc = Math.abs(p - c);
47
+ return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
48
+ }
49
+ /**
50
+ * Encode raw 8-bit pixels; each row gets the filter with the smallest sum of
51
+ * absolute values. `keep` are whole chunks (colour space, pixel density) copied
52
+ * from a source PNG so the re-encoded image renders the same.
53
+ */
54
+ export function encodePng(data, width, height, channels, keep = []) {
55
+ const stride = width * channels;
56
+ const out = Buffer.alloc((stride + 1) * height);
57
+ const candidate = Buffer.alloc(stride);
58
+ const best = Buffer.alloc(stride);
59
+ for (let y = 0; y < height; y++) {
60
+ const row = y * stride;
61
+ let bestType = 0;
62
+ let bestScore = Number.POSITIVE_INFINITY;
63
+ for (let type = 0; type <= 4; type++) {
64
+ let score = 0;
65
+ for (let i = 0; i < stride; i++) {
66
+ const x = data[row + i];
67
+ const a = i >= channels ? data[row + i - channels] : 0;
68
+ const b = y > 0 ? data[row - stride + i] : 0;
69
+ const c = y > 0 && i >= channels ? data[row - stride + i - channels] : 0;
70
+ const v = type === 0
71
+ ? x
72
+ : type === 1
73
+ ? x - a
74
+ : type === 2
75
+ ? x - b
76
+ : type === 3
77
+ ? x - ((a + b) >> 1)
78
+ : x - paeth(a, b, c);
79
+ const byte = v & 0xff;
80
+ candidate[i] = byte;
81
+ score += byte < 128 ? byte : 256 - byte;
82
+ }
83
+ if (score < bestScore) {
84
+ bestScore = score;
85
+ bestType = type;
86
+ candidate.copy(best);
87
+ }
88
+ }
89
+ out[y * (stride + 1)] = bestType;
90
+ best.copy(out, y * (stride + 1) + 1);
91
+ }
92
+ const ihdr = Buffer.alloc(13);
93
+ ihdr.writeUInt32BE(width, 0);
94
+ ihdr.writeUInt32BE(height, 4);
95
+ ihdr[8] = 8;
96
+ ihdr[9] = channels === 3 ? COLOR_RGB : COLOR_RGBA;
97
+ return Buffer.concat([
98
+ SIGNATURE,
99
+ chunk('IHDR', ihdr),
100
+ ...keep,
101
+ chunk('IDAT', deflateSync(out, { level: 9 })),
102
+ chunk('IEND', Buffer.alloc(0)),
103
+ ]);
104
+ }
105
+ /** Ancillary chunks that change how the pixels are displayed — carried over on re-encode. */
106
+ const KEPT_CHUNKS = new Set(['sRGB', 'iCCP', 'gAMA', 'cHRM', 'pHYs']);
107
+ /** Decode an 8-bit, non-interlaced RGB or RGBA PNG; null for anything else. */
108
+ export function decodePng(png) {
109
+ const b = Buffer.from(png.buffer, png.byteOffset, png.byteLength);
110
+ if (b.length < 33 || !b.subarray(0, 8).equals(SIGNATURE))
111
+ return null;
112
+ let width = 0;
113
+ let height = 0;
114
+ let channels = 0;
115
+ const idat = [];
116
+ const keep = [];
117
+ for (let at = 8; at + 8 <= b.length;) {
118
+ const length = b.readUInt32BE(at);
119
+ const type = b.toString('ascii', at + 4, at + 8);
120
+ const data = b.subarray(at + 8, at + 8 + length);
121
+ if (type === 'IHDR') {
122
+ // A truncated IHDR would make the reads below throw; null keeps the pass-through contract.
123
+ if (data.length < 13)
124
+ return null;
125
+ width = data.readUInt32BE(0);
126
+ height = data.readUInt32BE(4);
127
+ const [depth, color, , , interlace] = data.subarray(8, 13);
128
+ if (depth !== 8 || interlace !== 0 || (color !== COLOR_RGB && color !== COLOR_RGBA))
129
+ return null;
130
+ channels = color === COLOR_RGB ? 3 : 4;
131
+ }
132
+ else if (type === 'IDAT')
133
+ idat.push(data);
134
+ else if (type === 'IEND')
135
+ break;
136
+ else if (KEPT_CHUNKS.has(type))
137
+ keep.push(Buffer.from(b.subarray(at, at + 12 + length)));
138
+ at += 12 + length;
139
+ }
140
+ if (!channels || !width || !height || idat.length === 0)
141
+ return null;
142
+ let raw;
143
+ try {
144
+ raw = inflateSync(Buffer.concat(idat));
145
+ }
146
+ catch {
147
+ // Truncated or corrupt pixel data: not a PNG this module can read, so the
148
+ // caller passes the original through instead of failing the run.
149
+ return null;
150
+ }
151
+ const stride = width * channels;
152
+ if (raw.length < (stride + 1) * height)
153
+ return null;
154
+ const pixels = new Uint8Array(stride * height);
155
+ for (let y = 0; y < height; y++) {
156
+ const type = raw[y * (stride + 1)];
157
+ if (type > 4)
158
+ return null;
159
+ const src = y * (stride + 1) + 1;
160
+ const row = y * stride;
161
+ for (let i = 0; i < stride; i++) {
162
+ const a = i >= channels ? pixels[row + i - channels] : 0;
163
+ const up = y > 0 ? pixels[row - stride + i] : 0;
164
+ const c = y > 0 && i >= channels ? pixels[row - stride + i - channels] : 0;
165
+ const x = raw[src + i];
166
+ pixels[row + i] =
167
+ (type === 0
168
+ ? x
169
+ : type === 1
170
+ ? x + a
171
+ : type === 2
172
+ ? x + up
173
+ : type === 3
174
+ ? x + ((a + up) >> 1)
175
+ : x + paeth(a, up, c)) & 0xff;
176
+ }
177
+ }
178
+ return { width, height, channels, data: pixels, keep };
179
+ }
180
+ /** RGBA pixels → an RGB PNG when every pixel is opaque, null when any is not. */
181
+ export function rgbPngIfOpaque(rgba, width, height, keep = []) {
182
+ const rgb = new Uint8Array(width * height * 3);
183
+ for (let p = 0, q = 0; p < rgba.length; p += 4, q += 3) {
184
+ if (rgba[p + 3] !== 255)
185
+ return null;
186
+ rgb[q] = rgba[p];
187
+ rgb[q + 1] = rgba[p + 1];
188
+ rgb[q + 2] = rgba[p + 2];
189
+ }
190
+ return encodePng(rgb, width, height, 3, keep);
191
+ }
192
+ /**
193
+ * The same image as a 24-bit PNG when it is fully opaque; the input unchanged
194
+ * when it has transparency, is already RGB, or is a format this module does
195
+ * not read.
196
+ */
197
+ export function opaquePngAsRgb(png) {
198
+ const decoded = decodePng(png);
199
+ const original = Buffer.from(png.buffer, png.byteOffset, png.byteLength);
200
+ if (!decoded || decoded.channels === 3)
201
+ return original;
202
+ return rgbPngIfOpaque(decoded.data, decoded.width, decoded.height, decoded.keep) ?? original;
203
+ }
204
+ /** The PNG colour type from IHDR (2 = RGB, 6 = RGBA). */
205
+ export function pngColorType(png) {
206
+ return Buffer.from(png.buffer, png.byteOffset, png.byteLength)[25];
207
+ }
208
+ //# sourceMappingURL=png.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"png.js","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"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"}