Skip to content

Commit 7ef5dcf

Browse files
author
Elitezen
committed
Updated dist/ files
1 parent 745f979 commit 7ef5dcf

21 files changed

+917
-2
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
/node_modules
2-
/bin
3-
/dist
2+
/bin

dist/src/classes/Category.d.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import type { CategoryNameType } from "../typings/types";
2+
import getCategory from "../functions/getCategory";
3+
/**
4+
* @class Class for anything trivia category related.
5+
*/
6+
export default class Category {
7+
/**
8+
* An array of all category names. Use `Category.random()` for a random pick.
9+
*/
10+
static allNames: CategoryNameType[];
11+
/**
12+
* Decodes a URLLegacy, URL3968 or Base64 category name.
13+
* @param {string} str string to decode.
14+
* @returns {string} The decoded category name.
15+
*/
16+
static decodeEncodedCategoryName(str: string): CategoryNameType | null;
17+
/**
18+
* Fetches a trivia category's data. Duplicate of `getCategory()`.
19+
* @param {CategoryResolvable} arg An argument resolving to a trivia category.
20+
* @returns {Promise<CategoryData>} The data of the category.
21+
*/
22+
static getCategory: typeof getCategory;
23+
/**
24+
* Returns a category id when given it's name.
25+
* @param {CategoryNameType} name The name of the category.
26+
* @returns {number | null} The id if resolvable.
27+
*/
28+
static idByName(name: CategoryNameType): number | null;
29+
/**
30+
* Returns a category name when given it's id.
31+
* @param {number} id The id of the category.
32+
* @returns {CategoryNameType | null} The name if resolvable.
33+
*/
34+
static nameById(id: number): CategoryNameType | null;
35+
/**
36+
* Picks a random category name or id.
37+
* @param {'name' | 'id'} resolvableType The kind of resolvable to return (default `'name'`).
38+
* @returns {CategoryNameType | number} A random category id or name.
39+
*/
40+
static random(resolvableType: "name"): CategoryNameType;
41+
static random(resolvableType: "id"): number;
42+
}

dist/src/classes/Category.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
var enums_1 = require("../typings/enums");
4+
var getCategory_1 = require("../functions/getCategory");
5+
var Util_1 = require("./Util");
6+
/**
7+
* @class Class for anything trivia category related.
8+
*/
9+
var Category = /** @class */ (function () {
10+
function Category() {
11+
}
12+
/**
13+
* Decodes a URLLegacy, URL3968 or Base64 category name.
14+
* @param {string} str string to decode.
15+
* @returns {string} The decoded category name.
16+
*/
17+
Category.decodeEncodedCategoryName = function (str) {
18+
return ([
19+
Util_1.default.decodeBase64(str),
20+
Util_1.default.decodeUrl3968(str),
21+
Util_1.default.decodeUrlLegacy(str),
22+
].find(function (str) { return Category.allNames.includes(str); }) || null);
23+
};
24+
/**
25+
* Returns a category id when given it's name.
26+
* @param {CategoryNameType} name The name of the category.
27+
* @returns {number | null} The id if resolvable.
28+
*/
29+
Category.idByName = function (name) {
30+
var id = Category.allNames.indexOf(name);
31+
return id > -1 ? id + 9 : null;
32+
};
33+
/**
34+
* Returns a category name when given it's id.
35+
* @param {number} id The id of the category.
36+
* @returns {CategoryNameType | null} The name if resolvable.
37+
*/
38+
Category.nameById = function (id) {
39+
var name = Category.allNames[id - 9];
40+
return name !== undefined ? name : null;
41+
};
42+
Category.random = function (resolvableType) {
43+
if (resolvableType === undefined)
44+
resolvableType = "name";
45+
var name = Category.allNames[Math.floor(Math.random() * Category.allNames.length)];
46+
if (resolvableType === "id")
47+
return Category.idByName(name);
48+
return name;
49+
};
50+
/**
51+
* An array of all category names. Use `Category.random()` for a random pick.
52+
*/
53+
Category.allNames = Object.keys(enums_1.CategoryNames).filter(function (key) { return isNaN(+key); });
54+
/**
55+
* Fetches a trivia category's data. Duplicate of `getCategory()`.
56+
* @param {CategoryResolvable} arg An argument resolving to a trivia category.
57+
* @returns {Promise<CategoryData>} The data of the category.
58+
*/
59+
Category.getCategory = getCategory_1.default;
60+
return Category;
61+
}());
62+
exports.default = Category;

