npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@htmlacademy/autocheck

v1.5.4

Published

Автоматические проверки для критериев

Downloads

6

Readme

Автоматические проверки проекта

Входной файл index.js может исполльзоваться как cli приложение . Приложение первым аргументом получает путь до распакованного архива, вторым список проверок. В результате отдаёт масиив результатов.

Запуск

npm i — установить зависимости npm run build — сгенерировать билд приложения

Входная точка для cli будет по адресу ./build/index.js

Структура работы автоматических проверок

Проверка

  • Все проверки находятся в папке src/checks
  • Каждый модуль проверки является классом, должен наследоваться от интерфейса checkable и экспортироваться по умолчанию
  • У проверки есть 2 обязательных метода:
    • getRequirement - в нём указывается какие данные нужны проверке
    • check - получает на вход объект ресурсов и в нём описывается основная логика проверки

В файле проверки выполняется основная логика серверной проверки. Некоторые операции повторяются в разных проверках. Чтобы избежать повтора, такую логику можно вынести в ресурсы.

Ресурсы

  • Для того, чтобы ресурсы (например ast деревья) могли шарить разные проверки они вынесены в отдельные модули ресурсов по адресу src/data
  • Каждый модуль ресурсов является классом, должен наследоваться от интерфейса Storable и экспортироваться по умолчанию
  • У ресурсов есть 1 обязательный метод - getData. Он генерирует необходимые ресурсы в зависимости от входных данных и 1 объект - resource, в котором хранятся все данные.

Ресурсами могут быть любые данные приложения. Это может быть объекты ast дерева, массив из списка файлов приложения, скриншоты, количество html файлов на странице страниц и прочее. Для упрощения в ресурсаз можно хранить логику генерации объекта ответа.

Логика работы

Класс src/checker.ts связывает между собой проверки и ресурсы.

  • Для оптимизации он кеширует модули проверок и ресурсов,
  • собирает у проверок список необходимых ресуросов (через метод getRequirement)
  • генерирует ресурсы
  • вызывает проверку (через метод check) передавая в неё инстансы классов ресурсов
  • далее выполняется основная логика проверки выдавая ответ по проверке
  • ответы собираются в один ответ и асинхронно возвращаются из класса

Результат проверки

В результате проверки формируется массив объектов Result. Посмотреть подробное описание формата ответа можно в файле src/interfaces/result.ts

Пример входных данных проверки:

[
  {
    "type": "css-id"
  },
  {
    "type": "validation"
  },
  {
    "type": "img-size"
  },
  {
    "type": "alternative-font"
  },
  {
    "type": "important"
  },
  {
    "type": "eslint",
    "details": "es5"
  },
  {
    "type": "curly-brace",
    "details": "es6"
  }
]

Пример ответа:

[
  {
    "check": "css-id",
    "status": "success",
    "message": "Для стилизации идентификаторы не используются",
    "results": []
  },
  {
    "status": "failed",
    "message": "Ошибки валидации",
    "check": "html-validation",
    "results": [
      {
        "status": false,
        "message": "Bad value “true” for attribute “hidden” on element “h1”.",
        "file": "index.html",
        "code": "body>\n    <h1 class=\"visually-hidden\" hidden=\"true\">Дизайн",
        "line": 11,
        "column": 5
      }
    ]
  },
  {
    "check": "img-size",
    "status": "failed",
    "message": "Ошибки указания размеров у изображений",
    "results": [
      {
        "message": "Не указаны размеры у изображения",
        "file": "catalog.html",
        "code": "<img src=\"img/logo.svg\" alt=\"Logo\">",
        "status": false,
        "line": 14,
        "column": 51
      }
    ]
  },
  {
    "check": "alternative-font",
    "status": "failed",
    "message": "Данные об использовании альтернативных шрифтов",
    "results": [
      {
        "status": false,
        "message": "Не хватает значений альтернативных шрифтов. Свойство: font-family, cелектор: pre.",
        "file": "normalize.css",
        "code": "font-family:monospace,monospace",
        "line": 65,
        "column": 3
      }
    ]
  },
  {
    "check": "important",
    "status": "success",
    "message": "Для стилизации не используется important",
    "results": []
  }
]