add
This commit is contained in:
parent
da958c6f02
commit
fbef08887d
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
**.DS_Store
|
BIN
icon/ai.png
Normal file
BIN
icon/ai.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 89 KiB |
1882
icon/ai.svg
Normal file
1882
icon/ai.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 50 KiB |
BIN
icon/apple-touch-icon.png
Normal file
BIN
icon/apple-touch-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 89 KiB |
BIN
icon/avatar.png
Normal file
BIN
icon/avatar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 557 KiB |
BIN
icon/term.png
Normal file
BIN
icon/term.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
25
index.html
Normal file
25
index.html
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>ai/term</title>
|
||||||
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="author" content="syui" />
|
||||||
|
<meta name="copyright" content="© syui" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
||||||
|
<link rel="icon" href="/icon/ai.png" />
|
||||||
|
<link rel="shortcut icon" href="/icon/ai.png" />
|
||||||
|
<link rel="stylesheet" href="/pkg/jquery.terminal/css/jquery.terminal.css" />
|
||||||
|
<link rel="stylesheet" href="/css/terminal.css" />
|
||||||
|
<link rel="stylesheet" href="/css/terminal.mobile.css" />
|
||||||
|
<script src="/pkg/jquery.ajax/jquery.min.js"></script>
|
||||||
|
<script src="/pkg/axios/dist/axios.min.js"></script>
|
||||||
|
<script src="/pkg/jquery.hotkeys/jquery.hotkeys.js"></script>
|
||||||
|
<script src="/pkg/jquery.hotkeys/hotkeys.js"></script>
|
||||||
|
<script src="/pkg/jquery.terminal/js/jquery.terminal.min.js"></script>
|
||||||
|
<script src="/pkg/jquery.terminal/js/jquery.mousewheel-min.js"></script>
|
||||||
|
<script src="/js/terminal.quick.js"></script>
|
||||||
|
<script src="/js/terminal.js"></script>
|
||||||
|
<app></app>
|
||||||
|
<script src="/js/bundle.js"></script>
|
||||||
|
<script src="/js/terminal-open.js"></script>
|
||||||
|
</head>
|
5241
js/bundle.js
Normal file
5241
js/bundle.js
Normal file
File diff suppressed because one or more lines are too long
2
js/terminal-open.js
Normal file
2
js/terminal-open.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
let e = document.querySelector('home-layout');
|
||||||
|
e.style.display = "block";
|
160
js/terminal.js
Executable file
160
js/terminal.js
Executable file
@ -0,0 +1,160 @@
|
|||||||
|
$(function() {
|
||||||
|
var prompt = "[[b;#87cefa;]ai][[b;#FFFF00;]@aios] ~$ ";
|
||||||
|
|
||||||
|
var u = window.location.pathname.split('/').slice(-1)[0];
|
||||||
|
if (u) {
|
||||||
|
prompt = "[[b;#87cefa;]" + u + "][[b;#FFFF00;]@aios] ~$ ";
|
||||||
|
};
|
||||||
|
var tab = "[[b;#87cefa;]<tab>]";
|
||||||
|
var command_all = ["ai","bsky", "w"];
|
||||||
|
var handle = "yui.syui.ai";
|
||||||
|
|
||||||
|
var ascii_logo = '\n\ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠉⠀⠀⠀⠀⠀⠈⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀\⠀ \n⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣤⣤⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀\⠀ \n⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀\⠀ \n⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆\⠀ \n⠀⠀⠘⠛⠛⠛⠛⠉⠉⠉⠉⠁⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠛⠛⠛\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠟⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\⠀ \n\n';
|
||||||
|
|
||||||
|
var ascii_ai = "\n\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⣁⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠋⣉⣉⠡⠤⠤⠤⠤⠤⠤⠤⠤⠬⠤⣁⣉⡉⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢉⣤⡖⠚⣉⣡⣤⣦⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣴⣤⣤⠉⠑⣦⣌⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣾⣿⣦⣄⣅⣌⣄⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣶⣾⣿⣿⣁⣘⡙⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢃⣤⣨⣿⡿⡿⠟⠟⠛⠻⠚⠛⠛⠛⠛⠛⠛⠋⡋⡋⠛⠛⠉⠉⠼⠿⠿⠿⠿⠿⠷⢶⢤⣈⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢋⡡⠞⠛⣉⣉⣤⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣶⣶⣶⣶⣶⣦⣦⣦⣦⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⢁⣀⣤⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠋⡉⣉⣉⣁⣨⣀⣅⣉⣉⢉⠛⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⣁⡤⣴⣲⢯⢯⡯⣗⡯⣞⡾⣺⣺⢵⢯⢯⣟⢶⢦⣤⣀⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⣠⣔⡯⣗⡯⣗⡯⡯⣟⣞⣗⡯⣗⡯⣗⡯⡯⣟⣽⣺⢽⢽⣺⣳⢯⣟⡦⣌⡙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⣠⣻⣺⣺⢽⣳⢯⣗⡯⡯⣗⡯⡾⣝⣗⡯⣗⡯⡯⣗⣗⡯⣟⣽⣺⣺⢽⣺⢽⣳⣻⢦⣈⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⢠⣺⣳⢽⣺⣺⢽⣺⢽⣺⢽⣫⣗⡯⡯⣗⣗⡯⣗⡯⡯⣗⣗⡯⣗⣗⡯⡾⣽⣺⢽⡽⣾⣽⣺⢵⡀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⣔⣟⣞⡾⣽⣺⣺⢽⣺⢽⣺⢽⣺⣺⢽⣫⣗⣗⡯⣗⡯⡯⣗⣗⡯⣗⣗⡯⡯⣗⡯⣟⣞⣗⡿⣾⣽⢽⢦⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⡮⣗⡯⡾⣝⡷⣽⣺⢽⣺⢽⣺⢽⣺⣺⢽⣺⣺⢵⢯⣗⡯⡯⣗⣗⡯⣗⣗⡯⡯⣗⡯⣗⣟⡾⣽⣻⣿⣯⣟⢷⡀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢀⡾⣝⣗⡯⡯⣗⡯⣗⡯⣟⡾⣽⣺⢽⣺⣺⢽⣺⣺⢽⢽⣺⢽⣫⣗⣗⡯⣗⣗⡯⡯⣗⡯⣗⡷⣻⣗⡷⣿⣟⣿⣽⣳⠈⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⣼⢽⣳⢗⡯⡯⣗⡯⣗⡯⣗⡯⣗⡯⠛⣞⡾⣽⣺⣺⢽⢽⣺⢽⣺⣺⢵⢯⣗⣗⡏⠙⣗⡯⣗⣯⢯⣷⢿⣽⣿⣿⡾⡽⣇⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⢸⣳⢽⣺⢽⢽⣫⣗⡯⣗⡯⣗⣯⡓⢡⡂⢵⢯⣗⡯⡾⣽⢽⣺⢽⣺⣺⢽⢽⣺⡞⢀⢇⠸⣽⣳⢽⣯⢿⣿⣿⣽⣷⣿⢯⢿⠀⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣞⡾⣽⣺⢽⢽⣺⣺⢽⣳⢯⣗⠇⢠⣿⠆⢸⢽⣺⢽⢽⣳⣻⣺⢽⣺⣺⢽⢽⡺⠁⡬⣿⡀⢳⡽⡽⣾⡯⢿⣯⣿⣽⣿⣻⢽⡃⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠠⣗⡯⣗⡯⣟⣽⣺⣺⢽⣺⢽⡺⢀⣿⣿⢅⠈⣟⡾⣽⢽⣺⢵⢯⣻⣺⣺⢽⢽⠃⡰⣽⣿⡇⢸⡽⡽⣿⢝⣽⣿⣿⣺⣿⡯⣯⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣳⢯⣗⡯⣗⣗⡯⡾⣽⣺⢽⠂⣸⣿⣾⡕⡀⢗⡯⣗⣟⡾⡽⣽⣺⣳⢽⢽⠃⢰⣱⣿⣷⡇⢸⡯⣟⠟⠀⣿⡿⣞⣾⣻⣽⡳⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣺⢽⣺⢽⣳⢗⡯⡯⣗⡯⡏⢀⣿⢿⣾⣗⠆⠸⣽⡳⣗⡯⡯⣗⣗⡯⣯⠏⢠⢣⣿⣿⣾⡇⢸⢯⠏⣰⠀⣿⣻⣳⣳⣿⣺⢽⠅⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠸⣺⢽⣺⢽⣺⢽⢽⣫⢷⠉⡇⠰⣿⣿⣻⣽⣎⠀⢗⡯⡗⢙⣽⡳⣗⡯⡏⢀⣗⣿⣿⣷⣿⠂⣺⠋⣠⣿⠀⣿⣺⢵⣫⣿⣺⢽⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠈⣗⣟⡾⣽⣺⢽⢽⣺⠍⠀⡇⠘⣉⣤⣬⣈⣑⣅⠘⣽⠂⠘⣮⢯⣗⠏⢠⡟⣉⣡⠤⢤⠄⢠⠃⢴⡟⣯⠀⣗⡯⠟⡾⣗⡯⡇⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⢸⣳⢯⣗⡯⣟⣽⡺⢀⠃⠀⠸⠋⢡⢡⡉⠻⣷⡄⠸⢀⡆⢹⣳⠃⣴⣿⣿⠋⣠⠐⡔⠀⠂⢳⡄⢰⣟⠀⠉⣠⣦⠘⣷⡻⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢡⡀⢯⣗⣗⡯⣗⣷⡃⠀⣼⠀⠀⠓⠀⠓⢽⠄⢹⣿⡄⢐⣧⠘⢁⣾⣿⣯⡯⢐⢌⠀⠁⣜⠆⢸⣿⡀⢟⠀⢨⣄⠙⡇⢹⠃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣌⠣⡈⢾⢵⢯⣗⢷⡃⢰⣿⡧⠈⣟⡀⠀⡸⡅⢸⡿⣿⣦⣹⣶⣻⣿⣷⣿⣇⠨⣫⢀⢀⢎⠃⣼⡿⣇⡾⠀⡢⠘⣨⠇⠈⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡐⠈⢫⣟⢾⢽⡂⢹⣿⣿⡄⠱⢕⢵⠝⢀⣾⣿⣿⣻⣿⣻⣿⣻⣾⣟⣿⣆⠑⡕⠗⣁⣴⣿⡿⣿⠃⠄⣾⣵⡟⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠫⣟⡽⡃⢸⣿⣾⣿⡷⣾⣴⣻⡿⣯⣷⣿⣿⣻⣿⣽⣿⣟⣿⣻⣿⣟⣷⡿⣿⣽⣾⣿⡏⢠⠴⠟⠁⠄⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡈⢯⢧⠈⢿⣿⣾⣿⣿⣾⣿⢿⣿⣟⣿⣾⣿⣼⣿⣾⢿⣻⣿⣽⣿⣻⣿⣿⣻⣯⡿⠀⡄⡔⡔⠅⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠙⢆⠈⠻⣾⣿⣾⢿⣾⣿⣿⣽⠻⢷⣿⣻⣾⠿⠟⢿⣻⣽⣾⣿⢿⣾⡿⠋⡁⡜⠌⠈⣠⠪⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⡂⠀⣤⡈⠻⣾⣿⢿⣷⡿⣯⣷⣤⣤⣤⣤⣶⣾⣿⣿⢿⣻⠽⠛⢉⢠⠸⠈⡠⣰⠀⣿⡀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⠀⢨⣗⡯⣖⡄⢈⠉⠓⠻⠿⢿⣟⣿⣻⣿⠽⠟⠞⠋⢉⢠⠀⡰⠑⢁⢰⠀⡯⣪⠀⣳⣇⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡗⠨⠀⣻⢮⡯⢺⠀⢜⠈⡊⢐⢶⢔⡤⡤⣤⢤⢖⣖⢷⠅⢸⠀⠐⢁⡴⡇⡘⢠⡫⡎⡇⢸⣺⡄⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⡯⣗⠇⡪⠀⡃⠠⡃⠨⣿⣷⣯⣿⣾⣽⣷⣯⣿⠂⠀⡠⠀⣻⣺⡇⠀⢸⡂⢝⢦⠐⣗⣧⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⣜⠀⡯⡿⠀⠆⢐⠁⢜⠌⢨⣿⣾⣿⣽⣯⣿⣷⣿⢿⡁⢌⠐⠀⣳⣳⡃⠀⡪⡇⢸⢕⠄⢳⢽⡆⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⡰⢱⠀⡯⡏⠨⠂⢀⡈⢈⡄⢸⣷⣿⣷⢿⣯⣷⣿⣾⣿⣆⠙⠅⠀⣞⣾⠀⢀⢯⡢⠘⣎⢇⠘⡽⣽⡀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⣰⡹⠀⢯⠇⢘⠀⠍⣴⣿⣤⣿⡿⣷⣿⢿⣻⣽⣷⣿⡿⣿⣷⡂⢀⣗⣿⠀⠰⠣⢯⡀⢗⡝⡄⠹⣳⢧⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢁⠔⢁⠞⣈⣴⠀⣫⠃⡐⢀⢞⣿⡿⣾⣟⣿⣿⣽⣿⡿⣟⣿⣾⡿⣿⣽⡂⢐⣗⡗⢀⣶⣦⣦⣤⣄⣉⠘⠀⠹⡽⣆⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⡠⠃⡔⢁⣼⣿⡿⠀⢸⠀⡂⢸⢸⣿⡿⣟⣿⢿⣞⡿⣾⣿⢿⣟⣷⢿⣿⣷⠁⢰⢯⡇⢰⣿⣯⣿⣟⣿⡿⣿⣷⣤⣈⠛⢆⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢠⠊⡠⢊⣰⣿⣿⠟⣰⠀⢸⠀⠀⡎⣾⠿⠟⠛⣉⢉⠚⢮⢿⣾⢿⣝⠮⢋⣠⣈⠂⣸⢽⠀⢼⣟⣯⣷⣿⣟⣿⣿⣽⣿⣿⡷⡌⢣⡈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⡔⢁⡔⢡⣾⣿⣿⣧⡐⢿⠀⣞⠀⠀⣏⢦⡶⣞⣿⣽⣳⣳⣽⣿⢿⣻⣾⣴⣳⣷⣿⠀⣺⡝⠀⣽⣿⢿⣻⣽⣿⣽⣾⡿⣯⣿⣿⣿⡀⢳⡀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
\n⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⢀⠎⢠⠎⣠⣿⣿⣿⣿⣿⣿⣦⠀⡯⠀⠐⠧⠻⠛⠛⢋⢋⠋⠙⠛⠿⣿⢿⣷⡿⣿⣽⡿⠀⣷⠃⠀⣿⡿⣿⡿⣿⣽⣯⣷⣿⣿⡿⣿⣻⡇⢀⠹⣆⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\
|
||||||
|
";
|
||||||
|
|
||||||
|
axios.get('https://card.syui.ai/json/card.json')
|
||||||
|
.then(function (response) {
|
||||||
|
all_card = JSON.stringify(response.data,null,"\t");
|
||||||
|
})
|
||||||
|
|
||||||
|
axios.get('https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=' + handle + '&collection=app.bsky.feed.post&limit=1')
|
||||||
|
.then(function (response) {
|
||||||
|
timeline = JSON.stringify(response.data.records[0].value,null,"\t");
|
||||||
|
})
|
||||||
|
|
||||||
|
axios.get('/json/u.json')
|
||||||
|
.then(function (response) {
|
||||||
|
user_profile = JSON.stringify(response.data,null,"\t");
|
||||||
|
})
|
||||||
|
|
||||||
|
function print_slowly(term, paragraph, callback) {
|
||||||
|
var foo, i, lines;
|
||||||
|
lines = paragraph.split("\n");
|
||||||
|
term.pause();
|
||||||
|
i = 0;
|
||||||
|
foo = function(lines) {
|
||||||
|
return setTimeout((function() {
|
||||||
|
if (i < lines.length - 1) {
|
||||||
|
term.echo(lines[i]);
|
||||||
|
i++;
|
||||||
|
return foo(lines);
|
||||||
|
} else {
|
||||||
|
term.resume();
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
|
}), 100);
|
||||||
|
};
|
||||||
|
return foo(lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
function require_command(command_regex, terminal_history) {
|
||||||
|
var executed = true;
|
||||||
|
$.each(terminal_history, function(index, value) {
|
||||||
|
if (command_regex.test(value)) {
|
||||||
|
executed = true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return executed;
|
||||||
|
}
|
||||||
|
|
||||||
|
function interpreter(input, term) {
|
||||||
|
var command, inputs;
|
||||||
|
inputs = input.split(/ +/)
|
||||||
|
command = inputs[0];
|
||||||
|
if (inputs[0] === 'ai') {
|
||||||
|
print_slowly(term, ascii_logo);
|
||||||
|
} else if (inputs[0] === 'w') {
|
||||||
|
term.echo(user_profile);
|
||||||
|
} else if (inputs[0] === 'bsky') {
|
||||||
|
print_slowly(term, timeline);
|
||||||
|
} else if (inputs[0] === 'card') {
|
||||||
|
term.echo(all_card);
|
||||||
|
} else {
|
||||||
|
term.error(command + " is not a valid command");
|
||||||
|
term.echo(command_all);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function bash(inputs, term) {
|
||||||
|
var argument, echo, insert;
|
||||||
|
echo = term.echo;
|
||||||
|
insert = term.insert;
|
||||||
|
if (!inputs[1]) {
|
||||||
|
//return console.log("none");
|
||||||
|
} else {
|
||||||
|
argument = inputs[1];
|
||||||
|
if (/^\.\./.test(argument)) {
|
||||||
|
return echo("-bash: cd: " + argument + ": Permission denied");
|
||||||
|
} else {
|
||||||
|
return echo("-bash: cd: " + argument + ": No such file or directory");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#terminal').terminal(interpreter, {
|
||||||
|
prompt: prompt,
|
||||||
|
name: 'test',
|
||||||
|
greetings: "",
|
||||||
|
exit: false,
|
||||||
|
height: 450,
|
||||||
|
onInit: function(term) {
|
||||||
|
//term.insert("ai");
|
||||||
|
//print_slowly(term, ascii_ai);
|
||||||
|
},
|
||||||
|
completion: function(term, string, callback) {
|
||||||
|
var t = $(term[0]).text();
|
||||||
|
if (t.match(/none/)) {
|
||||||
|
term.clear();
|
||||||
|
} else {
|
||||||
|
callback(command_all);
|
||||||
|
term.history().clear();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tabcompletion: true
|
||||||
|
});
|
||||||
|
});
|
11
js/terminal.quick.js
Normal file
11
js/terminal.quick.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
$(function(){
|
||||||
|
$("#mainTitle").click(function(){
|
||||||
|
$("home-layout").toggle();
|
||||||
|
});
|
||||||
|
$("#mainTitleA").click(function(){
|
||||||
|
$("home-layout").toggle();
|
||||||
|
});
|
||||||
|
$("#mainTitleB").click(function(){
|
||||||
|
$("home-layout").toggle();
|
||||||
|
});
|
||||||
|
});
|
48
pkg/axios/.bower.json
Normal file
48
pkg/axios/.bower.json
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "axios",
|
||||||
|
"main": "./dist/axios.js",
|
||||||
|
"version": "1.6.3",
|
||||||
|
"homepage": "https://axios-http.com",
|
||||||
|
"authors": [
|
||||||
|
"Matt Zabriskie"
|
||||||
|
],
|
||||||
|
"description": "Promise based HTTP client for the browser and node.js",
|
||||||
|
"moduleType": [
|
||||||
|
"amd",
|
||||||
|
"globals"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"xhr",
|
||||||
|
"http",
|
||||||
|
"ajax",
|
||||||
|
"promise",
|
||||||
|
"node"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"ignore": [
|
||||||
|
"**/.*",
|
||||||
|
"*.iml",
|
||||||
|
"examples",
|
||||||
|
"lib",
|
||||||
|
"node_modules",
|
||||||
|
"sandbox",
|
||||||
|
"test",
|
||||||
|
"CONTRIBUTING.md",
|
||||||
|
"COOKBOOK.md",
|
||||||
|
"Gruntfile.js",
|
||||||
|
"index.js",
|
||||||
|
"karma.conf.js",
|
||||||
|
"package.json",
|
||||||
|
"webpack.*.js"
|
||||||
|
],
|
||||||
|
"_release": "1.6.3",
|
||||||
|
"_resolution": {
|
||||||
|
"type": "version",
|
||||||
|
"tag": "v1.6.3",
|
||||||
|
"commit": "d85ba56700079f10701d52ba75b7bff2364e11a2"
|
||||||
|
},
|
||||||
|
"_source": "https://github.com/mzabriskie/axios.git",
|
||||||
|
"_target": "^1.6.3",
|
||||||
|
"_originalSource": "axios",
|
||||||
|
"_direct": true
|
||||||
|
}
|
803
pkg/axios/CHANGELOG.md
Normal file
803
pkg/axios/CHANGELOG.md
Normal file
@ -0,0 +1,803 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [1.6.3](https://github.com/axios/axios/compare/v1.6.2...v1.6.3) (2023-12-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Regular Expression Denial of Service (ReDoS) ([#6132](https://github.com/axios/axios/issues/6132)) ([5e7ad38](https://github.com/axios/axios/commit/5e7ad38fb0f819fceb19fb2ee5d5d38f56aa837d))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/4814473?v=4&s=18" alt="avatar" width="18"/> [Jay](https://github.com/jasonsaayman "+15/-6 (#6145 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/22686401?v=4&s=18" alt="avatar" width="18"/> [Willian Agostini](https://github.com/WillianAgostini "+17/-2 (#6132 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+3/-0 (#6084 )")
|
||||||
|
|
||||||
|
## [1.6.2](https://github.com/axios/axios/compare/v1.6.1...v1.6.2) (2023-11-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **withXSRFToken:** added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ([#6046](https://github.com/axios/axios/issues/6046)) ([cff9967](https://github.com/axios/axios/commit/cff996779b272a5e94c2b52f5503ccf668bc42dc))
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- feat(withXSRFToken): added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ( [#6046](https://api.github.com/repos/axios/axios/pulls/6046) )
|
||||||
|
```
|
||||||
|
|
||||||
|
📢 This PR added 'withXSRFToken' option as a replacement for old withCredentials behaviour.
|
||||||
|
You should now use withXSRFToken along with withCredential to get the old behavior.
|
||||||
|
This functionality is considered as a fix.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+271/-146 (#6081 #6080 #6079 #6078 #6046 #6064 #6063 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/79681367?v=4&s=18" alt="avatar" width="18"/> [Ng Choon Khon (CK)](https://github.com/ckng0221 "+4/-4 (#6073 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/9162827?v=4&s=18" alt="avatar" width="18"/> [Muhammad Noman](https://github.com/mnomanmemon "+2/-2 (#6048 )")
|
||||||
|
|
||||||
|
## [1.6.1](https://github.com/axios/axios/compare/v1.6.0...v1.6.1) (2023-11-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **formdata:** fixed content-type header normalization for non-standard browser environments; ([#6056](https://github.com/axios/axios/issues/6056)) ([dd465ab](https://github.com/axios/axios/commit/dd465ab22bbfa262c6567be6574bf46a057d5288))
|
||||||
|
* **platform:** fixed emulated browser detection in node.js environment; ([#6055](https://github.com/axios/axios/issues/6055)) ([3dc8369](https://github.com/axios/axios/commit/3dc8369e505e32a4e12c22f154c55fd63ac67fbb))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+432/-65 (#6059 #6056 #6055 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/3982806?v=4&s=18" alt="avatar" width="18"/> [Fabian Meyer](https://github.com/meyfa "+5/-2 (#5835 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- feat(withXSRFToken): added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ( [#6046](https://api.github.com/repos/axios/axios/pulls/6046) )
|
||||||
|
```
|
||||||
|
|
||||||
|
📢 This PR added 'withXSRFToken' option as a replacement for old withCredentials behaviour.
|
||||||
|
You should now use withXSRFToken along with withCredential to get the old behavior.
|
||||||
|
This functionality is considered as a fix.
|
||||||
|
```
|
||||||
|
|
||||||
|
# [1.6.0](https://github.com/axios/axios/compare/v1.5.1...v1.6.0) (2023-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **CSRF:** fixed CSRF vulnerability CVE-2023-45857 ([#6028](https://github.com/axios/axios/issues/6028)) ([96ee232](https://github.com/axios/axios/commit/96ee232bd3ee4de2e657333d4d2191cd389e14d0))
|
||||||
|
* **dns:** fixed lookup function decorator to work properly in node v20; ([#6011](https://github.com/axios/axios/issues/6011)) ([5aaff53](https://github.com/axios/axios/commit/5aaff532a6b820bb9ab6a8cd0f77131b47e2adb8))
|
||||||
|
* **types:** fix AxiosHeaders types; ([#5931](https://github.com/axios/axios/issues/5931)) ([a1c8ad0](https://github.com/axios/axios/commit/a1c8ad008b3c13d53e135bbd0862587fb9d3fc09))
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+449/-114 (#6032 #6021 #6011 #5932 #5931 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/63700910?v=4&s=18" alt="avatar" width="18"/> [Valentin Panov](https://github.com/valentin-panov "+4/-4 (#6028 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/76877078?v=4&s=18" alt="avatar" width="18"/> [Rinku Chaudhari](https://github.com/therealrinku "+1/-1 (#5889 )")
|
||||||
|
|
||||||
|
## [1.5.1](https://github.com/axios/axios/compare/v1.5.0...v1.5.1) (2023-09-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **adapters:** improved adapters loading logic to have clear error messages; ([#5919](https://github.com/axios/axios/issues/5919)) ([e410779](https://github.com/axios/axios/commit/e4107797a7a1376f6209fbecfbbce73d3faa7859))
|
||||||
|
* **formdata:** fixed automatic addition of the `Content-Type` header for FormData in non-browser environments; ([#5917](https://github.com/axios/axios/issues/5917)) ([bc9af51](https://github.com/axios/axios/commit/bc9af51b1886d1b3529617702f2a21a6c0ed5d92))
|
||||||
|
* **headers:** allow `content-encoding` header to handle case-insensitive values ([#5890](https://github.com/axios/axios/issues/5890)) ([#5892](https://github.com/axios/axios/issues/5892)) ([4c89f25](https://github.com/axios/axios/commit/4c89f25196525e90a6e75eda9cb31ae0a2e18acd))
|
||||||
|
* **types:** removed duplicated code ([9e62056](https://github.com/axios/axios/commit/9e6205630e1c9cf863adf141c0edb9e6d8d4b149))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+89/-18 (#5919 #5917 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/110460234?v=4&s=18" alt="avatar" width="18"/> [David Dallas](https://github.com/DavidJDallas "+11/-5 ()")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/71556073?v=4&s=18" alt="avatar" width="18"/> [Sean Sattler](https://github.com/fb-sean "+2/-8 ()")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/4294069?v=4&s=18" alt="avatar" width="18"/> [Mustafa Ateş Uzun](https://github.com/0o001 "+4/-4 ()")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/132928043?v=4&s=18" alt="avatar" width="18"/> [Przemyslaw Motacki](https://github.com/sfc-gh-pmotacki "+2/-1 (#5892 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/5492927?v=4&s=18" alt="avatar" width="18"/> [Michael Di Prisco](https://github.com/Cadienvan "+1/-1 ()")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
# [1.5.0](https://github.com/axios/axios/compare/v1.4.0...v1.5.0) (2023-08-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **adapter:** make adapter loading error more clear by using platform-specific adapters explicitly ([#5837](https://github.com/axios/axios/issues/5837)) ([9a414bb](https://github.com/axios/axios/commit/9a414bb6c81796a95c6c7fe668637825458e8b6d))
|
||||||
|
* **dns:** fixed `cacheable-lookup` integration; ([#5836](https://github.com/axios/axios/issues/5836)) ([b3e327d](https://github.com/axios/axios/commit/b3e327dcc9277bdce34c7ef57beedf644b00d628))
|
||||||
|
* **headers:** added support for setting header names that overlap with class methods; ([#5831](https://github.com/axios/axios/issues/5831)) ([d8b4ca0](https://github.com/axios/axios/commit/d8b4ca0ea5f2f05efa4edfe1e7684593f9f68273))
|
||||||
|
* **headers:** fixed common Content-Type header merging; ([#5832](https://github.com/axios/axios/issues/5832)) ([8fda276](https://github.com/axios/axios/commit/8fda2766b1e6bcb72c3fabc146223083ef13ce17))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* export getAdapter function ([#5324](https://github.com/axios/axios/issues/5324)) ([ca73eb8](https://github.com/axios/axios/commit/ca73eb878df0ae2dace81fe3a7f1fb5986231bf1))
|
||||||
|
* **export:** export adapters without `unsafe` prefix ([#5839](https://github.com/axios/axios/issues/5839)) ([1601f4a](https://github.com/axios/axios/commit/1601f4a27a81ab47fea228f1e244b2c4e3ce28bf))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+66/-29 (#5839 #5837 #5836 #5832 #5831 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/102841186?v=4&s=18" alt="avatar" width="18"/> [夜葬](https://github.com/geekact "+42/-0 (#5324 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/65978976?v=4&s=18" alt="avatar" width="18"/> [Jonathan Budiman](https://github.com/JBudiman00 "+30/-0 (#5788 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/5492927?v=4&s=18" alt="avatar" width="18"/> [Michael Di Prisco](https://github.com/Cadienvan "+3/-5 (#5791 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
# [1.4.0](https://github.com/axios/axios/compare/v1.3.6...v1.4.0) (2023-04-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **formdata:** add `multipart/form-data` content type for FormData payload on custom client environments; ([#5678](https://github.com/axios/axios/issues/5678)) ([bbb61e7](https://github.com/axios/axios/commit/bbb61e70cb1185adfb1cbbb86eaf6652c48d89d1))
|
||||||
|
* **package:** export package internals with unsafe path prefix; ([#5677](https://github.com/axios/axios/issues/5677)) ([df38c94](https://github.com/axios/axios/commit/df38c949f26414d88ba29ec1e353c4d4f97eaf09))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **dns:** added support for a custom lookup function; ([#5339](https://github.com/axios/axios/issues/5339)) ([2701911](https://github.com/axios/axios/commit/2701911260a1faa5cc5e1afe437121b330a3b7bb))
|
||||||
|
* **types:** export `AxiosHeaderValue` type. ([#5525](https://github.com/axios/axios/issues/5525)) ([726f1c8](https://github.com/axios/axios/commit/726f1c8e00cffa0461a8813a9bdcb8f8b9d762cf))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **merge-config:** optimize mergeConfig performance by avoiding duplicate key visits; ([#5679](https://github.com/axios/axios/issues/5679)) ([e6f7053](https://github.com/axios/axios/commit/e6f7053bf1a3e87cf1f9da8677e12e3fe829d68e))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+151/-16 (#5684 #5339 #5679 #5678 #5677 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/47537704?v=4&s=18" alt="avatar" width="18"/> [Arthur Fiorette](https://github.com/arthurfiorette "+19/-19 (#5525 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/43876655?v=4&s=18" alt="avatar" width="18"/> [PIYUSH NEGI](https://github.com/npiyush97 "+2/-18 (#5670 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.3.6](https://github.com/axios/axios/compare/v1.3.5...v1.3.6) (2023-04-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **types:** added transport to RawAxiosRequestConfig ([#5445](https://github.com/axios/axios/issues/5445)) ([6f360a2](https://github.com/axios/axios/commit/6f360a2531d8d70363fd9becef6a45a323f170e2))
|
||||||
|
* **utils:** make isFormData detection logic stricter to avoid unnecessary calling of the `toString` method on the target; ([#5661](https://github.com/axios/axios/issues/5661)) ([aa372f7](https://github.com/axios/axios/commit/aa372f7306295dfd1100c1c2c77ce95c95808e76))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+48/-10 (#5665 #5661 #5663 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/5492927?v=4&s=18" alt="avatar" width="18"/> [Michael Di Prisco](https://github.com/Cadienvan "+2/-0 (#5445 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.3.5](https://github.com/axios/axios/compare/v1.3.4...v1.3.5) (2023-04-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **headers:** fixed isValidHeaderName to support full list of allowed characters; ([#5584](https://github.com/axios/axios/issues/5584)) ([e7decef](https://github.com/axios/axios/commit/e7decef6a99f4627e27ed9ea5b00ce8e201c3841))
|
||||||
|
* **params:** re-added the ability to set the function as `paramsSerializer` config; ([#5633](https://github.com/axios/axios/issues/5633)) ([a56c866](https://github.com/axios/axios/commit/a56c8661209d5ce5a645a05f294a0e08a6c1f6b3))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+28/-10 (#5633 #5584 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.3.4](https://github.com/axios/axios/compare/v1.3.3...v1.3.4) (2023-02-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **blob:** added a check to make sure the Blob class is available in the browser's global scope; ([#5548](https://github.com/axios/axios/issues/5548)) ([3772c8f](https://github.com/axios/axios/commit/3772c8fe74112a56e3e9551f894d899bc3a9443a))
|
||||||
|
* **http:** fixed regression bug when handling synchronous errors inside the adapter; ([#5564](https://github.com/axios/axios/issues/5564)) ([a3b246c](https://github.com/axios/axios/commit/a3b246c9de5c3bc4b5a742e15add55b375479451))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+38/-26 (#5564 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/19550000?v=4&s=18" alt="avatar" width="18"/> [lcysgsg](https://github.com/lcysgsg "+4/-0 (#5548 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/5492927?v=4&s=18" alt="avatar" width="18"/> [Michael Di Prisco](https://github.com/Cadienvan "+3/-0 (#5444 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.3.3](https://github.com/axios/axios/compare/v1.3.2...v1.3.3) (2023-02-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **formdata:** added a check to make sure the FormData class is available in the browser's global scope; ([#5545](https://github.com/axios/axios/issues/5545)) ([a6dfa72](https://github.com/axios/axios/commit/a6dfa72010db5ad52db8bd13c0f98e537e8fd05d))
|
||||||
|
* **formdata:** fixed setting NaN as Content-Length for form payload in some cases; ([#5535](https://github.com/axios/axios/issues/5535)) ([c19f7bf](https://github.com/axios/axios/commit/c19f7bf770f90ae8307f4ea3104f227056912da1))
|
||||||
|
* **headers:** fixed the filtering logic of the clear method; ([#5542](https://github.com/axios/axios/issues/5542)) ([ea87ebf](https://github.com/axios/axios/commit/ea87ebfe6d1699af072b9e7cd40faf8f14b0ab93))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+11/-7 (#5545 #5535 #5542 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/19842213?v=4&s=18" alt="avatar" width="18"/> [陈若枫](https://github.com/ruofee "+2/-2 (#5467 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.3.2](https://github.com/axios/axios/compare/v1.3.1...v1.3.2) (2023-02-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **http:** treat http://localhost as base URL for relative paths to avoid `ERR_INVALID_URL` error; ([#5528](https://github.com/axios/axios/issues/5528)) ([128d56f](https://github.com/axios/axios/commit/128d56f4a0fb8f5f2ed6e0dd80bc9225fee9538c))
|
||||||
|
* **http:** use explicit import instead of TextEncoder global; ([#5530](https://github.com/axios/axios/issues/5530)) ([6b3c305](https://github.com/axios/axios/commit/6b3c305fc40c56428e0afabedc6f4d29c2830f6f))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+2/-1 (#5530 #5528 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.3.1](https://github.com/axios/axios/compare/v1.3.0...v1.3.1) (2023-02-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **formdata:** add hotfix to use the asynchronous API to compute the content-length header value; ([#5521](https://github.com/axios/axios/issues/5521)) ([96d336f](https://github.com/axios/axios/commit/96d336f527619f21da012fe1f117eeb53e5a2120))
|
||||||
|
* **serializer:** fixed serialization of array-like objects; ([#5518](https://github.com/axios/axios/issues/5518)) ([08104c0](https://github.com/axios/axios/commit/08104c028c0f9353897b1b6691d74c440fd0c32d))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+27/-8 (#5521 #5518 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
# [1.3.0](https://github.com/axios/axios/compare/v1.2.6...v1.3.0) (2023-01-31)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **headers:** fixed & optimized clear method; ([#5507](https://github.com/axios/axios/issues/5507)) ([9915635](https://github.com/axios/axios/commit/9915635c69d0ab70daca5738488421f67ca60959))
|
||||||
|
* **http:** add zlib headers if missing ([#5497](https://github.com/axios/axios/issues/5497)) ([65e8d1e](https://github.com/axios/axios/commit/65e8d1e28ce829f47a837e45129730e541950d3c))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **fomdata:** added support for spec-compliant FormData & Blob types; ([#5316](https://github.com/axios/axios/issues/5316)) ([6ac574e](https://github.com/axios/axios/commit/6ac574e00a06731288347acea1e8246091196953))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/12586868?v=4&s=18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+352/-67 (#5514 #5512 #5510 #5509 #5508 #5316 #5507 )")
|
||||||
|
- <img src="https://avatars.githubusercontent.com/u/35015993?v=4&s=18" alt="avatar" width="18"/> [ItsNotGoodName](https://github.com/ItsNotGoodName "+43/-2 (#5497 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.2.6](https://github.com/axios/axios/compare/v1.2.5...v1.2.6) (2023-01-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **headers:** added missed Authorization accessor; ([#5502](https://github.com/axios/axios/issues/5502)) ([342c0ba](https://github.com/axios/axios/commit/342c0ba9a16ea50f5ed7d2366c5c1a2c877e3f26))
|
||||||
|
* **types:** fixed `CommonRequestHeadersList` & `CommonResponseHeadersList` types to be private in commonJS; ([#5503](https://github.com/axios/axios/issues/5503)) ([5a3d0a3](https://github.com/axios/axios/commit/5a3d0a3234d77361a1bc7cedee2da1e11df08e2c))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
-  [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+24/-9 (#5503 #5502 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.2.5](https://github.com/axios/axios/compare/v1.2.4...v1.2.5) (2023-01-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **types:** fixed AxiosHeaders to handle spread syntax by making all methods non-enumerable; ([#5499](https://github.com/axios/axios/issues/5499)) ([580f1e8](https://github.com/axios/axios/commit/580f1e8033a61baa38149d59fd16019de3932c22))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
-  [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+82/-54 (#5499 )")
|
||||||
|
-  [Elliot Ford](https://github.com/EFord36 "+1/-1 (#5462 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.2.4](https://github.com/axios/axios/compare/v1.2.3...v1.2.4) (2023-01-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **types:** renamed `RawAxiosRequestConfig` back to `AxiosRequestConfig`; ([#5486](https://github.com/axios/axios/issues/5486)) ([2a71f49](https://github.com/axios/axios/commit/2a71f49bc6c68495fa419003a3107ed8bd703ad0))
|
||||||
|
* **types:** fix `AxiosRequestConfig` generic; ([#5478](https://github.com/axios/axios/issues/5478)) ([9bce81b](https://github.com/axios/axios/commit/186ea062da8b7d578ae78b1a5c220986b9bce81b))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
-  [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+242/-108 (#5486 #5482 )")
|
||||||
|
-  [Daniel Hillmann](https://github.com/hilleer "+1/-1 (#5478 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.2.3](https://github.com/axios/axios/compare/1.2.2...1.2.3) (2023-01-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **types:** fixed AxiosRequestConfig header interface by refactoring it to RawAxiosRequestConfig; ([#5420](https://github.com/axios/axios/issues/5420)) ([0811963](https://github.com/axios/axios/commit/08119634a22f1d5b19f5c9ea0adccb6d3eebc3bc))
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
-  [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+938/-442 (#5456 #5455 #5453 #5451 #5449 #5447 #5446 #5443 #5442 #5439 #5420 )")
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.2.2] - 2022-12-29
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- fix(ci): fix release script inputs [#5392](https://github.com/axios/axios/pull/5392)
|
||||||
|
- fix(ci): prerelease scipts [#5377](https://github.com/axios/axios/pull/5377)
|
||||||
|
- fix(ci): release scripts [#5376](https://github.com/axios/axios/pull/5376)
|
||||||
|
- fix(ci): typescript tests [#5375](https://github.com/axios/axios/pull/5375)
|
||||||
|
- fix: Brotli decompression [#5353](https://github.com/axios/axios/pull/5353)
|
||||||
|
- fix: add missing HttpStatusCode [#5345](https://github.com/axios/axios/pull/5345)
|
||||||
|
|
||||||
|
### Chores
|
||||||
|
- chore(ci): set conventional-changelog header config [#5406](https://github.com/axios/axios/pull/5406)
|
||||||
|
- chore(ci): fix automatic contributors resolving [#5403](https://github.com/axios/axios/pull/5403)
|
||||||
|
- chore(ci): improved logging for the contributors list generator [#5398](https://github.com/axios/axios/pull/5398)
|
||||||
|
- chore(ci): fix release action [#5397](https://github.com/axios/axios/pull/5397)
|
||||||
|
- chore(ci): fix version bump script by adding bump argument for target version [#5393](https://github.com/axios/axios/pull/5393)
|
||||||
|
- chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 [#5342](https://github.com/axios/axios/pull/5342)
|
||||||
|
- chore(ci): GitHub Actions Release script [#5384](https://github.com/axios/axios/pull/5384)
|
||||||
|
- chore(ci): release scripts [#5364](https://github.com/axios/axios/pull/5364)
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
-  [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
|
||||||
|
-  [Winnie](https://github.com/winniehell)
|
||||||
|
|
||||||
|
## [1.2.1] - 2022-12-05
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- feat(exports): export mergeConfig [#5151](https://github.com/axios/axios/pull/5151)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- fix(CancelledError): include config [#4922](https://github.com/axios/axios/pull/4922)
|
||||||
|
- fix(general): removing multiple/trailing/leading whitespace [#5022](https://github.com/axios/axios/pull/5022)
|
||||||
|
- fix(headers): decompression for responses without Content-Length header [#5306](https://github.com/axios/axios/pull/5306)
|
||||||
|
- fix(webWorker): exception to sending form data in web worker [#5139](https://github.com/axios/axios/pull/5139)
|
||||||
|
|
||||||
|
### Refactors
|
||||||
|
- refactor(types): AxiosProgressEvent.event type to any [#5308](https://github.com/axios/axios/pull/5308)
|
||||||
|
- refactor(types): add missing types for static AxiosError.from method [#4956](https://github.com/axios/axios/pull/4956)
|
||||||
|
|
||||||
|
### Chores
|
||||||
|
- chore(docs): remove README link to non-existent upgrade guide [#5307](https://github.com/axios/axios/pull/5307)
|
||||||
|
- chore(docs): typo in issue template name [#5159](https://github.com/axios/axios/pull/5159)
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
|
||||||
|
- [Zachary Lysobey](https://github.com/zachlysobey)
|
||||||
|
- [Kevin Ennis](https://github.com/kevincennis)
|
||||||
|
- [Philipp Loose](https://github.com/phloose)
|
||||||
|
- [secondl1ght](https://github.com/secondl1ght)
|
||||||
|
- [wenzheng](https://github.com/0x30)
|
||||||
|
- [Ivan Barsukov](https://github.com/ovarn)
|
||||||
|
- [Arthur Fiorette](https://github.com/arthurfiorette)
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.2.0] - 2022-11-10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- changed: refactored module exports [#5162](https://github.com/axios/axios/pull/5162)
|
||||||
|
- change: re-added support for loading Axios with require('axios').default [#5225](https://github.com/axios/axios/pull/5225)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- fix: improve AxiosHeaders class [#5224](https://github.com/axios/axios/pull/5224)
|
||||||
|
- fix: TypeScript type definitions for commonjs [#5196](https://github.com/axios/axios/pull/5196)
|
||||||
|
- fix: type definition of use method on AxiosInterceptorManager to match the the README [#5071](https://github.com/axios/axios/pull/5071)
|
||||||
|
- fix: __dirname is not defined in the sandbox [#5269](https://github.com/axios/axios/pull/5269)
|
||||||
|
- fix: AxiosError.toJSON method to avoid circular references [#5247](https://github.com/axios/axios/pull/5247)
|
||||||
|
- fix: Z_BUF_ERROR when content-encoding is set but the response body is empty [#5250](https://github.com/axios/axios/pull/5250)
|
||||||
|
|
||||||
|
### Refactors
|
||||||
|
- refactor: allowing adapters to be loaded by name [#5277](https://github.com/axios/axios/pull/5277)
|
||||||
|
|
||||||
|
### Chores
|
||||||
|
|
||||||
|
- chore: force CI restart [#5243](https://github.com/axios/axios/pull/5243)
|
||||||
|
- chore: update ECOSYSTEM.md [#5077](https://github.com/axios/axios/pull/5077)
|
||||||
|
- chore: update get/index.html [#5116](https://github.com/axios/axios/pull/5116)
|
||||||
|
- chore: update Sandbox UI/UX [#5205](https://github.com/axios/axios/pull/5205)
|
||||||
|
- chore:(actions): remove git credentials after checkout [#5235](https://github.com/axios/axios/pull/5235)
|
||||||
|
- chore(actions): bump actions/dependency-review-action from 2 to 3 [#5266](https://github.com/axios/axios/pull/5266)
|
||||||
|
- chore(packages): bump loader-utils from 1.4.1 to 1.4.2 [#5295](https://github.com/axios/axios/pull/5295)
|
||||||
|
- chore(packages): bump engine.io from 6.2.0 to 6.2.1 [#5294](https://github.com/axios/axios/pull/5294)
|
||||||
|
- chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 [#5241](https://github.com/axios/axios/pull/5241)
|
||||||
|
- chore(packages): bump loader-utils from 1.4.0 to 1.4.1 [#5245](https://github.com/axios/axios/pull/5245)
|
||||||
|
- chore(docs): update Resources links in README [#5119](https://github.com/axios/axios/pull/5119)
|
||||||
|
- chore(docs): update the link for JSON url [#5265](https://github.com/axios/axios/pull/5265)
|
||||||
|
- chore(docs): fix broken links [#5218](https://github.com/axios/axios/pull/5218)
|
||||||
|
- chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md [#5170](https://github.com/axios/axios/pull/5170)
|
||||||
|
- chore(docs): typo fix line #856 and #920 [#5194](https://github.com/axios/axios/pull/5194)
|
||||||
|
- chore(docs): typo fix #800 [#5193](https://github.com/axios/axios/pull/5193)
|
||||||
|
- chore(docs): fix typos [#5184](https://github.com/axios/axios/pull/5184)
|
||||||
|
- chore(docs): fix punctuation in README.md [#5197](https://github.com/axios/axios/pull/5197)
|
||||||
|
- chore(docs): update readme in the Handling Errors section - issue reference #5260 [#5261](https://github.com/axios/axios/pull/5261)
|
||||||
|
- chore: remove \b from filename [#5207](https://github.com/axios/axios/pull/5207)
|
||||||
|
- chore(docs): update CHANGELOG.md [#5137](https://github.com/axios/axios/pull/5137)
|
||||||
|
- chore: add sideEffects false to package.json [#5025](https://github.com/axios/axios/pull/5025)
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Maddy Miller](https://github.com/me4502)
|
||||||
|
- [Amit Saini](https://github.com/amitsainii)
|
||||||
|
- [ecyrbe](https://github.com/ecyrbe)
|
||||||
|
- [Ikko Ashimine](https://github.com/eltociear)
|
||||||
|
- [Geeth Gunnampalli](https://github.com/thetechie7)
|
||||||
|
- [Shreem Asati](https://github.com/shreem-123)
|
||||||
|
- [Frieder Bluemle](https://github.com/friederbluemle)
|
||||||
|
- [윤세영](https://github.com/yunseyeong)
|
||||||
|
- [Claudio Busatto](https://github.com/cjcbusatto)
|
||||||
|
- [Remco Haszing](https://github.com/remcohaszing)
|
||||||
|
- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
|
||||||
|
- [Csaba Maulis](https://github.com/om4csaba)
|
||||||
|
- [MoPaMo](https://github.com/MoPaMo)
|
||||||
|
- [Daniel Fjeldstad](https://github.com/w3bdesign)
|
||||||
|
- [Adrien Brunet](https://github.com/adrien-may)
|
||||||
|
- [Frazer Smith](https://github.com/Fdawgs)
|
||||||
|
- [HaiTao](https://github.com/836334258)
|
||||||
|
- [AZM](https://github.com/aziyatali)
|
||||||
|
- [relbns](https://github.com/relbns)
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.1.3] - 2022-10-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added custom params serializer support [#5113](https://github.com/axios/axios/pull/5113)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed top-level export to keep them in-line with static properties [#5109](https://github.com/axios/axios/pull/5109)
|
||||||
|
- Stopped including null values to query string. [#5108](https://github.com/axios/axios/pull/5108)
|
||||||
|
- Restored proxy config backwards compatibility with 0.x [#5097](https://github.com/axios/axios/pull/5097)
|
||||||
|
- Added back AxiosHeaders in AxiosHeaderValue [#5103](https://github.com/axios/axios/pull/5103)
|
||||||
|
- Pin CDN install instructions to a specific version [#5060](https://github.com/axios/axios/pull/5060)
|
||||||
|
- Handling of array values fixed for AxiosHeaders [#5085](https://github.com/axios/axios/pull/5085)
|
||||||
|
|
||||||
|
### Chores
|
||||||
|
|
||||||
|
- docs: match badge style, add link to them [#5046](https://github.com/axios/axios/pull/5046)
|
||||||
|
- chore: fixing comments typo [#5054](https://github.com/axios/axios/pull/5054)
|
||||||
|
- chore: update issue template [#5061](https://github.com/axios/axios/pull/5061)
|
||||||
|
- chore: added progress capturing section to the docs; [#5084](https://github.com/axios/axios/pull/5084)
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Jason Saayman](https://github.com/jasonsaayman)
|
||||||
|
- [scarf](https://github.com/scarf005)
|
||||||
|
- [Lenz Weber-Tronic](https://github.com/phryneas)
|
||||||
|
- [Arvindh](https://github.com/itsarvindh)
|
||||||
|
- [Félix Legrelle](https://github.com/FelixLgr)
|
||||||
|
- [Patrick Petrovic](https://github.com/ppati000)
|
||||||
|
- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
|
||||||
|
- [littledian](https://github.com/littledian)
|
||||||
|
- [ChronosMasterOfAllTime](https://github.com/ChronosMasterOfAllTime)
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.1.2] - 2022-10-07
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed broken exports for UMD builds.
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Jason Saayman](https://github.com/jasonsaayman)
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.1.1] - 2022-10-07
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed broken exports for common js. This fix breaks a prior fix, I will fix both issues ASAP but the commonJS use is more impactful.
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Jason Saayman](https://github.com/jasonsaayman)
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.1.0] - 2022-10-06
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed missing exports in type definition index.d.ts [#5003](https://github.com/axios/axios/pull/5003)
|
||||||
|
- Fixed query params composing [#5018](https://github.com/axios/axios/pull/5018)
|
||||||
|
- Fixed GenericAbortSignal interface by making it more generic [#5021](https://github.com/axios/axios/pull/5021)
|
||||||
|
- Fixed adding "clear" to AxiosInterceptorManager [#5010](https://github.com/axios/axios/pull/5010)
|
||||||
|
- Fixed commonjs & umd exports [#5030](https://github.com/axios/axios/pull/5030)
|
||||||
|
- Fixed inability to access response headers when using axios 1.x with Jest [#5036](https://github.com/axios/axios/pull/5036)
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Trim21](https://github.com/trim21)
|
||||||
|
- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
|
||||||
|
- [shingo.sasaki](https://github.com/s-sasaki-0529)
|
||||||
|
- [Ivan Pepelko](https://github.com/ivanpepelko)
|
||||||
|
- [Richard Kořínek](https://github.com/risa)
|
||||||
|
|
||||||
|
### PRs
|
||||||
|
- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) )
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459
|
||||||
|
```
|
||||||
|
|
||||||
|
## [1.0.0] - 2022-10-04
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added stack trace to AxiosError [#4624](https://github.com/axios/axios/pull/4624)
|
||||||
|
- Add AxiosError to AxiosStatic [#4654](https://github.com/axios/axios/pull/4654)
|
||||||
|
- Replaced Rollup as our build runner [#4596](https://github.com/axios/axios/pull/4596)
|
||||||
|
- Added generic TS types for the exposed toFormData helper [#4668](https://github.com/axios/axios/pull/4668)
|
||||||
|
- Added listen callback function [#4096](https://github.com/axios/axios/pull/4096)
|
||||||
|
- Added instructions for installing using PNPM [#4207](https://github.com/axios/axios/pull/4207)
|
||||||
|
- Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill [#4229](https://github.com/axios/axios/pull/4229)
|
||||||
|
- Added axios-url-template in ECOSYSTEM.md [#4238](https://github.com/axios/axios/pull/4238)
|
||||||
|
- Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an axios instance [#4248](https://github.com/axios/axios/pull/4248)
|
||||||
|
- Added react hook plugin [#4319](https://github.com/axios/axios/pull/4319)
|
||||||
|
- Adding HTTP status code for transformResponse [#4580](https://github.com/axios/axios/pull/4580)
|
||||||
|
- Added blob to the list of protocols supported by the browser [#4678](https://github.com/axios/axios/pull/4678)
|
||||||
|
- Resolving proxy from env on redirect [#4436](https://github.com/axios/axios/pull/4436)
|
||||||
|
- Added enhanced toFormData implementation with additional options [4704](https://github.com/axios/axios/pull/4704)
|
||||||
|
- Adding Canceler parameters config and request [#4711](https://github.com/axios/axios/pull/4711)
|
||||||
|
- Added automatic payload serialization to application/x-www-form-urlencoded [#4714](https://github.com/axios/axios/pull/4714)
|
||||||
|
- Added the ability for webpack users to overwrite built-ins [#4715](https://github.com/axios/axios/pull/4715)
|
||||||
|
- Added string[] to AxiosRequestHeaders type [#4322](https://github.com/axios/axios/pull/4322)
|
||||||
|
- Added the ability for the url-encoded-form serializer to respect the formSerializer config [#4721](https://github.com/axios/axios/pull/4721)
|
||||||
|
- Added isCancel type assert [#4293](https://github.com/axios/axios/pull/4293)
|
||||||
|
- Added data URL support for node.js [#4725](https://github.com/axios/axios/pull/4725)
|
||||||
|
- Adding types for progress event callbacks [#4675](https://github.com/axios/axios/pull/4675)
|
||||||
|
- URL params serializer [#4734](https://github.com/axios/axios/pull/4734)
|
||||||
|
- Added axios.formToJSON method [#4735](https://github.com/axios/axios/pull/4735)
|
||||||
|
- Bower platform add data protocol [#4804](https://github.com/axios/axios/pull/4804)
|
||||||
|
- Use WHATWG URL API instead of url.parse() [#4852](https://github.com/axios/axios/pull/4852)
|
||||||
|
- Add ENUM containing Http Status Codes to typings [#4903](https://github.com/axios/axios/pull/4903)
|
||||||
|
- Improve typing of timeout in index.d.ts [#4934](https://github.com/axios/axios/pull/4934)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated AxiosError.config to be optional in the type definition [#4665](https://github.com/axios/axios/pull/4665)
|
||||||
|
- Updated README emphasizing the URLSearchParam built-in interface over other solutions [#4590](https://github.com/axios/axios/pull/4590)
|
||||||
|
- Include request and config when creating a CanceledError instance [#4659](https://github.com/axios/axios/pull/4659)
|
||||||
|
- Changed func-names eslint rule to as-needed [#4492](https://github.com/axios/axios/pull/4492)
|
||||||
|
- Replacing deprecated substr() with slice() as substr() is deprecated [#4468](https://github.com/axios/axios/pull/4468)
|
||||||
|
- Updating HTTP links in README.md to use HTTPS [#4387](https://github.com/axios/axios/pull/4387)
|
||||||
|
- Updated to a better trim() polyfill [#4072](https://github.com/axios/axios/pull/4072)
|
||||||
|
- Updated types to allow specifying partial default headers on instance create [#4185](https://github.com/axios/axios/pull/4185)
|
||||||
|
- Expanded isAxiosError types [#4344](https://github.com/axios/axios/pull/4344)
|
||||||
|
- Updated type definition for axios instance methods [#4224](https://github.com/axios/axios/pull/4224)
|
||||||
|
- Updated eslint config [#4722](https://github.com/axios/axios/pull/4722)
|
||||||
|
- Updated Docs [#4742](https://github.com/axios/axios/pull/4742)
|
||||||
|
- Refactored Axios to use ES2017 [#4787](https://github.com/axios/axios/pull/4787)
|
||||||
|
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
- There are multiple deprecations, refactors and fixes provided in this release. Please read through the full release notes to see how this may impact your project and use case.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Removed incorrect argument for NetworkError constructor [#4656](https://github.com/axios/axios/pull/4656)
|
||||||
|
- Removed Webpack [#4596](https://github.com/axios/axios/pull/4596)
|
||||||
|
- Removed function that transform arguments to array [#4544](https://github.com/axios/axios/pull/4544)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed grammar in README [#4649](https://github.com/axios/axios/pull/4649)
|
||||||
|
- Fixed code error in README [#4599](https://github.com/axios/axios/pull/4599)
|
||||||
|
- Optimized the code that checks cancellation [#4587](https://github.com/axios/axios/pull/4587)
|
||||||
|
- Fix url pointing to defaults.js in README [#4532](https://github.com/axios/axios/pull/4532)
|
||||||
|
- Use type alias instead of interface for AxiosPromise [#4505](https://github.com/axios/axios/pull/4505)
|
||||||
|
- Fix some word spelling and lint style in code comments [#4500](https://github.com/axios/axios/pull/4500)
|
||||||
|
- Edited readme with 3 updated browser icons of Chrome, FireFox and Safari [#4414](https://github.com/axios/axios/pull/4414)
|
||||||
|
- Bump follow-redirects from 1.14.9 to 1.15.0 [#4673](https://github.com/axios/axios/pull/4673)
|
||||||
|
- Fixing http tests to avoid hanging when assertions fail [#4435](https://github.com/axios/axios/pull/4435)
|
||||||
|
- Fix TS definition for AxiosRequestTransformer [#4201](https://github.com/axios/axios/pull/4201)
|
||||||
|
- Fix grammatical issues in README [#4232](https://github.com/axios/axios/pull/4232)
|
||||||
|
- Fixing instance.defaults.headers type [#4557](https://github.com/axios/axios/pull/4557)
|
||||||
|
- Fixed race condition on immediate requests cancellation [#4261](https://github.com/axios/axios/pull/4261)
|
||||||
|
- Fixing Z_BUF_ERROR when no content [#4701](https://github.com/axios/axios/pull/4701)
|
||||||
|
- Fixing proxy beforeRedirect regression [#4708](https://github.com/axios/axios/pull/4708)
|
||||||
|
- Fixed AxiosError status code type [#4717](https://github.com/axios/axios/pull/4717)
|
||||||
|
- Fixed AxiosError stack capturing [#4718](https://github.com/axios/axios/pull/4718)
|
||||||
|
- Fixing AxiosRequestHeaders typings [#4334](https://github.com/axios/axios/pull/4334)
|
||||||
|
- Fixed max body length defaults [#4731](https://github.com/axios/axios/pull/4731)
|
||||||
|
- Fixed toFormData Blob issue on node>v17 [#4728](https://github.com/axios/axios/pull/4728)
|
||||||
|
- Bump grunt from 1.5.2 to 1.5.3 [#4743](https://github.com/axios/axios/pull/4743)
|
||||||
|
- Fixing content-type header repeated [#4745](https://github.com/axios/axios/pull/4745)
|
||||||
|
- Fixed timeout error message for http [4738](https://github.com/axios/axios/pull/4738)
|
||||||
|
- Request ignores false, 0 and empty string as body values [#4785](https://github.com/axios/axios/pull/4785)
|
||||||
|
- Added back missing minified builds [#4805](https://github.com/axios/axios/pull/4805)
|
||||||
|
- Fixed a type error [#4815](https://github.com/axios/axios/pull/4815)
|
||||||
|
- Fixed a regression bug with unsubscribing from cancel token; [#4819](https://github.com/axios/axios/pull/4819)
|
||||||
|
- Remove repeated compression algorithm [#4820](https://github.com/axios/axios/pull/4820)
|
||||||
|
- The error of calling extend to pass parameters [#4857](https://github.com/axios/axios/pull/4857)
|
||||||
|
- SerializerOptions.indexes allows boolean | null | undefined [#4862](https://github.com/axios/axios/pull/4862)
|
||||||
|
- Require interceptors to return values [#4874](https://github.com/axios/axios/pull/4874)
|
||||||
|
- Removed unused imports [#4949](https://github.com/axios/axios/pull/4949)
|
||||||
|
- Allow null indexes on formSerializer and paramsSerializer [#4960](https://github.com/axios/axios/pull/4960)
|
||||||
|
|
||||||
|
### Chores
|
||||||
|
- Set permissions for GitHub actions [#4765](https://github.com/axios/axios/pull/4765)
|
||||||
|
- Included githubactions in the dependabot config [#4770](https://github.com/axios/axios/pull/4770)
|
||||||
|
- Included dependency review [#4771](https://github.com/axios/axios/pull/4771)
|
||||||
|
- Update security.md [#4784](https://github.com/axios/axios/pull/4784)
|
||||||
|
- Remove unnecessary spaces [#4854](https://github.com/axios/axios/pull/4854)
|
||||||
|
- Simplify the import path of AxiosError [#4875](https://github.com/axios/axios/pull/4875)
|
||||||
|
- Fix Gitpod dead link [#4941](https://github.com/axios/axios/pull/4941)
|
||||||
|
- Enable syntax highlighting for a code block [#4970](https://github.com/axios/axios/pull/4970)
|
||||||
|
- Using Logo Axios in Readme.md [#4993](https://github.com/axios/axios/pull/4993)
|
||||||
|
- Fix markup for note in README [#4825](https://github.com/axios/axios/pull/4825)
|
||||||
|
- Fix typo and formatting, add colons [#4853](https://github.com/axios/axios/pull/4853)
|
||||||
|
- Fix typo in readme [#4942](https://github.com/axios/axios/pull/4942)
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Update SECURITY.md [#4687](https://github.com/axios/axios/pull/4687)
|
||||||
|
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
- [Bertrand Marron](https://github.com/tusbar)
|
||||||
|
- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
|
||||||
|
- [Dan Mooney](https://github.com/danmooney)
|
||||||
|
- [Michael Li](https://github.com/xiaoyu-tamu)
|
||||||
|
- [aong](https://github.com/yxwzaxns)
|
||||||
|
- [Des Preston](https://github.com/despreston)
|
||||||
|
- [Ted Robertson](https://github.com/tredondo)
|
||||||
|
- [zhoulixiang](https://github.com/zh-lx)
|
||||||
|
- [Arthur Fiorette](https://github.com/arthurfiorette)
|
||||||
|
- [Kumar Shanu](https://github.com/Kr-Shanu)
|
||||||
|
- [JALAL](https://github.com/JLL32)
|
||||||
|
- [Jingyi Lin](https://github.com/MageeLin)
|
||||||
|
- [Philipp Loose](https://github.com/phloose)
|
||||||
|
- [Alexander Shchukin](https://github.com/sashsvamir)
|
||||||
|
- [Dave Cardwell](https://github.com/davecardwell)
|
||||||
|
- [Cat Scarlet](https://github.com/catscarlet)
|
||||||
|
- [Luca Pizzini](https://github.com/lpizzinidev)
|
||||||
|
- [Kai](https://github.com/Schweinepriester)
|
||||||
|
- [Maxime Bargiel](https://github.com/mbargiel)
|
||||||
|
- [Brian Helba](https://github.com/brianhelba)
|
||||||
|
- [reslear](https://github.com/reslear)
|
||||||
|
- [Jamie Slome](https://github.com/JamieSlome)
|
||||||
|
- [Landro3](https://github.com/Landro3)
|
||||||
|
- [rafw87](https://github.com/rafw87)
|
||||||
|
- [Afzal Sayed](https://github.com/afzalsayed96)
|
||||||
|
- [Koki Oyatsu](https://github.com/kaishuu0123)
|
||||||
|
- [Dave](https://github.com/wangcch)
|
||||||
|
- [暴走老七](https://github.com/baozouai)
|
||||||
|
- [Spencer](https://github.com/spalger)
|
||||||
|
- [Adrian Wieprzkowicz](https://github.com/Argeento)
|
||||||
|
- [Jamie Telin](https://github.com/lejahmie)
|
||||||
|
- [毛呆](https://github.com/aweikalee)
|
||||||
|
- [Kirill Shakirov](https://github.com/turisap)
|
||||||
|
- [Rraji Abdelbari](https://github.com/estarossa0)
|
||||||
|
- [Jelle Schutter](https://github.com/jelleschutter)
|
||||||
|
- [Tom Ceuppens](https://github.com/KyorCode)
|
||||||
|
- [Johann Cooper](https://github.com/JohannCooper)
|
||||||
|
- [Dimitris Halatsis](https://github.com/mitsos1os)
|
||||||
|
- [chenjigeng](https://github.com/chenjigeng)
|
||||||
|
- [João Gabriel Quaresma](https://github.com/joaoGabriel55)
|
||||||
|
- [Victor Augusto](https://github.com/VictorAugDB)
|
||||||
|
- [neilnaveen](https://github.com/neilnaveen)
|
||||||
|
- [Pavlos](https://github.com/psmoros)
|
||||||
|
- [Kiryl Valkovich](https://github.com/visortelle)
|
||||||
|
- [Naveen](https://github.com/naveensrinivasan)
|
||||||
|
- [wenzheng](https://github.com/0x30)
|
||||||
|
- [hcwhan](https://github.com/hcwhan)
|
||||||
|
- [Bassel Rachid](https://github.com/basselworkforce)
|
||||||
|
- [Grégoire Pineau](https://github.com/lyrixx)
|
||||||
|
- [felipedamin](https://github.com/felipedamin)
|
||||||
|
- [Karl Horky](https://github.com/karlhorky)
|
||||||
|
- [Yue JIN](https://github.com/kingyue737)
|
||||||
|
- [Usman Ali Siddiqui](https://github.com/usman250994)
|
||||||
|
- [WD](https://github.com/techbirds)
|
||||||
|
- [Günther Foidl](https://github.com/gfoidl)
|
||||||
|
- [Stephen Jennings](https://github.com/jennings)
|
||||||
|
- [C.T.Lin](https://github.com/chentsulin)
|
||||||
|
- [mia-z](https://github.com/mia-z)
|
||||||
|
- [Parth Banathia](https://github.com/Parth0105)
|
||||||
|
- [parth0105pluang](https://github.com/parth0105pluang)
|
||||||
|
- [Marco Weber](https://github.com/mrcwbr)
|
||||||
|
- [Luca Pizzini](https://github.com/lpizzinidev)
|
||||||
|
- [Willian Agostini](https://github.com/WillianAgostini)
|
||||||
|
- [Huyen Nguyen](https://github.com/huyenltnguyen)
|
84
pkg/axios/CODE_OF_CONDUCT.md
Normal file
84
pkg/axios/CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [Jason Saayman](jasonsaayman@gmail.com). All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
23
pkg/axios/COLLABORATOR_GUIDE.md
Normal file
23
pkg/axios/COLLABORATOR_GUIDE.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Collaborator Guide
|
||||||
|
|
||||||
|
As a collaborator, you will be involved with axios with some administrative responsibilities. This guide will help you understand your role and the responsibilities that come with being a collaborator.
|
||||||
|
|
||||||
|
1. __Adhere to and help enforce the Code of Conduct.__ It is expected that you have read the [code of conduct](https://github.com/axios/axios/blob/master/CODE_OF_CONDUCT.md) and that you agree to live by it. This community should be friendly and welcoming.
|
||||||
|
|
||||||
|
1. __Triage issues.__ As a collaborator, you may help sort through the issues that are reported. Issues vary from bugs, regressions, feature requests, questions, etc. Apply the appropriate label(s) and respond as needed. If it is a legitimate request, please address it, otherwise feel free to close the issue and include a comment with a suggestion on where to find support. If an issue has been inactive for more than a week (i.e., the owner of the issue hasn’t responded to you), close the issue with a note indicating stale issues are closed; it can always be reopened if needed. In the case of issues that require a code change, encourage the owner to submit a PR. For less complex code changes, add a very simple and detailed checklist, apply the “first-timers-only” label, and encourage a newcomer to open source to get involved.
|
||||||
|
|
||||||
|
1. __Answer questions.__ It is not expected that you provide answers to questions that aren’t relevant, nor do you need to mentor people on how to use JavaScript, etc. If the question is not directly about the module, please close the issue. If the question stems from poor documentation, please update the docs and consider adding a code example. In any event try to be helpful and remember that there’s no such thing as a stupid question.
|
||||||
|
|
||||||
|
1. __Assist with PRs.__ By encouraging contributors to supply a PR for their own issue this is ideally where most of your attention will be focused. Keep a few things in mind as you review PRs.
|
||||||
|
|
||||||
|
- When fixing a bug: does the PR adequately solve the problem without introducing any regressions?
|
||||||
|
- When implementing a feature: does the feature fit within the scope of axios?
|
||||||
|
- When removing functionality: is it properly deprecated with a warning?
|
||||||
|
- When introducing functionality: is the API predictable?
|
||||||
|
- Does the new code work for all supported platforms/browsers?
|
||||||
|
- Do the tests and linting pass CI?
|
||||||
|
- Are there tests to validate the changes that have been made?
|
||||||
|
|
||||||
|
1. __Fix bugs and implement features.__ When things need to be fixed or implemented, and a PR can’t wait, you may do things yourself. You should still submit a PR yourself and get it checked off by at least one other contributor. Keep the points from number 4 in consideration as you push your code.
|
||||||
|
|
||||||
|
Thank you again for your help as a collaborator and in making axios community great! If you have any questions or need any assistance, please feel free to contact another collaborator or the owner.
|
45
pkg/axios/ECOSYSTEM.md
Normal file
45
pkg/axios/ECOSYSTEM.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Ecosystem
|
||||||
|
|
||||||
|
This is a list of axios related libraries and resources. If you have a suggestion on what to add, please don't hesitate to submit a PR.
|
||||||
|
|
||||||
|
## Libraries
|
||||||
|
|
||||||
|
### General
|
||||||
|
|
||||||
|
* [axios-vcr](https://github.com/nettofarah/axios-vcr) - 📼 Record and Replay Axios requests
|
||||||
|
* [@3846masa/axios-cookiejar-support](https://github.com/3846masa/axios-cookiejar-support) - Add tough-cookie support to axios
|
||||||
|
* [axios-method-override](https://github.com/jacobbuck/axios-method-override) - Axios http request method override plugin
|
||||||
|
* [axios-cache-plugin](https://github.com/jin5354/axios-cache-plugin) - Help you cache GET request when using axios.
|
||||||
|
* [axios-extensions](https://github.com/kuitos/axios-extensions) - A collection of axios extensions, including throttle and cache GET request plugin.
|
||||||
|
* [axios-fetch](https://github.com/lifeomic/axios-fetch) - A WebAPI Fetch implementation backed by an Axios client
|
||||||
|
* [axios-actions](https://github.com/davestewart/axios-actions) - Bundle endpoints as callable, reusable services
|
||||||
|
* [axios-api-versioning](https://weffe.github.io/axios-api-versioning) - Add easy to manage api versioning to axios
|
||||||
|
* [axios-data-unpacker](https://github.com/anubhavsrivastava/axios-data-unpacker) - Axios interceptor that unpacks HTTP responses so that you can focus on actual server data.
|
||||||
|
* [r2curl](https://github.com/uyu423/r2curl) - Extracts the cURL command string from the Axios object. (AxiosResponse, AxiosRequestConfig)
|
||||||
|
* [swagger-taxos-codegen](https://github.com/michalzaq12/swagger-taxos-codegen) - Axios based Swagger Codegen (tailored for typescript)
|
||||||
|
* [axios-endpoints](https://github.com/renancaraujo/axios-endpoints) - Axios endpoints helps you to create a more concise endpoint mapping with axios.
|
||||||
|
* [axios-multi-api](https://github.com/MattCCC/axios-multi-api) - Easy API handling whenever there are many endpoints to add. It helps to make Axios requests in an easy and declarative manner.
|
||||||
|
* [axios-url-template](https://github.com/rafw87/axios-url-template) - Axios interceptor adding support for URL templates.
|
||||||
|
* [zodios](https://www.zodios.org) - Typesafe API client based on axios
|
||||||
|
|
||||||
|
### Logging and debugging
|
||||||
|
|
||||||
|
* [axios-response-logger](https://github.com/srph/axios-response-logger) - Axios interceptor which logs responses
|
||||||
|
* [axios-debug-log](https://github.com/Gerhut/axios-debug-log) - Axios interceptor of logging requests & responses by debug.
|
||||||
|
* [axios-curlirize](https://www.npmjs.com/package/axios-curlirize) - Logs axios requests as curl commands, also adds a property to the response object with the curl command as value.
|
||||||
|
|
||||||
|
### React and redux
|
||||||
|
|
||||||
|
* [axios-hooks](https://github.com/simoneb/axios-hooks) - 🦆 React hooks for axios, with built-in support for server side rendering
|
||||||
|
* [react-hooks-axios](https://github.com/use-hooks/react-hooks-axios) - Custom React Hooks for Axios.js
|
||||||
|
* [redux-saga-requests](https://github.com/klis87/redux-saga-requests) - Redux-Saga addon to simplify handling of AJAX requests.
|
||||||
|
* [redux-axios-middleware](https://github.com/svrcekmichal/redux-axios-middleware) - Redux middleware for fetching data with axios HTTP client
|
||||||
|
* [@react-cmpt/react-request-hook](https://github.com/react-cmpt/react-request-hook) - A React hook plugin for axios. Lightweight and less change.
|
||||||
|
|
||||||
|
### Unit testing
|
||||||
|
|
||||||
|
* [axiosist](https://github.com/Gerhut/axiosist) - Axios based supertest: convert node.js request handler to axios adapter, used for node.js server unit test.
|
||||||
|
* [axios-mock-adapter](https://github.com/ctimmerm/axios-mock-adapter) — Axios adapter that allows to easily mock requests
|
||||||
|
* [axios-test-instance](https://github.com/remcohaszing/axios-test-instance) — Test NodeJS backends using Axios
|
||||||
|
* [moxios](https://github.com/axios/moxios) - Mock axios requests for testing
|
||||||
|
* [mocha-axios](https://github.com/jdrydn/mocha-axios) - Streamlined integration testing with Mocha & Axios
|
7
pkg/axios/LICENSE
Normal file
7
pkg/axios/LICENSE
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Copyright (c) 2014-present Matt Zabriskie & Collaborators
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
3
pkg/axios/MIGRATION_GUIDE.md
Normal file
3
pkg/axios/MIGRATION_GUIDE.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Migration Guide
|
||||||
|
|
||||||
|
## 0.x.x -> 1.1.0
|
1614
pkg/axios/README.md
Normal file
1614
pkg/axios/README.md
Normal file
File diff suppressed because it is too large
Load Diff
6
pkg/axios/SECURITY.md
Normal file
6
pkg/axios/SECURITY.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you discover a security vulnerability in axios please disclose it via [our huntr page](https://huntr.dev/repos/axios/axios/). Bounty eligibility, CVE assignment, response times and past reports are all there.
|
||||||
|
|
||||||
|
|
||||||
|
Thank you for improving the security of axios.
|
131
pkg/axios/bin/GithubAPI.js
Normal file
131
pkg/axios/bin/GithubAPI.js
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
import util from "util";
|
||||||
|
import cp from "child_process";
|
||||||
|
import {parseVersion} from "./helpers/parser.js";
|
||||||
|
import githubAxios from "./githubAxios.js";
|
||||||
|
import memoize from 'memoizee';
|
||||||
|
|
||||||
|
const exec = util.promisify(cp.exec);
|
||||||
|
|
||||||
|
export default class GithubAPI {
|
||||||
|
constructor(owner, repo) {
|
||||||
|
if (!owner) {
|
||||||
|
throw new Error('repo owner must be specified');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!repo) {
|
||||||
|
throw new Error('repo must be specified');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.repo = repo;
|
||||||
|
this.owner = owner;
|
||||||
|
this.axios = githubAxios.create({
|
||||||
|
baseURL: `https://api.github.com/repos/${this.owner}/${this.repo}/`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async createComment(issue, body) {
|
||||||
|
return (await this.axios.post(`/issues/${issue}/comments`, {body})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getComments(issue, {desc = false, per_page= 100, page = 1} = {}) {
|
||||||
|
return (await this.axios.get(`/issues/${issue}/comments`, {params: {direction: desc ? 'desc' : 'asc', per_page, page}})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getComment(id) {
|
||||||
|
return (await this.axios.get(`/issues/comments/${id}`)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateComment(id, body) {
|
||||||
|
return (await this.axios.patch(`/issues/comments/${id}`, {body})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async appendLabels(issue, labels) {
|
||||||
|
return (await this.axios.post(`/issues/${issue}/labels`, {labels})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getUser(user) {
|
||||||
|
return (await githubAxios.get(`/users/${user}`)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async isCollaborator(user) {
|
||||||
|
try {
|
||||||
|
return (await this.axios.get(`/collaborators/${user}`)).status === 204;
|
||||||
|
} catch (e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteLabel(issue, label) {
|
||||||
|
return (await this.axios.delete(`/issues/${issue}/labels/${label}`)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getIssue(issue) {
|
||||||
|
return (await this.axios.get(`/issues/${issue}`)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getPR(issue) {
|
||||||
|
return (await this.axios.get(`/pulls/${issue}`)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getIssues({state= 'open', labels, sort = 'created', desc = false, per_page = 100, page = 1}) {
|
||||||
|
return (await this.axios.get(`/issues`, {params: {state, labels, sort, direction: desc ? 'desc' : 'asc', per_page, page}})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateIssue(issue, data) {
|
||||||
|
return (await this.axios.patch(`/issues/${issue}`, data)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async closeIssue(issue) {
|
||||||
|
return this.updateIssue(issue, {
|
||||||
|
state: "closed"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async getReleases({per_page = 30, page= 1} = {}) {
|
||||||
|
return (await this.axios.get(`/releases`, {params: {per_page, page}})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getRelease(release = 'latest') {
|
||||||
|
return (await this.axios.get(parseVersion(release) ? `/releases/tags/${release}` : `/releases/${release}`)).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getTags({per_page = 30, page= 1} = {}) {
|
||||||
|
return (await this.axios.get(`/tags`, {params: {per_page, page}})).data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async reopenIssue(issue) {
|
||||||
|
return this.updateIssue(issue, {
|
||||||
|
state: "open"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
static async getTagRef(tag) {
|
||||||
|
try {
|
||||||
|
return (await exec(`git show-ref --tags "refs/tags/${tag}"`)).stdout.split(' ')[0];
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async getLatestTag() {
|
||||||
|
try{
|
||||||
|
const {stdout} = await exec(`git for-each-ref refs/tags --sort=-taggerdate --format='%(refname)' --count=1`);
|
||||||
|
|
||||||
|
return stdout.split('/').pop();
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
static normalizeTag(tag){
|
||||||
|
return tag ? 'v' + tag.replace(/^v/, '') : '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const {prototype} = GithubAPI;
|
||||||
|
|
||||||
|
['getUser', 'isCollaborator'].forEach(methodName => {
|
||||||
|
prototype[methodName] = memoize(prototype[methodName], { promise: true })
|
||||||
|
});
|
||||||
|
|
||||||
|
['get', 'post', 'put', 'delete', 'isAxiosError'].forEach((method) => prototype[method] = function(...args){
|
||||||
|
return this.axios[method](...args);
|
||||||
|
});
|
||||||
|
|
128
pkg/axios/bin/RepoBot.js
Normal file
128
pkg/axios/bin/RepoBot.js
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
import GithubAPI from "./GithubAPI.js";
|
||||||
|
import api from './api.js';
|
||||||
|
import Handlebars from "handlebars";
|
||||||
|
import fs from "fs/promises";
|
||||||
|
import {colorize} from "./helpers/colorize.js";
|
||||||
|
import {getReleaseInfo} from "./contributors.js";
|
||||||
|
import path from "path";
|
||||||
|
import {fileURLToPath} from "url";
|
||||||
|
|
||||||
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
|
const NOTIFY_PR_TEMPLATE = path.resolve(__dirname, '../templates/pr_published.hbs');
|
||||||
|
|
||||||
|
const normalizeTag = (tag) => tag ? 'v' + tag.replace(/^v/, '') : '';
|
||||||
|
|
||||||
|
const GITHUB_BOT_LOGIN = 'github-actions[bot]';
|
||||||
|
|
||||||
|
const skipCollaboratorPRs = true;
|
||||||
|
|
||||||
|
class RepoBot {
|
||||||
|
constructor(options) {
|
||||||
|
const {
|
||||||
|
owner, repo,
|
||||||
|
templates
|
||||||
|
} = options || {};
|
||||||
|
|
||||||
|
this.templates = Object.assign({
|
||||||
|
published: NOTIFY_PR_TEMPLATE
|
||||||
|
}, templates);
|
||||||
|
|
||||||
|
this.github = api || new GithubAPI(owner, repo);
|
||||||
|
|
||||||
|
this.owner = this.github.owner;
|
||||||
|
this.repo = this.github.repo;
|
||||||
|
}
|
||||||
|
|
||||||
|
async addComment(targetId, message) {
|
||||||
|
return this.github.createComment(targetId, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
async notifyPRPublished(id, tag) {
|
||||||
|
let pr;
|
||||||
|
|
||||||
|
try {
|
||||||
|
pr = await this.github.getPR(id);
|
||||||
|
} catch (err) {
|
||||||
|
if(err.response?.status === 404) {
|
||||||
|
throw new Error(`PR #${id} not found (404)`);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
tag = normalizeTag(tag);
|
||||||
|
|
||||||
|
const {merged, labels, user: {login, type}} = pr;
|
||||||
|
|
||||||
|
const isBot = type === 'Bot';
|
||||||
|
|
||||||
|
if (!merged) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.github.appendLabels(id, [tag]);
|
||||||
|
|
||||||
|
if (isBot || labels.find(({name}) => name === 'automated pr') || (skipCollaboratorPRs && await this.github.isCollaborator(login))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const comments = await this.github.getComments(id, {desc: true});
|
||||||
|
|
||||||
|
const comment = comments.find(
|
||||||
|
({body, user}) => user.login === GITHUB_BOT_LOGIN && body.indexOf('published in') >= 0
|
||||||
|
)
|
||||||
|
|
||||||
|
if (comment) {
|
||||||
|
console.log(colorize()`Release comment [${comment.html_url}] already exists in #${pr.id}`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const author = await this.github.getUser(login);
|
||||||
|
|
||||||
|
author.isBot = isBot;
|
||||||
|
|
||||||
|
const message = await this.constructor.renderTemplate(this.templates.published, {
|
||||||
|
id,
|
||||||
|
author,
|
||||||
|
release: {
|
||||||
|
tag,
|
||||||
|
url: `https://github.com/${this.owner}/${this.repo}/releases/tag/${tag}`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return await this.addComment(id, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
async notifyPublishedPRs(tag) {
|
||||||
|
tag = normalizeTag(tag);
|
||||||
|
|
||||||
|
const release = await getReleaseInfo(tag);
|
||||||
|
|
||||||
|
if (!release) {
|
||||||
|
throw Error(colorize()`Can't get release info for ${tag}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const {merges} = release;
|
||||||
|
|
||||||
|
console.log(colorize()`Found ${merges.length} PRs in ${tag}:`);
|
||||||
|
|
||||||
|
let i = 0;
|
||||||
|
|
||||||
|
for (const pr of merges) {
|
||||||
|
try {
|
||||||
|
console.log(colorize()`${i++}) Notify PR #${pr.id}`)
|
||||||
|
const result = await this.notifyPRPublished(pr.id, tag);
|
||||||
|
console.log('✔️', result ? 'Label, comment' : 'Label');
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(colorize('green', 'red')`❌ Failed notify PR ${pr.id}: ${err.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async renderTemplate(template, data) {
|
||||||
|
return Handlebars.compile(String(await fs.readFile(template)))(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default RepoBot;
|
28
pkg/axios/bin/actions/notify_published.js
Normal file
28
pkg/axios/bin/actions/notify_published.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import minimist from "minimist";
|
||||||
|
import RepoBot from '../RepoBot.js';
|
||||||
|
import fs from 'fs/promises';
|
||||||
|
|
||||||
|
const argv = minimist(process.argv.slice(2));
|
||||||
|
console.log(argv);
|
||||||
|
|
||||||
|
let {tag} = argv;
|
||||||
|
|
||||||
|
(async() => {
|
||||||
|
if (!tag || tag === true) {
|
||||||
|
const {version} = JSON.parse((await fs.readFile('./package.json')).toString());
|
||||||
|
|
||||||
|
tag = 'v' + version;
|
||||||
|
} else if (typeof tag !== 'string') {
|
||||||
|
|
||||||
|
throw new Error('tag must be a string');
|
||||||
|
}
|
||||||
|
|
||||||
|
const bot = new RepoBot();
|
||||||
|
|
||||||
|
try {
|
||||||
|
await bot.notifyPublishedPRs(tag);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('Error:', err.message);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
3
pkg/axios/bin/api.js
Normal file
3
pkg/axios/bin/api.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import GithubAPI from "./GithubAPI.js";
|
||||||
|
|
||||||
|
export default new GithubAPI('axios', 'axios');
|
29
pkg/axios/bin/check-build-version.js
Normal file
29
pkg/axios/bin/check-build-version.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
import assert from 'assert';
|
||||||
|
import axios from '../index.js';
|
||||||
|
import axiosBuild from '../dist/node/axios.cjs';
|
||||||
|
|
||||||
|
const {version} = JSON.parse(fs.readFileSync('./package.json'));
|
||||||
|
|
||||||
|
console.log('Checking versions...\n----------------------------')
|
||||||
|
|
||||||
|
console.log(`Package version: v${version}`);
|
||||||
|
console.log(`Axios version: v${axios.VERSION}`);
|
||||||
|
console.log(`Axios build version: v${axiosBuild.VERSION}`);
|
||||||
|
console.log(`----------------------------`);
|
||||||
|
|
||||||
|
assert.strictEqual(
|
||||||
|
version,
|
||||||
|
axios.VERSION,
|
||||||
|
`Version mismatch between package and Axios ${version} != ${axios.VERSION}`
|
||||||
|
);
|
||||||
|
|
||||||
|
assert.strictEqual(
|
||||||
|
version,
|
||||||
|
axiosBuild.VERSION,
|
||||||
|
`Version mismatch between package and build ${version} != ${axiosBuild.VERSION}`
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('✔️ PASSED\n');
|
||||||
|
|
||||||
|
|
241
pkg/axios/bin/contributors.js
Normal file
241
pkg/axios/bin/contributors.js
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
import axios from "./githubAxios.js";
|
||||||
|
import util from "util";
|
||||||
|
import cp from "child_process";
|
||||||
|
import Handlebars from "handlebars";
|
||||||
|
import fs from "fs/promises";
|
||||||
|
import {colorize} from "./helpers/colorize.js";
|
||||||
|
|
||||||
|
const exec = util.promisify(cp.exec);
|
||||||
|
|
||||||
|
const ONE_MB = 1024 * 1024;
|
||||||
|
|
||||||
|
const removeExtraLineBreaks = (str) => str.replace(/(?:\r\n|\r|\n){3,}/gm, '\r\n\r\n');
|
||||||
|
|
||||||
|
const cleanTemplate = template => template
|
||||||
|
.replace(/\n +/g, '\n')
|
||||||
|
.replace(/^ +/, '')
|
||||||
|
.replace(/\n\n\n+/g, '\n\n')
|
||||||
|
.replace(/\n\n$/, '\n');
|
||||||
|
|
||||||
|
const getUserFromCommit = ((commitCache) => async (sha) => {
|
||||||
|
try {
|
||||||
|
if(commitCache[sha] !== undefined) {
|
||||||
|
return commitCache[sha];
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(colorize()`fetch github commit info (${sha})`);
|
||||||
|
|
||||||
|
const {data} = await axios.get(`https://api.github.com/repos/axios/axios/commits/${sha}`);
|
||||||
|
|
||||||
|
return commitCache[sha] = {
|
||||||
|
...data.commit.author,
|
||||||
|
...data.author,
|
||||||
|
avatar_url_sm: data.author.avatar_url ? data.author.avatar_url + '&s=18' : '',
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
return commitCache[sha] = null;
|
||||||
|
}
|
||||||
|
})({});
|
||||||
|
|
||||||
|
const getIssueById = ((cache) => async (id) => {
|
||||||
|
if(cache[id] !== undefined) {
|
||||||
|
return cache[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const {data} = await axios.get(`https://api.github.com/repos/axios/axios/issues/${id}`);
|
||||||
|
|
||||||
|
return cache[id] = data;
|
||||||
|
} catch (err) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
})({});
|
||||||
|
|
||||||
|
const getUserInfo = ((userCache) => async (userEntry) => {
|
||||||
|
const {email, commits} = userEntry;
|
||||||
|
|
||||||
|
if (userCache[email] !== undefined) {
|
||||||
|
return userCache[email];
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(colorize()`fetch github user info [${userEntry.name}]`);
|
||||||
|
|
||||||
|
return userCache[email] = {
|
||||||
|
...userEntry,
|
||||||
|
...await getUserFromCommit(commits[0].hash)
|
||||||
|
}
|
||||||
|
})({});
|
||||||
|
|
||||||
|
const deduplicate = (authors) => {
|
||||||
|
const loginsMap = {};
|
||||||
|
const combined= {};
|
||||||
|
|
||||||
|
const assign = (a, b) => {
|
||||||
|
const {insertions, deletions, points, ...rest} = b;
|
||||||
|
|
||||||
|
Object.assign(a, rest);
|
||||||
|
|
||||||
|
a.insertions += insertions;
|
||||||
|
a.deletions += insertions;
|
||||||
|
a.insertions += insertions;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const [email, user] of Object.entries(authors)) {
|
||||||
|
const {login} = user;
|
||||||
|
let entry;
|
||||||
|
|
||||||
|
if(login && (entry = loginsMap[login])) {
|
||||||
|
assign(entry, user);
|
||||||
|
} else {
|
||||||
|
login && (loginsMap[login] = user);
|
||||||
|
combined[email] = user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return combined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const getReleaseInfo = ((releaseCache) => async (tag) => {
|
||||||
|
if(releaseCache[tag] !== undefined) {
|
||||||
|
return releaseCache[tag];
|
||||||
|
}
|
||||||
|
|
||||||
|
const isUnreleasedTag = !tag;
|
||||||
|
|
||||||
|
const version = 'v' + tag.replace(/^v/, '');
|
||||||
|
|
||||||
|
const command = isUnreleasedTag ?
|
||||||
|
`npx auto-changelog --unreleased-only --stdout --commit-limit false --template json` :
|
||||||
|
`npx auto-changelog ${
|
||||||
|
version ? '--starting-version ' + version + ' --ending-version ' + version : ''
|
||||||
|
} --stdout --commit-limit false --template json`;
|
||||||
|
|
||||||
|
console.log(command);
|
||||||
|
|
||||||
|
const {stdout} = await exec(command, {maxBuffer: 10 * ONE_MB});
|
||||||
|
|
||||||
|
const release = JSON.parse(stdout)[0];
|
||||||
|
|
||||||
|
if(release) {
|
||||||
|
const authors = {};
|
||||||
|
|
||||||
|
const commits = [
|
||||||
|
...release.commits,
|
||||||
|
...release.fixes.map(fix => fix.commit),
|
||||||
|
...release.merges.map(fix => fix.commit)
|
||||||
|
].filter(Boolean);
|
||||||
|
|
||||||
|
const commitMergeMap = {};
|
||||||
|
|
||||||
|
for(const merge of release.merges) {
|
||||||
|
commitMergeMap[merge.commit.hash] = merge.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const {hash, author, email, insertions, deletions} of commits) {
|
||||||
|
const entry = authors[email] = (authors[email] || {
|
||||||
|
name: author,
|
||||||
|
prs: [],
|
||||||
|
email,
|
||||||
|
commits: [],
|
||||||
|
insertions: 0, deletions: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
entry.commits.push({hash});
|
||||||
|
|
||||||
|
let pr;
|
||||||
|
|
||||||
|
if((pr = commitMergeMap[hash])) {
|
||||||
|
entry.prs.push(pr);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(colorize()`Found commit [${hash}]`);
|
||||||
|
|
||||||
|
entry.displayName = entry.name || author || entry.login;
|
||||||
|
|
||||||
|
entry.github = entry.login ? `https://github.com/${encodeURIComponent(entry.login)}` : '';
|
||||||
|
|
||||||
|
entry.insertions += insertions;
|
||||||
|
entry.deletions += deletions;
|
||||||
|
entry.points = entry.insertions + entry.deletions;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [email, author] of Object.entries(authors)) {
|
||||||
|
const entry = authors[email] = await getUserInfo(author);
|
||||||
|
|
||||||
|
entry.isBot = entry.type === "Bot";
|
||||||
|
}
|
||||||
|
|
||||||
|
release.authors = Object.values(deduplicate(authors))
|
||||||
|
.sort((a, b) => b.points - a.points);
|
||||||
|
|
||||||
|
release.allCommits = commits;
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseCache[tag] = release;
|
||||||
|
|
||||||
|
return release;
|
||||||
|
})({});
|
||||||
|
|
||||||
|
const renderContributorsList = async (tag, template) => {
|
||||||
|
const release = await getReleaseInfo(tag);
|
||||||
|
|
||||||
|
const compile = Handlebars.compile(String(await fs.readFile(template)))
|
||||||
|
|
||||||
|
const content = compile(release);
|
||||||
|
|
||||||
|
return removeExtraLineBreaks(cleanTemplate(content));
|
||||||
|
}
|
||||||
|
|
||||||
|
const renderPRsList = async (tag, template, {comments_threshold= 5, awesome_threshold= 5, label = 'add_to_changelog'} = {}) => {
|
||||||
|
const release = await getReleaseInfo(tag);
|
||||||
|
|
||||||
|
const prs = {};
|
||||||
|
|
||||||
|
for(const merge of release.merges) {
|
||||||
|
const pr = await getIssueById(merge.id);
|
||||||
|
|
||||||
|
if (pr && pr.labels.find(({name})=> name === label)) {
|
||||||
|
const {reactions, body} = pr;
|
||||||
|
prs[pr.number] = pr;
|
||||||
|
pr.isHot = pr.comments > comments_threshold;
|
||||||
|
const points = reactions['+1'] +
|
||||||
|
reactions['hooray'] + reactions['rocket'] + reactions['heart'] + reactions['laugh'] - reactions['-1'];
|
||||||
|
|
||||||
|
pr.isAwesome = points > awesome_threshold;
|
||||||
|
|
||||||
|
let match;
|
||||||
|
|
||||||
|
pr.messages = [];
|
||||||
|
|
||||||
|
if (body) {
|
||||||
|
const reg = /```+changelog\n*(.+?)?\n*```/gms;
|
||||||
|
|
||||||
|
while((match = reg.exec(body))) {
|
||||||
|
match[1] && pr.messages.push(match[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
release.prs = Object.values(prs);
|
||||||
|
|
||||||
|
const compile = Handlebars.compile(String(await fs.readFile(template)))
|
||||||
|
|
||||||
|
const content = compile(release);
|
||||||
|
|
||||||
|
return removeExtraLineBreaks(cleanTemplate(content));
|
||||||
|
}
|
||||||
|
|
||||||
|
const getTagRef = async (tag) => {
|
||||||
|
try {
|
||||||
|
return (await exec(`git show-ref --tags "refs/tags/${tag}"`)).stdout.split(' ')[0];
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
renderContributorsList,
|
||||||
|
getReleaseInfo,
|
||||||
|
renderPRsList,
|
||||||
|
getTagRef
|
||||||
|
}
|
19
pkg/axios/bin/githubAxios.js
Normal file
19
pkg/axios/bin/githubAxios.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import axios from '../index.js';
|
||||||
|
import {colorize} from "./helpers/colorize.js";
|
||||||
|
|
||||||
|
const {GITHUB_TOKEN} = process.env;
|
||||||
|
|
||||||
|
GITHUB_TOKEN ? console.log(`[GITHUB_TOKEN OK]`) : console.warn(`[GITHUB_TOKEN is not defined]`);
|
||||||
|
|
||||||
|
const defaultTransform = axios.defaults.transformRequest;
|
||||||
|
|
||||||
|
export default axios.create({
|
||||||
|
transformRequest: [defaultTransform[0], function (data) {
|
||||||
|
console.log(colorize()`[${this.method.toUpperCase()}] Request [${new URL(axios.getUri(this)).pathname}]`);
|
||||||
|
return data;
|
||||||
|
}],
|
||||||
|
baseURL: 'https://api.github.com/',
|
||||||
|
headers: {
|
||||||
|
Authorization: GITHUB_TOKEN ? `token ${GITHUB_TOKEN}` : null
|
||||||
|
}
|
||||||
|
});
|
14
pkg/axios/bin/helpers/colorize.js
Normal file
14
pkg/axios/bin/helpers/colorize.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import chalk from 'chalk';
|
||||||
|
|
||||||
|
export const colorize = (...colors)=> {
|
||||||
|
if(!colors.length) {
|
||||||
|
colors = ['green', 'cyan', 'magenta', 'blue', 'yellow', 'red'];
|
||||||
|
}
|
||||||
|
|
||||||
|
const colorsCount = colors.length;
|
||||||
|
|
||||||
|
return (strings, ...values) => {
|
||||||
|
const {length} = values;
|
||||||
|
return strings.map((str, i) => i < length ? str + chalk[colors[i%colorsCount]].bold(values[i]) : str).join('');
|
||||||
|
}
|
||||||
|
}
|
12
pkg/axios/bin/helpers/parser.js
Normal file
12
pkg/axios/bin/helpers/parser.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
export const matchAll = (text, regexp, cb) => {
|
||||||
|
let match;
|
||||||
|
while((match = regexp.exec(text))) {
|
||||||
|
cb(match);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const parseSection = (body, name, cb) => {
|
||||||
|
matchAll(body, new RegExp(`^(#+)\\s+${name}?(.*?)^\\1\\s+\\w+`, 'gims'), cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
export const parseVersion = (rawVersion) => /^v?(\d+).(\d+).(\d+)/.exec(rawVersion);
|
78
pkg/axios/bin/injectContributorsList.js
Normal file
78
pkg/axios/bin/injectContributorsList.js
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import fs from 'fs/promises';
|
||||||
|
import path from 'path';
|
||||||
|
import {renderContributorsList, getTagRef, renderPRsList} from './contributors.js';
|
||||||
|
import asyncReplace from 'string-replace-async';
|
||||||
|
import {fileURLToPath} from "url";
|
||||||
|
import {colorize} from "./helpers/colorize.js";
|
||||||
|
|
||||||
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
|
const CONTRIBUTORS_TEMPLATE = path.resolve(__dirname, '../templates/contributors.hbs');
|
||||||
|
const PRS_TEMPLATE = path.resolve(__dirname, '../templates/prs.hbs');
|
||||||
|
|
||||||
|
const injectSection = async (name, contributorsRE, injector, infile = '../CHANGELOG.md') => {
|
||||||
|
console.log(colorize()`Checking ${name} sections in ${infile}`);
|
||||||
|
|
||||||
|
infile = path.resolve(__dirname, infile);
|
||||||
|
|
||||||
|
const content = String(await fs.readFile(infile));
|
||||||
|
const headerRE = /^#+\s+\[([-_\d.\w]+)].+?$/mig;
|
||||||
|
|
||||||
|
let tag;
|
||||||
|
let index = 0;
|
||||||
|
let isFirstTag = true;
|
||||||
|
|
||||||
|
const newContent = await asyncReplace(content, headerRE, async (match, nextTag, offset) => {
|
||||||
|
const releaseContent = content.slice(index, offset);
|
||||||
|
|
||||||
|
const hasSection = contributorsRE.test(releaseContent);
|
||||||
|
|
||||||
|
const currentTag = tag;
|
||||||
|
|
||||||
|
tag = nextTag;
|
||||||
|
index = offset + match.length;
|
||||||
|
|
||||||
|
if(currentTag) {
|
||||||
|
if (hasSection) {
|
||||||
|
console.log(colorize()`[${currentTag}]: ✓ OK`);
|
||||||
|
} else {
|
||||||
|
const target = isFirstTag && (!await getTagRef(currentTag)) ? '' : currentTag;
|
||||||
|
|
||||||
|
console.log(colorize()`[${currentTag}]: ❌ MISSED` + (!target ? ' (UNRELEASED)' : ''));
|
||||||
|
|
||||||
|
isFirstTag = false;
|
||||||
|
|
||||||
|
console.log(`Generating section...`);
|
||||||
|
|
||||||
|
const section = await injector(target);
|
||||||
|
|
||||||
|
if (!section) {
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(colorize()`\nRENDERED SECTION [${name}] for [${currentTag}]:`);
|
||||||
|
console.log('-------------BEGIN--------------\n');
|
||||||
|
console.log(section);
|
||||||
|
console.log('--------------END---------------\n');
|
||||||
|
|
||||||
|
return section + '\n' + match;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return match;
|
||||||
|
});
|
||||||
|
|
||||||
|
await fs.writeFile(infile, newContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
await injectSection(
|
||||||
|
'PRs',
|
||||||
|
/^\s*### PRs/mi,
|
||||||
|
(tag) => tag ? '' : renderPRsList(tag, PRS_TEMPLATE, {awesome_threshold: 5, comments_threshold: 7}),
|
||||||
|
);
|
||||||
|
|
||||||
|
await injectSection(
|
||||||
|
'contributors',
|
||||||
|
/^\s*### Contributors/mi,
|
||||||
|
(tag) => renderContributorsList(tag, CONTRIBUTORS_TEMPLATE)
|
||||||
|
);
|
75
pkg/axios/bin/pr.js
Normal file
75
pkg/axios/bin/pr.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import util from "util";
|
||||||
|
import cp from "child_process";
|
||||||
|
import Handlebars from "handlebars";
|
||||||
|
import fs from "fs/promises";
|
||||||
|
import prettyBytes from 'pretty-bytes';
|
||||||
|
import {gzipSize} from 'gzip-size';
|
||||||
|
|
||||||
|
const exec = util.promisify(cp.exec);
|
||||||
|
|
||||||
|
const getBlobHistory = async (filepath, maxCount= 5) => {
|
||||||
|
const log = (await exec(
|
||||||
|
`git log --max-count=${maxCount} --no-walk --tags=v* --oneline --format=%H%d -- ${filepath}`
|
||||||
|
)).stdout;
|
||||||
|
|
||||||
|
const commits = [];
|
||||||
|
|
||||||
|
let match;
|
||||||
|
|
||||||
|
const regexp = /^(\w+) \(tag: (v?[.\d]+)\)$/gm;
|
||||||
|
|
||||||
|
while((match = regexp.exec(log))) {
|
||||||
|
commits.push({
|
||||||
|
sha: match[1],
|
||||||
|
tag: match[2],
|
||||||
|
size: await getBlobSize(filepath, match[1])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return commits;
|
||||||
|
}
|
||||||
|
|
||||||
|
const getBlobSize = async (filepath, sha ='HEAD') => {
|
||||||
|
const size = (await exec(
|
||||||
|
`git cat-file -s ${sha}:${filepath}`
|
||||||
|
)).stdout;
|
||||||
|
|
||||||
|
return size ? +size : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateFileReport = async (files) => {
|
||||||
|
const stat = {};
|
||||||
|
|
||||||
|
for(const [name, file] of Object.entries(files)) {
|
||||||
|
const commits = await getBlobHistory(file);
|
||||||
|
|
||||||
|
stat[file] = {
|
||||||
|
name,
|
||||||
|
size: (await fs.stat(file)).size,
|
||||||
|
path: file,
|
||||||
|
gzip: await gzipSize(String(await fs.readFile(file))),
|
||||||
|
commits,
|
||||||
|
history: commits.map(({tag, size}) => `${prettyBytes(size)} (${tag})`).join(' ← ')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stat;
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateBody = async ({files, template = './templates/pr.hbs'} = {}) => {
|
||||||
|
const data = {
|
||||||
|
files: await generateFileReport(files)
|
||||||
|
};
|
||||||
|
|
||||||
|
Handlebars.registerHelper('filesize', (bytes)=> prettyBytes(bytes));
|
||||||
|
|
||||||
|
return Handlebars.compile(String(await fs.readFile(template)))(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(await generateBody({
|
||||||
|
files: {
|
||||||
|
'Browser build (UMD)' : './dist/axios.min.js',
|
||||||
|
'Browser build (ESM)' : './dist/esm/axios.min.js',
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
22
pkg/axios/bin/ssl_hotfix.js
Normal file
22
pkg/axios/bin/ssl_hotfix.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import {spawn} from 'child_process';
|
||||||
|
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
|
||||||
|
console.log(`Running ${args.join(' ')} on ${process.version}\n`);
|
||||||
|
|
||||||
|
const match = /v(\d+)/.exec(process.version);
|
||||||
|
|
||||||
|
const isHotfixNeeded = match && match[1] > 16;
|
||||||
|
|
||||||
|
isHotfixNeeded && console.warn('Setting --openssl-legacy-provider as ssl hotfix');
|
||||||
|
|
||||||
|
const test = spawn('cross-env',
|
||||||
|
isHotfixNeeded ? ['NODE_OPTIONS=--openssl-legacy-provider', ...args] : args, {
|
||||||
|
shell: true,
|
||||||
|
stdio: 'inherit'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
test.on('exit', function (code) {
|
||||||
|
process.exit(code)
|
||||||
|
})
|
38
pkg/axios/bower.json
Normal file
38
pkg/axios/bower.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "axios",
|
||||||
|
"main": "./dist/axios.js",
|
||||||
|
"version": "1.6.3",
|
||||||
|
"homepage": "https://axios-http.com",
|
||||||
|
"authors": [
|
||||||
|
"Matt Zabriskie"
|
||||||
|
],
|
||||||
|
"description": "Promise based HTTP client for the browser and node.js",
|
||||||
|
"moduleType": [
|
||||||
|
"amd",
|
||||||
|
"globals"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"xhr",
|
||||||
|
"http",
|
||||||
|
"ajax",
|
||||||
|
"promise",
|
||||||
|
"node"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"ignore": [
|
||||||
|
"**/.*",
|
||||||
|
"*.iml",
|
||||||
|
"examples",
|
||||||
|
"lib",
|
||||||
|
"node_modules",
|
||||||
|
"sandbox",
|
||||||
|
"test",
|
||||||
|
"CONTRIBUTING.md",
|
||||||
|
"COOKBOOK.md",
|
||||||
|
"Gruntfile.js",
|
||||||
|
"index.js",
|
||||||
|
"karma.conf.js",
|
||||||
|
"package.json",
|
||||||
|
"webpack.*.js"
|
||||||
|
]
|
||||||
|
}
|
3061
pkg/axios/dist/axios.js
vendored
Normal file
3061
pkg/axios/dist/axios.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
pkg/axios/dist/axios.js.map
vendored
Normal file
1
pkg/axios/dist/axios.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
pkg/axios/dist/axios.min.js
vendored
Normal file
2
pkg/axios/dist/axios.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
pkg/axios/dist/axios.min.js.map
vendored
Normal file
1
pkg/axios/dist/axios.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3234
pkg/axios/dist/browser/axios.cjs
vendored
Normal file
3234
pkg/axios/dist/browser/axios.cjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
pkg/axios/dist/browser/axios.cjs.map
vendored
Normal file
1
pkg/axios/dist/browser/axios.cjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3257
pkg/axios/dist/esm/axios.js
vendored
Normal file
3257
pkg/axios/dist/esm/axios.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
pkg/axios/dist/esm/axios.js.map
vendored
Normal file
1
pkg/axios/dist/esm/axios.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
pkg/axios/dist/esm/axios.min.js
vendored
Normal file
2
pkg/axios/dist/esm/axios.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
pkg/axios/dist/esm/axios.min.js.map
vendored
Normal file
1
pkg/axios/dist/esm/axios.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4327
pkg/axios/dist/node/axios.cjs
vendored
Normal file
4327
pkg/axios/dist/node/axios.cjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
pkg/axios/dist/node/axios.cjs.map
vendored
Normal file
1
pkg/axios/dist/node/axios.cjs.map
vendored
Normal file
File diff suppressed because one or more lines are too long
93
pkg/axios/gulpfile.js
Normal file
93
pkg/axios/gulpfile.js
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
import gulp from 'gulp';
|
||||||
|
import fs from 'fs-extra';
|
||||||
|
import axios from './bin/githubAxios.js';
|
||||||
|
import minimist from 'minimist'
|
||||||
|
|
||||||
|
const argv = minimist(process.argv.slice(2));
|
||||||
|
|
||||||
|
gulp.task('default', async function(){
|
||||||
|
console.log('hello!');
|
||||||
|
});
|
||||||
|
|
||||||
|
const clear = gulp.task('clear', async function() {
|
||||||
|
await fs.emptyDir('./dist/')
|
||||||
|
});
|
||||||
|
|
||||||
|
const bower = gulp.task('bower', async function () {
|
||||||
|
const npm = JSON.parse(await fs.readFile('package.json'));
|
||||||
|
const bower = JSON.parse(await fs.readFile('bower.json'));
|
||||||
|
|
||||||
|
const fields = [
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'version',
|
||||||
|
'homepage',
|
||||||
|
'license',
|
||||||
|
'keywords'
|
||||||
|
];
|
||||||
|
|
||||||
|
for (let i = 0, l = fields.length; i < l; i++) {
|
||||||
|
const field = fields[i];
|
||||||
|
bower[field] = npm[field];
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.writeFile('bower.json', JSON.stringify(bower, null, 2));
|
||||||
|
});
|
||||||
|
|
||||||
|
async function getContributors(user, repo, maxCount = 1) {
|
||||||
|
const contributors = (await axios.get(
|
||||||
|
`https://api.github.com/repos/${encodeURIComponent(user)}/${encodeURIComponent(repo)}/contributors`,
|
||||||
|
{ params: { per_page: maxCount } }
|
||||||
|
)).data;
|
||||||
|
|
||||||
|
return Promise.all(contributors.map(async (contributor)=> {
|
||||||
|
return {...contributor, ...(await axios.get(
|
||||||
|
`https://api.github.com/users/${encodeURIComponent(contributor.login)}`
|
||||||
|
)).data};
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
const packageJSON = gulp.task('package', async function () {
|
||||||
|
const CONTRIBUTION_THRESHOLD = 3;
|
||||||
|
|
||||||
|
const npm = JSON.parse(await fs.readFile('package.json'));
|
||||||
|
|
||||||
|
try {
|
||||||
|
const contributors = await getContributors('axios', 'axios', 15);
|
||||||
|
|
||||||
|
npm.contributors = contributors
|
||||||
|
.filter(
|
||||||
|
({type, contributions}) => type.toLowerCase() === 'user' && contributions >= CONTRIBUTION_THRESHOLD
|
||||||
|
)
|
||||||
|
.map(({login, name, url}) => `${name || login} (https://github.com/${login})`);
|
||||||
|
|
||||||
|
await fs.writeFile('package.json', JSON.stringify(npm, null, 2));
|
||||||
|
} catch (err) {
|
||||||
|
if (axios.isAxiosError(err) && err.response && err.response.status === 403) {
|
||||||
|
throw Error(`GitHub API Error: ${err.response.data && err.response.data.message}`);
|
||||||
|
}
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const env = gulp.task('env', async function () {
|
||||||
|
var npm = JSON.parse(await fs.readFile('package.json'));
|
||||||
|
|
||||||
|
const envFilePath = './lib/env/data.js';
|
||||||
|
|
||||||
|
await fs.writeFile(envFilePath, Object.entries({
|
||||||
|
VERSION: (argv.bump || npm.version).replace(/^v/, '')
|
||||||
|
}).map(([key, value]) => {
|
||||||
|
return `export const ${key} = ${JSON.stringify(value)};`
|
||||||
|
}).join('\n'));
|
||||||
|
});
|
||||||
|
|
||||||
|
const version = gulp.series('bower', 'env', 'package');
|
||||||
|
|
||||||
|
export {
|
||||||
|
bower,
|
||||||
|
env,
|
||||||
|
clear,
|
||||||
|
version,
|
||||||
|
packageJSON
|
||||||
|
}
|
542
pkg/axios/index.d.cts
Normal file
542
pkg/axios/index.d.cts
Normal file
@ -0,0 +1,542 @@
|
|||||||
|
interface RawAxiosHeaders {
|
||||||
|
[key: string]: axios.AxiosHeaderValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
type MethodsHeaders = Partial<{
|
||||||
|
[Key in axios.Method as Lowercase<Key>]: AxiosHeaders;
|
||||||
|
} & {common: AxiosHeaders}>;
|
||||||
|
|
||||||
|
type AxiosHeaderMatcher = (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean;
|
||||||
|
|
||||||
|
type AxiosHeaderParser = (this: AxiosHeaders, value: axios.AxiosHeaderValue, header: string) => any;
|
||||||
|
|
||||||
|
type CommonRequestHeadersList = 'Accept' | 'Content-Length' | 'User-Agent'| 'Content-Encoding' | 'Authorization';
|
||||||
|
|
||||||
|
type ContentType = axios.AxiosHeaderValue | 'text/html' | 'text/plain' | 'multipart/form-data' | 'application/json' | 'application/x-www-form-urlencoded' | 'application/octet-stream';
|
||||||
|
|
||||||
|
type CommonResponseHeadersList = 'Server' | 'Content-Type' | 'Content-Length' | 'Cache-Control'| 'Content-Encoding';
|
||||||
|
|
||||||
|
declare class AxiosHeaders {
|
||||||
|
constructor(
|
||||||
|
headers?: RawAxiosHeaders | AxiosHeaders | string
|
||||||
|
);
|
||||||
|
|
||||||
|
[key: string]: any;
|
||||||
|
|
||||||
|
set(headerName?: string, value?: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean): AxiosHeaders;
|
||||||
|
|
||||||
|
get(headerName: string, parser: RegExp): RegExpExecArray | null;
|
||||||
|
get(headerName: string, matcher?: true | AxiosHeaderParser): axios.AxiosHeaderValue;
|
||||||
|
|
||||||
|
has(header: string, matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
clear(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
normalize(format: boolean): AxiosHeaders;
|
||||||
|
|
||||||
|
concat(...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>): AxiosHeaders;
|
||||||
|
|
||||||
|
toJSON(asStrings?: boolean): RawAxiosHeaders;
|
||||||
|
|
||||||
|
static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
|
||||||
|
|
||||||
|
static accessor(header: string | string[]): AxiosHeaders;
|
||||||
|
|
||||||
|
static concat(...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>): AxiosHeaders;
|
||||||
|
|
||||||
|
setContentType(value: ContentType, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getContentType(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getContentType(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue;
|
||||||
|
hasContentType(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setContentLength(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getContentLength(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getContentLength(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue;
|
||||||
|
hasContentLength(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setAccept(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getAccept(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getAccept(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue;
|
||||||
|
hasAccept(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setUserAgent(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getUserAgent(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getUserAgent(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue;
|
||||||
|
hasUserAgent(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setContentEncoding(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getContentEncoding(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getContentEncoding(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue;
|
||||||
|
hasContentEncoding(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setAuthorization(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getAuthorization(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getAuthorization(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue;
|
||||||
|
hasAuthorization(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
[Symbol.iterator](): IterableIterator<[string, axios.AxiosHeaderValue]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare class AxiosError<T = unknown, D = any> extends Error {
|
||||||
|
constructor(
|
||||||
|
message?: string,
|
||||||
|
code?: string,
|
||||||
|
config?: axios.InternalAxiosRequestConfig<D>,
|
||||||
|
request?: any,
|
||||||
|
response?: axios.AxiosResponse<T, D>
|
||||||
|
);
|
||||||
|
|
||||||
|
config?: axios.InternalAxiosRequestConfig<D>;
|
||||||
|
code?: string;
|
||||||
|
request?: any;
|
||||||
|
response?: axios.AxiosResponse<T, D>;
|
||||||
|
isAxiosError: boolean;
|
||||||
|
status?: number;
|
||||||
|
toJSON: () => object;
|
||||||
|
cause?: Error;
|
||||||
|
static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS";
|
||||||
|
static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE";
|
||||||
|
static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION";
|
||||||
|
static readonly ERR_NETWORK = "ERR_NETWORK";
|
||||||
|
static readonly ERR_DEPRECATED = "ERR_DEPRECATED";
|
||||||
|
static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE";
|
||||||
|
static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST";
|
||||||
|
static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT";
|
||||||
|
static readonly ERR_INVALID_URL = "ERR_INVALID_URL";
|
||||||
|
static readonly ERR_CANCELED = "ERR_CANCELED";
|
||||||
|
static readonly ECONNABORTED = "ECONNABORTED";
|
||||||
|
static readonly ETIMEDOUT = "ETIMEDOUT";
|
||||||
|
}
|
||||||
|
|
||||||
|
declare class CanceledError<T> extends AxiosError<T> {
|
||||||
|
}
|
||||||
|
|
||||||
|
declare class Axios {
|
||||||
|
constructor(config?: axios.AxiosRequestConfig);
|
||||||
|
defaults: axios.AxiosDefaults;
|
||||||
|
interceptors: {
|
||||||
|
request: axios.AxiosInterceptorManager<axios.InternalAxiosRequestConfig>;
|
||||||
|
response: axios.AxiosInterceptorManager<axios.AxiosResponse>;
|
||||||
|
};
|
||||||
|
getUri(config?: axios.AxiosRequestConfig): string;
|
||||||
|
request<T = any, R = axios.AxiosResponse<T>, D = any>(config: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
get<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
delete<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
head<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
options<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
post<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
put<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
patch<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
postForm<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
putForm<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
patchForm<T = any, R = axios.AxiosResponse<T>, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare enum HttpStatusCode {
|
||||||
|
Continue = 100,
|
||||||
|
SwitchingProtocols = 101,
|
||||||
|
Processing = 102,
|
||||||
|
EarlyHints = 103,
|
||||||
|
Ok = 200,
|
||||||
|
Created = 201,
|
||||||
|
Accepted = 202,
|
||||||
|
NonAuthoritativeInformation = 203,
|
||||||
|
NoContent = 204,
|
||||||
|
ResetContent = 205,
|
||||||
|
PartialContent = 206,
|
||||||
|
MultiStatus = 207,
|
||||||
|
AlreadyReported = 208,
|
||||||
|
ImUsed = 226,
|
||||||
|
MultipleChoices = 300,
|
||||||
|
MovedPermanently = 301,
|
||||||
|
Found = 302,
|
||||||
|
SeeOther = 303,
|
||||||
|
NotModified = 304,
|
||||||
|
UseProxy = 305,
|
||||||
|
Unused = 306,
|
||||||
|
TemporaryRedirect = 307,
|
||||||
|
PermanentRedirect = 308,
|
||||||
|
BadRequest = 400,
|
||||||
|
Unauthorized = 401,
|
||||||
|
PaymentRequired = 402,
|
||||||
|
Forbidden = 403,
|
||||||
|
NotFound = 404,
|
||||||
|
MethodNotAllowed = 405,
|
||||||
|
NotAcceptable = 406,
|
||||||
|
ProxyAuthenticationRequired = 407,
|
||||||
|
RequestTimeout = 408,
|
||||||
|
Conflict = 409,
|
||||||
|
Gone = 410,
|
||||||
|
LengthRequired = 411,
|
||||||
|
PreconditionFailed = 412,
|
||||||
|
PayloadTooLarge = 413,
|
||||||
|
UriTooLong = 414,
|
||||||
|
UnsupportedMediaType = 415,
|
||||||
|
RangeNotSatisfiable = 416,
|
||||||
|
ExpectationFailed = 417,
|
||||||
|
ImATeapot = 418,
|
||||||
|
MisdirectedRequest = 421,
|
||||||
|
UnprocessableEntity = 422,
|
||||||
|
Locked = 423,
|
||||||
|
FailedDependency = 424,
|
||||||
|
TooEarly = 425,
|
||||||
|
UpgradeRequired = 426,
|
||||||
|
PreconditionRequired = 428,
|
||||||
|
TooManyRequests = 429,
|
||||||
|
RequestHeaderFieldsTooLarge = 431,
|
||||||
|
UnavailableForLegalReasons = 451,
|
||||||
|
InternalServerError = 500,
|
||||||
|
NotImplemented = 501,
|
||||||
|
BadGateway = 502,
|
||||||
|
ServiceUnavailable = 503,
|
||||||
|
GatewayTimeout = 504,
|
||||||
|
HttpVersionNotSupported = 505,
|
||||||
|
VariantAlsoNegotiates = 506,
|
||||||
|
InsufficientStorage = 507,
|
||||||
|
LoopDetected = 508,
|
||||||
|
NotExtended = 510,
|
||||||
|
NetworkAuthenticationRequired = 511,
|
||||||
|
}
|
||||||
|
|
||||||
|
type InternalAxiosError<T = unknown, D = any> = AxiosError<T, D>;
|
||||||
|
|
||||||
|
declare namespace axios {
|
||||||
|
type AxiosError<T = unknown, D = any> = InternalAxiosError<T, D>;
|
||||||
|
|
||||||
|
type RawAxiosRequestHeaders = Partial<RawAxiosHeaders & {
|
||||||
|
[Key in CommonRequestHeadersList]: AxiosHeaderValue;
|
||||||
|
} & {
|
||||||
|
'Content-Type': ContentType
|
||||||
|
}>;
|
||||||
|
|
||||||
|
type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders;
|
||||||
|
|
||||||
|
type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null;
|
||||||
|
|
||||||
|
type RawCommonResponseHeaders = {
|
||||||
|
[Key in CommonResponseHeadersList]: AxiosHeaderValue;
|
||||||
|
} & {
|
||||||
|
"set-cookie": string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type RawAxiosResponseHeaders = Partial<RawAxiosHeaders & RawCommonResponseHeaders>;
|
||||||
|
|
||||||
|
type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders;
|
||||||
|
|
||||||
|
interface AxiosRequestTransformer {
|
||||||
|
(this: InternalAxiosRequestConfig, data: any, headers: AxiosRequestHeaders): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosResponseTransformer {
|
||||||
|
(this: InternalAxiosRequestConfig, data: any, headers: AxiosResponseHeaders, status?: number): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosAdapter {
|
||||||
|
(config: InternalAxiosRequestConfig): AxiosPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosBasicCredentials {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosProxyConfig {
|
||||||
|
host: string;
|
||||||
|
port: number;
|
||||||
|
auth?: AxiosBasicCredentials;
|
||||||
|
protocol?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
type Method =
|
||||||
|
| 'get' | 'GET'
|
||||||
|
| 'delete' | 'DELETE'
|
||||||
|
| 'head' | 'HEAD'
|
||||||
|
| 'options' | 'OPTIONS'
|
||||||
|
| 'post' | 'POST'
|
||||||
|
| 'put' | 'PUT'
|
||||||
|
| 'patch' | 'PATCH'
|
||||||
|
| 'purge' | 'PURGE'
|
||||||
|
| 'link' | 'LINK'
|
||||||
|
| 'unlink' | 'UNLINK';
|
||||||
|
|
||||||
|
type ResponseType =
|
||||||
|
| 'arraybuffer'
|
||||||
|
| 'blob'
|
||||||
|
| 'document'
|
||||||
|
| 'json'
|
||||||
|
| 'text'
|
||||||
|
| 'stream';
|
||||||
|
|
||||||
|
type responseEncoding =
|
||||||
|
| 'ascii' | 'ASCII'
|
||||||
|
| 'ansi' | 'ANSI'
|
||||||
|
| 'binary' | 'BINARY'
|
||||||
|
| 'base64' | 'BASE64'
|
||||||
|
| 'base64url' | 'BASE64URL'
|
||||||
|
| 'hex' | 'HEX'
|
||||||
|
| 'latin1' | 'LATIN1'
|
||||||
|
| 'ucs-2' | 'UCS-2'
|
||||||
|
| 'ucs2' | 'UCS2'
|
||||||
|
| 'utf-8' | 'UTF-8'
|
||||||
|
| 'utf8' | 'UTF8'
|
||||||
|
| 'utf16le' | 'UTF16LE';
|
||||||
|
|
||||||
|
interface TransitionalOptions {
|
||||||
|
silentJSONParsing?: boolean;
|
||||||
|
forcedJSONParsing?: boolean;
|
||||||
|
clarifyTimeoutError?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface GenericAbortSignal {
|
||||||
|
readonly aborted: boolean;
|
||||||
|
onabort?: ((...args: any) => any) | null;
|
||||||
|
addEventListener?: (...args: any) => any;
|
||||||
|
removeEventListener?: (...args: any) => any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface FormDataVisitorHelpers {
|
||||||
|
defaultVisitor: SerializerVisitor;
|
||||||
|
convertValue: (value: any) => any;
|
||||||
|
isVisitable: (value: any) => boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SerializerVisitor {
|
||||||
|
(
|
||||||
|
this: GenericFormData,
|
||||||
|
value: any,
|
||||||
|
key: string | number,
|
||||||
|
path: null | Array<string | number>,
|
||||||
|
helpers: FormDataVisitorHelpers
|
||||||
|
): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SerializerOptions {
|
||||||
|
visitor?: SerializerVisitor;
|
||||||
|
dots?: boolean;
|
||||||
|
metaTokens?: boolean;
|
||||||
|
indexes?: boolean | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// tslint:disable-next-line
|
||||||
|
interface FormSerializerOptions extends SerializerOptions {
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ParamEncoder {
|
||||||
|
(value: any, defaultEncoder: (value: any) => any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CustomParamsSerializer {
|
||||||
|
(params: Record<string, any>, options?: ParamsSerializerOptions): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ParamsSerializerOptions extends SerializerOptions {
|
||||||
|
encode?: ParamEncoder;
|
||||||
|
serialize?: CustomParamsSerializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
type MaxUploadRate = number;
|
||||||
|
|
||||||
|
type MaxDownloadRate = number;
|
||||||
|
|
||||||
|
type BrowserProgressEvent = any;
|
||||||
|
|
||||||
|
interface AxiosProgressEvent {
|
||||||
|
loaded: number;
|
||||||
|
total?: number;
|
||||||
|
progress?: number;
|
||||||
|
bytes: number;
|
||||||
|
rate?: number;
|
||||||
|
estimated?: number;
|
||||||
|
upload?: boolean;
|
||||||
|
download?: boolean;
|
||||||
|
event?: BrowserProgressEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
type Milliseconds = number;
|
||||||
|
|
||||||
|
type AxiosAdapterName = 'xhr' | 'http' | string;
|
||||||
|
|
||||||
|
type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName;
|
||||||
|
|
||||||
|
type AddressFamily = 4 | 6 | undefined;
|
||||||
|
|
||||||
|
interface LookupAddressEntry {
|
||||||
|
address: string;
|
||||||
|
family?: AddressFamily;
|
||||||
|
}
|
||||||
|
|
||||||
|
type LookupAddress = string | LookupAddressEntry;
|
||||||
|
|
||||||
|
interface AxiosRequestConfig<D = any> {
|
||||||
|
url?: string;
|
||||||
|
method?: Method | string;
|
||||||
|
baseURL?: string;
|
||||||
|
transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[];
|
||||||
|
transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[];
|
||||||
|
headers?: (RawAxiosRequestHeaders & MethodsHeaders) | AxiosHeaders;
|
||||||
|
params?: any;
|
||||||
|
paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer;
|
||||||
|
data?: D;
|
||||||
|
timeout?: Milliseconds;
|
||||||
|
timeoutErrorMessage?: string;
|
||||||
|
withCredentials?: boolean;
|
||||||
|
adapter?: AxiosAdapterConfig | AxiosAdapterConfig[];
|
||||||
|
auth?: AxiosBasicCredentials;
|
||||||
|
responseType?: ResponseType;
|
||||||
|
responseEncoding?: responseEncoding | string;
|
||||||
|
xsrfCookieName?: string;
|
||||||
|
xsrfHeaderName?: string;
|
||||||
|
onUploadProgress?: (progressEvent: AxiosProgressEvent) => void;
|
||||||
|
onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void;
|
||||||
|
maxContentLength?: number;
|
||||||
|
validateStatus?: ((status: number) => boolean) | null;
|
||||||
|
maxBodyLength?: number;
|
||||||
|
maxRedirects?: number;
|
||||||
|
maxRate?: number | [MaxUploadRate, MaxDownloadRate];
|
||||||
|
beforeRedirect?: (options: Record<string, any>, responseDetails: {headers: Record<string, string>}) => void;
|
||||||
|
socketPath?: string | null;
|
||||||
|
transport?: any;
|
||||||
|
httpAgent?: any;
|
||||||
|
httpsAgent?: any;
|
||||||
|
proxy?: AxiosProxyConfig | false;
|
||||||
|
cancelToken?: CancelToken;
|
||||||
|
decompress?: boolean;
|
||||||
|
transitional?: TransitionalOptions;
|
||||||
|
signal?: GenericAbortSignal;
|
||||||
|
insecureHTTPParser?: boolean;
|
||||||
|
env?: {
|
||||||
|
FormData?: new (...args: any[]) => object;
|
||||||
|
};
|
||||||
|
formSerializer?: FormSerializerOptions;
|
||||||
|
family?: AddressFamily;
|
||||||
|
lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: LookupAddress | LookupAddress[], family?: AddressFamily) => void) => void) |
|
||||||
|
((hostname: string, options: object) => Promise<[address: LookupAddressEntry | LookupAddressEntry[], family?: AddressFamily] | LookupAddress>);
|
||||||
|
withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Alias
|
||||||
|
type RawAxiosRequestConfig<D = any> = AxiosRequestConfig<D>;
|
||||||
|
|
||||||
|
interface InternalAxiosRequestConfig<D = any> extends AxiosRequestConfig {
|
||||||
|
headers: AxiosRequestHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HeadersDefaults {
|
||||||
|
common: RawAxiosRequestHeaders;
|
||||||
|
delete: RawAxiosRequestHeaders;
|
||||||
|
get: RawAxiosRequestHeaders;
|
||||||
|
head: RawAxiosRequestHeaders;
|
||||||
|
post: RawAxiosRequestHeaders;
|
||||||
|
put: RawAxiosRequestHeaders;
|
||||||
|
patch: RawAxiosRequestHeaders;
|
||||||
|
options?: RawAxiosRequestHeaders;
|
||||||
|
purge?: RawAxiosRequestHeaders;
|
||||||
|
link?: RawAxiosRequestHeaders;
|
||||||
|
unlink?: RawAxiosRequestHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosDefaults<D = any> extends Omit<AxiosRequestConfig<D>, 'headers'> {
|
||||||
|
headers: HeadersDefaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CreateAxiosDefaults<D = any> extends Omit<AxiosRequestConfig<D>, 'headers'> {
|
||||||
|
headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial<HeadersDefaults>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosResponse<T = any, D = any> {
|
||||||
|
data: T;
|
||||||
|
status: number;
|
||||||
|
statusText: string;
|
||||||
|
headers: RawAxiosResponseHeaders | AxiosResponseHeaders;
|
||||||
|
config: InternalAxiosRequestConfig<D>;
|
||||||
|
request?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
type AxiosPromise<T = any> = Promise<AxiosResponse<T>>;
|
||||||
|
|
||||||
|
interface CancelStatic {
|
||||||
|
new (message?: string): Cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Cancel {
|
||||||
|
message: string | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Canceler {
|
||||||
|
(message?: string, config?: AxiosRequestConfig, request?: any): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CancelTokenStatic {
|
||||||
|
new (executor: (cancel: Canceler) => void): CancelToken;
|
||||||
|
source(): CancelTokenSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CancelToken {
|
||||||
|
promise: Promise<Cancel>;
|
||||||
|
reason?: Cancel;
|
||||||
|
throwIfRequested(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CancelTokenSource {
|
||||||
|
token: CancelToken;
|
||||||
|
cancel: Canceler;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosInterceptorOptions {
|
||||||
|
synchronous?: boolean;
|
||||||
|
runWhen?: (config: InternalAxiosRequestConfig) => boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosInterceptorManager<V> {
|
||||||
|
use(onFulfilled?: (value: V) => V | Promise<V>, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions): number;
|
||||||
|
eject(id: number): void;
|
||||||
|
clear(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosInstance extends Axios {
|
||||||
|
<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
|
||||||
|
defaults: Omit<AxiosDefaults, 'headers'> & {
|
||||||
|
headers: HeadersDefaults & {
|
||||||
|
[key: string]: AxiosHeaderValue
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface GenericFormData {
|
||||||
|
append(name: string, value: any, options?: any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface GenericHTMLFormElement {
|
||||||
|
name: string;
|
||||||
|
method: string;
|
||||||
|
submit(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AxiosStatic extends AxiosInstance {
|
||||||
|
create(config?: CreateAxiosDefaults): AxiosInstance;
|
||||||
|
Cancel: CancelStatic;
|
||||||
|
CancelToken: CancelTokenStatic;
|
||||||
|
Axios: typeof Axios;
|
||||||
|
AxiosError: typeof AxiosError;
|
||||||
|
CanceledError: typeof CanceledError;
|
||||||
|
HttpStatusCode: typeof HttpStatusCode;
|
||||||
|
readonly VERSION: string;
|
||||||
|
isCancel(value: any): value is Cancel;
|
||||||
|
all<T>(values: Array<T | Promise<T>>): Promise<T[]>;
|
||||||
|
spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
|
||||||
|
isAxiosError<T = any, D = any>(payload: any): payload is AxiosError<T, D>;
|
||||||
|
toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData;
|
||||||
|
formToJSON(form: GenericFormData|GenericHTMLFormElement): object;
|
||||||
|
getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter;
|
||||||
|
AxiosHeaders: typeof AxiosHeaders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const axios: axios.AxiosStatic;
|
||||||
|
|
||||||
|
export = axios;
|
559
pkg/axios/index.d.ts
vendored
Normal file
559
pkg/axios/index.d.ts
vendored
Normal file
@ -0,0 +1,559 @@
|
|||||||
|
// TypeScript Version: 4.7
|
||||||
|
export type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null;
|
||||||
|
|
||||||
|
interface RawAxiosHeaders {
|
||||||
|
[key: string]: AxiosHeaderValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
type MethodsHeaders = Partial<{
|
||||||
|
[Key in Method as Lowercase<Key>]: AxiosHeaders;
|
||||||
|
} & {common: AxiosHeaders}>;
|
||||||
|
|
||||||
|
type AxiosHeaderMatcher = string | RegExp | ((this: AxiosHeaders, value: string, name: string) => boolean);
|
||||||
|
|
||||||
|
type AxiosHeaderParser = (this: AxiosHeaders, value: AxiosHeaderValue, header: string) => any;
|
||||||
|
|
||||||
|
export class AxiosHeaders {
|
||||||
|
constructor(
|
||||||
|
headers?: RawAxiosHeaders | AxiosHeaders | string
|
||||||
|
);
|
||||||
|
|
||||||
|
[key: string]: any;
|
||||||
|
|
||||||
|
set(headerName?: string, value?: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean): AxiosHeaders;
|
||||||
|
|
||||||
|
get(headerName: string, parser: RegExp): RegExpExecArray | null;
|
||||||
|
get(headerName: string, matcher?: true | AxiosHeaderParser): AxiosHeaderValue;
|
||||||
|
|
||||||
|
has(header: string, matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
clear(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
normalize(format: boolean): AxiosHeaders;
|
||||||
|
|
||||||
|
concat(...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>): AxiosHeaders;
|
||||||
|
|
||||||
|
toJSON(asStrings?: boolean): RawAxiosHeaders;
|
||||||
|
|
||||||
|
static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
|
||||||
|
|
||||||
|
static accessor(header: string | string[]): AxiosHeaders;
|
||||||
|
|
||||||
|
static concat(...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>): AxiosHeaders;
|
||||||
|
|
||||||
|
setContentType(value: ContentType, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getContentType(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getContentType(matcher?: AxiosHeaderMatcher): AxiosHeaderValue;
|
||||||
|
hasContentType(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setContentLength(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getContentLength(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getContentLength(matcher?: AxiosHeaderMatcher): AxiosHeaderValue;
|
||||||
|
hasContentLength(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setAccept(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getAccept(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getAccept(matcher?: AxiosHeaderMatcher): AxiosHeaderValue;
|
||||||
|
hasAccept(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setUserAgent(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getUserAgent(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getUserAgent(matcher?: AxiosHeaderMatcher): AxiosHeaderValue;
|
||||||
|
hasUserAgent(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setContentEncoding(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getContentEncoding(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getContentEncoding(matcher?: AxiosHeaderMatcher): AxiosHeaderValue;
|
||||||
|
hasContentEncoding(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
setAuthorization(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
|
||||||
|
getAuthorization(parser?: RegExp): RegExpExecArray | null;
|
||||||
|
getAuthorization(matcher?: AxiosHeaderMatcher): AxiosHeaderValue;
|
||||||
|
hasAuthorization(matcher?: AxiosHeaderMatcher): boolean;
|
||||||
|
|
||||||
|
[Symbol.iterator](): IterableIterator<[string, AxiosHeaderValue]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
type CommonRequestHeadersList = 'Accept' | 'Content-Length' | 'User-Agent' | 'Content-Encoding' | 'Authorization';
|
||||||
|
|
||||||
|
type ContentType = AxiosHeaderValue | 'text/html' | 'text/plain' | 'multipart/form-data' | 'application/json' | 'application/x-www-form-urlencoded' | 'application/octet-stream';
|
||||||
|
|
||||||
|
export type RawAxiosRequestHeaders = Partial<RawAxiosHeaders & {
|
||||||
|
[Key in CommonRequestHeadersList]: AxiosHeaderValue;
|
||||||
|
} & {
|
||||||
|
'Content-Type': ContentType
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders;
|
||||||
|
|
||||||
|
type CommonResponseHeadersList = 'Server' | 'Content-Type' | 'Content-Length' | 'Cache-Control'| 'Content-Encoding';
|
||||||
|
|
||||||
|
type RawCommonResponseHeaders = {
|
||||||
|
[Key in CommonResponseHeadersList]: AxiosHeaderValue;
|
||||||
|
} & {
|
||||||
|
"set-cookie": string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export type RawAxiosResponseHeaders = Partial<RawAxiosHeaders & RawCommonResponseHeaders>;
|
||||||
|
|
||||||
|
export type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders;
|
||||||
|
|
||||||
|
export interface AxiosRequestTransformer {
|
||||||
|
(this: InternalAxiosRequestConfig, data: any, headers: AxiosRequestHeaders): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosResponseTransformer {
|
||||||
|
(this: InternalAxiosRequestConfig, data: any, headers: AxiosResponseHeaders, status?: number): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosAdapter {
|
||||||
|
(config: InternalAxiosRequestConfig): AxiosPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosBasicCredentials {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosProxyConfig {
|
||||||
|
host: string;
|
||||||
|
port: number;
|
||||||
|
auth?: AxiosBasicCredentials;
|
||||||
|
protocol?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum HttpStatusCode {
|
||||||
|
Continue = 100,
|
||||||
|
SwitchingProtocols = 101,
|
||||||
|
Processing = 102,
|
||||||
|
EarlyHints = 103,
|
||||||
|
Ok = 200,
|
||||||
|
Created = 201,
|
||||||
|
Accepted = 202,
|
||||||
|
NonAuthoritativeInformation = 203,
|
||||||
|
NoContent = 204,
|
||||||
|
ResetContent = 205,
|
||||||
|
PartialContent = 206,
|
||||||
|
MultiStatus = 207,
|
||||||
|
AlreadyReported = 208,
|
||||||
|
ImUsed = 226,
|
||||||
|
MultipleChoices = 300,
|
||||||
|
MovedPermanently = 301,
|
||||||
|
Found = 302,
|
||||||
|
SeeOther = 303,
|
||||||
|
NotModified = 304,
|
||||||
|
UseProxy = 305,
|
||||||
|
Unused = 306,
|
||||||
|
TemporaryRedirect = 307,
|
||||||
|
PermanentRedirect = 308,
|
||||||
|
BadRequest = 400,
|
||||||
|
Unauthorized = 401,
|
||||||
|
PaymentRequired = 402,
|
||||||
|
Forbidden = 403,
|
||||||
|
NotFound = 404,
|
||||||
|
MethodNotAllowed = 405,
|
||||||
|
NotAcceptable = 406,
|
||||||
|
ProxyAuthenticationRequired = 407,
|
||||||
|
RequestTimeout = 408,
|
||||||
|
Conflict = 409,
|
||||||
|
Gone = 410,
|
||||||
|
LengthRequired = 411,
|
||||||
|
PreconditionFailed = 412,
|
||||||
|
PayloadTooLarge = 413,
|
||||||
|
UriTooLong = 414,
|
||||||
|
UnsupportedMediaType = 415,
|
||||||
|
RangeNotSatisfiable = 416,
|
||||||
|
ExpectationFailed = 417,
|
||||||
|
ImATeapot = 418,
|
||||||
|
MisdirectedRequest = 421,
|
||||||
|
UnprocessableEntity = 422,
|
||||||
|
Locked = 423,
|
||||||
|
FailedDependency = 424,
|
||||||
|
TooEarly = 425,
|
||||||
|
UpgradeRequired = 426,
|
||||||
|
PreconditionRequired = 428,
|
||||||
|
TooManyRequests = 429,
|
||||||
|
RequestHeaderFieldsTooLarge = 431,
|
||||||
|
UnavailableForLegalReasons = 451,
|
||||||
|
InternalServerError = 500,
|
||||||
|
NotImplemented = 501,
|
||||||
|
BadGateway = 502,
|
||||||
|
ServiceUnavailable = 503,
|
||||||
|
GatewayTimeout = 504,
|
||||||
|
HttpVersionNotSupported = 505,
|
||||||
|
VariantAlsoNegotiates = 506,
|
||||||
|
InsufficientStorage = 507,
|
||||||
|
LoopDetected = 508,
|
||||||
|
NotExtended = 510,
|
||||||
|
NetworkAuthenticationRequired = 511,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Method =
|
||||||
|
| 'get' | 'GET'
|
||||||
|
| 'delete' | 'DELETE'
|
||||||
|
| 'head' | 'HEAD'
|
||||||
|
| 'options' | 'OPTIONS'
|
||||||
|
| 'post' | 'POST'
|
||||||
|
| 'put' | 'PUT'
|
||||||
|
| 'patch' | 'PATCH'
|
||||||
|
| 'purge' | 'PURGE'
|
||||||
|
| 'link' | 'LINK'
|
||||||
|
| 'unlink' | 'UNLINK';
|
||||||
|
|
||||||
|
export type ResponseType =
|
||||||
|
| 'arraybuffer'
|
||||||
|
| 'blob'
|
||||||
|
| 'document'
|
||||||
|
| 'json'
|
||||||
|
| 'text'
|
||||||
|
| 'stream';
|
||||||
|
|
||||||
|
export type responseEncoding =
|
||||||
|
| 'ascii' | 'ASCII'
|
||||||
|
| 'ansi' | 'ANSI'
|
||||||
|
| 'binary' | 'BINARY'
|
||||||
|
| 'base64' | 'BASE64'
|
||||||
|
| 'base64url' | 'BASE64URL'
|
||||||
|
| 'hex' | 'HEX'
|
||||||
|
| 'latin1' | 'LATIN1'
|
||||||
|
| 'ucs-2' | 'UCS-2'
|
||||||
|
| 'ucs2' | 'UCS2'
|
||||||
|
| 'utf-8' | 'UTF-8'
|
||||||
|
| 'utf8' | 'UTF8'
|
||||||
|
| 'utf16le' | 'UTF16LE';
|
||||||
|
|
||||||
|
export interface TransitionalOptions {
|
||||||
|
silentJSONParsing?: boolean;
|
||||||
|
forcedJSONParsing?: boolean;
|
||||||
|
clarifyTimeoutError?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GenericAbortSignal {
|
||||||
|
readonly aborted: boolean;
|
||||||
|
onabort?: ((...args: any) => any) | null;
|
||||||
|
addEventListener?: (...args: any) => any;
|
||||||
|
removeEventListener?: (...args: any) => any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FormDataVisitorHelpers {
|
||||||
|
defaultVisitor: SerializerVisitor;
|
||||||
|
convertValue: (value: any) => any;
|
||||||
|
isVisitable: (value: any) => boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SerializerVisitor {
|
||||||
|
(
|
||||||
|
this: GenericFormData,
|
||||||
|
value: any,
|
||||||
|
key: string | number,
|
||||||
|
path: null | Array<string | number>,
|
||||||
|
helpers: FormDataVisitorHelpers
|
||||||
|
): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SerializerOptions {
|
||||||
|
visitor?: SerializerVisitor;
|
||||||
|
dots?: boolean;
|
||||||
|
metaTokens?: boolean;
|
||||||
|
indexes?: boolean | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// tslint:disable-next-line
|
||||||
|
export interface FormSerializerOptions extends SerializerOptions {
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ParamEncoder {
|
||||||
|
(value: any, defaultEncoder: (value: any) => any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CustomParamsSerializer {
|
||||||
|
(params: Record<string, any>, options?: ParamsSerializerOptions): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ParamsSerializerOptions extends SerializerOptions {
|
||||||
|
encode?: ParamEncoder;
|
||||||
|
serialize?: CustomParamsSerializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
type MaxUploadRate = number;
|
||||||
|
|
||||||
|
type MaxDownloadRate = number;
|
||||||
|
|
||||||
|
type BrowserProgressEvent = any;
|
||||||
|
|
||||||
|
export interface AxiosProgressEvent {
|
||||||
|
loaded: number;
|
||||||
|
total?: number;
|
||||||
|
progress?: number;
|
||||||
|
bytes: number;
|
||||||
|
rate?: number;
|
||||||
|
estimated?: number;
|
||||||
|
upload?: boolean;
|
||||||
|
download?: boolean;
|
||||||
|
event?: BrowserProgressEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
type Milliseconds = number;
|
||||||
|
|
||||||
|
type AxiosAdapterName = 'xhr' | 'http' | string;
|
||||||
|
|
||||||
|
type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName;
|
||||||
|
|
||||||
|
export type AddressFamily = 4 | 6 | undefined;
|
||||||
|
|
||||||
|
export interface LookupAddressEntry {
|
||||||
|
address: string;
|
||||||
|
family?: AddressFamily;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type LookupAddress = string | LookupAddressEntry;
|
||||||
|
|
||||||
|
export interface AxiosRequestConfig<D = any> {
|
||||||
|
url?: string;
|
||||||
|
method?: Method | string;
|
||||||
|
baseURL?: string;
|
||||||
|
transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[];
|
||||||
|
transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[];
|
||||||
|
headers?: (RawAxiosRequestHeaders & MethodsHeaders) | AxiosHeaders;
|
||||||
|
params?: any;
|
||||||
|
paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer;
|
||||||
|
data?: D;
|
||||||
|
timeout?: Milliseconds;
|
||||||
|
timeoutErrorMessage?: string;
|
||||||
|
withCredentials?: boolean;
|
||||||
|
adapter?: AxiosAdapterConfig | AxiosAdapterConfig[];
|
||||||
|
auth?: AxiosBasicCredentials;
|
||||||
|
responseType?: ResponseType;
|
||||||
|
responseEncoding?: responseEncoding | string;
|
||||||
|
xsrfCookieName?: string;
|
||||||
|
xsrfHeaderName?: string;
|
||||||
|
onUploadProgress?: (progressEvent: AxiosProgressEvent) => void;
|
||||||
|
onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void;
|
||||||
|
maxContentLength?: number;
|
||||||
|
validateStatus?: ((status: number) => boolean) | null;
|
||||||
|
maxBodyLength?: number;
|
||||||
|
maxRedirects?: number;
|
||||||
|
maxRate?: number | [MaxUploadRate, MaxDownloadRate];
|
||||||
|
beforeRedirect?: (options: Record<string, any>, responseDetails: { headers: Record<string, string> }) => void;
|
||||||
|
socketPath?: string | null;
|
||||||
|
transport?: any;
|
||||||
|
httpAgent?: any;
|
||||||
|
httpsAgent?: any;
|
||||||
|
proxy?: AxiosProxyConfig | false;
|
||||||
|
cancelToken?: CancelToken;
|
||||||
|
decompress?: boolean;
|
||||||
|
transitional?: TransitionalOptions;
|
||||||
|
signal?: GenericAbortSignal;
|
||||||
|
insecureHTTPParser?: boolean;
|
||||||
|
env?: {
|
||||||
|
FormData?: new (...args: any[]) => object;
|
||||||
|
};
|
||||||
|
formSerializer?: FormSerializerOptions;
|
||||||
|
family?: AddressFamily;
|
||||||
|
lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: LookupAddress | LookupAddress[], family?: AddressFamily) => void) => void) |
|
||||||
|
((hostname: string, options: object) => Promise<[address: LookupAddressEntry | LookupAddressEntry[], family?: AddressFamily] | LookupAddress>);
|
||||||
|
withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Alias
|
||||||
|
export type RawAxiosRequestConfig<D = any> = AxiosRequestConfig<D>;
|
||||||
|
|
||||||
|
export interface InternalAxiosRequestConfig<D = any> extends AxiosRequestConfig<D> {
|
||||||
|
headers: AxiosRequestHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HeadersDefaults {
|
||||||
|
common: RawAxiosRequestHeaders;
|
||||||
|
delete: RawAxiosRequestHeaders;
|
||||||
|
get: RawAxiosRequestHeaders;
|
||||||
|
head: RawAxiosRequestHeaders;
|
||||||
|
post: RawAxiosRequestHeaders;
|
||||||
|
put: RawAxiosRequestHeaders;
|
||||||
|
patch: RawAxiosRequestHeaders;
|
||||||
|
options?: RawAxiosRequestHeaders;
|
||||||
|
purge?: RawAxiosRequestHeaders;
|
||||||
|
link?: RawAxiosRequestHeaders;
|
||||||
|
unlink?: RawAxiosRequestHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosDefaults<D = any> extends Omit<AxiosRequestConfig<D>, 'headers'> {
|
||||||
|
headers: HeadersDefaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateAxiosDefaults<D = any> extends Omit<AxiosRequestConfig<D>, 'headers'> {
|
||||||
|
headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial<HeadersDefaults>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosResponse<T = any, D = any> {
|
||||||
|
data: T;
|
||||||
|
status: number;
|
||||||
|
statusText: string;
|
||||||
|
headers: RawAxiosResponseHeaders | AxiosResponseHeaders;
|
||||||
|
config: InternalAxiosRequestConfig<D>;
|
||||||
|
request?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AxiosError<T = unknown, D = any> extends Error {
|
||||||
|
constructor(
|
||||||
|
message?: string,
|
||||||
|
code?: string,
|
||||||
|
config?: InternalAxiosRequestConfig<D>,
|
||||||
|
request?: any,
|
||||||
|
response?: AxiosResponse<T, D>
|
||||||
|
);
|
||||||
|
|
||||||
|
config?: InternalAxiosRequestConfig<D>;
|
||||||
|
code?: string;
|
||||||
|
request?: any;
|
||||||
|
response?: AxiosResponse<T, D>;
|
||||||
|
isAxiosError: boolean;
|
||||||
|
status?: number;
|
||||||
|
toJSON: () => object;
|
||||||
|
cause?: Error;
|
||||||
|
static from<T = unknown, D = any>(
|
||||||
|
error: Error | unknown,
|
||||||
|
code?: string,
|
||||||
|
config?: InternalAxiosRequestConfig<D>,
|
||||||
|
request?: any,
|
||||||
|
response?: AxiosResponse<T, D>,
|
||||||
|
customProps?: object,
|
||||||
|
): AxiosError<T, D>;
|
||||||
|
static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS";
|
||||||
|
static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE";
|
||||||
|
static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION";
|
||||||
|
static readonly ERR_NETWORK = "ERR_NETWORK";
|
||||||
|
static readonly ERR_DEPRECATED = "ERR_DEPRECATED";
|
||||||
|
static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE";
|
||||||
|
static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST";
|
||||||
|
static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT";
|
||||||
|
static readonly ERR_INVALID_URL = "ERR_INVALID_URL";
|
||||||
|
static readonly ERR_CANCELED = "ERR_CANCELED";
|
||||||
|
static readonly ECONNABORTED = "ECONNABORTED";
|
||||||
|
static readonly ETIMEDOUT = "ETIMEDOUT";
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CanceledError<T> extends AxiosError<T> {
|
||||||
|
}
|
||||||
|
|
||||||
|
export type AxiosPromise<T = any> = Promise<AxiosResponse<T>>;
|
||||||
|
|
||||||
|
export interface CancelStatic {
|
||||||
|
new (message?: string): Cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Cancel {
|
||||||
|
message: string | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Canceler {
|
||||||
|
(message?: string, config?: AxiosRequestConfig, request?: any): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CancelTokenStatic {
|
||||||
|
new (executor: (cancel: Canceler) => void): CancelToken;
|
||||||
|
source(): CancelTokenSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CancelToken {
|
||||||
|
promise: Promise<Cancel>;
|
||||||
|
reason?: Cancel;
|
||||||
|
throwIfRequested(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CancelTokenSource {
|
||||||
|
token: CancelToken;
|
||||||
|
cancel: Canceler;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosInterceptorOptions {
|
||||||
|
synchronous?: boolean;
|
||||||
|
runWhen?: (config: InternalAxiosRequestConfig) => boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosInterceptorManager<V> {
|
||||||
|
use(onFulfilled?: ((value: V) => V | Promise<V>) | null, onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions): number;
|
||||||
|
eject(id: number): void;
|
||||||
|
clear(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Axios {
|
||||||
|
constructor(config?: AxiosRequestConfig);
|
||||||
|
defaults: AxiosDefaults;
|
||||||
|
interceptors: {
|
||||||
|
request: AxiosInterceptorManager<InternalAxiosRequestConfig>;
|
||||||
|
response: AxiosInterceptorManager<AxiosResponse>;
|
||||||
|
};
|
||||||
|
getUri(config?: AxiosRequestConfig): string;
|
||||||
|
request<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
head<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
options<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
patch<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
postForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
putForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
patchForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AxiosInstance extends Axios {
|
||||||
|
<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
|
||||||
|
|
||||||
|
defaults: Omit<AxiosDefaults, 'headers'> & {
|
||||||
|
headers: HeadersDefaults & {
|
||||||
|
[key: string]: AxiosHeaderValue
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GenericFormData {
|
||||||
|
append(name: string, value: any, options?: any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GenericHTMLFormElement {
|
||||||
|
name: string;
|
||||||
|
method: string;
|
||||||
|
submit(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter;
|
||||||
|
|
||||||
|
export function toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData;
|
||||||
|
|
||||||
|
export function formToJSON(form: GenericFormData|GenericHTMLFormElement): object;
|
||||||
|
|
||||||
|
export function isAxiosError<T = any, D = any>(payload: any): payload is AxiosError<T, D>;
|
||||||
|
|
||||||
|
export function spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
|
||||||
|
|
||||||
|
export function isCancel(value: any): value is Cancel;
|
||||||
|
|
||||||
|
export function all<T>(values: Array<T | Promise<T>>): Promise<T[]>;
|
||||||
|
|
||||||
|
export interface AxiosStatic extends AxiosInstance {
|
||||||
|
create(config?: CreateAxiosDefaults): AxiosInstance;
|
||||||
|
Cancel: CancelStatic;
|
||||||
|
CancelToken: CancelTokenStatic;
|
||||||
|
Axios: typeof Axios;
|
||||||
|
AxiosError: typeof AxiosError;
|
||||||
|
HttpStatusCode: typeof HttpStatusCode;
|
||||||
|
readonly VERSION: string;
|
||||||
|
isCancel: typeof isCancel;
|
||||||
|
all: typeof all;
|
||||||
|
spread: typeof spread;
|
||||||
|
isAxiosError: typeof isAxiosError;
|
||||||
|
toFormData: typeof toFormData;
|
||||||
|
formToJSON: typeof formToJSON;
|
||||||
|
getAdapter: typeof getAdapter;
|
||||||
|
CanceledError: typeof CanceledError;
|
||||||
|
AxiosHeaders: typeof AxiosHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const axios: AxiosStatic;
|
||||||
|
|
||||||
|
export default axios;
|
250
pkg/axios/karma.conf.cjs
Normal file
250
pkg/axios/karma.conf.cjs
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable no-unused-vars */
|
||||||
|
/* eslint-disable func-names */
|
||||||
|
// Karma configuration
|
||||||
|
// Generated on Fri Aug 15 2014 23:11:13 GMT-0500 (CDT)
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var resolve = require('@rollup/plugin-node-resolve').default;
|
||||||
|
var commonjs = require('@rollup/plugin-commonjs');
|
||||||
|
|
||||||
|
function createCustomLauncher(browser, version, platform) {
|
||||||
|
return {
|
||||||
|
base: 'SauceLabs',
|
||||||
|
browserName: browser,
|
||||||
|
version: version,
|
||||||
|
platform: platform
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = function(config) {
|
||||||
|
var customLaunchers = {};
|
||||||
|
var browsers = process.env.Browsers && process.env.Browsers.split(',');
|
||||||
|
var sauceLabs;
|
||||||
|
|
||||||
|
if (process.env.SAUCE_USERNAME || process.env.SAUCE_ACCESS_KEY) {
|
||||||
|
customLaunchers = {};
|
||||||
|
|
||||||
|
var runAll = true;
|
||||||
|
var options = [
|
||||||
|
'SAUCE_CHROME',
|
||||||
|
'SAUCE_FIREFOX',
|
||||||
|
'SAUCE_SAFARI',
|
||||||
|
'SAUCE_OPERA',
|
||||||
|
'SAUCE_IE',
|
||||||
|
'SAUCE_EDGE',
|
||||||
|
'SAUCE_IOS',
|
||||||
|
'SAUCE_ANDROID'
|
||||||
|
];
|
||||||
|
|
||||||
|
options.forEach(function(opt) {
|
||||||
|
if (process.env[opt]) {
|
||||||
|
runAll = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Chrome
|
||||||
|
if (runAll || process.env.SAUCE_CHROME) {
|
||||||
|
customLaunchers.SL_Chrome = createCustomLauncher('chrome');
|
||||||
|
// customLaunchers.SL_ChromeDev = createCustomLauncher('chrome', 'dev');
|
||||||
|
// customLaunchers.SL_ChromeBeta = createCustomLauncher('chrome', 'beta');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Firefox
|
||||||
|
if (runAll || process.env.SAUCE_FIREFOX) {
|
||||||
|
//customLaunchers.SL_Firefox = createCustomLauncher('firefox');
|
||||||
|
// customLaunchers.SL_FirefoxDev = createCustomLauncher('firefox', 'dev');
|
||||||
|
// customLaunchers.SL_FirefoxBeta = createCustomLauncher('firefox', 'beta');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Safari
|
||||||
|
if (runAll || process.env.SAUCE_SAFARI) {
|
||||||
|
// customLaunchers.SL_Safari7 = createCustomLauncher('safari', 7);
|
||||||
|
// customLaunchers.SL_Safari8 = createCustomLauncher('safari', 8);
|
||||||
|
customLaunchers.SL_Safari9 = createCustomLauncher(
|
||||||
|
'safari',
|
||||||
|
9.0,
|
||||||
|
'OS X 10.11'
|
||||||
|
);
|
||||||
|
customLaunchers.SL_Safari10 = createCustomLauncher(
|
||||||
|
'safari',
|
||||||
|
'10.1',
|
||||||
|
'macOS 10.12'
|
||||||
|
);
|
||||||
|
customLaunchers.SL_Safari11 = createCustomLauncher(
|
||||||
|
'safari',
|
||||||
|
'11.1',
|
||||||
|
'macOS 10.13'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Opera
|
||||||
|
if (runAll || process.env.SAUCE_OPERA) {
|
||||||
|
// TODO The available versions of Opera are too old and lack basic APIs
|
||||||
|
// customLaunchers.SL_Opera11 = createCustomLauncher('opera', 11, 'Windows XP');
|
||||||
|
// customLaunchers.SL_Opera12 = createCustomLauncher('opera', 12, 'Windows 7');
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE
|
||||||
|
if (runAll || process.env.SAUCE_IE) {
|
||||||
|
customLaunchers.SL_IE11 = createCustomLauncher('internet explorer', 11, 'Windows 8.1');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edge
|
||||||
|
if (runAll || process.env.SAUCE_EDGE) {
|
||||||
|
customLaunchers.SL_Edge = createCustomLauncher('microsoftedge', null, 'Windows 10');
|
||||||
|
}
|
||||||
|
|
||||||
|
// IOS
|
||||||
|
if (runAll || process.env.SAUCE_IOS) {
|
||||||
|
// TODO IOS7 capture always timesout
|
||||||
|
// customLaunchers.SL_IOS7 = createCustomLauncher('iphone', '7.1', 'OS X 10.10');
|
||||||
|
// TODO Mobile browsers are causing failures, possibly from too many concurrent VMs
|
||||||
|
// customLaunchers.SL_IOS8 = createCustomLauncher('iphone', '8.4', 'OS X 10.10');
|
||||||
|
// customLaunchers.SL_IOS9 = createCustomLauncher('iphone', '9.2', 'OS X 10.10');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Android
|
||||||
|
if (runAll || process.env.SAUCE_ANDROID) {
|
||||||
|
// TODO Mobile browsers are causing failures, possibly from too many concurrent VMs
|
||||||
|
// customLaunchers.SL_Android4 = createCustomLauncher('android', '4.4', 'Linux');
|
||||||
|
// customLaunchers.SL_Android5 = createCustomLauncher('android', '5.1', 'Linux');
|
||||||
|
}
|
||||||
|
|
||||||
|
browsers = Object.keys(customLaunchers);
|
||||||
|
|
||||||
|
sauceLabs = {
|
||||||
|
recordScreenshots: false,
|
||||||
|
connectOptions: {
|
||||||
|
// port: 5757,
|
||||||
|
logfile: 'sauce_connect.log'
|
||||||
|
},
|
||||||
|
public: 'public'
|
||||||
|
};
|
||||||
|
} else if (process.env.TRAVIS_PULL_REQUEST && process.env.TRAVIS_PULL_REQUEST !== 'false') {
|
||||||
|
console.log(
|
||||||
|
'Cannot run on Sauce Labs as encrypted environment variables are not available to PRs. ' +
|
||||||
|
'Running on Travis.'
|
||||||
|
);
|
||||||
|
browsers = ['Firefox'];
|
||||||
|
} else if (process.env.GITHUB_ACTIONS === 'true') {
|
||||||
|
console.log('Running ci on GitHub Actions.');
|
||||||
|
browsers = ['FirefoxHeadless', 'ChromeHeadless'];
|
||||||
|
} else {
|
||||||
|
browsers = browsers || ['Chrome'];
|
||||||
|
console.log(`Running ${browsers} locally since SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are not set.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
config.set({
|
||||||
|
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||||
|
basePath: '',
|
||||||
|
|
||||||
|
|
||||||
|
// frameworks to use
|
||||||
|
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||||
|
frameworks: ['jasmine-ajax', 'jasmine', 'sinon'],
|
||||||
|
|
||||||
|
|
||||||
|
// list of files / patterns to load in the browser
|
||||||
|
files: [
|
||||||
|
{pattern: 'test/specs/__helpers.js', watched: false},
|
||||||
|
{pattern: 'test/specs/**/*.spec.js', watched: false}
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
// list of files to exclude
|
||||||
|
exclude: [],
|
||||||
|
|
||||||
|
|
||||||
|
// preprocess matching files before serving them to the browser
|
||||||
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
||||||
|
preprocessors: {
|
||||||
|
'test/specs/__helpers.js': ['rollup'],
|
||||||
|
'test/specs/**/*.spec.js': ['rollup']
|
||||||
|
},
|
||||||
|
|
||||||
|
rollupPreprocessor: {
|
||||||
|
plugins: [
|
||||||
|
resolve({browser: true}),
|
||||||
|
commonjs()
|
||||||
|
],
|
||||||
|
output: {
|
||||||
|
format: 'iife',
|
||||||
|
name: '_axios',
|
||||||
|
sourcemap: 'inline'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// test results reporter to use
|
||||||
|
// possible values: 'dots', 'progress'
|
||||||
|
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||||
|
// Disable code coverage, as it's breaking CI:
|
||||||
|
// reporters: ['dots', 'coverage', 'saucelabs'],
|
||||||
|
reporters: ['progress'],
|
||||||
|
|
||||||
|
|
||||||
|
// web server port
|
||||||
|
port: 9876,
|
||||||
|
|
||||||
|
|
||||||
|
// Increase timeouts to prevent the issue with disconnected tests (https://goo.gl/nstA69)
|
||||||
|
captureTimeout: 4 * 60 * 1000,
|
||||||
|
browserDisconnectTimeout: 10000,
|
||||||
|
browserDisconnectTolerance: 1,
|
||||||
|
browserNoActivityTimeout: 4 * 60 * 1000,
|
||||||
|
|
||||||
|
|
||||||
|
// enable / disable colors in the output (reporters and logs)
|
||||||
|
colors: true,
|
||||||
|
|
||||||
|
|
||||||
|
// level of logging
|
||||||
|
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
|
||||||
|
|
||||||
|
// enable / disable watching file and executing tests whenever any file changes
|
||||||
|
autoWatch: false,
|
||||||
|
|
||||||
|
|
||||||
|
// start these browsers
|
||||||
|
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||||
|
browsers: browsers,
|
||||||
|
|
||||||
|
|
||||||
|
// Continuous Integration mode
|
||||||
|
// if true, Karma captures browsers, runs the tests and exits
|
||||||
|
singleRun: false,
|
||||||
|
|
||||||
|
// Webpack config
|
||||||
|
webpack: {
|
||||||
|
mode: 'development',
|
||||||
|
cache: true,
|
||||||
|
devtool: 'inline-source-map',
|
||||||
|
externals: [
|
||||||
|
{
|
||||||
|
'./adapters/http': 'var undefined'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
webpackServer: {
|
||||||
|
stats: {
|
||||||
|
colors: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// Coverage reporting
|
||||||
|
coverageReporter: {
|
||||||
|
type: 'lcov',
|
||||||
|
dir: 'coverage/',
|
||||||
|
subdir: '.'
|
||||||
|
},
|
||||||
|
|
||||||
|
sauceLabs: sauceLabs,
|
||||||
|
customLaunchers: customLaunchers
|
||||||
|
});
|
||||||
|
};
|
43072
pkg/axios/package-lock.json
generated
Normal file
43072
pkg/axios/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
117
pkg/axios/rollup.config.js
Normal file
117
pkg/axios/rollup.config.js
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
import resolve from '@rollup/plugin-node-resolve';
|
||||||
|
import commonjs from '@rollup/plugin-commonjs';
|
||||||
|
import {terser} from "rollup-plugin-terser";
|
||||||
|
import json from '@rollup/plugin-json';
|
||||||
|
import { babel } from '@rollup/plugin-babel';
|
||||||
|
import autoExternal from 'rollup-plugin-auto-external';
|
||||||
|
import bundleSize from 'rollup-plugin-bundle-size'
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
const lib = require("./package.json");
|
||||||
|
const outputFileName = 'axios';
|
||||||
|
const name = "axios";
|
||||||
|
const namedInput = './index.js';
|
||||||
|
const defaultInput = './lib/axios.js';
|
||||||
|
|
||||||
|
const buildConfig = ({es5, browser = true, minifiedVersion = true, ...config}) => {
|
||||||
|
const {file} = config.output;
|
||||||
|
const ext = path.extname(file);
|
||||||
|
const basename = path.basename(file, ext);
|
||||||
|
const extArr = ext.split('.');
|
||||||
|
extArr.shift();
|
||||||
|
|
||||||
|
|
||||||
|
const build = ({minified}) => ({
|
||||||
|
input: namedInput,
|
||||||
|
...config,
|
||||||
|
output: {
|
||||||
|
...config.output,
|
||||||
|
file: `${path.dirname(file)}/${basename}.${(minified ? ['min', ...extArr] : extArr).join('.')}`
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
json(),
|
||||||
|
resolve({browser}),
|
||||||
|
commonjs(),
|
||||||
|
minified && terser(),
|
||||||
|
minified && bundleSize(),
|
||||||
|
...(es5 ? [babel({
|
||||||
|
babelHelpers: 'bundled',
|
||||||
|
presets: ['@babel/preset-env']
|
||||||
|
})] : []),
|
||||||
|
...(config.plugins || []),
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const configs = [
|
||||||
|
build({minified: false}),
|
||||||
|
];
|
||||||
|
|
||||||
|
if (minifiedVersion) {
|
||||||
|
configs.push(build({minified: true}))
|
||||||
|
}
|
||||||
|
|
||||||
|
return configs;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async () => {
|
||||||
|
const year = new Date().getFullYear();
|
||||||
|
const banner = `// Axios v${lib.version} Copyright (c) ${year} ${lib.author} and contributors`;
|
||||||
|
|
||||||
|
return [
|
||||||
|
// browser ESM bundle for CDN
|
||||||
|
...buildConfig({
|
||||||
|
input: namedInput,
|
||||||
|
output: {
|
||||||
|
file: `dist/esm/${outputFileName}.js`,
|
||||||
|
format: "esm",
|
||||||
|
preferConst: true,
|
||||||
|
exports: "named",
|
||||||
|
banner
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
// Browser UMD bundle for CDN
|
||||||
|
...buildConfig({
|
||||||
|
input: defaultInput,
|
||||||
|
es5: true,
|
||||||
|
output: {
|
||||||
|
file: `dist/${outputFileName}.js`,
|
||||||
|
name,
|
||||||
|
format: "umd",
|
||||||
|
exports: "default",
|
||||||
|
banner
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
// Browser CJS bundle
|
||||||
|
...buildConfig({
|
||||||
|
input: defaultInput,
|
||||||
|
es5: false,
|
||||||
|
minifiedVersion: false,
|
||||||
|
output: {
|
||||||
|
file: `dist/browser/${name}.cjs`,
|
||||||
|
name,
|
||||||
|
format: "cjs",
|
||||||
|
exports: "default",
|
||||||
|
banner
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
// Node.js commonjs bundle
|
||||||
|
{
|
||||||
|
input: defaultInput,
|
||||||
|
output: {
|
||||||
|
file: `dist/node/${name}.cjs`,
|
||||||
|
format: "cjs",
|
||||||
|
preferConst: true,
|
||||||
|
exports: "default",
|
||||||
|
banner
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
autoExternal(),
|
||||||
|
resolve(),
|
||||||
|
commonjs()
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
13
pkg/axios/templates/contributors.hbs
Normal file
13
pkg/axios/templates/contributors.hbs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{{#if authors}}
|
||||||
|
### Contributors to this release
|
||||||
|
|
||||||
|
{{#each authors}}
|
||||||
|
{{#unless isBot}}
|
||||||
|
{{#if login}}
|
||||||
|
- {{#if avatar_url}}<img src="{{avatar_url_sm}}" alt="avatar" width="18"/>{{/if}} [{{displayName}}]({{html_url}} "+{{insertions}}/-{{deletions}} ({{#each prs}}#{{this}} {{/each}})")
|
||||||
|
{{else}}
|
||||||
|
- {{displayName}}
|
||||||
|
{{/if}}
|
||||||
|
{{/unless}}
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
10
pkg/axios/templates/pr.hbs
Normal file
10
pkg/axios/templates/pr.hbs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{{#if files}}
|
||||||
|
### Build info
|
||||||
|
|
||||||
|
{{#each files}}
|
||||||
|
- {{ name}} ({{ path }}) {{ filesize size }} (**{{ filesize gzip }}** gzipped)
|
||||||
|
{{#each commits}}
|
||||||
|
- {{ tag }} - {{filesize size}}
|
||||||
|
{{/each}}
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
1
pkg/axios/templates/pr_published.hbs
Normal file
1
pkg/axios/templates/pr_published.hbs
Normal file
@ -0,0 +1 @@
|
|||||||
|
Hi, @{{ author.login }}! This PR has been published in [{{ release.tag }}]({{ release.url }}) release. Thank you for your contribution ❤️!
|
13
pkg/axios/templates/prs.hbs
Normal file
13
pkg/axios/templates/prs.hbs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{{#if prs}}
|
||||||
|
### PRs
|
||||||
|
{{#each prs}}
|
||||||
|
- {{title}} ( [#{{number}}]({{pull_request.url}}) ){{#if isHot}} 🔥{{/if}}{{#if isHot}} 🚀{{/if}}
|
||||||
|
{{#if messages}}
|
||||||
|
{{#each messages}}
|
||||||
|
```
|
||||||
|
{{this}}
|
||||||
|
```
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
9
pkg/axios/tsconfig.json
Normal file
9
pkg/axios/tsconfig.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "node16",
|
||||||
|
"lib": ["dom", "es2015"],
|
||||||
|
"types": [],
|
||||||
|
"strict": true,
|
||||||
|
"noEmit": true
|
||||||
|
}
|
||||||
|
}
|
11
pkg/axios/tslint.json
Normal file
11
pkg/axios/tslint.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extends": "dtslint/dtslint.json",
|
||||||
|
"rules": {
|
||||||
|
"no-unnecessary-generics": false
|
||||||
|
},
|
||||||
|
"linterOptions": {
|
||||||
|
"exclude": [
|
||||||
|
"test/module/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
27
pkg/jquery-mousewheel/.bower.json
Normal file
27
pkg/jquery-mousewheel/.bower.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "jquery-mousewheel",
|
||||||
|
"version": "3.1.13",
|
||||||
|
"main": "./jquery.mousewheel.js",
|
||||||
|
"ignore": [
|
||||||
|
"*.json",
|
||||||
|
"*.markdown",
|
||||||
|
"*.txt",
|
||||||
|
".*",
|
||||||
|
"!LICENSE.txt",
|
||||||
|
"Gruntfile.js",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"jquery": ">=1.2.2"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/jquery/jquery-mousewheel",
|
||||||
|
"_release": "3.1.13",
|
||||||
|
"_resolution": {
|
||||||
|
"type": "version",
|
||||||
|
"tag": "3.1.13",
|
||||||
|
"commit": "67289b6b2aa0066d7d78a5807f520387135ffb22"
|
||||||
|
},
|
||||||
|
"_source": "https://github.com/jquery/jquery-mousewheel.git",
|
||||||
|
"_target": ">=3.0.6",
|
||||||
|
"_originalSource": "jquery-mousewheel"
|
||||||
|
}
|
147
pkg/jquery-mousewheel/ChangeLog.md
Normal file
147
pkg/jquery-mousewheel/ChangeLog.md
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
# Mouse Wheel ChangeLog
|
||||||
|
|
||||||
|
## 3.1.13
|
||||||
|
|
||||||
|
* Update copyright notice and license to remove years
|
||||||
|
* Create the correct compressed version
|
||||||
|
* Remove the obsolete jQuery Plugin Registry file
|
||||||
|
|
||||||
|
## 3.1.12
|
||||||
|
|
||||||
|
* Fix possible 0 value for line height when in delta mode 1
|
||||||
|
|
||||||
|
## 3.1.11
|
||||||
|
|
||||||
|
* Fix version number for package managers...
|
||||||
|
|
||||||
|
## 3.1.10
|
||||||
|
|
||||||
|
* Fix issue with calculating line height when using older versions of jQuery
|
||||||
|
* Add offsetX/Y normalization with setting to turn it off
|
||||||
|
* Cleans up data on teardown
|
||||||
|
|
||||||
|
## 3.1.9
|
||||||
|
|
||||||
|
* Fix bower.json file
|
||||||
|
* Updated how the deltas are adjusted for older mousewheel based events that have deltas that are factors of 120.
|
||||||
|
* Add $.event.special.mousewheel.settings.adjustOldDeltas (defaults to true) to turn off adjusting of old deltas that are factors of 120. You'd turn this off if you want to be as close to native scrolling as possible.
|
||||||
|
|
||||||
|
## 3.1.8
|
||||||
|
|
||||||
|
* Even better handling of older browsers that use a wheelDelta based on 120
|
||||||
|
* And fix version reported by `$.event.special.mousewheel`
|
||||||
|
|
||||||
|
## 3.1.7
|
||||||
|
|
||||||
|
* Better handle the `deltaMode` values 1 (lines) and 2 (pages)
|
||||||
|
* Attempt to better handle older browsers that use a wheelDelta based on 120
|
||||||
|
|
||||||
|
## 3.1.6
|
||||||
|
|
||||||
|
* Deprecating `delta`, `deltaX`, and `deltaY` event handler arguments
|
||||||
|
* Update actual event object with normalized `deltaX `and `deltaY` values (`event.deltaX`, `event.deltaY`)
|
||||||
|
* Add `deltaFactor` to the event object (`event.deltaFactor`)
|
||||||
|
* Handle `> 0` but `< 1` deltas better
|
||||||
|
* Do not fire the event if `deltaX` and `deltaY` are `0`
|
||||||
|
* Better handle different devices that give different `lowestDelta` values
|
||||||
|
* Add `$.event.special.mousewheel.version`
|
||||||
|
* Some clean up
|
||||||
|
|
||||||
|
## 3.1.5
|
||||||
|
|
||||||
|
* Bad release because I did not update the new `$.event.special.mousewheel.version`
|
||||||
|
|
||||||
|
## 3.1.4
|
||||||
|
|
||||||
|
* Always set the `deltaY`
|
||||||
|
* Add back in the `deltaX` and `deltaY` support for older Firefox versions
|
||||||
|
|
||||||
|
## 3.1.3
|
||||||
|
|
||||||
|
* Include `MozMousePixelScroll` in the to fix list to avoid inconsistent behavior in older Firefox
|
||||||
|
|
||||||
|
## 3.1.2
|
||||||
|
|
||||||
|
* Include grunt utilities for development purposes (jshint and uglify)
|
||||||
|
* Include support for browserify
|
||||||
|
* Some basic cleaning up
|
||||||
|
|
||||||
|
## 3.1.1
|
||||||
|
|
||||||
|
* Fix rounding issue with deltas less than zero
|
||||||
|
|
||||||
|
|
||||||
|
## 3.1.0
|
||||||
|
|
||||||
|
* Fix Firefox 17+ issues by using new wheel event
|
||||||
|
* Normalize delta values
|
||||||
|
* Adds horizontal support for IE 9+ by using new wheel event
|
||||||
|
* Support AMD loaders
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.6
|
||||||
|
|
||||||
|
* Fix issue with delta being 0 in Firefox
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.5
|
||||||
|
|
||||||
|
* jQuery 1.7 compatibility
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.4
|
||||||
|
|
||||||
|
* Fix IE issue
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.3
|
||||||
|
|
||||||
|
* Added `deltaX` and `deltaY` for horizontal scrolling support (Thanks to Seamus Leahy)
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.2
|
||||||
|
|
||||||
|
* Fixed delta being opposite value in latest Opera
|
||||||
|
* No longer fix `pageX`, `pageY` for older Mozilla browsers
|
||||||
|
* Removed browser detection
|
||||||
|
* Cleaned up the code
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.1
|
||||||
|
|
||||||
|
* Bad release... creating a new release due to plugins.jquery.com issue :(
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0
|
||||||
|
|
||||||
|
* Uses new special events API in jQuery 1.2.2+
|
||||||
|
* You can now treat `mousewheel` as a normal event and use `.bind`, `.unbind` and `.trigger`
|
||||||
|
* Using jQuery.data API for expandos
|
||||||
|
|
||||||
|
|
||||||
|
## 2.2
|
||||||
|
|
||||||
|
* Fixed `pageX`, `pageY`, `clientX` and `clientY` event properties for Mozilla based browsers
|
||||||
|
|
||||||
|
|
||||||
|
## 2.1.1
|
||||||
|
|
||||||
|
* Updated to work with jQuery 1.1.3
|
||||||
|
* Used one instead of bind to do unload event for clean up
|
||||||
|
|
||||||
|
|
||||||
|
## 2.1
|
||||||
|
|
||||||
|
* Fixed an issue with the unload handler
|
||||||
|
|
||||||
|
|
||||||
|
## 2.0
|
||||||
|
|
||||||
|
* Major reduction in code size and complexity (internals have change a whole lot)
|
||||||
|
|
||||||
|
|
||||||
|
## 1.0
|
||||||
|
|
||||||
|
* Fixed Opera issue
|
||||||
|
* Fixed an issue with children elements that also have a mousewheel handler
|
||||||
|
* Added ability to handle multiple handlers
|
37
pkg/jquery-mousewheel/LICENSE.txt
Normal file
37
pkg/jquery-mousewheel/LICENSE.txt
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
Copyright jQuery Foundation and other contributors
|
||||||
|
https://jquery.org/
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals. For exact contribution history, see the revision history
|
||||||
|
available at https://github.com/jquery/jquery-mousewheel
|
||||||
|
|
||||||
|
The following license applies to all parts of this software except as
|
||||||
|
documented below:
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
All files located in the node_modules and external directories are
|
||||||
|
externally maintained libraries used by this software which have their
|
||||||
|
own licenses; we recommend you read them, as their terms may differ from
|
||||||
|
the terms above.
|
76
pkg/jquery-mousewheel/README.md
Normal file
76
pkg/jquery-mousewheel/README.md
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# jQuery Mouse Wheel Plugin
|
||||||
|
|
||||||
|
A [jQuery](http://jquery.com/) plugin that adds cross-browser mouse wheel support with delta normalization.
|
||||||
|
|
||||||
|
In order to use the plugin, simply bind the `mousewheel` event to an element.
|
||||||
|
|
||||||
|
It also provides two helper methods called `mousewheel` and `unmousewheel`
|
||||||
|
that act just like other event helper methods in jQuery.
|
||||||
|
|
||||||
|
The event object is updated with the normalized `deltaX` and `deltaY` properties.
|
||||||
|
In addition there is a new property on the event object called `deltaFactor`. Multiply
|
||||||
|
the `deltaFactor` by `deltaX` or `deltaY` to get the scroll distance that the browser
|
||||||
|
has reported.
|
||||||
|
|
||||||
|
Here is an example of using both the bind and helper method syntax:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// using on
|
||||||
|
$('#my_elem').on('mousewheel', function(event) {
|
||||||
|
console.log(event.deltaX, event.deltaY, event.deltaFactor);
|
||||||
|
});
|
||||||
|
|
||||||
|
// using the event helper
|
||||||
|
$('#my_elem').mousewheel(function(event) {
|
||||||
|
console.log(event.deltaX, event.deltaY, event.deltaFactor);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
The old behavior of adding three arguments (`delta`, `deltaX`, and `deltaY`) to the
|
||||||
|
event handler is now deprecated and will be removed in later releases.
|
||||||
|
|
||||||
|
|
||||||
|
## The Deltas...
|
||||||
|
|
||||||
|
The combination of Browsers, Operating Systems, and Devices offer a huge range of possible delta values. In fact if the user
|
||||||
|
uses a trackpad and then a physical mouse wheel the delta values can differ wildly. This plugin normalizes those
|
||||||
|
values so you get a whole number starting at +-1 and going up in increments of +-1 according to the force or
|
||||||
|
acceleration that is used. This number has the potential to be in the thousands depending on the device.
|
||||||
|
Check out some of the data collected from users [here](http://mousewheeldatacollector.herokuapp.com/).
|
||||||
|
|
||||||
|
### Getting the scroll distance
|
||||||
|
|
||||||
|
In some use-cases we prefer to have the normalized delta but in others we want to know how far the browser should
|
||||||
|
scroll based on the users input. This can be done by multiplying the `deltaFactor` by the `deltaX` or `deltaY`
|
||||||
|
event property to find the scroll distance the browser reported.
|
||||||
|
|
||||||
|
The `deltaFactor` property was added to the event object in 3.1.5 so that the actual reported delta value can be
|
||||||
|
extracted. This is a non-standard property.
|
||||||
|
|
||||||
|
|
||||||
|
## Using with [Browserify](http://browserify.org)
|
||||||
|
|
||||||
|
Support for browserify is baked in.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install jquery-mousewheel
|
||||||
|
npm install jquery-browserify
|
||||||
|
```
|
||||||
|
|
||||||
|
In your server-side node.js code:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var express = require('express');
|
||||||
|
var app = express.createServer();
|
||||||
|
|
||||||
|
app.use(require('browserify')({
|
||||||
|
require : [ 'jquery-browserify', 'jquery-mousewheel' ]
|
||||||
|
}));
|
||||||
|
```
|
||||||
|
|
||||||
|
In your browser-side javascript:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var $ = require('jquery-browserify');
|
||||||
|
require('jquery-mousewheel')($);
|
||||||
|
```
|
17
pkg/jquery-mousewheel/bower.json
Normal file
17
pkg/jquery-mousewheel/bower.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "jquery-mousewheel",
|
||||||
|
"version": "3.1.13",
|
||||||
|
"main": "./jquery.mousewheel.js",
|
||||||
|
"ignore": [
|
||||||
|
"*.json",
|
||||||
|
"*.markdown",
|
||||||
|
"*.txt",
|
||||||
|
".*",
|
||||||
|
"!LICENSE.txt",
|
||||||
|
"Gruntfile.js",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"jquery": ">=1.2.2"
|
||||||
|
}
|
||||||
|
}
|
221
pkg/jquery-mousewheel/jquery.mousewheel.js
Executable file
221
pkg/jquery-mousewheel/jquery.mousewheel.js
Executable file
@ -0,0 +1,221 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery Mousewheel 3.1.13
|
||||||
|
*
|
||||||
|
* Copyright jQuery Foundation and other contributors
|
||||||
|
* Released under the MIT license
|
||||||
|
* http://jquery.org/license
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
if ( typeof define === 'function' && define.amd ) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['jquery'], factory);
|
||||||
|
} else if (typeof exports === 'object') {
|
||||||
|
// Node/CommonJS style for Browserify
|
||||||
|
module.exports = factory;
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory(jQuery);
|
||||||
|
}
|
||||||
|
}(function ($) {
|
||||||
|
|
||||||
|
var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
|
||||||
|
toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
|
||||||
|
['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
|
||||||
|
slice = Array.prototype.slice,
|
||||||
|
nullLowestDeltaTimeout, lowestDelta;
|
||||||
|
|
||||||
|
if ( $.event.fixHooks ) {
|
||||||
|
for ( var i = toFix.length; i; ) {
|
||||||
|
$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var special = $.event.special.mousewheel = {
|
||||||
|
version: '3.1.12',
|
||||||
|
|
||||||
|
setup: function() {
|
||||||
|
if ( this.addEventListener ) {
|
||||||
|
for ( var i = toBind.length; i; ) {
|
||||||
|
this.addEventListener( toBind[--i], handler, false );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.onmousewheel = handler;
|
||||||
|
}
|
||||||
|
// Store the line height and page height for this particular element
|
||||||
|
$.data(this, 'mousewheel-line-height', special.getLineHeight(this));
|
||||||
|
$.data(this, 'mousewheel-page-height', special.getPageHeight(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
teardown: function() {
|
||||||
|
if ( this.removeEventListener ) {
|
||||||
|
for ( var i = toBind.length; i; ) {
|
||||||
|
this.removeEventListener( toBind[--i], handler, false );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.onmousewheel = null;
|
||||||
|
}
|
||||||
|
// Clean up the data we added to the element
|
||||||
|
$.removeData(this, 'mousewheel-line-height');
|
||||||
|
$.removeData(this, 'mousewheel-page-height');
|
||||||
|
},
|
||||||
|
|
||||||
|
getLineHeight: function(elem) {
|
||||||
|
var $elem = $(elem),
|
||||||
|
$parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
|
||||||
|
if (!$parent.length) {
|
||||||
|
$parent = $('body');
|
||||||
|
}
|
||||||
|
return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
|
||||||
|
},
|
||||||
|
|
||||||
|
getPageHeight: function(elem) {
|
||||||
|
return $(elem).height();
|
||||||
|
},
|
||||||
|
|
||||||
|
settings: {
|
||||||
|
adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
|
||||||
|
normalizeOffset: true // calls getBoundingClientRect for each event
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.extend({
|
||||||
|
mousewheel: function(fn) {
|
||||||
|
return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
|
||||||
|
},
|
||||||
|
|
||||||
|
unmousewheel: function(fn) {
|
||||||
|
return this.unbind('mousewheel', fn);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function handler(event) {
|
||||||
|
var orgEvent = event || window.event,
|
||||||
|
args = slice.call(arguments, 1),
|
||||||
|
delta = 0,
|
||||||
|
deltaX = 0,
|
||||||
|
deltaY = 0,
|
||||||
|
absDelta = 0,
|
||||||
|
offsetX = 0,
|
||||||
|
offsetY = 0;
|
||||||
|
event = $.event.fix(orgEvent);
|
||||||
|
event.type = 'mousewheel';
|
||||||
|
|
||||||
|
// Old school scrollwheel delta
|
||||||
|
if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
|
||||||
|
if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
|
||||||
|
if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
|
||||||
|
if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
|
||||||
|
|
||||||
|
// Firefox < 17 horizontal scrolling related to DOMMouseScroll event
|
||||||
|
if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
|
||||||
|
deltaX = deltaY * -1;
|
||||||
|
deltaY = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
|
||||||
|
delta = deltaY === 0 ? deltaX : deltaY;
|
||||||
|
|
||||||
|
// New school wheel delta (wheel event)
|
||||||
|
if ( 'deltaY' in orgEvent ) {
|
||||||
|
deltaY = orgEvent.deltaY * -1;
|
||||||
|
delta = deltaY;
|
||||||
|
}
|
||||||
|
if ( 'deltaX' in orgEvent ) {
|
||||||
|
deltaX = orgEvent.deltaX;
|
||||||
|
if ( deltaY === 0 ) { delta = deltaX * -1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// No change actually happened, no reason to go any further
|
||||||
|
if ( deltaY === 0 && deltaX === 0 ) { return; }
|
||||||
|
|
||||||
|
// Need to convert lines and pages to pixels if we aren't already in pixels
|
||||||
|
// There are three delta modes:
|
||||||
|
// * deltaMode 0 is by pixels, nothing to do
|
||||||
|
// * deltaMode 1 is by lines
|
||||||
|
// * deltaMode 2 is by pages
|
||||||
|
if ( orgEvent.deltaMode === 1 ) {
|
||||||
|
var lineHeight = $.data(this, 'mousewheel-line-height');
|
||||||
|
delta *= lineHeight;
|
||||||
|
deltaY *= lineHeight;
|
||||||
|
deltaX *= lineHeight;
|
||||||
|
} else if ( orgEvent.deltaMode === 2 ) {
|
||||||
|
var pageHeight = $.data(this, 'mousewheel-page-height');
|
||||||
|
delta *= pageHeight;
|
||||||
|
deltaY *= pageHeight;
|
||||||
|
deltaX *= pageHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store lowest absolute delta to normalize the delta values
|
||||||
|
absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
|
||||||
|
|
||||||
|
if ( !lowestDelta || absDelta < lowestDelta ) {
|
||||||
|
lowestDelta = absDelta;
|
||||||
|
|
||||||
|
// Adjust older deltas if necessary
|
||||||
|
if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
|
||||||
|
lowestDelta /= 40;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adjust older deltas if necessary
|
||||||
|
if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
|
||||||
|
// Divide all the things by 40!
|
||||||
|
delta /= 40;
|
||||||
|
deltaX /= 40;
|
||||||
|
deltaY /= 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a whole, normalized value for the deltas
|
||||||
|
delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
|
||||||
|
deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
|
||||||
|
deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
|
||||||
|
|
||||||
|
// Normalise offsetX and offsetY properties
|
||||||
|
if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
|
||||||
|
var boundingRect = this.getBoundingClientRect();
|
||||||
|
offsetX = event.clientX - boundingRect.left;
|
||||||
|
offsetY = event.clientY - boundingRect.top;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add information to the event object
|
||||||
|
event.deltaX = deltaX;
|
||||||
|
event.deltaY = deltaY;
|
||||||
|
event.deltaFactor = lowestDelta;
|
||||||
|
event.offsetX = offsetX;
|
||||||
|
event.offsetY = offsetY;
|
||||||
|
// Go ahead and set deltaMode to 0 since we converted to pixels
|
||||||
|
// Although this is a little odd since we overwrite the deltaX/Y
|
||||||
|
// properties with normalized deltas.
|
||||||
|
event.deltaMode = 0;
|
||||||
|
|
||||||
|
// Add event and delta to the front of the arguments
|
||||||
|
args.unshift(event, delta, deltaX, deltaY);
|
||||||
|
|
||||||
|
// Clearout lowestDelta after sometime to better
|
||||||
|
// handle multiple device types that give different
|
||||||
|
// a different lowestDelta
|
||||||
|
// Ex: trackpad = 3 and mouse wheel = 120
|
||||||
|
if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
|
||||||
|
nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
|
||||||
|
|
||||||
|
return ($.event.dispatch || $.event.handle).apply(this, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
function nullLowestDelta() {
|
||||||
|
lowestDelta = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function shouldAdjustOldDeltas(orgEvent, absDelta) {
|
||||||
|
// If this is an older event and the delta is divisable by 120,
|
||||||
|
// then we are assuming that the browser is treating this as an
|
||||||
|
// older mouse wheel event and that we should divide the deltas
|
||||||
|
// by 40 to try and get a more usable deltaFactor.
|
||||||
|
// Side note, this actually impacts the reported scroll distance
|
||||||
|
// in older browsers and can cause scrolling to be slower than native.
|
||||||
|
// Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
|
||||||
|
return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}));
|
8
pkg/jquery-mousewheel/jquery.mousewheel.min.js
vendored
Normal file
8
pkg/jquery-mousewheel/jquery.mousewheel.min.js
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery Mousewheel 3.1.13
|
||||||
|
*
|
||||||
|
* Copyright 2015 jQuery Foundation and other contributors
|
||||||
|
* Released under the MIT license.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*/
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})});
|
19
pkg/jquery.hotkeys/hotkeys-blog.js
Normal file
19
pkg/jquery.hotkeys/hotkeys-blog.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
$(function(){
|
||||||
|
|
||||||
|
$(document).bind('keydown','ctrl+return',
|
||||||
|
function(){
|
||||||
|
window.location.href = '/blog';
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$(document).bind('keydown', 'Shift+j',
|
||||||
|
function(){
|
||||||
|
if (document.activeElement !== document.body){
|
||||||
|
$(".article-nav-link-wrap:focus").closest("li").next().find("a.lmove").focus();
|
||||||
|
} else {
|
||||||
|
$('#article-nav-older').focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
});
|
16
pkg/jquery.hotkeys/hotkeys.js
Normal file
16
pkg/jquery.hotkeys/hotkeys.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
$(function(){
|
||||||
|
$(document).bind('keydown','ctrl+return',
|
||||||
|
function(){
|
||||||
|
$("home-layout").toggle();
|
||||||
|
$('#terminal').click();
|
||||||
|
var element=document.getElementById("window");
|
||||||
|
var rect=element.getBoundingClientRect();
|
||||||
|
var positionX=rect.left+window.pageXOffset;
|
||||||
|
var positionY=rect.top+window.pageYOffset;
|
||||||
|
window.scrollTo(positionX,positionY);
|
||||||
|
})
|
||||||
|
$('.move').click(
|
||||||
|
function(){
|
||||||
|
this.focus();
|
||||||
|
});
|
||||||
|
});
|
1
pkg/jquery.hotkeys/jquery.hotkeys.js
Normal file
1
pkg/jquery.hotkeys/jquery.hotkeys.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
(function(jQuery){jQuery.hotkeys={version:"0.2.0",specialKeys:{8:"backspace",9:"tab",10:"return",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",59:";",61:"=",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":"\"",",":"<",".":">","/":"?","\\":"|"},textAcceptingInputTypes:["text","password","number","email","url","range","date","month","week","time","datetime","datetime-local","search","color","tel"],textInputTypes:/textarea|input|select/i,options:{filterInputAcceptingElements:true,filterTextInputs:true,filterContentEditable:true}};function keyHandler(handleObj){if(typeof handleObj.data==="string"){handleObj.data={keys:handleObj.data};}if(!handleObj.data||!handleObj.data.keys||typeof handleObj.data.keys!=="string"){return;}var origHandler=handleObj.handler,keys=handleObj.data.keys.toLowerCase().split(" ");handleObj.handler=function(event){if(this!==event.target&&(jQuery.hotkeys.options.filterInputAcceptingElements&&jQuery.hotkeys.textInputTypes.test(event.target.nodeName)||(jQuery.hotkeys.options.filterContentEditable&&jQuery(event.target).attr('contenteditable'))||(jQuery.hotkeys.options.filterTextInputs&&jQuery.inArray(event.target.type,jQuery.hotkeys.textAcceptingInputTypes)>-1))){return;}var special=event.type!=="keypress"&&jQuery.hotkeys.specialKeys[event.which],character=String.fromCharCode(event.which).toLowerCase(),modif="",possible={};jQuery.each(["alt","ctrl","shift"],function(index,specialKey){if(event[specialKey+'Key']&&special!==specialKey){modif+=specialKey+'+';}});if(event.metaKey&&!event.ctrlKey&&special!=="meta"){modif+="meta+";}if(event.metaKey&&special!=="meta"&&modif.indexOf("alt+ctrl+shift+")>-1){modif=modif.replace("alt+ctrl+shift+","hyper+");}if(special){possible[modif+special]=true;}else{possible[modif+character]=true;possible[modif+jQuery.hotkeys.shiftNums[character]]=true;if(modif==="shift+"){possible[jQuery.hotkeys.shiftNums[character]]=true;}}for(var i=0,l=keys.length;i<l;i++){if(possible[keys[i]]){return origHandler.apply(this,arguments);}}};}jQuery.each(["keydown","keyup","keypress"],function(){jQuery.event.special[this]={add:keyHandler};});})(jQuery||this.jQuery||window.jQuery);
|
BIN
pkg/jquery.terminal/bin/yuicompressor-2.4.8.jar
Normal file
BIN
pkg/jquery.terminal/bin/yuicompressor-2.4.8.jar
Normal file
Binary file not shown.
249
pkg/jquery.terminal/css/jquery.terminal.css
Normal file
249
pkg/jquery.terminal/css/jquery.terminal.css
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
/*!
|
||||||
|
* __ _____ ________ __
|
||||||
|
* / // _ /__ __ _____ ___ __ _/__ ___/__ ___ ______ __ __ __ ___ / /
|
||||||
|
* __ / // // // // // _ // _// // / / // _ // _// // // \/ // _ \/ /
|
||||||
|
* / / // // // // // ___// / / // / / // ___// / / / / // // /\ // // / /__
|
||||||
|
* \___//____ \\___//____//_/ _\_ / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
|
||||||
|
* \/ /____/ version 0.10.8
|
||||||
|
* http://terminal.jcubic.pl
|
||||||
|
*
|
||||||
|
* This file is part of jQuery Terminal.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011-2016 Jakub Jankiewicz <http://jcubic.pl>
|
||||||
|
* Released under the MIT license
|
||||||
|
*
|
||||||
|
* Date: Tue, 17 May 2016 09:01:55 +0000
|
||||||
|
*/
|
||||||
|
.terminal .terminal-output .format, .cmd .format,
|
||||||
|
.cmd .prompt, .cmd .prompt div, .terminal .terminal-output div div{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.terminal h1, .terminal h2, .terminal h3, .terminal h4, .terminal h5, .terminal h6, .terminal pre, .cmd {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.terminal h1, .terminal h2, .terminal h3, .terminal h4, .terminal h5, .terminal h6 {
|
||||||
|
line-height: 1.2em;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
.cmd .mask {
|
||||||
|
width: 10px;
|
||||||
|
height: 11px;
|
||||||
|
background: black;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.cmd .clipboard {
|
||||||
|
position: absolute;
|
||||||
|
height: 16px;
|
||||||
|
left: -6px;
|
||||||
|
/* this seems to work after all on Android */
|
||||||
|
/*left: -99999px;
|
||||||
|
clip: rect(1px,1px,1px,1px);
|
||||||
|
/* on desktop textarea appear when paste */
|
||||||
|
/*
|
||||||
|
opacity: 0.01;
|
||||||
|
filter: alpha(opacity = 0.01);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.01);
|
||||||
|
*/
|
||||||
|
width: 5px; /* textarea need to have width or it will not work on Android */
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
color: transparent;
|
||||||
|
outline: none;
|
||||||
|
padding: 0;
|
||||||
|
resize: none;
|
||||||
|
z-index: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.terminal .error {
|
||||||
|
color: #f00;
|
||||||
|
}
|
||||||
|
.terminal {
|
||||||
|
padding: 10px;
|
||||||
|
position: relative;
|
||||||
|
/*overflow: hidden;*/
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.cmd {
|
||||||
|
padding: 0;
|
||||||
|
height: 1.3em;
|
||||||
|
position: relative;
|
||||||
|
/*margin-top: 3px; */
|
||||||
|
}
|
||||||
|
.terminal .inverted, .cmd .inverted, .cmd .cursor.blink {
|
||||||
|
background-color: #aaa;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.cmd .cursor.blink {
|
||||||
|
-webkit-animation: terminal-blink 1s infinite steps(1, start);
|
||||||
|
-moz-animation: terminal-blink 1s infinite steps(1, start);
|
||||||
|
-ms-animation: terminal-blink 1s infinite steps(1, start);
|
||||||
|
animation: terminal-blink 1s infinite steps(1, start);
|
||||||
|
}
|
||||||
|
@-webkit-keyframes terminal-blink {
|
||||||
|
0%, 100% {
|
||||||
|
background-color: #000;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #bbb;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-ms-keyframes terminal-blink {
|
||||||
|
0%, 100% {
|
||||||
|
background-color: #000;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #bbb;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-moz-keyframes terminal-blink {
|
||||||
|
0%, 100% {
|
||||||
|
background-color: #000;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #bbb;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes terminal-blink {
|
||||||
|
0%, 100% {
|
||||||
|
background-color: #000;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #bbb; /* not #aaa because it's seems there is Google Chrome bug */
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.terminal .terminal-output div div, .cmd .prompt {
|
||||||
|
display: block;
|
||||||
|
line-height: 14px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
.cmd .prompt {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.terminal, .cmd {
|
||||||
|
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
|
||||||
|
color: #aaa;
|
||||||
|
background-color: #000;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 16px;
|
||||||
|
padding-bottom:3px;
|
||||||
|
}
|
||||||
|
.terminal-output > div {
|
||||||
|
/*padding-top: 3px;*/
|
||||||
|
min-height: 14px;
|
||||||
|
}
|
||||||
|
.terminal .terminal-output div span {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.cmd span {
|
||||||
|
float: left;
|
||||||
|
/*display: inline-block; */
|
||||||
|
}
|
||||||
|
/* fix double style of selecting text in terminal */
|
||||||
|
.terminal-output span, .terminal-output a, .cmd div, .cmd span, .terminal td,
|
||||||
|
.terminal pre, .terminal h1, .terminal h2, .terminal h3, .terminal h4,
|
||||||
|
.terminal h5, .terminal h6 {
|
||||||
|
-webkit-touch-callout: initial;
|
||||||
|
-webkit-user-select: initial;
|
||||||
|
-khtml-user-select: initial;
|
||||||
|
-moz-user-select: initial;
|
||||||
|
-ms-user-select: initial;
|
||||||
|
user-select: initial;
|
||||||
|
}
|
||||||
|
.terminal, .terminal-output, .terminal-output div {
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
/* firefox hack */
|
||||||
|
@-moz-document url-prefix() {
|
||||||
|
.terminal, .terminal-output, .terminal-output div {
|
||||||
|
-webkit-touch-callout: initial;
|
||||||
|
-webkit-user-select: initial;
|
||||||
|
-khtml-user-select: initial;
|
||||||
|
-moz-user-select: initial;
|
||||||
|
-ms-user-select: initial;
|
||||||
|
user-select: initial;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.terminal table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.terminal td {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
.terminal h1::-moz-selection,
|
||||||
|
.terminal h2::-moz-selection,
|
||||||
|
.terminal h3::-moz-selection,
|
||||||
|
.terminal h4::-moz-selection,
|
||||||
|
.terminal h5::-moz-selection,
|
||||||
|
.terminal h6::-moz-selection,
|
||||||
|
.terminal pre::-moz-selection,
|
||||||
|
.terminal td::-moz-selection,
|
||||||
|
.terminal .terminal-output div div::-moz-selection,
|
||||||
|
.terminal .terminal-output div span::-moz-selection,
|
||||||
|
.terminal .terminal-output div div a::-moz-selection,
|
||||||
|
.cmd div::-moz-selection,
|
||||||
|
.cmd > span::-moz-selection,
|
||||||
|
.cmd .prompt span::-moz-selection {
|
||||||
|
background-color: #aaa;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
/* this don't work in Chrome
|
||||||
|
.terminal tr td::-moz-selection {
|
||||||
|
border-color: #000;
|
||||||
|
}
|
||||||
|
.terminal tr td::selection {
|
||||||
|
border-color: #000;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.terminal h1::selection,
|
||||||
|
.terminal h2::selection,
|
||||||
|
.terminal h3::selection,
|
||||||
|
.terminal h4::selection,
|
||||||
|
.terminal h5::selection,
|
||||||
|
.terminal h6::selection,
|
||||||
|
.terminal pre::selection,
|
||||||
|
.terminal td::selection,
|
||||||
|
.terminal .terminal-output div div::selection,
|
||||||
|
.terminal .terminal-output div div a::selection,
|
||||||
|
.terminal .terminal-output div span::selection,
|
||||||
|
.cmd div::selection,
|
||||||
|
.cmd > span::selection,
|
||||||
|
.cmd .prompt span::selection {
|
||||||
|
background-color: #aaa;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.terminal .terminal-output div.error, .terminal .terminal-output div.error div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.tilda {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1100;
|
||||||
|
}
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.terminal a {
|
||||||
|
color: #0F60FF;
|
||||||
|
}
|
||||||
|
.terminal a:hover {
|
||||||
|
color: red;
|
||||||
|
}
|
1
pkg/jquery.terminal/css/jquery.terminal.min.css
vendored
Normal file
1
pkg/jquery.terminal/css/jquery.terminal.min.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.terminal .terminal-output .format,.cmd .format,.cmd .prompt,.cmd .prompt div,.terminal .terminal-output div div{display:inline-block}.terminal h1,.terminal h2,.terminal h3,.terminal h4,.terminal h5,.terminal h6,.terminal pre,.cmd{margin:0}.terminal h1,.terminal h2,.terminal h3,.terminal h4,.terminal h5,.terminal h6{line-height:1.2em}.cmd .clipboard{position:absolute;height:16px;left:-6px;width:5px;background:transparent;border:0;color:transparent;outline:0;padding:0;resize:none;z-index:0;overflow:hidden}.terminal .error{color:red}.terminal{padding:10px;position:relative;overflow:auto}.cmd{padding:0;height:1.3em;position:relative}.terminal .inverted,.cmd .inverted,.cmd .cursor.blink{background-color:#aaa;color:#000}.cmd .cursor.blink{-webkit-animation:terminal-blink 1s infinite steps(1,start);-moz-animation:terminal-blink 1s infinite steps(1,start);-ms-animation:terminal-blink 1s infinite steps(1,start);animation:terminal-blink 1s infinite steps(1,start)}@-webkit-keyframes terminal-blink{0,100%{background-color:#000;color:#aaa}50%{background-color:#bbb;color:#000}}@-ms-keyframes terminal-blink{0,100%{background-color:#000;color:#aaa}50%{background-color:#bbb;color:#000}}@-moz-keyframes terminal-blink{0,100%{background-color:#000;color:#aaa}50%{background-color:#bbb;color:#000}}@keyframes terminal-blink{0,100%{background-color:#000;color:#aaa}50%{background-color:#bbb;color:#000}}.terminal .terminal-output div div,.cmd .prompt{display:block;line-height:14px;height:auto}.cmd .prompt{float:left}.terminal,.cmd{font-family:monospace;color:#aaa;background-color:#000;font-size:12px;line-height:14px}.terminal-output>div{min-height:14px}.terminal .terminal-output div span{display:inline-block}.cmd span{float:left}.terminal-output span,.terminal-output a,.cmd div,.cmd span,.terminal td,.terminal pre,.terminal h1,.terminal h2,.terminal h3,.terminal h4,.terminal h5,.terminal h6{-webkit-touch-callout:initial;-webkit-user-select:initial;-khtml-user-select:initial;-moz-user-select:initial;-ms-user-select:initial;user-select:initial}.terminal,.terminal-output,.terminal-output div{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@-moz-document url-prefix(){.terminal,.terminal-output,.terminal-output div{-webkit-touch-callout:initial;-webkit-user-select:initial;-khtml-user-select:initial;-moz-user-select:initial;-ms-user-select:initial;user-select:initial}}.terminal table{border-collapse:collapse}.terminal td{border:1px solid #aaa}.terminal h1::-moz-selection,.terminal h2::-moz-selection,.terminal h3::-moz-selection,.terminal h4::-moz-selection,.terminal h5::-moz-selection,.terminal h6::-moz-selection,.terminal pre::-moz-selection,.terminal td::-moz-selection,.terminal .terminal-output div div::-moz-selection,.terminal .terminal-output div span::-moz-selection,.terminal .terminal-output div div a::-moz-selection,.cmd div::-moz-selection,.cmd>span::-moz-selection,.cmd .prompt span::-moz-selection{background-color:#aaa;color:#000}.terminal h1::selection,.terminal h2::selection,.terminal h3::selection,.terminal h4::selection,.terminal h5::selection,.terminal h6::selection,.terminal pre::selection,.terminal td::selection,.terminal .terminal-output div div::selection,.terminal .terminal-output div div a::selection,.terminal .terminal-output div span::selection,.cmd div::selection,.cmd>span::selection,.cmd .prompt span::selection{background-color:#aaa;color:#000}.terminal .terminal-output div.error,.terminal .terminal-output div.error div{color:red}.tilda{position:fixed;top:0;left:0;width:100%;z-index:1100}.clear{clear:both}.terminal a{color:#0f60ff}.terminal a:hover{color:red}
|
113
pkg/jquery.terminal/js/ascii_table.js
Normal file
113
pkg/jquery.terminal/js/ascii_table.js
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
/**@license
|
||||||
|
* __ _____ ________ __
|
||||||
|
* / // _ /__ __ _____ ___ __ _/__ ___/__ ___ ______ __ __ __ ___ / /
|
||||||
|
* __ / // // // // // _ // _// // / / // _ // _// // // \/ // _ \/ /
|
||||||
|
* / / // // // // // ___// / / // / / // ___// / / / / // // /\ // // / /__
|
||||||
|
* \___//____ \\___//____//_/ _\_ / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
|
||||||
|
* \/ /____/
|
||||||
|
* http://terminal.jcubic.pl
|
||||||
|
*
|
||||||
|
* utility that renders simple ascii table, like the one from mysql cli tool
|
||||||
|
* it was first created for leash shell https://leash.jcubic.pl
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
*
|
||||||
|
* var arr = [[1,2,3,4,5], ["lorem", "ipsum", "dolor", "sit", "amet"]];
|
||||||
|
* term.echo(ascii_table(arr));
|
||||||
|
* // or
|
||||||
|
* term.echo(ascii_table(arr, true)); // this will render first row as header
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018-2019 Jakub Jankiewicz <https://jcubic.pl/me>
|
||||||
|
* Released under the MIT license
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/* global define, module, global, wcwidth, require */
|
||||||
|
(function(factory) {
|
||||||
|
var root = typeof window !== 'undefined' ? window : global;
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['wcwidth'], function(wcwidth) {
|
||||||
|
return (root.ascii_table = factory(wcwidth));
|
||||||
|
});
|
||||||
|
} else if (typeof module === 'object' && module.exports) {
|
||||||
|
// Node/CommonJS
|
||||||
|
module.exports = factory(require('wcwidth'));
|
||||||
|
} else {
|
||||||
|
root.ascii_table = factory(root.wcwidth);
|
||||||
|
}
|
||||||
|
})(function(wcwidth, undefined) {
|
||||||
|
var strlen = (function() {
|
||||||
|
if (typeof wcwidth === 'undefined') {
|
||||||
|
return function(string) {
|
||||||
|
return string.length;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return wcwidth;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
function ascii_table(array, header) {
|
||||||
|
if (!array.length) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
for (var i = array.length - 1; i >= 0; i--) {
|
||||||
|
var row = array[i];
|
||||||
|
var stacks = [];
|
||||||
|
for (var j = 0; j < row.length; j++) {
|
||||||
|
var new_lines = row[j].toString().replace(/\r/g).split("\n");
|
||||||
|
row[j] = new_lines.shift();
|
||||||
|
stacks.push(new_lines);
|
||||||
|
}
|
||||||
|
var stack_lengths = stacks.map(function(column) {
|
||||||
|
return column.length;
|
||||||
|
});
|
||||||
|
var new_rows_count = Math.max.apply(Math, stack_lengths);
|
||||||
|
for (var k = new_rows_count - 1; k >= 0; k--) {
|
||||||
|
array.splice(i + 1, 0, stacks.map(function(column) {
|
||||||
|
return column[k] || "";
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var lengths = array[0].map(function(_, i) {
|
||||||
|
var col = array.map(function(row) {
|
||||||
|
if (row[i] != undefined) {
|
||||||
|
var len = strlen(row[i]);
|
||||||
|
if (row[i].match(/\t/g)) {
|
||||||
|
// tab is 4 spaces
|
||||||
|
len += row[i].match(/\t/g).length*3;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return Math.max.apply(Math, col);
|
||||||
|
});
|
||||||
|
// column padding
|
||||||
|
array = array.map(function(row) {
|
||||||
|
return '| ' + row.map(function(item, i) {
|
||||||
|
var size = strlen(item);
|
||||||
|
if (item.match(/\t/g)) {
|
||||||
|
// tab is 4 spaces
|
||||||
|
size += item.match(/\t/g).length*3;
|
||||||
|
}
|
||||||
|
if (size < lengths[i]) {
|
||||||
|
item += new Array(lengths[i] - size + 1).join(' ');
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}).join(' | ') + ' |';
|
||||||
|
});
|
||||||
|
array = array.map(function(line) {
|
||||||
|
return line.replace(/&(?![^;]+;)/g, '&');
|
||||||
|
});
|
||||||
|
var sep = '+' + lengths.map(function(length) {
|
||||||
|
return new Array(length + 3).join('-');
|
||||||
|
}).join('+') + '+';
|
||||||
|
if (header) {
|
||||||
|
return sep + '\n' + array[0] + '\n' + sep + '\n' +
|
||||||
|
array.slice(1).join('\n') + '\n' + sep;
|
||||||
|
} else {
|
||||||
|
return sep + '\n' + array.join('\n') + '\n' + sep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ascii_table;
|
||||||
|
});
|
69
pkg/jquery.terminal/js/dterm.js
Normal file
69
pkg/jquery.terminal/js/dterm.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*!
|
||||||
|
* Example plugin using JQuery Terminal Emulator
|
||||||
|
* Copyright (C) 2010-2016 Jakub Jankiewicz <http://jcubic.pl>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($) {
|
||||||
|
$.extend_if_has = function(desc, source, array) {
|
||||||
|
for (var i=array.length;i--;) {
|
||||||
|
if (typeof source[array[i]] != 'undefined') {
|
||||||
|
desc[array[i]] = source[array[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return desc;
|
||||||
|
};
|
||||||
|
$.fn.dterm = function(interpreter, options) {
|
||||||
|
var op = $.extend_if_has({}, options,
|
||||||
|
['greetings', 'prompt', 'onInit',
|
||||||
|
'onExit', 'clear',
|
||||||
|
'login', 'name', 'exit']);
|
||||||
|
op.enabled = false;
|
||||||
|
var terminal = this.terminal(interpreter, op).css('overflow', 'hidden');
|
||||||
|
if (!options.title) {
|
||||||
|
options.title = 'JQuery Terminal Emulator';
|
||||||
|
}
|
||||||
|
if (options.logoutOnClose) {
|
||||||
|
options.close = function(e, ui) {
|
||||||
|
terminal.logout();
|
||||||
|
terminal.clear();
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
options.close = function(e, ui) {
|
||||||
|
terminal.disable();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var self = this;
|
||||||
|
this.dialog($.extend(options, {
|
||||||
|
resizeStop: function(e, ui) {
|
||||||
|
var content = self.find('.ui-dialog-content');
|
||||||
|
terminal.resize(content.width(), content.height());
|
||||||
|
},
|
||||||
|
open: function(e, ui) {
|
||||||
|
terminal.focus();
|
||||||
|
terminal.resize();
|
||||||
|
},
|
||||||
|
show: 'fade',
|
||||||
|
closeOnEscape: false
|
||||||
|
}));
|
||||||
|
self.terminal = terminal;
|
||||||
|
return self;
|
||||||
|
};
|
||||||
|
})(jQuery);
|
2
pkg/jquery.terminal/js/jquery.mousewheel-min.js
vendored
Normal file
2
pkg/jquery.terminal/js/jquery.mousewheel-min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
(function(c){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),e=0,h=0,f=0;a=c.event.fix(b);a.type="mousewheel";if(b.wheelDelta)e=b.wheelDelta/120;if(b.detail)e=-b.detail/3;f=e;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){f=0;h=-1*e}if(b.wheelDeltaY!==undefined)f=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,e,h,f);return(c.event.dispatch||c.event.handle).apply(this,i)}var d=["DOMMouseScroll","mousewheel"];if(c.event.fixHooks)for(var j=d.length;j;)c.event.fixHooks[d[--j]]=
|
||||||
|
c.event.mouseHooks;c.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=d.length;a;)this.addEventListener(d[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=d.length;a;)this.removeEventListener(d[--a],g,false);else this.onmousewheel=null}};c.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
|
37
pkg/jquery.terminal/js/jquery.terminal.min.js
vendored
Normal file
37
pkg/jquery.terminal/js/jquery.terminal.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
317
pkg/jquery.terminal/js/unix_formatting.js
Normal file
317
pkg/jquery.terminal/js/unix_formatting.js
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
/**@license
|
||||||
|
* __ _____ ________ __
|
||||||
|
* / // _ /__ __ _____ ___ __ _/__ ___/__ ___ ______ __ __ __ ___ / /
|
||||||
|
* __ / // // // // // _ // _// // / / // _ // _// // // \/ // _ \/ /
|
||||||
|
* / / // // // // // ___// / / // / / // ___// / / / / // // /\ // // / /__
|
||||||
|
* \___//____ \\___//____//_/ _\_ / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
|
||||||
|
* \/ /____/
|
||||||
|
* http://terminal.jcubic.pl
|
||||||
|
*
|
||||||
|
* This is example of how to create custom formatter for jQuery Terminal
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014-2016 Jakub Jankiewicz <http://jcubic.pl>
|
||||||
|
* Released under the MIT license
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($) {
|
||||||
|
if (!$.terminal) {
|
||||||
|
throw new Error('$.terminal is not defined');
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// :: Replace overtyping (from man) formatting with terminal formatting
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
$.terminal.overtyping = function(string) {
|
||||||
|
return string.replace(/((?:_\x08.|.\x08_)+)/g, function(full, g) {
|
||||||
|
var striped = full.replace(/_x08|\x08_|_\u0008|\u0008_/g, '');
|
||||||
|
return '[[u;;]' + striped + ']';
|
||||||
|
}).replace(/((?:.\x08.)+)/g, function(full, g) {
|
||||||
|
return '[[b;#fff;]' + full.replace(/(.)(?:\x08|\u0008)(.)/g,
|
||||||
|
function(full, g1, g2) {
|
||||||
|
return g2;
|
||||||
|
}) + ']';
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// :: Html colors taken from ANSI formatting in Linux Terminal
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
$.terminal.ansi_colors = {
|
||||||
|
normal: {
|
||||||
|
black: '#000',
|
||||||
|
red: '#A00',
|
||||||
|
green: '#008400',
|
||||||
|
yellow: '#A50',
|
||||||
|
blue: '#00A',
|
||||||
|
magenta: '#A0A',
|
||||||
|
cyan: '#0AA',
|
||||||
|
white: '#AAA'
|
||||||
|
},
|
||||||
|
faited: {
|
||||||
|
black: '#000',
|
||||||
|
red: '#640000',
|
||||||
|
green: '#006100',
|
||||||
|
yellow: '#737300',
|
||||||
|
blue: '#000087',
|
||||||
|
magenta: '#650065',
|
||||||
|
cyan: '#008787',
|
||||||
|
white: '#818181'
|
||||||
|
},
|
||||||
|
bold: {
|
||||||
|
black: '#000',
|
||||||
|
red: '#F55',
|
||||||
|
green: '#44D544',
|
||||||
|
yellow: '#FF5',
|
||||||
|
blue: '#55F',
|
||||||
|
magenta: '#F5F',
|
||||||
|
cyan: '#5FF',
|
||||||
|
white: '#FFF'
|
||||||
|
},
|
||||||
|
// XTerm 8-bit pallete
|
||||||
|
palette: [
|
||||||
|
'#000000', '#AA0000', '#00AA00', '#AA5500', '#0000AA', '#AA00AA',
|
||||||
|
'#00AAAA', '#AAAAAA', '#555555', '#FF5555', '#55FF55', '#FFFF55',
|
||||||
|
'#5555FF', '#FF55FF', '#55FFFF', '#FFFFFF', '#000000', '#00005F',
|
||||||
|
'#000087', '#0000AF', '#0000D7', '#0000FF', '#005F00', '#005F5F',
|
||||||
|
'#005F87', '#005FAF', '#005FD7', '#005FFF', '#008700', '#00875F',
|
||||||
|
'#008787', '#0087AF', '#0087D7', '#0087FF', '#00AF00', '#00AF5F',
|
||||||
|
'#00AF87', '#00AFAF', '#00AFD7', '#00AFFF', '#00D700', '#00D75F',
|
||||||
|
'#00D787', '#00D7AF', '#00D7D7', '#00D7FF', '#00FF00', '#00FF5F',
|
||||||
|
'#00FF87', '#00FFAF', '#00FFD7', '#00FFFF', '#5F0000', '#5F005F',
|
||||||
|
'#5F0087', '#5F00AF', '#5F00D7', '#5F00FF', '#5F5F00', '#5F5F5F',
|
||||||
|
'#5F5F87', '#5F5FAF', '#5F5FD7', '#5F5FFF', '#5F8700', '#5F875F',
|
||||||
|
'#5F8787', '#5F87AF', '#5F87D7', '#5F87FF', '#5FAF00', '#5FAF5F',
|
||||||
|
'#5FAF87', '#5FAFAF', '#5FAFD7', '#5FAFFF', '#5FD700', '#5FD75F',
|
||||||
|
'#5FD787', '#5FD7AF', '#5FD7D7', '#5FD7FF', '#5FFF00', '#5FFF5F',
|
||||||
|
'#5FFF87', '#5FFFAF', '#5FFFD7', '#5FFFFF', '#870000', '#87005F',
|
||||||
|
'#870087', '#8700AF', '#8700D7', '#8700FF', '#875F00', '#875F5F',
|
||||||
|
'#875F87', '#875FAF', '#875FD7', '#875FFF', '#878700', '#87875F',
|
||||||
|
'#878787', '#8787AF', '#8787D7', '#8787FF', '#87AF00', '#87AF5F',
|
||||||
|
'#87AF87', '#87AFAF', '#87AFD7', '#87AFFF', '#87D700', '#87D75F',
|
||||||
|
'#87D787', '#87D7AF', '#87D7D7', '#87D7FF', '#87FF00', '#87FF5F',
|
||||||
|
'#87FF87', '#87FFAF', '#87FFD7', '#87FFFF', '#AF0000', '#AF005F',
|
||||||
|
'#AF0087', '#AF00AF', '#AF00D7', '#AF00FF', '#AF5F00', '#AF5F5F',
|
||||||
|
'#AF5F87', '#AF5FAF', '#AF5FD7', '#AF5FFF', '#AF8700', '#AF875F',
|
||||||
|
'#AF8787', '#AF87AF', '#AF87D7', '#AF87FF', '#AFAF00', '#AFAF5F',
|
||||||
|
'#AFAF87', '#AFAFAF', '#AFAFD7', '#AFAFFF', '#AFD700', '#AFD75F',
|
||||||
|
'#AFD787', '#AFD7AF', '#AFD7D7', '#AFD7FF', '#AFFF00', '#AFFF5F',
|
||||||
|
'#AFFF87', '#AFFFAF', '#AFFFD7', '#AFFFFF', '#D70000', '#D7005F',
|
||||||
|
'#D70087', '#D700AF', '#D700D7', '#D700FF', '#D75F00', '#D75F5F',
|
||||||
|
'#D75F87', '#D75FAF', '#D75FD7', '#D75FFF', '#D78700', '#D7875F',
|
||||||
|
'#D78787', '#D787AF', '#D787D7', '#D787FF', '#D7AF00', '#D7AF5F',
|
||||||
|
'#D7AF87', '#D7AFAF', '#D7AFD7', '#D7AFFF', '#D7D700', '#D7D75F',
|
||||||
|
'#D7D787', '#D7D7AF', '#D7D7D7', '#D7D7FF', '#D7FF00', '#D7FF5F',
|
||||||
|
'#D7FF87', '#D7FFAF', '#D7FFD7', '#D7FFFF', '#FF0000', '#FF005F',
|
||||||
|
'#FF0087', '#FF00AF', '#FF00D7', '#FF00FF', '#FF5F00', '#FF5F5F',
|
||||||
|
'#FF5F87', '#FF5FAF', '#FF5FD7', '#FF5FFF', '#FF8700', '#FF875F',
|
||||||
|
'#FF8787', '#FF87AF', '#FF87D7', '#FF87FF', '#FFAF00', '#FFAF5F',
|
||||||
|
'#FFAF87', '#FFAFAF', '#FFAFD7', '#FFAFFF', '#FFD700', '#FFD75F',
|
||||||
|
'#FFD787', '#FFD7AF', '#FFD7D7', '#FFD7FF', '#FFFF00', '#FFFF5F',
|
||||||
|
'#FFFF87', '#FFFFAF', '#FFFFD7', '#FFFFFF', '#080808', '#121212',
|
||||||
|
'#1C1C1C', '#262626', '#303030', '#3A3A3A', '#444444', '#4E4E4E',
|
||||||
|
'#585858', '#626262', '#6C6C6C', '#767676', '#808080', '#8A8A8A',
|
||||||
|
'#949494', '#9E9E9E', '#A8A8A8', '#B2B2B2', '#BCBCBC', '#C6C6C6',
|
||||||
|
'#D0D0D0', '#DADADA', '#E4E4E4', '#EEEEEE'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// :: Replace ANSI formatting with terminal formatting
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
$.terminal.from_ansi = (function() {
|
||||||
|
var color_list = {
|
||||||
|
30: 'black',
|
||||||
|
31: 'red',
|
||||||
|
32: 'green',
|
||||||
|
33: 'yellow',
|
||||||
|
34: 'blue',
|
||||||
|
35: 'magenta',
|
||||||
|
36: 'cyan',
|
||||||
|
37: 'white',
|
||||||
|
|
||||||
|
39: 'inherit' // default color
|
||||||
|
};
|
||||||
|
var background_list = {
|
||||||
|
40: 'black',
|
||||||
|
41: 'red',
|
||||||
|
42: 'green',
|
||||||
|
43: 'yellow',
|
||||||
|
44: 'blue',
|
||||||
|
45: 'magenta',
|
||||||
|
46: 'cyan',
|
||||||
|
47: 'white',
|
||||||
|
|
||||||
|
49: 'transparent' // default background
|
||||||
|
};
|
||||||
|
function format_ansi(code) {
|
||||||
|
var controls = code.split(';');
|
||||||
|
var num;
|
||||||
|
var faited = false;
|
||||||
|
var reverse = false;
|
||||||
|
var bold = false;
|
||||||
|
var styles = [];
|
||||||
|
var output_color = '';
|
||||||
|
var output_background = '';
|
||||||
|
var _8bit_color = false;
|
||||||
|
var _8bit_background = false;
|
||||||
|
var process_8bit = false;
|
||||||
|
var palette = $.terminal.ansi_colors.palette;
|
||||||
|
for(var i in controls) {
|
||||||
|
if (controls.hasOwnProperty(i)) {
|
||||||
|
num = parseInt(controls[i], 10);
|
||||||
|
if (process_8bit && (_8bit_background || _8bit_color)) {
|
||||||
|
if (_8bit_color && palette[num]) {
|
||||||
|
output_color = palette[num];
|
||||||
|
}
|
||||||
|
if (_8bit_background && palette[num]) {
|
||||||
|
output_background = palette[num];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch(num) {
|
||||||
|
case 1:
|
||||||
|
styles.push('b');
|
||||||
|
bold = true;
|
||||||
|
faited = false;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
styles.push('u');
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
styles.push('i');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
process_8bit = true;
|
||||||
|
break;
|
||||||
|
case 38:
|
||||||
|
_8bit_color = true;
|
||||||
|
break;
|
||||||
|
case 48:
|
||||||
|
_8bit_background = true;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
faited = true;
|
||||||
|
bold = false;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
reverse = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (controls.indexOf('5') == -1) {
|
||||||
|
if (color_list[num]) {
|
||||||
|
output_color = color_list[num];
|
||||||
|
}
|
||||||
|
if (background_list[num]) {
|
||||||
|
output_background = background_list[num];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (reverse) {
|
||||||
|
if (output_color || output_background) {
|
||||||
|
var tmp = output_background;
|
||||||
|
output_background = output_color;
|
||||||
|
output_color = tmp;
|
||||||
|
} else {
|
||||||
|
output_color = 'black';
|
||||||
|
output_background = 'white';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var colors, color, background, backgrounds;
|
||||||
|
if (bold) {
|
||||||
|
colors = backgrounds = $.terminal.ansi_colors.bold;
|
||||||
|
} else if (faited) {
|
||||||
|
colors = backgrounds = $.terminal.ansi_colors.faited;
|
||||||
|
} else {
|
||||||
|
colors = backgrounds = $.terminal.ansi_colors.normal;
|
||||||
|
}
|
||||||
|
if (_8bit_color) {
|
||||||
|
color = output_color;
|
||||||
|
} else if (output_color == 'inherit') {
|
||||||
|
color = output_color;
|
||||||
|
} else {
|
||||||
|
color = colors[output_color];
|
||||||
|
}
|
||||||
|
if (_8bit_background) {
|
||||||
|
background = output_background;
|
||||||
|
} else if (output_background == 'transparent') {
|
||||||
|
background = output_background;
|
||||||
|
} else {
|
||||||
|
background = backgrounds[output_background];
|
||||||
|
}
|
||||||
|
return [styles.join(''), color, background];
|
||||||
|
}
|
||||||
|
return function(input) {
|
||||||
|
//merge multiple codes
|
||||||
|
/*input = input.replace(/((?:\x1B\[[0-9;]*[A-Za-z])*)/g, function(group) {
|
||||||
|
return group.replace(/m\x1B\[/g, ';');
|
||||||
|
});*/
|
||||||
|
var splitted = input.split(/(\x1B\[[0-9;]*[A-Za-z])/g);
|
||||||
|
if (splitted.length == 1) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
var output = [];
|
||||||
|
//skip closing at the begining
|
||||||
|
if (splitted.length > 3) {
|
||||||
|
var str = splitted.slice(0,3).join('');
|
||||||
|
if (str == '[0m' || str == '[m') {
|
||||||
|
splitted = splitted.slice(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var next, prev_color, prev_background, code, match;
|
||||||
|
var inside = false;
|
||||||
|
for (var i=0; i<splitted.length; ++i) {
|
||||||
|
match = splitted[i].match(/^\x1B\[([0-9;]*)([A-Za-z])$/);
|
||||||
|
if (match) {
|
||||||
|
switch (match[2]) {
|
||||||
|
case 'm':
|
||||||
|
if (match[1] !== '0') {
|
||||||
|
code = format_ansi(match[1]);
|
||||||
|
}
|
||||||
|
if (inside) {
|
||||||
|
output.push(']');
|
||||||
|
if (match[1] === '0' || match[1] === '') {
|
||||||
|
//just closing
|
||||||
|
inside = false;
|
||||||
|
prev_color = prev_background = '';
|
||||||
|
} else {
|
||||||
|
// someone forget to close - move to next
|
||||||
|
code[1] = code[1] || prev_color;
|
||||||
|
code[2] = code[2] || prev_background;
|
||||||
|
output.push('[[' + code.join(';') + ']');
|
||||||
|
// store colors to next use
|
||||||
|
if (code[1]) {
|
||||||
|
prev_color = code[1];
|
||||||
|
}
|
||||||
|
if (code[2]) {
|
||||||
|
prev_background = code[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (match[1] != '0') {
|
||||||
|
inside = true;
|
||||||
|
code[1] = code[1] || prev_color;
|
||||||
|
code[2] = code[2] || prev_background;
|
||||||
|
output.push('[[' + code.join(';') + ']');
|
||||||
|
// store colors to next use
|
||||||
|
if (code[1]) {
|
||||||
|
prev_color = code[1];
|
||||||
|
}
|
||||||
|
if (code[2]) {
|
||||||
|
prev_background = code[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
output.push(splitted[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (inside) {
|
||||||
|
output.push(']');
|
||||||
|
}
|
||||||
|
return output.join(''); //.replace(/\[\[[^\]]+\]\]/g, '');
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
$.terminal.defaults.formatters.push($.terminal.overtyping);
|
||||||
|
$.terminal.defaults.formatters.push($.terminal.from_ansi);
|
||||||
|
})(jQuery);
|
48
pkg/jquery.terminal/js/xml_formatting.js
Normal file
48
pkg/jquery.terminal/js/xml_formatting.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/**@license
|
||||||
|
* __ _____ ________ __
|
||||||
|
* / // _ /__ __ _____ ___ __ _/__ ___/__ ___ ______ __ __ __ ___ / /
|
||||||
|
* __ / // // // // // _ // _// // / / // _ // _// // // \/ // _ \/ /
|
||||||
|
* / / // // // // // ___// / / // / / // ___// / / / / // // /\ // // / /__
|
||||||
|
* \___//____ \\___//____//_/ _\_ / /_//____//_/ /_/ /_//_//_/ /_/ \__\_\___/
|
||||||
|
* \/ /____/
|
||||||
|
* http://terminal.jcubic.pl
|
||||||
|
*
|
||||||
|
* This is example of how to create custom formatter for jQuery Terminal
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014-2016 Jakub Jankiewicz <http://jcubic.pl>
|
||||||
|
* Released under the MIT license
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($) {
|
||||||
|
if (!$.terminal) {
|
||||||
|
throw new Error('$.terminal is not defined');
|
||||||
|
}
|
||||||
|
// this formatter allow to echo xml where tags are colors like:
|
||||||
|
// <red>hello <navy>blue</navy> world</red>
|
||||||
|
$.terminal.defaults.formatters.push(function(string) {
|
||||||
|
var stack = [];
|
||||||
|
var output = [];
|
||||||
|
var parts = string.split(/(<\/?[a-zA-Z]+>)/);
|
||||||
|
for (var i=0; i<parts.length; ++i) {
|
||||||
|
if (parts[i][0] == '<') {
|
||||||
|
if (parts[i][1] == '/') {
|
||||||
|
if (stack.length) {
|
||||||
|
stack.pop();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stack.push(parts[i].replace(/^<|>$/g, ''));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (stack.length) {
|
||||||
|
// top of the stack
|
||||||
|
output.push('[[;' + stack[stack.length-1] + ';]');
|
||||||
|
}
|
||||||
|
output.push(parts[i]);
|
||||||
|
if (stack.length) {
|
||||||
|
output.push(']');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output.join('');
|
||||||
|
});
|
||||||
|
})(jQuery);
|
688
pkg/jquery.terminal/spec/terminalSpec.js
Normal file
688
pkg/jquery.terminal/spec/terminalSpec.js
Normal file
@ -0,0 +1,688 @@
|
|||||||
|
if (typeof window === 'undefined') {
|
||||||
|
var node = true;
|
||||||
|
var jsdom = require("jsdom");
|
||||||
|
global.document = jsdom.jsdom();
|
||||||
|
global.window = global.document.parentWindow;
|
||||||
|
var navigator = {userAgent: "node-js", platform: "Linux i686"};
|
||||||
|
global.window.navigator = global.navigator = navigator;
|
||||||
|
global.jQuery = global.$ = require("jquery");
|
||||||
|
require('../js/jquery.terminal-src');
|
||||||
|
require('../js/unix_formatting');
|
||||||
|
}
|
||||||
|
describe('Terminal utils', function() {
|
||||||
|
var command = 'test "foo bar" baz /^asd [x]/ str\\ str 10 1e10';
|
||||||
|
var args = '"foo bar" baz /^asd [x]/ str\\ str 10 1e10';
|
||||||
|
describe('$.terminal.split_arguments', function() {
|
||||||
|
it('should create array of arguments', function() {
|
||||||
|
expect($.terminal.split_arguments(args)).toEqual([
|
||||||
|
'foo bar',
|
||||||
|
'baz',
|
||||||
|
'/^asd [x]/',
|
||||||
|
'str str',
|
||||||
|
'10',
|
||||||
|
'1e10'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.parse_arguments', function() {
|
||||||
|
it('should create array of arguments and convert types', function() {
|
||||||
|
expect($.terminal.parse_arguments(args)).toEqual([
|
||||||
|
'foo bar',
|
||||||
|
'baz',
|
||||||
|
/^asd [x]/,
|
||||||
|
'str str',
|
||||||
|
10,
|
||||||
|
1e10
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.split_command', function() {
|
||||||
|
it('Should split command', function() {
|
||||||
|
var cmd = jQuery.terminal.split_command(command);
|
||||||
|
expect(cmd).toEqual({
|
||||||
|
command: command,
|
||||||
|
name: 'test',
|
||||||
|
args: [
|
||||||
|
'foo bar',
|
||||||
|
'baz',
|
||||||
|
'/^asd [x]/',
|
||||||
|
'str str',
|
||||||
|
'10',
|
||||||
|
'1e10'
|
||||||
|
],
|
||||||
|
rest: '"foo bar" baz /^asd [x]/ str\\ str 10 1e10'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.parse_command', function() {
|
||||||
|
it('should split and parse command', function() {
|
||||||
|
var cmd = jQuery.terminal.parse_command(command);
|
||||||
|
expect(cmd).toEqual({
|
||||||
|
command: command,
|
||||||
|
name: 'test',
|
||||||
|
args: [
|
||||||
|
'foo bar',
|
||||||
|
'baz',
|
||||||
|
/^asd [x]/,
|
||||||
|
'str str',
|
||||||
|
10,
|
||||||
|
1e10
|
||||||
|
],
|
||||||
|
rest: '"foo bar" baz /^asd [x]/ str\\ str 10 1e10'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
var ansi_string = '\x1b[2;31;46mFoo\x1b[1;3;4;32;45mBar\x1b[0m\x1b[7mBaz';
|
||||||
|
describe('$.terminal.from_ansi', function() {
|
||||||
|
it('should convert ansi to terminal formatting', function() {
|
||||||
|
var string = $.terminal.from_ansi(ansi_string);
|
||||||
|
expect(string).toEqual('[[;#640000;#008787]Foo][[biu;#44D544;#F5F]'+
|
||||||
|
'Bar][[;#000;#AAA]Baz]');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.overtyping', function() {
|
||||||
|
var string = 'HELLO TERMINAL'.replace(/./g, function(chr) {
|
||||||
|
return chr == ' ' ? chr : chr + '\x08' + chr;
|
||||||
|
});
|
||||||
|
var result = '[[b;#fff;]HELLO] [[b;#fff;]TERMINAL]';
|
||||||
|
it('should convert to terminal formatting', function() {
|
||||||
|
expect($.terminal.overtyping(string)).toEqual(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.escape_brackets', function() {
|
||||||
|
var string = '[[jQuery]] [[Terminal]]';
|
||||||
|
var result = '[[jQuery]] [[Terminal]]';
|
||||||
|
it('should replace [ and ] with html entities', function() {
|
||||||
|
expect($.terminal.escape_brackets(string)).toEqual(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.encode', function() {
|
||||||
|
var tags = '<hello> </hello>\t<world> </world>';
|
||||||
|
var tags_result = '<hello> </hello> '+
|
||||||
|
' <world> </world>';
|
||||||
|
it('should convert < > space and tabs', function() {
|
||||||
|
expect($.terminal.encode(tags)).toEqual(tags_result);
|
||||||
|
});
|
||||||
|
var entites = '& & & &64; = [';
|
||||||
|
//'& & & &64; = ['
|
||||||
|
var ent_result = '& & & &64; ='+
|
||||||
|
' &#91';
|
||||||
|
it('it should convert & but not when used with entities', function() {
|
||||||
|
expect($.terminal.encode(entites)).toEqual(ent_result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.format_split', function() {
|
||||||
|
});
|
||||||
|
describe('$.terminal.is_formatting', function() {
|
||||||
|
|
||||||
|
it('should detect terminal formatting', function() {
|
||||||
|
var formattings = [
|
||||||
|
'[[;;]Te[xt]',
|
||||||
|
'[[;;]Te\\]xt]',
|
||||||
|
'[[;;]]',
|
||||||
|
'[[gui;;;class]Text]',
|
||||||
|
'[[b;#fff;]Text]',
|
||||||
|
'[[b;red;blue]Text]'];
|
||||||
|
var not_formattings = [
|
||||||
|
'[[;;]Text[',
|
||||||
|
'[[Text]]',
|
||||||
|
'[[Text[[',
|
||||||
|
'[[;]Text]',
|
||||||
|
'Text]',
|
||||||
|
'[[Text',
|
||||||
|
'[;;]Text]'];
|
||||||
|
formattings.forEach(function(formatting) {
|
||||||
|
expect($.terminal.is_formatting(formatting)).toEqual(true);
|
||||||
|
});
|
||||||
|
not_formattings.forEach(function(formatting) {
|
||||||
|
expect($.terminal.is_formatting(formatting)).toEqual(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.escape_regex', function() {
|
||||||
|
it('should escape regex special characters', function() {
|
||||||
|
var safe = "\\\\\\^\\*\\+\\?\\.\\$\\[\\]\\{\\}\\(\\)";
|
||||||
|
expect($.terminal.escape_regex('\\^*+?.$[]{}()')).toEqual(safe);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.have_formatting', function() {
|
||||||
|
var formattings = [
|
||||||
|
'some text [[;;]Te[xt] and formatting',
|
||||||
|
'some text [[;;]Te\\]xt] and formatting',
|
||||||
|
'some text [[;;]] and formatting',
|
||||||
|
'some text [[gui;;;class]Text] and formatting',
|
||||||
|
'some text [[b;#fff;]Text] and formatting',
|
||||||
|
'some text [[b;red;blue]Text] and formatting'];
|
||||||
|
var not_formattings = [
|
||||||
|
'some text [[;;]Text[ and formatting',
|
||||||
|
'some text [[Text]] and formatting',
|
||||||
|
'some text [[Text[[ and formatting',
|
||||||
|
'some text [[;]Text] and formatting',
|
||||||
|
'some text Text] and formatting',
|
||||||
|
'some text [[Text and formatting',
|
||||||
|
'some text [;;]Text] and formatting'];
|
||||||
|
it('should detect terminal formatting', function() {
|
||||||
|
formattings.forEach(function(formatting) {
|
||||||
|
expect($.terminal.have_formatting(formatting)).toEqual(true);
|
||||||
|
});
|
||||||
|
not_formattings.forEach(function(formatting) {
|
||||||
|
expect($.terminal.have_formatting(formatting)).toEqual(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.valid_color', function() {
|
||||||
|
it('should mark hex color as valid', function() {
|
||||||
|
var valid_colors = ['#fff', '#fab', '#ffaacc', 'red', 'blue'];
|
||||||
|
valid_colors.forEach(function(color) {
|
||||||
|
expect($.terminal.valid_color(color)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.format', function() {
|
||||||
|
var format = '[[biugs;#fff;#000]Foo][[i;;;foo]Bar][[ous;;]Baz]';
|
||||||
|
it('should create html span tags with style and classes', function() {
|
||||||
|
var string = $.terminal.format(format);
|
||||||
|
expect(string).toEqual('<span style="font-weight:bold;text-decorat'+
|
||||||
|
'ion:underline line-through;font-style:ital'+
|
||||||
|
'ic;color:#fff;text-shadow:0 0 5px #fff;bac'+
|
||||||
|
'kground-color:#000" data-text="Foo">Foo</s'+
|
||||||
|
'pan><span style="font-style:italic;" class'+
|
||||||
|
'="foo" data-text="Bar">Bar</span><span sty'+
|
||||||
|
'le="text-decoration:underline line-through'+
|
||||||
|
' overline;" data-text="Baz">Baz</span>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.strip', function() {
|
||||||
|
var formatting = '-_-[[biugs;#fff;#000]Foo]-_-[[i;;;foo]Bar]-_-[[ous;;'+
|
||||||
|
']Baz]-_-';
|
||||||
|
var result = '-_-Foo-_-Bar-_-Baz-_-';
|
||||||
|
it('should remove formatting', function() {
|
||||||
|
expect($.terminal.strip(formatting)).toEqual(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('$.terminal.split_equal', function() {
|
||||||
|
var text = ['[[bui;#fff;]Lorem ipsum dolor sit amet, consectetur adipi',
|
||||||
|
'scing elit. Nulla sed dolor nisl, in suscipit justo. Donec a enim',
|
||||||
|
' et est porttitor semper at vitae augue. Proin at nulla at dui ma',
|
||||||
|
'ttis mattis. Nam a volutpat ante. Aliquam consequat dui eu sem co',
|
||||||
|
'nvallis ullamcorper. Nulla suscipit, massa vitae suscipit ornare,',
|
||||||
|
' tellus] est [[b;;#f00]consequat nunc, quis blandit elit odio eu ',
|
||||||
|
'arcu. Nam a urna nec nisl varius sodales. Mauris iaculis tincidun',
|
||||||
|
't orci id commodo. Aliquam] non magna quis [[i;;]tortor malesuada',
|
||||||
|
' aliquam] eget ut lacus. Nam ut vestibulum est. Praesent volutpat',
|
||||||
|
' tellus in eros dapibus elementum. Nam laoreet risus non nulla mo',
|
||||||
|
'llis ac luctus [[ub;#fff;]felis dapibus. Pellentesque mattis elem',
|
||||||
|
'entum augue non sollicitudin. Nullam lobortis fermentum elit ac m',
|
||||||
|
'ollis. Nam ac varius risus. Cras faucibus euismod nulla, ac aucto',
|
||||||
|
'r diam rutrum sit amet. Nulla vel odio erat], ac mattis enim.'
|
||||||
|
].join('');
|
||||||
|
it('should split text that into equal length chunks', function() {
|
||||||
|
var cols = [10, 40, 60, 400];
|
||||||
|
for (var i=cols.length; i--;) {
|
||||||
|
var lines = $.terminal.split_equal(text, cols[i]);
|
||||||
|
var success = true;
|
||||||
|
for (var j=0; j<lines.length; ++j) {
|
||||||
|
if ($.terminal.strip(lines[j]).length > cols[i]) {
|
||||||
|
success = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect(success).toEqual(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function support_animations() {
|
||||||
|
var animation = false,
|
||||||
|
animationstring = 'animation',
|
||||||
|
keyframeprefix = '',
|
||||||
|
domPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
|
||||||
|
pfx = '',
|
||||||
|
elm = document.createElement('div');
|
||||||
|
if (elm.style.animationName) { animation = true; }
|
||||||
|
if (animation === false) {
|
||||||
|
for (var i = 0; i < domPrefixes.length; i++) {
|
||||||
|
var name = domPrefixes[i] + 'AnimationName';
|
||||||
|
if (elm.style[ name ] !== undefined) {
|
||||||
|
pfx = domPrefixes[i];
|
||||||
|
animationstring = pfx + 'Animation';
|
||||||
|
keyframeprefix = '-' + pfx.toLowerCase() + '-';
|
||||||
|
animation = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return animation;
|
||||||
|
}
|
||||||
|
function enter_text(text) {
|
||||||
|
var e;
|
||||||
|
var $root = $(document.documentElement || window);
|
||||||
|
for (var i=0; i<text.length; ++i) {
|
||||||
|
e = $.Event("keypress");
|
||||||
|
e.which = e.keyCode = text.charCodeAt(i);
|
||||||
|
e.ctrlKey = false;
|
||||||
|
e.altKey = false;
|
||||||
|
$root.trigger(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function shortcut(ctrl, alt, shift, which) {
|
||||||
|
var e = $.Event("keydown");
|
||||||
|
e.ctrlKey = ctrl;
|
||||||
|
e.altKey = alt;
|
||||||
|
e.shiftKey = shift;
|
||||||
|
e.which = e.keyCode = which;
|
||||||
|
$(document.documentElement || window).trigger(e);
|
||||||
|
}
|
||||||
|
function enter_key() {
|
||||||
|
shortcut(false, false, false, 13);
|
||||||
|
}
|
||||||
|
|
||||||
|
function tests_on_ready() {
|
||||||
|
describe('Terminal plugin', function() {
|
||||||
|
describe('terminal create / terminal destroy', function() {
|
||||||
|
var term = $('<div></div>').appendTo('body').terminal();
|
||||||
|
it('should create terminal', function() {
|
||||||
|
expect(term.length).toBe(1);
|
||||||
|
});
|
||||||
|
it('should have proper elements', function() {
|
||||||
|
expect(term.hasClass('terminal')).toBe(true);
|
||||||
|
expect(term.find('.terminal-output').length).toBe(1);
|
||||||
|
expect(term.find('.cmd').length).toBe(1);
|
||||||
|
var prompt = term.find('.prompt');
|
||||||
|
expect(prompt.length).toBe(1);
|
||||||
|
expect(prompt.is('span')).toBe(true);
|
||||||
|
expect(prompt.children().length).toBe(1);
|
||||||
|
var cursor = term.find('.cursor');
|
||||||
|
expect(cursor.length).toBe(1);
|
||||||
|
expect(cursor.is('span')).toBe(true);
|
||||||
|
expect(cursor.prev().is('span')).toBe(true);
|
||||||
|
expect(cursor.next().is('span')).toBe(true);
|
||||||
|
term.focus(true);
|
||||||
|
if (support_animations()) {
|
||||||
|
expect(cursor.hasClass('blink')).toBe(true);
|
||||||
|
}
|
||||||
|
expect(term.find('.clipboard').length).toBe(1);
|
||||||
|
});
|
||||||
|
it('should have signature', function() {
|
||||||
|
var sig = term.find('.terminal-output div div').map(function() { return $(this).text(); }).get().join('\n');
|
||||||
|
expect(term.signature().replace(/ /g, '\xA0')).toEqual(sig);
|
||||||
|
});
|
||||||
|
it('should have default prompt', function() {
|
||||||
|
var prompt = term.find('.prompt');
|
||||||
|
expect(prompt.html()).toEqual("<span>> </span>");
|
||||||
|
expect(prompt.text()).toEqual('>\xA0');
|
||||||
|
});
|
||||||
|
it('should destroy terminal', function() {
|
||||||
|
term.destroy();
|
||||||
|
expect(term.children().length).toBe(0);
|
||||||
|
term.remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('exec', function() {
|
||||||
|
var interpreter = {
|
||||||
|
foo: function() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var term = $('<div></div>').appendTo('body').terminal(interpreter);
|
||||||
|
|
||||||
|
it('should execute function', function() {
|
||||||
|
var spy = spyOn(interpreter, 'foo');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
term.exec('foo').then(function() {
|
||||||
|
expect(interpreter.foo).toHaveBeenCalled();
|
||||||
|
term.destroy().remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('enter text', function() {
|
||||||
|
var interpreter = {
|
||||||
|
foo: function() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var term = $('<div></div>').appendTo('body').terminal(interpreter);
|
||||||
|
it('text should appear and interpreter function should be called', function() {
|
||||||
|
term.focus(true);
|
||||||
|
var spy = spyOn(interpreter, 'foo');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
enter_text('foo');
|
||||||
|
enter_key();
|
||||||
|
expect(interpreter.foo).toHaveBeenCalled();
|
||||||
|
var last_div = term.find('.terminal-output > div:last-child');
|
||||||
|
expect(last_div.hasClass('command')).toBe(true);
|
||||||
|
expect(last_div.children().html()).toEqual('<span>> foo</span>');
|
||||||
|
term.destroy().remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('prompt', function() {
|
||||||
|
var term = $('<div></div>').appendTo('body').terminal($.noop, {
|
||||||
|
prompt: '>>> '
|
||||||
|
});
|
||||||
|
it('should return prompt', function() {
|
||||||
|
expect(term.get_prompt()).toEqual('>>> ');
|
||||||
|
expect(term.find('.prompt').html()).toEqual('<span>>>> </span>');
|
||||||
|
});
|
||||||
|
it('should set prompt', function() {
|
||||||
|
term.set_prompt('||| ');
|
||||||
|
expect(term.get_prompt()).toEqual('||| ');
|
||||||
|
expect(term.find('.prompt').html()).toEqual('<span>||| </span>');
|
||||||
|
function prompt(callback) {
|
||||||
|
callback('>>> ');
|
||||||
|
}
|
||||||
|
term.set_prompt(prompt);
|
||||||
|
expect(term.get_prompt()).toEqual(prompt);
|
||||||
|
expect(term.find('.prompt').html()).toEqual('<span>>>> </span>');
|
||||||
|
});
|
||||||
|
it('should format prompt', function() {
|
||||||
|
var prompt = '<span style="font-weight:bold;text-decoration:underline;color:#fff;" data-text=">>>">>>></span><span> </span>';
|
||||||
|
term.set_prompt('[[ub;#fff;]>>>] ');
|
||||||
|
expect(term.find('.prompt').html()).toEqual(prompt);
|
||||||
|
term.set_prompt(function(callback) {
|
||||||
|
callback('[[ub;#fff;]>>>] ');
|
||||||
|
});
|
||||||
|
expect(term.find('.prompt').html()).toEqual(prompt);
|
||||||
|
term.destroy().remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('cmd plugin', function() {
|
||||||
|
var term = $('<div></div>').appendTo('body').css('overflow-y', 'scroll').terminal($.noop, {
|
||||||
|
name: 'cmd',
|
||||||
|
numChars: 150,
|
||||||
|
numRows: 20
|
||||||
|
});
|
||||||
|
var string = '';
|
||||||
|
for (var i=term.cols(); i--;) {
|
||||||
|
term.insert('M');
|
||||||
|
}
|
||||||
|
var cmd = term.cmd();
|
||||||
|
var line = cmd.find('.prompt').next();
|
||||||
|
it('text should have 2 lines', function() {
|
||||||
|
expect(line.is('div')).toBe(true);
|
||||||
|
expect(line.text().length).toBe(term.cols()-2);
|
||||||
|
});
|
||||||
|
it('cmd plugin moving cursor', function() {
|
||||||
|
cmd.position(-8, true);
|
||||||
|
var before = cmd.find('.prompt').next();
|
||||||
|
var cursor = cmd.find('.cursor');
|
||||||
|
var after = cursor.next();
|
||||||
|
expect(before.is('span')).toBe(true);
|
||||||
|
expect(before.text().length).toBe(term.cols()-8);
|
||||||
|
expect(after.next().text().length).toBe(2);
|
||||||
|
expect(after.text().length).toBe(5);
|
||||||
|
expect(cursor.text()).toBe('M');
|
||||||
|
});
|
||||||
|
it('should remove characters', function() {
|
||||||
|
cmd['delete'](-10);
|
||||||
|
var before = cmd.find('.prompt').next();
|
||||||
|
var cursor = cmd.find('.cursor');
|
||||||
|
var after = cursor.next();
|
||||||
|
expect(before.text().length).toEqual(term.cols()-8-10);
|
||||||
|
cmd['delete'](8);
|
||||||
|
expect(cursor.text()).toEqual('\xA0');
|
||||||
|
expect(after.text().length).toEqual(0);
|
||||||
|
});
|
||||||
|
var history = cmd.history()
|
||||||
|
it('should have one entry in history', function() {
|
||||||
|
cmd.purge();
|
||||||
|
term.set_command('something').focus(true);
|
||||||
|
enter_key();
|
||||||
|
expect(history.data()).toEqual(['something']);
|
||||||
|
});
|
||||||
|
it('should not add item to history if history is disabled', function() {
|
||||||
|
history.disable();
|
||||||
|
term.set_command('something else');
|
||||||
|
enter_key();
|
||||||
|
expect(history.data()).toEqual(['something']);
|
||||||
|
});
|
||||||
|
it('should remove commands from history', function() {
|
||||||
|
var spy = spyOn(history, 'purge');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
cmd.purge();
|
||||||
|
expect(history.purge).toHaveBeenCalled();
|
||||||
|
expect(history.data()).toEqual([]);
|
||||||
|
});
|
||||||
|
it('should have name', function() {
|
||||||
|
expect(cmd.name()).toEqual('cmd_4');
|
||||||
|
});
|
||||||
|
it('should return command', function() {
|
||||||
|
cmd.set('foo');
|
||||||
|
expect(cmd.get()).toEqual('foo');
|
||||||
|
});
|
||||||
|
it('should not move position', function() {
|
||||||
|
var pos = cmd.position();
|
||||||
|
cmd.insert('bar', true);
|
||||||
|
expect(cmd.position()).toEqual(pos);
|
||||||
|
});
|
||||||
|
it('should return $.noop for commands', function() {
|
||||||
|
expect($.terminal.active().commands()).toEqual($.noop);
|
||||||
|
});
|
||||||
|
it('should set position', function() {
|
||||||
|
cmd.position(0);
|
||||||
|
expect(cmd.position()).toEqual(0);
|
||||||
|
});
|
||||||
|
it('should set and remove mask', function() {
|
||||||
|
cmd.mask('•');
|
||||||
|
cmd.position(6);
|
||||||
|
var before = cmd.find('.prompt').next();
|
||||||
|
expect(before.text()).toEqual('••••••');
|
||||||
|
expect(cmd.get()).toEqual('foobar');
|
||||||
|
cmd.mask(false);
|
||||||
|
expect(before.text()).toEqual('foobar');
|
||||||
|
});
|
||||||
|
it('should execute functions on shortcuts', function() {
|
||||||
|
var spy;
|
||||||
|
spy = spyOn(cmd, 'position');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
shortcut(true, false, false, 65); // CTRL+A
|
||||||
|
expect(cmd.position).toHaveBeenCalled();
|
||||||
|
spy = spyOn(cmd, 'delete');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
shortcut(true, false, false, 75); // CTRL+K
|
||||||
|
expect(cmd['delete']).toHaveBeenCalled();
|
||||||
|
spy = spyOn(cmd, 'insert');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
shortcut(true, false, false, 89); // CTRL+Y
|
||||||
|
expect(cmd.insert).toHaveBeenCalled();
|
||||||
|
shortcut(true, false, false, 85); // CTRL+U
|
||||||
|
expect(cmd.kill_text()).toEqual('foobar');
|
||||||
|
shortcut(true, false, true, 13);
|
||||||
|
expect(cmd.find('.prompt').next().text()).toEqual('\xA0');
|
||||||
|
expect(cmd.get()).toEqual('\n');
|
||||||
|
cmd.set('');
|
||||||
|
shortcut(false, false, false, 9); // TAB
|
||||||
|
expect(cmd.get()).toEqual('\t');
|
||||||
|
history.enable();
|
||||||
|
cmd.set('foo bar');
|
||||||
|
enter_key();
|
||||||
|
shortcut(false, false, false, 38); // UP ARROW
|
||||||
|
expect(cmd.get()).toEqual('foo bar');
|
||||||
|
shortcut(false, false, false, 40); // DOWN ARROW
|
||||||
|
expect(cmd.get()).toEqual('');
|
||||||
|
cmd.insert('hello');
|
||||||
|
shortcut(false, false, false, 38);
|
||||||
|
shortcut(false, false, false, 40);
|
||||||
|
expect(cmd.get()).toEqual('hello');
|
||||||
|
shortcut(true, false, false, 80); // CTRL+P
|
||||||
|
expect(cmd.get()).toEqual('foo bar');
|
||||||
|
shortcut(true, false, false, 78); // CTRL+N
|
||||||
|
expect(cmd.get()).toEqual('hello');
|
||||||
|
cmd.set('foo bar baz');
|
||||||
|
shortcut(false, false, false, 37); // LEFT ARROW
|
||||||
|
expect(cmd.position()).toEqual(10);
|
||||||
|
shortcut(true, false, false, 37); // moving by words
|
||||||
|
expect(cmd.position()).toEqual(8);
|
||||||
|
shortcut(true, false, false, 37);
|
||||||
|
expect(cmd.position()).toEqual(4);
|
||||||
|
shortcut(true, false, false, 37);
|
||||||
|
expect(cmd.position()).toEqual(0);
|
||||||
|
shortcut(false, false, false, 39); // RIGHT ARROW
|
||||||
|
expect(cmd.position()).toEqual(1);
|
||||||
|
shortcut(true, false, false, 39);
|
||||||
|
expect(cmd.position()).toEqual(3);
|
||||||
|
shortcut(true, false, false, 39);
|
||||||
|
expect(cmd.position()).toEqual(7);
|
||||||
|
shortcut(true, false, false, 39);
|
||||||
|
expect(cmd.position()).toEqual(11);
|
||||||
|
shortcut(false, false, false, 36); // HOME
|
||||||
|
expect(cmd.position()).toEqual(0);
|
||||||
|
shortcut(false, false, false, 35); // END
|
||||||
|
expect(cmd.position()).toEqual(cmd.get().length);
|
||||||
|
shortcut(true, false, false, 82); // CTRL+R
|
||||||
|
expect(cmd.prompt()).toEqual("(reverse-i-search)`': ");
|
||||||
|
enter_text('foo');
|
||||||
|
expect(cmd.get()).toEqual('foo bar');
|
||||||
|
shortcut(true, false, false, 71); // CTRL+G
|
||||||
|
expect(cmd.get()).toEqual('foo bar baz');
|
||||||
|
cmd.purge();
|
||||||
|
term.destroy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function JSONRPCMock(url, object) {
|
||||||
|
var ajax = $.ajax;
|
||||||
|
var system = {
|
||||||
|
'sdversion': '1.0',
|
||||||
|
'name': 'DemoService',
|
||||||
|
'address': url,
|
||||||
|
// md5('JSONRPCMock')
|
||||||
|
'id': 'urn:md5:e1a975ac782ce4ed0a504ceb909abf44',
|
||||||
|
'procs': []
|
||||||
|
};
|
||||||
|
for (var key in object) {
|
||||||
|
var proc = {
|
||||||
|
name: key
|
||||||
|
};
|
||||||
|
if ($.isFunction(object[key])) {
|
||||||
|
var re = /function[^\(]+\(([^\)]+)\)/;
|
||||||
|
var m = object[key].toString().match(re);
|
||||||
|
if (m) {
|
||||||
|
proc.params = m[1].split(/\s*,\s*/);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
system.procs.push(proc);
|
||||||
|
}
|
||||||
|
$.ajax = function(obj) {
|
||||||
|
if (obj.url == url) {
|
||||||
|
var defer = $.Deferred();
|
||||||
|
try {
|
||||||
|
var req = JSON.parse(obj.data);
|
||||||
|
var resp;
|
||||||
|
if (req.method == 'system.describe') {
|
||||||
|
resp = system;
|
||||||
|
} else {
|
||||||
|
var error = null;
|
||||||
|
var ret = null
|
||||||
|
try {
|
||||||
|
ret = object[req.method].apply(null, req.params);
|
||||||
|
} catch (e) {
|
||||||
|
error = {message: e.message};
|
||||||
|
}
|
||||||
|
resp = {
|
||||||
|
id: req.id,
|
||||||
|
jsonrpc: '1.1',
|
||||||
|
result: ret,
|
||||||
|
error: error
|
||||||
|
};
|
||||||
|
}
|
||||||
|
resp = JSON.stringify(resp);
|
||||||
|
if ($.isFunction(obj.success)) {
|
||||||
|
obj.success(resp, 'OK', {
|
||||||
|
getResponseHeader: function(header) {
|
||||||
|
if (header == 'Content-Type') {
|
||||||
|
return 'application/json';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
defer.resolve(resp);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(e.message);
|
||||||
|
}
|
||||||
|
return defer.promise();
|
||||||
|
} else {
|
||||||
|
return ajax.apply($, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var object = {
|
||||||
|
echo: function(token, str) {
|
||||||
|
return str;
|
||||||
|
},
|
||||||
|
login: function(user, password) {
|
||||||
|
if (user == 'demo' && password == 'demo') {
|
||||||
|
return 'TOKEN';
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
JSONRPCMock('/test', object);
|
||||||
|
describe('JSON-RPC', function() {
|
||||||
|
var term = $('<div></div>').appendTo('body').terminal('/test', {
|
||||||
|
login: true
|
||||||
|
});
|
||||||
|
it('should call login', function() {
|
||||||
|
term.focus();
|
||||||
|
var spy = spyOn(object, 'login');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
term.insert('test');
|
||||||
|
enter_key();
|
||||||
|
term.insert('test');
|
||||||
|
enter_key();
|
||||||
|
var last_div = term.find('.terminal-output > div:last-child');
|
||||||
|
expect(last_div.text()).toEqual('Wrong password try again!');
|
||||||
|
expect(object.login).toHaveBeenCalledWith('test', 'test');
|
||||||
|
term.insert('demo');
|
||||||
|
enter_key();
|
||||||
|
term.insert('demo');
|
||||||
|
enter_key();
|
||||||
|
expect(object.login).toHaveBeenCalledWith('demo', 'demo');
|
||||||
|
});
|
||||||
|
it('should call a function', function() {
|
||||||
|
term.focus();
|
||||||
|
var spy = spyOn(object, 'echo');
|
||||||
|
if (spy.andCallThrough) {
|
||||||
|
spy.andCallThrough();
|
||||||
|
} else {
|
||||||
|
spy.and.callThrough();
|
||||||
|
}
|
||||||
|
term.insert('echo hello');
|
||||||
|
enter_key();
|
||||||
|
expect(object.echo).toHaveBeenCalledWith('TOKEN', 'hello');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (node) {
|
||||||
|
tests_on_ready();
|
||||||
|
} else {
|
||||||
|
$(tests_on_ready);
|
||||||
|
}
|
||||||
|
|
10704
pkg/jquery/dist/jquery.js
vendored
Normal file
10704
pkg/jquery/dist/jquery.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2
pkg/jquery/dist/jquery.min.js
vendored
Normal file
2
pkg/jquery/dist/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
pkg/jquery/dist/jquery.min.map
vendored
Normal file
1
pkg/jquery/dist/jquery.min.map
vendored
Normal file
File diff suppressed because one or more lines are too long
8605
pkg/jquery/dist/jquery.slim.js
vendored
Normal file
8605
pkg/jquery/dist/jquery.slim.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2
pkg/jquery/dist/jquery.slim.min.js
vendored
Normal file
2
pkg/jquery/dist/jquery.slim.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
pkg/jquery/dist/jquery.slim.min.map
vendored
Normal file
1
pkg/jquery/dist/jquery.slim.min.map
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user