booru 2.6.9 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Constants.d.ts +6 -5
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +5 -6
- package/dist/Constants.js.map +1 -1
- package/dist/Utils.d.ts +2 -1
- package/dist/Utils.d.ts.map +1 -0
- package/dist/Utils.js +11 -15
- package/dist/Utils.js.map +1 -1
- package/dist/boorus/Booru.d.ts +5 -4
- package/dist/boorus/Booru.d.ts.map +1 -0
- package/dist/boorus/Booru.js +30 -34
- package/dist/boorus/Booru.js.map +1 -1
- package/dist/boorus/Derpibooru.d.ts +4 -10
- package/dist/boorus/Derpibooru.d.ts.map +1 -0
- package/dist/boorus/Derpibooru.js +0 -8
- package/dist/boorus/Derpibooru.js.map +1 -1
- package/dist/boorus/XmlBooru.d.ts +2 -8
- package/dist/boorus/XmlBooru.d.ts.map +1 -0
- package/dist/boorus/XmlBooru.js +0 -8
- package/dist/boorus/XmlBooru.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/sites.json +219 -1
- package/dist/structures/InternalSearchParameters.d.ts +2 -1
- package/dist/structures/InternalSearchParameters.d.ts.map +1 -0
- package/dist/structures/InternalSearchParameters.js.map +1 -1
- package/dist/structures/Post.d.ts +2 -1
- package/dist/structures/Post.d.ts.map +1 -0
- package/dist/structures/Post.js +46 -44
- package/dist/structures/Post.js.map +1 -1
- package/dist/structures/SearchParameters.d.ts +5 -4
- package/dist/structures/SearchParameters.d.ts.map +1 -0
- package/dist/structures/SearchParameters.js.map +1 -1
- package/dist/structures/SearchResults.d.ts +4 -3
- package/dist/structures/SearchResults.d.ts.map +1 -0
- package/dist/structures/SearchResults.js +20 -12
- package/dist/structures/SearchResults.js.map +1 -1
- package/dist/structures/Site.d.ts +3 -2
- package/dist/structures/Site.d.ts.map +1 -0
- package/dist/structures/Site.js.map +1 -1
- package/dist/structures/SiteApi.d.ts +1 -0
- package/dist/structures/SiteApi.d.ts.map +1 -0
- package/dist/structures/SiteApi.js.map +1 -1
- package/dist/structures/SiteInfo.d.ts +2 -1
- package/dist/structures/SiteInfo.d.ts.map +1 -0
- package/dist/structures/SiteInfo.js.map +1 -1
- package/package.json +11 -27
package/dist/Constants.d.ts
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* @module Constants
|
|
4
4
|
*/
|
|
5
|
-
import { RequestInit } from 'undici';
|
|
6
|
-
import { BooruCredentials } from './boorus/Booru';
|
|
7
|
-
import Site from './structures/Site';
|
|
8
|
-
import SiteInfo from './structures/SiteInfo';
|
|
5
|
+
import type { RequestInit } from 'undici';
|
|
6
|
+
import type { BooruCredentials } from './boorus/Booru';
|
|
7
|
+
import type Site from './structures/Site';
|
|
8
|
+
import type SiteInfo from './structures/SiteInfo';
|
|
9
9
|
export type AnySite = 'e621.net' | 'e926.net' | 'hypnohub.net' | 'danbooru.donmai.us' | 'konachan.com' | 'konachan.net' | 'yande.re' | 'gelbooru.com' | 'rule34.xxx' | 'safebooru.org' | 'tbib.org' | 'xbooru.com' | 'rule34.paheal.net' | 'derpibooru.org' | 'realbooru.com';
|
|
10
10
|
/**
|
|
11
11
|
* A map of site url/{@link SiteInfo}
|
|
@@ -23,7 +23,7 @@ export declare class BooruError extends Error {
|
|
|
23
23
|
* The user-agent to use for searches
|
|
24
24
|
* @private
|
|
25
25
|
*/
|
|
26
|
-
export declare const USER_AGENT
|
|
26
|
+
export declare const USER_AGENT: string;
|
|
27
27
|
/**
|
|
28
28
|
* Create a full uri to search with
|
|
29
29
|
*
|
|
@@ -43,3 +43,4 @@ export declare function searchURI(site: Site, tags?: string[], limit?: number, p
|
|
|
43
43
|
* @private
|
|
44
44
|
*/
|
|
45
45
|
export declare const defaultOptions: RequestInit;
|
|
46
|
+
//# sourceMappingURL=Constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.d.ts","sourceRoot":"","sources":["../src/Constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AAIjD,MAAM,MAAM,OAAO,GACf,UAAU,GACV,UAAU,GACV,cAAc,GACd,oBAAoB,GACpB,cAAc,GACd,cAAc,GACd,UAAU,GACV,cAAc,GACd,YAAY,GACZ,eAAe,GACf,UAAU,GACV,YAAY,GACZ,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,CAAA;AAgBnB;;GAEG;AACH,eAAO,MAAM,KAAK,EAAe,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAE1D;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM,GAAG,KAAK;CAWpC;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAyE,CAAA;AAYhG;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,MAAM,EAAO,EACnB,KAAK,SAAM,EACX,IAAI,SAAI,EACR,WAAW,GAAE,gBAAqB,GACjC,MAAM,CAcR;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,WAK5B,CAAA"}
|
package/dist/Constants.js
CHANGED
|
@@ -9,8 +9,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.defaultOptions = exports.USER_AGENT = exports.BooruError = exports.sites = void 0;
|
|
11
11
|
exports.searchURI = searchURI;
|
|
12
|
-
const sites_json_1 = __importDefault(require("./sites.json"));
|
|
13
12
|
const Utils_1 = require("./Utils");
|
|
13
|
+
const sites_json_1 = __importDefault(require("./sites.json"));
|
|
14
|
+
const packageJson = require('../package.json');
|
|
14
15
|
const expandedTags = {
|
|
15
16
|
'rating:e': 'rating:explicit',
|
|
16
17
|
'rating:q': 'rating:questionable',
|
|
@@ -29,7 +30,7 @@ class BooruError extends Error {
|
|
|
29
30
|
constructor(message) {
|
|
30
31
|
super(message instanceof Error ? message.message : message);
|
|
31
32
|
if (message instanceof Error) {
|
|
32
|
-
this.stack = message.stack;
|
|
33
|
+
this.stack = message.stack ?? '<No Stack>';
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
36
|
Error.captureStackTrace(this, BooruError);
|
|
@@ -42,7 +43,7 @@ exports.BooruError = BooruError;
|
|
|
42
43
|
* The user-agent to use for searches
|
|
43
44
|
* @private
|
|
44
45
|
*/
|
|
45
|
-
exports.USER_AGENT = `booru (https://github.com/AtoraSuunva/booru)`;
|
|
46
|
+
exports.USER_AGENT = `booru/${packageJson.version} (+https://github.com/AtoraSuunva/booru)`;
|
|
46
47
|
/**
|
|
47
48
|
* Expands tags based on a simple map, used for gelbooru/safebooru/etc compat :(
|
|
48
49
|
*
|
|
@@ -72,9 +73,7 @@ function searchURI(site, tags = [], limit = 100, page = 0, credentials = {}) {
|
|
|
72
73
|
}, {
|
|
73
74
|
arrayJoin: site.tagJoin,
|
|
74
75
|
});
|
|
75
|
-
return
|
|
76
|
-
`${site.domain}${site.api.search}` +
|
|
77
|
-
query);
|
|
76
|
+
return `http${site.insecure ? '' : 's'}://${site.domain}${site.api.search}${query}`;
|
|
78
77
|
}
|
|
79
78
|
/**
|
|
80
79
|
* The default options to use for requests
|
package/dist/Constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../src/Constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../src/Constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AA6FH,8BAoBC;AA9GD,mCAAqC;AAErC,8DAAmC;AAInC,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AA2B9C,MAAM,YAAY,GAAY;IAC5B,UAAU,EAAE,iBAAiB;IAC7B,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,aAAa;CAC1B,CAAA;AAED;;GAEG;AACU,QAAA,KAAK,GAAG,oBAAqC,CAAA;AAE1D;;;;GAIG;AACH,MAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAuB;QACjC,KAAK,CAAC,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAE3D,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;IAC1B,CAAC;CACF;AAZD,gCAYC;AAED;;;GAGG;AACU,QAAA,UAAU,GAAG,SAAS,WAAW,CAAC,OAAO,0CAA0C,CAAA;AAEhG;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,SAAS,CACvB,IAAU,EACV,OAAiB,EAAE,EACnB,KAAK,GAAG,GAAG,EACX,IAAI,GAAG,CAAC,EACR,cAAgC,EAAE;IAElC,MAAM,KAAK,GAAG,IAAA,mBAAW,EACvB;QACE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;QACjC,KAAK;QACL,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI;QACrB,GAAG,WAAW;KACf,EACD;QACE,SAAS,EAAE,IAAI,CAAC,OAAO;KACxB,CACF,CAAA;IAED,OAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAA;AACrF,CAAC;AAED;;;;;GAKG;AACU,QAAA,cAAc,GAAgB;IACzC,OAAO,EAAE;QACP,MAAM,EAAE,oDAAoD;QAC5D,YAAY,EAAE,kBAAU;KACzB;CACF,CAAA","sourcesContent":["/**\n * @packageDocumentation\n * @module Constants\n */\n\nimport type { RequestInit } from 'undici'\nimport { querystring } from './Utils'\nimport type { BooruCredentials } from './boorus/Booru'\nimport siteJson from './sites.json'\nimport type Site from './structures/Site'\nimport type SiteInfo from './structures/SiteInfo'\n\nconst packageJson = require('../package.json')\n\nexport type AnySite =\n | 'e621.net'\n | 'e926.net'\n | 'hypnohub.net'\n | 'danbooru.donmai.us'\n | 'konachan.com'\n | 'konachan.net'\n | 'yande.re'\n | 'gelbooru.com'\n | 'rule34.xxx'\n | 'safebooru.org'\n | 'tbib.org'\n | 'xbooru.com'\n | 'rule34.paheal.net'\n | 'derpibooru.org'\n | 'realbooru.com'\n\ntype gelTags = {\n 'rating:e': 'rating:explicit'\n 'rating:q': 'rating:questionable'\n 'rating:s': 'rating:safe'\n\n [key: string]: string\n}\n\nconst expandedTags: gelTags = {\n 'rating:e': 'rating:explicit',\n 'rating:q': 'rating:questionable',\n 'rating:s': 'rating:safe',\n}\n\n/**\n * A map of site url/{@link SiteInfo}\n */\nexport const sites = siteJson as Record<AnySite, SiteInfo>\n\n/**\n * Custom error type for when the boorus error or for user-side error, not my code (probably)\n * <p>The name of the error is 'BooruError'\n * @type {Error}\n */\nexport class BooruError extends Error {\n constructor(message: string | Error) {\n super(message instanceof Error ? message.message : message)\n\n if (message instanceof Error) {\n this.stack = message.stack ?? '<No Stack>'\n } else {\n Error.captureStackTrace(this, BooruError)\n }\n\n this.name = 'BooruError'\n }\n}\n\n/**\n * The user-agent to use for searches\n * @private\n */\nexport const USER_AGENT = `booru/${packageJson.version} (+https://github.com/AtoraSuunva/booru)`\n\n/**\n * Expands tags based on a simple map, used for gelbooru/safebooru/etc compat :(\n *\n * @private\n * @param {String[]} tags The tags to expand\n */\nfunction expandTags(tags: string[]): string[] {\n return tags.map((v) => expandedTags[v.toLowerCase()] ?? v)\n}\n\n/**\n * Create a full uri to search with\n *\n * @private\n * @param {string} domain The domain to search\n * @param {Site} site The site to search\n * @param {string[]} [tags=[]] The tags to search for\n * @param {number} [limit=100] The limit for images to return\n * @param {number} [page=0] The page to get\n * @param {BooryCredentials} [credentials] The credentials to use for the search, appended to the querystring\n */\nexport function searchURI(\n site: Site,\n tags: string[] = [],\n limit = 100,\n page = 0,\n credentials: BooruCredentials = {},\n): string {\n const query = querystring(\n {\n [site.tagQuery]: expandTags(tags),\n limit,\n [site.paginate]: page,\n ...credentials,\n },\n {\n arrayJoin: site.tagJoin,\n },\n )\n\n return `http${site.insecure ? '' : 's'}://${site.domain}${site.api.search}${query}`\n}\n\n/**\n * The default options to use for requests\n * <p>I could document this better but meh\n *\n * @private\n */\nexport const defaultOptions: RequestInit = {\n headers: {\n Accept: 'application/json, application/xml;q=0.9, */*;q=0.8',\n 'User-Agent': USER_AGENT,\n },\n}\n"]}
|
package/dist/Utils.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* @module Utils
|
|
4
4
|
*/
|
|
5
|
-
import { AnySite } from './Constants';
|
|
5
|
+
import { type AnySite } from './Constants';
|
|
6
6
|
/**
|
|
7
7
|
* Check if `site` is a supported site (and check if it's an alias and return the sites's true name)
|
|
8
8
|
*
|
|
@@ -91,3 +91,4 @@ export declare function querystring(query: Record<string, QueryValue>, { arrayJo
|
|
|
91
91
|
*/
|
|
92
92
|
export declare function encodeURIQueryValue(value: QueryValue, { arrayJoin }?: EncodeURIQueryValueOptions): string;
|
|
93
93
|
export {};
|
|
94
|
+
//# sourceMappingURL=Utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAqB,MAAM,aAAa,CAAA;AAI7D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAkB1D;AAsBD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC5C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAMpE;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAe1C;AAGD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAejC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAItE;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAC7C,KAAK,UAAU,GAAG,YAAY,GAAG,YAAY,EAAE,CAAA;AAE/C,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,0BAA0B;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,EAAE,SAAe,EAAE,GAAE,kBAAuB,GAC3C,MAAM,CASR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,EAAE,SAAe,EAAE,GAAE,0BAA+B,GACnD,MAAM,CAMR"}
|
package/dist/Utils.js
CHANGED
|
@@ -25,11 +25,11 @@ function resolveSite(domain) {
|
|
|
25
25
|
if (typeof domain !== 'string') {
|
|
26
26
|
return null;
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
const lowerDomain = domain.toLowerCase();
|
|
29
29
|
for (const [site, info] of Object.entries(Constants_1.sites)) {
|
|
30
|
-
if (site ===
|
|
31
|
-
info.domain ===
|
|
32
|
-
info.aliases.includes(
|
|
30
|
+
if (site === lowerDomain ||
|
|
31
|
+
info.domain === lowerDomain ||
|
|
32
|
+
info.aliases.includes(lowerDomain)) {
|
|
33
33
|
return site;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -53,7 +53,7 @@ function jsonfy(xml) {
|
|
|
53
53
|
if (data.html || data['!doctype']) {
|
|
54
54
|
// Some boorus return HTML error pages instead of JSON responses on errors
|
|
55
55
|
// So try scraping off what we can in that case
|
|
56
|
-
const page = data.html
|
|
56
|
+
const page = data.html ?? data['!doctype']?.html;
|
|
57
57
|
const message = [];
|
|
58
58
|
if (page.body.h1) {
|
|
59
59
|
message.push(page.body.h1);
|
|
@@ -114,9 +114,9 @@ function shuffle(array) {
|
|
|
114
114
|
* @param {Number} max The maximum (inclusive)
|
|
115
115
|
*/
|
|
116
116
|
function randInt(min, max) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return Math.floor(Math.random() * (
|
|
117
|
+
const nmin = Math.ceil(min);
|
|
118
|
+
const nmax = Math.floor(max);
|
|
119
|
+
return Math.floor(Math.random() * (nmax - nmin + 1)) + nmin;
|
|
120
120
|
}
|
|
121
121
|
/**
|
|
122
122
|
* Performs some basic search validation
|
|
@@ -127,16 +127,14 @@ function randInt(min, max) {
|
|
|
127
127
|
*/
|
|
128
128
|
function validateSearchParams(site, limit) {
|
|
129
129
|
const resolvedSite = resolveSite(site);
|
|
130
|
-
|
|
131
|
-
limit = parseInt(limit, 10);
|
|
132
|
-
}
|
|
130
|
+
const resolvedLimit = typeof limit !== 'number' ? Number.parseInt(limit, 10) : limit;
|
|
133
131
|
if (resolvedSite === null) {
|
|
134
132
|
throw new Constants_1.BooruError('Site not supported');
|
|
135
133
|
}
|
|
136
134
|
if (typeof limit !== 'number' || Number.isNaN(limit)) {
|
|
137
135
|
throw new Constants_1.BooruError('`limit` should be an int');
|
|
138
136
|
}
|
|
139
|
-
return { site: resolvedSite, limit };
|
|
137
|
+
return { site: resolvedSite, limit: resolvedLimit };
|
|
140
138
|
}
|
|
141
139
|
/**
|
|
142
140
|
* Finds the matching strings between two arrays
|
|
@@ -177,8 +175,6 @@ function encodeURIQueryValue(value, { arrayJoin = '+' } = {}) {
|
|
|
177
175
|
if (Array.isArray(value)) {
|
|
178
176
|
return value.map(encodeURIComponent).join(arrayJoin);
|
|
179
177
|
}
|
|
180
|
-
|
|
181
|
-
return encodeURIComponent(value);
|
|
182
|
-
}
|
|
178
|
+
return encodeURIComponent(value);
|
|
183
179
|
}
|
|
184
180
|
//# sourceMappingURL=Utils.js.map
|
package/dist/Utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @packageDocumentation\n * @module Utils\n */\n\nimport { type AnySite, BooruError, sites } from './Constants'\n\nimport { XMLParser } from 'fast-xml-parser'\n\n/**\n * Check if `site` is a supported site (and check if it's an alias and return the sites's true name)\n *\n * @param {String} domain The site to resolveSite\n * @return {String?} null if site is not supported, the site otherwise\n */\nexport function resolveSite(domain: string): AnySite | null {\n if (typeof domain !== 'string') {\n return null\n }\n\n const lowerDomain = domain.toLowerCase()\n\n for (const [site, info] of Object.entries(sites)) {\n if (\n site === lowerDomain ||\n info.domain === lowerDomain ||\n info.aliases.includes(lowerDomain)\n ) {\n return site as AnySite\n }\n }\n\n return null\n}\n\ninterface XMLPage {\n html: any\n}\n\ninterface XMLPosts {\n post?: any[]\n tag?: any\n}\n\ninterface BooruXML {\n html?: XMLPage\n '!doctype'?: XMLPage\n posts: XMLPosts\n}\n\nconst xmlParser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '',\n})\n\n/**\n * Parses xml to json, which can be used with js\n *\n * @private\n * @param {String} xml The xml to convert to json\n * @return {Object[]} A Promise with an array of objects created from the xml\n */\nexport function jsonfy(xml: string): object[] {\n if (typeof xml === 'object') return xml\n\n const data = xmlParser.parse(xml) as BooruXML\n\n if (data.html || data['!doctype']) {\n // Some boorus return HTML error pages instead of JSON responses on errors\n // So try scraping off what we can in that case\n const page = data.html ?? data['!doctype']?.html\n const message = []\n if (page.body.h1) {\n message.push(page.body.h1)\n }\n\n if (page.body.p) {\n message.push(page.body.p['#text'])\n }\n\n throw new BooruError(\n `The Booru sent back an error: '${message.join(': ')}'`,\n )\n }\n\n if (data.posts.post) {\n return data.posts.post\n }\n\n if (data.posts.tag) {\n return Array.isArray(data.posts.tag) ? data.posts.tag : [data.posts.tag]\n }\n\n return []\n}\n\n/**\n * Try to parse JSON, and then return an empty array if data is an empty string, or the parsed JSON\n *\n * Blame rule34.xxx for returning literally an empty response with HTTP 200 for this\n * @param data The data to try and parse\n * @returns Either the parsed data, or an empty array\n */\nexport function tryParseJSON(data: string): Record<string, unknown>[] {\n if (data === '') {\n return []\n }\n\n return JSON.parse(data)\n}\n\n/**\n * Yay fisher-bates\n * Taken from http://stackoverflow.com/a/2450976\n *\n * @private\n * @param {Array} array Array of something\n * @return {Array} Shuffled array of something\n */\nexport function shuffle<T>(array: T[]): T[] {\n let currentIndex: number = array.length\n let temporaryValue: T\n let randomIndex: number\n\n while (currentIndex !== 0) {\n randomIndex = Math.floor(Math.random() * currentIndex)\n currentIndex -= 1\n\n temporaryValue = array[currentIndex]\n array[currentIndex] = array[randomIndex]\n array[randomIndex] = temporaryValue\n }\n\n return array\n}\n\n// Thanks mdn and damnit derpibooru\n/**\n * Generate a random int between [min, max]\n *\n * @private\n * @param {Number} min The minimum (inclusive)\n * @param {Number} max The maximum (inclusive)\n */\nexport function randInt(min: number, max: number): number {\n const nmin = Math.ceil(min)\n const nmax = Math.floor(max)\n return Math.floor(Math.random() * (nmax - nmin + 1)) + nmin\n}\n\n/**\n * Performs some basic search validation\n *\n * @private\n * @param {String} site The site to resolve\n * @param {Number|String} limit The limit for the amount of images to fetch\n */\nexport function validateSearchParams(\n site: string,\n limit: number | string,\n): { site: string; limit: number } {\n const resolvedSite = resolveSite(site)\n\n const resolvedLimit =\n typeof limit !== 'number' ? Number.parseInt(limit, 10) : limit\n\n if (resolvedSite === null) {\n throw new BooruError('Site not supported')\n }\n\n if (typeof limit !== 'number' || Number.isNaN(limit)) {\n throw new BooruError('`limit` should be an int')\n }\n\n return { site: resolvedSite, limit: resolvedLimit }\n}\n\n/**\n * Finds the matching strings between two arrays\n *\n * @private\n * @param {String[]} arr1 The first array\n * @param {String[]} arr2 The second array\n * @return {String[]} The shared strings between the arrays\n */\nexport function compareArrays(arr1: string[], arr2: string[]): string[] {\n return arr1.filter((e1) =>\n arr2.some((e2) => e1.toLowerCase() === e2.toLowerCase()),\n )\n}\n\ntype URIEncodable = string | number | boolean\ntype QueryValue = URIEncodable | URIEncodable[]\n\ninterface QuerystringOptions {\n arrayJoin?: string\n}\n\ninterface EncodeURIQueryValueOptions {\n arrayJoin?: string\n}\n\n/**\n * Turns an object into a query string, correctly encoding uri components\n *\n * @example\n * const options = { page: 10, limit: 100 }\n * const query = querystring(options) // 'page=10&limit=100'\n * console.log(`https://example.com?${query}`)\n *\n * @param query An object with key/value pairs that will be turned into a string\n * @returns A string that can be appended to a url (after `?`)\n */\nexport function querystring(\n query: Record<string, QueryValue>,\n { arrayJoin = '+' }: QuerystringOptions = {},\n): string {\n return Object.entries(query)\n .map(\n ([key, value]) =>\n `${encodeURIComponent(key)}=${encodeURIQueryValue(value, {\n arrayJoin,\n })}`,\n )\n .join('&')\n}\n\n/**\n * Encodes a single value or an array of values to be usable in as a URI component,\n * joining array elements with '+'\n * @param value The value to encode\n * @returns An encoded value that can be passed to a querystring\n */\nexport function encodeURIQueryValue(\n value: QueryValue,\n { arrayJoin = '+' }: EncodeURIQueryValueOptions = {},\n): string {\n if (Array.isArray(value)) {\n return value.map(encodeURIComponent).join(arrayJoin)\n }\n\n return encodeURIComponent(value)\n}\n"]}
|
package/dist/boorus/Booru.d.ts
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* @module Boorus
|
|
4
4
|
*/
|
|
5
|
-
import InternalSearchParameters from '../structures/InternalSearchParameters';
|
|
6
|
-
import SearchParameters from '../structures/SearchParameters';
|
|
5
|
+
import type InternalSearchParameters from '../structures/InternalSearchParameters';
|
|
6
|
+
import type SearchParameters from '../structures/SearchParameters';
|
|
7
7
|
import SearchResults from '../structures/SearchResults';
|
|
8
|
-
import Site from '../structures/Site';
|
|
8
|
+
import type Site from '../structures/Site';
|
|
9
9
|
export type BooruCredentials = Record<string, string>;
|
|
10
10
|
interface SearchUrlParams {
|
|
11
11
|
tags: string[];
|
|
@@ -36,7 +36,7 @@ export declare class Booru {
|
|
|
36
36
|
/** The site object representing this booru */
|
|
37
37
|
site: Site;
|
|
38
38
|
/** The credentials to use for this booru */
|
|
39
|
-
credentials?: BooruCredentials;
|
|
39
|
+
credentials?: BooruCredentials | undefined;
|
|
40
40
|
/**
|
|
41
41
|
* Create a new booru from a site
|
|
42
42
|
*
|
|
@@ -89,3 +89,4 @@ export declare class Booru {
|
|
|
89
89
|
protected parseSearchResult(result: any, { fakeLimit, tags, limit, random, page, showUnavailable, }: InternalSearchParameters): SearchResults;
|
|
90
90
|
}
|
|
91
91
|
export default Booru;
|
|
92
|
+
//# sourceMappingURL=Booru.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Booru.d.ts","sourceRoot":"","sources":["../../src/boorus/Booru.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,wBAAwB,MAAM,wCAAwC,CAAA;AAElF,OAAO,KAAK,gBAAgB,MAAM,gCAAgC,CAAA;AAClE,OAAO,aAAa,MAAM,6BAA6B,CAAA;AACvD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAS1C,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAErD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAUD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,KAAK;IAChB,8BAA8B;IACvB,MAAM,EAAE,MAAM,CAAA;IACrB,8CAA8C;IACvC,IAAI,EAAE,IAAI,CAAA;IACjB,4CAA4C;IACrC,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAEjD;;;;;;OAMG;gBACS,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,gBAAgB;IAYtD,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;IAQ1D;;;;;OAKG;IACU,MAAM,CACjB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,EACE,KAAS,EACT,MAAc,EACd,IAAQ,EACR,eAAuB,GACxB,GAAE,gBAAqB,GACvB,OAAO,CAAC,aAAa,CAAC;IA4BzB;;;;;OAKG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAU5C;;;;;;;OAOG;cACa,eAAe,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,EACE,GAAU,EACV,KAAS,EACT,MAAc,EACd,IAAQ,GACT,GAAE,wBAA6B,GAC/B,OAAO,CAAC,GAAG,CAAC;IA2Df;;;;;;;OAOG;IACH,YAAY,CAAC,EACX,IAAS,EACT,KAAW,EACX,IAAQ,GACT,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,MAAM;IAIzC;;;;;;;OAOG;IACH,SAAS,CAAC,iBAAiB,CACzB,MAAM,EAAE,GAAG,EACX,EACE,SAAS,EACT,IAAI,EACJ,KAAK,EACL,MAAM,EACN,IAAI,EACJ,eAAe,GAChB,EAAE,wBAAwB,GAC1B,aAAa;CAsDjB;AAED,eAAe,KAAK,CAAA"}
|
package/dist/boorus/Booru.js
CHANGED
|
@@ -66,9 +66,7 @@ class Booru {
|
|
|
66
66
|
if (!Array.isArray(tags)) {
|
|
67
67
|
return [tags];
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
return tags.slice();
|
|
71
|
-
}
|
|
69
|
+
return tags.slice();
|
|
72
70
|
}
|
|
73
71
|
/**
|
|
74
72
|
* Search for images on this booru
|
|
@@ -99,9 +97,7 @@ class Booru {
|
|
|
99
97
|
if (err instanceof Error) {
|
|
100
98
|
throw new Constants_1.BooruError(err);
|
|
101
99
|
}
|
|
102
|
-
|
|
103
|
-
throw err;
|
|
104
|
-
}
|
|
100
|
+
throw err;
|
|
105
101
|
}
|
|
106
102
|
}
|
|
107
103
|
/**
|
|
@@ -111,7 +107,7 @@ class Booru {
|
|
|
111
107
|
* @return {String} The url to the post
|
|
112
108
|
*/
|
|
113
109
|
postView(id) {
|
|
114
|
-
if (typeof id === 'string' && Number.isNaN(parseInt(id, 10))) {
|
|
110
|
+
if (typeof id === 'string' && Number.isNaN(Number.parseInt(id, 10))) {
|
|
115
111
|
throw new Constants_1.BooruError(`Not a valid id for postView: ${id}`);
|
|
116
112
|
}
|
|
117
113
|
return `http${this.site.insecure ? '' : 's'}://${this.domain}${this.site.api.postView}${id}`;
|
|
@@ -127,18 +123,20 @@ class Booru {
|
|
|
127
123
|
async doSearchRequest(tags, { uri = null, limit = 1, random = false, page = 0, } = {}) {
|
|
128
124
|
// Used for random on sites without order:random
|
|
129
125
|
let fakeLimit;
|
|
126
|
+
let searchTags = tags.slice();
|
|
130
127
|
if (random) {
|
|
131
128
|
if (this.site.random) {
|
|
132
|
-
|
|
129
|
+
searchTags.push('order:random');
|
|
133
130
|
}
|
|
134
131
|
else {
|
|
135
132
|
fakeLimit = 100;
|
|
136
133
|
}
|
|
137
134
|
}
|
|
138
135
|
if (this.site.defaultTags) {
|
|
139
|
-
|
|
136
|
+
searchTags = searchTags.concat(this.site.defaultTags.filter((v) => !searchTags.includes(v)));
|
|
140
137
|
}
|
|
141
|
-
const fetchuri = uri
|
|
138
|
+
const fetchuri = uri ??
|
|
139
|
+
this.getSearchUrl({ tags: searchTags, limit: fakeLimit ?? limit, page });
|
|
142
140
|
const options = Constants_1.defaultOptions;
|
|
143
141
|
const xml = this.site.type === 'xml';
|
|
144
142
|
try {
|
|
@@ -154,13 +152,11 @@ class Booru {
|
|
|
154
152
|
const posts = xml ? (0, Utils_1.jsonfy)(data) : (0, Utils_1.tryParseJSON)(data);
|
|
155
153
|
if (!response.ok) {
|
|
156
154
|
throw new Constants_1.BooruError(`Received HTTP ${response.status} ` +
|
|
157
|
-
`from booru: '${posts.error
|
|
158
|
-
posts.message
|
|
155
|
+
`from booru: '${posts.error ??
|
|
156
|
+
posts.message ??
|
|
159
157
|
JSON.stringify(posts)}'`);
|
|
160
158
|
}
|
|
161
|
-
|
|
162
|
-
return posts;
|
|
163
|
-
}
|
|
159
|
+
return posts;
|
|
164
160
|
}
|
|
165
161
|
catch (err) {
|
|
166
162
|
if (err.type === 'invalid-json')
|
|
@@ -188,42 +184,42 @@ class Booru {
|
|
|
188
184
|
* @return {SearchResults} The results of this search
|
|
189
185
|
*/
|
|
190
186
|
parseSearchResult(result, { fakeLimit, tags, limit, random, page, showUnavailable, }) {
|
|
191
|
-
|
|
192
|
-
|
|
187
|
+
let outResult = result;
|
|
188
|
+
if (outResult.success === false) {
|
|
189
|
+
throw new Constants_1.BooruError(outResult.message ?? outResult.reason);
|
|
193
190
|
}
|
|
194
191
|
// Gelbooru
|
|
195
|
-
if (
|
|
196
|
-
const attributes =
|
|
197
|
-
if (attributes.count === '0' || !
|
|
198
|
-
|
|
192
|
+
if (outResult['@attributes']) {
|
|
193
|
+
const attributes = outResult['@attributes'];
|
|
194
|
+
if (attributes.count === '0' || !outResult.post) {
|
|
195
|
+
outResult = [];
|
|
199
196
|
}
|
|
200
|
-
else if (Array.isArray(
|
|
201
|
-
|
|
197
|
+
else if (Array.isArray(outResult.post)) {
|
|
198
|
+
outResult = outResult.post;
|
|
202
199
|
}
|
|
203
200
|
else {
|
|
204
|
-
|
|
201
|
+
outResult = [outResult.post];
|
|
205
202
|
}
|
|
206
203
|
}
|
|
207
|
-
if (
|
|
208
|
-
|
|
204
|
+
if (outResult.posts) {
|
|
205
|
+
outResult = outResult.posts;
|
|
209
206
|
}
|
|
210
|
-
if (
|
|
211
|
-
|
|
207
|
+
if (outResult.images) {
|
|
208
|
+
outResult = outResult.images;
|
|
212
209
|
}
|
|
213
210
|
let r;
|
|
214
211
|
// If gelbooru/other booru decides to return *nothing* instead of an empty array
|
|
215
|
-
if (
|
|
212
|
+
if (outResult === '') {
|
|
216
213
|
r = [];
|
|
217
214
|
}
|
|
218
215
|
else if (fakeLimit) {
|
|
219
|
-
r = (0, Utils_1.shuffle)(
|
|
216
|
+
r = (0, Utils_1.shuffle)(outResult);
|
|
220
217
|
}
|
|
221
|
-
else if (
|
|
218
|
+
else if (outResult.constructor === Object) {
|
|
222
219
|
// For XML based sites
|
|
223
|
-
r = [
|
|
220
|
+
r = [outResult];
|
|
224
221
|
}
|
|
225
|
-
|
|
226
|
-
let posts = results
|
|
222
|
+
let posts = (r ?? outResult)
|
|
227
223
|
.slice(0, limit)
|
|
228
224
|
.map((v) => new Post_1.default(v, this));
|
|
229
225
|
const options = { limit, random, page, showUnavailable };
|
package/dist/boorus/Booru.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Booru.js","sourceRoot":"","sources":["../../src/boorus/Booru.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Booru.js","sourceRoot":"","sources":["../../src/boorus/Booru.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @packageDocumentation\n * @module Boorus\n */\n\nimport { BooruError, defaultOptions, searchURI } from '../Constants'\nimport { jsonfy, resolveSite, shuffle, tryParseJSON } from '../Utils'\n\nimport { fetch } from 'undici'\nimport type InternalSearchParameters from '../structures/InternalSearchParameters'\nimport Post from '../structures/Post'\nimport type SearchParameters from '../structures/SearchParameters'\nimport SearchResults from '../structures/SearchResults'\nimport type Site from '../structures/Site'\n\n// Shut up the compiler\n// This attempts to find and use the native browser fetch, if possible\n// Fixes https://github.com/AtoraSuunva/booru/issues/51\ndeclare const window: any\nconst resolvedFetch: typeof fetch =\n typeof window !== 'undefined' ? window.fetch.bind(window) : fetch\n\nexport type BooruCredentials = Record<string, string>\n\ninterface SearchUrlParams {\n tags: string[]\n limit: number\n page: number\n}\n\n/*\n - new Booru\n => Constructor, params {name, {nsfw, {search, postView, ...}, random}, {apiTokens...}}\n => .search([tags...], {limit, random})\n => .postView(id)\n => .site\n */\n\n/**\n * A basic, JSON booru\n * @example\n * ```\n * const Booru = require('booru')\n * // Aliases are supported\n * const e9 = Booru('e9')\n *\n * // You can then search the site\n * const imgs = await e9.search(['cat', 'cute'], {limit: 3})\n *\n * // And use the images\n * imgs.forEach(i => console.log(i.fileUrl))\n *\n * // Or access other methods on the Booru\n * e9.postView(imgs[0].id)\n * ```\n */\nexport class Booru {\n /** The domain of the booru */\n public domain: string\n /** The site object representing this booru */\n public site: Site\n /** The credentials to use for this booru */\n public credentials?: BooruCredentials | undefined\n\n /**\n * Create a new booru from a site\n *\n * @private\n * @param site The site to use\n * @param credentials Credentials for the API (Currently not used)\n */\n constructor(site: Site, credentials?: BooruCredentials) {\n const domain = resolveSite(site.domain)\n\n if (domain === null) {\n throw new Error(`Invalid site passed: ${site.domain}`)\n }\n\n this.domain = domain\n this.site = site\n this.credentials = credentials\n }\n\n protected normalizeTags(tags: string | string[]): string[] {\n if (!Array.isArray(tags)) {\n return [tags]\n }\n\n return tags.slice()\n }\n\n /**\n * Search for images on this booru\n * @param {String|String[]} tags The tag(s) to search for\n * @param {SearchParameters} searchArgs The arguments for the search\n * @return {Promise<SearchResults>} The results as an array of Posts\n */\n public async search(\n tags: string | string[],\n {\n limit = 1,\n random = false,\n page = 0,\n showUnavailable = false,\n }: SearchParameters = {},\n ): Promise<SearchResults> {\n const fakeLimit: number = random && !this.site.random ? 100 : 0\n const tagArray = this.normalizeTags(tags)\n\n try {\n const searchResult = await this.doSearchRequest(tagArray, {\n limit,\n random,\n page,\n showUnavailable,\n })\n return this.parseSearchResult(searchResult, {\n fakeLimit,\n tags: tagArray,\n limit,\n random,\n page,\n showUnavailable,\n })\n } catch (err) {\n if (err instanceof Error) {\n throw new BooruError(err)\n }\n\n throw err\n }\n }\n\n /**\n * Gets the url you'd see in your browser from a post id for this booru\n *\n * @param {String} id The id to get the postView for\n * @return {String} The url to the post\n */\n public postView(id: string | number): string {\n if (typeof id === 'string' && Number.isNaN(Number.parseInt(id, 10))) {\n throw new BooruError(`Not a valid id for postView: ${id}`)\n }\n\n return `http${this.site.insecure ? '' : 's'}://${this.domain}${\n this.site.api.postView\n }${id}`\n }\n\n /**\n * The internal & common searching logic, pls dont use this use .search instead\n *\n * @protected\n * @param {String[]|String} tags The tags to search with\n * @param {InternalSearchParameters} searchArgs The arguments for the search\n * @return {Promise<Object>}\n */\n protected async doSearchRequest(\n tags: string[],\n {\n uri = null,\n limit = 1,\n random = false,\n page = 0,\n }: InternalSearchParameters = {},\n ): Promise<any> {\n // Used for random on sites without order:random\n let fakeLimit: number | undefined\n let searchTags = tags.slice()\n\n if (random) {\n if (this.site.random) {\n searchTags.push('order:random')\n } else {\n fakeLimit = 100\n }\n }\n\n if (this.site.defaultTags) {\n searchTags = searchTags.concat(\n this.site.defaultTags.filter((v) => !searchTags.includes(v)),\n )\n }\n\n const fetchuri =\n uri ??\n this.getSearchUrl({ tags: searchTags, limit: fakeLimit ?? limit, page })\n const options = defaultOptions\n const xml = this.site.type === 'xml'\n\n try {\n const response = await resolvedFetch(fetchuri, options)\n\n // Check for CloudFlare ratelimiting\n if (response.status === 503) {\n const body = await response.clone().text()\n if (body.includes('cf-browser-verification')) {\n throw new BooruError(\n \"Received a CloudFlare browser verification request. Can't proceed.\",\n )\n }\n }\n\n const data = await response.text()\n const posts = xml ? jsonfy(data) : tryParseJSON(data)\n\n if (!response.ok) {\n throw new BooruError(\n `Received HTTP ${response.status} ` +\n `from booru: '${\n (posts as any).error ??\n (posts as any).message ??\n JSON.stringify(posts)\n }'`,\n )\n }\n\n return posts\n } catch (err) {\n if ((err as any).type === 'invalid-json') return ''\n throw err\n }\n }\n\n /**\n * Generates a URL to search the booru with, mostly for debugging purposes\n * @param opt\n * @param {string[]} [opt.tags] The tags to search for\n * @param {number} [opt.limit] The limit of results to return\n * @param {number} [opt.page] The page of results to return\n * @returns A URL to search the booru\n */\n getSearchUrl({\n tags = [],\n limit = 100,\n page = 1,\n }: Partial<SearchUrlParams> = {}): string {\n return searchURI(this.site, tags, limit, page, this.credentials)\n }\n\n /**\n * Parse the response from the booru\n *\n * @protected\n * @param {Object} result The response of the booru\n * @param {InternalSearchParameters} searchArgs The arguments used for the search\n * @return {SearchResults} The results of this search\n */\n protected parseSearchResult(\n result: any,\n {\n fakeLimit,\n tags,\n limit,\n random,\n page,\n showUnavailable,\n }: InternalSearchParameters,\n ): SearchResults {\n let outResult = result\n\n if (outResult.success === false) {\n throw new BooruError(outResult.message ?? outResult.reason)\n }\n\n // Gelbooru\n if (outResult['@attributes']) {\n const attributes = outResult['@attributes']\n\n if (attributes.count === '0' || !outResult.post) {\n outResult = []\n } else if (Array.isArray(outResult.post)) {\n outResult = outResult.post\n } else {\n outResult = [outResult.post]\n }\n }\n\n if (outResult.posts) {\n outResult = outResult.posts\n }\n\n if (outResult.images) {\n outResult = outResult.images\n }\n\n let r: string[] | undefined\n // If gelbooru/other booru decides to return *nothing* instead of an empty array\n if (outResult === '') {\n r = []\n } else if (fakeLimit) {\n r = shuffle(outResult)\n } else if (outResult.constructor === Object) {\n // For XML based sites\n r = [outResult]\n }\n\n let posts: Post[] = (r ?? outResult)\n .slice(0, limit)\n .map((v: any) => new Post(v, this))\n const options = { limit, random, page, showUnavailable }\n\n if (tags === undefined) {\n tags = []\n }\n\n if (!showUnavailable) {\n posts = posts.filter((p) => p.available)\n }\n\n return new SearchResults(posts, tags, options, this)\n }\n}\n\nexport default Booru\n"]}
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* @module Boorus
|
|
4
4
|
*/
|
|
5
|
-
import SearchParameters from '../structures/SearchParameters';
|
|
6
|
-
import SearchResults from '../structures/SearchResults';
|
|
7
|
-
import
|
|
8
|
-
import Booru, { BooruCredentials } from './Booru';
|
|
5
|
+
import type SearchParameters from '../structures/SearchParameters';
|
|
6
|
+
import type SearchResults from '../structures/SearchResults';
|
|
7
|
+
import Booru from './Booru';
|
|
9
8
|
/**
|
|
10
9
|
* A class designed for Derpibooru
|
|
11
10
|
* >:(
|
|
@@ -14,12 +13,7 @@ import Booru, { BooruCredentials } from './Booru';
|
|
|
14
13
|
* @inheritDoc
|
|
15
14
|
*/
|
|
16
15
|
export default class Derpibooru extends Booru {
|
|
17
|
-
/**
|
|
18
|
-
* Create a new booru for Derpibooru from a site
|
|
19
|
-
* @param site The site to use
|
|
20
|
-
* @param credentials Credentials for the API (Currently not used)
|
|
21
|
-
*/
|
|
22
|
-
constructor(site: Site, credentials?: BooruCredentials);
|
|
23
16
|
/** @inheritDoc */
|
|
24
17
|
search(tags: string[] | string, { limit, random, page }?: SearchParameters): Promise<SearchResults>;
|
|
25
18
|
}
|
|
19
|
+
//# sourceMappingURL=Derpibooru.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Derpibooru.d.ts","sourceRoot":"","sources":["../../src/boorus/Derpibooru.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,gBAAgB,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,KAAK;IAC3C,kBAAkB;IACF,MAAM,CACpB,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EACvB,EAAE,KAAS,EAAE,MAAc,EAAE,IAAQ,EAAE,GAAE,gBAAqB,GAC7D,OAAO,CAAC,aAAa,CAAC;CA6B1B"}
|
|
@@ -17,14 +17,6 @@ const Booru_1 = __importDefault(require("./Booru"));
|
|
|
17
17
|
* @inheritDoc
|
|
18
18
|
*/
|
|
19
19
|
class Derpibooru extends Booru_1.default {
|
|
20
|
-
/**
|
|
21
|
-
* Create a new booru for Derpibooru from a site
|
|
22
|
-
* @param site The site to use
|
|
23
|
-
* @param credentials Credentials for the API (Currently not used)
|
|
24
|
-
*/
|
|
25
|
-
constructor(site, credentials) {
|
|
26
|
-
super(site, credentials);
|
|
27
|
-
}
|
|
28
20
|
/** @inheritDoc */
|
|
29
21
|
search(tags, { limit = 1, random = false, page = 0 } = {}) {
|
|
30
22
|
const tagArray = this.normalizeTags(tags);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Derpibooru.js","sourceRoot":"","sources":["../../src/boorus/Derpibooru.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAEH,4CAAyC;
|
|
1
|
+
{"version":3,"file":"Derpibooru.js","sourceRoot":"","sources":["../../src/boorus/Derpibooru.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAEH,4CAAyC;AAGzC,oDAA2B;AAE3B;;;;;;GAMG;AACH,MAAqB,UAAW,SAAQ,eAAK;IAC3C,kBAAkB;IACF,MAAM,CACpB,IAAuB,EACvB,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,KAAuB,EAAE;QAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAEzC,mCAAmC;QACnC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;QACnB,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,CAAA;QAET,MAAM,GAAG,GACP,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAE5D,OAAO,KAAK;aACT,eAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACV,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE;YACzB,SAAS,EAAE,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK;YACL,MAAM;YACN,IAAI;SACL,CAAC,CACH;aACA,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,sBAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;CACF;AAlCD,6BAkCC","sourcesContent":["/**\n * @packageDocumentation\n * @module Boorus\n */\n\nimport { BooruError } from '../Constants'\nimport type SearchParameters from '../structures/SearchParameters'\nimport type SearchResults from '../structures/SearchResults'\nimport Booru from './Booru'\n\n/**\n * A class designed for Derpibooru\n * >:(\n * @private\n * @extends Booru\n * @inheritDoc\n */\nexport default class Derpibooru extends Booru {\n /** @inheritDoc */\n public override search(\n tags: string[] | string,\n { limit = 1, random = false, page = 0 }: SearchParameters = {},\n ): Promise<SearchResults> {\n const tagArray = this.normalizeTags(tags)\n\n // For any image, you must supply *\n if (tagArray[0] === undefined) {\n tagArray[0] = '*'\n }\n\n // Derpibooru offsets the pages by 1\n page += 1\n\n const uri =\n this.getSearchUrl({ tags: tagArray, limit, page }) +\n (random && this.site.random === 'string' ? `&${this.site.random}` : '') +\n (this.credentials ? `&key=${this.credentials.token}` : '')\n\n return super\n .doSearchRequest(tagArray, { limit, random, page, uri })\n .then((r) =>\n super.parseSearchResult(r, {\n fakeLimit: 0,\n tags: tagArray,\n limit,\n random,\n page,\n }),\n )\n .catch((e) => Promise.reject(new BooruError(e)))\n }\n}\n"]}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* @module Boorus
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
6
|
-
import Booru, { BooruCredentials } from './Booru';
|
|
5
|
+
import Booru from './Booru';
|
|
7
6
|
/**
|
|
8
7
|
* A class designed for Xml-returning boorus
|
|
9
8
|
*
|
|
@@ -11,10 +10,5 @@ import Booru, { BooruCredentials } from './Booru';
|
|
|
11
10
|
* @inheritDoc
|
|
12
11
|
*/
|
|
13
12
|
export default class XmlBooru extends Booru {
|
|
14
|
-
/**
|
|
15
|
-
* Create a new booru using XML from a site
|
|
16
|
-
* @param {Site} site The site to use
|
|
17
|
-
* @param {Object?} credentials Credentials for the API (Currently not used)
|
|
18
|
-
*/
|
|
19
|
-
constructor(site: Site, credentials?: BooruCredentials);
|
|
20
13
|
}
|
|
14
|
+
//# sourceMappingURL=XmlBooru.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XmlBooru.d.ts","sourceRoot":"","sources":["../../src/boorus/XmlBooru.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK;CAAG"}
|
package/dist/boorus/XmlBooru.js
CHANGED
|
@@ -15,14 +15,6 @@ const Booru_1 = __importDefault(require("./Booru"));
|
|
|
15
15
|
* @inheritDoc
|
|
16
16
|
*/
|
|
17
17
|
class XmlBooru extends Booru_1.default {
|
|
18
|
-
/**
|
|
19
|
-
* Create a new booru using XML from a site
|
|
20
|
-
* @param {Site} site The site to use
|
|
21
|
-
* @param {Object?} credentials Credentials for the API (Currently not used)
|
|
22
|
-
*/
|
|
23
|
-
constructor(site, credentials) {
|
|
24
|
-
super(site, credentials);
|
|
25
|
-
}
|
|
26
18
|
}
|
|
27
19
|
exports.default = XmlBooru;
|
|
28
20
|
//# sourceMappingURL=XmlBooru.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlBooru.js","sourceRoot":"","sources":["../../src/boorus/XmlBooru.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;
|
|
1
|
+
{"version":3,"file":"XmlBooru.js","sourceRoot":"","sources":["../../src/boorus/XmlBooru.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAEH,oDAA2B;AAE3B;;;;;GAKG;AACH,MAAqB,QAAS,SAAQ,eAAK;CAAG;AAA9C,2BAA8C","sourcesContent":["/**\n * @packageDocumentation\n * @module Boorus\n */\n\nimport Booru from './Booru'\n\n/**\n * A class designed for Xml-returning boorus\n *\n * @extends Booru\n * @inheritDoc\n */\nexport default class XmlBooru extends Booru {}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* @module Index
|
|
4
4
|
*/
|
|
5
|
-
import Booru, { BooruCredentials } from './boorus/Booru';
|
|
5
|
+
import Booru, { type BooruCredentials } from './boorus/Booru';
|
|
6
6
|
import Derpibooru from './boorus/Derpibooru';
|
|
7
7
|
import XmlBooru from './boorus/XmlBooru';
|
|
8
8
|
import Post from './structures/Post';
|
|
9
|
-
import SearchParameters from './structures/SearchParameters';
|
|
9
|
+
import type SearchParameters from './structures/SearchParameters';
|
|
10
10
|
import SearchResults from './structures/SearchResults';
|
|
11
11
|
import Site from './structures/Site';
|
|
12
12
|
/**
|
|
@@ -54,3 +54,4 @@ export { BooruError, sites } from './Constants';
|
|
|
54
54
|
export { resolveSite } from './Utils';
|
|
55
55
|
export { Derpibooru, Post, SearchResults, Site, XmlBooru };
|
|
56
56
|
export type { BooruCredentials, SearchParameters };
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,UAAU,MAAM,qBAAqB,CAAA;AAC5C,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,KAAK,gBAAgB,MAAM,+BAA+B,CAAA;AACjE,OAAO,aAAa,MAAM,4BAA4B,CAAA;AACtD,OAAO,IAAI,MAAM,mBAAmB,CAAA;AAwBpC;;;;;;;GAOG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,gBAAgB,GAAG,KAAK,CASzE;AAED,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAA;AAClC,eAAe,YAAY,CAAA;AAE3B,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,WAAW,CAAC,EAAE,gBAAgB,CAAA;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,EAAE,GAAG,MAAW,EAC5B,EAAE,KAAS,EAAE,MAAc,EAAE,IAAQ,EAAE,WAAgB,EAAE,GAAE,WAAgB,GAC1E,OAAO,CAAC,aAAa,CAAC,CA4BxB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAGxD;AAED,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC1D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,8 @@ exports.forSite = booruForSite;
|
|
|
12
12
|
exports.search = search;
|
|
13
13
|
exports.commonfy = commonfy;
|
|
14
14
|
const Constants_1 = require("./Constants");
|
|
15
|
-
const
|
|
15
|
+
const node_util_1 = require("node:util");
|
|
16
|
+
const Utils_1 = require("./Utils");
|
|
16
17
|
const Booru_1 = __importDefault(require("./boorus/Booru"));
|
|
17
18
|
const Derpibooru_1 = __importDefault(require("./boorus/Derpibooru"));
|
|
18
19
|
exports.Derpibooru = Derpibooru_1.default;
|
|
@@ -24,7 +25,6 @@ const SearchResults_1 = __importDefault(require("./structures/SearchResults"));
|
|
|
24
25
|
exports.SearchResults = SearchResults_1.default;
|
|
25
26
|
const Site_1 = __importDefault(require("./structures/Site"));
|
|
26
27
|
exports.Site = Site_1.default;
|
|
27
|
-
const Utils_1 = require("./Utils");
|
|
28
28
|
const BooruTypes = {
|
|
29
29
|
derpi: Derpibooru_1.default,
|
|
30
30
|
xml: XmlBooru_1.default,
|
|
@@ -77,7 +77,7 @@ exports.default = booruForSite;
|
|
|
77
77
|
function search(site, tags = [], { limit = 1, random = false, page = 0, credentials = {} } = {}) {
|
|
78
78
|
const rSite = (0, Utils_1.resolveSite)(site);
|
|
79
79
|
if (typeof limit === 'string') {
|
|
80
|
-
limit = parseInt(limit, 10);
|
|
80
|
+
limit = Number.parseInt(limit, 10);
|
|
81
81
|
}
|
|
82
82
|
if (rSite === null) {
|
|
83
83
|
throw new Constants_1.BooruError('Site not supported');
|
|
@@ -96,8 +96,7 @@ function search(site, tags = [], { limit = 1, random = false, page = 0, credenti
|
|
|
96
96
|
booruCache[rSite].credentials = credentials;
|
|
97
97
|
return booruCache[rSite].search(tags, { limit, random, page });
|
|
98
98
|
}
|
|
99
|
-
|
|
100
|
-
const deprecatedCommonfy = (0, util_1.deprecate)(() => { }, 'Common is now deprecated, just access the properties directly');
|
|
99
|
+
const deprecatedCommonfy = (0, node_util_1.deprecate)(() => { }, 'Common is now deprecated, just access the properties directly');
|
|
101
100
|
/**
|
|
102
101
|
* Deprecated, now a noop
|
|
103
102
|
* <p>This will be removed *soon* please stop using it</p>
|