@vernikr/size-report 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -18,6 +18,69 @@
18
18
  где за основу взяты `fixtures/synthetic/config.json`, метрики — `raw`, `min`, `tok`, а
19
19
  способ минификации — `strip` или `esbuild`.
20
20
 
21
+ ## 2.0.2 — 2026-09-15
22
+
23
+ Инструкция перестала обещать лишний ручной шаг и назвала платформенную разницу.
24
+
25
+ - **README учил ставить хук руками.** В §6 осталась строка прежнего выпуска — «хуки
26
+ ставятся только командой `install-hook`, ни один обычный запуск их не создаёт», — а с
27
+ 2.0.0 постановка своя (`bin/postinstall.js` и первый запуск). Текст теперь говорит то,
28
+ что делает код, и называет единственное исключение: pnpm 10 не исполняет скрипты
29
+ зависимостей («Ignored build scripts») — там хук ставит первый запуск, либо сборка
30
+ разрешается `pnpm.onlyBuiltDependencies` в манифесте потребителя.
31
+ - **Названа одна ручная ступень, которая была невидимой.** Первый отчёт создаётся, но не
32
+ коммитится (новый файл в чужой истории — решение человека): это сказано в §6 и в
33
+ шаблоне `templates/README.md`, дальше отчёт обновляется отдельными коммитами сам.
34
+
35
+ ### Что изменится в числах
36
+
37
+ **Ничего.** Правка — только текст инструкции; движок тот же, что у 2.0.1.
38
+
39
+ | Файл | raw | min со strip | min с esbuild | tok |
40
+ |---|---|---|---|---|
41
+ | code.js | 735 | 276 | 185 | 168 |
42
+ | modern.js | 246 | 51 | 45 | 44 |
43
+ | config.mjs | 172 | 45 | 40 | 40 |
44
+ | заметки.md | 306 | 303 | 303 | 53 |
45
+ | crlf.txt | 63 | 60 | 60 | 10 |
46
+ | package.json | 87 | 69 | 69 | 34 |
47
+ | style.css | 156 | 55 | 43 | 38 |
48
+ | table.toml | 300 | 299 | 299 | 52 |
49
+ | empty.js | 0 | 0 | 0 | 0 |
50
+ | WORKLOG.md | 446 | 439 | 439 | 101 |
51
+ | **ИТОГО** | **2511** | **1597** | **1483** | **540** |
52
+
53
+ ## 2.0.1 — 2026-09-15
54
+
55
+ Место отчёта в свежем проекте: `docs/size-report.html`, и каталог создаётся сам.
56
+
57
+ - **Отчёт больше не ложится в корень.** Первая редакция вывода выбирала «рядом с
58
+ доками, если каталог `docs` есть, иначе в корне»: в проекте, который только что
59
+ поставил пакет, каталога ещё нет — и отчёт оказывался там, где его не ищут (замер:
60
+ свежий клон, установка из реестра, `docs/` не появился, файл лёг в корень). Теперь
61
+ адрес один: `docs/size-report.html`; каталог — часть адреса, а создаёт его тот, кто
62
+ пишет файл. Имя из настроек по-прежнему перебивает вывод.
63
+ - Стережёт это проверка: проект без настроек и без каталога `docs` — отчёт в `docs/`,
64
+ в корне его нет, контрольный режим зелёный.
65
+
66
+ ### Что изменится в числах
67
+
68
+ **Ничего.** Правка — про путь файла, а не про измерение. Таблица та же, что у 2.0.0.
69
+
70
+ | Файл | raw | min со strip | min с esbuild | tok |
71
+ |---|---|---|---|---|
72
+ | code.js | 735 | 276 | 185 | 168 |
73
+ | modern.js | 246 | 51 | 45 | 44 |
74
+ | config.mjs | 172 | 45 | 40 | 40 |
75
+ | заметки.md | 306 | 303 | 303 | 53 |
76
+ | crlf.txt | 63 | 60 | 60 | 10 |
77
+ | package.json | 87 | 69 | 69 | 34 |
78
+ | style.css | 156 | 55 | 43 | 38 |
79
+ | table.toml | 300 | 299 | 299 | 52 |
80
+ | empty.js | 0 | 0 | 0 | 0 |
81
+ | WORKLOG.md | 446 | 439 | 439 | 101 |
82
+ | **ИТОГО** | **2511** | **1597** | **1483** | **540** |
83
+
21
84
  ## 2.0.0 — 2026-09-15
