fix: add everything for eslint fix

This commit is contained in:
p-sw 2024-06-14 22:47:39 +09:00
parent bf13cf9e57
commit aa074d16c1
11 changed files with 529 additions and 71 deletions

View File

@ -1,3 +1,92 @@
{
"extends": ["oclif", "oclif-typescript", "prettier"]
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"xo-space",
"plugin:n/recommended",
"plugin:unicorn/recommended",
"plugin:import/recommended",
"plugin:import/typescript",
"plugin:perfectionist/recommended-natural",
"prettier"
],
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint",
"n",
"unicorn",
"import"
],
"rules": {
"capitalized-comments": 0,
"comma-dangle": ["error", "always-multiline"],
"default-case": 0,
"no-multi-spaces": 0,
"n/shebang": 0,
"curly": 0,
"quotes": ["error","single",{
"avoidEscape": true
}],
"semi": ["error","never"],
"unicorn/prevent-abbreviations": "off",
"unicorn/no-await-expression-member": "off",
"unicorn/no-null": "off",
"unicorn/prefer-module": "warn",
"logical-assignment-operators": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_"
}
],
"@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/no-var-requires": "off",
"import/no-unresolved": "error",
"import/default": "warn",
"n/no-missing-import": "off",
"n/no-unsupported-features/es-syntax": "off",
"no-unused-expressions": "off",
"no-useless-constructor": "off",
"perfectionist/sort-classes": [
"error",
{
"groups": [
"index-signature",
"static-property",
"property",
"private-property",
"constructor",
"static-method",
"static-private-method",
["get-method", "set-method"],
"method",
"private-method",
"unknown"
],
"order": "asc",
"type": "alphabetical"
}
],
"valid-jsdoc": ["warn", {
"requireParamType": false,
"requireReturnType": false
}]
},
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [
".ts", ".tsx"
]
},
"import/resolver": {
"typescript": {
"alwaysTryTypes": true
}
}
},
"globals": {
"describe": true,
"it": true
}
}

View File

@ -14,6 +14,7 @@
"@types/treeify": "^1.0.3",
"ink": "^5.0.1",
"ink-text-input": "^6.0.0",
"node-fetch": "^3.3.2",
"ora": "^8.0.1",
"react": "^18.3.1",
"treeify": "^1.1.0",
@ -25,12 +26,19 @@
"@types/chai": "^4",
"@types/ink-divider": "^2.0.4",
"@types/node": "^18",
"@typescript-eslint/eslint-plugin": "^7.13.0",
"@typescript-eslint/parser": "^7.13.0",
"chai": "^4",
"eslint": "^8",
"eslint-config-oclif": "^5",
"eslint-config-oclif-typescript": "^3",
"eslint-config-prettier": "^9",
"eslint-config-xo-space": "^0.35.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^17.9.0",
"eslint-plugin-perfectionist": "^2.11.0",
"eslint-plugin-unicorn": "^54.0.0",
"oclif": "^4",
"shx": "^0.3.3",
"tailwind-scrollbar": "^3.1.0",

View File

