[
  {
    "path": ".dockerignore",
    "content": "*\n!Dockerfile\n!dist\n!dist/**\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [emazzotta]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: \"https://www.paypal.me/emanuelemazzotta\"\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\nThanks for reporting an issue for lighthouse-badges, please review the tasks below before submitting the issue.\n\n### Steps to Reproduce\n\n1. TODO\n2. TODO\n3. TODO\n\n### Expected Behaviour\n\nDescribe what should happen\n\n### Actual Behaviour\n\nDescribe what happens instead\n\n### Stacktrace\n\nTODO\n\n### Environment Information\n\n- **Operating System**: TODO\n- **Lighthouse-Badges Version:** TODO\n- **Node Version:** TODO\n\n### Additional Information \n\n(Please tick where applicable)\n- [ ] The issue persists with the npm version\n- [ ] The issue persists with the docker version\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n### Is your feature request related to a problem? Please describe.\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n### Describe the solution you'd like\nA clear and concise description of what you want to happen.\n\n### Describe alternatives you've considered\nA clear and concise description of any alternative solutions or features you've considered.\n\n### Additional context\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: bun\n  directory: \"/\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 10\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Build, Test & Deploy\n\non:\n  push:\n    branches:\n      - master\n  pull_request:\n\nenv:\n  TAG_PREFIX: emazzotta/lighthouse-badges\n  BUN_VERSION: 1.3.12\n\npermissions:\n  id-token: write\n  contents: read\n  packages: write\n\njobs:\n  build-test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Setup Bun\n        uses: oven-sh/setup-bun@v2\n        with:\n          bun-version: ${{ env.BUN_VERSION }}\n\n      - name: Cache bun dependencies\n        uses: actions/cache@v5\n        with:\n          path: ~/.bun/install/cache\n          key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-bun-\n\n      - name: Install, Lint, Build\n        run: |\n          bun install --frozen-lockfile\n          bun run lint\n          bun run build\n\n      - name: Unit & Integration Test\n        run: bun run test:coverage\n\n      - name: Upload Coverage to Codecov\n        uses: codecov/codecov-action@v6\n        with:\n          files: coverage/lcov.info\n          token: ${{ secrets.CODECOV_TOKEN }}\n          fail_ci_if_error: false\n\n      - name: System Test\n        run: bun run system-test:light-run\n\n      - name: Upload dist artifact\n        uses: actions/upload-artifact@v7\n        with:\n          name: dist\n          path: dist/\n          retention-days: 1\n\n  docker-build-test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Setup Bun\n        uses: oven-sh/setup-bun@v2\n        with:\n          bun-version: ${{ env.BUN_VERSION }}\n\n      - name: Cache bun dependencies\n        uses: actions/cache@v5\n        with:\n          path: ~/.bun/install/cache\n          key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-bun-\n\n      - name: Install and Build\n        run: |\n          bun install --frozen-lockfile\n          bun run build\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v4\n        with:\n          version: latest\n\n      - name: Docker Build (amd64 for testing)\n        uses: docker/build-push-action@v7\n        with:\n          context: .\n          file: ./Dockerfile\n          tags: ${{ env.TAG_PREFIX }}:latest\n          cache-from: type=gha,scope=linux/amd64\n          cache-to: type=gha,mode=max,scope=linux/amd64\n          load: true\n          platforms: linux/amd64\n          provenance: false\n\n      - name: Docker System Test\n        run: bun run docker:system-test:run\n\n  docker-deploy:\n    runs-on: ubuntu-latest\n    needs: [build-test, docker-build-test]\n    if: github.ref == 'refs/heads/master'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Download dist artifact\n        uses: actions/download-artifact@v8\n        with:\n          name: dist\n          path: dist/\n\n      - name: Set up QEMU\n        uses: docker/setup-qemu-action@v4\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v4\n        with:\n          version: latest\n\n      - name: Login to DockerHub\n        uses: docker/login-action@v4\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Resolve image tags\n        run: |\n          echo \"GIT_SHA=$(git rev-parse --short HEAD)\" >> $GITHUB_ENV\n          echo \"PACKAGE_VERSION=$(jq -r '.version' package.json)\" >> $GITHUB_ENV\n\n      - name: Build and push multi-arch image\n        uses: docker/build-push-action@v7\n        with:\n          context: .\n          file: ./Dockerfile\n          platforms: linux/amd64,linux/arm64\n          push: true\n          tags: |\n            ${{ env.TAG_PREFIX }}:latest\n            ${{ env.TAG_PREFIX }}:${{ env.PACKAGE_VERSION }}\n            ${{ env.TAG_PREFIX }}:${{ env.GIT_SHA }}\n          cache-from: |\n            type=gha,scope=linux/amd64\n            type=gha,scope=linux/arm64\n          cache-to: |\n            type=gha,mode=max,scope=linux/amd64\n            type=gha,mode=max,scope=linux/arm64\n          provenance: false\n          sbom: false\n\n  npm-publish:\n    runs-on: ubuntu-latest\n    needs: [build-test, docker-build-test]\n    if: github.ref == 'refs/heads/master'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Setup Bun\n        uses: oven-sh/setup-bun@v2\n        with:\n          bun-version: ${{ env.BUN_VERSION }}\n\n      - name: Cache bun dependencies\n        uses: actions/cache@v5\n        with:\n          path: ~/.bun/install/cache\n          key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-bun-\n\n      - name: Install\n        run: bun install --frozen-lockfile\n\n      - name: Setup Node.js for GitHub Packages\n        uses: actions/setup-node@v6\n        with:\n          node-version: '24'\n          registry-url: 'https://npm.pkg.github.com'\n\n      - name: Publish to GitHub Packages\n        run: scripts/util.sh publish-if-new \"GitHub Packages\"\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Rename package for npm.js registry\n        run: |\n          jq '.name = \"lighthouse-badges\"' package.json > package.json.tmp\n          mv package.json.tmp package.json\n\n      - name: Setup Node.js for npm.js\n        uses: actions/setup-node@v6\n        with:\n          node-version: '24'\n          registry-url: 'https://registry.npmjs.org'\n\n      - name: Publish to npm.js Registry\n        run: scripts/util.sh publish-if-new \"npm.js\"\n"
  },
  {
    "path": ".gitignore",
    "content": "$RECYCLE.BIN\n*$py.class\n*.DS_Store*\n*.a\n*.app\n*.bak\n*.cab\n*.class\n*.com\n*.d\n*.dSYM/\n*.dat\n*.db\n*.dmg\n*.dylib\n*.ear\n*.egg\n*.egg-info/\n*.elf\n*.exe\n*.gch\n*.gz\n*.hex\n*.hmap\n*.i*86\n*.ipa\n*.iws\n*.ko\n*.la\n*.launch\n*.lib\n*.lnk\n*.lo\n*.log\n*.log*\n*.log.*\n*.manifest\n*.mo\n*.msi\n*.msm\n*.msp\n*.o\n*.obj\n*.out\n*.p12\n*.pbxuser\n*.pch\n*.pid\n*.pot\n*.py[cod]\n*.pyc\n*.pydevproject\n*.rar\n*.sass-cache\n*.seed\n*.so\n*.so.*\n*.spec\n*.sql\n*.su\n*.sublime*\n*.swp\n*.tar\n*.tmp\n*.war\n*.x86_64\n*.xccheckout\n*.xcuserstate\n*node_modules*\n*~.nib\n.AppleDB\n.AppleDesktop\n.AppleDouble\n.DS_Store\n.DocumentRevisions-V100\n.LSOverride\n.Python\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n._*\n.apdisk\n.balder_profile\n.buildpath\n.cache\n.classpath\n.coverage\n.cproject\n.eggs\n.env\n.externalToolBuilders\n.factorypath\n.fseventsd\n.gradle\n.grunt\n.hypothesis\n*.iml\n.idea\n.idea_modules\n.installed.cfg\n.ipynb_checkpoints\n.loadpath\n.lock-wscript\n.metadata\n.mtj.tmp\n.node_repl_history\n.npm\n.nyc_output\n.project\n.python-version\n.recommenders\n.sass-cache\n.settings\n.springBeans\n.target\n.tern-project\n.texlipse\n.tox\n.~lock.*\nCMakeCache.txt\nCMakeFiles\nCMakeScripts\nCTestTestfile.cmake\nCUnit\nDesktop.ini\nThumbs.db\n__pycache__\nbackup\ncoverage\ncoverage.xml\ndata\ndist\neggs\ngen\nlib-cov\nlib64\nlogs3\nnode_modules\nnohup.out\nnosetests.xml\nnpm-debug.log*\nout\ntarget\ntestlib\ntmp\nvar\nvenv\nresults\n/*.svg\n/*.html\n__test_output__"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, gender identity and expression, level of experience,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\nadvances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at hello@mazzotta.me. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at [https://contributor-covenant.org/version/1/4][version]\n\n[homepage]: https://contributor-covenant.org\n[version]: https://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Guide for contributors\n\n* **Would you like to ask a question, discuss feature ideas or noticed a (potential) bug?** Please open an issue here on github.\n* **Would you like to contribute code?** Your help is very welcome! This doc covers how to become a contributor and submit code to the project.\n\n## Submitting pull requests\n\nFirst of all, thanks very much for spending the time to improve the code! 🎉\n\nPlease don't submit a pull request until the code is completely ready.\n\nIf you're planning to change lots of code, it would be preferable if you submitted several smaller pull requests for independent changes, instead of one big batch with everything in it. Smaller changes are easier to validate and discuss, and it's easier to catch unintended changes with those. \n\nPlease make sure your pull request includes only the changes necessary for your code. Don't submit the lines that have only formatting changes, unless this is required by the linter. Don't submit files that are not important for your particular change.\n\n### Before submitting the request\n\nIn order to make it easier for us to develop together and maintain the code easier, here's what would be ideal:\n\n* Make sure the code is passing the style guide checks.\n* Please supply automated tests for any new functionality you are adding. With these in place, people who modify the same code in the future can easily ensure that they've not broken something that is important to you. \n* If you are adding or removing command line options, please change the documentation.\n* Please run all tests to ensure everything still works as expected.\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM oven/bun:alpine\n\nRUN apk --update --no-cache add chromium && \\\n    mkdir -p /home/lighthouse\n\nARG BUILD_DATE\nARG VCS_REF\nARG VERSION\n\nLABEL maintainer=\"hello@mazzotta.me\" \\\n    org.label-schema.build-date=$BUILD_DATE \\\n    org.label-schema.name=\"Lighthouse Badges\" \\\n    org.label-schema.description=\"Generate gh-badges (shields.io) based on lighthouse performance.\" \\\n    org.label-schema.url=\"https://github.com/emazzotta/lighthouse-badges\" \\\n    org.label-schema.vcs-ref=$VCS_REF \\\n    org.label-schema.vcs-url=\"https://github.com/emazzotta/lighthouse-badges\" \\\n    org.label-schema.vendor=\"Emanuele Mazzotta\" \\\n    org.label-schema.version=$VERSION \\\n    org.label-schema.schema-version=\"1.0\"\n\nWORKDIR /home/lighthouse\n\nCOPY dist/package.json dist/bun.lock ./\nRUN bun install --frozen-lockfile --production && \\\n    rm -rf /root/.bun\n\nCOPY dist .\n\nRUN BIN_DIR=\"/usr/local/bin\" && \\\n    mkdir -p \"$BIN_DIR\" && \\\n    ln -sf \"/home/lighthouse/src/index.js\" \"$BIN_DIR/lighthouse-badges\" && \\\n    chmod +x \"$BIN_DIR/lighthouse-badges\"\n\nENV CHROME_PATH=/usr/bin/chromium-browser\n\nRUN addgroup -S chrome && adduser -S -g chrome chrome \\\n    && mkdir -p /home/chrome/reports && chown -R chrome:chrome /home/chrome\n\nVOLUME /home/chrome/reports\nWORKDIR /home/chrome/reports\n\nUSER chrome\n"
  },
  {
    "path": "LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2024 Emanuele Mazzotta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "PULL_REQUEST_TEMPLATE.md",
    "content": "## Short Description\n\n### Major Changes\n\n"
  },
  {
    "path": "README.md",
    "content": "[![Build Status](https://github.com/emazzotta/lighthouse-badges/actions/workflows/build.yml/badge.svg)](https://github.com/emazzotta/lighthouse-badges/actions/workflows/build.yml)\n[![NPM downloads](https://img.shields.io/npm/dt/lighthouse-badges?color=blue)](https://www.npmjs.org/package/lighthouse-badges)\n[![NPM version](https://img.shields.io/npm/v/lighthouse-badges.svg)](https://www.npmjs.org/package/lighthouse-badges)\n[![License](https://img.shields.io/:license-mit-blue.svg?style=flat)](https://emanuelemazzotta.com/mit-license)\n\n# Lighthouse Badges\n\n[![Lighthouse](./assets/img/lighthouse.svg)](https://github.com/GoogleChrome/lighthouse)\n\nThis package allows you to easily create Lighthouse badges for all Lighthouse categories.  \nEver wanted to brag about your sites's awesome Lighthouse performance? Then this is the package for you!  \n\n## Examples\n\n### All Badges\n\n[![Lighthouse Accessibility Badge](./assets/img/scores/lighthouse_accessibility.svg)](https://github.com/emazzotta/lighthouse-badges)\n[![Lighthouse Best Practices Badge](./assets/img/scores/lighthouse_best-practices.svg)](https://github.com/emazzotta/lighthouse-badges)\n[![Lighthouse Performance Badge](./assets/img/scores/lighthouse_performance.svg)](https://github.com/emazzotta/lighthouse-badges)\n[![Lighthouse PWA Badge](./assets/img/scores/lighthouse_pwa.svg)](https://github.com/emazzotta/lighthouse-badges)\n[![Lighthouse SEO Badge](./assets/img/scores/lighthouse_seo.svg)](https://github.com/emazzotta/lighthouse-badges)\n\n### Single Badge\n\n[![Lighthouse](./assets/img/scores/lighthouse.svg)](https://github.com/emazzotta/lighthouse-badges)\n\n## Usage\n\n### Help\n\n```txt\nusage: lighthouse-badges [-h] [-v] [-s] [-b {flat,flat-square,plastic,for-the-badge,social}] [-o OUTPUT_PATH] [-r] -u URL\n\nGenerate gh-badges (shields.io) based on lighthouse performance.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n  -s, --single-badge    Output only one single badge averaging all lighthouse categories' scores\n  -b, --badge-style {flat,flat-square,plastic,for-the-badge,social}\n                        Define look and feel for the badge\n  -o, --output-path OUTPUT_PATH\n                        Define output path for artifacts\n  -r, --save-report     Save lighthouse report as html for every supplied url\n\nRequired arguments:\n  -u URL, --url URL     The lighthouse badge(s) will contain the score(s) of all the supplied url\n```\n\nAdditionally, you can pass parameters configurations to the lighthouse process directly via environment variable path to the config file:\n\n```bash\n# The variable name matters, but the path can be anything\nexport LIGHTHOUSE_BADGES_CONFIGURATION_PATH=\"~/.lhb-config.json\" \n\n# \"extends\": \"lighthouse:default\" is needed, the rest is optional\ncat << EOF >! $LIGHTHOUSE_BADGES_CONFIGURATION_PATH\n{\n  \"extends\": \"lighthouse:default\",\n  \"settings\": {\n    \"extraHeaders\": {\n      \"Authorization\": \"Bearer ...\"\n    },\n    \"onlyCategories\": [\n      \"performance\",\n      \"pwa\"\n    ],\n    \"formFactor\": \"mobile\"\n  }\n}\nEOF\n\nlighthouse-badges --url https://www.youtube.com/\n```\n\nSee [here](https://github.com/GoogleChrome/lighthouse/blob/main/docs/configuration.md) for more configuration examples in the official lighthouse docs.\n\n### Run\n\nBun >= 1.0.0 is required.\n\n#### Option 1: bun\n```bash\nbun install -g lighthouse-badges\nlighthouse-badges --url https://www.youtube.com/ -o test_results\n```\n\n#### Option 2: bunx\n```bash\nbunx lighthouse-badges --url https://www.youtube.com/ -o test_results\n```\n\n#### Option 3: Docker\n```bash\n# May alter lighthouse results due to performance differences compared to running directly on host\ndocker run --rm \\\n    -v $PWD/test_results:/home/chrome/reports \\\n    emazzotta/lighthouse-badges \\\n    /bin/sh -c \"lighthouse-badges --url https://www.youtube.com/\"\n```\n\n### Develop\n\n```bash\nbun run start # To run the lighthouse-badges code on google.com\n```\n\n## Contributing\n\nSee [contribution guideline](./CONTRIBUTING.md)\n\n## Sponsors\n\nSponsored by [JetBrains](https://www.jetbrains.com/?from=Lighthouse-Badges)\n\n<a href=\"https://www.jetbrains.com/?from=Lighthouse-Badges\">\n  <img alt=\"Jetbrains Logo\" src=\"./assets/img/jetbrains.svg\" height=\"100\">\n</a>\n\n## Author\n\n[Emanuele Mazzotta](mailto:hello@mazzotta.me)\n"
  },
  {
    "path": "__tests__/argparser.test.ts",
    "content": "import { describe, it, expect } from 'bun:test';\nimport parser from '../src/argparser';\n\ndescribe('test argparser', () => {\n  const baseUrl = 'https://emanuelemazzotta.com';\n\n  it('should return expected default values', () => {\n    const actualArgs = parser.parse_args(['--url', baseUrl]);\n    expect(actualArgs.single_badge).toBe(false);\n    expect(actualArgs.badge_style).toBe('flat');\n    expect(actualArgs.save_report).toBe(false);\n    expect(actualArgs.url).toStrictEqual(baseUrl);\n  });\n\n  it('should overwrite values', () => {\n    const actualArgs = parser.parse_args([\n      '--single-badge',\n      '--save-report',\n      '--badge-style', 'flat-square',\n      '--url', baseUrl,\n    ]);\n\n    expect(actualArgs.single_badge).toBe(true);\n    expect(actualArgs.badge_style).toBe('flat-square');\n    expect(actualArgs.save_report).toBe(true);\n    expect(actualArgs.url).toStrictEqual(baseUrl);\n  });\n});\n\n"
  },
  {
    "path": "__tests__/calculations.test.ts",
    "content": "import { describe, it, expect } from 'bun:test';\nimport { getAverageScore, getSquashedScore, percentageToColor } from '../src/calculations';\n\ndescribe('calculations', () => {\n  describe('percentageToColor', () => {\n    it('should return brightgreen for very high number', () => {\n      expect(percentageToColor(97)).toBe('brightgreen');\n    });\n\n    it('should return green for high number', () => {\n      expect(percentageToColor(92)).toBe('green');\n    });\n\n    it('should return yellowgreen for medium high number', () => {\n      expect(percentageToColor(85)).toBe('yellowgreen');\n    });\n\n    it('should return yellow for medium number', () => {\n      expect(percentageToColor(62)).toBe('yellow');\n    });\n\n    it('should return orange for low number', () => {\n      expect(percentageToColor(45)).toBe('orange');\n    });\n\n    it('should return red for very low number', () => {\n      expect(percentageToColor(23)).toBe('red');\n    });\n  });\n\n  describe('getAverageScore', () => {\n    it('should calculate the expected average', () => {\n      const expectedResult = {\n        'lighthouse accessibility': 60,\n        'lighthouse performance': 51,\n      };\n      const input = [\n        { 'lighthouse accessibility': 100, 'lighthouse performance': 52 },\n        { 'lighthouse accessibility': 20, 'lighthouse performance': 50 },\n      ];\n      const actualResult = getAverageScore(input);\n      expect(expectedResult).toStrictEqual(actualResult);\n    });\n\n    it('should round the expected average correctly', () => {\n      const expectedResult = {\n        'lighthouse accessibility': 99,\n        'lighthouse performance': 99,\n        'lighthouse progressive web app': 99,\n        'lighthouse best practices': 99,\n      };\n      const input = [\n        {\n          'lighthouse accessibility': 100,\n          'lighthouse performance': 100,\n          'lighthouse progressive web app': 100,\n          'lighthouse best practices': 100,\n        },\n        {\n          'lighthouse accessibility': 98.9,\n          'lighthouse performance': 98.9,\n          'lighthouse progressive web app': 98.9,\n          'lighthouse best practices': 98.9,\n        },\n      ];\n      const actualResult = getAverageScore(input);\n      expect(expectedResult).toStrictEqual(actualResult);\n    });\n\n    it('should return empty object for empty input', () => {\n      const result = getAverageScore([]);\n      expect(result).toStrictEqual({});\n    });\n  });\n\n  describe('getSquashedScore', () => {\n    it('should calculate the expected squashed average', () => {\n      const expectedResult = { lighthouse: 50 };\n      const input = [\n        { 'lighthouse accessibility': 100, 'lighthouse performance': 60 },\n        { 'lighthouse accessibility': 20, 'lighthouse performance': 20 },\n      ];\n      const actualResult = getSquashedScore(input);\n      expect(expectedResult).toStrictEqual(actualResult);\n    });\n\n    it('should round the expected squashed average correctly', () => {\n      const expectedResult = { lighthouse: 83 };\n      const input = [\n        {\n          'lighthouse accessibility': 100,\n          'lighthouse performance': 100,\n          'lighthouse progressive web app': 55,\n          'lighthouse best practices': 75,\n        },\n      ];\n      const actualResult = getSquashedScore(input);\n      expect(expectedResult).toStrictEqual(actualResult);\n    });\n\n    it('should return zero score for empty input', () => {\n      const result = getSquashedScore([]);\n      expect(result).toStrictEqual({ lighthouse: 0 });\n    });\n  });\n});\n"
  },
  {
    "path": "__tests__/lighthouse-badges.test.ts",
    "content": "import { describe, it, expect, beforeEach, afterEach, mock } from 'bun:test';\nimport fs from 'fs';\nimport path from 'path';\nimport {\n  htmlReportsToFile,\n  metricsToSvg,\n  processParameters,\n  processRawLighthouseResult,\n} from '../src/lighthouse-badges';\nimport parser from '../src/argparser';\nimport reportFixture from '../assets/report/emanuelemazzotta.com.json';\nimport type { LighthouseLHR, LighthouseMetrics, LighthouseReport, ProcessedLighthouseResult, LighthouseConfig } from '../src/types';\n\n// Use a temporary directory for test outputs\nconst TEST_OUTPUT_DIR = path.join(process.cwd(), '__test_output__');\n\nfunction cleanupTestFiles() {\n  try {\n    if (fs.existsSync(TEST_OUTPUT_DIR)) {\n      const files = fs.readdirSync(TEST_OUTPUT_DIR);\n      for (const file of files) {\n        fs.unlinkSync(path.join(TEST_OUTPUT_DIR, file));\n      }\n      fs.rmdirSync(TEST_OUTPUT_DIR);\n    }\n  } catch {\n    // Ignore cleanup errors\n  }\n}\n\nfunction getTestFiles(): string[] {\n  try {\n    if (fs.existsSync(TEST_OUTPUT_DIR)) {\n      return fs.readdirSync(TEST_OUTPUT_DIR);\n    }\n  } catch {\n    // Ignore errors\n  }\n  return [];\n}\n\ndescribe('test lighthouse badges', () => {\n  beforeEach(() => {\n    cleanupTestFiles();\n    if (!fs.existsSync(TEST_OUTPUT_DIR)) {\n      fs.mkdirSync(TEST_OUTPUT_DIR, { recursive: true });\n    }\n  });\n\n  afterEach(() => {\n    cleanupTestFiles();\n  });\n\n  describe('the lighthouse command results are processed as expected', () => {\n    it('should return correct metrics and no report', async () => {\n      const url = 'https://emanuelemazzotta.com';\n      const shouldSaveReport = false;\n      const result = await processRawLighthouseResult(reportFixture as LighthouseLHR, '', url, shouldSaveReport);\n      expect({\n        metrics: {\n          'lighthouse performance': 98,\n          'lighthouse pwa': 85,\n          'lighthouse accessibility': 100,\n          'lighthouse best-practices': 93,\n          'lighthouse seo': 100,\n        },\n        report: {\n          [url]: false,\n        },\n      }).toStrictEqual(result);\n    });\n\n    it('should return correct metrics and a valid report', async () => {\n      const expectedHtmlReport = '<html>Fake report</html>';\n      const url = 'https://emanuelemazzotta.com';\n      const shouldSaveReport = true;\n      const result = await processRawLighthouseResult(\n        reportFixture as LighthouseLHR,\n        expectedHtmlReport,\n        url,\n        shouldSaveReport,\n      );\n      expect({\n        metrics: {\n          'lighthouse performance': 98,\n          'lighthouse pwa': 85,\n          'lighthouse accessibility': 100,\n          'lighthouse best-practices': 93,\n          'lighthouse seo': 100,\n        },\n        report: {\n          [url]: expectedHtmlReport,\n        },\n      }).toStrictEqual(result);\n    });\n  });\n\n  describe('the html reports are saved correctly', () => {\n    it('should save html report', async () => {\n      const htmlReports: LighthouseReport[] = [\n        { 'https://emanuelemazzotta.com': 'a report' },\n        { 'https://emanuelemazzotta.com/cv': 'another report' },\n      ];\n      await htmlReportsToFile(htmlReports, TEST_OUTPUT_DIR);\n\n      const files = getTestFiles();\n      expect(files.length).toBe(2);\n      expect(files.some(f => f.includes('emanuelemazzotta_com'))).toBe(true);\n      expect(files.some(f => f.includes('emanuelemazzotta_com_cv'))).toBe(true);\n    });\n\n    it('should not save html report if toggle is false', async () => {\n      const htmlReports: LighthouseReport[] = [\n        { 'https://example.com': false },\n        { 'https://example2.com': false },\n      ];\n      await htmlReportsToFile(htmlReports, TEST_OUTPUT_DIR);\n      expect(getTestFiles().length).toBe(0);\n    });\n  });\n\n  describe('the svg files are saved correctly', () => {\n    it('should save all svg files', async () => {\n      const lighthouseMetrics: LighthouseMetrics = {\n        'lighthouse performance': 100,\n        'lighthouse pwa': 85,\n        'lighthouse accessibility': 100,\n        'lighthouse best-practices': 93,\n        'lighthouse seo': 100,\n      };\n\n      const badgeStyle = 'flat';\n      await metricsToSvg(lighthouseMetrics, badgeStyle, TEST_OUTPUT_DIR);\n\n      const files = getTestFiles();\n      expect(files.length).toBe(5);\n      expect(files.some(f => f.includes('lighthouse_performance'))).toBe(true);\n      expect(files.some(f => f.includes('lighthouse_accessibility'))).toBe(true);\n    });\n  });\n\n  describe('test the main process function', () => {\n    it('should create single badge with report', async () => {\n      const args = parser.parse_args([\n        '--single-badge',\n        '--save-report',\n        '--url', 'https://example.org',\n        '--output-path', TEST_OUTPUT_DIR,\n      ]);\n\n      const mockResult = await processRawLighthouseResult(reportFixture as LighthouseLHR, '<html>Fake report</html>', 'https://example.org', args.save_report);\n      const calculateLighthouseMetrics = mock(() => Promise.resolve(mockResult));\n      await processParameters(args, calculateLighthouseMetrics as (url: string, shouldSaveReport: boolean, lighthouseParameters?: LighthouseConfig) => Promise<ProcessedLighthouseResult>);\n\n      const files = getTestFiles();\n      expect(files.length).toBe(2);\n      expect(files.some(f => f.includes('lighthouse.svg'))).toBe(true);\n      expect(files.some(f => f.includes('example_org.html'))).toBe(true);\n    });\n\n    it('should create multiple badges with report', async () => {\n      const args = parser.parse_args([\n        '--save-report',\n        '--url', 'https://example.org',\n        '--output-path', TEST_OUTPUT_DIR,\n      ]);\n\n      const mockResult = await processRawLighthouseResult(reportFixture as LighthouseLHR, '<html>Fake report</html>', 'https://example.org', args.save_report);\n      const calculateLighthouseMetrics = mock(() => Promise.resolve(mockResult));\n      await processParameters(args, calculateLighthouseMetrics as (url: string, shouldSaveReport: boolean, lighthouseParameters?: LighthouseConfig) => Promise<ProcessedLighthouseResult>);\n\n      const files = getTestFiles();\n      expect(files.length).toBe(6);\n    });\n\n    it('should create single badge without report', async () => {\n      const args = parser.parse_args([\n        '--single-badge',\n        '--url', 'https://example.org',\n        '--output-path', TEST_OUTPUT_DIR,\n      ]);\n\n      const mockResult = await processRawLighthouseResult(reportFixture as LighthouseLHR, '', 'https://example.org', args.save_report);\n      const calculateLighthouseMetrics = mock(() => Promise.resolve(mockResult));\n      await processParameters(args, calculateLighthouseMetrics as (url: string, shouldSaveReport: boolean, lighthouseParameters?: LighthouseConfig) => Promise<ProcessedLighthouseResult>);\n\n      const files = getTestFiles();\n      expect(files.length).toBe(1);\n      expect(files.some(f => f.includes('lighthouse.svg'))).toBe(true);\n    });\n\n    it('should create multiple badges without report', async () => {\n      const args = parser.parse_args([\n        '--url', 'https://example.org',\n        '--output-path', TEST_OUTPUT_DIR,\n      ]);\n\n      const mockResult = await processRawLighthouseResult(reportFixture as LighthouseLHR, '', 'https://example.org', args.save_report);\n      const calculateLighthouseMetrics = mock(() => Promise.resolve(mockResult));\n      await processParameters(args, calculateLighthouseMetrics as (url: string, shouldSaveReport: boolean, lighthouseParameters?: LighthouseConfig) => Promise<ProcessedLighthouseResult>);\n\n      const files = getTestFiles();\n      expect(files.length).toBe(5);\n    });\n  });\n});\n\n"
  },
  {
    "path": "__tests__/main.test.ts",
    "content": "import { describe, it, expect, beforeEach, afterEach, mock } from 'bun:test';\nimport type { Spinner, ParsedArgs } from '../src/types';\nimport handleUserInput from '../src/main.js';\n\ndescribe('test index', () => {\n  let stderrOutput = '';\n  const spinnerFake: Spinner = { start: () => null, stop: () => null };\n  const stderrWrite = process.stderr.write;\n  const processExit = process.exit;\n\n  beforeEach(() => {\n    process.stderr.write = (x: string | Uint8Array) => {\n      stderrOutput += `${x}\\n`;\n      return true;\n    };\n    process.exit = (() => {\n      // Mock exit\n    }) as typeof process.exit;\n    stderrOutput = '';\n  });\n\n  afterEach(() => {\n    process.stderr.write = stderrWrite;\n    process.exit = processExit;\n  });\n\n  it('should invoke parse args and process parameters', async () => {\n    const mockParseArgs = mock(() =>\n      Promise.resolve({ url: 'https://example.org', single_badge: false, badge_style: 'flat', save_report: false } as ParsedArgs)\n    );\n    const mockProcessParameters = mock(() => Promise.resolve());\n\n    await handleUserInput(spinnerFake, {\n      parseArgs: mockParseArgs,\n      processParameters: mockProcessParameters,\n    });\n\n    expect(mockParseArgs).toHaveBeenCalledTimes(1);\n    expect(mockProcessParameters).toHaveBeenCalledTimes(1);\n    expect(stderrOutput).toBe('');\n  });\n\n  it('should handle parse errors gracefully', async () => {\n    const mockParseArgs = mock(() =>\n      Promise.reject(new Error('the following arguments are required: -u/--url'))\n    );\n\n    await handleUserInput(spinnerFake, {\n      parseArgs: mockParseArgs,\n    });\n\n    expect(stderrOutput.includes('the following arguments are required: -u/--url')).toBe(true);\n  });\n\n  it('should handle processing errors gracefully', async () => {\n    const mockParseArgs = mock(() =>\n      Promise.resolve({ url: 'https://example.org', single_badge: false, badge_style: 'flat', save_report: false } as ParsedArgs)\n    );\n    const mockProcessParameters = mock(() => Promise.reject(new Error('Async error')));\n\n    await handleUserInput(spinnerFake, {\n      parseArgs: mockParseArgs,\n      processParameters: mockProcessParameters,\n    });\n\n    expect(stderrOutput.includes('Error: Async error')).toBe(true);\n  });\n});\n\n"
  },
  {
    "path": "__tests__/util.test.ts",
    "content": "import { describe, it, expect } from 'bun:test';\nimport { urlEscaper } from '../src/util';\n\ndescribe('urlEscaper', () => {\n  it('strips the https scheme and replaces non-alphanumerics', () => {\n    expect(urlEscaper('https://abcöd%f&/?get=hi')).toBe('abc_d_f___get_hi');\n  });\n\n  it('strips the http scheme and replaces non-alphanumerics', () => {\n    expect(urlEscaper('http://abcöd%f&/?get=hi')).toBe('abc_d_f___get_hi');\n  });\n\n  it('lowercases the result', () => {\n    expect(urlEscaper('HTTPS://Example.COM/Path')).toBe('example_com_path');\n  });\n});\n"
  },
  {
    "path": "assets/report/emanuelemazzotta.com.json",
    "content": "{\n  \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/68.0.3440.106 Safari/537.36\",\n  \"lighthouseVersion\": \"3.0.3\",\n  \"fetchTime\": \"2018-09-09T09:31:48.638Z\",\n  \"requestedUrl\": \"https://emanuelemazzotta.com/\",\n  \"finalUrl\": \"https://emanuelemazzotta.com/\",\n  \"runWarnings\": [],\n  \"audits\": {\n    \"is-on-https\": {\n      \"id\": \"is-on-https\",\n      \"title\": \"Uses HTTPS\",\n      \"description\": \"All sites should be protected with HTTPS, even ones that don't handle sensitive data. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/https).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"redirects-http\": {\n      \"id\": \"redirects-http\",\n      \"title\": \"Redirects HTTP traffic to HTTPS\",\n      \"description\": \"If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/http-redirects-to-https).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"service-worker\": {\n      \"id\": \"service-worker\",\n      \"title\": \"Registers a service worker\",\n      \"description\": \"The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/registered-service-worker).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"works-offline\": {\n      \"id\": \"works-offline\",\n      \"title\": \"Responds with a 200 when offline\",\n      \"description\": \"If you're building a Progressive Web App, consider using a service worker so that your app can work offline. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/http-200-when-offline).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"warnings\": []\n    },\n    \"viewport\": {\n      \"id\": \"viewport\",\n      \"title\": \"Has a `<meta name=\\\"viewport\\\">` tag with `width` or `initial-scale`\",\n      \"description\": \"Add a viewport meta tag to optimize your app for mobile screens. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/has-viewport-meta-tag).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"warnings\": []\n    },\n    \"without-javascript\": {\n      \"id\": \"without-javascript\",\n      \"title\": \"Contains some content when JavaScript is not available\",\n      \"description\": \"Your app should display some content when JavaScript is disabled, even if it's just a warning to the user that JavaScript is required to use the app. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/no-js).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"first-contentful-paint\": {\n      \"id\": \"first-contentful-paint\",\n      \"title\": \"First Contentful Paint\",\n      \"description\": \"First contentful paint marks the time at which the first text/image is painted. [Learn more](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 770.5929999999998,\n      \"displayValue\": [\n        \"%10d ms\",\n        770.5929999999998\n      ]\n    },\n    \"first-meaningful-paint\": {\n      \"id\": \"first-meaningful-paint\",\n      \"title\": \"First Meaningful Paint\",\n      \"description\": \"First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 868.0929999999998,\n      \"displayValue\": [\n        \"%10d ms\",\n        868.0929999999998\n      ]\n    },\n    \"load-fast-enough-for-pwa\": {\n      \"id\": \"load-fast-enough-for-pwa\",\n      \"title\": \"Page load is fast enough on 3G\",\n      \"description\": \"A fast page load over a 3G network ensures a good mobile user experience. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/fast-3g).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": 2815.0849999999996\n    },\n    \"speed-index\": {\n      \"id\": \"speed-index\",\n      \"title\": \"Speed Index\",\n      \"description\": \"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/speed-index).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 770.5929999999998,\n      \"displayValue\": [\n        \"%10d ms\",\n        770.5929999999998\n      ]\n    },\n    \"screenshot-thumbnails\": {\n      \"id\": \"screenshot-thumbnails\",\n      \"title\": \"Screenshot Thumbnails\",\n      \"description\": \"This is what the load of your site looked like.\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"informative\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"filmstrip\",\n        \"scale\": 3000,\n        \"items\": [\n          {\n            \"timing\": 300,\n            \"timestamp\": 250040788733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 600,\n            \"timestamp\": 250041088733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 900,\n            \"timestamp\": 250041388733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 1200,\n            \"timestamp\": 250041688733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 1500,\n            \"timestamp\": 250041988733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 1800,\n            \"timestamp\": 250042288733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 2100,\n            \"timestamp\": 250042588733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 2400,\n            \"timestamp\": 250042888733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 2700,\n            \"timestamp\": 250043188733,\n            \"data\": \"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\"\n          },\n          {\n            \"timing\": 3000,\n            \"timestamp\": 250043488733,\n            \"data\": \"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\"\n          }\n        ]\n      }\n    },\n    \"estimated-input-latency\": {\n      \"id\": \"estimated-input-latency\",\n      \"title\": \"Estimated Input Latency\",\n      \"description\": \"The score above is an estimate of how long your app takes to respond to user input, in milliseconds, during the busiest 5s window of page load. If your latency is higher than 50 ms, users may perceive your app as laggy. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 12.8,\n      \"displayValue\": [\n        \"%d ms\",\n        12.8\n      ]\n    },\n    \"errors-in-console\": {\n      \"id\": \"errors-in-console\",\n      \"title\": \"No browser errors logged to the console\",\n      \"description\": \"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns.\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": 0,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"time-to-first-byte\": {\n      \"id\": \"time-to-first-byte\",\n      \"title\": \"Keep server response times low (TTFB)\",\n      \"description\": \"Time To First Byte identifies the time at which your server sends a response. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/ttfb).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": 22.64500000000001,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"overallSavingsMs\": -577.355,\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"first-cpu-idle\": {\n      \"id\": \"first-cpu-idle\",\n      \"title\": \"First CPU Idle\",\n      \"description\": \"First CPU Idle marks the first time at which the page's main thread is quiet enough to handle input. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-interactive).\",\n      \"score\": 0.96,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 2815.0849999999996,\n      \"displayValue\": [\n        \"%10d ms\",\n        2815.0849999999996\n      ]\n    },\n    \"interactive\": {\n      \"id\": \"interactive\",\n      \"title\": \"Time to Interactive\",\n      \"description\": \"Interactive marks the time at which the page is fully interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive).\",\n      \"score\": 0.97,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 2815.0849999999996,\n      \"displayValue\": [\n        \"%10d ms\",\n        2815.0849999999996\n      ]\n    },\n    \"user-timings\": {\n      \"id\": \"user-timings\",\n      \"title\": \"User Timing marks and measures\",\n      \"description\": \"Consider instrumenting your app with the User Timing API to create custom, real-world measurements of key user experiences. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/user-timing).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"critical-request-chains\": {\n      \"id\": \"critical-request-chains\",\n      \"title\": \"Critical Request Chains\",\n      \"description\": \"The Critical Request Chains below show you what resources are issued with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"criticalrequestchain\",\n        \"header\": {\n          \"type\": \"text\",\n          \"text\": \"View critical network waterfall:\"\n        },\n        \"chains\": {\n          \"C84E02E57AAAA78D66F271D97F1DC375\": {\n            \"request\": {\n              \"url\": \"https://emanuelemazzotta.com/\",\n              \"startTime\": 250040.489529,\n              \"endTime\": 250040.607074,\n              \"responseReceivedTime\": 250040.604051,\n              \"transferSize\": 2468\n            },\n            \"children\": {}\n          }\n        },\n        \"longestChain\": {\n          \"duration\": 117.54499998642132,\n          \"length\": 1,\n          \"transferSize\": 2468\n        }\n      }\n    },\n    \"redirects\": {\n      \"id\": \"redirects\",\n      \"title\": \"Avoid multiple page redirects\",\n      \"description\": \"Redirects introduce additional delays before the page can be loaded. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/redirects).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": [\n        \"%d ms\",\n        0\n      ],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": [],\n        \"summary\": {\n          \"wastedMs\": 0\n        }\n      }\n    },\n    \"webapp-install-banner\": {\n      \"id\": \"webapp-install-banner\",\n      \"title\": \"User will not be prompted to Install the Web App\",\n      \"description\": \"Browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/install-prompt).\",\n      \"score\": 0,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": false,\n      \"explanation\": \"Failures: Service worker does not successfully serve the manifest's start_url,\\nTimed out waiting for fetched start_url.\",\n      \"details\": {\n        \"items\": [\n          {\n            \"failures\": [\n              \"Service worker does not successfully serve the manifest's start_url\",\n              \"Timed out waiting for fetched start_url\"\n            ],\n            \"isParseFailure\": false,\n            \"hasStartUrl\": true,\n            \"hasIconsAtLeast192px\": true,\n            \"hasIconsAtLeast512px\": false,\n            \"hasPWADisplayValue\": true,\n            \"hasBackgroundColor\": true,\n            \"hasThemeColor\": true,\n            \"hasShortName\": true,\n            \"shortNameLength\": true,\n            \"hasName\": true\n          }\n        ]\n      }\n    },\n    \"splash-screen\": {\n      \"id\": \"splash-screen\",\n      \"title\": \"Is not configured for a custom splash screen\",\n      \"description\": \"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/custom-splash-screen).\",\n      \"score\": 0,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": false,\n      \"explanation\": \"Failures: Manifest does not have icons at least 512px.\",\n      \"details\": {\n        \"items\": [\n          {\n            \"failures\": [\n              \"Manifest does not have icons at least 512px\"\n            ],\n            \"isParseFailure\": false,\n            \"hasStartUrl\": true,\n            \"hasIconsAtLeast192px\": true,\n            \"hasIconsAtLeast512px\": false,\n            \"hasPWADisplayValue\": true,\n            \"hasBackgroundColor\": true,\n            \"hasThemeColor\": true,\n            \"hasShortName\": true,\n            \"shortNameLength\": true,\n            \"hasName\": true\n          }\n        ]\n      }\n    },\n    \"themed-omnibox\": {\n      \"id\": \"themed-omnibox\",\n      \"title\": \"Address bar matches brand colors\",\n      \"description\": \"The browser address bar can be themed to match your site. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/address-bar).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"items\": [\n          {\n            \"failures\": [],\n            \"themeColor\": \"#A50104\",\n            \"isParseFailure\": false,\n            \"hasStartUrl\": true,\n            \"hasIconsAtLeast192px\": true,\n            \"hasIconsAtLeast512px\": false,\n            \"hasPWADisplayValue\": true,\n            \"hasBackgroundColor\": true,\n            \"hasThemeColor\": true,\n            \"hasShortName\": true,\n            \"shortNameLength\": true,\n            \"hasName\": true\n          }\n        ]\n      }\n    },\n    \"manifest-short-name-length\": {\n      \"id\": \"manifest-short-name-length\",\n      \"title\": \"The `short_name` won't be truncated on the homescreen\",\n      \"description\": \"Make your app's `short_name` fewer than 12 characters to ensure that it's not truncated on homescreens. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/manifest-short_name-is-not-truncated).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"content-width\": {\n      \"id\": \"content-width\",\n      \"title\": \"Content is sized correctly for the viewport\",\n      \"description\": \"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/content-sized-correctly-for-viewport).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"explanation\": \"\"\n    },\n    \"image-aspect-ratio\": {\n      \"id\": \"image-aspect-ratio\",\n      \"title\": \"Displays images with correct aspect ratio\",\n      \"description\": \"Image display dimensions should match natural aspect ratio. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/aspect-ratio).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"deprecations\": {\n      \"id\": \"deprecations\",\n      \"title\": \"Avoids deprecated APIs\",\n      \"description\": \"Deprecated APIs will eventually be removed from the browser. [Learn more](https://www.chromestatus.com/features#deprecated).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"mainthread-work-breakdown\": {\n      \"id\": \"mainthread-work-breakdown\",\n      \"title\": \"Minimizes main thread work\",\n      \"description\": \"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this.\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 803.792,\n      \"displayValue\": [\n        \"%10d ms\",\n        803.792\n      ],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"groupLabel\",\n            \"itemType\": \"text\",\n            \"text\": \"Category\"\n          },\n          {\n            \"key\": \"duration\",\n            \"itemType\": \"ms\",\n            \"granularity\": 1,\n            \"text\": \"Time Spent\"\n          }\n        ],\n        \"items\": [\n          {\n            \"group\": \"styleLayout\",\n            \"groupLabel\": \"Style & Layout\",\n            \"duration\": 391.028\n          },\n          {\n            \"group\": \"scriptEvaluation\",\n            \"groupLabel\": \"Script Evaluation\",\n            \"duration\": 214.23200000000003\n          },\n          {\n            \"group\": \"other\",\n            \"groupLabel\": \"Other\",\n            \"duration\": 179.85600000000008\n          },\n          {\n            \"group\": \"parseHTML\",\n            \"groupLabel\": \"Parse HTML & CSS\",\n            \"duration\": 8.335999999999999\n          },\n          {\n            \"group\": \"scriptParseCompile\",\n            \"groupLabel\": \"Script Parsing & Compilation\",\n            \"duration\": 5.892\n          },\n          {\n            \"group\": \"paintCompositeRender\",\n            \"groupLabel\": \"Rendering\",\n            \"duration\": 4.448\n          }\n        ]\n      }\n    },\n    \"bootup-time\": {\n      \"id\": \"bootup-time\",\n      \"title\": \"JavaScript boot-up time\",\n      \"description\": \"Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/bootup).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 190.136,\n      \"displayValue\": [\n        \"%10d ms\",\n        190.136\n      ],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"url\",\n            \"itemType\": \"url\",\n            \"text\": \"URL\"\n          },\n          {\n            \"key\": \"total\",\n            \"granularity\": 1,\n            \"itemType\": \"ms\",\n            \"text\": \"Total\"\n          },\n          {\n            \"key\": \"scripting\",\n            \"granularity\": 1,\n            \"itemType\": \"ms\",\n            \"text\": \"Script Evaluation\"\n          },\n          {\n            \"key\": \"scriptParseCompile\",\n            \"granularity\": 1,\n            \"itemType\": \"ms\",\n            \"text\": \"Script Parsing & Compilation\"\n          }\n        ],\n        \"items\": [\n          {\n            \"url\": \"https://www.google-analytics.com/analytics.js\",\n            \"total\": 136.196,\n            \"scripting\": 134.14,\n            \"scriptParseCompile\": 2.056\n          },\n          {\n            \"url\": \"https://www.googletagmanager.com/gtag/js?id=UA-28740874-1\",\n            \"total\": 53.94,\n            \"scripting\": 51.912,\n            \"scriptParseCompile\": 2.028\n          }\n        ],\n        \"summary\": {\n          \"wastedMs\": 190.136\n        }\n      }\n    },\n    \"uses-rel-preload\": {\n      \"id\": \"uses-rel-preload\",\n      \"title\": \"Preload key requests\",\n      \"description\": \"Consider using <link rel=preload> to prioritize fetching late-discovered resources sooner. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/preload).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": [\n        \"Potential savings of %10d ms\",\n        0\n      ],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0\n      }\n    },\n    \"uses-rel-preconnect\": {\n      \"id\": \"uses-rel-preconnect\",\n      \"title\": \"Avoid multiple, costly round trips to any origin\",\n      \"description\": \"Consider adding preconnect or dns-prefetch resource hints to establish early connections to important third-party origins. [Learn more](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect).\",\n      \"score\": 0.82,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 220.52000000715256,\n      \"displayValue\": [\n        \"Potential savings of %10d ms\",\n        220.52000000715256\n      ],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [\n          {\n            \"key\": \"url\",\n            \"valueType\": \"url\",\n            \"label\": \"Origin\"\n          },\n          {\n            \"key\": \"wastedMs\",\n            \"valueType\": \"timespanMs\",\n            \"label\": \"Potential Savings\"\n          }\n        ],\n        \"items\": [\n          {\n            \"url\": \"https://www.google-analytics.com\",\n            \"wastedMs\": 220.52000000715256\n          }\n        ],\n        \"overallSavingsMs\": 220.52000000715256\n      }\n    },\n    \"font-display\": {\n      \"id\": \"font-display\",\n      \"title\": \"All text remains visible during webfont loads\",\n      \"description\": \"Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://developers.google.com/web/updates/2016/02/font-display).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"network-requests\": {\n      \"id\": \"network-requests\",\n      \"title\": \"Network Requests\",\n      \"description\": \"Lists the network requests that were made during page load.\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"informative\",\n      \"rawValue\": 4,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"url\",\n            \"itemType\": \"url\",\n            \"text\": \"URL\"\n          },\n          {\n            \"key\": \"startTime\",\n            \"itemType\": \"ms\",\n            \"granularity\": 1,\n            \"text\": \"Start Time\"\n          },\n          {\n            \"key\": \"endTime\",\n            \"itemType\": \"ms\",\n            \"granularity\": 1,\n            \"text\": \"End Time\"\n          },\n          {\n            \"key\": \"transferSize\",\n            \"itemType\": \"bytes\",\n            \"displayUnit\": \"kb\",\n            \"granularity\": 1,\n            \"text\": \"Transfer Size\"\n          },\n          {\n            \"key\": \"statusCode\",\n            \"itemType\": \"text\",\n            \"text\": \"Status Code\"\n          },\n          {\n            \"key\": \"mimeType\",\n            \"itemType\": \"text\",\n            \"text\": \"MIME Type\"\n          },\n          {\n            \"key\": \"resourceType\",\n            \"itemType\": \"text\",\n            \"text\": \"Resource Type\"\n          }\n        ],\n        \"items\": [\n          {\n            \"url\": \"https://emanuelemazzotta.com/\",\n            \"startTime\": 0,\n            \"endTime\": 117.54499998642132,\n            \"transferSize\": 2468,\n            \"statusCode\": 200,\n            \"mimeType\": \"text/html\",\n            \"resourceType\": \"Document\"\n          },\n          {\n            \"url\": \"https://www.googletagmanager.com/gtag/js?id=UA-28740874-1\",\n            \"startTime\": 131.65599998319522,\n            \"endTime\": 319.93099997635,\n            \"transferSize\": 26003,\n            \"statusCode\": 200,\n            \"mimeType\": \"application/javascript\",\n            \"resourceType\": \"Script\"\n          },\n          {\n            \"url\": \"https://www.google-analytics.com/analytics.js\",\n            \"startTime\": 337.8499999816995,\n            \"endTime\": 410.4010000010021,\n            \"transferSize\": 14667,\n            \"statusCode\": 200,\n            \"mimeType\": \"text/javascript\",\n            \"resourceType\": \"Script\"\n          },\n          {\n            \"url\": \"https://www.google-analytics.com/r/collect?v=1&_v=j68&a=143759676&t=pageview&_s=1&dl=https%3A%2F%2Femanuelemazzotta.com%2F&ul=en-us&de=UTF-8&dt=Emanuele%20Mazzotta%20-%20Software%20Engineer&sd=24-bit&sr=412x732&vp=412x732&je=0&_u=IEBAAUAB~&jid=129511976&gjid=30143490&cid=1607040886.1536485510&tid=UA-28740874-1&_gid=1881346217.1536485510&_r=1&gtm=u8o&z=284877343\",\n            \"startTime\": 454.48499999474734,\n            \"endTime\": 479.62199998437427,\n            \"transferSize\": 199,\n            \"statusCode\": 200,\n            \"mimeType\": \"image/gif\",\n            \"resourceType\": \"Image\"\n          }\n        ]\n      }\n    },\n    \"metrics\": {\n      \"id\": \"metrics\",\n      \"title\": \"Metrics\",\n      \"description\": \"Collects all available metrics.\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"informative\",\n      \"rawValue\": 2815.0849999999996,\n      \"details\": {\n        \"items\": [\n          {\n            \"firstContentfulPaint\": 771,\n            \"firstMeaningfulPaint\": 868,\n            \"firstCPUIdle\": 2815,\n            \"interactive\": 2815,\n            \"speedIndex\": 771,\n            \"estimatedInputLatency\": 13,\n            \"observedNavigationStart\": 0,\n            \"observedNavigationStartTs\": 250040488733,\n            \"observedFirstPaint\": 249,\n            \"observedFirstPaintTs\": 250040737294,\n            \"observedFirstContentfulPaint\": 249,\n            \"observedFirstContentfulPaintTs\": 250040737305,\n            \"observedFirstMeaningfulPaint\": 249,\n            \"observedFirstMeaningfulPaintTs\": 250040737307,\n            \"observedTraceEnd\": 1400,\n            \"observedTraceEndTs\": 250041888550,\n            \"observedLoad\": 330,\n            \"observedLoadTs\": 250040819024,\n            \"observedDomContentLoaded\": 134,\n            \"observedDomContentLoadedTs\": 250040623073,\n            \"observedFirstVisualChange\": 254,\n            \"observedFirstVisualChangeTs\": 250040742733,\n            \"observedLastVisualChange\": 254,\n            \"observedLastVisualChangeTs\": 250040742733,\n            \"observedSpeedIndex\": 254,\n            \"observedSpeedIndexTs\": 250040743137\n          }\n        ]\n      }\n    },\n    \"pwa-cross-browser\": {\n      \"id\": \"pwa-cross-browser\",\n      \"title\": \"Site works cross-browser\",\n      \"description\": \"To reach the most number of users, sites should work across every major browser. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist#site-works-cross-browser).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"pwa-page-transitions\": {\n      \"id\": \"pwa-page-transitions\",\n      \"title\": \"Page transitions don't feel like they block on the network\",\n      \"description\": \"Transitions should feel snappy as you tap around, even on a slow network, a key to perceived performance. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist#page-transitions-dont-feel-like-they-block-on-the-network).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"pwa-each-page-has-url\": {\n      \"id\": \"pwa-each-page-has-url\",\n      \"title\": \"Each page has a URL\",\n      \"description\": \"Ensure individual pages are deep linkable via the URLs and that URLs are unique for the purpose of shareability on social media. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist#each-page-has-a-url).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"accesskeys\": {\n      \"id\": \"accesskeys\",\n      \"title\": \"`[accesskey]` values are unique\",\n      \"description\": \"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://dequeuniversity.com/rules/axe/2.2/accesskeys?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-allowed-attr\": {\n      \"id\": \"aria-allowed-attr\",\n      \"title\": \"`[aria-*]` attributes match their roles\",\n      \"description\": \"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-allowed-attr?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-required-attr\": {\n      \"id\": \"aria-required-attr\",\n      \"title\": \"`[role]`s have all required `[aria-*]` attributes\",\n      \"description\": \"Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-required-attr?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-required-children\": {\n      \"id\": \"aria-required-children\",\n      \"title\": \"Elements with `[role]` that require specific children `[role]`s, are present\",\n      \"description\": \"Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-required-children?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-required-parent\": {\n      \"id\": \"aria-required-parent\",\n      \"title\": \"`[role]`s are contained by their required parent element\",\n      \"description\": \"Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-required-parent?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-roles\": {\n      \"id\": \"aria-roles\",\n      \"title\": \"`[role]` values are valid\",\n      \"description\": \"ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-roles?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-valid-attr-value\": {\n      \"id\": \"aria-valid-attr-value\",\n      \"title\": \"`[aria-*]` attributes have valid values\",\n      \"description\": \"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-valid-attr-value?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"aria-valid-attr\": {\n      \"id\": \"aria-valid-attr\",\n      \"title\": \"`[aria-*]` attributes are valid and not misspelled\",\n      \"description\": \"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more](https://dequeuniversity.com/rules/axe/2.2/aria-valid-attr?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"audio-caption\": {\n      \"id\": \"audio-caption\",\n      \"title\": \"`<audio>` elements contain a `<track>` element with `[kind=\\\"captions\\\"]`\",\n      \"description\": \"Captions make audio elements usable for deaf or hearing-impaired users, providing critical information such as who is talking, what they're saying, and other non-speech information. [Learn more](https://dequeuniversity.com/rules/axe/2.2/audio-caption?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"button-name\": {\n      \"id\": \"button-name\",\n      \"title\": \"Buttons have an accessible name\",\n      \"description\": \"When a button doesn't have an accessible name, screen readers announce it as \\\"button\\\", making it unusable for users who rely on screen readers. [Learn more](https://dequeuniversity.com/rules/axe/2.2/button-name?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"bypass\": {\n      \"id\": \"bypass\",\n      \"title\": \"The page contains a heading, skip link, or landmark region\",\n      \"description\": \"Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more](https://dequeuniversity.com/rules/axe/2.2/bypass?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"color-contrast\": {\n      \"id\": \"color-contrast\",\n      \"title\": \"Background and foreground colors have a sufficient contrast ratio\",\n      \"description\": \"Low-contrast text is difficult or impossible for many users to read. [Learn more](https://dequeuniversity.com/rules/axe/2.2/color-contrast?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"definition-list\": {\n      \"id\": \"definition-list\",\n      \"title\": \"`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>` or `<template>` elements.\",\n      \"description\": \"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://dequeuniversity.com/rules/axe/2.2/definition-list?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"dlitem\": {\n      \"id\": \"dlitem\",\n      \"title\": \"Definition list items are wrapped in `<dl>` elements\",\n      \"description\": \"Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn more](https://dequeuniversity.com/rules/axe/2.2/dlitem?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"document-title\": {\n      \"id\": \"document-title\",\n      \"title\": \"Document has a `<title>` element\",\n      \"description\": \"The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/title).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"duplicate-id\": {\n      \"id\": \"duplicate-id\",\n      \"title\": \"`[id]` attributes on the page are unique\",\n      \"description\": \"The value of an id attribute must be unique to prevent other instances from being overlooked by assistive technologies. [Learn more](https://dequeuniversity.com/rules/axe/2.2/duplicate-id?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"frame-title\": {\n      \"id\": \"frame-title\",\n      \"title\": \"`<frame>` or `<iframe>` elements have a title\",\n      \"description\": \"Screen reader users rely on frame titles to describe the contents of frames. [Learn more](https://dequeuniversity.com/rules/axe/2.2/frame-title?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"html-has-lang\": {\n      \"id\": \"html-has-lang\",\n      \"title\": \"`<html>` element has a `[lang]` attribute\",\n      \"description\": \"If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more](https://dequeuniversity.com/rules/axe/2.2/html-lang?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"html-lang-valid\": {\n      \"id\": \"html-lang-valid\",\n      \"title\": \"`<html>` element has a valid value for its `[lang]` attribute\",\n      \"description\": \"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn more](https://dequeuniversity.com/rules/axe/2.2/valid-lang?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"image-alt\": {\n      \"id\": \"image-alt\",\n      \"title\": \"Image elements have `[alt]` attributes\",\n      \"description\": \"Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more](https://dequeuniversity.com/rules/axe/2.2/image-alt?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"input-image-alt\": {\n      \"id\": \"input-image-alt\",\n      \"title\": \"`<input type=\\\"image\\\">` elements have `[alt]` text\",\n      \"description\": \"When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn more](https://dequeuniversity.com/rules/axe/2.2/input-image-alt?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"label\": {\n      \"id\": \"label\",\n      \"title\": \"Form elements have associated labels\",\n      \"description\": \"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://dequeuniversity.com/rules/axe/2.2/label?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"layout-table\": {\n      \"id\": \"layout-table\",\n      \"title\": \"Presentational `<table>` elements avoid using `<th>`, `<caption>` or the `[summary]` attribute.\",\n      \"description\": \"A table being used for layout purposes should not include data elements, such as the th or caption elements or the summary attribute, because this can create a confusing experience for screen reader users. [Learn more](https://dequeuniversity.com/rules/axe/2.2/layout-table?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"link-name\": {\n      \"id\": \"link-name\",\n      \"title\": \"Links have a discernible name\",\n      \"description\": \"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn more](https://dequeuniversity.com/rules/axe/2.2/link-name?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"list\": {\n      \"id\": \"list\",\n      \"title\": \"Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).\",\n      \"description\": \"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more](https://dequeuniversity.com/rules/axe/2.2/list?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"listitem\": {\n      \"id\": \"listitem\",\n      \"title\": \"List items (`<li>`) are contained within `<ul>` or `<ol>` parent elements\",\n      \"description\": \"Screen readers require list items (`<li>`) to be contained within a parent `<ul>` or `<ol>` to be announced properly. [Learn more](https://dequeuniversity.com/rules/axe/2.2/listitem?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"meta-refresh\": {\n      \"id\": \"meta-refresh\",\n      \"title\": \"The document does not use `<meta http-equiv=\\\"refresh\\\">`\",\n      \"description\": \"Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more](https://dequeuniversity.com/rules/axe/2.2/meta-refresh?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"meta-viewport\": {\n      \"id\": \"meta-viewport\",\n      \"title\": \"`[user-scalable=\\\"no\\\"]` is not used in the `<meta name=\\\"viewport\\\">` element and the `[maximum-scale]` attribute is not less than 5.\",\n      \"description\": \"Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more](https://dequeuniversity.com/rules/axe/2.2/meta-viewport?application=lighthouse).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"object-alt\": {\n      \"id\": \"object-alt\",\n      \"title\": \"`<object>` elements have `[alt]` text\",\n      \"description\": \"Screen readers cannot translate non-text content. Adding alt text to `<object>` elements helps screen readers convey meaning to users. [Learn more](https://dequeuniversity.com/rules/axe/2.2/object-alt?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"tabindex\": {\n      \"id\": \"tabindex\",\n      \"title\": \"No element has a `[tabindex]` value greater than 0\",\n      \"description\": \"A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more](https://dequeuniversity.com/rules/axe/2.2/tabindex?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"td-headers-attr\": {\n      \"id\": \"td-headers-attr\",\n      \"title\": \"Cells in a `<table>` element that use the `[headers]` attribute only refer to other cells of that same table.\",\n      \"description\": \"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://dequeuniversity.com/rules/axe/2.2/td-headers-attr?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"th-has-data-cells\": {\n      \"id\": \"th-has-data-cells\",\n      \"title\": \"`<th>` elements and elements with `[role=\\\"columnheader\\\"/\\\"rowheader\\\"]` have data cells they describe.\",\n      \"description\": \"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://dequeuniversity.com/rules/axe/2.2/th-has-data-cells?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"valid-lang\": {\n      \"id\": \"valid-lang\",\n      \"title\": \"`[lang]` attributes have a valid value\",\n      \"description\": \"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn more](https://dequeuniversity.com/rules/axe/2.2/valid-lang?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"video-caption\": {\n      \"id\": \"video-caption\",\n      \"title\": \"`<video>` elements contain a `<track>` element with `[kind=\\\"captions\\\"]`\",\n      \"description\": \"When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more](https://dequeuniversity.com/rules/axe/2.2/video-caption?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"video-description\": {\n      \"id\": \"video-description\",\n      \"title\": \"`<video>` elements contain a `<track>` element with `[kind=\\\"description\\\"]`\",\n      \"description\": \"Audio descriptions provide relevant information for videos that dialogue cannot, such as facial expressions and scenes. [Learn more](https://dequeuniversity.com/rules/axe/2.2/video-description?application=lighthouse).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"custom-controls-labels\": {\n      \"id\": \"custom-controls-labels\",\n      \"title\": \"Custom controls have associated labels\",\n      \"description\": \"Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"custom-controls-roles\": {\n      \"id\": \"custom-controls-roles\",\n      \"title\": \"Custom controls have ARIA roles\",\n      \"description\": \"Custom interactive controls have appropriate ARIA roles. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"focus-traps\": {\n      \"id\": \"focus-traps\",\n      \"title\": \"User focus is not accidentally trapped in a region\",\n      \"description\": \"A user can tab into and out of any control or region without accidentally trapping their focus. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"focusable-controls\": {\n      \"id\": \"focusable-controls\",\n      \"title\": \"Interactive controls are keyboard focusable\",\n      \"description\": \"Custom interactive controls are keyboard focusable and display a focus indicator. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"heading-levels\": {\n      \"id\": \"heading-levels\",\n      \"title\": \"Headings don't skip levels\",\n      \"description\": \"Headings are used to create an outline for the page and heading levels are not skipped. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#take_advantage_of_headings_and_landmarks).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"logical-tab-order\": {\n      \"id\": \"logical-tab-order\",\n      \"title\": \"The page has a logical tab order\",\n      \"description\": \"Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"managed-focus\": {\n      \"id\": \"managed-focus\",\n      \"title\": \"The user's focus is directed to new content added to the page\",\n      \"description\": \"If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#start_with_the_keyboard).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"offscreen-content-hidden\": {\n      \"id\": \"offscreen-content-hidden\",\n      \"title\": \"Offscreen content is hidden from assistive technology\",\n      \"description\": \"Offscreen content is hidden with display: none or aria-hidden=true. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"use-landmarks\": {\n      \"id\": \"use-landmarks\",\n      \"title\": \"HTML5 landmark elements are used to improve navigation\",\n      \"description\": \"Landmark elements (<main>, <nav>, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#take_advantage_of_headings_and_landmarks).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"visual-order-follows-dom\": {\n      \"id\": \"visual-order-follows-dom\",\n      \"title\": \"Visual order on the page follows DOM order\",\n      \"description\": \"DOM order matches the visual order, improving navigation for assistive technology. [Learn more](https://developers.google.com/web/fundamentals/accessibility/how-to-review#try_it_with_a_screen_reader).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"uses-long-cache-ttl\": {\n      \"id\": \"uses-long-cache-ttl\",\n      \"title\": \"Uses efficient cache policy on static assets\",\n      \"description\": \"A long cache lifetime can speed up repeat visits to your page. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/cache-policy).\",\n      \"score\": 0.87,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 34240.43125,\n      \"displayValue\": \"2 assets found\",\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"url\",\n            \"itemType\": \"url\",\n            \"text\": \"URL\"\n          },\n          {\n            \"key\": \"cacheLifetimeMs\",\n            \"itemType\": \"ms\",\n            \"text\": \"Cache TTL\",\n            \"displayUnit\": \"duration\"\n          },\n          {\n            \"key\": \"totalBytes\",\n            \"itemType\": \"bytes\",\n            \"text\": \"Size (KB)\",\n            \"displayUnit\": \"kb\",\n            \"granularity\": 1\n          }\n        ],\n        \"items\": [\n          {\n            \"url\": \"https://www.googletagmanager.com/gtag/js?id=UA-28740874-1\",\n            \"cacheControl\": {\n              \"private\": true,\n              \"max-age\": 900\n            },\n            \"cacheLifetimeMs\": 900000,\n            \"cacheHitProbability\": 0.10625000000000001,\n            \"totalBytes\": 26003,\n            \"wastedBytes\": 23240.18125\n          },\n          {\n            \"url\": \"https://www.google-analytics.com/analytics.js\",\n            \"cacheControl\": {\n              \"public\": true,\n              \"max-age\": 7200\n            },\n            \"cacheLifetimeMs\": 7200000,\n            \"cacheHitProbability\": 0.25,\n            \"totalBytes\": 14667,\n            \"wastedBytes\": 11000.25\n          }\n        ],\n        \"summary\": {\n          \"wastedBytes\": 34240.43125\n        }\n      }\n    },\n    \"total-byte-weight\": {\n      \"id\": \"total-byte-weight\",\n      \"title\": \"Avoids enormous network payloads\",\n      \"description\": \"Large network payloads cost users real money and are highly correlated with long load times. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/network-payloads).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 43337,\n      \"displayValue\": [\n        \"Total size was %d KB\",\n        42.3212890625\n      ],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"url\",\n            \"itemType\": \"url\",\n            \"text\": \"URL\"\n          },\n          {\n            \"key\": \"totalBytes\",\n            \"itemType\": \"bytes\",\n            \"displayUnit\": \"kb\",\n            \"granularity\": 1,\n            \"text\": \"Total Size\"\n          },\n          {\n            \"key\": \"totalMs\",\n            \"itemType\": \"ms\",\n            \"text\": \"Transfer Time\"\n          }\n        ],\n        \"items\": [\n          {\n            \"url\": \"https://www.googletagmanager.com/gtag/js?id=UA-28740874-1\",\n            \"totalBytes\": 26003,\n            \"totalMs\": 16.873719142199565\n          },\n          {\n            \"url\": \"https://www.google-analytics.com/analytics.js\",\n            \"totalBytes\": 14667,\n            \"totalMs\": 9.517626376135102\n          },\n          {\n            \"url\": \"https://emanuelemazzotta.com/\",\n            \"totalBytes\": 2468,\n            \"totalMs\": 1.601520549280796\n          },\n          {\n            \"url\": \"https://www.google-analytics.com/r/collect?v=1&_v=j68&a=143759676&t=pageview&_s=1&dl=https%3A%2F%2Femanuelemazzotta.com%2F&ul=en-us&de=UTF-8&dt=Emanuele%20Mazzotta%20-%20Software%20Engineer&sd=24-bit&sr=412x732&vp=412x732&je=0&_u=IEBAAUAB~&jid=129511976&gjid=30143490&cid=1607040886.1536485510&tid=UA-28740874-1&_gid=1881346217.1536485510&_r=1&gtm=u8o&z=284877343\",\n            \"totalBytes\": 199,\n            \"totalMs\": 0.1291339502864175\n          }\n        ]\n      }\n    },\n    \"offscreen-images\": {\n      \"id\": \"offscreen-images\",\n      \"title\": \"Defer offscreen images\",\n      \"description\": \"Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"render-blocking-resources\": {\n      \"id\": \"render-blocking-resources\",\n      \"title\": \"Eliminate render-blocking resources\",\n      \"description\": \"Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0\n      }\n    },\n    \"unminified-css\": {\n      \"id\": \"unminified-css\",\n      \"title\": \"Minify CSS\",\n      \"description\": \"Minifying CSS files can reduce network payload sizes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/minify-css).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"unminified-javascript\": {\n      \"id\": \"unminified-javascript\",\n      \"title\": \"Minify JavaScript\",\n      \"description\": \"Minifying JavaScript files can reduce payload sizes and script parse time. [Learn more](https://developers.google.com/speed/docs/insights/MinifyResources).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"unused-css-rules\": {\n      \"id\": \"unused-css-rules\",\n      \"title\": \"Defer unused CSS\",\n      \"description\": \"Remove unused rules from stylesheets to reduce unnecessary bytes consumed by network activity. [Learn more](https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"uses-webp-images\": {\n      \"id\": \"uses-webp-images\",\n      \"title\": \"Serve images in next-gen formats\",\n      \"description\": \"Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/webp).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"uses-optimized-images\": {\n      \"id\": \"uses-optimized-images\",\n      \"title\": \"Efficiently encode images\",\n      \"description\": \"Optimized images load faster and consume less cellular data. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/optimize-images).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"uses-text-compression\": {\n      \"id\": \"uses-text-compression\",\n      \"title\": \"Enable text compression\",\n      \"description\": \"Text-based responses should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/text-compression).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"uses-responsive-images\": {\n      \"id\": \"uses-responsive-images\",\n      \"title\": \"Properly size images\",\n      \"description\": \"Serve images that are appropriately-sized to save cellular data and improve load time. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/oversized-images).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"efficient-animated-content\": {\n      \"id\": \"efficient-animated-content\",\n      \"title\": \"Use video formats for animated content\",\n      \"description\": \"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 0,\n      \"displayValue\": \"\",\n      \"details\": {\n        \"type\": \"opportunity\",\n        \"headings\": [],\n        \"items\": [],\n        \"overallSavingsMs\": 0,\n        \"overallSavingsBytes\": 0\n      }\n    },\n    \"appcache-manifest\": {\n      \"id\": \"appcache-manifest\",\n      \"title\": \"Avoids Application Cache\",\n      \"description\": \"Application Cache is deprecated. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/appcache).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"displayValue\": \"\"\n    },\n    \"doctype\": {\n      \"id\": \"doctype\",\n      \"title\": \"Page has the HTML doctype\",\n      \"description\": \"Specifying a doctype prevents the browser from switching to quirks-mode.Read more on the [MDN Web Docs page](https://developer.mozilla.org/en-US/docs/Glossary/Doctype)\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"dom-size\": {\n      \"id\": \"dom-size\",\n      \"title\": \"Avoids an excessive DOM size\",\n      \"description\": \"Browser engineers recommend pages contain fewer than ~1,500 DOM nodes. The sweet spot is a tree depth < 32 elements and fewer than 60 children/parent element. A large DOM can increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://developers.google.com/web/tools/lighthouse/audits/dom-size).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"numeric\",\n      \"rawValue\": 44,\n      \"displayValue\": [\n        \"%d nodes\",\n        44\n      ],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"totalNodes\",\n            \"itemType\": \"text\",\n            \"text\": \"Total DOM Nodes\"\n          },\n          {\n            \"key\": \"depth\",\n            \"itemType\": \"text\",\n            \"text\": \"Maximum DOM Depth\"\n          },\n          {\n            \"key\": \"width\",\n            \"itemType\": \"text\",\n            \"text\": \"Maximum Children\"\n          }\n        ],\n        \"items\": [\n          {\n            \"totalNodes\": \"44\",\n            \"depth\": \"6\",\n            \"width\": \"17\"\n          },\n          {\n            \"totalNodes\": \"\",\n            \"depth\": {\n              \"type\": \"code\",\n              \"value\": \"<a rel=\\\"noopener noreferrer\\\" target=\\\"_blank\\\" href=\\\"https://squido.ch\\\">\"\n            },\n            \"width\": {\n              \"type\": \"code\",\n              \"value\": \"<head>\"\n            }\n          }\n        ]\n      }\n    },\n    \"external-anchors-use-rel-noopener\": {\n      \"id\": \"external-anchors-use-rel-noopener\",\n      \"title\": \"Links to cross-origin destinations are safe\",\n      \"description\": \"Add `rel=\\\"noopener\\\"` or `rel=\\\"noreferrer\\\"` to any external links to improve performance and prevent security vulnerabilities. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/noopener).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"warnings\": [],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"geolocation-on-start\": {\n      \"id\": \"geolocation-on-start\",\n      \"title\": \"Avoids requesting the geolocation permission on page load\",\n      \"description\": \"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to user gestures instead. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/geolocation-on-load).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"no-document-write\": {\n      \"id\": \"no-document-write\",\n      \"title\": \"Avoids `document.write()`\",\n      \"description\": \"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/document-write).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"no-vulnerable-libraries\": {\n      \"id\": \"no-vulnerable-libraries\",\n      \"title\": \"Avoids front-end JavaScript libraries with known security vulnerabilities\",\n      \"description\": \"Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/vulnerabilities).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"no-websql\": {\n      \"id\": \"no-websql\",\n      \"title\": \"Avoids WebSQL DB\",\n      \"description\": \"Web SQL is deprecated. Consider using IndexedDB instead. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/web-sql).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"displayValue\": \"\"\n    },\n    \"notification-on-start\": {\n      \"id\": \"notification-on-start\",\n      \"title\": \"Avoids requesting the notification permission on page load\",\n      \"description\": \"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/notifications-on-load).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"password-inputs-can-be-pasted-into\": {\n      \"id\": \"password-inputs-can-be-pasted-into\",\n      \"title\": \"Allows users to paste into password fields\",\n      \"description\": \"Preventing password pasting undermines good security policy. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/password-pasting).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"uses-http2\": {\n      \"id\": \"uses-http2\",\n      \"title\": \"Does not use HTTP/2 for all of its resources\",\n      \"description\": \"HTTP/2 offers many benefits over HTTP/1.1, including binary headers, multiplexing, and server push. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/http2).\",\n      \"score\": 0,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": false,\n      \"displayValue\": \"1 request not served via HTTP/2\",\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"url\",\n            \"itemType\": \"url\",\n            \"text\": \"URL\"\n          },\n          {\n            \"key\": \"protocol\",\n            \"itemType\": \"text\",\n            \"text\": \"Protocol\"\n          }\n        ],\n        \"items\": [\n          {\n            \"protocol\": \"http/1.1\",\n            \"url\": \"https://emanuelemazzotta.com/\"\n          }\n        ]\n      }\n    },\n    \"uses-passive-event-listeners\": {\n      \"id\": \"uses-passive-event-listeners\",\n      \"title\": \"Uses passive listeners to improve scrolling performance\",\n      \"description\": \"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/passive-event-listeners).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"meta-description\": {\n      \"id\": \"meta-description\",\n      \"title\": \"Document has a meta description\",\n      \"description\": \"Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/description).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"http-status-code\": {\n      \"id\": \"http-status-code\",\n      \"title\": \"Page has successful HTTP status code\",\n      \"description\": \"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/successful-http-code).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true\n    },\n    \"font-size\": {\n      \"id\": \"font-size\",\n      \"title\": \"Document uses legible font sizes\",\n      \"description\": \"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/font-sizes).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"displayValue\": [\n        \"%.1d% legible text\",\n        100\n      ],\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [\n          {\n            \"key\": \"source\",\n            \"itemType\": \"url\",\n            \"text\": \"Source\"\n          },\n          {\n            \"key\": \"selector\",\n            \"itemType\": \"code\",\n            \"text\": \"Selector\"\n          },\n          {\n            \"key\": \"coverage\",\n            \"itemType\": \"text\",\n            \"text\": \"% of Page Text\"\n          },\n          {\n            \"key\": \"fontSize\",\n            \"itemType\": \"text\",\n            \"text\": \"Font Size\"\n          }\n        ],\n        \"items\": [\n          {\n            \"source\": \"Legible text\",\n            \"selector\": \"\",\n            \"coverage\": \"100.00%\",\n            \"fontSize\": \"≥ 12px\"\n          }\n        ]\n      }\n    },\n    \"link-text\": {\n      \"id\": \"link-text\",\n      \"title\": \"Links have descriptive text\",\n      \"description\": \"Descriptive link text helps search engines understand your content. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/descriptive-link-text).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": [],\n        \"summary\": {}\n      }\n    },\n    \"is-crawlable\": {\n      \"id\": \"is-crawlable\",\n      \"title\": \"Page isn’t blocked from indexing\",\n      \"description\": \"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/indexing).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"robots-txt\": {\n      \"id\": \"robots-txt\",\n      \"title\": \"robots.txt is valid\",\n      \"description\": \"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed.\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": [],\n        \"summary\": {}\n      }\n    },\n    \"hreflang\": {\n      \"id\": \"hreflang\",\n      \"title\": \"Document has a valid `hreflang`\",\n      \"description\": \"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/hreflang).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"plugins\": {\n      \"id\": \"plugins\",\n      \"title\": \"Document avoids plugins\",\n      \"description\": \"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/plugins).\",\n      \"score\": 1,\n      \"scoreDisplayMode\": \"binary\",\n      \"rawValue\": true,\n      \"details\": {\n        \"type\": \"table\",\n        \"headings\": [],\n        \"items\": []\n      }\n    },\n    \"canonical\": {\n      \"id\": \"canonical\",\n      \"title\": \"Document has a valid `rel=canonical`\",\n      \"description\": \"Canonical links suggest which URL to show in search results. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/canonical).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"not-applicable\",\n      \"rawValue\": true\n    },\n    \"mobile-friendly\": {\n      \"id\": \"mobile-friendly\",\n      \"title\": \"Page is mobile friendly\",\n      \"description\": \"Take the [Mobile-Friendly Test](https://search.google.com/test/mobile-friendly) to check for audits not covered by Lighthouse, like sizing tap targets appropriately. [Learn more](https://developers.google.com/search/mobile-sites/).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    },\n    \"structured-data\": {\n      \"id\": \"structured-data\",\n      \"title\": \"Structured data is valid\",\n      \"description\": \"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more](https://developers.google.com/search/docs/guides/mark-up-content).\",\n      \"score\": null,\n      \"scoreDisplayMode\": \"manual\",\n      \"rawValue\": false\n    }\n  },\n  \"configSettings\": {\n    \"output\": [\n      \"json\"\n    ],\n    \"maxWaitForLoad\": 45000,\n    \"throttlingMethod\": \"simulate\",\n    \"throttling\": {\n      \"rttMs\": 150,\n      \"throughputKbps\": 1638.4,\n      \"requestLatencyMs\": 562.5,\n      \"downloadThroughputKbps\": 1474.5600000000002,\n      \"uploadThroughputKbps\": 675,\n      \"cpuSlowdownMultiplier\": 4\n    },\n    \"auditMode\": false,\n    \"gatherMode\": false,\n    \"disableStorageReset\": false,\n    \"disableDeviceEmulation\": false,\n    \"blockedUrlPatterns\": null,\n    \"additionalTraceCategories\": null,\n    \"extraHeaders\": null,\n    \"onlyAudits\": null,\n    \"onlyCategories\": null,\n    \"skipAudits\": null\n  },\n  \"categories\": {\n    \"performance\": {\n      \"title\": \"Performance\",\n      \"auditRefs\": [\n        {\n          \"id\": \"first-contentful-paint\",\n          \"weight\": 3,\n          \"group\": \"metrics\"\n        },\n        {\n          \"id\": \"first-meaningful-paint\",\n          \"weight\": 1,\n          \"group\": \"metrics\"\n        },\n        {\n          \"id\": \"speed-index\",\n          \"weight\": 4,\n          \"group\": \"metrics\"\n        },\n        {\n          \"id\": \"interactive\",\n          \"weight\": 5,\n          \"group\": \"metrics\"\n        },\n        {\n          \"id\": \"first-cpu-idle\",\n          \"weight\": 2,\n          \"group\": \"metrics\"\n        },\n        {\n          \"id\": \"estimated-input-latency\",\n          \"weight\": 0,\n          \"group\": \"metrics\"\n        },\n        {\n          \"id\": \"render-blocking-resources\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"uses-responsive-images\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"offscreen-images\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"unminified-css\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"unminified-javascript\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"unused-css-rules\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"uses-optimized-images\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"uses-webp-images\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"uses-text-compression\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"uses-rel-preconnect\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"time-to-first-byte\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"redirects\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"uses-rel-preload\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"efficient-animated-content\",\n          \"weight\": 0,\n          \"group\": \"load-opportunities\"\n        },\n        {\n          \"id\": \"total-byte-weight\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"uses-long-cache-ttl\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"dom-size\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"critical-request-chains\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"network-requests\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"metrics\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"user-timings\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"bootup-time\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"screenshot-thumbnails\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"mainthread-work-breakdown\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        },\n        {\n          \"id\": \"font-display\",\n          \"weight\": 0,\n          \"group\": \"diagnostics\"\n        }\n      ],\n      \"id\": \"performance\",\n      \"score\": 0.98\n    },\n    \"pwa\": {\n      \"title\": \"Progressive Web App\",\n      \"description\": \"These checks validate the aspects of a Progressive Web App, as specified by the baseline [PWA Checklist](https://developers.google.com/web/progressive-web-apps/checklist).\",\n      \"manualDescription\": \"These checks are required by the baseline [PWA Checklist](https://developers.google.com/web/progressive-web-apps/checklist) but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.\",\n      \"auditRefs\": [\n        {\n          \"id\": \"load-fast-enough-for-pwa\",\n          \"weight\": 7\n        },\n        {\n          \"id\": \"works-offline\",\n          \"weight\": 5\n        },\n        {\n          \"id\": \"webapp-install-banner\",\n          \"weight\": 3\n        },\n        {\n          \"id\": \"is-on-https\",\n          \"weight\": 2\n        },\n        {\n          \"id\": \"redirects-http\",\n          \"weight\": 2\n        },\n        {\n          \"id\": \"viewport\",\n          \"weight\": 2\n        },\n        {\n          \"id\": \"service-worker\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"without-javascript\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"splash-screen\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"themed-omnibox\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"content-width\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"manifest-short-name-length\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"pwa-cross-browser\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"pwa-page-transitions\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"pwa-each-page-has-url\",\n          \"weight\": 0\n        }\n      ],\n      \"id\": \"pwa\",\n      \"score\": 0.85\n    },\n    \"accessibility\": {\n      \"title\": \"Accessibility\",\n      \"description\": \"These checks highlight opportunities to [improve the accessibility of your web app](https://developers.google.com/web/fundamentals/accessibility). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.\",\n      \"manualDescription\": \"These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://developers.google.com/web/fundamentals/accessibility/how-to-review).\",\n      \"auditRefs\": [\n        {\n          \"id\": \"accesskeys\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"aria-allowed-attr\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"aria-required-attr\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"aria-required-children\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"aria-required-parent\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"aria-roles\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"aria-valid-attr-value\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"aria-valid-attr\",\n          \"weight\": 0,\n          \"group\": \"a11y-aria\"\n        },\n        {\n          \"id\": \"audio-caption\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"button-name\",\n          \"weight\": 0,\n          \"group\": \"a11y-element-names\"\n        },\n        {\n          \"id\": \"bypass\",\n          \"weight\": 10,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"color-contrast\",\n          \"weight\": 6,\n          \"group\": \"a11y-color-contrast\"\n        },\n        {\n          \"id\": \"definition-list\",\n          \"weight\": 0,\n          \"group\": \"a11y-well-structured\"\n        },\n        {\n          \"id\": \"dlitem\",\n          \"weight\": 0,\n          \"group\": \"a11y-well-structured\"\n        },\n        {\n          \"id\": \"document-title\",\n          \"weight\": 2,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"duplicate-id\",\n          \"weight\": 0,\n          \"group\": \"a11y-well-structured\"\n        },\n        {\n          \"id\": \"frame-title\",\n          \"weight\": 0,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"html-has-lang\",\n          \"weight\": 4,\n          \"group\": \"a11y-language\"\n        },\n        {\n          \"id\": \"html-lang-valid\",\n          \"weight\": 1,\n          \"group\": \"a11y-language\"\n        },\n        {\n          \"id\": \"image-alt\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"input-image-alt\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"label\",\n          \"weight\": 0,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"layout-table\",\n          \"weight\": 0,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"link-name\",\n          \"weight\": 9,\n          \"group\": \"a11y-element-names\"\n        },\n        {\n          \"id\": \"list\",\n          \"weight\": 5,\n          \"group\": \"a11y-well-structured\"\n        },\n        {\n          \"id\": \"listitem\",\n          \"weight\": 4,\n          \"group\": \"a11y-well-structured\"\n        },\n        {\n          \"id\": \"meta-refresh\",\n          \"weight\": 0,\n          \"group\": \"a11y-meta\"\n        },\n        {\n          \"id\": \"meta-viewport\",\n          \"weight\": 3,\n          \"group\": \"a11y-meta\"\n        },\n        {\n          \"id\": \"object-alt\",\n          \"weight\": 0,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"tabindex\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"td-headers-attr\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"th-has-data-cells\",\n          \"weight\": 0,\n          \"group\": \"a11y-correct-attributes\"\n        },\n        {\n          \"id\": \"valid-lang\",\n          \"weight\": 0,\n          \"group\": \"a11y-language\"\n        },\n        {\n          \"id\": \"video-caption\",\n          \"weight\": 0,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"video-description\",\n          \"weight\": 0,\n          \"group\": \"a11y-describe-contents\"\n        },\n        {\n          \"id\": \"logical-tab-order\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"focusable-controls\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"managed-focus\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"focus-traps\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"custom-controls-labels\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"custom-controls-roles\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"visual-order-follows-dom\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"offscreen-content-hidden\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"heading-levels\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"use-landmarks\",\n          \"weight\": 0\n        }\n      ],\n      \"id\": \"accessibility\",\n      \"score\": 1\n    },\n    \"best-practices\": {\n      \"title\": \"Best Practices\",\n      \"auditRefs\": [\n        {\n          \"id\": \"appcache-manifest\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"no-websql\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"is-on-https\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"uses-http2\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"uses-passive-event-listeners\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"no-document-write\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"external-anchors-use-rel-noopener\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"geolocation-on-start\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"doctype\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"no-vulnerable-libraries\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"notification-on-start\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"deprecations\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"password-inputs-can-be-pasted-into\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"errors-in-console\",\n          \"weight\": 1\n        },\n        {\n          \"id\": \"image-aspect-ratio\",\n          \"weight\": 1\n        }\n      ],\n      \"id\": \"best-practices\",\n      \"score\": 0.93\n    },\n    \"seo\": {\n      \"title\": \"SEO\",\n      \"description\": \"These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. [Learn more](https://support.google.com/webmasters/answer/35769).\",\n      \"manualDescription\": \"Run these additional validators on your site to check additional SEO best practices.\",\n      \"auditRefs\": [\n        {\n          \"id\": \"viewport\",\n          \"weight\": 1,\n          \"group\": \"seo-mobile\"\n        },\n        {\n          \"id\": \"document-title\",\n          \"weight\": 1,\n          \"group\": \"seo-content\"\n        },\n        {\n          \"id\": \"meta-description\",\n          \"weight\": 1,\n          \"group\": \"seo-content\"\n        },\n        {\n          \"id\": \"http-status-code\",\n          \"weight\": 1,\n          \"group\": \"seo-crawl\"\n        },\n        {\n          \"id\": \"link-text\",\n          \"weight\": 1,\n          \"group\": \"seo-content\"\n        },\n        {\n          \"id\": \"is-crawlable\",\n          \"weight\": 1,\n          \"group\": \"seo-crawl\"\n        },\n        {\n          \"id\": \"robots-txt\",\n          \"weight\": 1,\n          \"group\": \"seo-crawl\"\n        },\n        {\n          \"id\": \"hreflang\",\n          \"weight\": 1,\n          \"group\": \"seo-content\"\n        },\n        {\n          \"id\": \"canonical\",\n          \"weight\": 0,\n          \"group\": \"seo-content\"\n        },\n        {\n          \"id\": \"font-size\",\n          \"weight\": 1,\n          \"group\": \"seo-mobile\"\n        },\n        {\n          \"id\": \"plugins\",\n          \"weight\": 1,\n          \"group\": \"seo-content\"\n        },\n        {\n          \"id\": \"mobile-friendly\",\n          \"weight\": 0\n        },\n        {\n          \"id\": \"structured-data\",\n          \"weight\": 0\n        }\n      ],\n      \"id\": \"seo\",\n      \"score\": 1\n    }\n  },\n  \"categoryGroups\": {\n    \"metrics\": {\n      \"title\": \"Metrics\"\n    },\n    \"load-opportunities\": {\n      \"title\": \"Opportunities\",\n      \"description\": \"These are opportunities to speed up your application by optimizing the following resources.\"\n    },\n    \"diagnostics\": {\n      \"title\": \"Diagnostics\",\n      \"description\": \"More information about the performance of your application.\"\n    },\n    \"a11y-color-contrast\": {\n      \"title\": \"Color Contrast Is Satisfactory\",\n      \"description\": \"These are opportunities to improve the legibility of your content.\"\n    },\n    \"a11y-describe-contents\": {\n      \"title\": \"Elements Describe Contents Well\",\n      \"description\": \"These are opportunities to make your content easier to understand for a user of assistive technology, like a screen reader.\"\n    },\n    \"a11y-well-structured\": {\n      \"title\": \"Elements Are Well Structured\",\n      \"description\": \"These are opportunities to make sure your HTML is appropriately structured.\"\n    },\n    \"a11y-aria\": {\n      \"title\": \"ARIA Attributes Follow Best Practices\",\n      \"description\": \"These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.\"\n    },\n    \"a11y-correct-attributes\": {\n      \"title\": \"Elements Use Attributes Correctly\",\n      \"description\": \"These are opportunities to improve the configuration of your HTML elements.\"\n    },\n    \"a11y-element-names\": {\n      \"title\": \"Elements Have Discernible Names\",\n      \"description\": \"These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.\"\n    },\n    \"a11y-language\": {\n      \"title\": \"Page Specifies Valid Language\",\n      \"description\": \"These are opportunities to improve the interpretation of your content by users in different locales.\"\n    },\n    \"a11y-meta\": {\n      \"title\": \"Meta Tags Used Properly\",\n      \"description\": \"These are opportunities to improve the user experience of your site.\"\n    },\n    \"seo-mobile\": {\n      \"title\": \"Mobile Friendly\",\n      \"description\": \"Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn more](https://developers.google.com/search/mobile-sites/).\"\n    },\n    \"seo-content\": {\n      \"title\": \"Content Best Practices\",\n      \"description\": \"Format your HTML in a way that enables crawlers to better understand your app’s content.\"\n    },\n    \"seo-crawl\": {\n      \"title\": \"Crawling and Indexing\",\n      \"description\": \"To appear in search results, crawlers need access to your app.\"\n    }\n  },\n  \"timing\": {\n    \"total\": 7810\n  }\n}"
  },
  {
    "path": "eslint.config.js",
    "content": "import eslint from '@eslint/js';\nimport tseslint from '@typescript-eslint/eslint-plugin';\nimport tsparser from '@typescript-eslint/parser';\nimport globals from 'globals';\n\nexport default [\n  {\n    ignores: [\"coverage/\", \"dist/\", \".idea/\", \"node_modules/\"]\n  },\n  eslint.configs.recommended,\n  {\n    files: [\"**/*.ts\", \"**/*.js\"],\n    languageOptions: {\n      globals: {\n        ...globals.node,\n      },\n    },\n  },\n  {\n    files: [\"**/*.ts\"],\n    languageOptions: {\n      parser: tsparser,\n      parserOptions: {\n        ecmaVersion: 2022,\n        sourceType: \"module\",\n      },\n      globals: {\n        ...globals.node,\n      },\n    },\n    plugins: {\n      \"@typescript-eslint\": tseslint,\n    },\n    rules: {\n      ...tseslint.configs.recommended.rules,\n      \"no-underscore-dangle\": [\"warn\", { \"allow\": [\"__filename\", \"__dirname\"] }],\n      \"@typescript-eslint/no-unused-vars\": [\"error\", { \"argsIgnorePattern\": \"^_\" }],\n      \"no-undef\": \"off\",\n    },\n  },\n  {\n    files: [\"**/__tests__/**/*.ts\", \"**/*.test.ts\", \"**/*.spec.ts\"],\n    languageOptions: {\n      globals: {\n        ...globals.node,\n      },\n    },\n  },\n  {\n    files: [\"**/*.js\"],\n    rules: {\n      \"no-underscore-dangle\": [\"warn\", { \"allow\": [\"__filename\", \"__dirname\"] }],\n      \"no-undef\": \"off\",\n    },\n  }\n];\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@emazzotta/lighthouse-badges\",\n  \"version\": \"1.5.4\",\n  \"description\": \"🚦Generate gh-badges (shields.io) based on Lighthouse performance.\",\n  \"main\": \"dist/src/index.js\",\n  \"bin\": {\n    \"lighthouse-badges\": \"dist/src/index.js\"\n  },\n  \"type\": \"module\",\n  \"scripts\": {\n    \"app:install\": \"bun run build && scripts/util.sh install\",\n    \"app:reinstall\": \"bun run app:uninstall && bun run app:install\",\n    \"app:uninstall\": \"scripts/util.sh uninstall\",\n    \"build\": \"bun run build:prepare && bun run build:compile && bun run build:copy-declarations && chmod +x dist/src/index.js\",\n    \"build:compile\": \"tsc\",\n    \"build:copy-declarations\": \"cp src/*.d.ts dist/src/ 2>/dev/null || true\",\n    \"build:prepare\": \"bun run clean && mkdir -p dist && jq '.main = \\\"src/index.js\\\" | .bin[\\\"lighthouse-badges\\\"] = \\\"src/index.js\\\"' package.json > dist/package.json && cp README.md LICENSE.md bun.lock dist/\",\n    \"ci:publish\": \"bun run build && cd dist && npm publish\",\n    \"clean\": \"rm -rf *.svg *.html coverage dist results\",\n    \"docker:build\": \"bun run build && docker build --build-arg VCS_REF=`git rev-parse --short HEAD` --build-arg BUILD_DATE=`date -u +\\\"%Y-%m-%dT%H:%M:%SZ\\\"` --build-arg VERSION=latest -t emazzotta/lighthouse-badges .\",\n    \"docker:system-test:run\": \"docker run emazzotta/lighthouse-badges /bin/sh -c 'lighthouse-badges -rsu https://google.com && cd /home/lighthouse && EXEC_PATH=/home/chrome/reports bun run system-test:verify'\",\n    \"lint\": \"bunx eslint .\",\n    \"lint:fix\": \"bunx eslint --fix .\",\n    \"pre-push\": \"bun run lint:fix && bun run test:all\",\n    \"run:global\": \"[ -z ${PAGE} ] && PAGE=https://google.com ; lighthouse-badges -rsu ${PAGE} -o results\",\n    \"run:local\": \"[ -z ${PAGE} ] && PAGE=https://google.com ; bun dist/src/index.js -rsu ${PAGE} -o results\",\n    \"start\": \"bun run build && bun run run:local\",\n    \"system-test:full-run\": \"bun run clean && bun run build && bun run app:reinstall && bun run run:global && bun run system-test:verify\",\n    \"system-test:light-run\": \"bun run clean && bun run build && bun run run:local && bun run system-test:verify\",\n    \"system-test:verify\": \"[ -z ${EXEC_PATH} ] && EXEC_PATH=$PWD/results ; grep -q '<svg xmlns' ${EXEC_PATH}/*.svg && grep -q '<title>Lighthouse Report</title>' ${EXEC_PATH}/*.html\",\n    \"test\": \"bun test\",\n    \"test:coverage\": \"bun test --coverage --coverage-reporter=lcov --coverage-dir=coverage\",\n    \"test:all\": \"bun run test && bun run system-test:full-run\",\n    \"upgrade\": \"bunx npm-check-updates -i && bun install && bun update && bun run pre-push\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"lint-staged\"\n    }\n  },\n  \"lint-staged\": {\n    \"*.{js,ts}\": [\n      \"bun run lint:fix\",\n      \"bun run test\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/emazzotta/lighthouse-badges.git\"\n  },\n  \"dependencies\": {\n    \"argparse\": \"2.0.1\",\n    \"badge-maker\": \"^5.0.2\",\n    \"chrome-launcher\": \"1.2.1\",\n    \"clui\": \"^0.3.6\",\n    \"lighthouse\": \"^13.1.0\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"^10.0.1\",\n    \"@types/argparse\": \"^2.0.17\",\n    \"@types/node\": \"^25.6.0\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.59.1\",\n    \"@typescript-eslint/parser\": \"^8.59.1\",\n    \"eslint\": \"^10.2.1\",\n    \"globals\": \"^17.5.0\",\n    \"husky\": \"^9.1.7\",\n    \"lint-staged\": \"^16.4.0\",\n    \"typescript\": \"^6.0.3\"\n  },\n  \"engines\": {\n    \"bun\": \">=1.0.0\"\n  },\n  \"private\": false,\n  \"author\": \"Emanuele Mazzotta\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "scripts/util.sh",
    "content": "#!/bin/bash\nset -euo pipefail\n\nreadonly PACKAGE_NAMES=(\"@emazzotta/lighthouse-badges\" \"lighthouse-badges\")\n\nPROJECT_ROOT=\"$(cd \"$(dirname \"$0\")/..\" && pwd)\"\nreadonly PROJECT_ROOT\n\ninstall_global() {\n    cd \"$PROJECT_ROOT/dist\"\n    bun link\n}\n\nuninstall_global() {\n    local name\n    for name in \"${PACKAGE_NAMES[@]}\"; do\n        bun uninstall -g \"$name\" 2>/dev/null || true\n    done\n}\n\npublish_if_new() {\n    local registry=\"${1:-}\"\n    if [ -z \"$registry\" ]; then\n        echo \"Usage: $(basename \"$0\") publish-if-new <registry>\" >&2\n        exit 1\n    fi\n\n    cd \"$PROJECT_ROOT\"\n    local name version remote\n    name=$(jq -r '.name' package.json)\n    version=$(jq -r '.version' package.json)\n    remote=$(npm show \"$name\" version 2>/dev/null || echo '')\n\n    if [ \"$remote\" = \"$version\" ]; then\n        echo \"${name}@${version} already published to ${registry}\"\n        return 0\n    fi\n\n    echo \"Publishing ${name}@${version} to ${registry}...\"\n    bun run ci:publish\n}\n\nusage() {\n    cat >&2 <<EOF\nUsage: $(basename \"$0\") <command> [args...]\n\nCommands:\n  install                    Install the built package globally via bun\n  uninstall                  Uninstall all global lighthouse-badges packages\n  publish-if-new <registry>  Publish to <registry> if version differs from remote\nEOF\n    exit 1\n}\n\nmain() {\n    local cmd=\"${1:-}\"\n    shift || true\n    case \"$cmd\" in\n        install)        install_global ;;\n        uninstall)      uninstall_global ;;\n        publish-if-new) publish_if_new \"$@\" ;;\n        *)              usage ;;\n    esac\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "src/argparser.ts",
    "content": "import { ArgumentParser } from 'argparse';\nimport packageJson from '../package.json' with { type: 'json' };\nimport type { ParsedArgs, BadgeStyle } from './types.js';\n\nconst BADGE_STYLES: readonly BadgeStyle[] = [\n  'flat',\n  'flat-square',\n  'plastic',\n  'for-the-badge',\n  'social',\n];\n\nconst parser = new ArgumentParser({\n  description: 'Generate gh-badges (shields.io) based on lighthouse performance.',\n  add_help: true,\n});\n\nparser.add_argument('-v', '--version', {\n  action: 'version',\n  version: packageJson.version,\n  help: 'Show the version of the tool',\n});\n\nparser.add_argument('-s', '--single-badge', {\n  action: 'store_true',\n  help: \"Output only one single badge averaging all lighthouse categories' scores\",\n});\n\nparser.add_argument('-b', '--badge-style', {\n  action: 'store',\n  choices: [...BADGE_STYLES],\n  default: 'flat',\n  help: 'Define look and feel for the badge',\n});\n\nparser.add_argument('-o', '--output-path', {\n  action: 'store',\n  help: 'Define output path for artifacts',\n});\n\nparser.add_argument('-r', '--save-report', {\n  action: 'store_true',\n  help: 'Save lighthouse report as html for every supplied url',\n});\n\nparser\n  .add_argument_group({ title: 'Required arguments' })\n  .add_argument('-u', '--url', {\n    action: 'store',\n    required: true,\n    help: 'The lighthouse badge(s) will contain the score(s) of the supplied url',\n  });\n\nexport default {\n  parse_args: (args?: string[]): ParsedArgs => parser.parse_args(args) as unknown as ParsedArgs,\n};\n"
  },
  {
    "path": "src/calculations.ts",
    "content": "import type { LighthouseMetrics } from './types.js';\n\nconst COLOR_THRESHOLDS: ReadonlyArray<readonly [number, string]> = [\n  [95, 'brightgreen'],\n  [90, 'green'],\n  [75, 'yellowgreen'],\n  [60, 'yellow'],\n  [40, 'orange'],\n];\n\nconst sum = (values: number[]): number => values.reduce((a, b) => a + b, 0);\n\nconst average = (values: number[]): number => Math.round(sum(values) / values.length);\n\nexport const percentageToColor = (percentage: number): string =>\n  COLOR_THRESHOLDS.find(([threshold]) => percentage >= threshold)?.[1] ?? 'red';\n\nexport const getAverageScore = (metrics: LighthouseMetrics[]): LighthouseMetrics => {\n  const [head] = metrics;\n  if (!head) return {};\n\n  return Object.fromEntries(\n    Object.keys(head).map((category) => [category, average(metrics.map((m) => m[category] ?? 0))]),\n  );\n};\n\nexport const getSquashedScore = (metrics: LighthouseMetrics[]): LighthouseMetrics => {\n  const allScores = metrics.flatMap((m) => Object.values(m));\n  return { lighthouse: allScores.length === 0 ? 0 : average(allScores) };\n};\n"
  },
  {
    "path": "src/clui.d.ts",
    "content": "declare module 'clui' {\n  export class Spinner {\n    constructor(message: string, frames: string[]);\n    start(): void;\n    stop(): void;\n  }\n}\n\n"
  },
  {
    "path": "src/index.ts",
    "content": "#!/usr/bin/env node\n\nimport handleUserInput from './main.js';\nimport CLI from 'clui';\n\nconst spinner = new CLI.Spinner('Running Lighthouse, please wait...', ['◜', '◠', '◝', '◞', '◡', '◟']);\nawait handleUserInput(spinner);\n"
  },
  {
    "path": "src/lighthouse-badges.ts",
    "content": "import path from 'path';\nimport fs from 'fs/promises';\nimport { makeBadge } from 'badge-maker';\nimport lighthouse from 'lighthouse/core/index.cjs';\nimport { urlEscaper } from './util.js';\nimport { getAverageScore, getSquashedScore, percentageToColor } from './calculations.js';\nimport type {\n  LighthouseMetrics,\n  LighthouseReport,\n  ProcessedLighthouseResult,\n  LighthouseConfig,\n  LighthouseLHR,\n  ParsedArgs,\n  BadgeStyle,\n} from './types.js';\n\nconst CHROME_FLAGS = [\n  '--headless',\n  '--no-sandbox',\n  '--disable-gpu',\n  '--disable-dev-shm-usage',\n  '--no-default-browser-check',\n  '--no-first-run',\n  '--disable-default-apps',\n];\n\nconst saveBadge = async (\n  outputPath: string,\n  metricKey: string,\n  score: number,\n  badgeStyle: BadgeStyle,\n): Promise<void> => {\n  const filepath = path.join(outputPath, `${metricKey.replace(/ /g, '_')}.svg`);\n  const svg = makeBadge({\n    label: metricKey,\n    message: `${score}%`,\n    color: percentageToColor(score),\n    style: badgeStyle,\n  });\n  await fs.writeFile(filepath, svg);\n  process.stdout.write(`Saved svg to ${filepath}\\n`);\n};\n\nexport const metricsToSvg = async (\n  metrics: LighthouseMetrics,\n  badgeStyle: BadgeStyle,\n  outputPath: string,\n): Promise<void> => {\n  await Promise.all(\n    Object.entries(metrics).map(([key, score]) => saveBadge(outputPath, key, score, badgeStyle)),\n  );\n};\n\nconst saveHtmlReport = async (outputPath: string, url: string, html: string): Promise<void> => {\n  const filepath = path.join(outputPath, `${urlEscaper(url)}.html`);\n  await fs.writeFile(filepath, html);\n  process.stdout.write(`Saved report to ${filepath}\\n`);\n};\n\nexport const htmlReportsToFile = async (\n  htmlReports: LighthouseReport[],\n  outputPath: string,\n): Promise<void> => {\n  await Promise.all(\n    htmlReports.flatMap((report) =>\n      Object.entries(report).flatMap(([url, content]) =>\n        typeof content === 'string' ? [saveHtmlReport(outputPath, url, content)] : [],\n      ),\n    ),\n  );\n};\n\nexport const processRawLighthouseResult = (\n  lhr: LighthouseLHR,\n  html: string,\n  url: string,\n  shouldSaveReport: boolean,\n): ProcessedLighthouseResult => ({\n  metrics: Object.fromEntries(\n    Object.entries(lhr.categories).map(([category, { score }]) => [\n      `lighthouse ${category.toLowerCase()}`,\n      score * 100,\n    ]),\n  ),\n  report: { [url]: shouldSaveReport ? html : false },\n});\n\ntype CalculateLighthouseMetricsFn = (\n  url: string,\n  shouldSaveReport: boolean,\n  lighthouseParameters?: LighthouseConfig,\n) => Promise<ProcessedLighthouseResult>;\n\nexport const calculateLighthouseMetrics: CalculateLighthouseMetricsFn = async (\n  url,\n  shouldSaveReport,\n  lighthouseParameters = {},\n) => {\n  const { launch } = await import('chrome-launcher');\n  const chrome = await launch({ chromeFlags: CHROME_FLAGS });\n\n  try {\n    const { lhr, report } = await lighthouse(\n      url,\n      { logLevel: 'silent', output: 'html', port: chrome.port },\n      lighthouseParameters,\n    );\n    return processRawLighthouseResult(lhr, report, url, shouldSaveReport);\n  } finally {\n    await chrome.kill();\n  }\n};\n\nexport const processParameters = async (\n  args: ParsedArgs,\n  calculateFn: CalculateLighthouseMetricsFn,\n  lighthouseParameters: LighthouseConfig = {},\n): Promise<void> => {\n  const outputPath = args.output_path ?? process.cwd();\n  await fs.mkdir(outputPath, { recursive: true });\n\n  const { metrics, report } = await calculateFn(args.url, args.save_report, lighthouseParameters);\n  const scores = args.single_badge ? getSquashedScore([metrics]) : getAverageScore([metrics]);\n\n  await Promise.all([\n    htmlReportsToFile([report], outputPath),\n    metricsToSvg(scores, args.badge_style, outputPath),\n  ]);\n};\n"
  },
  {
    "path": "src/main.ts",
    "content": "import fs from 'fs/promises';\nimport {\n  calculateLighthouseMetrics as defaultCalculate,\n  processParameters as defaultProcess,\n} from './lighthouse-badges.js';\nimport parser from './argparser.js';\nimport type { Spinner, LighthouseConfig } from './types.js';\n\nconst DEFAULT_LIGHTHOUSE_CONFIG: LighthouseConfig = { extends: 'lighthouse:default' };\n\nconst loadLighthouseConfig = async (): Promise<LighthouseConfig> => {\n  const configPath = process.env.LIGHTHOUSE_BADGES_CONFIGURATION_PATH;\n  if (!configPath) return DEFAULT_LIGHTHOUSE_CONFIG;\n\n  process.stdout.write(`LIGHTHOUSE_BADGES_CONFIGURATION_PATH: ${configPath}\\n`);\n\n  try {\n    return JSON.parse(await fs.readFile(configPath, 'utf8')) as LighthouseConfig;\n  } catch (error) {\n    throw new Error(`Failed to load Lighthouse configuration from ${configPath}`, { cause: error });\n  }\n};\n\ninterface Dependencies {\n  processParameters?: typeof defaultProcess;\n  calculateLighthouseMetrics?: typeof defaultCalculate;\n  parseArgs?: typeof parser.parse_args;\n}\n\nconst handleUserInput = async (spinner: Spinner, deps: Dependencies = {}): Promise<void> => {\n  const parseArgs = deps.parseArgs ?? parser.parse_args;\n  const calculate = deps.calculateLighthouseMetrics ?? defaultCalculate;\n  const runProcess = deps.processParameters ?? defaultProcess;\n\n  spinner.start();\n  try {\n    const args = await parseArgs();\n    const lighthouseParameters = await loadLighthouseConfig();\n    await runProcess(args, calculate, lighthouseParameters);\n  } catch (err) {\n    const error = err instanceof Error ? err : new Error(String(err));\n    process.stderr.write(`${error}\\n`);\n    process.exit(1);\n  } finally {\n    spinner.stop();\n  }\n};\n\nexport default handleUserInput;\n"
  },
  {
    "path": "src/types.ts",
    "content": "export type BadgeStyle = 'flat' | 'flat-square' | 'plastic' | 'for-the-badge' | 'social';\n\nexport interface ParsedArgs {\n  single_badge: boolean;\n  badge_style: BadgeStyle;\n  output_path?: string;\n  save_report: boolean;\n  url: string;\n}\n\nexport type LighthouseMetrics = Record<string, number>;\n\nexport type LighthouseReport = Record<string, string | false>;\n\nexport interface ProcessedLighthouseResult {\n  metrics: LighthouseMetrics;\n  report: LighthouseReport;\n}\n\nexport interface LighthouseConfig {\n  extends?: string;\n  settings?: {\n    extraHeaders?: Record<string, string>;\n    onlyCategories?: string[];\n    formFactor?: string;\n    [key: string]: unknown;\n  };\n  [key: string]: unknown;\n}\n\nexport interface LighthouseLHR {\n  categories: Record<string, { score: number; [key: string]: unknown }>;\n  [key: string]: unknown;\n}\n\nexport interface Spinner {\n  start: () => void;\n  stop: () => void;\n}\n"
  },
  {
    "path": "src/util.ts",
    "content": "export const urlEscaper = (url: string): string =>\n  url\n    .toLowerCase()\n    .replace(/(^\\w+:|^)\\/\\//, '')\n    .replace(/[^a-z0-9]/g, '_');\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"lib\": [\"ES2022\"],\n    \"moduleResolution\": \"bundler\",\n    \"outDir\": \"./dist/src\",\n    \"rootDir\": \"./src\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"sourceMap\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\", \"dist\", \"__tests__\", \"**/*.test.ts\", \"**/*.spec.ts\"]\n}\n\n"
  }
]