dist/src/classes/Constructor.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { CategoryData, Question, RawCategoryResponse, RawQuestion } from "../typings/interfaces";
2+
/**
3+
* @class Class for transforming raw API data to developer friendly data.
4+
* @private
5+
*/
6+
export default class Constructor {
7+
static category(rawCategoryData: RawCategoryResponse): CategoryData;
8+
static questions(rawQuestions: RawQuestion[]): Question[];
9+
}

dist/src/classes/Constructor.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
"use strict";
2+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4+
if (ar || !(i in from)) {
5+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6+
ar[i] = from[i];
7+
}
8+
}
9+
return to.concat(ar || Array.prototype.slice.call(from));
10+
};
11+
Object.defineProperty(exports, "__esModule", { value: true });
12+
var Category_1 = require("./Category");
13+
var Util_1 = require("./Util");
14+
/**
15+
* @class Class for transforming raw API data to developer friendly data.
16+
* @private
17+
*/
18+
var Constructor = /** @class */ (function () {
19+
function Constructor() {
20+
}
21+
Constructor.category = function (rawCategoryData) {
22+
return {
23+
id: rawCategoryData.category_id,
24+
name: Category_1.default.nameById(rawCategoryData.category_id),
25+
questionCount: {
26+
total: rawCategoryData.category_question_count.total_question_count,
27+
easy: rawCategoryData.category_question_count.total_easy_question_count,
28+
medium: rawCategoryData.category_question_count.total_medium_question_count,
29+
hard: rawCategoryData.category_question_count.total_hard_question_count,
30+
},
31+
};
32+
};
33+
Constructor.questions = function (rawQuestions) {
34+
return rawQuestions.map(function (question) {
35+
return {
36+
value: question.question,
37+
category: {
38+
id: Category_1.default.idByName(Category_1.default.decodeEncodedCategoryName(question.category)),
39+
name: question.category,
40+
getData: function () {
41+
return Category_1.default.getCategory(this.id);
42+
},
43+
},
44+
type: question.type,
45+
difficulty: question.difficulty,
46+
correctAnswer: question.correct_answer,
47+
incorrectAnswers: question.incorrect_answers,
48+
allAnswers: Util_1.default.shuffleArray(__spreadArray([
49+
question.correct_answer
50+
], question.incorrect_answers, true)),
51+
checkAnswer: function (str, caseSensitive) {
52+
if (caseSensitive === void 0) { caseSensitive = false; }
53+
if (!caseSensitive) {
54+
return str.toLowerCase() === this.correctAnswer.toLowerCase();
55+
}
56+
return str === this.correctAnswer;
57+
},
58+
};
59+
});
60+
};
61+
return Constructor;
62+
}());
63+
exports.default = Constructor;

dist/src/classes/OpenTDBError.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import type { ErrorResponse } from "../typings/interfaces";
2+
/**
3+
* @class OpenTDB error constructor
4+
* @private
5+
*/
6+
export default class OpenTDBError extends TypeError {
7+
constructor(error: ErrorResponse);
8+
}

dist/src/classes/OpenTDBError.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"use strict";
2+
var __extends = (this && this.__extends) || (function () {
3+
var extendStatics = function (d, b) {
4+
extendStatics = Object.setPrototypeOf ||
5+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7+
return extendStatics(d, b);
8+
};
9+
return function (d, b) {
10+
if (typeof b !== "function" && b !== null)
11+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12+
extendStatics(d, b);
13+
function __() { this.constructor = d; }
14+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15+
};
16+
})();
17+
Object.defineProperty(exports, "__esModule", { value: true });
18+
/**
19+
* @class OpenTDB error constructor
20+
* @private
21+
*/
22+
var OpenTDBError = /** @class */ (function (_super) {
23+
__extends(OpenTDBError, _super);
24+
function OpenTDBError(error) {
25+
var _this = _super.call(this, error.text) || this;
26+
_this.name = "OpenTDBError [".concat(error.header, "]");
27+
return _this;
28+
}
29+
return OpenTDBError;
30+
}(TypeError));
31+
exports.default = OpenTDBError;

dist/src/classes/Session.d.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @class Class for working with trivia API sessions.
3+
*/
4+
export default class Session {
5+
/**
6+
* This session's current token
7+
*/
8+
token: string | null;
9+
constructor();
10+
/**
11+
* Checks if the session has been initialized or holds a token. Emits a warning if not.
12+
*/
13+
assert(): void;
14+
/**
15+
* Generates a session token and assigns it to the instance (`Session.token`).
16+
*/
17+
start(): Promise<string>;
18+
/**
19+
* Resets the current session's data.
20+
*/
21+
reset(): Promise<void>;
22+
}

