lint wip
This commit is contained in:
parent
2116ee4ffc
commit
6e649df0af
@ -27,7 +27,7 @@ Refactor purement structurel (sans changement fonctionnel) :
|
|||||||
- `components/authorPage/SeriesList.tsx`
|
- `components/authorPage/SeriesList.tsx`
|
||||||
- `components/authorPage/useAuthorData.ts`
|
- `components/authorPage/useAuthorData.ts`
|
||||||
- `components/authorPage/resolveAuthorHashIdOrPubkey.ts`
|
- `components/authorPage/resolveAuthorHashIdOrPubkey.ts`
|
||||||
- `pages/api/nip95-upload.ts` (shim de compatibilité pour la validation Next/TypeScript)
|
- `pages/api/nip95-upload.ts` (route API NIP-95 upload; impl déplacée vers `lib/api/nip95-upload/*` pour éviter des routes Next involontaires)
|
||||||
- `lib/metadataExtractor/reviewTip.ts` (validation stricte des champs requis)
|
- `lib/metadataExtractor/reviewTip.ts` (validation stricte des champs requis)
|
||||||
- `lib/paymentNotes/sponsoring.ts` (exactOptionalPropertyTypes)
|
- `lib/paymentNotes/sponsoring.ts` (exactOptionalPropertyTypes)
|
||||||
- `components/relayManager/RelayCard.tsx` (typage lastSyncDate)
|
- `components/relayManager/RelayCard.tsx` (typage lastSyncDate)
|
||||||
|
|||||||
@ -34,4 +34,3 @@ export async function nip95UploadHandler(req: NextApiRequest, res: NextApiRespon
|
|||||||
function readProxyQueryParams(req: NextApiRequest): ProxyQueryParams {
|
function readProxyQueryParams(req: NextApiRequest): ProxyQueryParams {
|
||||||
return { targetEndpoint: (req.query.endpoint as string) ?? 'https://void.cat/upload', authToken: req.query.auth as string | undefined }
|
return { targetEndpoint: (req.query.endpoint as string) ?? 'https://void.cat/upload', authToken: req.query.auth as string | undefined }
|
||||||
}
|
}
|
||||||
|
|
||||||
1
lib/api/nip95-upload/index.ts
Normal file
1
lib/api/nip95-upload/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { nip95UploadHandler } from './handler'
|
||||||
@ -40,4 +40,3 @@ export function safeUnlink(filepath: string): void {
|
|||||||
console.error('Error deleting temp file:', unlinkError)
|
console.error('Error deleting temp file:', unlinkError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,4 +141,3 @@ async function readIncomingMessageBody(message: http.IncomingMessage): Promise<s
|
|||||||
message.on('error', reject)
|
message.on('error', reject)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,4 +15,3 @@ export function handleProxyRequestError(params: { error: unknown; targetEndpoint
|
|||||||
}
|
}
|
||||||
return params.error instanceof Error ? params.error : new Error(errorMessage)
|
return params.error instanceof Error ? params.error : new Error(errorMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,4 +30,3 @@ export function handleProxyError(params: {
|
|||||||
|
|
||||||
params.res.status(500).json({ error: `Failed to connect to upload endpoint: ${errorMessage}` })
|
params.res.status(500).json({ error: `Failed to connect to upload endpoint: ${errorMessage}` })
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,4 +130,3 @@ function buildHtmlErrorSuggestion(params: { is404: boolean; is403: boolean; is50
|
|||||||
}
|
}
|
||||||
return 'The endpoint returned HTML instead of JSON; verify URL and required headers'
|
return 'The endpoint returned HTML instead of JSON; verify URL and required headers'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5,4 +5,3 @@ export function getErrnoCode(error: unknown): string | undefined {
|
|||||||
const rec = error as Record<string, unknown>
|
const rec = error as Record<string, unknown>
|
||||||
return typeof rec.code === 'string' ? rec.code : undefined
|
return typeof rec.code === 'string' ? rec.code : undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,4 +23,3 @@ export interface ProxyQueryParams {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type UploadedFile = FormidableFile
|
export type UploadedFile = FormidableFile
|
||||||
|
|
||||||
@ -36,4 +36,3 @@ export function getRedirectLocation(headers: unknown): string | undefined {
|
|||||||
}
|
}
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ function processLine(line: string, index: number, state: RenderState, elements:
|
|||||||
renderParagraphOrBreak(line, index, state, elements)
|
renderParagraphOrBreak(line, index, state, elements)
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderHeading(line: string, index: number, state: RenderState, elements: React.ReactElement[]): boolean {
|
function renderHeading(line: string, _index: number, state: RenderState, elements: React.ReactElement[]): boolean {
|
||||||
if (line.startsWith('# ')) {
|
if (line.startsWith('# ')) {
|
||||||
elements.push(<h1 key={nextElementKey(state, 'h1', line)} className="text-3xl font-bold mt-8 mb-4 text-neon-cyan font-mono">{line.substring(2)}</h1>)
|
elements.push(<h1 key={nextElementKey(state, 'h1', line)} className="text-3xl font-bold mt-8 mb-4 text-neon-cyan font-mono">{line.substring(2)}</h1>)
|
||||||
return true
|
return true
|
||||||
@ -75,7 +75,7 @@ function renderHeading(line: string, index: number, state: RenderState, elements
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderListLine(line: string, index: number, state: RenderState): boolean {
|
function renderListLine(line: string, _index: number, state: RenderState): boolean {
|
||||||
if (line.startsWith('- ') || line.startsWith('* ')) {
|
if (line.startsWith('- ') || line.startsWith('* ')) {
|
||||||
state.currentList.push({ key: nextElementKey(state, 'li', line), line })
|
state.currentList.push({ key: nextElementKey(state, 'li', line), line })
|
||||||
return true
|
return true
|
||||||
@ -83,23 +83,23 @@ function renderListLine(line: string, index: number, state: RenderState): boolea
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderLinkLine(line: string, index: number, state: RenderState, elements: React.ReactElement[]): boolean {
|
function renderLinkLine(line: string, _index: number, state: RenderState, elements: React.ReactElement[]): boolean {
|
||||||
if (line.includes('[') && line.includes('](')) {
|
if (line.includes('[') && line.includes('](')) {
|
||||||
renderLink(line, index, state, elements)
|
renderLink(line, state, elements)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderBoldAndCodeLine(line: string, index: number, state: RenderState, elements: React.ReactElement[]): boolean {
|
function renderBoldAndCodeLine(line: string, _index: number, state: RenderState, elements: React.ReactElement[]): boolean {
|
||||||
if (line.includes('**') || line.includes('`')) {
|
if (line.includes('**') || line.includes('`')) {
|
||||||
renderBoldAndCode(line, index, state, elements)
|
renderBoldAndCode(line, state, elements)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderParagraphOrBreak(line: string, index: number, state: RenderState, elements: React.ReactElement[]): void {
|
function renderParagraphOrBreak(line: string, _index: number, state: RenderState, elements: React.ReactElement[]): void {
|
||||||
if (line.trim() !== '') {
|
if (line.trim() !== '') {
|
||||||
elements.push(<p key={nextElementKey(state, 'p', line)} className="mb-4 text-cyber-accent">{line}</p>)
|
elements.push(<p key={nextElementKey(state, 'p', line)} className="mb-4 text-cyber-accent">{line}</p>)
|
||||||
return
|
return
|
||||||
@ -114,7 +114,7 @@ function renderParagraphOrBreak(line: string, index: number, state: RenderState,
|
|||||||
|
|
||||||
function handleCodeBlock(
|
function handleCodeBlock(
|
||||||
_line: string,
|
_line: string,
|
||||||
index: number,
|
_index: number,
|
||||||
state: RenderState,
|
state: RenderState,
|
||||||
elements: React.ReactElement[]
|
elements: React.ReactElement[]
|
||||||
): void {
|
): void {
|
||||||
@ -173,7 +173,7 @@ function createLinkElement(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderLink(line: string, index: number, state: RenderState, elements: React.ReactElement[]): void {
|
function renderLink(line: string, state: RenderState, elements: React.ReactElement[]): void {
|
||||||
const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g
|
const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g
|
||||||
let lastIndex = 0
|
let lastIndex = 0
|
||||||
const parts: (string | React.ReactElement)[] = []
|
const parts: (string | React.ReactElement)[] = []
|
||||||
@ -187,7 +187,7 @@ function renderLink(line: string, index: number, state: RenderState, elements: R
|
|||||||
const href = match[2]
|
const href = match[2]
|
||||||
const isExternal = href.startsWith('http')
|
const isExternal = href.startsWith('http')
|
||||||
if (match[1]) {
|
if (match[1]) {
|
||||||
parts.push(createLinkElement(match[1], href, `link-${index}-${match.index}`, isExternal))
|
parts.push(createLinkElement(match[1], href, `link-${match.index}-${href}`, isExternal))
|
||||||
}
|
}
|
||||||
lastIndex = match.index + match[0].length
|
lastIndex = match.index + match[0].length
|
||||||
}
|
}
|
||||||
@ -200,7 +200,7 @@ function renderLink(line: string, index: number, state: RenderState, elements: R
|
|||||||
elements.push(<p key={nextElementKey(state, 'p', line)} className="mb-4">{parts}</p>)
|
elements.push(<p key={nextElementKey(state, 'p', line)} className="mb-4">{parts}</p>)
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderBoldAndCode(line: string, index: number, state: RenderState, elements: React.ReactElement[]): void {
|
function renderBoldAndCode(line: string, state: RenderState, elements: React.ReactElement[]): void {
|
||||||
const parts: (string | React.ReactElement)[] = []
|
const parts: (string | React.ReactElement)[] = []
|
||||||
const codeRegex = /`([^`]+)`/g
|
const codeRegex = /`([^`]+)`/g
|
||||||
let codeMatch
|
let codeMatch
|
||||||
|
|||||||
@ -1 +1,10 @@
|
|||||||
export { config, default } from './nip95-upload/index'
|
import type { NextApiRequest, NextApiResponse } from 'next'
|
||||||
|
import { nip95UploadHandler } from '@/lib/api/nip95-upload'
|
||||||
|
|
||||||
|
export const config = {
|
||||||
|
api: { bodyParser: false },
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function handler(req: NextApiRequest, res: NextApiResponse): Promise<void> {
|
||||||
|
return nip95UploadHandler(req, res)
|
||||||
|
}
|
||||||
|
|||||||
@ -1,11 +0,0 @@
|
|||||||
import type { NextApiRequest, NextApiResponse } from 'next'
|
|
||||||
import { nip95UploadHandler } from './handler'
|
|
||||||
|
|
||||||
export const config = {
|
|
||||||
api: { bodyParser: false },
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse): Promise<void> {
|
|
||||||
return nip95UploadHandler(req, res)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -9,33 +9,28 @@ const { execSync } = require('child_process')
|
|||||||
|
|
||||||
const projectRoot = process.cwd()
|
const projectRoot = process.cwd()
|
||||||
|
|
||||||
try {
|
function runEslint() {
|
||||||
// Change to project root and run next lint
|
execSync('npx eslint . --ext .ts,.tsx --ignore-pattern next-env.d.ts', {
|
||||||
|
stdio: 'inherit',
|
||||||
|
cwd: projectRoot,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function runNextLint() {
|
||||||
process.chdir(projectRoot)
|
process.chdir(projectRoot)
|
||||||
execSync('npx next lint', {
|
execSync('npx next lint', {
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
cwd: projectRoot,
|
cwd: projectRoot,
|
||||||
env: { ...process.env, PWD: projectRoot },
|
env: { ...process.env, PWD: projectRoot },
|
||||||
})
|
})
|
||||||
} catch {
|
}
|
||||||
// If next lint fails, try eslint directly with flat config
|
|
||||||
console.log('Falling back to eslint directly...')
|
try {
|
||||||
try {
|
if (process.env.USE_NEXT_LINT === '1') {
|
||||||
// Try auto-fix first
|
runNextLint()
|
||||||
try {
|
} else {
|
||||||
execSync('npx eslint . --ext .ts,.tsx --fix', {
|
runEslint()
|
||||||
stdio: 'inherit',
|
}
|
||||||
cwd: projectRoot,
|
} catch {
|
||||||
})
|
process.exit(1)
|
||||||
} catch {
|
|
||||||
// If auto-fix fails, run without fix to show remaining errors
|
|
||||||
execSync('npx eslint . --ext .ts,.tsx', {
|
|
||||||
stdio: 'inherit',
|
|
||||||
cwd: projectRoot,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
console.error('Both next lint and eslint failed')
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user