itube-specs 0.0.1004 → 0.0.1007

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/SITE_UPDATES.md CHANGED
@@ -10,6 +10,20 @@
10
10
  коммиты до бампа); `npm run patch` сам проставит ей номер версии. Формат пункта: что сделать и где,
11
11
  кому именно (всем / сайтам с N), что будет, если не сделать.
12
12
 
13
+ ## 0.0.1007 — 2026-10-06
14
+
15
+ - **Сайтам, где `npm run dev` подключает локальный слой (`LAYER_PATH` в `.env`):** заменить скрипт `predev` в
16
+ `package.json` на
17
+
18
+ ```json
19
+ "predev": "env-cmd -f .env sh node_modules/itube-specs/scripts/link-layer.sh",
20
+ ```
21
+
22
+ Скрипт из слоя делает то же, что старый `predev` (симлинк на `LAYER_PATH` + `nuxi prepare`), и перед этим
23
+ подтягивает локальный слой до `origin/develop` — только fast-forward: свои коммиты, ветка не develop или нет
24
+ сети — слой не трогается, dev всё равно стартует. Без `LAYER_PATH` — ничего не делает. Не заменить — dev
25
+ работает с локальным слоем без чужих свежих правок, пока не подтянешь руками.
26
+
13
27
  ## 0.0.1001 — 2026-10-06
14
28
 
15
29
  - **Всем:** удалить свои `public/img/model-placeholder-{portrait,square}.{webp,avif}` и
package/config/niches.ts CHANGED
@@ -78,7 +78,7 @@ function isUnderRoot(path: string, roots: readonly string[]): boolean {
78
78
  }
79
79
 
80
80
  /**
81
- * Клонирует контентные разделы под нишевые префиксы — алиасом той же записи роута:
81
+ * Клонирует Контентные разделы под нишевые префиксы — алиасом той же записи роута:
82
82
  * `/videos/:slug` начинает отвечать и на `/gay/videos/:slug`. Алиасы статичные, по одному на нишу:
83
83
  * у алиаса vue-router требует те же параметры, что у оригинала, поэтому параметр `:niche` сюда нельзя.
84
84
  * Сайту с одной нишей ничего не добавляет. Мутирует переданный список — так устроен хук `pages:extend`.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.1004",
4
+ "version": "0.0.1007",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -82,6 +82,7 @@
82
82
  "scripts/i18n-check.mjs",
83
83
  "scripts/i18n-sheet.mjs",
84
84
  "scripts/site-updates.mjs",
85
+ "scripts/link-layer.sh",
85
86
  "SITE_UPDATES.md",
86
87
  "nuxt.config.ts",
87
88
  "DOCS/"
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ # predev сайта: подтянуть локальный слой (LAYER_PATH из .env сайта) до origin/develop и подключить его
3
+ # симлинком вместо пакета из npm — правки слоя видны в dev сразу. Только fast-forward: свои коммиты, ветка не
4
+ # develop, нет сети — слой не трогается, dev всё равно стартует. Нет LAYER_PATH (CI, чужая машина) — no-op.
5
+
6
+ [ -n "$LAYER_PATH" ] && [ -d "$LAYER_PATH" ] || exit 0
7
+
8
+ branch=$(git -C "$LAYER_PATH" rev-parse --abbrev-ref HEAD 2>/dev/null)
9
+ if [ "$branch" != "develop" ]; then
10
+ echo "link-layer: слой на ветке «$branch», не develop — не подтягиваю"
11
+ elif ! git -C "$LAYER_PATH" pull --ff-only -q origin develop; then
12
+ echo "link-layer: слой не подтянут (свои коммиты, мешающие правки или нет сети) — работаю с локальным как есть"
13
+ fi
14
+
15
+ rm -rf node_modules/itube-specs && ln -sfn "$LAYER_PATH" node_modules/itube-specs && (cd "$LAYER_PATH" && npx nuxi prepare) || true
@@ -1,11 +1,14 @@
1
1
  // Для сайта, после `npm run spec`: печатает записи SITE_UPDATES.md слоя, вышедшие после версии,
2
- // которая стояла в закоммиченном package.json сайта. Запуск из корня сайта.
2
+ // которая стояла в закоммиченном package.json сайта, и дописывает их в SITE_TODO.md сайта.
3
+ // Запуск из корня сайта.
3
4
  // Явно: `node node_modules/itube-specs/scripts/site-updates.mjs <старая-версия>`.
4
5
 
5
6
  import { execSync } from 'node:child_process';
6
- import { existsSync, readFileSync } from 'node:fs';
7
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
7
8
 
8
9
  const FILE = 'node_modules/itube-specs/SITE_UPDATES.md';
10
+ const TODO_FILE = 'SITE_TODO.md';
11
+ const TODO_HEADER = '# Пункты слоя, которые этот сайт ещё не выполнил\n\nИз `itube-specs/SITE_UPDATES.md`. Выполнил всё — удали файл.';
9
12
 
10
13
  const toParts = version => version.replace(/^[^\d]*/, '').split('.').map(Number);
11
14
  const isNewer = (a, b) => {
@@ -41,6 +44,14 @@ if (!pending.length) {
41
44
  process.exit(0);
42
45
  }
43
46
 
44
- console.log(`\nsite-updates: ${from || '?'} → ${installed}. Что сделать в этом сайте (от старых к новым):\n`);
45
- console.log(pending.reverse().map(section => section.trim()).join('\n\n'));
47
+ const items = pending.reverse().map(section => section.trim());
48
+
49
+ // Файл в корне сайта — пункты не теряются, кто бы ни запускал spec; хук агента подхватывает его
50
+ // в контекст, выполненное агент удаляет вместе с файлом.
51
+ const existing = existsSync(TODO_FILE) ? readFileSync(TODO_FILE, 'utf8') : `${TODO_HEADER}\n`;
52
+ const fresh = items.filter(item => !existing.includes(item.split('\n')[0]));
53
+ if (fresh.length) writeFileSync(TODO_FILE, `${existing.trimEnd()}\n\n${fresh.join('\n\n')}\n`);
54
+
55
+ console.log(`\nsite-updates: ${from || '?'} → ${installed}. Что сделать в этом сайте (от старых к новым), записано в ${TODO_FILE}:\n`);
56
+ console.log(items.join('\n\n'));
46
57
  console.log('');