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 +1 -1
- package/src/client/style.css +1 -7
- package/src/lib/packageLink.js +33 -17
package/package.json
CHANGED
package/src/client/style.css
CHANGED
|
@@ -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;
|
package/src/lib/packageLink.js
CHANGED
|
@@ -30,9 +30,12 @@ export function resolveProjectUrl(pkg) {
|
|
|
30
30
|
|
|
31
31
|
// repository бывает и строкой ("github:user/repo"), и объектом {type, url}
|
|
32
32
|
const declared =
|
|
33
|
-
|
|
33
|
+
typeof repository === 'string' ? repository : repository?.url;
|
|
34
34
|
|
|
35
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
115
|
-
return 'GitHub';
|
|
116
|
-
}
|
|
128
|
+
let host;
|
|
117
129
|
|
|
118
|
-
|
|
130
|
+
try {
|
|
131
|
+
host = new URL(url).hostname.replace(/^www\./, '');
|
|
132
|
+
} catch {
|
|
133
|
+
return 'Website';
|
|
134
|
+
}
|
|
119
135
|
|
|
120
|
-
return host ?
|
|
136
|
+
return host === 'github.com' ? 'GitHub' : host;
|
|
121
137
|
}
|