22
85
 
23
86
  Один отчёт вместо двух, и он же появляется сам: форма отчёта сведена к одному
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ## Статус
12
12
 
13
- **Выпуск 2.0.0 (2026-09-15).** Инструмент живёт отдельным пакетом: имя в
13
+ **Выпуск 2.0.2 (2026-09-15).** Инструмент живёт отдельным пакетом: имя в
14
14
  реестре — `@vernikr/size-report` (публикуется тегом из CI, без секрета). Настроек
15
15
  проект может не заводить вовсе: без файла инструмент выводит их из самого проекта и
16
16
  говорит об этом строкой, а `--init` закрепляет выведенное файлом (чем этот шаг
@@ -219,10 +219,10 @@
219
219
 
220
220
  | Прогон | Команда | Проверок |
221
221
  |---|---|---|
222
- | Быстрый — каждая правка | `pnpm test` | **65 из 168** |
223
- | Полный — выкладка и CI | `pnpm test:all` | **168** |
222
+ | Быстрый — каждая правка | `pnpm test` | **65 из 169** |
223
+ | Полный — выкладка и CI | `pnpm test:all` | **169** |
224
224
 
225
- Ни одна проверка не потеряна и не ослаблена: полный прогон запускает все 168 теми же
225
+ Ни одна проверка не потеряна и не ослаблена: полный прогон запускает все 169 теми же
226
226
  файлами, а быстрый берёт их часть. Умолчание — полный: файл становится быстрым только
227
227
  явно и с причиной, поэтому новое дорогое не может тихо уехать в быстрый. Стерегут это
228
228
  объявление `test/suites.test.js` (полнота классификации и причина у каждого файла) и
@@ -480,6 +480,7 @@ deльт задан один раз и по артефакту: рост зел
480
480
  | `PLAN.md` | **Главный документ:** инвентаризация, границы, инварианты, архитектура, семь шагов переноса, приёмка, риски, открытые вопросы |
481
481
  | `docs/requirements.md` | Требования заказчика: что и зачем |
482
482
  | `docs/module-design.md` | Архитектурный проект выноса: как устроен модуль |
483
+ | `docs/size-report.html` | Отчёт об объёме этого самого проекта: один самодостаточный файл, который обновляет хук после каждого коммита (отдельным коммитом) |
483
484
  | `WORKLOG.md` | Журнал запросов и сделанного |
484
485
  | `BLOCKERS.md` | Открытые блокеры и известные пробелы (обход обязан держаться проверкой) |
485
486
  | `REFACTOR.md` | Поканальный план чистки: объём кода, потом скорость; границы и чем доказывается, что поведение не изменилось |
@@ -642,7 +643,7 @@ pnpm add -D @vernikr/size-report
642
643
  ```
643
644
 
644
645
  Пакет **опубликован в реестре**, и публично: `npm view @vernikr/size-report
645
- version` отвечает `2.0.0`, `npm access get status @vernikr/size-report` — `public`,
646
+ version` отвечает `2.0.2`, `npm access get status @vernikr/size-report` — `public`,
646
647
  а анонимный запрос тарболла — код 200. `npm i -D` и `yarn add -D` принимают то же
647
648
  имя; ни ключа, ни ссылки на репозиторий не нужно.
648
649
 
@@ -650,11 +651,11 @@ version` отвечает `2.0.0`, `npm access get status @vernikr/size-report`
650
651
  реестра, но остаётся привязанной к ревизии:
651
652
 
652
653
  ```bash
653
- pnpm add -D github:vernikr/size-report#v2.0.0
654
+ pnpm add -D github:vernikr/size-report#v2.0.2
654
655
  ```
655
656
 
656
657
  Без сети (или если тянуть из codeload нечем) — тарболл: `pnpm pack` в клоне
657
- пакета, затем `pnpm add -D ./vernikr-size-report-2.0.0.tgz`.
658
+ пакета, затем `pnpm add -D ./vernikr-size-report-2.0.2.tgz`.
658
659
 
659
660
  **Почему тег, а не sha.** Короткий sha pnpm разрешает только через видимые рефы, а
660
661
  `git ls-remote` отдаёт одни верхушки веток: пока ревизия — верхушка, короткий sha
@@ -662,7 +663,7 @@ pnpm add -D github:vernikr/size-report#v2.0.0
662
663
  <sha> to a commit`. Это не рассуждение, а проба: короткий пин `6530237` ставился,
663
664
  пока `main` стоял на нём, и перестал — на следующем же коммите, а тот же sha
664
665
  целиком поставился. Имя ветки (`#main`) или тег принимаются оба, но ветка —
665
- движущаяся цель, а тег постоянен: этот выпуск стоит на теге `v2.0.0`, он же и в
666
+ движущаяся цель, а тег постоянен: этот выпуск стоит на теге `v2.0.2`, он же и в
666
667
  примере (сорок знаков тоже годятся, но их придётся брать глазами из истории).
667
668
 
668
669
  Ревизия в примере — не украшение, а часть утверждения: она закреплена за тем, что
@@ -736,7 +737,7 @@ stderr и называет команду, которая их закрепля
736
737
  | `metrics` | из чего состоит число: `raw` (размер объекта git), `min` (минифицированная форма — какая именно, решает `minify.engine`), `tok` (токены), `gzip` |
737
738
  | `tokens.family`, `tokens.encoding` | словарь для `tok`: семейство (`openai`) и кодировка (`o200k_base` или `cl100k_base`) — кодировка меняет число, поэтому она и в настройках, и в подписи метрики |
738
739
  | `minify.engine` | чем считается `min`: `strip` (комментарии и отступы, точность не обещается) или `esbuild` (настоящее сжатие; форматы без минификатора — упрощение, и это видно в подписи метрики) |
739
- | `output` | файл отчёта (в выведенном профиле — `docs/size-report.html`, если каталог `docs/` есть, иначе в корне; имя отчёта — его имя, а каталог решает только где ему лежать) |
740
+ | `output` | файл отчёта (в выведенном профиле — `docs/size-report.html`; каталог создаётся сам, имя отчёта — его имя) |
740
741
  | `journal` | где искать разделы журнала, на которые ссылаются строки |
741
742
  | `links.commitUrl` | шаблон ссылки на коммит, например `https://github.com/org/repo/commit/{sha}`; выводится из адреса `origin` у GitHub и GitLab (у остальных хозяев — пусто, а не догадка) |
742
743
  | `skip` | пути, которые колонкой не стали: и те, что ею быть не могут (сам отчёт, замки зависимостей), и те, что в колонки не поместились (выведенный профиль объявляет исключениями всё остальное — поэтому первый `check` полон) |
@@ -835,18 +836,26 @@ pnpm exec size doctor # 0 — делать нечего; иначе перв
835
836
  | 4 | нет датчика | `minify.engine: "esbuild"`, а минификатора нет: числа получены упрощением. Отчёт собран, причина и починка — в тексте; если при этом таблица расходится с историей, код остаётся **1** (нарушение старше приближения), а заметка о другом счёте печатается рядом |
836
837
  | 5 | внутренняя ошибка | это дефект инструмента: текст нужен нам, см. «Ловушки» ниже |
837
838
 
838
- ### 6. Отчёт обновляется сам после коммита (по желанию)
839
+ ### 6. Отчёт обновляется сам после коммита
839
840
 
840
841
  ```bash
841
842
  pnpm exec size install-hook # поставить post-commit и post-merge
842
843
  pnpm exec size uninstall-hook # снять и вернуть проект к прежнему поведению
843
844
  ```
844
845
 
845
- Хуки ставятся **только этой командой**: ни один обычный запуск их не создаёт и
846
- проект до неё не меняется (файлы живут в `.git`, `git status` их не видит). После
847
- каждого коммита и слияния отчёт пересобирается, а если он лежит в git — ложится
848
- отдельным коммитом с подписью `chore(report): отчёт пересобран после <sha>`.
849
- Коммитится только путь отчёта: чужой индекс и незакоммиченная работа не тронуты.
846
+ Хуки ставятся **сами**, и это единственное, что проект замечает от установки пакета:
847
+ после `npm i` скриптом установки, у pnpm 10 первым запуском инструмента (pnpm не
848
+ исполняет скрипты зависимостей: «Ignored build scripts»; разрешить можно
849
+ `pnpm.onlyBuiltDependencies: ["@vernikr/size-report"]` в своём манифесте). Ставшие
850
+ файлы живут в `.git`, `git status` их не видит, снимаются командой выше. После
851
+ каждого коммита и слияния отчёт пересобирается: каталог `docs` и файл `size-report.html`
852
+ создаются, если их ещё нет, а **отслеживаемый** в git отчёт ложится отдельным коммитом
853
+ с подписью `chore(report): отчёт пересобран после <sha>`. Коммитится только путь отчёта:
854
+ чужой индекс и незакоммиченная работа не тронуты.
855
+
856
+ Первый отчёт — исключение из «сам»: файл создан, но не закоммичен, потому что новый
857
+ файл в чужой истории — решение человека, а не услуга. Один `git add docs/size-report.html`
858
+ (или обычный `git add -A`, если отчёт нужен в проекте) — и дальше он едет коммитами сам.
850
859
  Слияние обрабатывается тем же входом, что обычный коммит, но другим файлом —
851
860
  `post-merge`: git создаёт коммит слияния сам и `post-commit` при этом не зовёт.
852
861
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vernikr/size-report",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "author": "vernikr",
5
5
  "repository": {
6
6
  "type": "git",
@@ -66,7 +66,7 @@
66
66
  "report"
67
67
  ],
68
68
  "devDependencies": {
69
- "@vernikr/size-report": "1.3.1",
69
+ "@vernikr/size-report": "2.0.1",
70
70
  "c8": "10",
71
71
  "dependency-cruiser": "17",
72
72
  "eslint": "^9.18.0",
package/src/project.js CHANGED
@@ -97,11 +97,14 @@ function exists(root, p) {
97
97
  return fs.existsSync(path.join(root, p));
98
98
  }
99
99
 
100
- /* Имя отчёта — одно на пакет и на проект: файл это и есть страница отчёта, и
101
- * называться иначе она не может. Каталог решает только, где ей лежать: рядом с
102
- * доками, если они в проекте есть, иначе в корне. */
103
- function outputOf(root) {
104
- return (exists(root, 'docs') ? 'docs/' : '') + 'size-report.html';
100
+ /* Куда ложится отчёт — одно на пакет: `docs/size-report.html`, и каталог создаётся
101
+ * сам. Прежняя развилка («в доки, если они есть, иначе в корень») убрана по замеру:
102
+ * в свежем проекте каталога `docs` ещё нет, и отчёт оказывался в корне — то есть
103
+ * ни в том месте, где его ищут, ни в том, куда его хочет положить человек,
104
+ * который ставит пакет ради отчёта. Каталог здесь не признак проекта, а часть
105
+ * адреса; создавать его — работа того, кто пишет файл (`writeFileEnsured`). */
106
+ function outputOf() {
107
+ return 'docs/size-report.html';
105
108
  }
106
109
 
107
110
  /* Менеджер пакетов — по lock-файлу, а не догадкой: команда обязана существовать
@@ -56,7 +56,7 @@ README и журнал колонкой не отслеживаются, — т
56
56
  именно этот объект выводит `size --init`, когда журнал в проекте есть.
57
57
  - `paths` внутри колонки — псевдонимы одного файла: если файл переименовывали,
58
58
  перечислите и старое имя, и новое, и колонка не разорвётся.
59
- - `output: "docs/size-report.html"` — файл отчёта (он один: самодостаточная страница со всеми числами, фильтрами и ссылкой); каталог инструмент создаст сам, а хуктоже: после установки пакета и первого запуска отчёт обновляется после каждого коммита без ручного шага.
59
+ - `output: "docs/size-report.html"` — файл отчёта (он один: самодостаточная страница со всеми числами, фильтрами и ссылкой); каталог инструмент создаст сам. Хук обновления ставится сам скриптом установки (npm, yarn) или первым запуском (pnpm 10 не исполняет скрипты зависимостей, если не разрешить `pnpm.onlyBuiltDependencies`), и после каждого коммита отчёт пересобирается. Первый отчёт остаётся неотслеживаемым, пока вы не добавите его в git; дальше он обновляется коммитами сам.
60
60
 
61
61
  ## Проверка в CI
62
62