Ctrl K
ComunidadGuías…

apps/web/scripts/compress-assets.test.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// @vitest-environment node
import { existsSync } from "node:fs";
import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import path from "node:path";
import { brotliDecompressSync, gunzipSync } from "node:zlib";

import { afterEach, beforeEach, describe, expect, it } from "vitest";

import { compressAssets } from "./compress-assets.mjs";

describe("compressAssets", () => {
  let assets;

  beforeEach(async () => {
    assets = await mkdtemp(path.join(tmpdir(), "weir-assets-"));
  });

  afterEach(async () => {
    await rm(assets, { recursive: true, force: true });
  });

  it("writes Brotli and gzip copies that decompress to the built file", async () => {
    const script = "export const words = '" + "weir ".repeat(2000) + "';\n";
    await writeFile(path.join(assets, "index-abc123.js"), script);

    await compressAssets(assets);

    const brotli = await readFile(path.join(assets, "index-abc123.js.br"));
    const gzip = await readFile(path.join(assets, "index-abc123.js.gz"));
    expect(brotliDecompressSync(brotli).toString()).toBe(script);
    expect(gunzipSync(gzip).toString()).toBe(script);
  });

  it("compresses assets in nested folders", async () => {
    await mkdir(path.join(assets, "icons"));
    await writeFile(
      path.join(assets, "icons", "logo.svg"),
      "<svg>" + "<g/>".repeat(500) + "</svg>",
    );

    await compressAssets(assets);

    expect(existsSync(path.join(assets, "icons", "logo.svg.br"))).toBe(true);
  });

  it("leaves already-compressed formats alone", async () => {
    await writeFile(path.join(assets, "outfit.woff2"), Buffer.alloc(4096, 7));

    await compressAssets(assets);

    expect(existsSync(path.join(assets, "outfit.woff2.br"))).toBe(false);
    expect(existsSync(path.join(assets, "outfit.woff2.gz"))).toBe(false);
  });

  it("writes no copy that would be larger than the file", async () => {
    await writeFile(path.join(assets, "tiny.css"), "a{}");

    await compressAssets(assets);

    expect(existsSync(path.join(assets, "tiny.css.gz"))).toBe(false);
  });
});