@tscircuit/fake-snippets 0.0.82 → 0.0.83
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/bun-tests/fake-snippets-api/routes/package_releases/create.test.ts +3 -3
- package/dist/bundle.js +38 -10
- package/dist/index.d.ts +24 -4
- package/dist/index.js +5 -1
- package/dist/schema.d.ts +37 -5
- package/dist/schema.js +5 -1
- package/fake-snippets-api/lib/db/schema.ts +5 -1
- package/fake-snippets-api/lib/public-mapping/public-map-package-release.ts +14 -1
- package/fake-snippets-api/routes/api/package_releases/get.ts +11 -3
- package/fake-snippets-api/routes/api/package_releases/list.ts +8 -1
- package/package.json +1 -1
- package/src/App.tsx +0 -2
- package/src/components/PackageBuildsPage/package-build-header.tsx +14 -2
- package/src/components/ViewPackagePage/hooks/use-toast.tsx +70 -0
- package/src/components/dialogs/{import-snippet-dialog.tsx → import-package-dialog.tsx} +25 -24
- package/src/components/package-port/CodeEditorHeader.tsx +7 -6
- package/src/components/ui/toaster.tsx +1 -33
- package/src/hooks/use-current-package-release.ts +10 -1
- package/src/hooks/use-package-release.ts +15 -14
- package/src/hooks/use-toast.tsx +50 -169
- package/src/pages/view-package.tsx +1 -0
- package/src/components/ViewPackagePage/hooks/use-toast.ts +0 -191
package/dist/index.d.ts
CHANGED
|
@@ -435,7 +435,11 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
435
435
|
circuit_json_build_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
436
436
|
circuit_json_build_logs: z.ZodDefault<z.ZodArray<z.ZodAny, "many">>;
|
|
437
437
|
circuit_json_build_is_stale: z.ZodDefault<z.ZodBoolean>;
|
|
438
|
-
ai_review_text: z.ZodDefault<z.ZodNullable<z.ZodString
|
|
438
|
+
ai_review_text: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodString>>>;
|
|
439
|
+
ai_review_started_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
440
|
+
ai_review_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
441
|
+
ai_review_error: z.ZodNullable<z.ZodOptional<z.ZodAny>>;
|
|
442
|
+
ai_review_logs: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodAny, "many">>>;
|
|
439
443
|
ai_review_requested: z.ZodDefault<z.ZodBoolean>;
|
|
440
444
|
}, "strip", z.ZodTypeAny, {
|
|
441
445
|
package_release_id: string;
|
|
@@ -454,7 +458,6 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
454
458
|
circuit_json_build_in_progress: boolean;
|
|
455
459
|
circuit_json_build_logs: any[];
|
|
456
460
|
circuit_json_build_is_stale: boolean;
|
|
457
|
-
ai_review_text: string | null;
|
|
458
461
|
ai_review_requested: boolean;
|
|
459
462
|
commit_sha?: string | null | undefined;
|
|
460
463
|
license?: string | null | undefined;
|
|
@@ -467,6 +470,11 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
467
470
|
transpilation_completed_at?: string | null | undefined;
|
|
468
471
|
circuit_json_build_started_at?: string | null | undefined;
|
|
469
472
|
circuit_json_build_completed_at?: string | null | undefined;
|
|
473
|
+
ai_review_text?: string | null | undefined;
|
|
474
|
+
ai_review_started_at?: string | null | undefined;
|
|
475
|
+
ai_review_completed_at?: string | null | undefined;
|
|
476
|
+
ai_review_error?: any;
|
|
477
|
+
ai_review_logs?: any[] | null | undefined;
|
|
470
478
|
}, {
|
|
471
479
|
package_release_id: string;
|
|
472
480
|
created_at: string;
|
|
@@ -496,6 +504,10 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
496
504
|
circuit_json_build_logs?: any[] | undefined;
|
|
497
505
|
circuit_json_build_is_stale?: boolean | undefined;
|
|
498
506
|
ai_review_text?: string | null | undefined;
|
|
507
|
+
ai_review_started_at?: string | null | undefined;
|
|
508
|
+
ai_review_completed_at?: string | null | undefined;
|
|
509
|
+
ai_review_error?: any;
|
|
510
|
+
ai_review_logs?: any[] | null | undefined;
|
|
499
511
|
ai_review_requested?: boolean | undefined;
|
|
500
512
|
}>;
|
|
501
513
|
type PackageRelease = z.infer<typeof packageReleaseSchema>;
|
|
@@ -766,7 +778,6 @@ declare const createDatabase: ({ seed }?: {
|
|
|
766
778
|
circuit_json_build_in_progress: boolean;
|
|
767
779
|
circuit_json_build_logs: any[];
|
|
768
780
|
circuit_json_build_is_stale: boolean;
|
|
769
|
-
ai_review_text: string | null;
|
|
770
781
|
ai_review_requested: boolean;
|
|
771
782
|
commit_sha?: string | null | undefined;
|
|
772
783
|
license?: string | null | undefined;
|
|
@@ -779,6 +790,11 @@ declare const createDatabase: ({ seed }?: {
|
|
|
779
790
|
transpilation_completed_at?: string | null | undefined;
|
|
780
791
|
circuit_json_build_started_at?: string | null | undefined;
|
|
781
792
|
circuit_json_build_completed_at?: string | null | undefined;
|
|
793
|
+
ai_review_text?: string | null | undefined;
|
|
794
|
+
ai_review_started_at?: string | null | undefined;
|
|
795
|
+
ai_review_completed_at?: string | null | undefined;
|
|
796
|
+
ai_review_error?: any;
|
|
797
|
+
ai_review_logs?: any[] | null | undefined;
|
|
782
798
|
}[];
|
|
783
799
|
packageFiles: {
|
|
784
800
|
package_release_id: string;
|
|
@@ -1078,7 +1094,6 @@ declare const createDatabase: ({ seed }?: {
|
|
|
1078
1094
|
circuit_json_build_in_progress: boolean;
|
|
1079
1095
|
circuit_json_build_logs: any[];
|
|
1080
1096
|
circuit_json_build_is_stale: boolean;
|
|
1081
|
-
ai_review_text: string | null;
|
|
1082
1097
|
ai_review_requested: boolean;
|
|
1083
1098
|
commit_sha?: string | null | undefined;
|
|
1084
1099
|
license?: string | null | undefined;
|
|
@@ -1091,6 +1106,11 @@ declare const createDatabase: ({ seed }?: {
|
|
|
1091
1106
|
transpilation_completed_at?: string | null | undefined;
|
|
1092
1107
|
circuit_json_build_started_at?: string | null | undefined;
|
|
1093
1108
|
circuit_json_build_completed_at?: string | null | undefined;
|
|
1109
|
+
ai_review_text?: string | null | undefined;
|
|
1110
|
+
ai_review_started_at?: string | null | undefined;
|
|
1111
|
+
ai_review_completed_at?: string | null | undefined;
|
|
1112
|
+
ai_review_error?: any;
|
|
1113
|
+
ai_review_logs?: any[] | null | undefined;
|
|
1094
1114
|
}[];
|
|
1095
1115
|
packageFiles: {
|
|
1096
1116
|
package_release_id: string;
|
package/dist/index.js
CHANGED
|
@@ -167,7 +167,11 @@ var packageReleaseSchema = z.object({
|
|
|
167
167
|
circuit_json_build_logs: z.array(z.any()).default([]),
|
|
168
168
|
circuit_json_build_is_stale: z.boolean().default(false),
|
|
169
169
|
// AI Review
|
|
170
|
-
ai_review_text: z.string().nullable().default(null),
|
|
170
|
+
ai_review_text: z.string().nullable().default(null).optional(),
|
|
171
|
+
ai_review_started_at: z.string().datetime().nullable().optional(),
|
|
172
|
+
ai_review_completed_at: z.string().datetime().nullable().optional(),
|
|
173
|
+
ai_review_error: z.any().optional().nullable(),
|
|
174
|
+
ai_review_logs: z.array(z.any()).optional().nullable(),
|
|
171
175
|
ai_review_requested: z.boolean().default(false)
|
|
172
176
|
});
|
|
173
177
|
var packageFileSchema = z.object({
|
package/dist/schema.d.ts
CHANGED
|
@@ -560,7 +560,11 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
560
560
|
circuit_json_build_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
561
561
|
circuit_json_build_logs: z.ZodDefault<z.ZodArray<z.ZodAny, "many">>;
|
|
562
562
|
circuit_json_build_is_stale: z.ZodDefault<z.ZodBoolean>;
|
|
563
|
-
ai_review_text: z.ZodDefault<z.ZodNullable<z.ZodString
|
|
563
|
+
ai_review_text: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodString>>>;
|
|
564
|
+
ai_review_started_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
565
|
+
ai_review_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
566
|
+
ai_review_error: z.ZodNullable<z.ZodOptional<z.ZodAny>>;
|
|
567
|
+
ai_review_logs: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodAny, "many">>>;
|
|
564
568
|
ai_review_requested: z.ZodDefault<z.ZodBoolean>;
|
|
565
569
|
}, "strip", z.ZodTypeAny, {
|
|
566
570
|
package_release_id: string;
|
|
@@ -579,7 +583,6 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
579
583
|
circuit_json_build_in_progress: boolean;
|
|
580
584
|
circuit_json_build_logs: any[];
|
|
581
585
|
circuit_json_build_is_stale: boolean;
|
|
582
|
-
ai_review_text: string | null;
|
|
583
586
|
ai_review_requested: boolean;
|
|
584
587
|
commit_sha?: string | null | undefined;
|
|
585
588
|
license?: string | null | undefined;
|
|
@@ -592,6 +595,11 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
592
595
|
transpilation_completed_at?: string | null | undefined;
|
|
593
596
|
circuit_json_build_started_at?: string | null | undefined;
|
|
594
597
|
circuit_json_build_completed_at?: string | null | undefined;
|
|
598
|
+
ai_review_text?: string | null | undefined;
|
|
599
|
+
ai_review_started_at?: string | null | undefined;
|
|
600
|
+
ai_review_completed_at?: string | null | undefined;
|
|
601
|
+
ai_review_error?: any;
|
|
602
|
+
ai_review_logs?: any[] | null | undefined;
|
|
595
603
|
}, {
|
|
596
604
|
package_release_id: string;
|
|
597
605
|
created_at: string;
|
|
@@ -621,6 +629,10 @@ declare const packageReleaseSchema: z.ZodObject<{
|
|
|
621
629
|
circuit_json_build_logs?: any[] | undefined;
|
|
622
630
|
circuit_json_build_is_stale?: boolean | undefined;
|
|
623
631
|
ai_review_text?: string | null | undefined;
|
|
632
|
+
ai_review_started_at?: string | null | undefined;
|
|
633
|
+
ai_review_completed_at?: string | null | undefined;
|
|
634
|
+
ai_review_error?: any;
|
|
635
|
+
ai_review_logs?: any[] | null | undefined;
|
|
624
636
|
ai_review_requested?: boolean | undefined;
|
|
625
637
|
}>;
|
|
626
638
|
type PackageRelease = z.infer<typeof packageReleaseSchema>;
|
|
@@ -945,7 +957,11 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
945
957
|
circuit_json_build_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
946
958
|
circuit_json_build_logs: z.ZodDefault<z.ZodArray<z.ZodAny, "many">>;
|
|
947
959
|
circuit_json_build_is_stale: z.ZodDefault<z.ZodBoolean>;
|
|
948
|
-
ai_review_text: z.ZodDefault<z.ZodNullable<z.ZodString
|
|
960
|
+
ai_review_text: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodString>>>;
|
|
961
|
+
ai_review_started_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
962
|
+
ai_review_completed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
963
|
+
ai_review_error: z.ZodNullable<z.ZodOptional<z.ZodAny>>;
|
|
964
|
+
ai_review_logs: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodAny, "many">>>;
|
|
949
965
|
ai_review_requested: z.ZodDefault<z.ZodBoolean>;
|
|
950
966
|
}, "strip", z.ZodTypeAny, {
|
|
951
967
|
package_release_id: string;
|
|
@@ -964,7 +980,6 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
964
980
|
circuit_json_build_in_progress: boolean;
|
|
965
981
|
circuit_json_build_logs: any[];
|
|
966
982
|
circuit_json_build_is_stale: boolean;
|
|
967
|
-
ai_review_text: string | null;
|
|
968
983
|
ai_review_requested: boolean;
|
|
969
984
|
commit_sha?: string | null | undefined;
|
|
970
985
|
license?: string | null | undefined;
|
|
@@ -977,6 +992,11 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
977
992
|
transpilation_completed_at?: string | null | undefined;
|
|
978
993
|
circuit_json_build_started_at?: string | null | undefined;
|
|
979
994
|
circuit_json_build_completed_at?: string | null | undefined;
|
|
995
|
+
ai_review_text?: string | null | undefined;
|
|
996
|
+
ai_review_started_at?: string | null | undefined;
|
|
997
|
+
ai_review_completed_at?: string | null | undefined;
|
|
998
|
+
ai_review_error?: any;
|
|
999
|
+
ai_review_logs?: any[] | null | undefined;
|
|
980
1000
|
}, {
|
|
981
1001
|
package_release_id: string;
|
|
982
1002
|
created_at: string;
|
|
@@ -1006,6 +1026,10 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
1006
1026
|
circuit_json_build_logs?: any[] | undefined;
|
|
1007
1027
|
circuit_json_build_is_stale?: boolean | undefined;
|
|
1008
1028
|
ai_review_text?: string | null | undefined;
|
|
1029
|
+
ai_review_started_at?: string | null | undefined;
|
|
1030
|
+
ai_review_completed_at?: string | null | undefined;
|
|
1031
|
+
ai_review_error?: any;
|
|
1032
|
+
ai_review_logs?: any[] | null | undefined;
|
|
1009
1033
|
ai_review_requested?: boolean | undefined;
|
|
1010
1034
|
}>, "many">>;
|
|
1011
1035
|
packageFiles: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
@@ -1614,7 +1638,6 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
1614
1638
|
circuit_json_build_in_progress: boolean;
|
|
1615
1639
|
circuit_json_build_logs: any[];
|
|
1616
1640
|
circuit_json_build_is_stale: boolean;
|
|
1617
|
-
ai_review_text: string | null;
|
|
1618
1641
|
ai_review_requested: boolean;
|
|
1619
1642
|
commit_sha?: string | null | undefined;
|
|
1620
1643
|
license?: string | null | undefined;
|
|
@@ -1627,6 +1650,11 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
1627
1650
|
transpilation_completed_at?: string | null | undefined;
|
|
1628
1651
|
circuit_json_build_started_at?: string | null | undefined;
|
|
1629
1652
|
circuit_json_build_completed_at?: string | null | undefined;
|
|
1653
|
+
ai_review_text?: string | null | undefined;
|
|
1654
|
+
ai_review_started_at?: string | null | undefined;
|
|
1655
|
+
ai_review_completed_at?: string | null | undefined;
|
|
1656
|
+
ai_review_error?: any;
|
|
1657
|
+
ai_review_logs?: any[] | null | undefined;
|
|
1630
1658
|
}[];
|
|
1631
1659
|
packageFiles: {
|
|
1632
1660
|
package_release_id: string;
|
|
@@ -1860,6 +1888,10 @@ declare const databaseSchema: z.ZodObject<{
|
|
|
1860
1888
|
circuit_json_build_logs?: any[] | undefined;
|
|
1861
1889
|
circuit_json_build_is_stale?: boolean | undefined;
|
|
1862
1890
|
ai_review_text?: string | null | undefined;
|
|
1891
|
+
ai_review_started_at?: string | null | undefined;
|
|
1892
|
+
ai_review_completed_at?: string | null | undefined;
|
|
1893
|
+
ai_review_error?: any;
|
|
1894
|
+
ai_review_logs?: any[] | null | undefined;
|
|
1863
1895
|
ai_review_requested?: boolean | undefined;
|
|
1864
1896
|
}[] | undefined;
|
|
1865
1897
|
packageFiles?: {
|
package/dist/schema.js
CHANGED
|
@@ -162,7 +162,11 @@ var packageReleaseSchema = z.object({
|
|
|
162
162
|
circuit_json_build_logs: z.array(z.any()).default([]),
|
|
163
163
|
circuit_json_build_is_stale: z.boolean().default(false),
|
|
164
164
|
// AI Review
|
|
165
|
-
ai_review_text: z.string().nullable().default(null),
|
|
165
|
+
ai_review_text: z.string().nullable().default(null).optional(),
|
|
166
|
+
ai_review_started_at: z.string().datetime().nullable().optional(),
|
|
167
|
+
ai_review_completed_at: z.string().datetime().nullable().optional(),
|
|
168
|
+
ai_review_error: z.any().optional().nullable(),
|
|
169
|
+
ai_review_logs: z.array(z.any()).optional().nullable(),
|
|
166
170
|
ai_review_requested: z.boolean().default(false)
|
|
167
171
|
});
|
|
168
172
|
var packageFileSchema = z.object({
|
|
@@ -203,7 +203,11 @@ export const packageReleaseSchema = z.object({
|
|
|
203
203
|
circuit_json_build_is_stale: z.boolean().default(false),
|
|
204
204
|
|
|
205
205
|
// AI Review
|
|
206
|
-
ai_review_text: z.string().nullable().default(null),
|
|
206
|
+
ai_review_text: z.string().nullable().default(null).optional(),
|
|
207
|
+
ai_review_started_at: z.string().datetime().nullable().optional(),
|
|
208
|
+
ai_review_completed_at: z.string().datetime().nullable().optional(),
|
|
209
|
+
ai_review_error: z.any().optional().nullable(),
|
|
210
|
+
ai_review_logs: z.array(z.any()).optional().nullable(),
|
|
207
211
|
ai_review_requested: z.boolean().default(false),
|
|
208
212
|
})
|
|
209
213
|
export type PackageRelease = z.infer<typeof packageReleaseSchema>
|
|
@@ -4,11 +4,13 @@ export const publicMapPackageRelease = (
|
|
|
4
4
|
internal_package_release: ZT.PackageRelease,
|
|
5
5
|
options: {
|
|
6
6
|
include_logs?: boolean
|
|
7
|
+
include_ai_review?: boolean
|
|
7
8
|
} = {
|
|
8
9
|
include_logs: false,
|
|
10
|
+
include_ai_review: false,
|
|
9
11
|
},
|
|
10
12
|
): ZT.PackageRelease => {
|
|
11
|
-
|
|
13
|
+
const result = {
|
|
12
14
|
...internal_package_release,
|
|
13
15
|
created_at: internal_package_release.created_at,
|
|
14
16
|
circuit_json_build_error_last_updated_at:
|
|
@@ -21,4 +23,15 @@ export const publicMapPackageRelease = (
|
|
|
21
23
|
? internal_package_release.circuit_json_build_logs
|
|
22
24
|
: [],
|
|
23
25
|
}
|
|
26
|
+
|
|
27
|
+
// Only include AI review fields when include_ai_review is true
|
|
28
|
+
if (!options.include_ai_review) {
|
|
29
|
+
delete result.ai_review_text
|
|
30
|
+
delete result.ai_review_started_at
|
|
31
|
+
delete result.ai_review_completed_at
|
|
32
|
+
delete result.ai_review_error
|
|
33
|
+
delete result.ai_review_logs
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return result
|
|
24
37
|
}
|
|
@@ -8,6 +8,7 @@ export default withRouteSpec({
|
|
|
8
8
|
auth: "none",
|
|
9
9
|
commonParams: z.object({
|
|
10
10
|
include_logs: z.boolean().optional().default(false),
|
|
11
|
+
include_ai_review: z.boolean().optional().default(false),
|
|
11
12
|
}),
|
|
12
13
|
jsonBody: z.object({
|
|
13
14
|
package_release_id: z.string().optional(),
|
|
@@ -58,7 +59,9 @@ export default withRouteSpec({
|
|
|
58
59
|
|
|
59
60
|
return ctx.json({
|
|
60
61
|
ok: true,
|
|
61
|
-
package_release: publicMapPackageRelease(packageReleases[0]
|
|
62
|
+
package_release: publicMapPackageRelease(packageReleases[0], {
|
|
63
|
+
include_ai_review: req.commonParams?.include_ai_review,
|
|
64
|
+
}),
|
|
62
65
|
})
|
|
63
66
|
}
|
|
64
67
|
|
|
@@ -82,7 +85,9 @@ export default withRouteSpec({
|
|
|
82
85
|
|
|
83
86
|
return ctx.json({
|
|
84
87
|
ok: true,
|
|
85
|
-
package_release: publicMapPackageRelease(packageReleases[0]
|
|
88
|
+
package_release: publicMapPackageRelease(packageReleases[0], {
|
|
89
|
+
include_ai_review: req.commonParams?.include_ai_review,
|
|
90
|
+
}),
|
|
86
91
|
})
|
|
87
92
|
}
|
|
88
93
|
|
|
@@ -102,7 +107,9 @@ export default withRouteSpec({
|
|
|
102
107
|
|
|
103
108
|
return ctx.json({
|
|
104
109
|
ok: true,
|
|
105
|
-
package_release: publicMapPackageRelease(pkgRelease
|
|
110
|
+
package_release: publicMapPackageRelease(pkgRelease, {
|
|
111
|
+
include_ai_review: req.commonParams?.include_ai_review,
|
|
112
|
+
}),
|
|
106
113
|
})
|
|
107
114
|
}
|
|
108
115
|
|
|
@@ -120,6 +127,7 @@ export default withRouteSpec({
|
|
|
120
127
|
ok: true,
|
|
121
128
|
package_release: publicMapPackageRelease(foundRelease, {
|
|
122
129
|
include_logs: req.commonParams?.include_logs,
|
|
130
|
+
include_ai_review: req.commonParams?.include_ai_review,
|
|
123
131
|
}),
|
|
124
132
|
})
|
|
125
133
|
})
|
|
@@ -6,6 +6,9 @@ import { z } from "zod"
|
|
|
6
6
|
export default withRouteSpec({
|
|
7
7
|
methods: ["POST"],
|
|
8
8
|
auth: "none",
|
|
9
|
+
commonParams: z.object({
|
|
10
|
+
include_ai_review: z.boolean().optional().default(false),
|
|
11
|
+
}),
|
|
9
12
|
jsonBody: z
|
|
10
13
|
.object({
|
|
11
14
|
package_id: z.string().optional(),
|
|
@@ -72,6 +75,10 @@ export default withRouteSpec({
|
|
|
72
75
|
|
|
73
76
|
return ctx.json({
|
|
74
77
|
ok: true,
|
|
75
|
-
package_releases: releases.map((pr) =>
|
|
78
|
+
package_releases: releases.map((pr) =>
|
|
79
|
+
publicMapPackageRelease(pr, {
|
|
80
|
+
include_ai_review: req.commonParams?.include_ai_review,
|
|
81
|
+
}),
|
|
82
|
+
),
|
|
76
83
|
})
|
|
77
84
|
})
|
package/package.json
CHANGED
package/src/App.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ComponentType, Suspense, lazy } from "react"
|
|
2
|
-
import { Toaster } from "@/components/ui/toaster"
|
|
3
2
|
import { Route, Switch } from "wouter"
|
|
4
3
|
import "./components/CmdKMenu"
|
|
5
4
|
import { ContextProviders } from "./ContextProviders"
|
|
@@ -129,7 +128,6 @@ function App() {
|
|
|
129
128
|
<Route component={lazyImport(() => import("@/pages/404"))} />
|
|
130
129
|
</Switch>
|
|
131
130
|
</Suspense>
|
|
132
|
-
<Toaster />
|
|
133
131
|
</ErrorBoundary>
|
|
134
132
|
</ContextProviders>
|
|
135
133
|
)
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { Button } from "@/components/ui/button"
|
|
2
2
|
import { useCurrentPackageRelease } from "@/hooks/use-current-package-release"
|
|
3
3
|
import { useRebuildPackageReleaseMutation } from "@/hooks/use-rebuild-package-release-mutation"
|
|
4
|
-
import { Github, RefreshCw } from "lucide-react"
|
|
4
|
+
import { Github, RefreshCw, RotateCcw } from "lucide-react"
|
|
5
5
|
import { useParams } from "wouter"
|
|
6
6
|
import { DownloadButtonAndMenu } from "../DownloadButtonAndMenu"
|
|
7
7
|
|
|
8
8
|
export function PackageBuildHeader() {
|
|
9
9
|
const { author, packageName } = useParams()
|
|
10
|
-
const { packageRelease } = useCurrentPackageRelease({
|
|
10
|
+
const { packageRelease, refetch, isFetching } = useCurrentPackageRelease({
|
|
11
|
+
include_logs: true,
|
|
12
|
+
})
|
|
11
13
|
const { mutate: rebuildPackage, isLoading } =
|
|
12
14
|
useRebuildPackageReleaseMutation()
|
|
13
15
|
|
|
@@ -54,6 +56,16 @@ export function PackageBuildHeader() {
|
|
|
54
56
|
<RefreshCw className="w-3 h-3 sm:w-4 sm:h-4 mr-1 sm:mr-2" />
|
|
55
57
|
{isLoading ? "Rebuilding..." : "Rebuild"}
|
|
56
58
|
</Button>
|
|
59
|
+
<Button
|
|
60
|
+
variant="outline"
|
|
61
|
+
size="icon"
|
|
62
|
+
aria-label="Reload logs"
|
|
63
|
+
className="border-gray-300 bg-white hover:bg-gray-50"
|
|
64
|
+
onClick={() => refetch()}
|
|
65
|
+
disabled={isFetching}
|
|
66
|
+
>
|
|
67
|
+
<RotateCcw className="w-3 h-3 sm:w-4 sm:h-4" />
|
|
68
|
+
</Button>
|
|
57
69
|
<DownloadButtonAndMenu
|
|
58
70
|
snippetUnscopedName={`${author}/${packageName}`}
|
|
59
71
|
/>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import toastLibrary, { Toaster, type Toast } from "react-hot-toast"
|
|
3
|
+
import React from "react"
|
|
4
|
+
|
|
5
|
+
export interface ToasterToast {
|
|
6
|
+
title?: React.ReactNode
|
|
7
|
+
description?: React.ReactNode
|
|
8
|
+
variant?: "default" | "destructive"
|
|
9
|
+
duration?: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ToastContent({
|
|
13
|
+
title,
|
|
14
|
+
description,
|
|
15
|
+
variant,
|
|
16
|
+
t,
|
|
17
|
+
}: ToasterToast & { t: Toast }) {
|
|
18
|
+
return (
|
|
19
|
+
<div
|
|
20
|
+
className={`rounded-md border p-4 shadow-lg transition-all ${
|
|
21
|
+
t.visible
|
|
22
|
+
? "animate-in fade-in slide-in-from-top-full"
|
|
23
|
+
: "animate-out fade-out slide-out-to-right-full"
|
|
24
|
+
} ${
|
|
25
|
+
variant === "destructive"
|
|
26
|
+
? "border-red-500 bg-red-500 text-slate-50"
|
|
27
|
+
: "border-slate-200 bg-white text-slate-950 dark:bg-slate-950 dark:text-slate-50"
|
|
28
|
+
}`}
|
|
29
|
+
>
|
|
30
|
+
{title && <div className="text-sm font-semibold">{title}</div>}
|
|
31
|
+
{description && <div className="text-sm opacity-90">{description}</div>}
|
|
32
|
+
</div>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const toast = ({
|
|
37
|
+
duration,
|
|
38
|
+
description,
|
|
39
|
+
variant = "default",
|
|
40
|
+
title,
|
|
41
|
+
}: ToasterToast) => {
|
|
42
|
+
if (description) {
|
|
43
|
+
return toastLibrary.custom(
|
|
44
|
+
(t) => (
|
|
45
|
+
<ToastContent
|
|
46
|
+
title={title}
|
|
47
|
+
description={description}
|
|
48
|
+
variant={variant}
|
|
49
|
+
t={t}
|
|
50
|
+
/>
|
|
51
|
+
),
|
|
52
|
+
{ duration },
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (variant === "destructive") {
|
|
57
|
+
return toastLibrary.error(<>{title}</>, { duration })
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return toastLibrary(<>{title}</>, { duration })
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function useToast() {
|
|
64
|
+
return {
|
|
65
|
+
toast,
|
|
66
|
+
dismiss: toastLibrary.dismiss,
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { useToast, toast, Toaster }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useAxios } from "@/hooks/use-axios"
|
|
2
2
|
import { useDebounce } from "@/hooks/use-debounce"
|
|
3
|
-
import type {
|
|
3
|
+
import type { Package } from "fake-snippets-api/lib/db/schema"
|
|
4
4
|
import { useState } from "react"
|
|
5
5
|
import { useQuery } from "react-query"
|
|
6
6
|
import { Button } from "../ui/button"
|
|
@@ -8,25 +8,25 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog"
|
|
|
8
8
|
import { Input } from "../ui/input"
|
|
9
9
|
import { createUseDialog } from "./create-use-dialog"
|
|
10
10
|
|
|
11
|
-
export const
|
|
11
|
+
export const ImportPackageDialog = ({
|
|
12
12
|
open,
|
|
13
13
|
onOpenChange,
|
|
14
|
-
|
|
14
|
+
onPackageSelected,
|
|
15
15
|
}: {
|
|
16
16
|
open: boolean
|
|
17
17
|
onOpenChange: (open: boolean) => any
|
|
18
|
-
|
|
18
|
+
onPackageSelected: (pkg: Package) => any
|
|
19
19
|
}) => {
|
|
20
20
|
const [searchText, setSearchText] = useState("")
|
|
21
21
|
const debouncedSearch = useDebounce(searchText, 300)
|
|
22
22
|
const axios = useAxios()
|
|
23
23
|
const { data: snippets, isLoading } = useQuery(
|
|
24
|
-
["
|
|
24
|
+
["packageSearch", debouncedSearch],
|
|
25
25
|
async () => {
|
|
26
|
-
const response = await axios.
|
|
27
|
-
|
|
28
|
-
)
|
|
29
|
-
return response.data.
|
|
26
|
+
const response = await axios.post("/packages/search", {
|
|
27
|
+
query: debouncedSearch,
|
|
28
|
+
})
|
|
29
|
+
return response.data.packages
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
enabled: debouncedSearch.length > 0,
|
|
@@ -35,41 +35,42 @@ export const ImportSnippetDialog = ({
|
|
|
35
35
|
|
|
36
36
|
return (
|
|
37
37
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
38
|
-
<DialogContent className="z-[100]">
|
|
38
|
+
<DialogContent className="z-[100] p-4 sm:p-6">
|
|
39
39
|
<DialogHeader>
|
|
40
|
-
<DialogTitle>Import
|
|
40
|
+
<DialogTitle>Import Package</DialogTitle>
|
|
41
41
|
</DialogHeader>
|
|
42
42
|
<Input
|
|
43
|
-
placeholder="Search
|
|
43
|
+
placeholder="Search packages..."
|
|
44
44
|
value={searchText}
|
|
45
45
|
onChange={(e) => setSearchText(e.target.value)}
|
|
46
|
+
className="w-full mb-4"
|
|
46
47
|
/>
|
|
47
48
|
<div className="h-64 overflow-y-auto">
|
|
48
49
|
{isLoading ? (
|
|
49
|
-
<div>Loading...</div>
|
|
50
|
+
<div className="text-center">Loading...</div>
|
|
50
51
|
) : (
|
|
51
52
|
<ul className="w-full">
|
|
52
|
-
{snippets?.map((
|
|
53
|
+
{snippets?.map((pkg: Package) => (
|
|
53
54
|
<li
|
|
54
|
-
className="flex items-center my-
|
|
55
|
-
key={
|
|
55
|
+
className="flex flex-col sm:flex-row items-start sm:items-center my-2 text-sm w-full"
|
|
56
|
+
key={pkg.package_id}
|
|
56
57
|
>
|
|
57
58
|
<a
|
|
58
|
-
href={`/${
|
|
59
|
+
href={`/${pkg.name}`}
|
|
59
60
|
target="_blank"
|
|
60
|
-
className="
|
|
61
|
+
className="text-blue-500 hover:underline cursor-pointer flex-shrink-0 mb-1 sm:mb-0 sm:mr-2"
|
|
61
62
|
>
|
|
62
|
-
{
|
|
63
|
+
{pkg.name}
|
|
63
64
|
</a>
|
|
64
|
-
<div className="text-
|
|
65
|
-
{
|
|
65
|
+
<div className="text-gray-500 flex-grow overflow-hidden text-ellipsis whitespace-nowrap mb-1 sm:mb-0">
|
|
66
|
+
{pkg.description}
|
|
66
67
|
</div>
|
|
67
68
|
<Button
|
|
68
69
|
size="sm"
|
|
69
|
-
className="
|
|
70
|
+
className="flex-shrink-0"
|
|
70
71
|
variant="outline"
|
|
71
72
|
onClick={() => {
|
|
72
|
-
|
|
73
|
+
onPackageSelected(pkg)
|
|
73
74
|
onOpenChange(false)
|
|
74
75
|
}}
|
|
75
76
|
>
|
|
@@ -85,4 +86,4 @@ export const ImportSnippetDialog = ({
|
|
|
85
86
|
)
|
|
86
87
|
}
|
|
87
88
|
|
|
88
|
-
export const
|
|
89
|
+
export const useImportPackageDialog = createUseDialog(ImportPackageDialog)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useState, useCallback } from "react"
|
|
2
2
|
import { Button } from "@/components/ui/button"
|
|
3
3
|
import { handleManualEditsImportWithSupportForMultipleFiles } from "@/lib/handleManualEditsImportWithSupportForMultipleFiles"
|
|
4
|
-
import {
|
|
4
|
+
import { useImportPackageDialog } from "@/components/dialogs/import-package-dialog"
|
|
5
5
|
import { useToast } from "@/hooks/use-toast"
|
|
6
6
|
import {
|
|
7
7
|
DropdownMenu,
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
SelectValue,
|
|
20
20
|
} from "../ui/select"
|
|
21
21
|
import { isHiddenFile } from "../ViewPackagePage/utils/is-hidden-file"
|
|
22
|
+
import { Package } from "fake-snippets-api/lib/db/schema"
|
|
22
23
|
|
|
23
24
|
export type FileName = string
|
|
24
25
|
|
|
@@ -39,8 +40,8 @@ export const CodeEditorHeader: React.FC<CodeEditorHeaderProps> = ({
|
|
|
39
40
|
handleFileChange,
|
|
40
41
|
entrypointFileName = "index.tsx",
|
|
41
42
|
}) => {
|
|
42
|
-
const { Dialog:
|
|
43
|
-
|
|
43
|
+
const { Dialog: ImportPackageDialog, openDialog: openImportDialog } =
|
|
44
|
+
useImportPackageDialog()
|
|
44
45
|
const { toast } = useToast()
|
|
45
46
|
const [sidebarOpen, setSidebarOpen] = fileSidebarState
|
|
46
47
|
|
|
@@ -234,9 +235,9 @@ export const CodeEditorHeader: React.FC<CodeEditorHeaderProps> = ({
|
|
|
234
235
|
Format
|
|
235
236
|
</Button>
|
|
236
237
|
</div>
|
|
237
|
-
<
|
|
238
|
-
|
|
239
|
-
const newContent = `import {} from "@tsci/${
|
|
238
|
+
<ImportPackageDialog
|
|
239
|
+
onPackageSelected={(pkg: Package) => {
|
|
240
|
+
const newContent = `import {} from "@tsci/${pkg.owner_github_username}.${pkg.unscoped_name}"\n${files[currentFile || ""]}`
|
|
240
241
|
updateFileContent(currentFile, newContent)
|
|
241
242
|
}}
|
|
242
243
|
/>
|
|
@@ -1,33 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
Toast,
|
|
4
|
-
ToastClose,
|
|
5
|
-
ToastDescription,
|
|
6
|
-
ToastProvider,
|
|
7
|
-
ToastTitle,
|
|
8
|
-
ToastViewport,
|
|
9
|
-
} from "@/components/ui/toast"
|
|
10
|
-
|
|
11
|
-
export function Toaster() {
|
|
12
|
-
const { toasts } = useToast()
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<ToastProvider>
|
|
16
|
-
{toasts.map(function ({ id, title, description, action, ...props }) {
|
|
17
|
-
return (
|
|
18
|
-
<Toast key={id} {...props}>
|
|
19
|
-
<div className="grid gap-1">
|
|
20
|
-
{title && <ToastTitle>{title}</ToastTitle>}
|
|
21
|
-
{description && (
|
|
22
|
-
<ToastDescription>{description}</ToastDescription>
|
|
23
|
-
)}
|
|
24
|
-
</div>
|
|
25
|
-
{action}
|
|
26
|
-
<ToastClose />
|
|
27
|
-
</Toast>
|
|
28
|
-
)
|
|
29
|
-
})}
|
|
30
|
-
<ToastViewport />
|
|
31
|
-
</ToastProvider>
|
|
32
|
-
)
|
|
33
|
-
}
|
|
1
|
+
export { Toaster } from "react-hot-toast"
|