@tscircuit/fake-snippets 0.0.109 → 0.0.111
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/.github/workflows/bun-formatcheck.yml +2 -2
- package/.github/workflows/bun-pver-release.yml +3 -3
- package/.github/workflows/bun-test.yml +1 -1
- package/.github/workflows/bun-typecheck.yml +2 -2
- package/.github/workflows/update-snapshots.yml +1 -1
- package/README.md +4 -0
- package/api/generated-index.js +37 -3
- package/biome.json +2 -1
- package/bun-tests/fake-snippets-api/fixtures/get-test-server.ts +32 -3
- package/bun-tests/fake-snippets-api/fixtures/preload.ts +18 -0
- package/bun-tests/fake-snippets-api/routes/orgs/add_member.test.ts +26 -0
- package/bun-tests/fake-snippets-api/routes/orgs/create.test.ts +37 -0
- package/bun-tests/fake-snippets-api/routes/orgs/get.test.ts +52 -0
- package/bun-tests/fake-snippets-api/routes/orgs/list.test.ts +17 -0
- package/bun-tests/fake-snippets-api/routes/orgs/list_members.test.ts +23 -0
- package/bun-tests/fake-snippets-api/routes/orgs/remove_member.test.ts +81 -0
- package/bun-tests/fake-snippets-api/routes/orgs/update.test.ts +151 -0
- package/bun-tests/fake-snippets-api/routes/package_builds/get.test.ts +1 -1
- package/bun-tests/fake-snippets-api/routes/package_files/create.test.ts +15 -13
- package/bun-tests/fake-snippets-api/routes/package_files/create_or_update.test.ts +26 -24
- package/bun-tests/fake-snippets-api/routes/package_files/delete.test.ts +9 -9
- package/bun-tests/fake-snippets-api/routes/package_files/download.test.ts +4 -4
- package/bun-tests/fake-snippets-api/routes/package_files/get.test.ts +38 -28
- package/bun-tests/fake-snippets-api/routes/package_files/list.test.ts +23 -15
- package/bun-tests/fake-snippets-api/routes/package_releases/create.test.ts +33 -0
- package/bun-tests/fake-snippets-api/routes/package_releases/get.test.ts +4 -4
- package/bun-tests/fake-snippets-api/routes/package_releases/get_image_generation_fields.test.ts +38 -0
- package/bun-tests/fake-snippets-api/routes/packages/create.test.ts +19 -0
- package/bun-tests/fake-snippets-api/routes/packages/fork.test.ts +3 -4
- package/bun-tests/fake-snippets-api/routes/packages/get.test.ts +30 -0
- package/bun-tests/fake-snippets-api/routes/packages/images.test.ts +4 -2
- package/bun-tests/fake-snippets-api/routes/packages/list-1.test.ts +34 -0
- package/bun.lock +361 -453
- package/bunfig.toml +2 -1
- package/dist/bundle.js +1313 -639
- package/dist/index.d.ts +313 -6
- package/dist/index.js +328 -24
- package/dist/schema.d.ts +290 -1
- package/dist/schema.js +54 -1
- package/fake-snippets-api/lib/db/autoload-dev-packages.ts +31 -20
- package/fake-snippets-api/lib/db/db-client.ts +219 -4
- package/fake-snippets-api/lib/db/schema.ts +63 -1
- package/fake-snippets-api/lib/db/seed.ts +100 -0
- package/fake-snippets-api/lib/middleware/with-session-auth.ts +60 -8
- package/fake-snippets-api/lib/package_file/get-package-file-id-from-file-descriptor.ts +2 -2
- package/fake-snippets-api/lib/public-mapping/public-map-org.ts +33 -0
- package/fake-snippets-api/lib/public-mapping/public-map-package-build.ts +10 -0
- package/fake-snippets-api/lib/public-mapping/public-map-package-release.ts +17 -0
- package/fake-snippets-api/routes/api/orgs/add_member.ts +52 -0
- package/fake-snippets-api/routes/api/orgs/create.ts +48 -0
- package/fake-snippets-api/routes/api/orgs/get.ts +39 -0
- package/fake-snippets-api/routes/api/orgs/list.ts +31 -0
- package/fake-snippets-api/routes/api/orgs/list_members.ts +60 -0
- package/fake-snippets-api/routes/api/orgs/remove_member.ts +46 -0
- package/fake-snippets-api/routes/api/orgs/update.ts +118 -0
- package/fake-snippets-api/routes/api/package_files/get.ts +3 -6
- package/fake-snippets-api/routes/api/package_files/list.ts +7 -4
- package/fake-snippets-api/routes/api/packages/create.ts +57 -10
- package/fake-snippets-api/routes/api/packages/get.ts +23 -0
- package/fake-snippets-api/routes/api/packages/images/[owner_github_username]/[unscoped_name]/[view_format].ts +13 -11
- package/fake-snippets-api/routes/api/packages/list.ts +29 -2
- package/fake-snippets-api/routes/api/packages/update_ai_description.ts +37 -0
- package/package.json +25 -19
- package/renovate.json +1 -1
- package/scripts/generate-sitemap.ts +1 -1
- package/src/App.tsx +27 -8
- package/src/ContextProviders.tsx +25 -2
- package/src/components/CircuitJsonImportDialog.tsx +1 -1
- package/src/components/CmdKMenu.tsx +281 -247
- package/src/components/DownloadButtonAndMenu.tsx +17 -5
- package/src/components/FileSidebar.tsx +11 -17
- package/src/components/Footer.tsx +8 -9
- package/src/components/Header.tsx +19 -32
- package/src/components/Header2.tsx +16 -32
- package/src/components/HeaderDropdown.tsx +13 -8
- package/src/components/HeaderLogin.tsx +43 -15
- package/src/components/NotFound.tsx +5 -5
- package/src/components/PackageBreadcrumb.tsx +6 -12
- package/src/components/PackageSearchResults.tsx +1 -1
- package/src/components/PrefetchPageLink.tsx +7 -1
- package/src/components/ProfileRouter.tsx +32 -0
- package/src/components/SearchComponent.tsx +12 -8
- package/src/components/SentryNotFoundReporter.tsx +44 -0
- package/src/components/UserCard.tsx +80 -0
- package/src/components/ViewPackagePage/components/build-status.tsx +1 -1
- package/src/components/ViewPackagePage/components/important-files-view.tsx +105 -34
- package/src/components/ViewPackagePage/components/main-content-header.tsx +10 -6
- package/src/components/ViewPackagePage/components/main-content-view-selector.tsx +1 -1
- package/src/components/ViewPackagePage/components/mobile-sidebar.tsx +54 -19
- package/src/components/ViewPackagePage/components/package-header.tsx +25 -33
- package/src/components/ViewPackagePage/components/preview-image-squares.tsx +11 -18
- package/src/components/ViewPackagePage/components/repo-page-content.tsx +12 -5
- package/src/components/ViewPackagePage/components/sidebar-about-section.tsx +16 -10
- package/src/components/ViewPackagePage/components/sidebar-releases-section.tsx +11 -11
- package/src/components/ViewPackagePage/components/tab-views/pcb-view.tsx +1 -2
- package/src/components/ViewPackagePage/components/tab-views/schematic-view.tsx +2 -1
- package/src/components/dialogs/GitHubRepositorySelector.tsx +56 -49
- package/src/components/dialogs/edit-package-details-dialog.tsx +5 -6
- package/src/components/dialogs/import-component-dialog.tsx +16 -9
- package/src/components/dialogs/import-package-dialog.tsx +3 -2
- package/src/components/dialogs/new-package-save-prompt-dialog.tsx +190 -0
- package/src/components/organization/OrganizationCard.tsx +206 -0
- package/src/components/organization/OrganizationCardSkeleton.tsx +55 -0
- package/src/components/organization/OrganizationHeader.tsx +154 -0
- package/src/components/organization/OrganizationMembers.tsx +146 -0
- package/src/components/package-port/CodeAndPreview.tsx +15 -12
- package/src/components/package-port/CodeEditor.tsx +4 -30
- package/src/components/package-port/CodeEditorHeader.tsx +123 -61
- package/src/components/package-port/EditorNav.tsx +32 -49
- package/src/components/preview/ConnectedPackagesList.tsx +8 -8
- package/src/components/preview/ConnectedRepoOverview.tsx +102 -2
- package/src/components/preview/PackageReleasesDashboard.tsx +23 -11
- package/src/components/ui/tree-view.tsx +6 -3
- package/src/hooks/use-add-org-member-mutation.ts +51 -0
- package/src/hooks/use-create-org-mutation.ts +38 -0
- package/src/hooks/use-create-package-mutation.ts +3 -0
- package/src/hooks/use-current-package-release.ts +4 -3
- package/src/hooks/use-download-zip.ts +2 -2
- package/src/hooks/use-global-store.ts +6 -4
- package/src/hooks/use-hydration.ts +30 -0
- package/src/hooks/use-jlcpcb-component-import.tsx +164 -0
- package/src/hooks/use-list-org-members.ts +27 -0
- package/src/hooks/use-list-user-orgs.ts +25 -0
- package/src/hooks/use-org-by-github-handle.ts +26 -0
- package/src/hooks/use-org.ts +24 -0
- package/src/hooks/use-organization.ts +42 -0
- package/src/hooks/use-package-as-snippet.ts +4 -2
- package/src/hooks/use-package-builds.ts +6 -2
- package/src/hooks/use-package-files.ts +5 -3
- package/src/hooks/use-package-release-by-id-or-version.ts +29 -20
- package/src/hooks/use-package-release-images.ts +105 -0
- package/src/hooks/use-package-release.ts +2 -2
- package/src/hooks/use-package-stars.ts +80 -4
- package/src/hooks/use-preview-images.ts +6 -3
- package/src/hooks/use-remove-org-member-mutation.ts +32 -0
- package/src/hooks/use-update-ai-description-mutation.ts +42 -0
- package/src/hooks/use-update-org-mutation.ts +41 -0
- package/src/hooks/use-warn-user-on-page-change.ts +71 -4
- package/src/hooks/useFileManagement.ts +51 -22
- package/src/hooks/useOptimizedPackageFilesLoader.ts +11 -24
- package/src/hooks/usePackageFilesLoader.ts +2 -2
- package/src/hooks/useUpdatePackageFilesMutation.ts +13 -1
- package/src/lib/download-fns/download-gltf-from-circuit-json.ts +1 -1
- package/src/lib/download-fns/download-kicad-files.ts +22 -11
- package/src/lib/download-fns/download-step.ts +12 -0
- package/src/lib/normalize-svg-for-tile.ts +50 -0
- package/src/lib/posthog.ts +11 -9
- package/src/lib/react-query-api-failure-tracking.ts +148 -0
- package/src/lib/sentry.ts +14 -0
- package/src/lib/templates/blank-circuit-board-template.ts +0 -4
- package/src/lib/ts-lib-cache.ts +122 -7
- package/src/lib/utils/checkIfManualEditsImported.ts +4 -4
- package/src/lib/utils/findTargetFile.ts +45 -10
- package/src/lib/utils/isComponentExported.ts +2 -1
- package/src/main.tsx +2 -1
- package/src/pages/create-organization.tsx +169 -0
- package/src/pages/dashboard.tsx +38 -6
- package/src/pages/datasheet.tsx +1 -1
- package/src/pages/datasheets.tsx +3 -3
- package/src/pages/editor.tsx +4 -6
- package/src/pages/landing.tsx +6 -6
- package/src/pages/latest.tsx +3 -0
- package/src/pages/organization-profile.tsx +199 -0
- package/src/pages/organization-settings.tsx +569 -0
- package/src/pages/package-editor.tsx +21 -21
- package/src/pages/preview-release.tsx +75 -145
- package/src/pages/quickstart.tsx +159 -123
- package/src/pages/release-detail.tsx +119 -31
- package/src/pages/search.tsx +197 -57
- package/src/pages/settings-redirect.tsx +44 -0
- package/src/pages/trending.tsx +29 -20
- package/src/pages/user-profile.tsx +58 -7
- package/src/pages/user-settings.tsx +161 -0
- package/src/pages/view-package.tsx +30 -16
- package/vite.config.ts +9 -0
- package/fake-snippets-api/routes/api/autocomplete/create_autocomplete.ts +0 -133
- package/src/components/JLCPCBImportDialog.tsx +0 -280
- package/src/components/PackageBuildsPage/LogContent.tsx +0 -72
- package/src/components/PackageBuildsPage/PackageBuildDetailsPage.tsx +0 -113
- package/src/components/PackageBuildsPage/build-preview-content.tsx +0 -56
- package/src/components/PackageBuildsPage/collapsible-section.tsx +0 -63
- package/src/components/PackageBuildsPage/package-build-details-panel.tsx +0 -166
- package/src/components/PackageBuildsPage/package-build-header.tsx +0 -79
- package/src/components/PageSearchComponent.tsx +0 -148
- package/src/pages/package-builds.tsx +0 -33
package/dist/index.js
CHANGED
|
@@ -65,7 +65,9 @@ var shippingInfoSchema = z.object({
|
|
|
65
65
|
var accountSchema = z.object({
|
|
66
66
|
account_id: z.string(),
|
|
67
67
|
github_username: z.string(),
|
|
68
|
-
shippingInfo: shippingInfoSchema.optional()
|
|
68
|
+
shippingInfo: shippingInfoSchema.optional(),
|
|
69
|
+
personal_org_id: z.string().optional(),
|
|
70
|
+
is_tscircuit_staff: z.boolean().default(false)
|
|
69
71
|
});
|
|
70
72
|
var orderSchema = z.object({
|
|
71
73
|
order_id: z.string(),
|
|
@@ -203,6 +205,15 @@ var packageReleaseSchema = z.object({
|
|
|
203
205
|
circuit_json_build_completed_at: z.string().datetime().nullable().optional(),
|
|
204
206
|
circuit_json_build_logs: z.array(z.any()).default([]),
|
|
205
207
|
circuit_json_build_is_stale: z.boolean().default(false),
|
|
208
|
+
// Image Generation Process
|
|
209
|
+
image_generation_display_status: z.enum(["pending", "building", "complete", "error"]).default("pending"),
|
|
210
|
+
image_generation_in_progress: z.boolean().default(false),
|
|
211
|
+
image_generation_started_at: z.string().datetime().nullable().optional(),
|
|
212
|
+
image_generation_completed_at: z.string().datetime().nullable().optional(),
|
|
213
|
+
image_generation_logs: z.array(z.any()).nullable().default(null),
|
|
214
|
+
image_generation_is_stale: z.boolean().default(false),
|
|
215
|
+
image_generation_error: z.string().nullable().optional(),
|
|
216
|
+
image_generation_error_last_updated_at: z.string().datetime().nullable().optional(),
|
|
206
217
|
// AI Review
|
|
207
218
|
ai_review_text: z.string().nullable().default(null).optional(),
|
|
208
219
|
ai_review_started_at: z.string().datetime().nullable().optional(),
|
|
@@ -311,6 +322,11 @@ var packageBuildSchema = z.object({
|
|
|
311
322
|
circuit_json_build_completed_at: z.string().datetime().nullable().optional(),
|
|
312
323
|
circuit_json_build_logs: z.array(z.any()).default([]),
|
|
313
324
|
circuit_json_build_error: z.string().nullable().optional(),
|
|
325
|
+
image_generation_in_progress: z.boolean().default(false),
|
|
326
|
+
image_generation_started_at: z.string().datetime().nullable().optional(),
|
|
327
|
+
image_generation_completed_at: z.string().datetime().nullable().optional(),
|
|
328
|
+
image_generation_logs: z.array(z.any()).default([]),
|
|
329
|
+
image_generation_error: z.string().nullable().optional(),
|
|
314
330
|
build_in_progress: z.boolean().default(false),
|
|
315
331
|
build_started_at: z.string().datetime().nullable().optional(),
|
|
316
332
|
build_completed_at: z.string().datetime().nullable().optional(),
|
|
@@ -319,6 +335,38 @@ var packageBuildSchema = z.object({
|
|
|
319
335
|
preview_url: z.string().nullable().optional(),
|
|
320
336
|
build_logs: z.string().nullable().optional()
|
|
321
337
|
});
|
|
338
|
+
var orgSchema = z.object({
|
|
339
|
+
org_id: z.string(),
|
|
340
|
+
github_handle: z.string().optional(),
|
|
341
|
+
owner_account_id: z.string(),
|
|
342
|
+
is_personal_org: z.boolean().default(false),
|
|
343
|
+
created_at: z.string().datetime(),
|
|
344
|
+
org_display_name: z.string().optional(),
|
|
345
|
+
org_name: z.string()
|
|
346
|
+
});
|
|
347
|
+
var orgAccountSchema = z.object({
|
|
348
|
+
org_account_id: z.string(),
|
|
349
|
+
org_id: z.string(),
|
|
350
|
+
account_id: z.string(),
|
|
351
|
+
is_owner: z.boolean().default(false),
|
|
352
|
+
created_at: z.string().datetime()
|
|
353
|
+
});
|
|
354
|
+
var publicOrgSchema = z.object({
|
|
355
|
+
org_id: z.string(),
|
|
356
|
+
//.uuid(),
|
|
357
|
+
owner_account_id: z.string(),
|
|
358
|
+
//.uuid(),
|
|
359
|
+
name: z.string().nullable(),
|
|
360
|
+
member_count: z.number(),
|
|
361
|
+
is_personal_org: z.boolean(),
|
|
362
|
+
display_name: z.string().optional(),
|
|
363
|
+
package_count: z.number(),
|
|
364
|
+
created_at: z.string(),
|
|
365
|
+
user_permissions: z.object({
|
|
366
|
+
can_manage_org: z.boolean().optional(),
|
|
367
|
+
can_manage_package: z.boolean().optional()
|
|
368
|
+
}).optional()
|
|
369
|
+
});
|
|
322
370
|
var databaseSchema = z.object({
|
|
323
371
|
idCounter: z.number().default(0),
|
|
324
372
|
snippets: z.array(snippetSchema).default([]),
|
|
@@ -329,6 +377,8 @@ var databaseSchema = z.object({
|
|
|
329
377
|
accounts: z.array(accountSchema).default([]),
|
|
330
378
|
packages: z.array(packageSchema).default([]),
|
|
331
379
|
orders: z.array(orderSchema).default([]),
|
|
380
|
+
organizations: z.array(orgSchema).default([]),
|
|
381
|
+
orgAccounts: z.array(orgAccountSchema).default([]),
|
|
332
382
|
orderFiles: z.array(orderFileSchema).default([]),
|
|
333
383
|
accountSnippets: z.array(accountSnippetSchema).default([]),
|
|
334
384
|
accountPackages: z.array(accountPackageSchema).default([]),
|
|
@@ -354,7 +404,7 @@ var extractTsciDependencies = (code) => {
|
|
|
354
404
|
}));
|
|
355
405
|
};
|
|
356
406
|
var registryApi = axios.create({
|
|
357
|
-
baseURL: "https://
|
|
407
|
+
baseURL: "https://api.tscircuit.com",
|
|
358
408
|
headers: {
|
|
359
409
|
Accept: "application/json",
|
|
360
410
|
"Content-Type": "application/json"
|
|
@@ -362,7 +412,7 @@ var registryApi = axios.create({
|
|
|
362
412
|
});
|
|
363
413
|
var fetchPackageFromRegistry = async (owner, name) => {
|
|
364
414
|
const fullName = `${owner}/${name}`;
|
|
365
|
-
console.log(`Fetching package ${fullName}...`);
|
|
415
|
+
console.log(`[autoload-dev-pkgs] \u{1F4E6} Fetching package ${fullName}...`);
|
|
366
416
|
let packageData;
|
|
367
417
|
try {
|
|
368
418
|
const response = await registryApi.post("/packages/get", {
|
|
@@ -381,32 +431,39 @@ var fetchPackageFromRegistry = async (owner, name) => {
|
|
|
381
431
|
});
|
|
382
432
|
releaseData = response.data;
|
|
383
433
|
} catch (e) {
|
|
384
|
-
console.error(
|
|
434
|
+
console.error(
|
|
435
|
+
`[autoload-dev-pkgs] \u274C Failed to fetch release data for ${fullName}:`,
|
|
436
|
+
e
|
|
437
|
+
);
|
|
385
438
|
throw e;
|
|
386
439
|
}
|
|
387
440
|
let filesData;
|
|
388
441
|
try {
|
|
389
|
-
const response = await registryApi.post(
|
|
390
|
-
package_release_id
|
|
391
|
-
|
|
442
|
+
const response = await registryApi.post(
|
|
443
|
+
`package_files/list?package_release_id=${releaseData.package_release.package_release_id}`,
|
|
444
|
+
{}
|
|
445
|
+
);
|
|
392
446
|
filesData = response.data;
|
|
393
447
|
for (const file of filesData.package_files) {
|
|
394
448
|
try {
|
|
395
|
-
const fileResponse = await registryApi.post(
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
449
|
+
const fileResponse = await registryApi.post(
|
|
450
|
+
`/package_files/get?package_file_id=${file.package_file_id}`,
|
|
451
|
+
{}
|
|
452
|
+
);
|
|
399
453
|
file.content_text = fileResponse.data.package_file.content_text;
|
|
400
454
|
} catch (e) {
|
|
401
455
|
console.error(
|
|
402
|
-
`Failed to fetch content for file ${file.file_path} in package ${fullName}:`,
|
|
456
|
+
`[autoload-dev-pkgs] \u274C Failed to fetch content for file ${file.file_path} in package ${fullName}:`,
|
|
403
457
|
e
|
|
404
458
|
);
|
|
405
459
|
throw e;
|
|
406
460
|
}
|
|
407
461
|
}
|
|
408
462
|
} catch (e) {
|
|
409
|
-
console.error(
|
|
463
|
+
console.error(
|
|
464
|
+
`[autoload-dev-pkgs] \u274C Failed to fetch files data for ${fullName}:`,
|
|
465
|
+
e
|
|
466
|
+
);
|
|
410
467
|
throw e;
|
|
411
468
|
}
|
|
412
469
|
return {
|
|
@@ -424,12 +481,12 @@ var loadPackageWithDependencies = async (db, owner, name, loadedPackages = /* @_
|
|
|
424
481
|
try {
|
|
425
482
|
result = await fetchPackageFromRegistry(owner, name);
|
|
426
483
|
} catch (e) {
|
|
427
|
-
console.error(
|
|
484
|
+
console.error(`[autoload-dev-pkgs] \u274C Failed to load ${packageKey}`);
|
|
428
485
|
return false;
|
|
429
486
|
}
|
|
430
487
|
const { package: pkg, release, files } = result;
|
|
431
488
|
if (db.getPackageById(pkg.package_id)) {
|
|
432
|
-
console.log(
|
|
489
|
+
console.log(`[autoload-dev-pkgs] \u26A1 Package ${packageKey} already exists`);
|
|
433
490
|
return true;
|
|
434
491
|
}
|
|
435
492
|
db.addPackage({
|
|
@@ -453,7 +510,7 @@ var loadPackageWithDependencies = async (db, owner, name, loadedPackages = /* @_
|
|
|
453
510
|
});
|
|
454
511
|
}
|
|
455
512
|
loadedPackages.add(packageKey);
|
|
456
|
-
console.log(
|
|
513
|
+
console.log(`[autoload-dev-pkgs] \u{1F4E6} Loaded ${packageKey}`);
|
|
457
514
|
const mainFile = files.find(
|
|
458
515
|
(f) => f.file_path === "index.tsx" || f.file_path === "index.ts"
|
|
459
516
|
);
|
|
@@ -472,7 +529,7 @@ var loadPackageWithDependencies = async (db, owner, name, loadedPackages = /* @_
|
|
|
472
529
|
if (!depLoaded) {
|
|
473
530
|
allDepsLoaded = false;
|
|
474
531
|
console.warn(
|
|
475
|
-
|
|
532
|
+
`[autoload-dev-pkgs] \u26A0\uFE0F Failed to load dependency ${dep.owner}/${dep.name} for ${packageKey}`
|
|
476
533
|
);
|
|
477
534
|
}
|
|
478
535
|
}
|
|
@@ -485,7 +542,7 @@ var loadAutoloadPackages = async (db) => {
|
|
|
485
542
|
"autoload-packages.json"
|
|
486
543
|
);
|
|
487
544
|
if (!fs.existsSync(autoloadPath)) {
|
|
488
|
-
console.error("No autoload-packages.json found");
|
|
545
|
+
console.error("[autoload-dev-pkgs] \u274C No autoload-packages.json found");
|
|
489
546
|
return;
|
|
490
547
|
}
|
|
491
548
|
const autoloadContent = JSON.parse(fs.readFileSync(autoloadPath, "utf8"));
|
|
@@ -506,10 +563,14 @@ var loadAutoloadPackages = async (db) => {
|
|
|
506
563
|
}
|
|
507
564
|
}
|
|
508
565
|
console.log(`
|
|
509
|
-
Package loading complete:`);
|
|
510
|
-
console.log(
|
|
566
|
+
[autoload-dev-pkgs] \u{1F4CB} Package loading complete:`);
|
|
567
|
+
console.log(
|
|
568
|
+
`[autoload-dev-pkgs] \u2705 Successfully loaded: ${successCount} packages`
|
|
569
|
+
);
|
|
511
570
|
if (failureCount > 0) {
|
|
512
|
-
console.log(
|
|
571
|
+
console.log(
|
|
572
|
+
`[autoload-dev-pkgs] \u274C Failed to load: ${failureCount} packages`
|
|
573
|
+
);
|
|
513
574
|
}
|
|
514
575
|
};
|
|
515
576
|
|
|
@@ -2215,6 +2276,97 @@ export const SquareWaveModule = () => (
|
|
|
2215
2276
|
started_at: null,
|
|
2216
2277
|
completed_at: null
|
|
2217
2278
|
});
|
|
2279
|
+
const testOrg = db.addOrganization({
|
|
2280
|
+
name: "test-organization",
|
|
2281
|
+
owner_account_id: account_id
|
|
2282
|
+
});
|
|
2283
|
+
db.addOrganizationAccount({
|
|
2284
|
+
org_id: testOrg.org_id,
|
|
2285
|
+
account_id,
|
|
2286
|
+
is_owner: true
|
|
2287
|
+
});
|
|
2288
|
+
const { package_release_id: orgPackageReleaseId } = db.addSnippet({
|
|
2289
|
+
name: "test-organization/test-package",
|
|
2290
|
+
unscoped_name: "test-package",
|
|
2291
|
+
owner_name: "test-organization",
|
|
2292
|
+
code: `
|
|
2293
|
+
export const TestComponent = ({ name }: { name: string }) => (
|
|
2294
|
+
<resistor name={name} resistance="10k" />
|
|
2295
|
+
)
|
|
2296
|
+
`.trim(),
|
|
2297
|
+
dts: `
|
|
2298
|
+
declare module "@tsci/test-organization.test-package" {
|
|
2299
|
+
export const TestComponent: ({ name }: {
|
|
2300
|
+
name: string;
|
|
2301
|
+
}) => any;
|
|
2302
|
+
}
|
|
2303
|
+
`.trim(),
|
|
2304
|
+
compiled_js: `
|
|
2305
|
+
"use strict";
|
|
2306
|
+
|
|
2307
|
+
Object.defineProperty(exports, "__esModule", {
|
|
2308
|
+
value: true
|
|
2309
|
+
});
|
|
2310
|
+
exports.TestComponent = void 0;
|
|
2311
|
+
const TestComponent = ({
|
|
2312
|
+
name
|
|
2313
|
+
}) => /*#__PURE__*/React.createElement("resistor", {
|
|
2314
|
+
name: name,
|
|
2315
|
+
resistance: "10k"
|
|
2316
|
+
});
|
|
2317
|
+
exports.TestComponent = TestComponent;
|
|
2318
|
+
`.trim(),
|
|
2319
|
+
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2320
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2321
|
+
snippet_type: "package",
|
|
2322
|
+
description: "Test package for organization",
|
|
2323
|
+
circuit_json: [
|
|
2324
|
+
{
|
|
2325
|
+
type: "source_component",
|
|
2326
|
+
source_component_id: "source_component_0",
|
|
2327
|
+
ftype: "simple_resistor",
|
|
2328
|
+
name: "R1",
|
|
2329
|
+
resistance: "10k"
|
|
2330
|
+
}
|
|
2331
|
+
]
|
|
2332
|
+
});
|
|
2333
|
+
const orgPackageBuild = db.addPackageBuild({
|
|
2334
|
+
package_release_id: orgPackageReleaseId,
|
|
2335
|
+
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2336
|
+
transpilation_in_progress: false,
|
|
2337
|
+
transpilation_started_at: new Date(Date.now() - 5e3).toISOString(),
|
|
2338
|
+
transpilation_completed_at: new Date(Date.now() - 3e3).toISOString(),
|
|
2339
|
+
transpilation_logs: [
|
|
2340
|
+
"[INFO] Starting transpilation...",
|
|
2341
|
+
"[SUCCESS] Transpilation completed successfully"
|
|
2342
|
+
],
|
|
2343
|
+
transpilation_error: null,
|
|
2344
|
+
circuit_json_build_in_progress: false,
|
|
2345
|
+
circuit_json_build_started_at: new Date(Date.now() - 3e3).toISOString(),
|
|
2346
|
+
circuit_json_build_completed_at: new Date(Date.now() - 1e3).toISOString(),
|
|
2347
|
+
circuit_json_build_logs: [
|
|
2348
|
+
"[INFO] Starting circuit JSON build...",
|
|
2349
|
+
"[SUCCESS] Circuit JSON build completed"
|
|
2350
|
+
],
|
|
2351
|
+
circuit_json_build_error: null,
|
|
2352
|
+
build_in_progress: false,
|
|
2353
|
+
build_started_at: new Date(Date.now() - 1e4).toISOString(),
|
|
2354
|
+
build_completed_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2355
|
+
build_error: null,
|
|
2356
|
+
build_error_last_updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2357
|
+
preview_url: "http://localhost:3000/preview/org_package_build",
|
|
2358
|
+
build_logs: "Build completed successfully"
|
|
2359
|
+
});
|
|
2360
|
+
const orgRelease = db.getPackageReleaseById(orgPackageReleaseId);
|
|
2361
|
+
db.updatePackageRelease({
|
|
2362
|
+
...orgRelease,
|
|
2363
|
+
latest_package_build_id: orgPackageBuild.package_build_id
|
|
2364
|
+
});
|
|
2365
|
+
db.addOrganization({
|
|
2366
|
+
name: "testuser",
|
|
2367
|
+
owner_account_id: account_id,
|
|
2368
|
+
is_personal_org: true
|
|
2369
|
+
});
|
|
2218
2370
|
};
|
|
2219
2371
|
|
|
2220
2372
|
// fake-snippets-api/lib/package_file/generate-fs-sha.ts
|
|
@@ -2353,7 +2505,8 @@ var initializer = combine(databaseSchema.parse({}), (set, get) => ({
|
|
|
2353
2505
|
addAccount: (account) => {
|
|
2354
2506
|
const newAccount = {
|
|
2355
2507
|
account_id: account.account_id || `account_${get().idCounter + 1}`,
|
|
2356
|
-
...account
|
|
2508
|
+
...account,
|
|
2509
|
+
is_tscircuit_staff: Boolean(account.is_tscircuit_staff)
|
|
2357
2510
|
};
|
|
2358
2511
|
set((state) => {
|
|
2359
2512
|
return {
|
|
@@ -3357,10 +3510,10 @@ var initializer = combine(databaseSchema.parse({}), (set, get) => ({
|
|
|
3357
3510
|
return updated;
|
|
3358
3511
|
},
|
|
3359
3512
|
addPackageBuild: (packageBuild) => {
|
|
3360
|
-
const newPackageBuild = {
|
|
3513
|
+
const newPackageBuild = packageBuildSchema.parse({
|
|
3361
3514
|
package_build_id: crypto.randomUUID(),
|
|
3362
3515
|
...packageBuild
|
|
3363
|
-
};
|
|
3516
|
+
});
|
|
3364
3517
|
set((state) => ({
|
|
3365
3518
|
packageBuilds: [...state.packageBuilds, newPackageBuild],
|
|
3366
3519
|
// Automatically update the package release to reference this as the latest build
|
|
@@ -3398,6 +3551,157 @@ var initializer = combine(databaseSchema.parse({}), (set, get) => ({
|
|
|
3398
3551
|
return { ...state, packageBuilds };
|
|
3399
3552
|
});
|
|
3400
3553
|
return updated;
|
|
3554
|
+
},
|
|
3555
|
+
addOrganization: (organization) => {
|
|
3556
|
+
const newOrganization = {
|
|
3557
|
+
org_name: organization.name,
|
|
3558
|
+
org_id: organization.org_id || `org_${get().idCounter + 1}`,
|
|
3559
|
+
github_handle: organization.github_handle,
|
|
3560
|
+
is_personal_org: organization.is_personal_org || false,
|
|
3561
|
+
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3562
|
+
...organization
|
|
3563
|
+
};
|
|
3564
|
+
set((state) => ({
|
|
3565
|
+
idCounter: state.idCounter + 1,
|
|
3566
|
+
organizations: [...state.organizations, newOrganization],
|
|
3567
|
+
// Add the creator as a member of the new org by setting their personal_org_id
|
|
3568
|
+
accounts: state.accounts.map(
|
|
3569
|
+
(account) => account.account_id === organization.owner_account_id ? { ...account, personal_org_id: newOrganization.org_id } : account
|
|
3570
|
+
)
|
|
3571
|
+
}));
|
|
3572
|
+
return newOrganization;
|
|
3573
|
+
},
|
|
3574
|
+
getOrgs: (filters, auth) => {
|
|
3575
|
+
let orgs = get().organizations;
|
|
3576
|
+
if (filters?.owner_account_id) {
|
|
3577
|
+
orgs = orgs.filter(
|
|
3578
|
+
(org) => org.owner_account_id === filters.owner_account_id
|
|
3579
|
+
);
|
|
3580
|
+
}
|
|
3581
|
+
if (filters?.github_handle) {
|
|
3582
|
+
orgs = orgs.filter((org) => {
|
|
3583
|
+
const account = get().accounts.find(
|
|
3584
|
+
(account2) => account2.account_id === org.owner_account_id
|
|
3585
|
+
);
|
|
3586
|
+
return account?.github_username === filters.github_handle;
|
|
3587
|
+
});
|
|
3588
|
+
}
|
|
3589
|
+
if (filters?.name) {
|
|
3590
|
+
orgs = orgs.filter((org) => org.github_handle === filters.name);
|
|
3591
|
+
}
|
|
3592
|
+
return orgs.map((org) => {
|
|
3593
|
+
const member_count = get().accounts.filter(
|
|
3594
|
+
(account) => account.personal_org_id === org.org_id
|
|
3595
|
+
).length;
|
|
3596
|
+
const package_count = get().packages.filter(
|
|
3597
|
+
(pkg) => pkg.owner_org_id === org.org_id
|
|
3598
|
+
).length;
|
|
3599
|
+
const can_manage_org = auth ? org.owner_account_id === auth.account_id : false;
|
|
3600
|
+
return {
|
|
3601
|
+
...org,
|
|
3602
|
+
member_count,
|
|
3603
|
+
package_count,
|
|
3604
|
+
can_manage_org
|
|
3605
|
+
};
|
|
3606
|
+
});
|
|
3607
|
+
},
|
|
3608
|
+
getOrg: (filters, auth) => {
|
|
3609
|
+
let orgs = get().organizations;
|
|
3610
|
+
if (filters?.org_id) {
|
|
3611
|
+
orgs = orgs.filter((org2) => org2.org_id === filters.org_id);
|
|
3612
|
+
}
|
|
3613
|
+
if (filters?.org_name) {
|
|
3614
|
+
orgs = orgs.filter((org2) => org2.org_name === filters.org_name);
|
|
3615
|
+
}
|
|
3616
|
+
if (filters?.github_handle) {
|
|
3617
|
+
orgs = orgs.filter((org2) => org2.github_handle === filters.github_handle);
|
|
3618
|
+
}
|
|
3619
|
+
if (orgs.length === 0) {
|
|
3620
|
+
return null;
|
|
3621
|
+
}
|
|
3622
|
+
const org = orgs[0];
|
|
3623
|
+
const member_count = get().accounts.filter(
|
|
3624
|
+
(account) => account.personal_org_id === org.org_id
|
|
3625
|
+
).length;
|
|
3626
|
+
const package_count = get().packages.filter(
|
|
3627
|
+
(pkg) => pkg.owner_org_id === org.org_id
|
|
3628
|
+
).length;
|
|
3629
|
+
const can_manage_org = auth ? org.owner_account_id === auth.account_id : false;
|
|
3630
|
+
return {
|
|
3631
|
+
...org,
|
|
3632
|
+
member_count,
|
|
3633
|
+
package_count,
|
|
3634
|
+
can_manage_org
|
|
3635
|
+
};
|
|
3636
|
+
},
|
|
3637
|
+
addOrganizationAccount: (organizationAccount) => {
|
|
3638
|
+
const newOrgAccount = {
|
|
3639
|
+
org_account_id: `org_account_${get().idCounter + 1}`,
|
|
3640
|
+
org_id: organizationAccount.org_id,
|
|
3641
|
+
account_id: organizationAccount.account_id,
|
|
3642
|
+
is_owner: organizationAccount.is_owner || false,
|
|
3643
|
+
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
3644
|
+
};
|
|
3645
|
+
set((state) => ({
|
|
3646
|
+
orgAccounts: [...state.orgAccounts, newOrgAccount],
|
|
3647
|
+
idCounter: state.idCounter + 1
|
|
3648
|
+
}));
|
|
3649
|
+
return newOrgAccount;
|
|
3650
|
+
},
|
|
3651
|
+
getOrganizationAccount: (filters) => {
|
|
3652
|
+
const state = get();
|
|
3653
|
+
return state.orgAccounts.find((orgAccount) => {
|
|
3654
|
+
if (filters.org_id && orgAccount.org_id !== filters.org_id) {
|
|
3655
|
+
return false;
|
|
3656
|
+
}
|
|
3657
|
+
if (filters.account_id && orgAccount.account_id !== filters.account_id) {
|
|
3658
|
+
return false;
|
|
3659
|
+
}
|
|
3660
|
+
return true;
|
|
3661
|
+
});
|
|
3662
|
+
},
|
|
3663
|
+
getOrganizationAccounts: (filters) => {
|
|
3664
|
+
const state = get();
|
|
3665
|
+
return state.orgAccounts.filter((orgAccount) => {
|
|
3666
|
+
if (filters?.org_id && orgAccount.org_id !== filters.org_id) {
|
|
3667
|
+
return false;
|
|
3668
|
+
}
|
|
3669
|
+
if (filters?.account_id && orgAccount.account_id !== filters.account_id) {
|
|
3670
|
+
return false;
|
|
3671
|
+
}
|
|
3672
|
+
return true;
|
|
3673
|
+
});
|
|
3674
|
+
},
|
|
3675
|
+
removeOrganizationAccount: (filters) => {
|
|
3676
|
+
let removed = false;
|
|
3677
|
+
set((state) => {
|
|
3678
|
+
const index = state.orgAccounts.findIndex(
|
|
3679
|
+
(orgAccount) => orgAccount.org_id === filters.org_id && orgAccount.account_id === filters.account_id
|
|
3680
|
+
);
|
|
3681
|
+
if (index !== -1) {
|
|
3682
|
+
state.orgAccounts.splice(index, 1);
|
|
3683
|
+
removed = true;
|
|
3684
|
+
}
|
|
3685
|
+
return state;
|
|
3686
|
+
});
|
|
3687
|
+
return removed;
|
|
3688
|
+
},
|
|
3689
|
+
updateOrganization: (orgId, updates) => {
|
|
3690
|
+
let updatedOrg;
|
|
3691
|
+
set((state) => {
|
|
3692
|
+
const orgIndex = state.organizations.findIndex(
|
|
3693
|
+
(org) => org.org_id === orgId
|
|
3694
|
+
);
|
|
3695
|
+
if (orgIndex === -1) return state;
|
|
3696
|
+
const updatedOrganizations = [...state.organizations];
|
|
3697
|
+
updatedOrganizations[orgIndex] = {
|
|
3698
|
+
...updatedOrganizations[orgIndex],
|
|
3699
|
+
...updates
|
|
3700
|
+
};
|
|
3701
|
+
updatedOrg = updatedOrganizations[orgIndex];
|
|
3702
|
+
return { ...state, organizations: updatedOrganizations };
|
|
3703
|
+
});
|
|
3704
|
+
return updatedOrg;
|
|
3401
3705
|
}
|
|
3402
3706
|
}));
|
|
3403
3707
|
|