diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..defb473 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +# githubs api has a rate limit of 60/h if not authorised. +# you may quickly hit that and get rate limited. To counteract this, you can provide a github token +# here and it will be used. To do so, create a token at the following links and just leave +# all permissions at the defaults (public repos read only, 0 permissions): +# https://github.com/settings/personal-access-tokens/new +GITHUB_TOKEN= + +ELECTRON_LAUNCH_FLAGS="--ozone-platform-hint=auto --enable-webrtc-pipewire-capturer --enable-features=WaylandWindowDecorations" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be8fd61 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +dist +node_modules +.env +.DS_Store +.idea/ +.pnpm-store/ \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..eee7e86 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +node-linker=hoisted +package-manager-strict=false \ No newline at end of file diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 0000000..27dcbb8 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,8 @@ +tabWidth: 4 +semi: true +printWidth: 120 +trailingComma: none +bracketSpacing: true +arrowParens: avoid +useTabs: false +endOfLine: lf diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..e9ab240 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,104 @@ +/* + * SPDX-License-Identifier: GPL-3.0 + * Modified for Aerocord, originally part of Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2024-2024 Aiek + * Copyright (c) 2024 RandomServer Community + * Copyright (c) 2023 Vendicated and Vencord contributors + */ + +//@ts-check + +import stylistic from "@stylistic/eslint-plugin"; +import pathAlias from "eslint-plugin-path-alias"; +import header from "eslint-plugin-simple-header"; +import importSort from "eslint-plugin-simple-import-sort"; +import unusedImports from "eslint-plugin-unused-imports"; +import tseslint from "typescript-eslint"; +import prettier from "eslint-plugin-prettier"; + +export default tseslint.config( + { ignores: ["dist"] }, + + { + files: ["src/**/*.{tsx,ts,mts,mjs,js,jsx}"], + plugins: { + header, + stylistic, + importSort, + unusedImports, + pathAlias, + prettier + }, + settings: { + "import/resolver": { + alias: { + map: [] + } + } + }, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: true, + tsconfigRootDir: import.meta.dirname + } + }, + rules: { + "header/header": [ + "error", + { + files: ["scripts/header.txt"] + } + ], + + // ESLint Rules + + yoda: "error", + eqeqeq: ["error", "always", { null: "ignore" }], + "prefer-destructuring": [ + "error", + { + VariableDeclarator: { array: false, object: true }, + AssignmentExpression: { array: false, object: false } + } + ], + "operator-assignment": ["error", "always"], + "no-useless-computed-key": "error", + "no-unneeded-ternary": ["error", { defaultAssignment: false }], + "no-invalid-regexp": "error", + "no-constant-condition": ["error", { checkLoops: false }], + "no-duplicate-imports": "error", + "dot-notation": "error", + "no-useless-escape": "error", + "no-fallthrough": "error", + "for-direction": "error", + "no-async-promise-executor": "error", + "no-cond-assign": "error", + "no-dupe-else-if": "error", + "no-duplicate-case": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "no-shadow-restricted-names": "error", + "no-unexpected-multiline": "error", + "no-unsafe-optional-chaining": "error", + "no-useless-backreference": "error", + "use-isnan": "error", + "prefer-const": "error", + "prefer-spread": "error", + + // Styling Rules + "stylistic/spaced-comment": ["error", "always", { markers: ["!"] }], + "stylistic/no-extra-semi": "error", + + // Plugin Rules + "importSort/imports": "error", + "importSort/exports": "error", + "unusedImports/no-unused-imports": "error", + "pathAlias/no-relative": "error", + "prettier/prettier": "error" + } + } +);