@ -1,9 +1,10 @@
import {Command, Flags} from '@oclif/core'
import {getAvailableComponentNames, getRegistry, getComponentURL, getComponentRealname} from '../helpers/registry.js'
import ora from 'ora'
import treeify from 'treeify'
import {asTree} from 'treeify'
import {loadConfig, validateConfig} from '../helpers/config.js'
import {getComponentsInstalled} from '../helpers/path.js'
import {getAvailableComponentNames, getComponentRealname, getComponentURL, getRegistry} from '../helpers/registry.js'
export default class List extends Command {
static override description = 'Prints all available components in registry and components installed in this project.'
@ -11,9 +12,9 @@ export default class List extends Command {
static override examples = ['<%= config.bin %> <%= command.id %>']
static override flags = {
config: Flags.string({char: 'p', description: 'path to config'}),
registry: Flags.string({char: 'r', description: 'override registry url'}),
url: Flags.boolean({char: 'u', description: 'include component file URL'}),
config: Flags.string({char: 'p', description: 'path to config'}),
}
public async run(): Promise<void> {
@ -28,25 +29,27 @@ export default class List extends Command {
if (flags.registry) {
this.log(`Using ${flags.registry} for registry.`)
}
const unsafeRegistry = await getRegistry(flags.registry)
if (!unsafeRegistry.ok) {
registrySpinner.fail(unsafeRegistry.message)
return
}
const registry = unsafeRegistry.registry
const {registry} = unsafeRegistry
registrySpinner.succeed(`Fetched ${Object.keys(registry.components).length} components.`)
const names = await getAvailableComponentNames(registry)
getInstalledSpinner.start()
const installedNames = await getComponentsInstalled(
await Promise.all(names.map(async (name) => await getComponentRealname(registry, name))),
await Promise.all(names.map(async (name) => getComponentRealname(registry, name))),
loadedConfig,
)
getInstalledSpinner.succeed(`Got ${installedNames.length} installed components.`)
let final: Record<string, {URL?: string; installed: 'yes' | 'no'}> = {}
for (const name of names) {
let final: Record<string, {URL?: string; installed: 'no' | 'yes'}> = {}
for await (const name of names) {
const installed = installedNames.includes(await getComponentRealname(registry, name)) ? 'yes' : 'no'
if (flags.url) {
const url = await getComponentURL(registry, name)
@ -57,6 +60,6 @@ export default class List extends Command {
}
this.log('AVAILABLE COMPONENTS')
this.log(treeify.asTree(final, true, true))
this.log(asTree(final, true, true))
}
}

View File

@ -1,4 +1,4 @@
import z from 'zod'
import {z} from 'zod'
export const REGISTRY_URL = 'https://raw.githubusercontent.com/pswui/ui/main/registry.json'
export const CONFIG_DEFAULT_PATH = 'pswui.config.js'
@ -9,14 +9,20 @@ interface RegistryComponent {
export interface Registry {
base: string
components: Record<string, RegistryComponent>
paths: {
components: string
lib: string
}
components: Record<string, RegistryComponent>
}
export interface Config {
/**
* Absolute path that will used for import in component
*/
import?: {
lib?: '@pswui-lib' | string
}
/**
* Path that cli will create a file.
*/
@ -24,27 +30,27 @@ export interface Config {
components?: 'src/pswui/components' | string
lib?: 'src/pswui/lib.tsx' | string
}
/**
* Absolute path that will used for import in component
*/
import?: {
lib?: '@pswui-lib' | string
}
}
export type ResolvedConfig<T = Config> = {
[k in keyof T]-?: NonNullable<T[k]> extends object ? ResolvedConfig<NonNullable<T[k]>> : T[k]
}
export const DEFAULT_CONFIG = {
import: {
lib: '@pswui-lib',
},
paths: {
components: 'src/pswui/components',
lib: 'src/pswui/lib.tsx',
},
import: {
lib: '@pswui-lib',
},
}
export const configZod = z.object({
import: z
.object({
lib: z.string().optional().default(DEFAULT_CONFIG.import.lib),
})
.optional()
.default(DEFAULT_CONFIG.import),
paths: z
.object({
components: z.string().optional().default(DEFAULT_CONFIG.paths.components),
@ -52,10 +58,4 @@ export const configZod = z.object({
})
.optional()
.default(DEFAULT_CONFIG.paths),
import: z
.object({
lib: z.string().optional().default(DEFAULT_CONFIG.import.lib),
})
.optional()
.default(DEFAULT_CONFIG.import),
})

View File

@ -1,40 +1,43 @@
import {CONFIG_DEFAULT_PATH, DEFAULT_CONFIG, ResolvedConfig} from '../const.js'
import {configZod} from '../const.js'
import {join} from 'node:path'
import {existsSync} from 'node:fs'
import {changeExtension} from './path.js'
import {colorize} from '@oclif/core/ux'
import {existsSync} from 'node:fs'
import path from 'node:path'
import {CONFIG_DEFAULT_PATH, DEFAULT_CONFIG, ResolvedConfig, configZod} from '../const.js'
import {changeExtension} from './path.js'
export async function loadConfig(config?: string): Promise<unknown> {
const userConfigPath = config ? join(process.cwd(), config) : null
const defaultConfigPath = join(process.cwd(), CONFIG_DEFAULT_PATH)
const cjsConfigPath = join(process.cwd(), await changeExtension(CONFIG_DEFAULT_PATH, '.cjs'))
const mjsConfigPath = join(process.cwd(), await changeExtension(CONFIG_DEFAULT_PATH, '.mjs'))
const userConfigPath = config ? path.join(process.cwd(), config) : null
const defaultConfigPath = path.join(process.cwd(), CONFIG_DEFAULT_PATH)
const cjsConfigPath = path.join(process.cwd(), await changeExtension(CONFIG_DEFAULT_PATH, '.cjs'))
const mjsConfigPath = path.join(process.cwd(), await changeExtension(CONFIG_DEFAULT_PATH, '.mjs'))
if (userConfigPath) {
if (existsSync(userConfigPath)) {
return (await import(userConfigPath)).default
} else {
throw new Error(`Error: config ${userConfigPath} not found.`)
}
throw new Error(`Error: config ${userConfigPath} not found.`)
}
if (existsSync(defaultConfigPath)) {
return (await import(defaultConfigPath)).default
}
if (existsSync(cjsConfigPath)) {
return (await import(cjsConfigPath)).default
}
if (existsSync(mjsConfigPath)) {
return (await import(mjsConfigPath)).default
}
return DEFAULT_CONFIG
}
export async function validateConfig(log: (message: string) => void, config?: unknown): Promise<ResolvedConfig> {
const parsedConfig: ResolvedConfig = await configZod.parseAsync(config)
log(colorize('gray', `Install component to: ${join(process.cwd(), parsedConfig.paths.components)}`))
log(colorize('gray', `Install shared module to: ${join(process.cwd(), parsedConfig.paths.lib)}`))
log(colorize('gray', `Install component to: ${path.join(process.cwd(), parsedConfig.paths.components)}`))
log(colorize('gray', `Install shared module to: ${path.join(process.cwd(), parsedConfig.paths.lib)}`))
log(colorize('gray', `Import shared with: ${parsedConfig.import.lib}`))
return parsedConfig
}

View File

@ -1,18 +1,26 @@
import {ResolvedConfig} from '../const.js'
import {readdir} from 'node:fs/promises'
import {existsSync} from 'node:fs'
import {basename, dirname, extname, join} from 'node:path'
import {readdir} from 'node:fs/promises'
import path from 'node:path'
import {ResolvedConfig} from '../const.js'
export async function getComponentsInstalled(components: string[], config: ResolvedConfig) {
const componentPath = join(process.cwd(), config.paths.components)
const componentPath = path.join(process.cwd(), config.paths.components)
if (existsSync(componentPath)) {
const dir = await readdir(componentPath)
return dir.reduce((prev, current) => (components.includes(current) ? [...prev, current] : prev), [] as string[])
} else {
return []
const dirOnlyContainsComponent = []
for (const fileName of dir) {
if (components.includes(fileName)) {
dirOnlyContainsComponent.push(fileName)
}
}
return dirOnlyContainsComponent
}
return []
}
export async function changeExtension(path: string, extension: string): Promise<string> {
return join(dirname(path), basename(path, extname(path)) + extension)
export async function changeExtension(_path: string, extension: string): Promise<string> {
return path.join(path.dirname(_path), path.basename(_path, path.extname(_path)) + extension)
}

View File

@ -1,6 +1,10 @@
import fetch from 'node-fetch'
import {REGISTRY_URL, Registry} from '../const.js'
export async function getRegistry(REGISTRY_OVERRIDE_URL?: string): Promise<{ok: true; registry: Registry} | {ok: false; message: string}> {
export async function getRegistry(
REGISTRY_OVERRIDE_URL?: string,
): Promise<{message: string; ok: false} | {ok: true; registry: Registry}> {
const registryResponse = await fetch(REGISTRY_OVERRIDE_URL ?? REGISTRY_URL)
if (registryResponse.ok) {
@ -8,11 +12,11 @@ export async function getRegistry(REGISTRY_OVERRIDE_URL?: string): Promise<{ok:
ok: true,
registry: (await registryResponse.json()) as Registry,
}
} else {
return {
ok: false,
message: `Error while fetching registry: ${registryResponse.status} ${registryResponse.statusText}`,
}
}
return {
message: `Error while fetching registry: ${registryResponse.status} ${registryResponse.statusText}`,
ok: false,
}
}

View File

@ -1,29 +1,32 @@
export async function jaroWinkler(a: string, b: string): Promise<number> {
const p = 0.1
if (!a.length || !b.length) return 0.0
if (a === b) return 1.0
if (a.length === 0 || b.length === 0) return 0
if (a === b) return 1
const range = Math.floor(Math.max(a.length, b.length) / 2) - 1
let matches = 0
let aMatches = new Array(a.length)
let bMatches = new Array(b.length)
const aMatches = Array.from({length: a.length})
const bMatches = Array.from({length: b.length})
for (let i = 0; i < a.length; i++) {
for (const [i, element] of Object.entries(a).map(
([index, element]) => [Number.parseInt(index, 10), element] as const,
)) {
const start = i >= range ? i - range : 0
const end = i + range <= b.length - 1 ? i + range : b.length - 1
for (let j = start; j <= end; j++) {
if (bMatches[j] !== true && a[i] === b[j]) {
if (bMatches[j] !== true && element === b[j]) {
++matches
aMatches[i] = bMatches[j] = true
aMatches[i] = true
bMatches[j] = true
break
}
}
}
if (matches === 0) return 0.0
if (matches === 0) return 0
let t = 0
@ -43,7 +46,7 @@ export async function jaroWinkler(a: string, b: string): Promise<number> {
if (a[i] !== b[j]) ++t
}
t = t / 2.0
t /= 2
const J = (matches / a.length + matches / b.length + (matches - t) / matches) / 3
return J + Math.min((p * t) / matches, 1) * (1 - J)

View File

@ -1,2 +1,2 @@
export {run} from '@oclif/core'
export * from './public.js'
export {run} from '@oclif/core'

View File

@ -4,4 +4,6 @@ function buildConfig(config: Config): Config {
return config
}
export {Config, buildConfig}
export {buildConfig}
export {Config} from './const.js'

350
yarn.lock
View File

@ -939,7 +939,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-validator-identifier@npm:^7.22.5, @babel/helper-validator-identifier@npm:^7.24.7":
"@babel/helper-validator-identifier@npm:^7.22.5, @babel/helper-validator-identifier@npm:^7.24.5, @babel/helper-validator-identifier@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/helper-validator-identifier@npm:7.24.7"
checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651
@ -1225,7 +1225,7 @@ __metadata:
languageName: node
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
dependencies:
@ -1236,7 +1236,7 @@ __metadata:
languageName: node
linkType: hard
"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1":
"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.0, @eslint-community/regexpp@npm:^4.6.1":
version: 4.10.1
resolution: "@eslint-community/regexpp@npm:4.10.1"
checksum: 10c0/f59376025d0c91dd9fdf18d33941df499292a3ecba3e9889c360f3f6590197d30755604588786cdca0f9030be315a26b206014af4b65c0ff85b4ec49043de780
@ -1260,6 +1260,23 @@ __metadata:
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^3.0.2":
version: 3.1.0
resolution: "@eslint/eslintrc@npm:3.1.0"
dependencies:
ajv: "npm:^6.12.4"
debug: "npm:^4.3.2"
espree: "npm:^10.0.1"
globals: "npm:^14.0.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/5b7332ed781edcfc98caa8dedbbb843abfb9bda2e86538529c843473f580e40c69eb894410eddc6702f487e9ee8f8cfa8df83213d43a8fdb549f23ce06699167
languageName: node
linkType: hard
"@eslint/js@npm:8.57.0":
version: 8.57.0
resolution: "@eslint/js@npm:8.57.0"
@ -1781,14 +1798,22 @@ __metadata:
"@types/ink-divider": "npm:^2.0.4"
"@types/node": "npm:^18"
"@types/treeify": "npm:^1.0.3"
"@typescript-eslint/eslint-plugin": "npm:^7.13.0"
"@typescript-eslint/parser": "npm:^7.13.0"
chai: "npm:^4"
eslint: "npm:^8"
eslint-config-oclif: "npm:^5"
eslint-config-oclif-typescript: "npm:^3"
eslint-config-prettier: "npm:^9"
eslint-config-xo-space: "npm:^0.35.0"
eslint-import-resolver-typescript: "npm:^3.6.1"
eslint-plugin-import: "npm:^2.29.1"
eslint-plugin-n: "npm:^17.9.0"
eslint-plugin-perfectionist: "npm:^2.11.0"
eslint-plugin-unicorn: "npm:^54.0.0"
ink: "npm:^5.0.1"
ink-text-input: "npm:^6.0.0"
node-fetch: "npm:^3.3.2"
oclif: "npm:^4"
ora: "npm:^8.0.1"
react: "npm:^18.3.1"
@ -2798,6 +2823,29 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/eslint-plugin@npm:^7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/eslint-plugin@npm:7.13.0"
dependencies:
"@eslint-community/regexpp": "npm:^4.10.0"
"@typescript-eslint/scope-manager": "npm:7.13.0"
"@typescript-eslint/type-utils": "npm:7.13.0"
"@typescript-eslint/utils": "npm:7.13.0"
"@typescript-eslint/visitor-keys": "npm:7.13.0"
graphemer: "npm:^1.4.0"
ignore: "npm:^5.3.1"
natural-compare: "npm:^1.4.0"
ts-api-utils: "npm:^1.3.0"
peerDependencies:
"@typescript-eslint/parser": ^7.0.0
eslint: ^8.56.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/00a69d029713252c03490e0a9c49c9136d99c9c1888dd3570b1e044c9a740b59c2e488849beda654d6fc0a69e2549445c16d443bcf5832c66b7a4472b42826ae
languageName: node
linkType: hard
"@typescript-eslint/eslint-plugin@npm:^7.2.0":
version: 7.12.0
resolution: "@typescript-eslint/eslint-plugin@npm:7.12.0"
@ -2839,6 +2887,24 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/parser@npm:7.13.0"
dependencies:
"@typescript-eslint/scope-manager": "npm:7.13.0"
"@typescript-eslint/types": "npm:7.13.0"
"@typescript-eslint/typescript-estree": "npm:7.13.0"
"@typescript-eslint/visitor-keys": "npm:7.13.0"
debug: "npm:^4.3.4"
peerDependencies:
eslint: ^8.56.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/8cf58116d6577c9459db3e3047e337dc41d914bf222a33b20e149515d037e09e6171fbac5af02b66aa6fbad81dd492fa5b7bcd44aaf659d4e9b02ab23100f955
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^7.2.0":
version: 7.12.0
resolution: "@typescript-eslint/parser@npm:7.12.0"
@ -2887,6 +2953,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/scope-manager@npm:7.13.0"
dependencies:
"@typescript-eslint/types": "npm:7.13.0"
"@typescript-eslint/visitor-keys": "npm:7.13.0"
checksum: 10c0/0f5c75578ee8cb3c31b9c4e222f4787ea4621fde639f3ac0a467e56250f3cc48bf69304c33b2b8cc8ba5ec69f3977b6c463b8d9e791806af9a8c6a2233505432
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/type-utils@npm:6.21.0"
@ -2921,6 +2997,23 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/type-utils@npm:7.13.0"
dependencies:
"@typescript-eslint/typescript-estree": "npm:7.13.0"
"@typescript-eslint/utils": "npm:7.13.0"
debug: "npm:^4.3.4"
ts-api-utils: "npm:^1.3.0"
peerDependencies:
eslint: ^8.56.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/240e9b34e8602444cd234b84c9e3e52c565e3141a4942751f597c38cee48f7cb43c42a093d219ac6404dca2e74b54d2a8121fe66cbc59f404cb0ec2adecd8520
languageName: node
linkType: hard
"@typescript-eslint/types@npm:5.62.0":
version: 5.62.0
resolution: "@typescript-eslint/types@npm:5.62.0"
@ -2942,6 +3035,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/types@npm:7.13.0"
checksum: 10c0/73dc59d4b0d0f0fed9f4b9b55f143185259ced5f0ca8ad9efa881eea1ff1cc9ccc1f175af2e2069f7b92a69c9f64f9be29d160c932b8f70a129af6b738b23be0
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:5.62.0":
version: 5.62.0
resolution: "@typescript-eslint/typescript-estree@npm:5.62.0"
@ -2998,6 +3098,25 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/typescript-estree@npm:7.13.0"
dependencies:
"@typescript-eslint/types": "npm:7.13.0"
"@typescript-eslint/visitor-keys": "npm:7.13.0"
debug: "npm:^4.3.4"
globby: "npm:^11.1.0"
is-glob: "npm:^4.0.3"
minimatch: "npm:^9.0.4"
semver: "npm:^7.6.0"
ts-api-utils: "npm:^1.3.0"
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/75b09384bc14afa3d3623507432d19d8ca91c4e936b1d2c1cfe4654a9c07179f1bc04aa99d1b541e84e40a01536862b23058f462d61b4a797c27d02f64b8aa51
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:6.21.0":
version: 6.21.0
resolution: "@typescript-eslint/utils@npm:6.21.0"
@ -3029,6 +3148,20 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/utils@npm:7.13.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:7.13.0"
"@typescript-eslint/types": "npm:7.13.0"
"@typescript-eslint/typescript-estree": "npm:7.13.0"
peerDependencies:
eslint: ^8.56.0
checksum: 10c0/5391f628775dec1a7033d954a066b77eeb03ac04c0a94690e60d8ebe351b57fdbda51b90cf785c901bcdf68b88ca3bcb5533ac59276b8b626b73eb18ac3280b6
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:^5.62.0":
version: 5.62.0
resolution: "@typescript-eslint/utils@npm:5.62.0"
@ -3077,6 +3210,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:7.13.0":
version: 7.13.0
resolution: "@typescript-eslint/visitor-keys@npm:7.13.0"
dependencies:
"@typescript-eslint/types": "npm:7.13.0"
eslint-visitor-keys: "npm:^3.4.3"
checksum: 10c0/5daa45c3358aeab41495c4419cc26fbbe54a42bb18c6f0f70f0ac31cb7bc5890ec6478a1a6bb00b0b8522663fe5466ee0fd2972bd4235b07140918875797f4eb
languageName: node
linkType: hard
"@ungap/structured-clone@npm:^1.2.0":
version: 1.2.0
resolution: "@ungap/structured-clone@npm:1.2.0"
@ -3122,6 +3265,15 @@ __metadata:
languageName: node
linkType: hard
"acorn@npm:^8.11.3":
version: 8.12.0
resolution: "acorn@npm:8.12.0"
bin:
acorn: bin/acorn
checksum: 10c0/a19f9dead009d3b430fa3c253710b47778cdaace15b316de6de93a68c355507bc1072a9956372b6c990cbeeb167d4a929249d0faeb8ae4bb6911d68d53299549
languageName: node
linkType: hard
"acorn@npm:^8.4.1, acorn@npm:^8.9.0":
version: 8.11.3
resolution: "acorn@npm:8.11.3"
@ -3912,6 +4064,15 @@ __metadata:
languageName: node
linkType: hard
"core-js-compat@npm:^3.37.0":
version: 3.37.1
resolution: "core-js-compat@npm:3.37.1"
dependencies:
browserslist: "npm:^4.23.0"
checksum: 10c0/4e2da9c900f2951a57947af7aeef4d16f2c75d7f7e966c0d0b62953f65225003ade5e84d3ae98847f65b24c109c606821d9dc925db8ca418fb761e7c81963c2a
languageName: node
linkType: hard
"cosmiconfig@npm:^9.0.0":
version: 9.0.0
resolution: "cosmiconfig@npm:9.0.0"
@ -3963,6 +4124,13 @@ __metadata:
languageName: node
linkType: hard
"data-uri-to-buffer@npm:^4.0.0":
version: 4.0.1
resolution: "data-uri-to-buffer@npm:4.0.1"
checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b
languageName: node
linkType: hard
"data-view-buffer@npm:^1.0.1":
version: 1.0.1
resolution: "data-view-buffer@npm:1.0.1"
@ -4205,7 +4373,7 @@ __metadata:
languageName: node
linkType: hard
"enhanced-resolve@npm:^5.12.0":
"enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.17.0":
version: 5.17.0
resolution: "enhanced-resolve@npm:5.17.0"
dependencies:
@ -4463,6 +4631,17 @@ __metadata:
languageName: node
linkType: hard
"eslint-compat-utils@npm:^0.5.1":
version: 0.5.1
resolution: "eslint-compat-utils@npm:0.5.1"
dependencies:
semver: "npm:^7.5.4"
peerDependencies:
eslint: ">=6.0.0"
checksum: 10c0/325e815205fab70ebcd379f6d4b5d44c7d791bb8dfe0c9888233f30ebabd9418422595b53a781b946c768d9244d858540e5e6129a6b3dd6d606f467d599edc6c
languageName: node
linkType: hard
"eslint-config-oclif-typescript@npm:^3":
version: 3.1.7
resolution: "eslint-config-oclif-typescript@npm:3.1.7"
@ -4565,6 +4744,19 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-es-x@npm:^7.5.0":
version: 7.7.0
resolution: "eslint-plugin-es-x@npm:7.7.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.1.2"
"@eslint-community/regexpp": "npm:^4.6.0"
eslint-compat-utils: "npm:^0.5.1"
peerDependencies:
eslint: ">=8"
checksum: 10c0/73f04fb58bbf023422681e6af3be9540dfe3d3485021c6d4050b924797e302faef3de83ac8a4d9a4ac0d5704d6f241f95cc85e7459573476d3f658411ae1e627
languageName: node
linkType: hard
"eslint-plugin-es@npm:^4.1.0":
version: 4.1.0
resolution: "eslint-plugin-es@npm:4.1.0"
@ -4635,6 +4827,24 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-n@npm:^17.9.0":
version: 17.9.0
resolution: "eslint-plugin-n@npm:17.9.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0"
enhanced-resolve: "npm:^5.17.0"
eslint-plugin-es-x: "npm:^7.5.0"
get-tsconfig: "npm:^4.7.0"
globals: "npm:^15.0.0"
ignore: "npm:^5.2.4"
minimatch: "npm:^9.0.0"
semver: "npm:^7.5.3"
peerDependencies:
eslint: ">=8.23.0"
checksum: 10c0/8c9dc278eaf7ce7e0621127f82e56a7a117cecbd4dfa880145d930a62fc93ef47057f18805bf1bba944cbafa0ae9115c9bd52628193e1206810bb7bc3e1d2f25
languageName: node
linkType: hard
"eslint-plugin-perfectionist@npm:^2.10.0":
version: 2.10.0
resolution: "eslint-plugin-perfectionist@npm:2.10.0"
@ -4661,6 +4871,32 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-perfectionist@npm:^2.11.0":
version: 2.11.0
resolution: "eslint-plugin-perfectionist@npm:2.11.0"
dependencies:
"@typescript-eslint/utils": "npm:^6.13.0 || ^7.0.0"
minimatch: "npm:^9.0.3"
natural-compare-lite: "npm:^1.4.0"
peerDependencies:
astro-eslint-parser: ^1.0.2
eslint: ">=8.0.0"
svelte: ">=3.0.0"
svelte-eslint-parser: ^0.37.0
vue-eslint-parser: ">=9.0.0"
peerDependenciesMeta:
astro-eslint-parser:
optional: true
svelte:
optional: true
svelte-eslint-parser:
optional: true
vue-eslint-parser:
optional: true
checksum: 10c0/c9462b33187f18dcd808c7ed51af671b8f960a22c730e7c22fbb0a0a65258f5106595ebbbe22b392bba2d27ff7b7111502248bba3d8505c585473bb524fdf6ec
languageName: node
linkType: hard
"eslint-plugin-react-hooks@npm:^4.6.0":
version: 4.6.2
resolution: "eslint-plugin-react-hooks@npm:4.6.2"
@ -4718,6 +4954,32 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-unicorn@npm:^54.0.0":
version: 54.0.0
resolution: "eslint-plugin-unicorn@npm:54.0.0"
dependencies:
"@babel/helper-validator-identifier": "npm:^7.24.5"
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@eslint/eslintrc": "npm:^3.0.2"
ci-info: "npm:^4.0.0"
clean-regexp: "npm:^1.0.0"
core-js-compat: "npm:^3.37.0"
esquery: "npm:^1.5.0"
indent-string: "npm:^4.0.0"
is-builtin-module: "npm:^3.2.1"
jsesc: "npm:^3.0.2"
pluralize: "npm:^8.0.0"
read-pkg-up: "npm:^7.0.1"
regexp-tree: "npm:^0.1.27"
regjsparser: "npm:^0.10.0"
semver: "npm:^7.6.1"
strip-indent: "npm:^3.0.0"
peerDependencies:
eslint: ">=8.56.0"
checksum: 10c0/cca557df20f31f6a072de6eba28129ed68fff059bef7ba2d373be650bef46ba899aeba89b2be5a309657e638400eb9ae0d0cd7e2f900c22eca0a6b8e2d0f4661
languageName: node
linkType: hard
"eslint-scope@npm:^5.1.1":
version: 5.1.1
resolution: "eslint-scope@npm:5.1.1"
@ -4779,6 +5041,13 @@ __metadata:
languageName: node
linkType: hard
"eslint-visitor-keys@npm:^4.0.0":
version: 4.0.0
resolution: "eslint-visitor-keys@npm:4.0.0"
checksum: 10c0/76619f42cf162705a1515a6868e6fc7567e185c7063a05621a8ac4c3b850d022661262c21d9f1fc1d144ecf0d5d64d70a3f43c15c3fc969a61ace0fb25698cf5
languageName: node
linkType: hard
"eslint@npm:^8, eslint@npm:^8.57.0":
version: 8.57.0
resolution: "eslint@npm:8.57.0"
@ -4827,6 +5096,17 @@ __metadata:
languageName: node
linkType: hard
"espree@npm:^10.0.1":
version: 10.0.1
resolution: "espree@npm:10.0.1"
dependencies:
acorn: "npm:^8.11.3"
acorn-jsx: "npm:^5.3.2"
eslint-visitor-keys: "npm:^4.0.0"
checksum: 10c0/7c0f84afa0f9db7bb899619e6364ed832ef13fe8943691757ddde9a1805ae68b826ed66803323015f707a629a5507d0d290edda2276c25131fe0ad883b8b5636
languageName: node
linkType: hard
"espree@npm:^9.6.0, espree@npm:^9.6.1":
version: 9.6.1
resolution: "espree@npm:9.6.1"
@ -4954,6 +5234,16 @@ __metadata:
languageName: node
linkType: hard
"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4":
version: 3.2.0
resolution: "fetch-blob@npm:3.2.0"
dependencies:
node-domexception: "npm:^1.0.0"
web-streams-polyfill: "npm:^3.0.3"
checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69
languageName: node
linkType: hard
"file-entry-cache@npm:^6.0.1":
version: 6.0.1
resolution: "file-entry-cache@npm:6.0.1"
@ -5054,6 +5344,15 @@ __metadata:
languageName: node
linkType: hard
"formdata-polyfill@npm:^4.0.10":
version: 4.0.10
resolution: "formdata-polyfill@npm:4.0.10"
dependencies:
fetch-blob: "npm:^3.1.2"
checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6
languageName: node
linkType: hard
"fraction.js@npm:^4.3.7":
version: 4.3.7
resolution: "fraction.js@npm:4.3.7"
@ -5208,7 +5507,7 @@ __metadata:
languageName: node
linkType: hard
"get-tsconfig@npm:^4.5.0":
"get-tsconfig@npm:^4.5.0, get-tsconfig@npm:^4.7.0":
version: 4.7.5
resolution: "get-tsconfig@npm:4.7.5"
dependencies:
@ -5294,6 +5593,20 @@ __metadata:
languageName: node
linkType: hard
"globals@npm:^14.0.0":
version: 14.0.0
resolution: "globals@npm:14.0.0"
checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d
languageName: node
linkType: hard
"globals@npm:^15.0.0":
version: 15.4.0
resolution: "globals@npm:15.4.0"
checksum: 10c0/19041b8fd49deb154e1cb706c82756ab7184c8ae3495aab183efcad9edd1b6320cc54af1a9110d8699245bef124834b004a8156ca988ba7814c25ec71a43f6a4
languageName: node
linkType: hard
"globalthis@npm:^1.0.3":
version: 1.0.4
resolution: "globalthis@npm:1.0.4"
@ -6761,6 +7074,24 @@ __metadata:
languageName: node
linkType: hard
"node-domexception@npm:^1.0.0":
version: 1.0.0
resolution: "node-domexception@npm:1.0.0"
checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b
languageName: node
linkType: hard
"node-fetch@npm:^3.3.2":
version: 3.3.2
resolution: "node-fetch@npm:3.3.2"
dependencies:
data-uri-to-buffer: "npm:^4.0.0"
fetch-blob: "npm:^3.1.4"
formdata-polyfill: "npm:^4.0.10"
checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538
languageName: node
linkType: hard
"node-gyp@npm:^10.0.0, node-gyp@npm:^10.1.0, node-gyp@npm:latest":
version: 10.1.0
resolution: "node-gyp@npm:10.1.0"
@ -8074,7 +8405,7 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2":
"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.1, semver@npm:^7.6.2":
version: 7.6.2
resolution: "semver@npm:7.6.2"
bin:
@ -9115,6 +9446,13 @@ __metadata:
languageName: node
linkType: hard
"web-streams-polyfill@npm:^3.0.3":
version: 3.3.3
resolution: "web-streams-polyfill@npm:3.3.3"
checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f
languageName: node
linkType: hard
"which-boxed-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "which-boxed-primitive@npm:1.0.2"