vimp-engine 0.18.0 → 0.18.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vimp-engine",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "VIMP — движок-приложение (мастер, P2P-транспорт, Worker-хост, мета, MVC-каркас клиента)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -466,7 +466,7 @@ body.hide-cursor {
466
466
  color: #e00;
467
467
  font-size: 12px;
468
468
  line-height: 15px;
469
- margin: 0 5px;
469
+ margin: 0 5px 10px;
470
470
  }
471
471
 
472
472
  /* пустой блок ошибок не должен занимать место: #lobby-error — флекс-элемент
@@ -549,12 +549,6 @@ body.hide-cursor {
549
549
  border: 1px solid #999;
550
550
  }
551
551
 
552
- /* вертикаль внутри #lobby-create держит его gap — собственный margin
553
- коробки удвоил бы отступ до соседей */
554
- #lobby-fields {
555
- margin: 0;
556
- }
557
-
558
552
  .auth-inform h4 {
559
553
  margin: 0 0 4px 0;
560
554
  text-align: center;
@@ -30,9 +30,12 @@ export function resolveProjectUrl(pkg) {
30
30
 
31
31
  // repository бывает и строкой ("github:user/repo"), и объектом {type, url}
32
32
  const declared =
33
- (typeof repository === 'string' ? repository : repository?.url) ?? homepage;
33
+ typeof repository === 'string' ? repository : repository?.url;
34
34
 
35
- return normalize(declared);
35
+ // объявленный, но не приводящийся к http(s) repository (пустая строка,
36
+ // внутренний git-хост) не повод терять валидный homepage: поле проверяется
37
+ // по результату, а не по факту наличия
38
+ return normalizeRepository(declared) ?? normalize(homepage);
36
39
  }
37
40
 
38
41
  /**
@@ -41,11 +44,26 @@ export function resolveProjectUrl(pkg) {
41
44
  * @returns {{url: string, label: string}|null} null, если адреса нет
42
45
  */
43
46
  export function projectLink(url) {
44
- if (typeof url !== 'string' || !url.trim()) {
47
+ // адрес перепроверяется, хотя свои вызовы приходят уже из
48
+ // resolveProjectUrl: функция — публичный экспорт ("./lib/*"), а результат
49
+ // уходит прямо в href якоря (client/lib/footerLink.js)
50
+ const value = typeof url === 'string' ? url.trim() : '';
51
+
52
+ if (!/^https?:\/\//.test(value)) {
45
53
  return null;
46
54
  }
47
55
 
48
- return { url, label: labelFor(url) };
56
+ return { url: value, label: labelFor(value) };
57
+ }
58
+
59
+ // шорткат "user/repo" — семантика поля repository (так его читает npm), в
60
+ // homepage такая строка означала бы относительный путь, а не адрес на GitHub
61
+ function normalizeRepository(raw) {
62
+ const value = typeof raw === 'string' ? raw.trim() : '';
63
+
64
+ return /^[\w.-]+\/[\w.-]+$/.test(value)
65
+ ? `https://github.com/${value}`
66
+ : normalize(raw);
49
67
  }
50
68
 
51
69
  // приводит объявленный адрес к https-виду; всё, что после нормализации не
@@ -61,14 +79,7 @@ function normalize(raw) {
61
79
  return null;
62
80
  }
63
81
 
64
- // npm-шорткаты: "github:user/repo", "gitlab:...", "bitbucket:...", а также
65
- // голое "user/repo" — его принимает флаг --repository скаффолдера
66
- const bare = /^([\w.-]+\/[\w.-]+)$/.exec(url);
67
-
68
- if (bare) {
69
- return `https://github.com/${bare[1]}`;
70
- }
71
-
82
+ // npm-шорткаты: "github:user/repo", "gitlab:...", "bitbucket:..."
72
83
  const shorthand = /^(github|gitlab|bitbucket):([\w.-]+\/[\w.-]+)$/.exec(url);
73
84
 
74
85
  if (shorthand) {
@@ -101,6 +112,9 @@ function normalize(raw) {
101
112
 
102
113
  return (
103
114
  url
115
+ // логин (и тем более пароль) из ssh-формы адреса — не часть проекта, а
116
+ // в href он уехал бы в DOM и историю браузера
117
+ .replace(/^(https?:\/\/)[^/@]*@/, '$1')
104
118
  .replace(/\.git(?=$|[#?])/, '')
105
119
  // npm сам дописывает "#readme" в homepage при генерации package.json
106
120
  .replace(/#readme$/, '')
@@ -111,11 +125,13 @@ function normalize(raw) {
111
125
  // подпись ячейки: у наших пакетов это всегда GitHub, у чужого хостинга —
112
126
  // его хост, чтобы подпись не врала об источнике
113
127
  function labelFor(url) {
114
- if (/^https?:\/\/(www\.)?github\.com\//.test(url)) {
115
- return 'GitHub';
116
- }
128
+ let host;
117
129
 
118
- const host = /^https?:\/\/(?:www\.)?([^/:]+)/.exec(url);
130
+ try {
131
+ host = new URL(url).hostname.replace(/^www\./, '');
132
+ } catch {
133
+ return 'Website';
134
+ }
119
135
 
120
- return host ? host[1] : 'Website';
136
+ return host === 'github.com' ? 'GitHub' : host;
121
137
  }