diff options
author | RaindropsSys <raindrops@equestria.dev> | 2024-06-17 20:17:10 +0200 |
---|---|---|
committer | RaindropsSys <raindrops@equestria.dev> | 2024-06-17 20:17:10 +0200 |
commit | d211ab6d26ff8caf4dcb7352c59b5f43df3526e0 (patch) | |
tree | 339c2cea5600bb50271756fc4f496f0fe405b1ab | |
parent | 7bf016d82110d45de4287ee91b5b1a1a2e75d45d (diff) | |
download | libfaunerie-d211ab6d26ff8caf4dcb7352c59b5f43df3526e0.tar.gz libfaunerie-d211ab6d26ff8caf4dcb7352c59b5f43df3526e0.tar.bz2 libfaunerie-d211ab6d26ff8caf4dcb7352c59b5f43df3526e0.zip |
Remove all "any"s
-rwxr-xr-x | .idea/inspectionProfiles/Project_Default.xml | 14 | ||||
-rwxr-xr-x | package-lock.json | 19 | ||||
-rwxr-xr-x | package.json | 9 | ||||
-rwxr-xr-x | src/IPrisbeamImage.ts | 1 | ||||
-rwxr-xr-x | src/IPrisbeamOption.ts (renamed from src/PrisbeamOptions.ts) | 2 | ||||
-rwxr-xr-x | src/IPrisbeamTag.ts | 1 | ||||
-rwxr-xr-x | src/IPrisbeamUpdaterGeneric.ts | 1 | ||||
-rwxr-xr-x | src/Prisbeam.ts | 28 | ||||
-rwxr-xr-x | src/PrisbeamFrontend.ts | 13 | ||||
-rwxr-xr-x | src/PrisbeamPropertyStore.ts | 4 | ||||
-rwxr-xr-x | src/PrisbeamSearch.ts | 17 | ||||
-rwxr-xr-x | src/PrisbeamUpdater.ts | 28 | ||||
-rwxr-xr-x | src/SQLiteInstance.ts | 4 |
13 files changed, 90 insertions, 51 deletions
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100755 index 0000000..37308ce --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,14 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="DuplicatedCode" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="PyPep8Inspection" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="PyPep8NamingInspection" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="INFORMATION" enabled_by_default="true" /> + <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false"> + <option name="processCode" value="true" /> + <option name="processLiterals" value="true" /> + <option name="processComments" value="true" /> + </inspection_tool> + </profile> +</component>
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 65b9a12..41308f8 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,16 @@ { "name": "libprisbeam", - "version": "2.3.0", + "version": "2.3.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "libprisbeam", - "version": "2.3.0", + "version": "2.3.3", "hasInstallScript": true, + "dependencies": { + "@types/sqlite3": "^3.1.11" + }, "devDependencies": { "@types/node": "^20.12.8", "typescript": "^5.4.5" @@ -17,11 +20,18 @@ "version": "20.12.8", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/sqlite3": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.11.tgz", + "integrity": "sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -38,8 +48,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" } } } diff --git a/package.json b/package.json index 78c6cc5..f7b83d1 100755 --- a/package.json +++ b/package.json @@ -1,13 +1,16 @@ { "name": "libprisbeam", - "version": "2.3.3", + "version": "2.3.4", "main": "index.js", "scripts": { "install": "tsc", "build": "tsc" }, "devDependencies": { - "typescript": "^5.4.5", - "@types/node": "^20.12.8" + "@types/node": "^20.12.8", + "typescript": "^5.4.5" + }, + "dependencies": { + "@types/sqlite3": "^3.1.11" } } diff --git a/src/IPrisbeamImage.ts b/src/IPrisbeamImage.ts new file mode 100755 index 0000000..763bc8f --- /dev/null +++ b/src/IPrisbeamImage.ts @@ -0,0 +1 @@ +export interface IPrisbeamImage {} diff --git a/src/PrisbeamOptions.ts b/src/IPrisbeamOption.ts index c2fb64b..75a467f 100755 --- a/src/PrisbeamOptions.ts +++ b/src/IPrisbeamOption.ts @@ -1,4 +1,4 @@ -export interface PrisbeamOptions { +export interface IPrisbeamOption { database: string, sqlitePath?: string, cachePath?: string, diff --git a/src/IPrisbeamTag.ts b/src/IPrisbeamTag.ts new file mode 100755 index 0000000..df83443 --- /dev/null +++ b/src/IPrisbeamTag.ts @@ -0,0 +1 @@ +export type IPrisbeamTag = [number, string]; diff --git a/src/IPrisbeamUpdaterGeneric.ts b/src/IPrisbeamUpdaterGeneric.ts new file mode 100755 index 0000000..5be465b --- /dev/null +++ b/src/IPrisbeamUpdaterGeneric.ts @@ -0,0 +1 @@ +export interface IPrisbeamUpdaterGeneric {} diff --git a/src/Prisbeam.ts b/src/Prisbeam.ts index 91ef408..e20d909 100755 --- a/src/Prisbeam.ts +++ b/src/Prisbeam.ts @@ -1,23 +1,26 @@ import {PrisbeamFrontend} from "./PrisbeamFrontend"; -import {PrisbeamOptions} from "./PrisbeamOptions"; +import {IPrisbeamOption} from "./IPrisbeamOption"; import fs from "fs"; import path from "path"; -import {PrisbeamUpdater, VERSION} from "../index"; +import {VERSION} from "../index"; import {PrisbeamPropertyStore} from "./PrisbeamPropertyStore"; +import {Database} from "sqlite3"; +import {SQLiteInstance} from "./SQLiteInstance"; export class Prisbeam { + // noinspection JSUnusedGlobalSymbols public version: string = VERSION; public readonly verbose: boolean; public readonly path: string; readonly sensitiveImageProtocol: boolean; public frontend: PrisbeamFrontend; readonly cache?: string; - private sqlite: any; - private database: any; + private sqlite: SQLiteInstance; + private database: Database; private readonly readOnly: boolean; public propertyStore: PrisbeamPropertyStore; - constructor(options: PrisbeamOptions) { + constructor(options: IPrisbeamOption) { this.verbose = options.verbose ?? true; this.sqlite = require(options.sqlitePath ?? "sqlite3").verbose(); @@ -72,6 +75,7 @@ export class Prisbeam { }); } + // noinspection JSUnusedGlobalSymbols async initialize(restoreBackup: boolean) { if (restoreBackup) { let backups = (await fs.promises.readdir(this.path)).filter(i => i.endsWith(".pbdb") && i !== "current.pbdb"); @@ -116,9 +120,9 @@ export class Prisbeam { this.frontend = new PrisbeamFrontend(this); this.propertyStore = new PrisbeamPropertyStore(this); - this.propertyStore.initialize(); + await this.propertyStore.initialize(); - this.frontend.initialize(); + await this.frontend.initialize(); await this.defragment(); } @@ -126,8 +130,10 @@ export class Prisbeam { await this._sql("VACUUM"); } + // noinspection JSUnusedGlobalSymbols async close() { await new Promise<void>((res) => { + // @ts-ignore this.database.wait(() => { res(); }); @@ -143,12 +149,4 @@ export class Prisbeam { await fs.promises.copyFile(this.cache + "/work.pbdb", this.path + "/current.pbdb"); } } - - /** - * @deprecated Use PrisbeamUpdater instead - */ - async updateFromPreprocessed(preprocessed: string, tags: string, statusUpdateHandler: Function) { - let updater = new PrisbeamUpdater(this); - await updater.updateFromPreprocessed(preprocessed, tags, statusUpdateHandler); - } } diff --git a/src/PrisbeamFrontend.ts b/src/PrisbeamFrontend.ts index 8334809..47506a2 100755 --- a/src/PrisbeamFrontend.ts +++ b/src/PrisbeamFrontend.ts @@ -5,9 +5,11 @@ import zlib from "zlib"; import {PrisbeamListType} from "./PrisbeamListType"; import {Prisbeam} from "../index"; import {SearchError} from "./SearchError"; +import {IPrisbeamImage} from "./IPrisbeamImage"; +import {IPrisbeamTag} from "./IPrisbeamTag"; export class PrisbeamFrontend { - public tags: any[][]; + public tags: IPrisbeamTag[]; public tagsHashed: object; private readonly backend: Prisbeam; readonly searchEngine: PrisbeamSearch; @@ -29,6 +31,7 @@ export class PrisbeamFrontend { } } + // noinspection JSUnusedGlobalSymbols async search(query: string, allowUnknownTags: boolean = false) { try { if (query !== "*") { @@ -52,10 +55,12 @@ export class PrisbeamFrontend { return this.getImageFile(image, type); } - async getImage(id: number | string): Promise<any | null> { + // noinspection JSUnusedGlobalSymbols + async getImage(id: number | string): Promise<IPrisbeamImage | null> { return (await this.imageListResolver(await this.backend._sql("SELECT * FROM images JOIN image_tags ON images.id=image_tags.image_id JOIN image_intensities ON images.id=image_intensities.image_id JOIN image_representations ON images.id=image_representations.image_id WHERE id=" + id)))[0] ?? null; } + // noinspection JSUnusedGlobalSymbols async countImages(): Promise<number> { return ((await this.imageListResolver(await this.backend._sql("SELECT COUNT(*) FROM images")))[0] ?? {})["COUNT(*)"] ?? 0; } @@ -338,7 +343,7 @@ export class PrisbeamFrontend { return list; } - async getAllImages(type: PrisbeamListType = PrisbeamListType.Array): Promise<{} | any[]> { + async getAllImages(type: PrisbeamListType = PrisbeamListType.Array): Promise<{} | IPrisbeamImage[]> { let query = "SELECT * FROM images JOIN image_tags ON images.id=image_tags.image_id JOIN image_intensities ON images.id=image_intensities.image_id JOIN image_representations ON images.id=image_representations.image_id"; if (type === PrisbeamListType.Array) { @@ -360,6 +365,7 @@ export class PrisbeamFrontend { return (await this.backend._sql("SELECT implications FROM tags WHERE name = " + sqlstr(tag)))[0]["implications"].split(",").filter((i: string) => i.trim() !== "").map((i: string) => parseInt(i)); } + // noinspection JSUnusedGlobalSymbols async getImpliedTagIdsFromId(tag: number): Promise<number[]> { return (await this.backend._sql("SELECT implications FROM tags WHERE id = " + tag))[0]["implications"].split(",").filter((i: string) => i.trim() !== "").map((i: string) => parseInt(i)); } @@ -376,6 +382,7 @@ export class PrisbeamFrontend { return r; } + // noinspection JSUnusedGlobalSymbols async getImpliedTagNamesFromId(tag: number): Promise<string[]> { let r = []; let data = (await this.backend._sql("SELECT implications FROM tags WHERE id = " + tag))[0]["implications"].split(",").filter((i: string) => i.trim() !== "").map((i: string) => parseInt(i)); diff --git a/src/PrisbeamPropertyStore.ts b/src/PrisbeamPropertyStore.ts index a7c2e22..35a2673 100755 --- a/src/PrisbeamPropertyStore.ts +++ b/src/PrisbeamPropertyStore.ts @@ -20,6 +20,7 @@ export class PrisbeamPropertyStore { } } + // noinspection JSUnusedGlobalSymbols async setItem(key: string, value: string) { if ((await this.backend._sql("SELECT COUNT(*) FROM metadata WHERE key = " + this.sqlstr(key)))[0]["COUNT(*)"] === 0) { await this.backend._sql('INSERT INTO metadata(key, value) VALUES (' + this.sqlstr(key) + ', ' + this.sqlstr(value) + ')'); @@ -29,6 +30,7 @@ export class PrisbeamPropertyStore { } } + // noinspection JSUnusedGlobalSymbols async removeItem(key: string) { if ((await this.backend._sql("SELECT COUNT(*) FROM metadata WHERE key = " + this.sqlstr(key)))[0]["COUNT(*)"] === 0) { return; @@ -38,6 +40,7 @@ export class PrisbeamPropertyStore { } } + // noinspection JSUnusedGlobalSymbols async getItem(key: string) { if ((await this.backend._sql("SELECT COUNT(*) FROM metadata WHERE key = " + this.sqlstr(key)))[0]["COUNT(*)"] === 0) { return null; @@ -46,6 +49,7 @@ export class PrisbeamPropertyStore { } } + // noinspection JSUnusedGlobalSymbols async clear() { await this.backend._sql("DROP TABLE IF EXISTS metadata"); await this.backend._sql("CREATE TABLE metadata (key TEXT NOT NULL UNIQUE, value LONGTEXT NOT NULL, PRIMARY KEY (key))"); diff --git a/src/PrisbeamSearch.ts b/src/PrisbeamSearch.ts index 395f454..de1a45e 100755 --- a/src/PrisbeamSearch.ts +++ b/src/PrisbeamSearch.ts @@ -1,9 +1,9 @@ import {SearchError} from "./SearchError"; import {PrisbeamFrontend} from "./PrisbeamFrontend"; -export interface PrisbeamSearchToken { +export interface IPrisbeamSearchToken { type: PrisbeamSearchTokenType, - data?: any + data?: string } export enum PrisbeamSearchTokenType { @@ -420,8 +420,8 @@ export class PrisbeamSearch { let pos = 0; let inParentheses = false; - let currentParenthesesInner: string; - let tokens: PrisbeamSearchToken[] = []; + let currentParenthesesInner: string = ""; + let tokens: IPrisbeamSearchToken[] = []; let currentTag = ""; let subParentheses = 0; @@ -631,7 +631,7 @@ export class PrisbeamSearch { return this.queryTokensToString(tokens); } - queryTokensToString(tokens: PrisbeamSearchToken[]) { + queryTokensToString(tokens: IPrisbeamSearchToken[]) { let str = ""; for (let token of tokens) { @@ -675,11 +675,4 @@ export class PrisbeamSearch { return "TRUE"; } } - - /** - * @deprecated - */ - buildQuery(_1: string, _2: boolean, _3: boolean = false): never { - throw new SearchError("The Prisbeam search engine version 1 has been removed from this version of libprisbeam and cannot be used anymore. Please switch to 'buildQueryV2' instead of 'buildQuery'."); - } } diff --git a/src/PrisbeamUpdater.ts b/src/PrisbeamUpdater.ts index 319bfac..0ca4b0d 100755 --- a/src/PrisbeamUpdater.ts +++ b/src/PrisbeamUpdater.ts @@ -1,6 +1,8 @@ import {Prisbeam} from "./Prisbeam"; import fs from "fs"; import http from "http"; +import {IPrisbeamUpdaterGeneric} from "./IPrisbeamUpdaterGeneric"; +import {IncomingMessage, ServerResponse} from "node:http"; export class PrisbeamUpdater { private readonly database: Prisbeam; @@ -9,6 +11,7 @@ export class PrisbeamUpdater { this.database = instance; } + // noinspection JSUnusedGlobalSymbols updateFromPreprocessed(preprocessed: string, tags: string, statusUpdateHandler: Function) { return new Promise<void>((res) => { let sqlGet: Function; @@ -180,7 +183,7 @@ export class PrisbeamUpdater { let sqlPreGet = (sql: string) => { return new Promise((res, rej) => { - global.preDatabase.all(sql, function (err: Error | null, data: any) { + global.preDatabase.all(sql, function (err: Error | null, data: IPrisbeamUpdaterGeneric) { if (err) { rej(err); } else { @@ -192,7 +195,7 @@ export class PrisbeamUpdater { let sqlTagGet = (sql: string) => { return new Promise((res, rej) => { - global.tagsDatabase.all(sql, function (err: Error | null, data: any) { + global.tagsDatabase.all(sql, function (err: Error | null, data: IPrisbeamUpdaterGeneric) { if (err) { rej(err); } else { @@ -217,7 +220,7 @@ export class PrisbeamUpdater { const port = 19842; const preprocessedImageCount = parseInt((await sqlPreGet("SELECT COUNT(*) FROM images"))[0]["COUNT(*)"]); - let preprocessedServer = http.createServer(async (req: any, res: any) => { + let preprocessedServer = http.createServer(async (req: IncomingMessage, res: ServerResponse) => { let page = 1; let requestPage = new URL(req.url, "https://nothing.invalid").searchParams.get('page'); let out = { @@ -228,8 +231,8 @@ export class PrisbeamUpdater { page = parseInt(requestPage); } - let everything = (await sqlPreGet("SELECT * FROM images LIMIT 50 OFFSET " + ((page - 1) * 50))) as any[]; - out.images = everything.map(i => JSON.parse(atob(i.json))); + let everything = (await sqlPreGet("SELECT * FROM images LIMIT 50 OFFSET " + ((page - 1) * 50))) as IPrisbeamUpdaterGeneric[]; + out.images = everything.map(i => JSON.parse(atob(i['json']))); res.writeHead(200); res.end(JSON.stringify(out)); @@ -240,7 +243,7 @@ export class PrisbeamUpdater { console.log(`Server is running on http://${host}:${port}`); }); - let updateTags = ((await sqlTagGet("SELECT * FROM tags")) as any[]).map(i => JSON.parse(atob(i['json']))); + let updateTags = ((await sqlTagGet("SELECT * FROM tags")) as IPrisbeamUpdaterGeneric[]).map(i => JSON.parse(atob(i['json']))); let index = 0; for (let i = 0; i < updateTags.length; i += 50) { @@ -250,8 +253,9 @@ export class PrisbeamUpdater { let implications = []; for (let tag of chunk) { + // noinspection ES6MissingAwait aliases.push(sqlstr(await sqlTagGet(`SELECT target FROM aliases WHERE source = ` + tag['id'])[0]?.target ?? null)); - implications.push(sqlstr("," + (await sqlTagGet(`SELECT target FROM implications WHERE source = ` + tag['id']) as any[]).map(i => i.target).join(",") + ",")); + implications.push(sqlstr("," + (await sqlTagGet(`SELECT target FROM implications WHERE source = ` + tag['id']) as IPrisbeamUpdaterGeneric[]).map(i => i['target']).join(",") + ",")); } await sqlQuery(`INSERT INTO tags(id, name, alias, implications, category, description, description_short, slug) VALUES ${chunk.map((tag, index) => `(${tag['id']}, ${sqlstr(tag['name'])}, ${aliases[index]}, ${implications[index]}, ${sqlstr(tag['category'])}, ${sqlstr(tag['description'])}, ${sqlstr(tag['short_description'])}, ${sqlstr(tag['slug'])})`).join(",")}`); @@ -300,10 +304,10 @@ export class PrisbeamUpdater { validateStatus: (s: number) => (s >= 200 && s < 300) || (s === 404 || s === 403 || s === 401), method: 'GET', responseType: 'arraybuffer', - onDownloadProgress: (event: any) => { + onDownloadProgress: (event: IPrisbeamUpdaterGeneric) => { global.statusInfo[2] = { - title: "Image: " + image['id'] + " (" + Math.round((event.loaded / event.total) * 100) + "%)", - progress: ((event.loaded / event.total) * 100), + title: "Image: " + image['id'] + " (" + Math.round((event['loaded'] / event['total']) * 100) + "%)", + progress: ((event['loaded'] / event['total']) * 100), indeterminate: false } @@ -363,7 +367,7 @@ export class PrisbeamUpdater { let start = new Date().getTime(); let tryFetch = true; - let page: object; + let page: object = {}; while (tryFetch) { try { @@ -512,7 +516,7 @@ export class PrisbeamUpdater { await consolidateDB(); } - update(); + update().then(_ => {}); }); } } diff --git a/src/SQLiteInstance.ts b/src/SQLiteInstance.ts new file mode 100755 index 0000000..cfd592c --- /dev/null +++ b/src/SQLiteInstance.ts @@ -0,0 +1,4 @@ +export interface SQLiteInstance { + Database: any, + OPEN_READONLY: number, +} |