ani-cli-npm 2.1.2 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
package/bin/index.js CHANGED
@@ -1,119 +1,159 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- process.removeAllListeners(); // Ignore warning
8
- // External
9
- const appdata_path_1 = __importDefault(require("appdata-path"));
10
- const chalk = require("chalk");
11
- // Internal
12
- const Anime_1 = require("./Anime");
13
- const search_anime_1 = require("./search_anime");
14
- const load_config_1 = require("./file_managment/load_config");
15
- const input_1 = require("./input");
16
- const change_config_1 = require("./file_managment/change_config");
17
- const download_1 = require("./download");
18
- const help_1 = require("./help");
19
- const app_data_folder = (0, appdata_path_1.default)();
20
- const cache_folder = app_data_folder + "/ani-cli-npm";
21
- (0, load_config_1.make_config_dir)(cache_folder, true);
22
- console.clear();
23
- async function main() {
24
- let config = (0, load_config_1.load_config)(cache_folder);
25
- console.log(chalk.magenta("Ani-cli-npm!\n"));
26
- if (config.most_recent.anime_id !== "") {
27
- console.log(chalk.grey(`Most recently played: ${config.most_recent.anime_id} episode ${config.most_recent.episode_number + 1}\n`));
28
- }
29
- let choice = await (0, input_1.selection)([
30
- "Search",
31
- "Continue",
32
- "Download",
33
- "Option",
34
- "Help",
35
- "Quit",
36
- ], ["s", "c", "d", "o", "h", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
37
- switch (choice) {
38
- case 0: // Search
39
- let temp_ = await (0, search_anime_1.search)();
40
- if (temp_ == 1) {
41
- await main();
42
- process.exit();
43
- }
44
- let anime_id = temp_;
45
- let anime = new Anime_1.Anime();
46
- await anime.init(anime_id, cache_folder);
47
- let episode_number;
48
- if (anime.episode_list.length == 1) {
49
- episode_number = 1;
50
- }
51
- else {
52
- console.log(`Select episode [1-${anime.episode_list.length}] ${(anime.most_recent != 0) ? `Or C to continue from ep${anime.most_recent + 1}` : ""}`);
53
- episode_number = await (0, input_1.number_input)(anime.episode_list.length, 1, (anime.most_recent != 0) ? ["c"] : [], (anime.most_recent != 0) ? [anime.most_recent + 1] : []);
54
- }
55
- await anime.play_head(episode_number - 1, config, cache_folder);
56
- if (anime.player.hasOwnProperty("quit")) {
57
- await anime.player.quit();
58
- }
59
- await main();
60
- break;
61
- case 1: // Continue
62
- if (config.most_recent.anime_id == "") {
63
- console.clear();
64
- console.log(chalk.red("No episode played recently"));
65
- await main();
66
- break;
67
- }
68
- let continue_anime = new Anime_1.Anime();
69
- await continue_anime.init(config.most_recent.anime_id, cache_folder);
70
- await continue_anime.play_head(config.most_recent.episode_number, config, cache_folder);
71
- if (continue_anime.player.hasOwnProperty("quit")) {
72
- await continue_anime.player.quit();
73
- }
74
- await main();
75
- break;
76
- case 2: // Download
77
- let code = await (0, download_1.download)(cache_folder, config);
78
- if (code == 1) {
79
- console.log(chalk.red("Error downloading episodes"));
80
- }
81
- break;
82
- case 3: // Options
83
- let temp = structuredClone(config);
84
- let exit_code;
85
- while (true) {
86
- // @ts-ignore
87
- temp, exit_code = await (0, change_config_1.config_)(temp);
88
- if (exit_code === 1) {
89
- config = temp;
90
- //proxyAgent = new HttpsProxyAgent(config.proxy);
91
- console.clear();
92
- try {
93
- (0, load_config_1.write_config)(cache_folder, config);
94
- console.log(chalk.yellow("Config changed."));
95
- }
96
- catch {
97
- console.log(chalk.red("Error writing to .conf file."));
98
- }
99
- break;
100
- }
101
- else if (exit_code === 2) {
102
- temp = config;
103
- console.clear();
104
- console.log(chalk.yellow("Config changes disregarded."));
105
- break;
106
- }
107
- }
108
- await main();
109
- break;
110
- case 4:
111
- await (0, help_1.help)();
112
- break;
113
- case 5: // Quit
114
- console.log("Exit");
115
- }
116
- return 0;
117
- // await search()
118
- }
119
- main();
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ const process = __importStar(require("process"));
31
+ //process.removeAllListeners() // Ignore warning
32
+ // External
33
+ const appdata_path_1 = __importDefault(require("appdata-path"));
34
+ const chalk = require("chalk");
35
+ // Internal
36
+ const Anime_1 = require("./Anime");
37
+ const search_anime_1 = require("./search_anime");
38
+ const load_config_1 = require("./file_managment/load_config");
39
+ const input_1 = require("./input");
40
+ const change_config_1 = require("./file_managment/change_config");
41
+ const cache_1 = require("./file_managment/cache");
42
+ const download_1 = require("./download");
43
+ const help_1 = require("./help");
44
+ const app_data_folder = (0, appdata_path_1.default)();
45
+ const cache_folder = app_data_folder + "/ani-cli-npm";
46
+ (0, load_config_1.make_config_dir)(cache_folder, true);
47
+ console.clear();
48
+ async function main() {
49
+ let config = (0, load_config_1.load_config)(cache_folder);
50
+ console.log(chalk.magenta("Ani-cli-npm!\n"));
51
+ if (config.most_recent.anime_id !== "") {
52
+ console.log(chalk.grey(`Most recently played: ${config.most_recent.anime_id} episode ${config.most_recent.episode_number + 1}\n`));
53
+ }
54
+ let choice = await (0, input_1.selection)([
55
+ "Search",
56
+ "Continue",
57
+ "Download",
58
+ "Option",
59
+ "Clear cache",
60
+ "Help",
61
+ "Quit",
62
+ ], ["s", "c", "d", "o", " ", "h", "q"], ((thing) => { return chalk.magenta(thing); }), ((thing) => { return chalk.magenta(thing); }));
63
+ switch (choice) {
64
+ case 0: // Search
65
+ let temp_ = await (0, search_anime_1.search)();
66
+ if (temp_ == 1) {
67
+ await main();
68
+ process.exit();
69
+ }
70
+ let anime_id = temp_;
71
+ let anime = new Anime_1.Anime();
72
+ await anime.init(anime_id, cache_folder);
73
+ let episode_number;
74
+ if (anime.episode_list.length == 1) {
75
+ episode_number = 1;
76
+ }
77
+ else {
78
+ console.log(`Select episode [1-${anime.episode_list.length}] ${(anime.most_recent != 0) ? `Or C to continue from ep${anime.most_recent + 1}` : ""}`);
79
+ episode_number = await (0, input_1.number_input)(anime.episode_list.length, 1, (anime.most_recent != 0) ? ["c"] : [], (anime.most_recent != 0) ? [anime.most_recent + 1] : []);
80
+ }
81
+ await anime.play_head(episode_number - 1, config, cache_folder);
82
+ if (anime.player.hasOwnProperty("quit")) {
83
+ await anime.player.player.quit();
84
+ }
85
+ await main();
86
+ break;
87
+ case 1: // Continue
88
+ if (config.most_recent.anime_id == "") {
89
+ console.clear();
90
+ console.log(chalk.red("No episode played recently"));
91
+ await main();
92
+ break;
93
+ }
94
+ let continue_anime = new Anime_1.Anime();
95
+ await continue_anime.init(config.most_recent.anime_id, cache_folder);
96
+ await continue_anime.play_head(config.most_recent.episode_number, config, cache_folder);
97
+ try {
98
+ await continue_anime.player.player.quit();
99
+ }
100
+ catch { }
101
+ await main();
102
+ break;
103
+ case 2: // Download
104
+ let code = await (0, download_1.download)(cache_folder, config);
105
+ if (code == 1) {
106
+ console.log(chalk.red("Error downloading episodes"));
107
+ }
108
+ break;
109
+ case 3: // Options
110
+ let temp = structuredClone(config);
111
+ let exit_code;
112
+ while (true) {
113
+ // @ts-ignore
114
+ temp, exit_code = await (0, change_config_1.config_)(temp);
115
+ if (exit_code === 1) {
116
+ config = temp;
117
+ //proxyAgent = new HttpsProxyAgent(config.proxy);
118
+ console.clear();
119
+ try {
120
+ (0, load_config_1.write_config)(cache_folder, config);
121
+ console.log(chalk.yellow("Config changed."));
122
+ }
123
+ catch {
124
+ console.log(chalk.red("Error writing to .conf file."));
125
+ }
126
+ break;
127
+ }
128
+ else if (exit_code === 2) {
129
+ temp = config;
130
+ console.clear();
131
+ console.log(chalk.yellow("Config changes disregarded."));
132
+ break;
133
+ }
134
+ }
135
+ await main();
136
+ break;
137
+ case 4:
138
+ console.clear();
139
+ console.log(chalk.yellow("Warning, this will also clear your current position in each anime, are you sure you want to do this?"));
140
+ if (await (0, input_1.selection)(["yes", "no"], ["y", "n"]) == 0) {
141
+ await (0, cache_1.clear_cache)(cache_folder);
142
+ console.clear();
143
+ console.log(chalk.grey("Cache cleared"));
144
+ }
145
+ else {
146
+ console.clear();
147
+ }
148
+ await main();
149
+ break;
150
+ case 5:
151
+ await (0, help_1.help)();
152
+ break;
153
+ case 6: // Quit
154
+ console.log("Exit");
155
+ }
156
+ return 0;
157
+ // await search()
158
+ }
159
+ main();
package/bin/input.js CHANGED
@@ -1,89 +1,89 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.number_input = exports.input = exports.selection = void 0;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const _prompt = require("simple-input");
9
- async function selection(options, extra_options = [], color1 = ((thing) => { return chalk_1.default.yellow(thing); }), color2 = ((thing) => { return chalk_1.default.green(thing); }), overwrite = false) {
10
- /*
11
- selection(options, extra_options, color1, color2)
12
-
13
- Gives use prompt to choose from a list of options. Either by inputting a number ranging from 1, to the length of the list. Or by inputting a letter (non-caps-sensitive) relating to the option.
14
-
15
-
16
- - options: array of options; e.g. ["play", "download", "continue", "quit"] REQUIRED
17
-
18
-
19
- - extra_options: array of characters as alternatives to numbers (both will be displayed). e.g. ["p", "d", "c", "q"].
20
-
21
- default: []
22
-
23
- - color1 and color2: functions that will dictate what 2 colors the options with alternate between (option1 will be color1, option2;color2, option3;color1, etc).
24
- recommended for this function to return a chalk.____() parsed string.
25
-
26
- default: ((thing:string) => {return chalk.yellow(thing)}) and ((thing:string) => {return chalk.green(thing)})
27
-
28
- - Overwrite: boolean. Please dont use this. I should not be using it. It prints out the raw string instead of adding numbers to them to allow for bogus.
29
- */
30
- let color = true;
31
- for (let x in options) {
32
- if (!overwrite) {
33
- if (color) {
34
- console.log(color1((parseInt(x) + 1).toString() +
35
- ((extra_options[x] == undefined) ? "" : "/" + extra_options[x]) +
36
- ") " + options[x].replaceAll("-", " ")));
37
- }
38
- else {
39
- console.log(color2((parseInt(x) + 1).toString() +
40
- ((extra_options[x] == undefined) ? "" : "/" + extra_options[x]) +
41
- ") " + options[x].replaceAll("-", " ")));
42
- }
43
- }
44
- else {
45
- console.log(options[x]);
46
- }
47
- color = !color;
48
- }
49
- let input = "";
50
- do {
51
- // @ts-ignore
52
- input = (await _prompt(">")).toLowerCase();
53
- for (let x in extra_options) {
54
- if (extra_options[x].toLowerCase() == input) {
55
- input = (parseInt(x) + 1).toString();
56
- }
57
- }
58
- if (!(1 <= parseInt(input) && parseInt(input) <= options.length)) {
59
- console.log(chalk_1.default.red("Invalid choice."));
60
- }
61
- } while (!(1 <= parseInt(input) && parseInt(input) <= options.length));
62
- return parseInt(input) - 1;
63
- }
64
- exports.selection = selection;
65
- async function input() {
66
- return await _prompt(">");
67
- }
68
- exports.input = input;
69
- async function number_input(max, min = 1, extra_options = [], extra_option_values = []) {
70
- let selector;
71
- let selection;
72
- do {
73
- selector = await _prompt(">");
74
- if (extra_options.includes(selector.toLowerCase())) {
75
- selection = extra_option_values[extra_options.indexOf(selector)];
76
- }
77
- else {
78
- selection = parseInt(selector);
79
- }
80
- if (selector == "") {
81
- selection = min;
82
- }
83
- if (!(min <= selection && selection <= max)) {
84
- console.log(chalk_1.default.red("Invalid choice."));
85
- }
86
- } while (!(min <= selection && selection <= max));
87
- return selection;
88
- }
89
- exports.number_input = number_input;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.number_input = exports.input = exports.selection = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const _prompt = require("simple-input");
9
+ async function selection(options, extra_options = [], color1 = ((thing) => { return chalk_1.default.yellow(thing); }), color2 = ((thing) => { return chalk_1.default.green(thing); }), overwrite = false) {
10
+ /*
11
+ selection(options, extra_options, color1, color2)
12
+
13
+ Gives use prompt to choose from a list of options. Either by inputting a number ranging from 1, to the length of the list. Or by inputting a letter (non-caps-sensitive) relating to the option.
14
+
15
+
16
+ - options: array of options; e.g. ["play", "download", "continue", "quit"] REQUIRED
17
+
18
+
19
+ - extra_options: array of characters as alternatives to numbers (both will be displayed). e.g. ["p", "d", "c", "q"].
20
+
21
+ default: []
22
+
23
+ - color1 and color2: functions that will dictate what 2 colors the options with alternate between (option1 will be color1, option2;color2, option3;color1, etc).
24
+ recommended for this function to return a chalk.____() parsed string.
25
+
26
+ default: ((thing:string) => {return chalk.yellow(thing)}) and ((thing:string) => {return chalk.green(thing)})
27
+
28
+ - Overwrite: boolean. Please dont use this. I should not be using it. It prints out the raw string instead of adding numbers to them to allow for bogus.
29
+ */
30
+ let color = true;
31
+ for (let x in options) {
32
+ if (!overwrite) {
33
+ if (color) {
34
+ console.log(color1((parseInt(x) + 1).toString() +
35
+ ((extra_options[x] == undefined) ? "" : "/" + extra_options[x]) +
36
+ ") " + options[x].replaceAll("-", " ")));
37
+ }
38
+ else {
39
+ console.log(color2((parseInt(x) + 1).toString() +
40
+ ((extra_options[x] == undefined) ? "" : "/" + extra_options[x]) +
41
+ ") " + options[x].replaceAll("-", " ")));
42
+ }
43
+ }
44
+ else {
45
+ console.log(options[x]);
46
+ }
47
+ color = !color;
48
+ }
49
+ let input = "";
50
+ do {
51
+ // @ts-ignore
52
+ input = (await _prompt(">")).toLowerCase();
53
+ for (let x in extra_options) {
54
+ if (extra_options[x].toLowerCase() == input) {
55
+ input = (parseInt(x) + 1).toString();
56
+ }
57
+ }
58
+ if (!(1 <= parseInt(input) && parseInt(input) <= options.length)) {
59
+ console.log(chalk_1.default.red("Invalid choice."));
60
+ }
61
+ } while (!(1 <= parseInt(input) && parseInt(input) <= options.length));
62
+ return parseInt(input) - 1;
63
+ }
64
+ exports.selection = selection;
65
+ async function input() {
66
+ return await _prompt(">");
67
+ }
68
+ exports.input = input;
69
+ async function number_input(max, min = 1, extra_options = [], extra_option_values = []) {
70
+ let selector;
71
+ let selection;
72
+ do {
73
+ selector = await _prompt(">");
74
+ if (extra_options.includes(selector.toLowerCase())) {
75
+ selection = extra_option_values[extra_options.indexOf(selector)];
76
+ }
77
+ else {
78
+ selection = parseInt(selector);
79
+ }
80
+ if (selector == "") {
81
+ selection = min;
82
+ }
83
+ if (!(min <= selection && selection <= max)) {
84
+ console.log(chalk_1.default.red("Invalid choice."));
85
+ }
86
+ } while (!(min <= selection && selection <= max));
87
+ return selection;
88
+ }
89
+ exports.number_input = number_input;
@@ -1,39 +1,39 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.search = void 0;
7
- const regex_1 = require("./core_utils/regex");
8
- const curl_1 = require("./core_utils/curl");
9
- const input_1 = require("./input");
10
- const chalk_1 = __importDefault(require("chalk"));
11
- async function search_anime(search) {
12
- let filter = "*<ahref=\"/category/*\"title=\"*\">";
13
- let html = (await (0, curl_1.curl)("https://gogoanime.dk//search.html?keyword=" + search)).split("\n");
14
- let lines = [];
15
- for (let x in html) {
16
- html[x] = html[x].replaceAll(/ /g, '').replaceAll(/\t/g, '');
17
- if ((0, regex_1.RegexParse)(html[x], filter)) {
18
- html[x] = html[x].slice(html[x].indexOf("/category/") + 10);
19
- html[x] = html[x].slice(0, html[x].indexOf("\"title="));
20
- lines.push(html[x]);
21
- }
22
- }
23
- if (!lines[0]) {
24
- lines.pop();
25
- }
26
- return lines;
27
- }
28
- async function search() {
29
- console.clear();
30
- console.log(chalk_1.default.magenta("Search..."));
31
- let _selection = await (0, input_1.input)();
32
- let results = await search_anime(_selection);
33
- if (results[0] === undefined) {
34
- console.log(chalk_1.default.red("No results found."));
35
- return 1;
36
- }
37
- return results[await (0, input_1.selection)(results)];
38
- }
39
- exports.search = search;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.search = void 0;
7
+ const regex_1 = require("./core_utils/regex");
8
+ const curl_1 = require("./core_utils/curl");
9
+ const input_1 = require("./input");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ async function search_anime(search) {
12
+ let filter = "*<ahref=\"/category/*\"title=\"*\">";
13
+ let html = (await (0, curl_1.curl)("https://gogoanime.dk//search.html?keyword=" + search)).split("\n");
14
+ let lines = [];
15
+ for (let x in html) {
16
+ html[x] = html[x].replaceAll(/ /g, '').replaceAll(/\t/g, '');
17
+ if ((0, regex_1.RegexParse)(html[x], filter)) {
18
+ html[x] = html[x].slice(html[x].indexOf("/category/") + 10);
19
+ html[x] = html[x].slice(0, html[x].indexOf("\"title="));
20
+ lines.push(html[x]);
21
+ }
22
+ }
23
+ if (!lines[0]) {
24
+ lines.pop();
25
+ }
26
+ return lines;
27
+ }
28
+ async function search() {
29
+ console.clear();
30
+ console.log(chalk_1.default.magenta("Search..."));
31
+ let _selection = await (0, input_1.input)();
32
+ let results = await search_anime(_selection);
33
+ if (results[0] === undefined) {
34
+ console.log(chalk_1.default.red("No results found."));
35
+ return 1;
36
+ }
37
+ return results[await (0, input_1.selection)(results)];
38
+ }
39
+ exports.search = search;
package/package.json CHANGED
@@ -1,45 +1,45 @@
1
- {
2
- "name": "ani-cli-npm",
3
- "version": "2.1.2",
4
- "description": "ani-cli tool rewritten as npm package",
5
- "main": "bin/index.js",
6
- "scripts": {
7
- "build": "tsc",
8
- "start": "node bin/index.js"
9
- },
10
- "repository": {
11
- "type": "git",
12
- "url": "https://github.com/Bumpkin-Pi/ani-cli-npm"
13
- },
14
- "homepage": "https://github.com/Bumpkin-Pi/ani-cli-npm",
15
- "keywords": [
16
- "anime",
17
- "ani-cli",
18
- "anime",
19
- "client",
20
- "weeb",
21
- "sad-weeb",
22
- "video",
23
- "download"
24
- ],
25
- "author": "bumpkin-pi",
26
- "license": "ISC",
27
- "bin": {
28
- "ani-cli-npm": "/bin/index.js"
29
- },
30
- "dependencies": {
31
- "@types/node-fetch": "^2.6.2",
32
- "appdata-path": "^1.0.0",
33
- "chalk": "^4.1.0",
34
- "download-file-with-progressbar": "^1.2.3",
35
- "media-player-controller": "^1.5.3",
36
- "node-fetch": "^2.6.6",
37
- "open": "^8.4.0",
38
- "simple-input": "^1.0.1",
39
- "typescript": "^4.9.3",
40
- "w2g-client": "^1.1.0"
41
- },
42
- "devDependencies": {
43
- "@types/node": "^18.11.9"
44
- }
45
- }
1
+ {
2
+ "name": "ani-cli-npm",
3
+ "version": "2.1.4",
4
+ "description": "ani-cli tool rewritten as npm package",
5
+ "main": "bin/index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "start": "node bin/index.js"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/Bumpkin-Pi/ani-cli-npm"
13
+ },
14
+ "homepage": "https://github.com/Bumpkin-Pi/ani-cli-npm",
15
+ "keywords": [
16
+ "anime",
17
+ "ani-cli",
18
+ "anime",
19
+ "client",
20
+ "weeb",
21
+ "sad-weeb",
22
+ "video",
23
+ "download"
24
+ ],
25
+ "author": "bumpkin-pi",
26
+ "license": "ISC",
27
+ "bin": {
28
+ "ani-cli-npm": "/bin/index.js"
29
+ },
30
+ "dependencies": {
31
+ "@types/node-fetch": "^2.6.2",
32
+ "appdata-path": "^1.0.0",
33
+ "chalk": "^4.1.0",
34
+ "download-file-with-progressbar": "^1.2.3",
35
+ "media-player-controller": "^1.5.3",
36
+ "node-fetch": "^2.6.6",
37
+ "open": "^8.4.0",
38
+ "simple-input": "^1.0.1",
39
+ "w2g-client": "^1.1.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^18.11.9",
43
+ "typescript": "^4.9.4"
44
+ }
45
+ }