@tscircuit/fake-snippets 0.0.106 → 0.0.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -520,6 +520,7 @@ declare const packageReleaseSchema: z.ZodObject<{
520
520
  ai_review_requested: z.ZodDefault<z.ZodBoolean>;
521
521
  is_pr_preview: z.ZodDefault<z.ZodBoolean>;
522
522
  github_pr_number: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
523
+ latest_package_build_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
523
524
  }, "strip", z.ZodTypeAny, {
524
525
  package_release_id: string;
525
526
  created_at: string;
@@ -556,6 +557,7 @@ declare const packageReleaseSchema: z.ZodObject<{
556
557
  ai_review_error?: any;
557
558
  ai_review_logs?: any[] | null | undefined;
558
559
  github_pr_number?: number | null | undefined;
560
+ latest_package_build_id?: string | null | undefined;
559
561
  }, {
560
562
  package_release_id: string;
561
563
  created_at: string;
@@ -592,6 +594,7 @@ declare const packageReleaseSchema: z.ZodObject<{
592
594
  ai_review_requested?: boolean | undefined;
593
595
  is_pr_preview?: boolean | undefined;
594
596
  github_pr_number?: number | null | undefined;
597
+ latest_package_build_id?: string | null | undefined;
595
598
  }>;
596
599
  type PackageRelease = z.infer<typeof packageReleaseSchema>;
597
600
  declare const packageFileSchema: z.ZodObject<{
@@ -960,6 +963,7 @@ declare const createDatabase: ({ seed }?: {
960
963
  ai_review_error?: any;
961
964
  ai_review_logs?: any[] | null | undefined;
962
965
  github_pr_number?: number | null | undefined;
966
+ latest_package_build_id?: string | null | undefined;
963
967
  }[];
964
968
  packageFiles: {
965
969
  package_release_id: string;
@@ -1361,6 +1365,7 @@ declare const createDatabase: ({ seed }?: {
1361
1365
  ai_review_error?: any;
1362
1366
  ai_review_logs?: any[] | null | undefined;
1363
1367
  github_pr_number?: number | null | undefined;
1368
+ latest_package_build_id?: string | null | undefined;
1364
1369
  }[];
1365
1370
  packageFiles: {
1366
1371
  package_release_id: string;
package/dist/index.js CHANGED
@@ -212,7 +212,9 @@ var packageReleaseSchema = z.object({
212
212
  ai_review_requested: z.boolean().default(false),
213
213
  // Preview
214
214
  is_pr_preview: z.boolean().default(false),
215
- github_pr_number: z.number().nullable().optional()
215
+ github_pr_number: z.number().nullable().optional(),
216
+ // Latest Build Reference
217
+ latest_package_build_id: z.string().nullable().optional()
216
218
  });
217
219
  var packageFileSchema = z.object({
218
220
  package_file_id: z.string(),
@@ -1045,7 +1047,7 @@ export default () => (
1045
1047
  }
1046
1048
  ]
1047
1049
  });
1048
- db.addPackageBuild({
1050
+ const firstBuild = db.addPackageBuild({
1049
1051
  package_release_id: packageReleaseId1,
1050
1052
  created_at: new Date(Date.now() - 15e3).toISOString(),
1051
1053
  // 15 seconds ago
@@ -1075,6 +1077,11 @@ export default () => (
1075
1077
  commit_message: "Attempted build of a555timer-square-wave package",
1076
1078
  commit_author: "testuser"
1077
1079
  });
1080
+ const release1 = db.getPackageReleaseById(packageReleaseId1);
1081
+ db.updatePackageRelease({
1082
+ ...release1,
1083
+ latest_package_build_id: firstBuild.package_build_id
1084
+ });
1078
1085
  db.addSnippet({
1079
1086
  name: "seveibar/a555timer",
1080
1087
  unscoped_name: "a555timer",
@@ -2113,7 +2120,7 @@ export const SquareWaveModule = () => (
2113
2120
  }
2114
2121
  ]
2115
2122
  });
2116
- db.addPackageBuild({
2123
+ const failedBuild = db.addPackageBuild({
2117
2124
  package_release_id: packageReleaseId2,
2118
2125
  created_at: new Date(Date.now() - 15e3).toISOString(),
2119
2126
  // 15 seconds ago
@@ -2143,7 +2150,7 @@ export const SquareWaveModule = () => (
2143
2150
  commit_message: "Attempted build of a555timer-square-wave package",
2144
2151
  commit_author: "testuser"
2145
2152
  });
2146
- db.addPackageBuild({
2153
+ const successfulBuild = db.addPackageBuild({
2147
2154
  package_release_id: packageReleaseId2,
2148
2155
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
2149
2156
  transpilation_in_progress: false,
@@ -2185,6 +2192,11 @@ export const SquareWaveModule = () => (
2185
2192
  commit_message: "Initial build of a555timer-square-wave package",
2186
2193
  commit_author: "testuser"
2187
2194
  });
2195
+ const release2 = db.getPackageReleaseById(packageReleaseId2);
2196
+ db.updatePackageRelease({
2197
+ ...release2,
2198
+ latest_package_build_id: successfulBuild.package_build_id
2199
+ });
2188
2200
  db.addOrder({
2189
2201
  account_id,
2190
2202
  is_running: false,
@@ -3349,7 +3361,14 @@ var initializer = combine(databaseSchema.parse({}), (set, get) => ({
3349
3361
  ...packageBuild
3350
3362
  };
3351
3363
  set((state) => ({
3352
- packageBuilds: [...state.packageBuilds, newPackageBuild]
3364
+ packageBuilds: [...state.packageBuilds, newPackageBuild],
3365
+ // Automatically update the package release to reference this as the latest build
3366
+ packageReleases: state.packageReleases.map(
3367
+ (release) => release.package_release_id === packageBuild.package_release_id ? {
3368
+ ...release,
3369
+ latest_package_build_id: newPackageBuild.package_build_id
3370
+ } : release
3371
+ )
3353
3372
  }));
3354
3373
  return newPackageBuild;
3355
3374
  },
package/dist/schema.d.ts CHANGED
@@ -693,6 +693,7 @@ declare const packageReleaseSchema: z.ZodObject<{
693
693
  ai_review_requested: z.ZodDefault<z.ZodBoolean>;
694
694
  is_pr_preview: z.ZodDefault<z.ZodBoolean>;
695
695
  github_pr_number: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
696
+ latest_package_build_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
696
697
  }, "strip", z.ZodTypeAny, {
697
698
  package_release_id: string;
698
699
  created_at: string;
@@ -729,6 +730,7 @@ declare const packageReleaseSchema: z.ZodObject<{
729
730
  ai_review_error?: any;
730
731
  ai_review_logs?: any[] | null | undefined;
731
732
  github_pr_number?: number | null | undefined;
733
+ latest_package_build_id?: string | null | undefined;
732
734
  }, {
733
735
  package_release_id: string;
734
736
  created_at: string;
@@ -765,6 +767,7 @@ declare const packageReleaseSchema: z.ZodObject<{
765
767
  ai_review_requested?: boolean | undefined;
766
768
  is_pr_preview?: boolean | undefined;
767
769
  github_pr_number?: number | null | undefined;
770
+ latest_package_build_id?: string | null | undefined;
768
771
  }>;
769
772
  type PackageRelease = z.infer<typeof packageReleaseSchema>;
770
773
  declare const packageFileSchema: z.ZodObject<{
@@ -1176,6 +1179,7 @@ declare const databaseSchema: z.ZodObject<{
1176
1179
  ai_review_requested: z.ZodDefault<z.ZodBoolean>;
1177
1180
  is_pr_preview: z.ZodDefault<z.ZodBoolean>;
1178
1181
  github_pr_number: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1182
+ latest_package_build_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1179
1183
  }, "strip", z.ZodTypeAny, {
1180
1184
  package_release_id: string;
1181
1185
  created_at: string;
@@ -1212,6 +1216,7 @@ declare const databaseSchema: z.ZodObject<{
1212
1216
  ai_review_error?: any;
1213
1217
  ai_review_logs?: any[] | null | undefined;
1214
1218
  github_pr_number?: number | null | undefined;
1219
+ latest_package_build_id?: string | null | undefined;
1215
1220
  }, {
1216
1221
  package_release_id: string;
1217
1222
  created_at: string;
@@ -1248,6 +1253,7 @@ declare const databaseSchema: z.ZodObject<{
1248
1253
  ai_review_requested?: boolean | undefined;
1249
1254
  is_pr_preview?: boolean | undefined;
1250
1255
  github_pr_number?: number | null | undefined;
1256
+ latest_package_build_id?: string | null | undefined;
1251
1257
  }>, "many">>;
1252
1258
  packageFiles: z.ZodDefault<z.ZodArray<z.ZodObject<{
1253
1259
  package_file_id: z.ZodString;
@@ -2059,6 +2065,7 @@ declare const databaseSchema: z.ZodObject<{
2059
2065
  ai_review_error?: any;
2060
2066
  ai_review_logs?: any[] | null | undefined;
2061
2067
  github_pr_number?: number | null | undefined;
2068
+ latest_package_build_id?: string | null | undefined;
2062
2069
  }[];
2063
2070
  packageFiles: {
2064
2071
  package_release_id: string;
@@ -2360,6 +2367,7 @@ declare const databaseSchema: z.ZodObject<{
2360
2367
  ai_review_requested?: boolean | undefined;
2361
2368
  is_pr_preview?: boolean | undefined;
2362
2369
  github_pr_number?: number | null | undefined;
2370
+ latest_package_build_id?: string | null | undefined;
2363
2371
  }[] | undefined;
2364
2372
  packageFiles?: {
2365
2373
  package_release_id: string;
package/dist/schema.js CHANGED
@@ -207,7 +207,9 @@ var packageReleaseSchema = z.object({
207
207
  ai_review_requested: z.boolean().default(false),
208
208
  // Preview
209
209
  is_pr_preview: z.boolean().default(false),
210
- github_pr_number: z.number().nullable().optional()
210
+ github_pr_number: z.number().nullable().optional(),
211
+ // Latest Build Reference
212
+ latest_package_build_id: z.string().nullable().optional()
211
213
  });
212
214
  var packageFileSchema = z.object({
213
215
  package_file_id: z.string(),
@@ -1488,6 +1488,15 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
1488
1488
  }
1489
1489
  set((state) => ({
1490
1490
  packageBuilds: [...state.packageBuilds, newPackageBuild],
1491
+ // Automatically update the package release to reference this as the latest build
1492
+ packageReleases: state.packageReleases.map((release) =>
1493
+ release.package_release_id === packageBuild.package_release_id
1494
+ ? {
1495
+ ...release,
1496
+ latest_package_build_id: newPackageBuild.package_build_id,
1497
+ }
1498
+ : release,
1499
+ ),
1491
1500
  }))
1492
1501
  return newPackageBuild
1493
1502
  },
@@ -255,6 +255,9 @@ export const packageReleaseSchema = z.object({
255
255
  // Preview
256
256
  is_pr_preview: z.boolean().default(false),
257
257
  github_pr_number: z.number().nullable().optional(),
258
+
259
+ // Latest Build Reference
260
+ latest_package_build_id: z.string().nullable().optional(),
258
261
  })
259
262
  export type PackageRelease = z.infer<typeof packageReleaseSchema>
260
263
 
@@ -538,7 +538,7 @@ export default () => (
538
538
  ],
539
539
  })
540
540
 
541
- db.addPackageBuild({
541
+ const firstBuild = db.addPackageBuild({
542
542
  package_release_id: packageReleaseId1,
543
543
  created_at: new Date(Date.now() - 15000).toISOString(), // 15 seconds ago
544
544
  transpilation_in_progress: false,
@@ -574,6 +574,13 @@ export default () => (
574
574
  commit_message: "Attempted build of a555timer-square-wave package",
575
575
  commit_author: "testuser",
576
576
  })
577
+
578
+ // Update the package release with the latest build ID
579
+ const release1 = db.getPackageReleaseById(packageReleaseId1)!
580
+ db.updatePackageRelease({
581
+ ...release1,
582
+ latest_package_build_id: firstBuild.package_build_id,
583
+ })
577
584
  // Define the @tsci/seveibar.a555timer package
578
585
  db.addSnippet({
579
586
  name: "seveibar/a555timer",
@@ -1620,7 +1627,7 @@ export const SquareWaveModule = () => (
1620
1627
  })
1621
1628
 
1622
1629
  // Add failed build first
1623
- db.addPackageBuild({
1630
+ const failedBuild = db.addPackageBuild({
1624
1631
  package_release_id: packageReleaseId2,
1625
1632
  created_at: new Date(Date.now() - 15000).toISOString(), // 15 seconds ago
1626
1633
  transpilation_in_progress: false,
@@ -1658,7 +1665,7 @@ export const SquareWaveModule = () => (
1658
1665
  })
1659
1666
 
1660
1667
  // Add successful build
1661
- db.addPackageBuild({
1668
+ const successfulBuild = db.addPackageBuild({
1662
1669
  package_release_id: packageReleaseId2,
1663
1670
  created_at: new Date().toISOString(),
1664
1671
  transpilation_in_progress: false,
@@ -1702,6 +1709,13 @@ export const SquareWaveModule = () => (
1702
1709
  commit_author: "testuser",
1703
1710
  })
1704
1711
 
1712
+ // Update the package release with the latest (successful) build ID
1713
+ const release2 = db.getPackageReleaseById(packageReleaseId2)!
1714
+ db.updatePackageRelease({
1715
+ ...release2,
1716
+ latest_package_build_id: successfulBuild.package_build_id,
1717
+ })
1718
+
1705
1719
  db.addOrder({
1706
1720
  account_id,
1707
1721
  is_running: false,
@@ -14,7 +14,6 @@ export default withRouteSpec({
14
14
  }),
15
15
  })(async (req, ctx) => {
16
16
  const { package_id, package_release_id } = req.query
17
- console.log(ctx.db.packageBuilds)
18
17
  if (!package_id && !package_release_id) {
19
18
  return ctx.error(400, {
20
19
  error_code: "invalid_request",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/fake-snippets",
3
- "version": "0.0.106",
3
+ "version": "0.0.107",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,7 +30,8 @@
30
30
  "build:fake-api": "bun run build:fake-api:tsup && bun run build:fake-api:bundle && bun run build:fake-api:schema",
31
31
  "build:fake-api:schema": "tsup-node ./fake-snippets-api/lib/db/schema.ts --format esm --dts",
32
32
  "generate-images": "bun run scripts/generate-image-sizes.ts",
33
- "generate-sitemap": "bun run scripts/generate-sitemap.ts"
33
+ "generate-sitemap": "bun run scripts/generate-sitemap.ts",
34
+ "typecheck": "tsc --noEmit"
34
35
  },
35
36
  "devDependencies": {
36
37
  "@anthropic-ai/sdk": "^0.27.3",
package/src/App.tsx CHANGED
@@ -79,9 +79,9 @@ const PackageEditorPage = lazyImport(async () => {
79
79
  ])
80
80
  return editorModule
81
81
  })
82
- const ViewConnectedRepoPage = lazyImport(
83
- () => import("@/pages/view-connected-repo"),
84
- )
82
+ const ReleasesPage = lazyImport(() => import("@/pages/releases"))
83
+ const ReleaseDetailPage = lazyImport(() => import("@/pages/release-detail"))
84
+ const ReleaseBuildsPage = lazyImport(() => import("@/pages/release-builds"))
85
85
  const PreviewBuildPage = lazyImport(() => import("@/pages/preview-build"))
86
86
 
87
87
  class ErrorBoundary extends React.Component<
@@ -258,7 +258,22 @@ function App() {
258
258
  <Route path="/my-orders" component={MyOrdersPage} />
259
259
  <Route path="/dev-login" component={DevLoginPage} />
260
260
  <Route path="/:username" component={UserProfilePage} />
261
- <Route path="/build/:buildId" component={ViewConnectedRepoPage} />
261
+ <Route
262
+ path="/:author/:packageName/release/:releaseId/builds"
263
+ component={ReleaseBuildsPage}
264
+ />
265
+ <Route
266
+ path="/:author/:packageName/release/:releaseId"
267
+ component={ReleaseDetailPage}
268
+ />
269
+ <Route
270
+ path="/:author/:packageName/releases/:packageReleaseId"
271
+ component={ReleaseDetailPage}
272
+ />
273
+ <Route
274
+ path="/:author/:packageName/releases"
275
+ component={ReleasesPage}
276
+ />
262
277
  <Route
263
278
  path="/build/:buildId/preview"
264
279
  component={PreviewBuildPage}
@@ -0,0 +1,111 @@
1
+ import { PrefetchPageLink } from "@/components/PrefetchPageLink"
2
+ import {
3
+ Breadcrumb,
4
+ BreadcrumbList,
5
+ BreadcrumbItem,
6
+ BreadcrumbLink,
7
+ BreadcrumbPage,
8
+ BreadcrumbSeparator,
9
+ } from "@/components/ui/breadcrumb"
10
+
11
+ interface PackageBreadcrumbProps {
12
+ author: string
13
+ packageName: string
14
+ unscopedName?: string
15
+ currentPage?: "releases" | "builds" | string
16
+ releaseVersion?: string
17
+ }
18
+
19
+ export function PackageBreadcrumb({
20
+ author,
21
+ packageName,
22
+ unscopedName,
23
+ currentPage,
24
+ releaseVersion,
25
+ }: PackageBreadcrumbProps) {
26
+ return (
27
+ <Breadcrumb className="mb-4">
28
+ <BreadcrumbList>
29
+ {/* Author */}
30
+ <BreadcrumbItem>
31
+ <BreadcrumbLink asChild>
32
+ <PrefetchPageLink href={`/${author}`}>{author}</PrefetchPageLink>
33
+ </BreadcrumbLink>
34
+ </BreadcrumbItem>
35
+ <BreadcrumbSeparator>
36
+ <span>/</span>
37
+ </BreadcrumbSeparator>
38
+
39
+ {/* Package */}
40
+ <BreadcrumbItem>
41
+ <BreadcrumbLink asChild>
42
+ <PrefetchPageLink href={`/${packageName}`}>
43
+ {unscopedName || packageName}
44
+ </PrefetchPageLink>
45
+ </BreadcrumbLink>
46
+ </BreadcrumbItem>
47
+ <BreadcrumbSeparator>
48
+ <span>/</span>
49
+ </BreadcrumbSeparator>
50
+
51
+ {/* Releases */}
52
+ {(currentPage === "releases" ||
53
+ releaseVersion ||
54
+ currentPage === "builds") && (
55
+ <>
56
+ <BreadcrumbItem>
57
+ {currentPage === "releases" ? (
58
+ <BreadcrumbPage>releases</BreadcrumbPage>
59
+ ) : (
60
+ <BreadcrumbLink asChild>
61
+ <PrefetchPageLink href={`/${packageName}/releases`}>
62
+ releases
63
+ </PrefetchPageLink>
64
+ </BreadcrumbLink>
65
+ )}
66
+ </BreadcrumbItem>
67
+ <BreadcrumbSeparator>
68
+ <span>/</span>
69
+ </BreadcrumbSeparator>
70
+ </>
71
+ )}
72
+
73
+ {/* Release Version */}
74
+ {releaseVersion && (
75
+ <>
76
+ <BreadcrumbItem>
77
+ {currentPage === "builds" ? (
78
+ <BreadcrumbLink asChild>
79
+ <PrefetchPageLink
80
+ href={`/${packageName}/release/${releaseVersion}`}
81
+ >
82
+ {releaseVersion}
83
+ </PrefetchPageLink>
84
+ </BreadcrumbLink>
85
+ ) : (
86
+ <BreadcrumbPage>{releaseVersion}</BreadcrumbPage>
87
+ )}
88
+ </BreadcrumbItem>
89
+ {currentPage === "builds" && (
90
+ <>
91
+ <BreadcrumbSeparator>
92
+ <span>/</span>
93
+ </BreadcrumbSeparator>
94
+ <BreadcrumbItem>
95
+ <BreadcrumbPage>builds</BreadcrumbPage>
96
+ </BreadcrumbItem>
97
+ </>
98
+ )}
99
+ </>
100
+ )}
101
+
102
+ {/* Other current pages */}
103
+ {currentPage && !["releases", "builds"].includes(currentPage) && (
104
+ <BreadcrumbItem>
105
+ <BreadcrumbPage>{currentPage}</BreadcrumbPage>
106
+ </BreadcrumbItem>
107
+ )}
108
+ </BreadcrumbList>
109
+ </Breadcrumb>
110
+ )
111
+ }
@@ -7,7 +7,7 @@ import { BuildStatus, BuildStep } from "./build-status"
7
7
  import type { PackageRelease } from "fake-snippets-api/lib/db/schema"
8
8
  import { getBuildStatus, StatusIcon } from "@/components/preview"
9
9
  import { PrefetchPageLink } from "@/components/PrefetchPageLink"
10
- import { useLatestPackageBuildByReleaseId } from "@/hooks/use-package-builds"
10
+ import { usePackageBuild } from "@/hooks/use-package-builds"
11
11
 
12
12
  function getTranspilationStatus(
13
13
  pr?: PackageRelease | null,
@@ -42,8 +42,8 @@ export default function SidebarReleasesSection() {
42
42
  const { data: packageRelease } = usePackageReleaseById(
43
43
  packageInfo?.latest_package_release_id,
44
44
  )
45
- const { data: latestBuild } = useLatestPackageBuildByReleaseId(
46
- packageRelease?.package_release_id,
45
+ const { data: latestBuild } = usePackageBuild(
46
+ packageRelease?.latest_package_build_id ?? null,
47
47
  )
48
48
 
49
49
  const buildSteps: BuildStep[] = [
@@ -79,12 +79,22 @@ export default function SidebarReleasesSection() {
79
79
  : { status: "pending", label: "pending" }
80
80
  return (
81
81
  <div className="mb-6">
82
- <h2 className="text-lg font-semibold mb-2">Releases</h2>
82
+ <h2 className="text-lg font-semibold mb-2">
83
+ <PrefetchPageLink
84
+ href={`/${packageInfo?.owner_github_username}/${packageInfo?.unscoped_name}/releases`}
85
+ className="hover:underline"
86
+ >
87
+ Releases
88
+ </PrefetchPageLink>
89
+ </h2>
83
90
  <div className="flex flex-col space-y-2">
84
- <div className="flex items-center">
91
+ <PrefetchPageLink
92
+ href={`/${packageInfo?.owner_github_username}/${packageInfo?.unscoped_name}/releases`}
93
+ className="flex items-center hover:underline"
94
+ >
85
95
  <Tag className="h-4 w-4 mr-2 text-gray-500 dark:text-[#8b949e]" />
86
96
  <span className="text-sm font-medium">v{packageRelease.version}</span>
87
- </div>
97
+ </PrefetchPageLink>
88
98
  <div className="flex items-center">
89
99
  <Clock className="h-4 w-4 mr-2 text-gray-500 dark:text-[#8b949e]" />
90
100
  <span className="text-sm text-gray-500 dark:text-[#8b949e]">
@@ -104,7 +114,7 @@ export default function SidebarReleasesSection() {
104
114
  className="flex items-center gap-2 text-sm text-gray-500 dark:text-[#8b949e]"
105
115
  >
106
116
  <StatusIcon status={status} />
107
- <span>Package preview {label}</span>
117
+ <span>Package Preview {label}</span>
108
118
  </PrefetchPageLink>
109
119
  )}
110
120
  </div>