Add/Start SteamTweaks TS/JS package

pull/239/head
Peter Repukat 1 year ago
parent 766cac3969
commit d60def51d5

@ -0,0 +1,187 @@
module.exports = {
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
],
env: {
browser: true,
node: false
},
plugins: [
'@typescript-eslint',
'no-null',
'prefer-arrow',
'import',
],
parser: '@typescript-eslint/parser', // Specifies the ESLint parser
parserOptions: {
ecmaVersion: 2022, // Allows for the parsing of modern ECMAScript features
sourceType: 'module',
ecmaFeatures: {
jsx: false,
},
project: ['./tsconfig.json'],
tsconfigRootDir: __dirname
},
rules: {
'@typescript-eslint/no-namespace': 'off',
'@typescript-eslint/ban-types': 'error',
'@typescript-eslint/adjacent-overload-signatures': 'error',
'@typescript-eslint/array-type': 'error',
'@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
'@typescript-eslint/no-inferrable-types': 'error',
'@typescript-eslint/no-misused-new': 'error',
'@typescript-eslint/no-this-alias': 'error',
'@typescript-eslint/prefer-for-of': 'error',
'@typescript-eslint/prefer-function-type': 'error',
'@typescript-eslint/prefer-namespace-keyword': 'error',
'no-inner-declarations': 'off', // we have es6blocked scoped functions.
'@typescript-eslint/triple-slash-reference': 'error',
'@typescript-eslint/type-annotation-spacing': 'error',
'@typescript-eslint/unified-signatures': 'error',
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/unbound-method': 'warn',
'@typescript-eslint/semi': [
'error',
'always'
],
'@typescript-eslint/quotes': [
'warn',
'single'
],
'@typescript-eslint/member-delimiter-style': [
'error',
{
'multiline': {
'delimiter': 'semi',
'requireLast': true
},
'singleline': {
'delimiter': 'semi',
'requireLast': false
}
}
],
'@typescript-eslint/indent': [
'warn',
4,
{
'FunctionDeclaration': {
'parameters': 'first'
},
'FunctionExpression': {
'parameters': 'first'
},
'SwitchCase': 1
}
],
'@typescript-eslint/explicit-member-accessibility': [
'error',
{
'accessibility': 'explicit'
}
],
'@typescript-eslint/no-use-before-define': ['error', { 'functions': false }],
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "default",
"format": ["camelCase", "PascalCase"]
},
{
"selector": "variable",
"format": ["camelCase", "UPPER_CASE"]
},
{
"selector": "parameter",
"format": ["camelCase"],
"leadingUnderscore": "allow"
},
{
"selector": "memberLike",
"modifiers": ["private"],
"format": ["camelCase"],
"leadingUnderscore": "require"
},
{
"selector": "typeLike",
"format": ["PascalCase"]
}
],
'no-console': 'off',
'no-return-await': 'error',
'arrow-body-style': 'error',
'arrow-parens': [
'error',
'always'
],
'camelcase': ['warn', { "ignoreImports": true }],
'comma-dangle': [
'error',
{
'objects': 'never',
'arrays': 'never',
'functions': 'never'
}
],
'prefer-arrow/prefer-arrow-functions': 'error',
'prefer-arrow-callback': 'error',
'prefer-const': 'error',
'quote-props': [
'error',
'consistent-as-needed'
],
'no-var': 'error',
'new-parens': 'error',
'no-caller': 'error',
'no-cond-assign': 'error',
'no-debugger': 'error',
'no-empty': 'error',
'no-eval': 'error',
'no-multiple-empty-lines': 'warn',
'no-new-wrappers': 'error',
'no-redeclare': 'error',
'no-shadow': [
'error',
{
'hoist': 'all'
}
],
'no-null/no-null': 'error',
'no-throw-literal': 'error',
'no-trailing-spaces': 'error',
'no-undef-init': 'error',
'no-underscore-dangle': 'error',
'no-unsafe-finally': 'error',
'no-unused-labels': 'error',
'spaced-comment': 'error',
'use-isnan': 'error',
'max-lines': [
'error',
{
'max': 300,
'skipBlankLines': true,
'skipComments': true
}
],
'max-len': [
'warn',
{
'code': 140
}
],
'dot-notation': 'error',
'eqeqeq': 'error',
'eol-last': 'error',
'linebreak-style': ['error', 'windows'],
'block-spacing': ['error', 'always'],
'object-curly-spacing': ["error", "always"],
'import/no-deprecated': 'warn', // eslint deprecation rule sucks. just wrns on deprecated IMPORTs
},
settings: {
},
};

