fix: npm run lint(tsc --noEmit) 실제 0 에러 달성 — 기존 93건 정리
- tsconfig에 supabase 제외 (Deno 런타임 코드를 프론트 tsc+DOM lib로 검사하던 오류 79건) - src/vite-env.d.ts 추가 (import.meta.env 타입 6건) - @types/react 부재 환경의 JSX key 시임 4건 (ColorSwatchCard·WorkflowCard·EnvKeyRow·ApiCard) - transformPlan latestPosts 타입 캐스트, transformReport unknown 경유 캐스트, MultiChannelInput trim 가드 - Office 임시 잠금 파일(~$*.pptx) 삭제 반영 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WgWoJZAvvzMxTpWeenZSia
This commit is contained in:
parent
58fb4a317d
commit
85d72e4cfb
Binary file not shown.
@ -132,7 +132,7 @@ export default function MultiChannelInput({ variant = 'hero', onAnalyze }: Multi
|
|||||||
gangnamUnni: aggregated.gangnamUnni.length ? aggregated.gangnamUnni : undefined,
|
gangnamUnni: aggregated.gangnamUnni.length ? aggregated.gangnamUnni : undefined,
|
||||||
},
|
},
|
||||||
rawInput: Object.entries(urls)
|
rawInput: Object.entries(urls)
|
||||||
.filter(([, v]) => v.trim())
|
.filter(([, v]) => typeof v === 'string' && v.trim() !== '')
|
||||||
.map(([k, v]) => `${k}: ${v}`)
|
.map(([k, v]) => `${k}: ${v}`)
|
||||||
.join('\n'),
|
.join('\n'),
|
||||||
};
|
};
|
||||||
|
|||||||
@ -55,7 +55,7 @@ const statusLabel: Record<string, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* ─── Color Swatch Editor Popover ─── */
|
/* ─── Color Swatch Editor Popover ─── */
|
||||||
function ColorSwatchCard({ swatch, onUpdate }: { swatch: ColorSwatch; onUpdate: (newHex: string) => void }) {
|
function ColorSwatchCard({ swatch, onUpdate }: { key?: string; swatch: ColorSwatch; onUpdate: (newHex: string) => void }) {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const [hexInput, setHexInput] = useState(swatch.hex);
|
const [hexInput, setHexInput] = useState(swatch.hex);
|
||||||
const popoverRef = useRef<HTMLDivElement>(null);
|
const popoverRef = useRef<HTMLDivElement>(null);
|
||||||
|
|||||||
@ -79,6 +79,7 @@ function StageBar({ currentStage }: { currentStage: WorkflowStage }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function WorkflowCard({ item, onStageChange, onNotesChange }: {
|
function WorkflowCard({ item, onStageChange, onNotesChange }: {
|
||||||
|
key?: string;
|
||||||
item: WorkflowItem;
|
item: WorkflowItem;
|
||||||
onStageChange: (id: string, stage: WorkflowStage) => void;
|
onStageChange: (id: string, stage: WorkflowStage) => void;
|
||||||
onNotesChange: (id: string, notes: string) => void;
|
onNotesChange: (id: string, notes: string) => void;
|
||||||
|
|||||||
@ -194,8 +194,10 @@ function buildAssets(enrichment: EnrichmentData | undefined): { assets: AssetCar
|
|||||||
// Instagram posts → photo assets
|
// Instagram posts → photo assets
|
||||||
const igAccounts = enrichment.instagramAccounts || (enrichment.instagram ? [enrichment.instagram] : []);
|
const igAccounts = enrichment.instagramAccounts || (enrichment.instagram ? [enrichment.instagram] : []);
|
||||||
for (const ig of igAccounts) {
|
for (const ig of igAccounts) {
|
||||||
if (ig.latestPosts) {
|
const igPosts = (ig as { latestPosts?: { type?: string; likes?: number; caption?: string }[] })
|
||||||
for (const p of (ig.latestPosts as { type?: string; likes?: number; caption?: string }[]).slice(0, 3)) {
|
.latestPosts;
|
||||||
|
if (igPosts) {
|
||||||
|
for (const p of igPosts.slice(0, 3)) {
|
||||||
assets.push({
|
assets.push({
|
||||||
id: `ig-${assetIdx++}`,
|
id: `ig-${assetIdx++}`,
|
||||||
source: 'social',
|
source: 'social',
|
||||||
|
|||||||
@ -159,7 +159,7 @@ function buildDiagnosis(report: ApiReport): DiagnosisItem[] {
|
|||||||
}
|
}
|
||||||
if (ch.issues) {
|
if (ch.issues) {
|
||||||
for (const issue of ch.issues) {
|
for (const issue of ch.issues) {
|
||||||
const issueObj = issue as Record<string, unknown>;
|
const issueObj = issue as unknown as Record<string, unknown>;
|
||||||
const detail = typeof issue === 'string'
|
const detail = typeof issue === 'string'
|
||||||
? issue
|
? issue
|
||||||
: typeof issueObj.issue === 'string'
|
: typeof issueObj.issue === 'string'
|
||||||
|
|||||||
@ -262,7 +262,7 @@ function CategoryBadge({ category }: { category: ApiConfig['category'] }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function EnvKeyRow({ envKey, present, isServerSide }: { envKey: string; present: boolean; isServerSide: boolean }) {
|
function EnvKeyRow({ envKey, present, isServerSide }: { key?: string; envKey: string; present: boolean; isServerSide: boolean }) {
|
||||||
const [showKey, setShowKey] = useState(false);
|
const [showKey, setShowKey] = useState(false);
|
||||||
const [copied, setCopied] = useState(false);
|
const [copied, setCopied] = useState(false);
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ function EnvKeyRow({ envKey, present, isServerSide }: { envKey: string; present:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ApiCard({ api, index }: { api: ApiStatusInfo; index: number }) {
|
function ApiCard({ api, index }: { key?: string; api: ApiStatusInfo; index: number }) {
|
||||||
const [expanded, setExpanded] = useState(false);
|
const [expanded, setExpanded] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
1
src/vite-env.d.ts
vendored
Normal file
1
src/vite-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
@ -22,5 +22,6 @@
|
|||||||
},
|
},
|
||||||
"allowImportingTsExtensions": true,
|
"allowImportingTsExtensions": true,
|
||||||
"noEmit": true
|
"noEmit": true
|
||||||
}
|
},
|
||||||
|
"exclude": ["node_modules", "dist", "supabase"]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user