Added Eslint GitHub Action and Prettier

This commit is contained in:
Ahmad 2024-12-21 18:13:18 -05:00
parent d8df48438d
commit 512b7526ab
No known key found for this signature in database
GPG key ID: 8FD8A93530D182BF
21 changed files with 480 additions and 293 deletions

View file

@ -1,24 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ahmadk953, RoseFix7
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

View file

@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[Feature Request]"
labels: dependencies, documentation, enhancement
assignees: ahmadk953, RoseFix7
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

40
.github/workflows/eslint.yml vendored Normal file
View file

@ -0,0 +1,40 @@
name: ESLint
on:
push:
branches: ['main']
pull_request:
branches: ['main']
schedule:
- cron: '25 21 * * 1'
jobs:
eslint:
name: Run eslint scanning
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
actions: read
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Configure Corepack
run: corepack enable
- name: Install Dependencies
run: yarn install
- name: Run ESLint
run: npx eslint ./src
--config eslint.config.mjs
--format @microsoft/eslint-formatter-sarif
--output-file eslint-results.sarif
continue-on-error: true
- name: Upload analysis results to GitHub
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: eslint-results.sarif
wait-for-processing: true

2
.gitignore vendored
View file

@ -1,6 +1,6 @@
target/
node_modules/
drizzle/
.vscode/
config.json
.vscode
.yarn

11
.prettierignore Normal file
View file

@ -0,0 +1,11 @@
target/
node_modules/
drizzle/
.vscode/
.github/
.yarn/
config.json
config.example.json
package.json
yarn.lock
README.md

11
.prettierrc.yml Normal file
View file

@ -0,0 +1,11 @@
{
'printWidth': 80,
'tabWidth': 2,
'useTabs': false,
'semi': true,
'singleQuote': true,
'trailingComma': 'all',
'bracketSpacing': true,
'arrowParens': 'always',
'endOfLine': 'lf',
}

View file

@ -1,131 +0,0 @@
# Contributor Covenant Code of Conduct
> [!WARNING]
> Please check the Code of Conduct often for updates
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
ahmad.khan60@outlook.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View file

