@mlikiowa/nanaeo 1.0.1702966759079 → 1.0.1702967739786
Sign up to get free protection for your applications and to get access to all the features.
- package/2022/08/04/NewBlog/index.html +3473 -0
- package/2022/08/13/GaussWave/index.html +3407 -0
- package/about/index.html +3236 -0
- package/archives/2022/08/index.html +3411 -0
- package/archives/2022/index.html +3411 -0
- package/archives/index.html +3308 -0
- package/asset/Sotheby.ttf +0 -0
- package/asset/backimg.png +0 -0
- package/atom.xml +171 -0
- package/categories/DevLog/index.html +3351 -0
- package/categories/SiteLog/index.html +3351 -0
- package/categories/index.html +3174 -0
- package/category/devlog/atom.xml +58 -0
- package/category/devlog/feed.json +19 -0
- package/category/devlog/rss.xml +62 -0
- package/category/sitelog/atom.xml +125 -0
- package/category/sitelog/feed.json +20 -0
- package/category/sitelog/rss.xml +129 -0
- package/content.json +1 -0
- package/css/Readme.html +9 -0
- package/css/first.css +1504 -0
- package/css/style.css +7106 -0
- package/favicon.ico +0 -0
- package/feed.json +31 -0
- package/friends/index.html +3661 -0
- package/index.html +3421 -0
- package/js/app.js +1223 -0
- package/js/plugins/aplayer.js +186 -0
- package/js/plugins/parallax.js +191 -0
- package/js/plugins/rightMenu.js +577 -0
- package/js/plugins/rightMenus.js +618 -0
- package/js/plugins/tags/contributors.js +92 -0
- package/js/plugins/tags/friends.js +93 -0
- package/js/plugins/tags/sites.js +96 -0
- package/js/search/hexo.js +192 -0
- package/package.json +1 -1
- package/rss.xml +175 -0
- package/tag/devlog/atom.xml +58 -0
- package/tag/devlog/feed.json +19 -0
- package/tag/devlog/rss.xml +62 -0
- package/tag/gauss/atom.xml +58 -0
- package/tag/gauss/feed.json +19 -0
- package/tag/gauss/rss.xml +62 -0
- package/tag/hexo/atom.xml +125 -0
- package/tag/hexo/feed.json +20 -0
- package/tag/hexo/rss.xml +129 -0
- package/tag/hexothemes/atom.xml +125 -0
- package/tag/hexothemes/feed.json +20 -0
- package/tag/hexothemes/rss.xml +129 -0
- package/tag/sitelog/atom.xml +125 -0
- package/tag/sitelog/feed.json +20 -0
- package/tag/sitelog/rss.xml +129 -0
- package/tags/DevLog/index.html +3351 -0
- package/tags/Gauss/index.html +3351 -0
- package/tags/Hexo/index.html +3351 -0
- package/tags/HexoThemes/index.html +3351 -0
- package/tags/SiteLog/index.html +3351 -0
- package/tags/index.html +3159 -0
- package/volantis-sw.js +797 -0
@@ -0,0 +1,92 @@
|
|
1
|
+
const ContributorsJS = {
|
2
|
+
requestAPI: (url, callback, timeout) => {
|
3
|
+
let retryTimes = 5;
|
4
|
+
|
5
|
+
function request() {
|
6
|
+
return new Promise((resolve, reject) => {
|
7
|
+
let status = 0; // 0 等待 1 完成 2 超时
|
8
|
+
let timer = setTimeout(() => {
|
9
|
+
if (status === 0) {
|
10
|
+
status = 2;
|
11
|
+
timer = null;
|
12
|
+
reject('请求超时');
|
13
|
+
if (retryTimes == 0) {
|
14
|
+
timeout();
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}, 5000);
|
18
|
+
fetch(url).then(function (response) {
|
19
|
+
if (status !== 2) {
|
20
|
+
clearTimeout(timer);
|
21
|
+
resolve(response);
|
22
|
+
timer = null;
|
23
|
+
status = 1;
|
24
|
+
}
|
25
|
+
if (response.ok) {
|
26
|
+
return response.json();
|
27
|
+
}
|
28
|
+
throw new Error('Network response was not ok.');
|
29
|
+
}).then(function (data) {
|
30
|
+
retryTimes = 0;
|
31
|
+
callback(data);
|
32
|
+
}).catch(function (error) {
|
33
|
+
if (retryTimes > 0) {
|
34
|
+
retryTimes -= 1;
|
35
|
+
setTimeout(() => {
|
36
|
+
request();
|
37
|
+
}, 5000);
|
38
|
+
} else {
|
39
|
+
timeout();
|
40
|
+
}
|
41
|
+
});
|
42
|
+
});
|
43
|
+
}
|
44
|
+
request();
|
45
|
+
},
|
46
|
+
layout: (cfg) => {
|
47
|
+
const el = cfg.el;
|
48
|
+
ContributorsJS.requestAPI(cfg.api, function (data) {
|
49
|
+
el.querySelector('.loading-wrap').remove();
|
50
|
+
var cellALL = "";
|
51
|
+
(data || []).forEach((item, i) => {
|
52
|
+
var user = '<div class="user-card">';
|
53
|
+
user += '<a class="card-link" target="_blank" rel="external noopener noreferrer"';
|
54
|
+
user += ' href="' + item.html_url + '">';
|
55
|
+
user += '<img alt="' + item.login + '" src="' + (item.avatar_url || cfg.avatar) + '" onerror="errorImgAvatar(this)">';
|
56
|
+
user += '<div class="name"><span>' + item.login + '</span></div>';
|
57
|
+
user += '</a>';
|
58
|
+
user += '</div>';
|
59
|
+
cellALL += user;
|
60
|
+
});
|
61
|
+
el.querySelector('.group-body').innerHTML = cellALL;
|
62
|
+
}, function () {
|
63
|
+
try {
|
64
|
+
el.querySelector('.loading-wrap svg').remove();
|
65
|
+
el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');
|
66
|
+
} catch (e) { }
|
67
|
+
});
|
68
|
+
},
|
69
|
+
start: () => {
|
70
|
+
const els = document.getElementsByClassName('contributorsjs-wrap');
|
71
|
+
for (var i = 0; i < els.length; i++) {
|
72
|
+
const el = els[i];
|
73
|
+
const api = el.getAttribute('api');
|
74
|
+
if (api == null) {
|
75
|
+
continue;
|
76
|
+
}
|
77
|
+
var cfg = new Object();
|
78
|
+
cfg.el = el;
|
79
|
+
cfg.api = api;
|
80
|
+
cfg.class = el.getAttribute('class');
|
81
|
+
cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar;
|
82
|
+
ContributorsJS.layout(cfg);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
ContributorsJS.start();
|
90
|
+
document.addEventListener('pjax:complete', function () {
|
91
|
+
ContributorsJS.start();
|
92
|
+
});
|
@@ -0,0 +1,93 @@
|
|
1
|
+
const FriendsJS = {
|
2
|
+
requestAPI: (url, callback, timeout) => {
|
3
|
+
let retryTimes = 5;
|
4
|
+
|
5
|
+
function request() {
|
6
|
+
return new Promise((resolve, reject) => {
|
7
|
+
let status = 0; // 0 等待 1 完成 2 超时
|
8
|
+
let timer = setTimeout(() => {
|
9
|
+
if (status === 0) {
|
10
|
+
status = 2;
|
11
|
+
timer = null;
|
12
|
+
reject('请求超时');
|
13
|
+
if (retryTimes == 0) {
|
14
|
+
timeout();
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}, 5000);
|
18
|
+
fetch(url).then(function (response) {
|
19
|
+
if (status !== 2) {
|
20
|
+
clearTimeout(timer);
|
21
|
+
resolve(response);
|
22
|
+
timer = null;
|
23
|
+
status = 1;
|
24
|
+
}
|
25
|
+
if (response.ok) {
|
26
|
+
return response.json();
|
27
|
+
}
|
28
|
+
throw new Error('Network response was not ok.');
|
29
|
+
}).then(function (data) {
|
30
|
+
retryTimes = 0;
|
31
|
+
callback(data);
|
32
|
+
}).catch(function (error) {
|
33
|
+
if (retryTimes > 0) {
|
34
|
+
retryTimes -= 1;
|
35
|
+
setTimeout(() => {
|
36
|
+
request();
|
37
|
+
}, 5000);
|
38
|
+
} else {
|
39
|
+
timeout();
|
40
|
+
}
|
41
|
+
});
|
42
|
+
});
|
43
|
+
}
|
44
|
+
request();
|
45
|
+
},
|
46
|
+
layout: (cfg) => {
|
47
|
+
const el = cfg.el;
|
48
|
+
FriendsJS.requestAPI(cfg.api, function (data) {
|
49
|
+
el.querySelector('.loading-wrap').remove();
|
50
|
+
const arr = data.content;
|
51
|
+
var cellALL = "";
|
52
|
+
arr.forEach((item, i) => {
|
53
|
+
var user = '<div class="user-card">';
|
54
|
+
user += '<a class="card-link" target="_blank" rel="external noopener noreferrer"';
|
55
|
+
user += ' href="' + item.url + '">';
|
56
|
+
user += '<img alt="' + item.title + '" src="' + (item.avatar || cfg.avatar) + '" onerror="errorImgAvatar(this)">';
|
57
|
+
user += '<div class="name"><span>' + item.title + '</span></div>';
|
58
|
+
user += '</a>';
|
59
|
+
user += '</div>';
|
60
|
+
cellALL += user;
|
61
|
+
});
|
62
|
+
el.querySelector('.group-body').innerHTML = cellALL;
|
63
|
+
}, function () {
|
64
|
+
try {
|
65
|
+
el.querySelector('.loading-wrap svg').remove();
|
66
|
+
el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');
|
67
|
+
} catch (e) { }
|
68
|
+
});
|
69
|
+
},
|
70
|
+
start: () => {
|
71
|
+
const els = document.getElementsByClassName('friendsjs-wrap');
|
72
|
+
for (var i = 0; i < els.length; i++) {
|
73
|
+
const el = els[i];
|
74
|
+
const api = el.getAttribute('api');
|
75
|
+
if (api == null) {
|
76
|
+
continue;
|
77
|
+
}
|
78
|
+
var cfg = new Object();
|
79
|
+
cfg.el = el;
|
80
|
+
cfg.api = api;
|
81
|
+
cfg.class = el.getAttribute('class');
|
82
|
+
cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar;
|
83
|
+
FriendsJS.layout(cfg);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
FriendsJS.start();
|
91
|
+
document.addEventListener('pjax:complete', function () {
|
92
|
+
FriendsJS.start();
|
93
|
+
});
|
@@ -0,0 +1,96 @@
|
|
1
|
+
const SitesJS = {
|
2
|
+
requestAPI: (url, callback, timeout) => {
|
3
|
+
let retryTimes = 5;
|
4
|
+
|
5
|
+
function request() {
|
6
|
+
return new Promise((resolve, reject) => {
|
7
|
+
let status = 0; // 0 等待 1 完成 2 超时
|
8
|
+
let timer = setTimeout(() => {
|
9
|
+
if (status === 0) {
|
10
|
+
status = 2;
|
11
|
+
timer = null;
|
12
|
+
reject('请求超时');
|
13
|
+
if (retryTimes == 0) {
|
14
|
+
timeout();
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}, 5000);
|
18
|
+
fetch(url).then(function (response) {
|
19
|
+
if (status !== 2) {
|
20
|
+
clearTimeout(timer);
|
21
|
+
resolve(response);
|
22
|
+
timer = null;
|
23
|
+
status = 1;
|
24
|
+
}
|
25
|
+
if (response.ok) {
|
26
|
+
return response.json();
|
27
|
+
}
|
28
|
+
throw new Error('Network response was not ok.');
|
29
|
+
}).then(function (data) {
|
30
|
+
retryTimes = 0;
|
31
|
+
callback(data);
|
32
|
+
}).catch(function (error) {
|
33
|
+
if (retryTimes > 0) {
|
34
|
+
retryTimes -= 1;
|
35
|
+
setTimeout(() => {
|
36
|
+
request();
|
37
|
+
}, 5000);
|
38
|
+
} else {
|
39
|
+
timeout();
|
40
|
+
}
|
41
|
+
});
|
42
|
+
});
|
43
|
+
}
|
44
|
+
request();
|
45
|
+
},
|
46
|
+
layout: (cfg) => {
|
47
|
+
const el = cfg.el;
|
48
|
+
SitesJS.requestAPI(cfg.api, function (data) {
|
49
|
+
el.querySelector('.loading-wrap').remove();
|
50
|
+
const arr = data.content;
|
51
|
+
var cellALL = "";
|
52
|
+
arr.forEach((item, i) => {
|
53
|
+
var cell = '<div class="site-card">';
|
54
|
+
cell += '<a class="card-link" target="_blank" rel="external noopener noreferrer" href="' + item.url + '">';
|
55
|
+
cell += '<img alt="' + item.title + '" src="' + (item.screenshot || ('https://image.thum.io/get/width/1024/crop/768/' + item.url)) + '" onerror="errorImgCover(this)"/>';
|
56
|
+
cell += '<div class="info">';
|
57
|
+
cell += '<img alt="' + item.title + '" src="' + (item.avatar || cfg.avatar) + '" onerror="errorImgAvatar(this)"/>';
|
58
|
+
cell += '<span class="title">' + item.title + '</span>';
|
59
|
+
cell += '<span class="desc">' + (item.description || item.url) + '</span>';
|
60
|
+
cell += '</div>';
|
61
|
+
cell += '</a>';
|
62
|
+
cell += '</div>';
|
63
|
+
cellALL += cell;
|
64
|
+
});
|
65
|
+
el.querySelector('.group-body').innerHTML = cellALL;
|
66
|
+
}, function () {
|
67
|
+
try {
|
68
|
+
el.querySelector('.loading-wrap svg').remove();
|
69
|
+
el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');
|
70
|
+
} catch (e) { }
|
71
|
+
});
|
72
|
+
},
|
73
|
+
start: (cfg) => {
|
74
|
+
const els = document.getElementsByClassName('sitesjs-wrap');
|
75
|
+
for (var i = 0; i < els.length; i++) {
|
76
|
+
const el = els[i];
|
77
|
+
const api = el.getAttribute('api');
|
78
|
+
if (api == null) {
|
79
|
+
continue;
|
80
|
+
}
|
81
|
+
var cfg = new Object();
|
82
|
+
cfg.class = el.getAttribute('class');
|
83
|
+
cfg.el = el;
|
84
|
+
cfg.api = api;
|
85
|
+
cfg.avatar = volantis.GLOBAL_CONFIG.default.link;
|
86
|
+
cfg.screenshot = volantis.GLOBAL_CONFIG.default.cover;
|
87
|
+
SitesJS.layout(cfg);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
|
93
|
+
SitesJS.start();
|
94
|
+
document.addEventListener('pjax:complete', function () {
|
95
|
+
SitesJS.start();
|
96
|
+
});
|
@@ -0,0 +1,192 @@
|
|
1
|
+
let SearchService = (() => {
|
2
|
+
const fn = {};
|
3
|
+
fn.queryText = null;
|
4
|
+
fn.data = null;
|
5
|
+
fn.template = `<div id="u-search">
|
6
|
+
<div class="modal">
|
7
|
+
<header class="modal-header" class="clearfix">
|
8
|
+
<form id="u-search-modal-form" class="u-search-form" name="uSearchModalForm">
|
9
|
+
<input type="text" id="u-search-modal-input" class="u-search-input" />
|
10
|
+
<button type="submit" id="u-search-modal-btn-submit" class="u-search-btn-submit">
|
11
|
+
<span class="fa-solid fa-search"></span>
|
12
|
+
</button>
|
13
|
+
</form>
|
14
|
+
<a id="u-search-btn-close" class="btn-close"> <span class="fa-solid fa-times"></span> </a>
|
15
|
+
</header>
|
16
|
+
<main class="modal-body">
|
17
|
+
<ul class="modal-results"></ul>
|
18
|
+
</main>
|
19
|
+
</div>
|
20
|
+
<div id="modal-overlay" class="modal-overlay"></div>
|
21
|
+
</div>
|
22
|
+
`;
|
23
|
+
fn.init = () => {
|
24
|
+
let div = document.createElement("div");
|
25
|
+
div.innerHTML += fn.template;
|
26
|
+
document.body.append(div);
|
27
|
+
document.querySelectorAll(".u-search-form").forEach((e) => {
|
28
|
+
e.addEventListener("submit", fn.onSubmit, false);
|
29
|
+
});
|
30
|
+
let uSearchModalInput = document.querySelector("#u-search-modal-input");
|
31
|
+
uSearchModalInput.addEventListener("input", fn.onSubmit);
|
32
|
+
document
|
33
|
+
.querySelector("#u-search-btn-close")
|
34
|
+
.addEventListener("click", fn.close, false);
|
35
|
+
document
|
36
|
+
.querySelector("#modal-overlay")
|
37
|
+
.addEventListener("click", fn.close, false);
|
38
|
+
};
|
39
|
+
fn.onSubmit = (event) => {
|
40
|
+
event.preventDefault();
|
41
|
+
let input = event.target.querySelector(".u-search-input");
|
42
|
+
if (input) {
|
43
|
+
fn.queryText = input.value;
|
44
|
+
} else {
|
45
|
+
fn.queryText = event.target.value;
|
46
|
+
}
|
47
|
+
|
48
|
+
if (fn.queryText) {
|
49
|
+
fn.search();
|
50
|
+
}
|
51
|
+
};
|
52
|
+
fn.search = async () => {
|
53
|
+
document.querySelectorAll(".u-search-input").forEach((e) => {
|
54
|
+
e.value = fn.queryText;
|
55
|
+
});
|
56
|
+
document.querySelector("#u-search").style.display = "block";
|
57
|
+
if (!fn.data) {
|
58
|
+
fn.data = await fn.fetchData();
|
59
|
+
}
|
60
|
+
let results = "";
|
61
|
+
results += fn.buildResultList(fn.data.pages);
|
62
|
+
results += fn.buildResultList(fn.data.posts);
|
63
|
+
document.querySelector("#u-search .modal-results").innerHTML = results;
|
64
|
+
window.pjax && pjax.refresh(document.querySelector("#u-search"));
|
65
|
+
document.addEventListener("keydown", function f(event) {
|
66
|
+
if (event.code === "Escape") {
|
67
|
+
fn.close();
|
68
|
+
document.removeEventListener("keydown", f);
|
69
|
+
}
|
70
|
+
});
|
71
|
+
};
|
72
|
+
fn.close = () => {
|
73
|
+
document.querySelector("#u-search").style.display = "none";
|
74
|
+
};
|
75
|
+
fn.fetchData = () => {
|
76
|
+
return fetch(SearchServiceDataPath)
|
77
|
+
.then((response) => response.text())
|
78
|
+
.then((res) => {
|
79
|
+
const data = JSON.parse(res);
|
80
|
+
// console.log(data);
|
81
|
+
return data;
|
82
|
+
});
|
83
|
+
};
|
84
|
+
fn.buildResultList = (data) => {
|
85
|
+
let html = "";
|
86
|
+
data.forEach((post) => {
|
87
|
+
if (post.text) {
|
88
|
+
post.text = post.text.replace(/12345\d*/g, "") // 简易移除代码行号
|
89
|
+
}
|
90
|
+
if (!post.title && post.text) {
|
91
|
+
post.title = post.text.trim().slice(0, 15)
|
92
|
+
}
|
93
|
+
if (fn.contentSearch(post)) {
|
94
|
+
html += fn.buildResult(post.permalink, post.title, post.digest);
|
95
|
+
}
|
96
|
+
});
|
97
|
+
return html;
|
98
|
+
};
|
99
|
+
fn.contentSearch = (post) => {
|
100
|
+
let post_title = post.title.trim().toLowerCase();
|
101
|
+
let post_content = post.text.trim().toLowerCase();
|
102
|
+
let keywords = fn.queryText
|
103
|
+
.trim()
|
104
|
+
.toLowerCase()
|
105
|
+
.split(/[-\s]+/);
|
106
|
+
let foundMatch = false;
|
107
|
+
let index_title = -1;
|
108
|
+
let index_content = -1;
|
109
|
+
let first_occur = -1;
|
110
|
+
if (post_title && post_content) {
|
111
|
+
keywords.forEach((word, index) => {
|
112
|
+
index_title = post_title.indexOf(word);
|
113
|
+
index_content = post_content.indexOf(word);
|
114
|
+
if (index_title < 0 && index_content < 0) {
|
115
|
+
foundMatch = false;
|
116
|
+
} else {
|
117
|
+
foundMatch = true;
|
118
|
+
if (index_content < 0) {
|
119
|
+
index_content = 0;
|
120
|
+
}
|
121
|
+
if (index === 0) {
|
122
|
+
first_occur = index_content;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
if (foundMatch) {
|
126
|
+
post_content = post.text.trim();
|
127
|
+
let start = 0;
|
128
|
+
let end = 0;
|
129
|
+
if (first_occur >= 0) {
|
130
|
+
start = Math.max(first_occur - 40, 0);
|
131
|
+
end =
|
132
|
+
start === 0
|
133
|
+
? Math.min(200, post_content.length)
|
134
|
+
: Math.min(first_occur + 120, post_content.length);
|
135
|
+
let match_content = post_content.substring(start, end);
|
136
|
+
keywords.forEach(function (keyword) {
|
137
|
+
let regS = new RegExp(keyword, "gi");
|
138
|
+
match_content = match_content.replace(
|
139
|
+
regS,
|
140
|
+
"<b mark>" + keyword + "</b>"
|
141
|
+
);
|
142
|
+
});
|
143
|
+
post.digest = match_content + "......";
|
144
|
+
} else {
|
145
|
+
end = Math.min(200, post_content.length);
|
146
|
+
post.digest = post_content.trim().substring(0, end);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
});
|
150
|
+
}
|
151
|
+
return foundMatch;
|
152
|
+
};
|
153
|
+
fn.buildResult = (url, title, digest) => {
|
154
|
+
let result = fn.getUrlRelativePath(url);
|
155
|
+
let html = "";
|
156
|
+
html += "<li>";
|
157
|
+
html +=
|
158
|
+
"<a class='result' href='" + result + "?keyword=" + fn.queryText + "'>";
|
159
|
+
html += "<span class='title'>" + title + "</span>";
|
160
|
+
if (digest !== "") html += "<span class='digest'>" + digest + "</span>";
|
161
|
+
html += "</a>";
|
162
|
+
html += "</li>";
|
163
|
+
return html;
|
164
|
+
};
|
165
|
+
fn.getUrlRelativePath = function (url) {
|
166
|
+
let arrUrl = url.split("//");
|
167
|
+
let start = arrUrl[1].indexOf("/");
|
168
|
+
let relUrl = arrUrl[1].substring(start);
|
169
|
+
if (relUrl.indexOf("?") != -1) {
|
170
|
+
relUrl = relUrl.split("?")[0];
|
171
|
+
}
|
172
|
+
return relUrl;
|
173
|
+
};
|
174
|
+
return {
|
175
|
+
init: () => {
|
176
|
+
fn.init();
|
177
|
+
},
|
178
|
+
setQueryText: (queryText) => {
|
179
|
+
fn.queryText = queryText;
|
180
|
+
},
|
181
|
+
search: () => {
|
182
|
+
fn.search();
|
183
|
+
},
|
184
|
+
};
|
185
|
+
})();
|
186
|
+
Object.freeze(SearchService);
|
187
|
+
|
188
|
+
SearchService.init();
|
189
|
+
document.addEventListener("pjax:success", SearchService.init);
|
190
|
+
document.addEventListener("pjax:send", function () {
|
191
|
+
document.querySelector("#u-search").style.display = "none";
|
192
|
+
});
|
package/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"name":"@mlikiowa/nanaeo","description":"Volantis nanaeo","version":"1.0.
|
1
|
+
{"name":"@mlikiowa/nanaeo","description":"Volantis nanaeo","version":"1.0.1702967739786","license":"MIT","repository":{"type":"git","url":"git+https://github.com/MliKiowa/nanaeo.git"},"author":"Volantis Community","keywords":["Volantis","Community","static"],"main":"LICENSE"}
|