Skip to content

Commit 02f99ab

Browse files
committed
chore: add frontend typecheck quick-check
1 parent 2e4c81c commit 02f99ab

7 files changed

Lines changed: 37 additions & 25 deletions

File tree

Makefile

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# frozen_string_literal: true
22

3-
.PHONY: help test lint lint-js lint-ruby lintfix lintfix-js lintfix-ruby setup dev clean frontend-setup ready yard-verify-public-docs openapi openapi-verify openapi-client openapi-client-verify openapi-lint openapi-lint-redocly openapi-lint-spectral openai-lint-spectral
3+
.PHONY: help test lint lint-js lint-ruby lintfix lintfix-js lintfix-ruby setup dev clean frontend-setup quick-check ready yard-verify-public-docs openapi openapi-verify openapi-client openapi-client-verify openapi-lint openapi-lint-redocly openapi-lint-spectral openai-lint-spectral
44

55
# Default target
66
help: ## Show this help message
@@ -59,6 +59,8 @@ lint-ruby: ## Run Ruby linter (RuboCop) - errors when issues found
5959
@echo "Ruby linting complete!"
6060

6161
lint-js: ## Run JavaScript/Frontend linter (Prettier) - errors when issues found
62+
@echo "Running TypeScript typecheck..."
63+
@cd frontend && npm run typecheck
6264
@echo "Running Prettier format check..."
6365
@cd frontend && npm run format:check
6466
@echo "JavaScript linting complete!"
@@ -76,10 +78,15 @@ lintfix-js: ## Auto-fix JavaScript/Frontend linting issues
7678
@cd frontend && npm run format
7779
@echo "JavaScript lintfix complete!"
7880

79-
ready: ## Pre-commit gate (RuboCop + RSpec)
81+
quick-check: ## Fast local checks (Ruby lint/docs + frontend format/typecheck)
82+
@echo "Running quick checks..."
83+
$(MAKE) lint-ruby
84+
$(MAKE) lint-js
85+
@echo "Quick checks complete!"
86+
87+
ready: ## Pre-commit gate (quick checks + RSpec)
8088
@echo "Running pre-commit checks..."
81-
bundle exec rubocop -F
82-
bundle exec rake yard:verify_public_docs
89+
$(MAKE) quick-check
8390
bundle exec rspec
8491
@echo "Pre-commit checks complete!"
8592

frontend/.prettierignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
# Frontend package files
22
package-lock.json
33
yarn.lock
4+
5+
# Generated and transient frontend output
6+
.astro/
7+
test-results/
8+
src/api/generated/

frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"preview": "vite preview --port 4001 --host",
1111
"format": "prettier --write .",
1212
"format:check": "prettier --check .",
13+
"typecheck": "tsc -p tsconfig.typecheck.json --noEmit",
1314
"openapi:generate": "openapi-ts -i ../docs/api/v1/openapi.yaml -o src/api/generated -c @hey-api/client-fetch",
1415
"openapi:verify": "npm run openapi:generate && git diff --exit-code -- src/api/generated",
1516
"test": "vitest",

frontend/src/env.d.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1 @@
11
/// <reference types="vite/client" />
2-
3-
declare module '*.module.css' {
4-
const classes: Record<string, string>;
5-
export default classes;
6-
}

frontend/src/hooks/useFeedConversion.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState } from 'preact/hooks';
22
import { createFeed } from '../api/generated';
3-
import { apiClient, bearerHeaders } from '../api/client';
3+
import { apiClient } from '../api/client';
44
import type { FeedRecord } from '../api/contracts';
55

66
interface ConversionState {
@@ -32,22 +32,20 @@ export function useFeedConversion() {
3232
const response = await createFeed({
3333
client: apiClient,
3434
headers: {
35-
'Content-Type': 'application/json',
36-
...bearerHeaders(token),
35+
Authorization: `Bearer ${token}`,
3736
},
3837
body: {
3938
url: url.trim(),
4039
strategy: strategy.trim(),
4140
},
42-
responseStyle: 'data',
4341
throwOnError: true,
4442
});
4543

46-
if (!response?.success || !response.data?.feed) {
44+
if (!response.data?.success || !response.data.data?.feed) {
4745
throw new Error('Invalid response format');
4846
}
4947

50-
const result = response.data.feed;
48+
const result = response.data.data.feed;
5149
setState((prev) => ({ ...prev, isConverting: false, result, error: null }));
5250
} catch (error) {
5351
setState((prev) => ({
@@ -89,7 +87,8 @@ const toErrorMessage = (error: unknown): string => {
8987
const extractMessage = (error: unknown): string | null => {
9088
if (!error || typeof error !== 'object') return null;
9189

92-
const candidate = (error as { error?: { message?: unknown }; message?: unknown }).error?.message ??
90+
const candidate =
91+
(error as { error?: { message?: unknown }; message?: unknown }).error?.message ??
9392
(error as { message?: unknown }).message;
9493

9594
return typeof candidate === 'string' && candidate.trim() ? candidate : null;

frontend/src/hooks/useStrategies.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,18 @@ export function useStrategies(token: string | null) {
2929
client: apiClient,
3030
headers: {
3131
...bearerHeaders(token),
32-
'Content-Type': 'application/json',
3332
},
34-
responseStyle: 'data',
3533
});
3634

37-
if (response?.success && response.data?.strategies) {
38-
setState({
39-
strategies: response.data.strategies,
40-
isLoading: false,
41-
error: null,
42-
});
43-
} else {
35+
if (response.error || !response.data?.success || !response.data.data?.strategies) {
4436
throw new Error('Invalid response format from strategies API');
4537
}
38+
39+
setState({
40+
strategies: response.data.data.strategies,
41+
isLoading: false,
42+
error: null,
43+
});
4644
} catch (error) {
4745
setState({
4846
strategies: [],

frontend/tsconfig.typecheck.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"compilerOptions": {
4+
"skipLibCheck": true
5+
},
6+
"exclude": ["src/__tests__/**/*", "e2e/**/*", "playwright.config.ts", "vitest*.ts", "vitest.config.js"]
7+
}

0 commit comments

Comments
 (0)