vtProjectSearch2import.ts2 matches
35username: user.username,
36bio: user.bio,
37profile_image_url: user.profileImageUrl,
38url: user.url,
39updated_at: new Date().toISOString(), // Using current time as the API doesn't provide updated_at
53name: project.name,
54description: project.description,
55image_url: project.imageUrl,
56username: project.author.username || "",
57updated_at: mainBranch?.updatedAt || new Date().toISOString(),
vtProjectSearch2db.ts24 matches
101fileCount: number;
102url: string;
103profile_image_url: string | null;
104updated_at: string;
105}[]> {
110COUNT(DISTINCT f.id) as file_count,
111'https://val.town/u/' || p.username as url,
112u.profile_image_url,
113MAX(p.updated_at) as updated_at
114FROM ${tablePrefix}_projects p
126fileCount: Number(row.file_count),
127url: String(row.url),
128profile_image_url: row.profile_image_url ? String(row.profile_image_url) : null,
129updated_at: String(row.updated_at)
130}));
140description: string | null;
141url: string;
142image_url: string | null;
143updated_at: string;
144}[]> {
150p.description,
151p.url,
152p.image_url,
153p.updated_at
154FROM ${tablePrefix}_projects p
166description: row.description ? String(row.description) : null,
167url: String(row.url),
168image_url: row.image_url ? String(row.image_url) : null,
169updated_at: String(row.updated_at)
170}));
186fileCount: number;
187url: string;
188profile_image_url: string | null;
189updated_at: string;
190}[];
195description: string | null;
196url: string;
197image_url: string | null;
198updated_at: string;
199}[];
275username TEXT,
276bio TEXT,
277profile_image_url TEXT,
278url TEXT NOT NULL,
279updated_at TIMESTAMP NOT NULL
289forked_branch_id TEXT,
290description TEXT,
291image_url TEXT,
292user_id TEXT,
293FOREIGN KEY (user_id) REFERENCES ${tablePrefix}_users(id)
320username: z.string().nullable(),
321bio: z.string().nullable(),
322profile_image_url: z.string().nullable(),
323url: z.string(),
324updated_at: z.string().datetime(),
331username: z.string(),
332description: z.string().nullable(),
333image_url: z.string().nullable(),
334forked_branch_id: z.string().nullable(),
335updated_at: z.string().datetime(),
394// Insert new user
395await sqlite.execute(
396`INSERT INTO ${tablePrefix}_users (id, username, bio, profile_image_url, url, updated_at)
397VALUES (?, ?, ?, ?, ?, ?)`,
398[
400user.username,
401user.bio,
402user.profile_image_url,
403user.url,
404user.updated_at,
410await sqlite.execute(
411`UPDATE ${tablePrefix}_users
412SET username = ?, bio = ?, profile_image_url = ?, url = ?, updated_at = ?
413WHERE id = ?`,
414[
415user.username,
416user.bio,
417user.profile_image_url,
418user.url,
419user.updated_at,
461// Insert new project
462await sqlite.execute(
463`INSERT INTO ${tablePrefix}_projects (id, url, name, username, updated_at, forked_branch_id, description, image_url, user_id)
464VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
465[
471project.forked_branch_id,
472project.description,
473project.image_url,
474project.user_id
475],
480await sqlite.execute(
481`UPDATE ${tablePrefix}_projects
482SET url = ?, name = ?, username = ?, updated_at = ?, forked_branch_id = ?, description = ?, image_url = ?, user_id = ?
483WHERE id = ?`,
484[
489project.forked_branch_id,
490project.description,
491project.image_url,
492project.user_id,
493project.id
775776const result = await sqlite.execute(
777`SELECT u.id, u.username, u.bio, u.profile_image_url, u.url, u.updated_at,
778(SELECT COUNT(*) FROM ${tablePrefix}_projects p
779WHERE p.user_id = u.id) as matchCount
790username: z.string().nullable(),
791bio: z.string().nullable(),
792profile_image_url: z.string().nullable(),
793url: z.string(),
794updated_at: z.string().datetime(),
853// Always launch the files query for the active type or for samples
854const result = await sqlite.execute(
855`SELECT f.*, p.name as project_name, p.url as project_url, p.username, p.description, p.image_url
856FROM ${tablePrefix}_files f
857JOIN ${tablePrefix}_projects p ON f.project_id = p.id
868username: z.string(),
869description: z.string().nullable(),
870image_url: z.string().nullable(),
871});
872
vtProjectSearch2components.tsx15 matches
210<div className="result-header">
211<div className="result-header-content">
212{result.image_url && (
213<div className="project-image">
214<img src={result.image_url} alt={result.project_name} />
215</div>
216)}
291<div className="result-header">
292<div className="result-header-content">
293{result.image_url && (
294<div className="project-image">
295<img src={result.image_url} alt={result.name} />
296</div>
297)}
367<div className="result-header">
368<div className="user-header">
369{result.profile_image_url && (
370<div className="user-avatar">
371<img src={result.profile_image_url} alt={result.username || 'User'} />
372</div>
373)}
1212<a href="?q=api" className="example-link">api</a>
1213<a href="?q=database" className="example-link">database</a>
1214<a href="?q=image" className="example-link">image</a>
1215<a href="?q=function" className="example-link">function</a>
1216<a href="?q=discord" className="example-link">discord</a>
1276<div className="contributor-header">
1277<div className="contributor-avatar">
1278{contributor.profile_image_url ? (
1279<img src={contributor.profile_image_url} alt={contributor.username} />
1280) : (
1281<div style={{
1318rel="noopener noreferrer"
1319>
1320<div className="project-image">
1321{project.image_url ? (
1322<img src={project.image_url} alt={project.name} />
1323) : (
1324<div style={{
1357<a href="?q=api" className="example-link">api</a>
1358<a href="?q=database" className="example-link">database</a>
1359<a href="?q=image" className="example-link">image</a>
1360<a href="?q=function" className="example-link">function</a>
1361<a href="?q=discord" className="example-link">discord</a>
vtProjectSearchtypes.tsx5 matches
8username: z.string(),
9description: z.string().nullable(),
10image_url: z.string().nullable(),
11forked_branch_id: z.string().nullable(),
12updated_at: z.string().datetime(),
36username: string;
37project_url: string;
38image_url?: string | null;
39};
4047username: string | null;
48bio: string | null;
49profile_image_url: string | null;
50url: string;
51updated_at: string;
131username: string;
132url: string;
133profile_image_url: string | null;
134projectCount: number;
135};
139username: string;
140url: string;
141image_url: string | null;
142updated_at: string;
143};
vtProjectSearchstyles.tsx4 matches
401}
402403.project-card .project-image {
404width: 24px;
405height: 24px;
410}
411412.project-image img {
413width: 100%;
414height: 100%;
511}
512513.search-result .project-image {
514width: 60px;
515height: 60px;
520}
521522.project-image img {
523width: 100%;
524height: 100%;
vtProjectSearchimport.ts2 matches
35username: user.username,
36bio: user.bio,
37profile_image_url: user.profileImageUrl,
38url: user.url,
39updated_at: new Date().toISOString(), // Using current time as the API doesn't provide updated_at
53name: project.name,
54description: project.description,
55image_url: project.imageUrl,
56username: project.author.username || "",
57updated_at: mainBranch?.updatedAt || new Date().toISOString(),
vtProjectSearchdb.ts24 matches
101fileCount: number;
102url: string;
103profile_image_url: string | null;
104updated_at: string;
105}[]> {
110COUNT(DISTINCT f.id) as file_count,
111'https://val.town/u/' || p.username as url,
112u.profile_image_url,
113MAX(p.updated_at) as updated_at
114FROM ${tablePrefix}_projects p
126fileCount: Number(row.file_count),
127url: String(row.url),
128profile_image_url: row.profile_image_url ? String(row.profile_image_url) : null,
129updated_at: String(row.updated_at)
130}));
140description: string | null;
141url: string;
142image_url: string | null;
143updated_at: string;
144}[]> {
150p.description,
151p.url,
152p.image_url,
153p.updated_at
154FROM ${tablePrefix}_projects p
166description: row.description ? String(row.description) : null,
167url: String(row.url),
168image_url: row.image_url ? String(row.image_url) : null,
169updated_at: String(row.updated_at)
170}));
186fileCount: number;
187url: string;
188profile_image_url: string | null;
189updated_at: string;
190}[];
195description: string | null;
196url: string;
197image_url: string | null;
198updated_at: string;
199}[];
275username TEXT,
276bio TEXT,
277profile_image_url TEXT,
278url TEXT NOT NULL,
279updated_at TIMESTAMP NOT NULL
289forked_branch_id TEXT,
290description TEXT,
291image_url TEXT,
292user_id TEXT,
293FOREIGN KEY (user_id) REFERENCES ${tablePrefix}_users(id)
320username: z.string().nullable(),
321bio: z.string().nullable(),
322profile_image_url: z.string().nullable(),
323url: z.string(),
324updated_at: z.string().datetime(),
331username: z.string(),
332description: z.string().nullable(),
333image_url: z.string().nullable(),
334forked_branch_id: z.string().nullable(),
335updated_at: z.string().datetime(),
394// Insert new user
395await sqlite.execute(
396`INSERT INTO ${tablePrefix}_users (id, username, bio, profile_image_url, url, updated_at)
397VALUES (?, ?, ?, ?, ?, ?)`,
398[
400user.username,
401user.bio,
402user.profile_image_url,
403user.url,
404user.updated_at,
410await sqlite.execute(
411`UPDATE ${tablePrefix}_users
412SET username = ?, bio = ?, profile_image_url = ?, url = ?, updated_at = ?
413WHERE id = ?`,
414[
415user.username,
416user.bio,
417user.profile_image_url,
418user.url,
419user.updated_at,
461// Insert new project
462await sqlite.execute(
463`INSERT INTO ${tablePrefix}_projects (id, url, name, username, updated_at, forked_branch_id, description, image_url, user_id)
464VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
465[
471project.forked_branch_id,
472project.description,
473project.image_url,
474project.user_id
475],
480await sqlite.execute(
481`UPDATE ${tablePrefix}_projects
482SET url = ?, name = ?, username = ?, updated_at = ?, forked_branch_id = ?, description = ?, image_url = ?, user_id = ?
483WHERE id = ?`,
484[
489project.forked_branch_id,
490project.description,
491project.image_url,
492project.user_id,
493project.id
775776const result = await sqlite.execute(
777`SELECT u.id, u.username, u.bio, u.profile_image_url, u.url, u.updated_at,
778(SELECT COUNT(*) FROM ${tablePrefix}_projects p
779WHERE p.user_id = u.id) as matchCount
790username: z.string().nullable(),
791bio: z.string().nullable(),
792profile_image_url: z.string().nullable(),
793url: z.string(),
794updated_at: z.string().datetime(),
853// Always launch the files query for the active type or for samples
854const result = await sqlite.execute(
855`SELECT f.*, p.name as project_name, p.url as project_url, p.username, p.description, p.image_url
856FROM ${tablePrefix}_files f
857JOIN ${tablePrefix}_projects p ON f.project_id = p.id
868username: z.string(),
869description: z.string().nullable(),
870image_url: z.string().nullable(),
871});
872
vtProjectSearchcomponents.tsx15 matches
210<div className="result-header">
211<div className="result-header-content">
212{result.image_url && (
213<div className="project-image">
214<img src={result.image_url} alt={result.project_name} />
215</div>
216)}
291<div className="result-header">
292<div className="result-header-content">
293{result.image_url && (
294<div className="project-image">
295<img src={result.image_url} alt={result.name} />
296</div>
297)}
367<div className="result-header">
368<div className="user-header">
369{result.profile_image_url && (
370<div className="user-avatar">
371<img src={result.profile_image_url} alt={result.username || 'User'} />
372</div>
373)}
1212<a href="?q=api" className="example-link">api</a>
1213<a href="?q=database" className="example-link">database</a>
1214<a href="?q=image" className="example-link">image</a>
1215<a href="?q=function" className="example-link">function</a>
1216<a href="?q=discord" className="example-link">discord</a>
1276<div className="contributor-header">
1277<div className="contributor-avatar">
1278{contributor.profile_image_url ? (
1279<img src={contributor.profile_image_url} alt={contributor.username} />
1280) : (
1281<div style={{
1318rel="noopener noreferrer"
1319>
1320<div className="project-image">
1321{project.image_url ? (
1322<img src={project.image_url} alt={project.name} />
1323) : (
1324<div style={{
1357<a href="?q=api" className="example-link">api</a>
1358<a href="?q=database" className="example-link">database</a>
1359<a href="?q=image" className="example-link">image</a>
1360<a href="?q=function" className="example-link">function</a>
1361<a href="?q=discord" className="example-link">discord</a>
vtProjectSearchtypes.tsx5 matches
8username: z.string(),
9description: z.string().nullable(),
10image_url: z.string().nullable(),
11forked_branch_id: z.string().nullable(),
12updated_at: z.string().datetime(),
36username: string;
37project_url: string;
38image_url?: string | null;
39};
4047username: string | null;
48bio: string | null;
49profile_image_url: string | null;
50url: string;
51updated_at: string;
131username: string;
132url: string;
133profile_image_url: string | null;
134projectCount: number;
135};
139username: string;
140url: string;
141image_url: string | null;
142updated_at: string;
143};
vtProjectSearchstyles.tsx4 matches
401}
402403.project-card .project-image {
404width: 24px;
405height: 24px;
410}
411412.project-image img {
413width: 100%;
414height: 100%;
511}
512513.search-result .project-image {
514width: 60px;
515height: 60px;
520}
521522.project-image img {
523width: 100%;
524height: 100%;