@ -1,8 +0,0 @@
# Contributing Guidelines
> [!NOTE]
> Expect this to change
## How to Contribute
If you would like to contribute to this repository, please either [make a fork](https://github.com/ahmadk953/poixpixel-discord-bot/fork) or, clone this repo locally using git.

View file

@ -1,8 +0,0 @@
# Security Policy
> [!NOTE]
> Expect this policy to change in the future.
## Reporting a Vulnerability
If you notice a vulnerability in the project, please immediately report it to [me](mailto:ahmad.khan60@outlook.com)

View file

@ -1,7 +1,7 @@
import fs from "node:fs";
import fs from 'node:fs';
import { defineConfig } from 'drizzle-kit';
const config = JSON.parse(fs.readFileSync("./config.json", "utf8"));
const config = JSON.parse(fs.readFileSync('./config.json', 'utf8'));
const { dbConnectionString } = config;
export default defineConfig({

View file

@ -1,10 +1,10 @@
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import globals from "globals";
import { FlatCompat } from "@eslint/eslintrc";
import tsParser from "@typescript-eslint/parser";
import typescriptEslint from "@typescript-eslint/eslint-plugin";
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import globals from 'globals';
import { FlatCompat } from '@eslint/eslintrc';
import tsParser from '@typescript-eslint/parser';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
@ -15,21 +15,21 @@ const compat = new FlatCompat({
});
export default [
...compat.extends("eslint:recommended"),
...compat.extends('eslint:recommended', 'prettier'),
{
files: ["**/*.ts"],
files: ['**/*.ts'],
plugins: {
"@typescript-eslint": typescriptEslint,
'@typescript-eslint': typescriptEslint,
},
languageOptions: {
ecmaVersion: 5,
sourceType: "script",
sourceType: 'script',
parser: tsParser,
parserOptions: {
project: "./tsconfig.json",
project: './tsconfig.json',
},
globals: {
...globals.node,
@ -37,54 +37,54 @@ export default [
},
rules: {
"arrow-spacing": [
"warn",
'arrow-spacing': [
'warn',
{
before: true,
after: true,
},
],
"brace-style": [
"error",
"stroustrup",
'brace-style': [
'error',
'stroustrup',
{
allowSingleLine: true,
},
],
"comma-dangle": ["error", "always-multiline"],
"comma-spacing": "error",
"comma-style": "error",
curly: ["error", "multi-line", "consistent"],
"dot-location": ["error", "property"],
"handle-callback-err": "off",
indent: ["error", 2],
"keyword-spacing": "error",
'comma-dangle': ['error', 'always-multiline'],
'comma-spacing': 'error',
'comma-style': 'error',
curly: ['error', 'multi-line', 'consistent'],
'dot-location': ['error', 'property'],
'handle-callback-err': 'off',
indent: ['error', 2],
'keyword-spacing': 'error',
"max-nested-callbacks": [
"error",
'max-nested-callbacks': [
'error',
{
max: 4,
},
],
"max-statements-per-line": [
"error",
'max-statements-per-line': [
'error',
{
max: 2,
},
],
"no-console": "off",
"no-empty-function": "error",
"no-floating-decimal": "error",
"no-inline-comments": "error",
"no-lonely-if": "error",
"no-multi-spaces": "error",
'no-console': 'off',
'no-empty-function': 'error',
'no-floating-decimal': 'error',
'no-inline-comments': 'error',
'no-lonely-if': 'error',
'no-multi-spaces': 'error',
"no-multiple-empty-lines": [
"error",
'no-multiple-empty-lines': [
'error',
{
max: 2,
maxEOF: 1,
@ -92,38 +92,38 @@ export default [
},
],
"no-shadow": [
"error",
'no-shadow': [
'error',
{
allow: ["err", "resolve", "reject"],
allow: ['err', 'resolve', 'reject'],
},
],
"no-trailing-spaces": ["error"],
"no-var": "error",
"object-curly-spacing": ["error", "always"],
"prefer-const": "error",
quotes: ["warn", "single"],
semi: ["error", "always"],
"space-before-blocks": "error",
'no-trailing-spaces': ['error'],
'no-var': 'error',
'object-curly-spacing': ['error', 'always'],
'prefer-const': 'error',
quotes: ['warn', 'single'],
semi: ['error', 'always'],
'space-before-blocks': 'error',
"space-before-function-paren": [
"error",
'space-before-function-paren': [
'error',
{
anonymous: "never",
named: "never",
asyncArrow: "always",
anonymous: 'never',
named: 'never',
asyncArrow: 'always',
},
],
"space-in-parens": "error",
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "error",
yoda: "error",
'space-in-parens': 'error',
'space-infix-ops': 'error',
'space-unary-ops': 'error',
'spaced-comment': 'error',
yoda: 'error',
"no-redeclare": "off",
"no-unused-vars": "off", // This is causing issues
'no-redeclare': 'off',
'no-unused-vars': 'off', // This is causing issues
},
},
];

View file

@ -10,7 +10,9 @@
"compile": "npx tsc",
"target": "node ./target/discord-bot.js",
"start": "yarn run compile && yarn run target",
"lint": "npx eslint ./src"
"lint": "npx eslint ./src && npx tsc --noEmit",
"format": "prettier --check --ignore-path .prettierignore .",
"format:fix": "prettier --write --ignore-path .prettierignore ."
},
"dependencies": {
"discord.js": "^14.16.3",
@ -20,13 +22,16 @@
"devDependencies": {
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.17.0",
"@microsoft/eslint-formatter-sarif": "^3.1.0",
"@types/node": "^22.10.2",
"@types/pg": "^8.11.10",
"@typescript-eslint/eslint-plugin": "^8.18.1",
"@typescript-eslint/parser": "^8.18.1",
"drizzle-kit": "^0.30.1",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
"globals": "^15.14.0",
"prettier": "3.4.2",
"ts-node": "^10.9.2",
"tsx": "^4.19.2",
"typescript": "^5.7.2"

View file

@ -18,7 +18,7 @@ const rulesEmbed = new EmbedBuilder()
'https://cdn.discordapp.com/avatars/1052017329376071781/922947c726d7866d313744186c42ef49.webp',
})
.setDescription(
'These are the rules for the server. Please read and follow them carefully.'
'These are the rules for the server. Please read and follow them carefully.',
)
.addFields(
{
@ -77,9 +77,9 @@ const rulesEmbed = new EmbedBuilder()
'Post content in the right channels. Off-topic content may be moved or deleted.',
},
{
name: '**Rule #12: Follow Discord\'s ToS and Community Guidelines**',
name: '**Rule #12: Follow the Discord Terms of Service and Community Guidelines**',
value:
'All members must adhere to Discords Terms of Service and Community Guidelines.',
'All members must adhere to the Discord Terms of Service and Community Guidelines.',
},
{
name: '**Rule #13: Moderator Discretion**',
@ -90,7 +90,7 @@ const rulesEmbed = new EmbedBuilder()
name: '**Disclaimer:**',
value:
'**These rules may be updated at any time. It is your responsibility to review them regularly. Moderators and admins have the authority to enforce these rules and take appropriate action.**',
}
},
)
.setTimestamp()
.setFooter({

View file

@ -10,7 +10,9 @@ const command: Command = {
.setName('ping')
.setDescription('Check the latency from you to the bot'),
execute: async (interaction) => {
await interaction.reply(`Pong! Latency: ${Date.now() - interaction.createdTimestamp}ms`);
await interaction.reply(
`Pong! Latency: ${Date.now() - interaction.createdTimestamp}ms`,
);
},
};

View file

@ -11,7 +11,7 @@ const command: Command = {
.setDescription('Provides information about the server.'),
execute: async (interaction) => {
await interaction.reply(
`The server ${interaction!.guild!.name} has ${interaction!.guild!.memberCount} members and was created on ${interaction!.guild!.createdAt}. It is ${new Date().getFullYear() - interaction!.guild!.createdAt.getFullYear()!} years old.`
`The server ${interaction!.guild!.name} has ${interaction!.guild!.memberCount} members and was created on ${interaction!.guild!.createdAt}. It is ${new Date().getFullYear() - interaction!.guild!.createdAt.getFullYear()!} years old.`,
);
},
};

View file

@ -19,7 +19,7 @@ const command: Command = {
option
.setName('user')
.setDescription('The user whose information you want to retrieve.')
.setRequired(true)
.setRequired(true),
),
execute: async (interaction) => {
const userOption = interaction.options.get('user');
@ -60,7 +60,7 @@ const command: Command = {
{
name: 'Number of Bans',
value: memberData?.numberOfBans.toString() || '0',
}
},
);
await interaction.reply({ embeds: [embed] });
},

View file

@ -1,5 +1,11 @@
import fs from 'node:fs';
import { Client, Collection, Events, GatewayIntentBits, GuildMember } from 'discord.js';
import {
Client,
Collection,
Events,
GatewayIntentBits,
GuildMember,
} from 'discord.js';
import { deployCommands } from './util/deployCommand.js';
import { removeMember, setMembers } from './util/db.js';
@ -82,7 +88,9 @@ client.on(Events.GuildMemberAdd, async (member: GuildMember) => {
try {
await setMembers(nonBotMembers);
// TODO: Move this to config file
await welcomeChannel.send(`Welcome to the server, ${member.user.username}!`);
await welcomeChannel.send(
`Welcome to the server, ${member.user.username}!`,
);
await member.user.send('Welcome to the Poixpixel Discord server!');
}
catch (error: any) {

View file

@ -45,5 +45,8 @@ export async function removeMember(discordId: string) {
}
export async function getMember(discordId: string) {
return await db.select().from(memberTable).where(eq(memberTable.discordId, discordId));
}
return await db
.select()
.from(memberTable)
.where(eq(memberTable.discordId, discordId));
}

View file

@ -27,7 +27,7 @@ const commandFiles = getFilesRecursively(commandsPath);
export const deployCommands = async () => {
try {
console.log(
`Started refreshing ${commandFiles.length} application (/) commands.`
`Started refreshing ${commandFiles.length} application (/) commands.`,
);
const commands = commandFiles.map(async (file) => {
@ -43,14 +43,14 @@ export const deployCommands = async () => {
}
else {
console.warn(
`[WARNING] The command at ${file} is missing a required "data" or "execute" property.`
`[WARNING] The command at ${file} is missing a required "data" or "execute" property.`,
);
return null;
}
});
const validCommands = await Promise.all(
commands.filter((command) => command !== null)
commands.filter((command) => command !== null),
);
return validCommands;

View file

@ -11,8 +11,10 @@
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"lib": ["ES2022"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
"target": "es2022" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
"lib": [
"ES2022"
] /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
@ -25,9 +27,9 @@
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
"module": "esnext", /* Specify what module code is generated. */
"rootDir": "src", /* Specify the root folder within your source files. */
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
"module": "esnext" /* Specify what module code is generated. */,
"rootDir": "src" /* 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. */
@ -39,7 +41,7 @@
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
"resolveJsonModule": true, /* Enable importing .json files. */
"resolveJsonModule": true /* Enable importing .json files. */,
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
@ -55,7 +57,7 @@
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "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": "./target", /* Specify an output folder for all emitted files. */
"outDir": "./target" /* 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. */
@ -77,12 +79,12 @@
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "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. */
"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. */
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
"strict": true /* Enable all strict type-checking options. */,
// "noImplicitAny": true, /* 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. */
@ -104,9 +106,7 @@
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"include": [
"src/**/*"
]
}
"include": ["src/**/*"]
}

316
yarn.lock
View file

@ -625,7 +625,7 @@ __metadata:
languageName: node
linkType: hard
"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1":
"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.6.1":
version: 4.12.1
resolution: "@eslint-community/regexpp@npm:4.12.1"
checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6
@ -650,6 +650,23 @@ __metadata:
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^2.1.4":
version: 2.1.4
resolution: "@eslint/eslintrc@npm:2.1.4"
dependencies:
ajv: "npm:^6.12.4"
debug: "npm:^4.3.2"
espree: "npm:^9.6.0"
globals: "npm:^13.19.0"
ignore: "npm:^5.2.0"
import-fresh: "npm:^3.2.1"
js-yaml: "npm:^4.1.0"
minimatch: "npm:^3.1.2"
strip-json-comments: "npm:^3.1.1"
checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^3.2.0":
version: 3.2.0
resolution: "@eslint/eslintrc@npm:3.2.0"
@ -667,6 +684,13 @@ __metadata:
languageName: node
linkType: hard
"@eslint/js@npm:8.57.1":
version: 8.57.1
resolution: "@eslint/js@npm:8.57.1"
checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223
languageName: node
linkType: hard
"@eslint/js@npm:9.17.0, @eslint/js@npm:^9.17.0":
version: 9.17.0
resolution: "@eslint/js@npm:9.17.0"
@ -707,6 +731,17 @@ __metadata:
languageName: node
linkType: hard
"@humanwhocodes/config-array@npm:^0.13.0":
version: 0.13.0
resolution: "@humanwhocodes/config-array@npm:0.13.0"
dependencies:
"@humanwhocodes/object-schema": "npm:^2.0.3"
debug: "npm:^4.3.1"
minimatch: "npm:^3.0.5"
checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e
languageName: node
linkType: hard
"@humanwhocodes/module-importer@npm:^1.0.1":
version: 1.0.1
resolution: "@humanwhocodes/module-importer@npm:1.0.1"
@ -714,6 +749,13 @@ __metadata:
languageName: node
linkType: hard
"@humanwhocodes/object-schema@npm:^2.0.3":
version: 2.0.3
resolution: "@humanwhocodes/object-schema@npm:2.0.3"
checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c
languageName: node
linkType: hard
"@humanwhocodes/retry@npm:^0.3.0":
version: 0.3.0
resolution: "@humanwhocodes/retry@npm:0.3.0"
@ -766,6 +808,18 @@ __metadata:
languageName: node
linkType: hard
"@microsoft/eslint-formatter-sarif@npm:^3.1.0":
version: 3.1.0
resolution: "@microsoft/eslint-formatter-sarif@npm:3.1.0"
dependencies:
eslint: "npm:^8.9.0"
jschardet: "npm:latest"
lodash: "npm:^4.17.14"
utf8: "npm:^3.0.0"
checksum: 10c0/c4052ea4f728fd01932406468fa688582f843059786bfce1ef1d0f6d957f43871a1e888095af6d958b90e4380f179049c77f2058fd5ead3354aa73147e60c5b7
languageName: node
linkType: hard
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@ -783,7 +837,7 @@ __metadata:
languageName: node
linkType: hard
"@nodelib/fs.walk@npm:^1.2.3":
"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8":
version: 1.2.8
resolution: "@nodelib/fs.walk@npm:1.2.8"
dependencies:
@ -1038,6 +1092,13 @@ __metadata:
languageName: node
linkType: hard
"@ungap/structured-clone@npm:^1.2.0":
version: 1.2.1
resolution: "@ungap/structured-clone@npm:1.2.1"
checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2
languageName: node
linkType: hard
"@vladfrangu/async_event_emitter@npm:^2.2.4, @vladfrangu/async_event_emitter@npm:^2.4.6":
version: 2.4.6
resolution: "@vladfrangu/async_event_emitter@npm:2.4.6"
@ -1079,7 +1140,7 @@ __metadata:
languageName: node
linkType: hard
"acorn@npm:^8.14.0":
"acorn@npm:^8.14.0, acorn@npm:^8.9.0":
version: 8.14.0
resolution: "acorn@npm:8.14.0"
bin:
@ -1286,7 +1347,7 @@ __metadata:
languageName: node
linkType: hard
"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6":
"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.6":
version: 7.0.6
resolution: "cross-spawn@npm:7.0.6"
dependencies:
@ -1376,6 +1437,15 @@ __metadata:
languageName: node
linkType: hard
"doctrine@npm:^3.0.0":
version: 3.0.0
resolution: "doctrine@npm:3.0.0"
dependencies:
esutils: "npm:^2.0.2"
checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520
languageName: node
linkType: hard
"drizzle-kit@npm:^0.30.1":
version: 0.30.1
resolution: "drizzle-kit@npm:0.30.1"
@ -1787,6 +1857,27 @@ __metadata:
languageName: node
linkType: hard
"eslint-config-prettier@npm:^9.1.0":
version: 9.1.0
resolution: "eslint-config-prettier@npm:9.1.0"
peerDependencies:
eslint: ">=7.0.0"
bin:
eslint-config-prettier: bin/cli.js
checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d
languageName: node
linkType: hard
"eslint-scope@npm:^7.2.2":
version: 7.2.2
resolution: "eslint-scope@npm:7.2.2"
dependencies:
esrecurse: "npm:^4.3.0"
estraverse: "npm:^5.2.0"
checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116
languageName: node
linkType: hard
"eslint-scope@npm:^8.2.0":
version: 8.2.0
resolution: "eslint-scope@npm:8.2.0"
@ -1797,7 +1888,7 @@ __metadata:
languageName: node
linkType: hard
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.3":
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3":
version: 3.4.3
resolution: "eslint-visitor-keys@npm:3.4.3"
checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820
@ -1818,6 +1909,54 @@ __metadata:
languageName: node
linkType: hard
"eslint@npm:^8.9.0":
version: 8.57.1
resolution: "eslint@npm:8.57.1"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.2.0"
"@eslint-community/regexpp": "npm:^4.6.1"
"@eslint/eslintrc": "npm:^2.1.4"
"@eslint/js": "npm:8.57.1"
"@humanwhocodes/config-array": "npm:^0.13.0"
"@humanwhocodes/module-importer": "npm:^1.0.1"
"@nodelib/fs.walk": "npm:^1.2.8"
"@ungap/structured-clone": "npm:^1.2.0"
ajv: "npm:^6.12.4"
chalk: "npm:^4.0.0"
cross-spawn: "npm:^7.0.2"
debug: "npm:^4.3.2"
doctrine: "npm:^3.0.0"
escape-string-regexp: "npm:^4.0.0"
eslint-scope: "npm:^7.2.2"
eslint-visitor-keys: "npm:^3.4.3"
espree: "npm:^9.6.1"
esquery: "npm:^1.4.2"
esutils: "npm:^2.0.2"
fast-deep-equal: "npm:^3.1.3"
file-entry-cache: "npm:^6.0.1"
find-up: "npm:^5.0.0"
glob-parent: "npm:^6.0.2"
globals: "npm:^13.19.0"
graphemer: "npm:^1.4.0"
ignore: "npm:^5.2.0"
imurmurhash: "npm:^0.1.4"
is-glob: "npm:^4.0.0"
is-path-inside: "npm:^3.0.3"
js-yaml: "npm:^4.1.0"
json-stable-stringify-without-jsonify: "npm:^1.0.1"
levn: "npm:^0.4.1"
lodash.merge: "npm:^4.6.2"
minimatch: "npm:^3.1.2"
natural-compare: "npm:^1.4.0"
optionator: "npm:^0.9.3"
strip-ansi: "npm:^6.0.1"
text-table: "npm:^0.2.0"
bin:
eslint: bin/eslint.js
checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1
languageName: node
linkType: hard
"eslint@npm:^9.17.0":
version: 9.17.0
resolution: "eslint@npm:9.17.0"
@ -1889,7 +2028,18 @@ __metadata:
languageName: node
linkType: hard
"esquery@npm:^1.5.0":
"espree@npm:^9.6.0, espree@npm:^9.6.1":
version: 9.6.1
resolution: "espree@npm:9.6.1"
dependencies:
acorn: "npm:^8.9.0"
acorn-jsx: "npm:^5.3.2"
eslint-visitor-keys: "npm:^3.4.1"
checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460
languageName: node
linkType: hard
"esquery@npm:^1.4.2, esquery@npm:^1.5.0":
version: 1.6.0
resolution: "esquery@npm:1.6.0"
dependencies:
@ -1971,6 +2121,15 @@ __metadata:
languageName: node
linkType: hard
"file-entry-cache@npm:^6.0.1":
version: 6.0.1
resolution: "file-entry-cache@npm:6.0.1"
dependencies:
flat-cache: "npm:^3.0.4"
checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd
languageName: node
linkType: hard
"file-entry-cache@npm:^8.0.0":
version: 8.0.0
resolution: "file-entry-cache@npm:8.0.0"
@ -1999,6 +2158,17 @@ __metadata:
languageName: node
linkType: hard
"flat-cache@npm:^3.0.4":
version: 3.2.0
resolution: "flat-cache@npm:3.2.0"
dependencies:
flatted: "npm:^3.2.9"
keyv: "npm:^4.5.3"
rimraf: "npm:^3.0.2"
checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75
languageName: node
linkType: hard
"flat-cache@npm:^4.0.0":
version: 4.0.1
resolution: "flat-cache@npm:4.0.1"
@ -2044,6 +2214,13 @@ __metadata:
languageName: node
linkType: hard
"fs.realpath@npm:^1.0.0":
version: 1.0.0
resolution: "fs.realpath@npm:1.0.0"
checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948
languageName: node
linkType: hard
"fsevents@npm:~2.3.3":
version: 2.3.3
resolution: "fsevents@npm:2.3.3"
@ -2106,6 +2283,29 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^7.1.3":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
fs.realpath: "npm:^1.0.0"
inflight: "npm:^1.0.4"
inherits: "npm:2"
minimatch: "npm:^3.1.1"
once: "npm:^1.3.0"
path-is-absolute: "npm:^1.0.0"
checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe
languageName: node
linkType: hard
"globals@npm:^13.19.0":
version: 13.24.0
resolution: "globals@npm:13.24.0"
dependencies:
type-fest: "npm:^0.20.2"
checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd
languageName: node
linkType: hard
"globals@npm:^14.0.0":
version: 14.0.0
resolution: "globals@npm:14.0.0"
@ -2208,6 +2408,23 @@ __metadata:
languageName: node
linkType: hard
"inflight@npm:^1.0.4":
version: 1.0.6
resolution: "inflight@npm:1.0.6"
dependencies:
once: "npm:^1.3.0"
wrappy: "npm:1"
checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2
languageName: node
linkType: hard
"inherits@npm:2":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2
languageName: node
linkType: hard
"ip-address@npm:^9.0.5":
version: 9.0.5
resolution: "ip-address@npm:9.0.5"
@ -2255,6 +2472,13 @@ __metadata:
languageName: node
linkType: hard
"is-path-inside@npm:^3.0.3":
version: 3.0.3
resolution: "is-path-inside@npm:3.0.3"
checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05
languageName: node
linkType: hard
"isexe@npm:^2.0.0":
version: 2.0.0
resolution: "isexe@npm:2.0.0"
@ -2300,6 +2524,13 @@ __metadata:
languageName: node
linkType: hard
"jschardet@npm:latest":
version: 3.1.4
resolution: "jschardet@npm:3.1.4"
checksum: 10c0/d72c724ff60bc185d3962617ffda6849c6d632a935820841078c656a5247d73617a5df3b233e1fb1064de8683f7dae1b422b68186d1d6db22117b59edb5433dc
languageName: node
linkType: hard
"json-buffer@npm:3.0.1":
version: 3.0.1
resolution: "json-buffer@npm:3.0.1"
@ -2321,7 +2552,7 @@ __metadata:
languageName: node
linkType: hard
"keyv@npm:^4.5.4":
"keyv@npm:^4.5.3, keyv@npm:^4.5.4":
version: 4.5.4
resolution: "keyv@npm:4.5.4"
dependencies:
@ -2363,7 +2594,7 @@ __metadata:
languageName: node
linkType: hard
"lodash@npm:^4.17.21":
"lodash@npm:^4.17.14, lodash@npm:^4.17.21":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c
@ -2428,7 +2659,7 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^3.1.2":
"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
dependencies:
@ -2605,6 +2836,15 @@ __metadata:
languageName: node
linkType: hard
"once@npm:^1.3.0":
version: 1.4.0
resolution: "once@npm:1.4.0"
dependencies:
wrappy: "npm:1"
checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0
languageName: node
linkType: hard
"optionator@npm:^0.9.3":
version: 0.9.4
resolution: "optionator@npm:0.9.4"
@ -2669,6 +2909,13 @@ __metadata:
languageName: node
linkType: hard
"path-is-absolute@npm:^1.0.0":
version: 1.0.1
resolution: "path-is-absolute@npm:1.0.1"
checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078
languageName: node
linkType: hard
"path-key@npm:^3.1.0":
version: 3.1.1
resolution: "path-key@npm:3.1.1"
@ -2802,6 +3049,7 @@ __metadata:
dependencies:
"@eslint/eslintrc": "npm:^3.2.0"
"@eslint/js": "npm:^9.17.0"
"@microsoft/eslint-formatter-sarif": "npm:^3.1.0"
"@types/node": "npm:^22.10.2"
"@types/pg": "npm:^8.11.10"
"@typescript-eslint/eslint-plugin": "npm:^8.18.1"
@ -2810,8 +3058,10 @@ __metadata:
drizzle-kit: "npm:^0.30.1"
drizzle-orm: "npm:^0.38.2"
eslint: "npm:^9.17.0"
eslint-config-prettier: "npm:^9.1.0"
globals: "npm:^15.14.0"
pg: "npm:^8.13.1"
prettier: "npm:3.4.2"
ts-node: "npm:^10.9.2"
tsx: "npm:^4.19.2"
typescript: "npm:^5.7.2"
@ -2892,6 +3142,15 @@ __metadata:
languageName: node
linkType: hard
"prettier@npm:3.4.2":
version: 3.4.2
resolution: "prettier@npm:3.4.2"
bin:
prettier: bin/prettier.cjs
checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446
languageName: node
linkType: hard
"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0":
version: 4.2.0
resolution: "proc-log@npm:4.2.0"
@ -2951,6 +3210,17 @@ __metadata:
languageName: node
linkType: hard
"rimraf@npm:^3.0.2":
version: 3.0.2
resolution: "rimraf@npm:3.0.2"
dependencies:
glob: "npm:^7.1.3"
bin:
rimraf: bin.js
checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8
languageName: node
linkType: hard
"run-parallel@npm:^1.1.9":
version: 1.2.0
resolution: "run-parallel@npm:1.2.0"
@ -3137,6 +3407,13 @@ __metadata:
languageName: node
linkType: hard
"text-table@npm:^0.2.0":
version: 0.2.0
resolution: "text-table@npm:0.2.0"
checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c
languageName: node
linkType: hard
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
@ -3232,6 +3509,13 @@ __metadata:
languageName: node
linkType: hard
"type-fest@npm:^0.20.2":
version: 0.20.2
resolution: "type-fest@npm:0.20.2"
checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3
languageName: node
linkType: hard
"typescript@npm:^5.7.2":
version: 5.7.2
resolution: "typescript@npm:5.7.2"
@ -3300,6 +3584,13 @@ __metadata:
languageName: node
linkType: hard
"utf8@npm:^3.0.0":
version: 3.0.0
resolution: "utf8@npm:3.0.0"
checksum: 10c0/675d008bab65fc463ce718d5cae8fd4c063540f269e4f25afebce643098439d53e7164bb1f193e0c3852825c7e3e32fbd8641163d19a618dbb53f1f09acb0d5a
languageName: node
linkType: hard
"v8-compile-cache-lib@npm:^3.0.1":
version: 3.0.1
resolution: "v8-compile-cache-lib@npm:3.0.1"
@ -3358,6 +3649,13 @@ __metadata:
languageName: node
linkType: hard
"wrappy@npm:1":
version: 1.0.2
resolution: "wrappy@npm:1.0.2"
checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0
languageName: node
linkType: hard
"ws@npm:^8.16.0":
version: 8.18.0
resolution: "ws@npm:8.18.0"