Skip to content

Commit d476347

Browse files
spe1020spe1020claude
authored
fix(types): resolve four pre-existing svelte-check errors (#332)
* fix(types): resolve four pre-existing svelte-check errors - nourishRelay: re-export NourishRelayResult so nourishDiscovery can import it from this module - kitchens: add ValidSellerTier for the membership filter list; the getMembership return tier ('member') is not in membershipStore's MembershipTier union - FoodstrFeedOptimized: annotate primalEvents.filter callback as NDKEvent (primalPrefetch is Promise<any>, which widened the array element to any) - FoodstrFeedOptimized: widen kinds array at the single flagged subscribe site, matching the existing [1, 1068 as number] as number[] pattern used elsewhere in the file svelte-check: 4 errors → 0 errors (127 warnings unchanged) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(kitchens): make KitchenDisplay.memberTier type match stored values Copilot review on PR #332 flagged that the previous fix let 'member' pass the validTiers filter and then be cast to membershipStore's MembershipTier on assignment, leaving KitchenDisplay.memberTier holding a value outside its declared union at runtime. Introduce a shared KitchenMemberTier type ('member' | 'cook_plus' | 'pro_kitchen' | 'founders') on the marketplace types module, use it for both KitchenDisplay.memberTier and ImplicitKitchen.memberTier, and drop the now-misleading cast chain in kitchens.ts. MembershipBadge already handles 'member' at runtime (its tierConfig has an entry for it) — its tier prop is widened to admit it so KitchenCard passes cleanly without a cast. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: spe1020 <sethsager@Seths-MacBook-Air.local> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent fbd7867 commit d476347

6 files changed

Lines changed: 22 additions & 12 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "zap.cooking",
33
"license": "MIT",
4-
"version": "4.2.280",
4+
"version": "4.2.282",
55
"private": true,
66
"scripts": {
77
"dev": "vite dev",

src/components/FoodstrFeedOptimized.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2436,7 +2436,7 @@
24362436
}
24372437
}
24382438
2439-
const foodEvents = primalEvents.filter((event) => {
2439+
const foodEvents = primalEvents.filter((event: NDKEvent) => {
24402440
if ($userPublickey) {
24412441
const mutedUsers = getMutedUsers();
24422442
const authorKey = event.author?.hexpubkey || event.pubkey;
@@ -2643,7 +2643,7 @@
26432643
// relay-appropriate REQs internally. This replaces N/100 open subs.
26442644
const sub = $ndk.subscribe(
26452645
{
2646-
kinds: [1, 1068],
2646+
kinds: [1, 1068 as number] as number[],
26472647
authors: followedPubkeysForRealtime,
26482648
since
26492649
},

src/components/MembershipBadge.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
import FireIcon from 'phosphor-svelte/lib/Fire';
66
import type { MembershipTier } from '$lib/membershipStore';
77
8-
export let tier: MembershipTier;
8+
// Also accept 'member' — the tier string returned by the membership
9+
// service for the base paid tier. tierConfig has a 'member' entry, so
10+
// this has always been a runtime-valid input; the declared type just
11+
// didn't admit it.
12+
export let tier: MembershipTier | 'member';
913
export let size: 'sm' | 'md' | 'lg' = 'md';
1014
export let showLabel: boolean = false;
1115

src/lib/marketplace/kitchens.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ import {
1313
type Kitchen,
1414
type KitchenFormData,
1515
type ImplicitKitchen,
16-
type KitchenDisplay
16+
type KitchenDisplay,
17+
type KitchenMemberTier
1718
} from './types';
1819
import { MARKETPLACE_RELAYS } from './products';
1920
import { addClientTagToEvent } from '$lib/nip89';
2021
import { profileCacheManager } from '$lib/profileCache';
2122
import { getMembership } from '$lib/stores/membershipStatus';
22-
import type { MembershipTier } from '$lib/membershipStore';
2323
import { SUPPORTED_CURRENCIES, type CurrencyCode } from '$lib/currencyStore';
2424

2525
// NIP-85 Trusted Assertions — service relay for trust rank lookups
@@ -770,11 +770,11 @@ export async function fetchAllKitchenDisplays(
770770
const allSellerPubkeys = qualifiedDisplays.map((d) => d.pubkey);
771771
try {
772772
const membershipStatuses = await getMembership(allSellerPubkeys);
773-
const validTiers: MembershipTier[] = ['member', 'cook_plus', 'pro_kitchen', 'founders'];
773+
const validTiers: KitchenMemberTier[] = ['member', 'cook_plus', 'pro_kitchen', 'founders'];
774774
for (const d of qualifiedDisplays) {
775775
const status = membershipStatuses[d.pubkey];
776-
if (status?.active && validTiers.includes(status.tier as MembershipTier)) {
777-
d.memberTier = status.tier as MembershipTier;
776+
if (status?.active && validTiers.includes(status.tier as KitchenMemberTier)) {
777+
d.memberTier = status.tier as KitchenMemberTier;
778778
}
779779
}
780780
} catch (e) {

src/lib/marketplace/types.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55
*/
66

77
import type { NDKEvent } from '@nostr-dev-kit/ndk';
8-
import type { MembershipTier } from '$lib/membershipStore';
98
import type { CurrencyCode } from '$lib/currencyStore';
109

10+
// Seller-grade tiers actually stored on a KitchenDisplay. Narrower than
11+
// both $lib/membershipStore.MembershipTier (has 'open', which never
12+
// makes sense for a seller badge) and $lib/stores/membershipStatus
13+
// .MembershipTier ('unknown' is filtered out before assignment).
14+
export type KitchenMemberTier = 'member' | 'cook_plus' | 'pro_kitchen' | 'founders';
15+
1116
// Commerce state enum lives here (instead of commerceState.ts) so that the
1217
// Product / ProductFormData types can reference it without creating a module
1318
// cycle. commerceState.ts re-exports these for backward-compatible imports.
@@ -154,7 +159,7 @@ export interface Kitchen {
154159
defaultCurrency?: CurrencyCode; // Default currency for new products in this store
155160
productCount?: number; // computed client-side
156161
trustRank?: number; // NIP-85 trust score 0-100 (computed)
157-
memberTier?: MembershipTier; // zap.cooking membership tier
162+
memberTier?: KitchenMemberTier; // zap.cooking membership tier
158163
createdAt: number;
159164
event: NDKEvent;
160165
}
@@ -181,7 +186,7 @@ export interface ImplicitKitchen {
181186
defaultCurrency?: CurrencyCode;
182187
productCount: number;
183188
trustRank?: number; // NIP-85 trust score 0-100 (computed)
184-
memberTier?: MembershipTier; // zap.cooking membership tier
189+
memberTier?: KitchenMemberTier; // zap.cooking membership tier
185190
isImplicit: true;
186191
}
187192

src/lib/nourish/nourishRelay.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
type NourishRelayResult,
1919
type IngredientSignal
2020
} from './types';
21+
export type { NourishRelayResult } from './types';
2122

2223
const PANTRY_RELAY = 'wss://pantry.zap.cooking';
2324
// Pantry query timeout. Calibrated to 2s — healthy pantry median sits

0 commit comments

Comments
 (0)