summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaindropsSys <raindrops@equestria.dev>2024-06-17 20:17:10 +0200
committerRaindropsSys <raindrops@equestria.dev>2024-06-17 20:17:10 +0200
commitd211ab6d26ff8caf4dcb7352c59b5f43df3526e0 (patch)
tree339c2cea5600bb50271756fc4f496f0fe405b1ab
parent7bf016d82110d45de4287ee91b5b1a1a2e75d45d (diff)
downloadlibfaunerie-d211ab6d26ff8caf4dcb7352c59b5f43df3526e0.tar.gz
libfaunerie-d211ab6d26ff8caf4dcb7352c59b5f43df3526e0.tar.bz2
libfaunerie-d211ab6d26ff8caf4dcb7352c59b5f43df3526e0.zip
Remove all "any"s
-rwxr-xr-x.idea/inspectionProfiles/Project_Default.xml14
-rwxr-xr-xpackage-lock.json19
-rwxr-xr-xpackage.json9
-rwxr-xr-xsrc/IPrisbeamImage.ts1
-rwxr-xr-xsrc/IPrisbeamOption.ts (renamed from src/PrisbeamOptions.ts)2
-rwxr-xr-xsrc/IPrisbeamTag.ts1
-rwxr-xr-xsrc/IPrisbeamUpdaterGeneric.ts1
-rwxr-xr-xsrc/Prisbeam.ts28
-rwxr-xr-xsrc/PrisbeamFrontend.ts13
-rwxr-xr-xsrc/PrisbeamPropertyStore.ts4
-rwxr-xr-xsrc/PrisbeamSearch.ts17
-rwxr-xr-xsrc/PrisbeamUpdater.ts28
-rwxr-xr-xsrc/SQLiteInstance.ts4
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,
+}