@real-router/angular 0.0.1 → 0.1.0
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/LICENSE +22 -0
- package/package.json +13 -13
- package/src/dom-utils/CLAUDE.md +0 -76
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Oleg Ivanov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@real-router/angular",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "Angular 21 integration for Real-Router",
|
|
6
6
|
"exports": {
|
|
@@ -19,14 +19,6 @@
|
|
|
19
19
|
"type": "git",
|
|
20
20
|
"url": "git+https://github.com/greydragon888/real-router.git"
|
|
21
21
|
},
|
|
22
|
-
"scripts": {
|
|
23
|
-
"test": "vitest",
|
|
24
|
-
"test:stress": "vitest -c vitest.config.stress.mts",
|
|
25
|
-
"type-check": "tsc --noEmit",
|
|
26
|
-
"lint": "eslint --cache src/ tests/ --fix --max-warnings 0",
|
|
27
|
-
"prebundle": "rm -rf src/dom-utils && cp -r ../../shared/dom-utils src/dom-utils && perl -pi -e 's/\\.js\"/\"/g' src/dom-utils/*.ts",
|
|
28
|
-
"bundle": "ng-packagr -p ng-package.json -c tsconfig.lib.json"
|
|
29
|
-
},
|
|
30
22
|
"keywords": [
|
|
31
23
|
"router",
|
|
32
24
|
"angular",
|
|
@@ -43,9 +35,9 @@
|
|
|
43
35
|
"license": "MIT",
|
|
44
36
|
"sideEffects": false,
|
|
45
37
|
"dependencies": {
|
|
46
|
-
"@real-router/core": "
|
|
47
|
-
"@real-router/route-utils": "
|
|
48
|
-
"@real-router/sources": "
|
|
38
|
+
"@real-router/core": "^0.48.0",
|
|
39
|
+
"@real-router/route-utils": "^0.2.1",
|
|
40
|
+
"@real-router/sources": "^0.5.1"
|
|
49
41
|
},
|
|
50
42
|
"devDependencies": {
|
|
51
43
|
"@analogjs/vitest-angular": "2.4.7",
|
|
@@ -60,5 +52,13 @@
|
|
|
60
52
|
"peerDependencies": {
|
|
61
53
|
"@angular/common": ">=21.0.0",
|
|
62
54
|
"@angular/core": ">=21.0.0"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"test": "vitest",
|
|
58
|
+
"test:stress": "vitest -c vitest.config.stress.mts",
|
|
59
|
+
"type-check": "tsc --noEmit",
|
|
60
|
+
"lint": "eslint --cache src/ tests/ --fix --max-warnings 0",
|
|
61
|
+
"prebundle": "rm -rf src/dom-utils && cp -r ../../shared/dom-utils src/dom-utils && perl -pi -e 's/\\.js\"/\"/g' src/dom-utils/*.ts",
|
|
62
|
+
"bundle": "ng-packagr -p ng-package.json -c tsconfig.lib.json"
|
|
63
63
|
}
|
|
64
|
-
}
|
|
64
|
+
}
|
package/src/dom-utils/CLAUDE.md
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# shared/dom-utils — Stable Shared Sources
|
|
2
|
-
|
|
3
|
-
> DOM helpers инлайнятся во все framework-адаптеры. Код **зрелый**, API устоялся.
|
|
4
|
-
|
|
5
|
-
## Status: stable
|
|
6
|
-
|
|
7
|
-
Эти файлы — общий слой для 6 адаптеров (Preact, React, Solid, Vue, Svelte, Angular). Любое изменение здесь немедленно попадает в 6 публичных bundle'ов. Относиться как к low-level примитиву, а не к «просто утилитам».
|
|
8
|
-
|
|
9
|
-
## Правила работы
|
|
10
|
-
|
|
11
|
-
### 1. Отладка начинается в адаптере, а не здесь
|
|
12
|
-
|
|
13
|
-
Перед правкой `shared/dom-utils/*.ts` убедись, что:
|
|
14
|
-
- баг воспроизводится **минимум в 2 адаптерах** (иначе это adapter-specific проблема обёртки);
|
|
15
|
-
- есть падающий тест в функциональном наборе соответствующего адаптера.
|
|
16
|
-
|
|
17
|
-
Если баг живёт только в одном адаптере — правка идёт в адаптер, не сюда.
|
|
18
|
-
|
|
19
|
-
### 2. Оптимизаций «на глаз» не делать
|
|
20
|
-
|
|
21
|
-
Функции уже прошли итерации:
|
|
22
|
-
- `buildActiveClassName` — токен-дедупликация через `Set`, O(n+m);
|
|
23
|
-
- `applyLinkA11y` — defensive null-guard + `hasAttribute` (не `getAttribute`);
|
|
24
|
-
- `buildHref` — optional `buildUrl` + undefined-fallback на `buildPath`;
|
|
25
|
-
- `createRouteAnnouncer` — double `requestAnimationFrame` + Safari-ready буферизация через `pendingText`.
|
|
26
|
-
|
|
27
|
-
«Рефактор ради чистоты» здесь запрещён — микро-изменение ломает сразу 6 bundle'ов. Изменение кода требует: конкретный баг/юз-кейс, тест на него, прогон `pnpm build`.
|
|
28
|
-
|
|
29
|
-
### 3. Angular sync после любой правки
|
|
30
|
-
|
|
31
|
-
`packages/angular/src/dom-utils/` — **git-tracked copy**, не symlink (ng-packagr не следует за symlinks как tsdown).
|
|
32
|
-
|
|
33
|
-
После правки `shared/dom-utils/*.ts`:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
pnpm -F @real-router/angular bundle # пере-материализует копию через prebundle
|
|
37
|
-
diff -r shared/dom-utils/ packages/angular/src/dom-utils/ | grep -v index.ts # должно быть пусто
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Коммитить нужно **оба** варианта: источник в `shared/` и копию в `packages/angular/src/dom-utils/`.
|
|
41
|
-
|
|
42
|
-
### 4. Валидация изменений
|
|
43
|
-
|
|
44
|
-
Минимальный чек-лист перед коммитом:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
pnpm build # 207+ тасков, все адаптеры
|
|
48
|
-
pnpm -F @real-router/react test:properties -- --run # property-тесты buildActiveClassName/buildHref
|
|
49
|
-
pnpm -F @real-router/svelte test:properties -- --run # property-тесты (дублируют React, оба должны пройти)
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Консумеры
|
|
53
|
-
|
|
54
|
-
| Источник | Как подключено | Пакеты |
|
|
55
|
-
|---|---|---|
|
|
56
|
-
| `shared/dom-utils/` | symlink → `src/dom-utils` | `preact`, `react`, `solid`, `svelte`, `vue` |
|
|
57
|
-
| `shared/dom-utils/` | git-tracked copy (через `prebundle`) | `angular` |
|
|
58
|
-
|
|
59
|
-
Проверка, что symlink цел: `readlink packages/preact/src/dom-utils` должен вернуть относительный путь к `shared/dom-utils/`.
|
|
60
|
-
|
|
61
|
-
## Публичный контракт
|
|
62
|
-
|
|
63
|
-
| Функция | Используется в | Стабильность |
|
|
64
|
-
|---|---|---|
|
|
65
|
-
| `shouldNavigate(evt)` | все `Link` компоненты + directives/actions | frozen |
|
|
66
|
-
| `buildHref(router, name, params)` | все `Link` компоненты + Angular directive | frozen |
|
|
67
|
-
| `buildActiveClassName(isActive, active, base)` | все `Link` компоненты | frozen |
|
|
68
|
-
| `applyLinkA11y(el)` | все `Link` компоненты + directives | frozen |
|
|
69
|
-
| `createRouteAnnouncer(router, opts)` | все `RouterProvider` / `NavigationAnnouncer` | frozen |
|
|
70
|
-
|
|
71
|
-
«Frozen» = сигнатура и поведение не меняются без мажорного release-цикла core. Новые фичи — отдельными функциями, не модификацией существующих.
|
|
72
|
-
|
|
73
|
-
## См. также
|
|
74
|
-
|
|
75
|
-
- [../../CLAUDE.md](../../CLAUDE.md) — monorepo-level правила symlink-инфраструктуры
|
|
76
|
-
- [../../IMPLEMENTATION_NOTES.md](../../IMPLEMENTATION_NOTES.md) — раздел "Shared Sources via Symlinks"
|