@ -0,0 +1,10 @@
{
"configurations": [
{
"name": "Attach to Steam CEF",
"port": 8080,
"request": "attach",
"type": "chrome",
}
]
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,19 @@
{
"name": "glossi_steamtweaks",
"version": "0.0.0",
"type": "module",
"scripts": {},
"author": "Peter Repukat - FlatspotSoftware",
"license": "Apache-2.0",
"devDependencies": {
"@rollup/plugin-typescript": "^11.0.0",
"@typescript-eslint/eslint-plugin": "^5.49.0",
"@typescript-eslint/parser": "^5.49.0",
"eslint": "^8.33.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-no-null": "^1.0.2",
"eslint-plugin-prefer-arrow": "^1.2.3",
"rollup": "^3.12.0",
"typescript": "^4.9.4"
}
}

@ -0,0 +1,11 @@
import typescript from '@rollup/plugin-typescript';
export default {
input: 'src/Tweaks/Overlay/HideFPSCounter.ts',
output: {
file: 'dist/glossiTweaks.js',
sourcemap: "inline",
format: 'es',
},
plugins: [typescript()]
};

@ -0,0 +1,14 @@
export interface SteamClient {
Settings: {
SetInGameOverlayShowFPSCorner: (value: 0|1|2|3|4) => void;
SetInGameOverlayShowFPSContrast: (value: boolean) => void;
};
}
declare global {
interface Window {
SteamClient: SteamClient;
}
// eslint-disable-next-line
declare const SteamClient: SteamClient;
}

@ -0,0 +1,22 @@
import type { SteamConfig } from "../../common/util/types";
import { initTweak } from "../../common/tweakApi";
// variables here are scoped to the tweak
// and are not accessible from other tweaks or even the main script
// there is no risk of conflicts
const originalFpsCorner = Number(
((await GlosSI.getSettings()).system as SteamConfig)
.InGameOverlayShowFPSCorner
) as 0 | 1 | 2 | 3 | 4;
initTweak('HideFPSCounter', {
install: () => {
SteamClient.Settings.SetInGameOverlayShowFPSCorner(0);
},
uninstall: () => {
SteamClient.Settings.SetInGameOverlayShowFPSCorner(originalFpsCorner);
}
});

@ -0,0 +1,62 @@
import type { SteamConfig } from './util/types';
class GlosSIApi {
public getSettings(): Promise<SteamConfig> {
return fetch('http://localhost:8756/steam_settings')
.then(
(res) => res.json().then(
(json) => (json as SteamConfig).UserLocalConfigStore as SteamConfig
)
);
}
}
declare global {
interface Window {
GlosSITweaks: Record<string, {install: () => unknown; uninstall?: () => void}>;
GlosSI: InstanceType<typeof GlosSIApi>;
}
// eslint-disable-next-line
const GlosSI: InstanceType<typeof GlosSIApi>;
}
const installGlosSIApi = () => {
window.GlosSITweaks = {
GlosSI: {
install: () => {
const api = new GlosSIApi();
Object.assign(window, { GlosSI: api });
},
uninstall: () => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
delete window.GlosSI;
}
}
};
window.GlosSITweaks.GlosSI.install();
};
if (!window.GlosSITweaks || !window.GlosSI) {
installGlosSIApi();
}
export const initTweak = <T>(name: string, tweakMain: (() => T)|{
install: () => T;
uninstall: () => void;
}, force = false): T|Error => {
if (!force && window.GlosSITweaks[name]) {
return new Error(`Tweak ${name} is already installed!`);
}
if (typeof tweakMain === 'object') {
window.GlosSITweaks[name] = { install: tweakMain.install, uninstall: () => {
tweakMain.uninstall();
delete window.GlosSITweaks[name];
} };
} else {
window.GlosSITweaks[name] = { install: tweakMain };
}
return window.GlosSITweaks[name].install() as T;
};

@ -0,0 +1,3 @@
export interface SteamConfig {
[key: string]: string|SteamConfig;
}

@ -0,0 +1,25 @@
{
"compilerOptions": {
"target": "ES2020",
"module": "ES2022",
"noImplicitAny": true,
"rootDir": "./src",
"outDir": "./dist",
"inlineSourceMap": true,
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true,
"useDefineForClassFields": true,
"forceConsistentCasingInFileNames": true,
"lib": [
"esnext",
"DOM"
],
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules"
]
}

@ -21,6 +21,9 @@
{
"path": "Installer"
},
{
"path": "SteamTweaks"
},
{
"name": "root",
"path": "."

Loading…
Cancel
Save