Merge branch 'neutralino' of https://gitlab.com/KRypt0n_/an-anime-game-launcher into neutralino

This commit is contained in:
Observer KRypt0n_ 2021-12-23 20:07:50 +02:00
commit f85acba926
12 changed files with 133 additions and 30 deletions

2
.gitignore vendored
View file

@ -1,6 +1,6 @@
.lite_workspace.lua
yarn.lock
package_lock.json
package-lock.json
Audio_English(US)_2.3.0.zip
/bin

View file

@ -44,8 +44,8 @@ export default class Configs
public static set(name: string, value: scalar|scalar[]|Promise<scalar|scalar[]>): Promise<void>
{
const getUpdatedArray = (path: string[], array: scalar|scalar[], value: scalar|scalar[]): scalar|scalar[] => {
array[path[0]] = path.length > 1 ?
getUpdatedArray(path.slice(1), array[path[0]] ?? {}, value) : value;
array![path[0]] = path.length > 1 ?
getUpdatedArray(path.slice(1), array![path[0]] ?? {}, value) : value;
return array;
};
@ -79,14 +79,14 @@ export default class Configs
return new Promise(async (resolve) => {
const setDefaults = async (current: scalar) => {
const updateDefaults = (current: scalar, defaults: scalar) => {
Object.keys(defaults).forEach((key) => {
Object.keys(defaults!).forEach((key) => {
// If the field exists in defaults and doesn't exist in current
if (current[key] === undefined)
current[key] = defaults[key];
if (current![key] === undefined)
current![key] = defaults![key];
// If both of default and current are objects
else if (typeof current[key] == 'object' && typeof defaults[key] == 'object')
current[key] = updateDefaults(current[key], defaults[key]);
else if (typeof current![key] == 'object' && typeof defaults![key] == 'object')
current![key] = updateDefaults(current![key], defaults![key]);
});
return current;

View file

@ -6,6 +6,7 @@ import type {
} from './types/GameData';
import constants from './Constants';
import fetch from './core/Fetch';
import Downloader, { Stream } from './core/Downloader';
@ -50,7 +51,7 @@ export default class Game
if (response.ok)
{
const json: ServerResponse = await response.json();
const json: ServerResponse = await (response as any).json();
if (json.message == 'OK')
resolve(json.data);

View file

@ -67,7 +67,6 @@ export default class Patch
return new Promise(async (resolve, reject) => {
const patchUri = constants.uri.patch[source];
// @ts-expect-error
fetch(`${patchUri}/raw/master/${version.replaceAll('.', '')}/patch.sh`, this.fetchTimeout)
.then((patcherResponse) => {
// Return an error if patch's server is unavailable
@ -82,7 +81,7 @@ export default class Patch
// Otherwise it should be [preparation], [testing] or [stable]
else
{
// @ts-expect-error
fetch(`${patchUri}/raw/master/${version.replaceAll('.', '')}/patch_files/unityplayer_patch.vcdiff`, this.fetchTimeout)
.then((response) => {
// Return an error if patch's server is unavailable

View file

@ -74,7 +74,7 @@ export default class Voice
{
return new Promise((resolve, reject) => {
Game.getDiff(version)
.then((data) => resolve(data.voice_packs ?? null))
.then((data) => resolve(data!.voice_packs ?? null))
.catch((error) => reject(error));
});
}

View file

@ -19,7 +19,7 @@ class Stream
protected unpackDir: string|null;
protected unpacked: number = 0;
protected archive: ArchiveInfo;
protected archive?: ArchiveInfo;
protected onStart?: () => void;
protected onProgress?: (current: number, total: number, difference: number) => void;
@ -59,7 +59,7 @@ class Stream
const command = {
tar: `tar -xvf "${path}"${unpackDir ? ` -C "${unpackDir}"` : ''}`,
zip: `unzip -o "${path}"${unpackDir ? ` -d "${unpackDir}"` : ''}`
}[this.archive.type];
}[this.archive.type!];
let remainedFiles = this.archive.files;
@ -77,8 +77,8 @@ class Stream
{
Neutralino.filesystem.getStats(`${baseDir}/${file.path}`)
.then(() => {
this.unpacked += file.size.uncompressed;
difference += file.size.uncompressed;
this.unpacked += file.size.uncompressed!;
difference += file.size.uncompressed!;
file.path = '#unpacked#';
})
@ -89,9 +89,9 @@ class Stream
remainedFiles = remainedFiles.filter((file) => file.path != '#unpacked#');
if (this.onProgress)
this.onProgress(this.unpacked, this.archive.size.uncompressed, difference);
this.onProgress(this.unpacked, this.archive!.size.uncompressed!, difference);
if (this.unpacked >= this.archive.size.uncompressed)
if (this.unpacked >= this.archive!.size.uncompressed!)
{
this.finished = true;
@ -204,7 +204,7 @@ export default class Archive
{
let fileSize = parseInt(match[1]);
archive.size.uncompressed += fileSize;
archive.size.uncompressed! += fileSize;
archive.files.push({
path: match[2],
@ -227,8 +227,8 @@ export default class Archive
let uncompressedSize = parseInt(match[1]),
compressedSize = parseInt(match[2]);
archive.size.compressed += compressedSize;
archive.size.uncompressed += uncompressedSize;
archive.size.compressed! += compressedSize;
archive.size.uncompressed! += uncompressedSize;
archive.files.push({
path: match[3],

View file

@ -59,7 +59,7 @@ export default class DXVK
// then we should find this DXVK version and call this method for it
if (typeof dxvk == 'string')
{
let foundDXVK = null;
let foundDXVK;
(await this.get()).forEach((currDxvk) => {
if (currDxvk.version == dxvk)

View file

@ -110,14 +110,14 @@ export default class Downloader
{
return new Promise(async (resolve) => {
fetch(uri).then((response) => {
resolve(new Stream(uri, output ?? this.fileFromUri(uri), response.length));
resolve(new Stream(uri, output ?? this.fileFromUri(uri), response.length!));
});
});
}
public static fileFromUri(uri: string): string
{
const file = uri.split('/').pop().split('#')[0].split('?')[0];
const file = uri.split('/').pop()!.split('#')[0].split('?')[0];
if (file === '')
return 'index.html';
@ -125,7 +125,7 @@ export default class Downloader
else if (`https://${file}` != uri && `http://${file}` != uri)
return file;
else 'index.html';
else return 'index.html';
}
}

View file

@ -29,7 +29,7 @@ class Response
this.length = length;
// https://developer.mozilla.org/en-US/docs/Web/API/Response/ok
this.ok = status >= 200 && status <= 299;
this.ok = status! >= 200 && status! <= 299;
}
/**

View file

@ -71,7 +71,7 @@ class Runners
// then we should find this runner and call this method for it
if (typeof runner == 'string')
{
let foundRunner = null;
let foundRunner;
(await this.get()).forEach((family) => {
family.runners.forEach((familyRunner) => {

View file

@ -1,10 +1,11 @@
type ArchiveType =
| 'tar'
| 'zip';
| 'zip'
| null;
type Size = {
compressed?: number;
uncompressed?: number;
compressed?: number | null;
uncompressed?: number | null;
};
type File = {

102
tsconfig.json Normal file
View file

@ -0,0 +1,102 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Projects */
// "incremental": true, /* Enable incremental compilation */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"lib": [ /* Specify a set of bundled library declaration files that describe the target runtime environment. */
"ES2021.String"
],
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
/* Modules */
"module": "commonjs", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "resolveJsonModule": true, /* Enable importing .json files */
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}