dist/src/classes/Session.js

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4+
return new (P || (P = Promise))(function (resolve, reject) {
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9+
});
10+
};
11+
var __generator = (this && this.__generator) || function (thisArg, body) {
12+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14+
function verb(n) { return function (v) { return step([n, v]); }; }
15+
function step(op) {
16+
if (f) throw new TypeError("Generator is already executing.");
17+
while (_) try {
18+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19+
if (y = 0, t) op = [op[0] & 2, t.value];
20+
switch (op[0]) {
21+
case 0: case 1: t = op; break;
22+
case 4: _.label++; return { value: op[1], done: false };
23+
case 5: _.label++; y = op[1]; op = [0]; continue;
24+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
25+
default:
26+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30+
if (t[2]) _.ops.pop();
31+
_.trys.pop(); continue;
32+
}
33+
op = body.call(thisArg, _);
34+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36+
}
37+
};
38+
Object.defineProperty(exports, "__esModule", { value: true });
39+
var enums_1 = require("../typings/enums");
40+
var OpenTDBError_1 = require("./OpenTDBError");
41+
var Util_1 = require("./Util");
42+
/**
43+
* @class Class for working with trivia API sessions.
44+
*/
45+
var Session = /** @class */ (function () {
46+
function Session() {
47+
this.token = null;
48+
}
49+
/**
50+
* Checks if the session has been initialized or holds a token. Emits a warning if not.
51+
*/
52+
Session.prototype.assert = function () {
53+
if (this.token === null) {
54+
process.emitWarning("This session currently has no token. Use Session.start() and resolve the promise before using.");
55+
}
56+
};
57+
/**
58+
* Generates a session token and assigns it to the instance (`Session.token`).
59+
*/
60+
Session.prototype.start = function () {
61+
return __awaiter(this, void 0, void 0, function () {
62+
var request, err_1;
63+
return __generator(this, function (_a) {
64+
switch (_a.label) {
65+
case 0:
66+
_a.trys.push([0, 2, , 3]);
67+
return [4 /*yield*/, Util_1.default.fetch(enums_1.Routes.SessionStart)];
68+
case 1:
69+
request = _a.sent();
70+
this.token = request.token;
71+
return [2 /*return*/, this.token];
72+
case 2:
73+
err_1 = _a.sent();
74+
throw new OpenTDBError_1.default(err_1);
75+
case 3: return [2 /*return*/];
76+
}
77+
});
78+
});
79+
};
80+
/**
81+
* Resets the current session's data.
82+
*/
83+
Session.prototype.reset = function () {
84+
return __awaiter(this, void 0, void 0, function () {
85+
var url, request, err_2;
86+
return __generator(this, function (_a) {
87+
switch (_a.label) {
88+
case 0:
89+
_a.trys.push([0, 2, , 3]);
90+
if (this.token === null)
91+
return [2 /*return*/];
92+
url = Util_1.default.createQueriedLink(enums_1.Routes.SessionReset, {
93+
command: "reset",
94+
token: this.token,
95+
});
96+
return [4 /*yield*/, Util_1.default.fetch(url)];
97+
case 1:
98+
request = _a.sent();
99+
this.token = request.token;
100+
return [3 /*break*/, 3];
101+
case 2:
102+
err_2 = _a.sent();
103+
throw new OpenTDBError_1.default(err_2);
104+
case 3: return [2 /*return*/];
105+
}
106+
});
107+
});
108+
};
109+
return Session;
110+
}());
111+
exports.default = Session;

dist/src/classes/Util.d.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import type { ErrorResponse } from "../typings/interfaces";
2+
import type { ErrorCode, ExtendedDictionary } from "../typings/types";
3+
/**
4+
* @class Class for utility functions.
5+
* @private
6+
*/
7+
export default class Util {
8+
static assignDefaults<T extends object>(defaults: T, current?: T | {}): T & ({} | T);
9+
static base64Decoder: {
10+
atob(str: string): string;
11+
decode<T>(value: unknown): T;
12+
decodeString<T_1 extends string>(str: string): T_1;
13+
decodeStringArray(arr: string[]): unknown[];
14+
decodeObjectValues(obj: object): any;
15+
};
16+
static decodeBase64: <T extends string>(str: string) => T;
17+
static decodeUrlLegacy<T extends string>(str: string): T;
18+
static decodeUrl3968<T extends string>(str: string): T;
19+
static createQueriedLink(baseURL: string, options: ExtendedDictionary<null>, concatSymbol?: string): string;
20+
static fetch<T>(url: string, checkForResponseCode?: boolean): Promise<T>;
21+
static getErrorByCode(code: ErrorCode): ErrorResponse;
22+
static shuffleArray<T>(arg: T[]): T[];
23+
}

0 commit comments

Comments
 (0)