nextworks 0.0.1 → 0.1.0-alpha.1
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/README.md +209 -30
- package/dist/.gitkeep +0 -0
- package/dist/cli_manifests/auth_manifest.json +86 -0
- package/dist/cli_manifests/blocks_manifest.json +185 -0
- package/dist/cli_manifests/data_manifest.json +51 -0
- package/dist/cli_manifests/forms_manifest.json +61 -0
- package/dist/commands/admin-posts.d.ts +2 -0
- package/dist/commands/admin-posts.d.ts.map +1 -0
- package/dist/commands/admin-posts.js +15 -0
- package/dist/commands/admin-posts.js.map +1 -0
- package/dist/commands/admin-users.d.ts +2 -0
- package/dist/commands/admin-users.d.ts.map +1 -0
- package/dist/commands/admin-users.js +15 -0
- package/dist/commands/admin-users.js.map +1 -0
- package/dist/commands/auth-core.d.ts +2 -0
- package/dist/commands/auth-core.d.ts.map +1 -0
- package/dist/commands/auth-core.js +83 -0
- package/dist/commands/auth-core.js.map +1 -0
- package/dist/commands/auth-forms.d.ts +2 -0
- package/dist/commands/auth-forms.d.ts.map +1 -0
- package/dist/commands/auth-forms.js +15 -0
- package/dist/commands/auth-forms.js.map +1 -0
- package/dist/commands/blocks-options.d.ts +7 -0
- package/dist/commands/blocks-options.d.ts.map +1 -0
- package/dist/commands/blocks-options.js +19 -0
- package/dist/commands/blocks-options.js.map +1 -0
- package/dist/commands/blocks.d.ts +7 -0
- package/dist/commands/blocks.d.ts.map +1 -0
- package/dist/commands/blocks.js +145 -0
- package/dist/commands/blocks.js.map +1 -0
- package/dist/commands/data.d.ts +3 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +88 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/forms.d.ts +6 -0
- package/dist/commands/forms.d.ts.map +1 -0
- package/dist/commands/forms.js +107 -0
- package/dist/commands/forms.js.map +1 -0
- package/dist/commands/remove-auth-core.d.ts +2 -0
- package/dist/commands/remove-auth-core.d.ts.map +1 -0
- package/dist/commands/remove-auth-core.js +69 -0
- package/dist/commands/remove-auth-core.js.map +1 -0
- package/dist/commands/remove-blocks.d.ts +2 -0
- package/dist/commands/remove-blocks.d.ts.map +1 -0
- package/dist/commands/remove-blocks.js +36 -0
- package/dist/commands/remove-blocks.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/kits/auth-core/README.md +106 -0
- package/dist/kits/auth-core/app/(protected)/dashboard/page.tsx +8 -0
- package/dist/kits/auth-core/app/(protected)/layout.tsx +18 -0
- package/dist/kits/auth-core/app/(protected)/settings/profile/page.tsx +15 -0
- package/dist/kits/auth-core/app/(protected)/settings/profile/profile-form.tsx +114 -0
- package/dist/kits/auth-core/app/api/auth/[...nextauth]/route.ts +1 -0
- package/dist/kits/auth-core/app/api/auth/forgot-password/route.ts +114 -0
- package/dist/kits/auth-core/app/api/auth/providers/route.ts +6 -0
- package/dist/kits/auth-core/app/api/auth/reset-password/route.ts +63 -0
- package/dist/kits/auth-core/app/api/auth/send-verify-email/route.ts +6 -0
- package/dist/kits/auth-core/app/api/signup/route.ts +41 -0
- package/dist/kits/auth-core/app/auth/forgot-password/page.tsx +21 -0
- package/dist/kits/auth-core/app/auth/login/page.tsx +5 -0
- package/dist/kits/auth-core/app/auth/reset-password/page.tsx +187 -0
- package/dist/kits/auth-core/app/auth/signup/page.tsx +5 -0
- package/dist/kits/auth-core/app/auth/verify-email/page.tsx +11 -0
- package/dist/kits/auth-core/components/admin/admin-header.tsx +57 -0
- package/dist/kits/auth-core/components/auth/dashboard.tsx +237 -0
- package/dist/kits/auth-core/components/auth/forgot-password-form.tsx +90 -0
- package/dist/kits/auth-core/components/auth/login-form.tsx +467 -0
- package/dist/kits/auth-core/components/auth/logout-button.tsx +50 -0
- package/dist/kits/auth-core/components/auth/minimal-logout-button.tsx +40 -0
- package/dist/kits/auth-core/components/auth/signup-form.tsx +468 -0
- package/dist/kits/auth-core/components/require-auth.tsx +59 -0
- package/dist/kits/auth-core/components/session-provider.tsx +11 -0
- package/dist/kits/auth-core/components/ui/README.txt +1 -0
- package/dist/kits/auth-core/components/ui/button.tsx +55 -0
- package/dist/kits/auth-core/components/ui/input.tsx +25 -0
- package/dist/kits/auth-core/components/ui/label.tsx +23 -0
- package/dist/kits/auth-core/lib/api/errors.ts +14 -0
- package/dist/kits/auth-core/lib/auth-helpers.ts +29 -0
- package/dist/kits/auth-core/lib/auth.ts +142 -0
- package/dist/kits/auth-core/lib/email/dev-transport.ts +42 -0
- package/dist/kits/auth-core/lib/email/index.ts +28 -0
- package/dist/kits/auth-core/lib/email/provider-smtp.ts +36 -0
- package/dist/kits/auth-core/lib/forms/map-errors.ts +11 -0
- package/dist/kits/auth-core/lib/hash.ts +6 -0
- package/dist/kits/auth-core/lib/prisma.ts +15 -0
- package/dist/kits/auth-core/lib/server/result.ts +45 -0
- package/dist/kits/auth-core/lib/utils.ts +6 -0
- package/dist/kits/auth-core/lib/validation/forms.ts +88 -0
- package/dist/kits/auth-core/package-deps.json +19 -0
- package/dist/kits/auth-core/prisma/auth-models.prisma +81 -0
- package/dist/kits/auth-core/prisma/schema.prisma +81 -0
- package/dist/kits/auth-core/scripts/populate-tokenhash.mjs +26 -0
- package/dist/kits/auth-core/scripts/promote-admin.mjs +33 -0
- package/dist/kits/auth-core/scripts/seed-demo.mjs +40 -0
- package/dist/kits/auth-core/types/next-auth.d.ts +25 -0
- package/dist/kits/blocks/README.md +53 -0
- package/dist/kits/blocks/app/globals.css +175 -0
- package/dist/kits/blocks/app/templates/digitalagency/PresetThemeVars.tsx +80 -0
- package/dist/kits/blocks/app/templates/digitalagency/README.md +36 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/About.tsx +99 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/CTA.tsx +74 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Contact.tsx +227 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Footer.tsx +89 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Hero.tsx +90 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Navbar.tsx +168 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/NetworkPattern.tsx +297 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Portfolio.tsx +157 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Pricing.tsx +114 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Process.tsx +59 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Services.tsx +55 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Team.tsx +28 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Testimonials.tsx +65 -0
- package/dist/kits/blocks/app/templates/digitalagency/page.tsx +38 -0
- package/dist/kits/blocks/app/templates/gallery/PresetThemeVars.tsx +85 -0
- package/dist/kits/blocks/app/templates/gallery/page.tsx +303 -0
- package/dist/kits/blocks/app/templates/productlaunch/PresetThemeVars.tsx +74 -0
- package/dist/kits/blocks/app/templates/productlaunch/README.md +55 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/About.tsx +178 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/CTA.tsx +93 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Contact.tsx +231 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/FAQ.tsx +93 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Features.tsx +84 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Footer.tsx +132 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Hero.tsx +89 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Navbar.tsx +162 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Pricing.tsx +106 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/ProcessTimeline.tsx +110 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/ServicesGrid.tsx +68 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Team.tsx +104 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Testimonials.tsx +89 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/TrustBadges.tsx +76 -0
- package/dist/kits/blocks/app/templates/productlaunch/page.tsx +45 -0
- package/dist/kits/blocks/app/templates/saasdashboard/PresetThemeVars.tsx +80 -0
- package/dist/kits/blocks/app/templates/saasdashboard/README.md +38 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Contact.tsx +176 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Dashboard.tsx +293 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/FAQ.tsx +55 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Features.tsx +91 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Footer.tsx +77 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Hero.tsx +105 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Hero_mask.tsx +127 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Navbar.tsx +159 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Pricing.tsx +90 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/SmoothScroll.tsx +97 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Testimonials.tsx +72 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/TrustBadges.tsx +53 -0
- package/dist/kits/blocks/app/templates/saasdashboard/page.tsx +39 -0
- package/dist/kits/blocks/components/app-providers.tsx +1 -0
- package/dist/kits/blocks/components/enhanced-theme-provider.tsx +195 -0
- package/dist/kits/blocks/components/sections/About.tsx +291 -0
- package/dist/kits/blocks/components/sections/CTA.tsx +258 -0
- package/dist/kits/blocks/components/sections/Contact.tsx +267 -0
- package/dist/kits/blocks/components/sections/FAQ.tsx +226 -0
- package/dist/kits/blocks/components/sections/Features.tsx +269 -0
- package/dist/kits/blocks/components/sections/Footer.tsx +302 -0
- package/dist/kits/blocks/components/sections/HeroMotion.tsx +307 -0
- package/dist/kits/blocks/components/sections/HeroOverlay.tsx +358 -0
- package/dist/kits/blocks/components/sections/HeroSplit.tsx +352 -0
- package/dist/kits/blocks/components/sections/Navbar.tsx +353 -0
- package/dist/kits/blocks/components/sections/Newsletter.tsx +156 -0
- package/dist/kits/blocks/components/sections/PortfolioSimple.tsx +550 -0
- package/dist/kits/blocks/components/sections/Pricing.tsx +264 -0
- package/dist/kits/blocks/components/sections/ProcessTimeline.tsx +325 -0
- package/dist/kits/blocks/components/sections/ServicesGrid.tsx +210 -0
- package/dist/kits/blocks/components/sections/Team.tsx +309 -0
- package/dist/kits/blocks/components/sections/Testimonials.tsx +158 -0
- package/dist/kits/blocks/components/sections/TrustBadges.tsx +162 -0
- package/dist/kits/blocks/components/theme-provider.tsx +34 -0
- package/dist/kits/blocks/components/ui/alert-dialog.tsx +134 -0
- package/dist/kits/blocks/components/ui/brand-node.tsx +121 -0
- package/dist/kits/blocks/components/ui/button.tsx +122 -0
- package/dist/kits/blocks/components/ui/button_bck.tsx +93 -0
- package/dist/kits/blocks/components/ui/card.tsx +95 -0
- package/dist/kits/blocks/components/ui/checkbox.tsx +30 -0
- package/dist/kits/blocks/components/ui/cta-button.tsx +125 -0
- package/dist/kits/blocks/components/ui/dropdown-menu.tsx +201 -0
- package/dist/kits/blocks/components/ui/feature-card.tsx +91 -0
- package/dist/kits/blocks/components/ui/input.tsx +27 -0
- package/dist/kits/blocks/components/ui/label.tsx +29 -0
- package/dist/kits/blocks/components/ui/pricing-card.tsx +120 -0
- package/dist/kits/blocks/components/ui/select.tsx +25 -0
- package/dist/kits/blocks/components/ui/skeleton.tsx +13 -0
- package/dist/kits/blocks/components/ui/switch.tsx +78 -0
- package/dist/kits/blocks/components/ui/table.tsx +98 -0
- package/dist/kits/blocks/components/ui/testimonial-card.tsx +108 -0
- package/dist/kits/blocks/components/ui/textarea.tsx +26 -0
- package/dist/kits/blocks/components/ui/theme-selector.tsx +247 -0
- package/dist/kits/blocks/components/ui/theme-toggle.tsx +74 -0
- package/dist/kits/blocks/components/ui/toaster.tsx +7 -0
- package/dist/kits/blocks/lib/themes.ts +399 -0
- package/dist/kits/blocks/lib/themes_old.ts +37 -0
- package/dist/kits/blocks/lib/utils.ts +9 -0
- package/dist/kits/blocks/next.config.ts +11 -0
- package/dist/kits/blocks/notes/THEME_GUIDE.md +29 -0
- package/dist/kits/blocks/notes/THEMING_CONVERSION_SUMMARY.md +14 -0
- package/dist/kits/blocks/package-deps.json +22 -0
- package/dist/kits/blocks/public/placeholders/gallery/hero-pexels-broken-9945014.avif +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626431.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626432.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626434.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626436.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_1.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_2.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_3.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_4.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/hero.png +0 -0
- package/dist/kits/blocks/public/placeholders/saas_dashboard/analytics.png +0 -0
- package/dist/kits/blocks/public/placeholders/saas_dashboard/chat.png +0 -0
- package/dist/kits/blocks/public/placeholders/saas_dashboard/projectBoard.png +0 -0
- package/dist/kits/data/.gitkeep +0 -0
- package/dist/kits/data/README.md +104 -0
- package/dist/kits/data/app/(protected)/admin/posts/page.tsx +5 -0
- package/dist/kits/data/app/(protected)/admin/users/page.tsx +5 -0
- package/dist/kits/data/app/api/posts/[id]/route.ts +83 -0
- package/dist/kits/data/app/api/posts/route.ts +138 -0
- package/dist/kits/data/app/api/seed-demo/route.ts +45 -0
- package/dist/kits/data/app/api/users/[id]/route.ts +127 -0
- package/dist/kits/data/app/api/users/check-email/route.ts +18 -0
- package/dist/kits/data/app/api/users/check-unique/route.ts +27 -0
- package/dist/kits/data/app/api/users/route.ts +79 -0
- package/dist/kits/data/app/examples/demo/README.md +4 -0
- package/dist/kits/data/app/examples/demo/create-post-form.tsx +106 -0
- package/dist/kits/data/app/examples/demo/page.tsx +118 -0
- package/dist/kits/data/app/examples/demo/seed-demo-button.tsx +37 -0
- package/dist/kits/data/components/admin/posts-manager.tsx +719 -0
- package/dist/kits/data/components/admin/users-manager.tsx +432 -0
- package/dist/kits/data/lib/prisma.ts +15 -0
- package/dist/kits/data/lib/server/result.ts +90 -0
- package/dist/kits/data/package-deps.json +11 -0
- package/dist/kits/data/scripts/seed-demo.mjs +41 -0
- package/dist/kits/forms/.gitkeep +0 -0
- package/dist/kits/forms/README.md +49 -0
- package/dist/kits/forms/app/.gitkeep +0 -0
- package/dist/kits/forms/app/api/wizard/route.ts +71 -0
- package/dist/kits/forms/app/examples/forms/basic/page.tsx +124 -0
- package/dist/kits/forms/app/examples/forms/server-action/form-client.tsx +28 -0
- package/dist/kits/forms/app/examples/forms/server-action/page.tsx +71 -0
- package/dist/kits/forms/app/examples/forms/wizard/page.tsx +15 -0
- package/dist/kits/forms/app/examples/forms/wizard/wizard-client.tsx +2 -0
- package/dist/kits/forms/components/.gitkeep +0 -0
- package/dist/kits/forms/components/examples/wizard-client.tsx +231 -0
- package/dist/kits/forms/components/hooks/useCheckUnique.ts +79 -0
- package/dist/kits/forms/components/ui/button.tsx +122 -0
- package/dist/kits/forms/components/ui/checkbox.tsx +30 -0
- package/dist/kits/forms/components/ui/form/context.ts +33 -0
- package/dist/kits/forms/components/ui/form/form-control.tsx +28 -0
- package/dist/kits/forms/components/ui/form/form-description.tsx +22 -0
- package/dist/kits/forms/components/ui/form/form-field.tsx +36 -0
- package/dist/kits/forms/components/ui/form/form-item.tsx +21 -0
- package/dist/kits/forms/components/ui/form/form-label.tsx +24 -0
- package/dist/kits/forms/components/ui/form/form-message.tsx +29 -0
- package/dist/kits/forms/components/ui/form/form.tsx +26 -0
- package/dist/kits/forms/components/ui/input.tsx +27 -0
- package/dist/kits/forms/components/ui/label.tsx +29 -0
- package/dist/kits/forms/components/ui/select.tsx +25 -0
- package/dist/kits/forms/components/ui/switch.tsx +78 -0
- package/dist/kits/forms/components/ui/textarea.tsx +26 -0
- package/dist/kits/forms/lib/.gitkeep +0 -0
- package/dist/kits/forms/lib/forms/map-errors.ts +29 -0
- package/dist/kits/forms/lib/prisma.ts +16 -0
- package/dist/kits/forms/lib/utils.ts +9 -0
- package/dist/kits/forms/lib/validation/forms.ts +88 -0
- package/dist/kits/forms/lib/validation/wizard.ts +32 -0
- package/dist/kits/forms/package-deps.json +17 -0
- package/dist/utils/file-operations.d.ts +18 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +327 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/installation-tracker.d.ts +26 -0
- package/dist/utils/installation-tracker.d.ts.map +1 -0
- package/dist/utils/installation-tracker.js +98 -0
- package/dist/utils/installation-tracker.js.map +1 -0
- package/package.json +51 -21
- package/index.js +0 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
export const signupSchema = z.object({
|
|
4
|
+
name: z.string().min(2, "Name must be at least 2 characters"),
|
|
5
|
+
email: z.string().email("Invalid email address"),
|
|
6
|
+
password: z.string().min(6, "Password must be at least 6 characters"),
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export const loginSchema = z.object({
|
|
10
|
+
email: z.string().email("Invalid email address"),
|
|
11
|
+
password: z.string().min(6, "Password must be at least 6 characters"),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// Request body for forgot-password endpoint
|
|
15
|
+
export const forgotPasswordSchema = z.object({
|
|
16
|
+
email: z.string().email("Invalid email address"),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Reset password schema (token + new password + confirm)
|
|
20
|
+
export const resetPasswordSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
token: z.string().min(1, "Token is required"),
|
|
23
|
+
password: z.string().min(6, "Password must be at least 6 characters"),
|
|
24
|
+
confirmPassword: z.string().min(6, "Confirm password is required"),
|
|
25
|
+
})
|
|
26
|
+
.refine((data) => data.password === data.confirmPassword, {
|
|
27
|
+
path: ["confirmPassword"],
|
|
28
|
+
message: "Passwords do not match",
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export const contactSchema = z.object({
|
|
32
|
+
name: z.string().min(2, "Name must be at least 2 characters"),
|
|
33
|
+
email: z.string().email("Invalid email address"),
|
|
34
|
+
subject: z.string().min(5, "Subject must be at least 5 characters"),
|
|
35
|
+
message: z.string().min(10, "Message must be at least 10 characters"),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const newsletterSchema = z.object({
|
|
39
|
+
name: z.string().optional(),
|
|
40
|
+
email: z.string().email("Invalid email address"),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export const userSchema = z.object({
|
|
44
|
+
email: z.string().email("Invalid email address"),
|
|
45
|
+
name: z
|
|
46
|
+
.string()
|
|
47
|
+
.min(2, "Name must be at least 2 characters")
|
|
48
|
+
.optional()
|
|
49
|
+
.or(z.literal("")),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export const userUpdateSchema = z.object({
|
|
53
|
+
email: z.string().email("Invalid email address").optional(),
|
|
54
|
+
name: z
|
|
55
|
+
.string()
|
|
56
|
+
.min(2, "Name must be at least 2 characters")
|
|
57
|
+
.optional()
|
|
58
|
+
.or(z.literal("")),
|
|
59
|
+
image: z.string().optional().or(z.literal("")),
|
|
60
|
+
password: z
|
|
61
|
+
.string()
|
|
62
|
+
.min(6, "Password must be at least 6 characters")
|
|
63
|
+
.optional()
|
|
64
|
+
.or(z.literal("")),
|
|
65
|
+
emailVerified: z
|
|
66
|
+
.union([z.date(), z.string().transform((s) => new Date(s)), z.null()])
|
|
67
|
+
.optional(),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export const postSchema = z.object({
|
|
71
|
+
title: z
|
|
72
|
+
.string()
|
|
73
|
+
.min(1, "Title is required")
|
|
74
|
+
.min(3, "Title must be at least 3 characters"),
|
|
75
|
+
content: z.string().optional().or(z.literal("")),
|
|
76
|
+
authorId: z.string().min(1, "Author ID is required"),
|
|
77
|
+
// published is optional in forms/API - defaults to false in the DB
|
|
78
|
+
published: z.boolean().optional(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export type NewsletterFormValues = z.infer<typeof newsletterSchema>;
|
|
82
|
+
export type ContactFormValues = z.infer<typeof contactSchema>;
|
|
83
|
+
export type SignupFormValues = z.infer<typeof signupSchema>;
|
|
84
|
+
export type LoginFormValues = z.infer<typeof loginSchema>;
|
|
85
|
+
export type UserFormValues = z.infer<typeof userSchema>;
|
|
86
|
+
export type PostFormValues = z.infer<typeof postSchema>;
|
|
87
|
+
export type ForgotPasswordFormValues = z.infer<typeof forgotPasswordSchema>;
|
|
88
|
+
export type ResetPasswordFormValues = z.infer<typeof resetPasswordSchema>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
export const step1Schema = z.object({
|
|
4
|
+
title: z.string().min(3, "Title must be at least 3 characters"),
|
|
5
|
+
slug: z.string().optional().or(z.literal("")),
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export const step2Schema = z.object({
|
|
9
|
+
content: z.string().min(10, "Content must be at least 10 characters"),
|
|
10
|
+
excerpt: z.string().optional().or(z.literal("")),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export const step3Schema = z.object({
|
|
14
|
+
visibility: z.enum(["public", "private"]).default("public"),
|
|
15
|
+
tags: z.string().optional().or(z.literal("")),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const wizardClientSchema = step1Schema
|
|
19
|
+
.merge(step2Schema)
|
|
20
|
+
.merge(step3Schema);
|
|
21
|
+
export type WizardClientValues = z.infer<typeof wizardClientSchema>;
|
|
22
|
+
|
|
23
|
+
// Server-side minimal schema for creating the Post (what we actually persist)
|
|
24
|
+
export const wizardServerSchema = z.object({
|
|
25
|
+
title: z.string().min(3, "Title must be at least 3 characters"),
|
|
26
|
+
slug: z.string().optional().or(z.literal("")),
|
|
27
|
+
content: z.string().min(1, "Content is required"),
|
|
28
|
+
excerpt: z.string().optional().or(z.literal("")),
|
|
29
|
+
visibility: z.enum(["public", "private"]).default("public"),
|
|
30
|
+
tags: z.string().optional().or(z.literal("")),
|
|
31
|
+
});
|
|
32
|
+
export type WizardServerValues = z.infer<typeof wizardServerSchema>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dependencies": {
|
|
3
|
+
"react-hook-form": "^7.53.0",
|
|
4
|
+
"@hookform/resolvers": "^3.9.0",
|
|
5
|
+
"zod": "^3.23.8",
|
|
6
|
+
"sonner": "^2.0.7",
|
|
7
|
+
"clsx": "^2.1.1",
|
|
8
|
+
"class-variance-authority": "^0.7.1",
|
|
9
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
10
|
+
"@radix-ui/react-label": "^2.1.7",
|
|
11
|
+
"tailwind-merge": "^3.3.1",
|
|
12
|
+
"@prisma/client": "^5.18.0"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"prisma": "^5.18.0"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a runtime asset path. Prefer the compiled dist folder (which is
|
|
3
|
+
* what we ship to consumers), and fall back to the package root for local dev.
|
|
4
|
+
*/
|
|
5
|
+
export declare function resolveAssetPath(...segments: string[]): string;
|
|
6
|
+
export declare function copyFiles(sourceDir: string, targetDir: string, files: string[]): Promise<void>;
|
|
7
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
8
|
+
export declare function readJsonFile(filePath: string): Promise<any>;
|
|
9
|
+
export declare function writeJsonFile(filePath: string, data: any): Promise<void>;
|
|
10
|
+
export declare function updatePackageJson(deps: any): Promise<void>;
|
|
11
|
+
export declare function updateLayoutFile(): Promise<void>;
|
|
12
|
+
export declare function updateLayoutWithAppProviders(): Promise<void>;
|
|
13
|
+
export declare function removeFiles(files: string[]): Promise<void>;
|
|
14
|
+
export declare function removeEmptyFolders(files: string[]): Promise<void>;
|
|
15
|
+
export declare function removePackageDeps(deps: any): Promise<void>;
|
|
16
|
+
export declare function removePackageDepsSmart(depsToRemove: string[], devDepsToRemove: string[]): Promise<void>;
|
|
17
|
+
export declare function revertLayoutFile(): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=file-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-operations.d.ts","sourceRoot":"","sources":["../../src/utils/file-operations.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAW9D;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAOjE;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsDtD;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAgElE;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EvE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhE;AAED,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EAAE,EACtB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBtD"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveAssetPath = resolveAssetPath;
|
|
7
|
+
exports.copyFiles = copyFiles;
|
|
8
|
+
exports.fileExists = fileExists;
|
|
9
|
+
exports.readJsonFile = readJsonFile;
|
|
10
|
+
exports.writeJsonFile = writeJsonFile;
|
|
11
|
+
exports.updatePackageJson = updatePackageJson;
|
|
12
|
+
exports.updateLayoutFile = updateLayoutFile;
|
|
13
|
+
exports.updateLayoutWithAppProviders = updateLayoutWithAppProviders;
|
|
14
|
+
exports.removeFiles = removeFiles;
|
|
15
|
+
exports.removeEmptyFolders = removeEmptyFolders;
|
|
16
|
+
exports.removePackageDeps = removePackageDeps;
|
|
17
|
+
exports.removePackageDepsSmart = removePackageDepsSmart;
|
|
18
|
+
exports.revertLayoutFile = revertLayoutFile;
|
|
19
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a runtime asset path. Prefer the compiled dist folder (which is
|
|
23
|
+
* what we ship to consumers), and fall back to the package root for local dev.
|
|
24
|
+
*/
|
|
25
|
+
function resolveAssetPath(...segments) {
|
|
26
|
+
// __dirname here is typically:
|
|
27
|
+
// - dist/utils at runtime for consumers
|
|
28
|
+
// - src/utils during local development
|
|
29
|
+
const distRoot = path_1.default.resolve(__dirname, "..");
|
|
30
|
+
const candidateDist = path_1.default.join(distRoot, ...segments);
|
|
31
|
+
if (fs_extra_1.default.existsSync(candidateDist))
|
|
32
|
+
return candidateDist;
|
|
33
|
+
// Fallback to the package root (useful when running with ts-node locally)
|
|
34
|
+
const pkgRoot = path_1.default.resolve(__dirname, "..", "..");
|
|
35
|
+
return path_1.default.join(pkgRoot, ...segments);
|
|
36
|
+
}
|
|
37
|
+
async function copyFiles(sourceDir, targetDir, files) {
|
|
38
|
+
for (const file of files) {
|
|
39
|
+
const sourcePath = path_1.default.join(sourceDir, file);
|
|
40
|
+
const targetPath = path_1.default.join(targetDir, file);
|
|
41
|
+
// Ensure target directory exists
|
|
42
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(targetPath));
|
|
43
|
+
// Copy file
|
|
44
|
+
await fs_extra_1.default.copy(sourcePath, targetPath);
|
|
45
|
+
console.log(`✓ Created ${file}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function fileExists(filePath) {
|
|
49
|
+
try {
|
|
50
|
+
await fs_extra_1.default.access(filePath);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function readJsonFile(filePath) {
|
|
58
|
+
try {
|
|
59
|
+
const content = await fs_extra_1.default.readFile(filePath, "utf-8");
|
|
60
|
+
return JSON.parse(content);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
throw new Error(`Failed to read JSON file ${filePath}: ${error}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function writeJsonFile(filePath, data) {
|
|
67
|
+
try {
|
|
68
|
+
await fs_extra_1.default.writeFile(filePath, JSON.stringify(data, null, 2) + "\n");
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
throw new Error(`Failed to write JSON file ${filePath}: ${error}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function updatePackageJson(deps) {
|
|
75
|
+
const packageJsonPath = "package.json";
|
|
76
|
+
if (!(await fileExists(packageJsonPath))) {
|
|
77
|
+
throw new Error("package.json not found. Make sure you are in a Next.js project root.");
|
|
78
|
+
}
|
|
79
|
+
const packageJson = await readJsonFile(packageJsonPath);
|
|
80
|
+
// Merge dependencies
|
|
81
|
+
if (deps.dependencies) {
|
|
82
|
+
packageJson.dependencies = {
|
|
83
|
+
...packageJson.dependencies,
|
|
84
|
+
...deps.dependencies,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (deps.devDependencies) {
|
|
88
|
+
packageJson.devDependencies = {
|
|
89
|
+
...packageJson.devDependencies,
|
|
90
|
+
...deps.devDependencies,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
await writeJsonFile(packageJsonPath, packageJson);
|
|
94
|
+
console.log("✓ Updated package.json");
|
|
95
|
+
}
|
|
96
|
+
async function updateLayoutFile() {
|
|
97
|
+
const layoutPath = "app/layout.tsx";
|
|
98
|
+
if (!(await fileExists(layoutPath))) {
|
|
99
|
+
console.log("⚠️ app/layout.tsx not found. You may need to manually add SessionProvider.");
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
let content = await fs_extra_1.default.readFile(layoutPath, "utf-8");
|
|
103
|
+
// Check if SessionProvider is already imported
|
|
104
|
+
if (content.includes("AppSessionProvider")) {
|
|
105
|
+
console.log("⚠️ SessionProvider already exists in layout.tsx");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Add import after the last import statement
|
|
109
|
+
const importRegex = /import\s+.*?from\s+["'].*?["'];?\s*$/gm;
|
|
110
|
+
const imports = content.match(importRegex);
|
|
111
|
+
if (imports && imports.length > 0) {
|
|
112
|
+
const lastImport = imports[imports.length - 1];
|
|
113
|
+
const lastImportIndex = content.lastIndexOf(lastImport);
|
|
114
|
+
const insertIndex = lastImportIndex + lastImport.length;
|
|
115
|
+
content =
|
|
116
|
+
content.slice(0, insertIndex) +
|
|
117
|
+
'\nimport AppSessionProvider from "@/components/session-provider";' +
|
|
118
|
+
content.slice(insertIndex);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Fallback: add import at the top
|
|
122
|
+
content =
|
|
123
|
+
'import AppSessionProvider from "@/components/session-provider";\n' +
|
|
124
|
+
content;
|
|
125
|
+
}
|
|
126
|
+
// Wrap the entire body content with SessionProvider
|
|
127
|
+
content = content.replace(/<body[^>]*>([\s\S]*?)<\/body>/, (match, bodyContent) => {
|
|
128
|
+
if (bodyContent.includes("<AppSessionProvider>")) {
|
|
129
|
+
return match; // Already wrapped
|
|
130
|
+
}
|
|
131
|
+
// Wrap the entire body content
|
|
132
|
+
const wrappedBodyContent = `<AppSessionProvider>${bodyContent}</AppSessionProvider>`;
|
|
133
|
+
return match.replace(bodyContent, wrappedBodyContent);
|
|
134
|
+
});
|
|
135
|
+
await fs_extra_1.default.writeFile(layoutPath, content);
|
|
136
|
+
console.log("✓ Updated app/layout.tsx with SessionProvider");
|
|
137
|
+
}
|
|
138
|
+
async function updateLayoutWithAppProviders() {
|
|
139
|
+
const layoutPath = "app/layout.tsx";
|
|
140
|
+
if (!(await fileExists(layoutPath))) {
|
|
141
|
+
console.log("⚠️ app/layout.tsx not found. You may need to manually add AppProviders.");
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
let content = await fs_extra_1.default.readFile(layoutPath, "utf-8");
|
|
145
|
+
// Collect existing import statements
|
|
146
|
+
const importRegex = /import\s+.*?from\s+["'].*?["'];?\s*$/gm;
|
|
147
|
+
const imports = content.match(importRegex) ?? [];
|
|
148
|
+
const lastImport = imports[imports.length - 1] ?? "";
|
|
149
|
+
const lastImportIndex = lastImport
|
|
150
|
+
? content.lastIndexOf(lastImport) + lastImport.length
|
|
151
|
+
: 0;
|
|
152
|
+
const ensureImport = (importLine) => {
|
|
153
|
+
if (!content.includes(importLine)) {
|
|
154
|
+
content =
|
|
155
|
+
content.slice(0, lastImportIndex) +
|
|
156
|
+
(lastImportIndex ? "\n" : "") +
|
|
157
|
+
importLine +
|
|
158
|
+
content.slice(lastImportIndex);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
// Ensure imports for AppProviders and AppToaster only (no auth/session here)
|
|
162
|
+
ensureImport('import AppProviders from "@/components/app-providers";');
|
|
163
|
+
ensureImport('import AppToaster from "@/components/ui/toaster";');
|
|
164
|
+
// Add suppressHydrationWarning to <html> tag if not present
|
|
165
|
+
content = content.replace(/<html([^>]*)>/, (match, attrs) => {
|
|
166
|
+
if (attrs.includes("suppressHydrationWarning"))
|
|
167
|
+
return match;
|
|
168
|
+
return `<html${attrs} suppressHydrationWarning>`;
|
|
169
|
+
});
|
|
170
|
+
// Wrap the entire body content with AppProviders and ensure AppToaster is rendered
|
|
171
|
+
content = content.replace(/<body[^>]*>([\s\S]*?)<\/body>/, (match, bodyContent) => {
|
|
172
|
+
let inner = bodyContent.trim();
|
|
173
|
+
// Ensure children are inside AppProviders
|
|
174
|
+
if (!inner.includes("<AppProviders")) {
|
|
175
|
+
inner = `<AppProviders>\n${inner}\n</AppProviders>`;
|
|
176
|
+
}
|
|
177
|
+
// Ensure <AppToaster /> is present inside providers
|
|
178
|
+
if (!inner.includes("<AppToaster")) {
|
|
179
|
+
inner = inner.replace(/(<\/AppProviders>)/, ` <AppToaster />\n$1`);
|
|
180
|
+
}
|
|
181
|
+
return match.replace(bodyContent, `\n${inner}\n`);
|
|
182
|
+
});
|
|
183
|
+
await fs_extra_1.default.writeFile(layoutPath, content);
|
|
184
|
+
console.log("✓ Updated app/layout.tsx with AppProviders, AppToaster, and suppressHydrationWarning on <html>");
|
|
185
|
+
}
|
|
186
|
+
async function removeFiles(files) {
|
|
187
|
+
for (const file of files) {
|
|
188
|
+
const filePath = path_1.default.join(process.cwd(), file);
|
|
189
|
+
if (await fileExists(filePath)) {
|
|
190
|
+
await fs_extra_1.default.remove(filePath);
|
|
191
|
+
console.log(`✓ Removed ${file}`);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(`⚠️ File not found: ${file}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function removeEmptyFolders(files) {
|
|
199
|
+
// Folders that should never be removed (standard Next.js structure)
|
|
200
|
+
const protectedFolders = new Set([
|
|
201
|
+
"app",
|
|
202
|
+
"app/api",
|
|
203
|
+
"public",
|
|
204
|
+
"src",
|
|
205
|
+
"pages",
|
|
206
|
+
"components",
|
|
207
|
+
"lib",
|
|
208
|
+
"types",
|
|
209
|
+
"styles",
|
|
210
|
+
"stylesheets",
|
|
211
|
+
"assets",
|
|
212
|
+
"static",
|
|
213
|
+
]);
|
|
214
|
+
// Get unique parent directories from the files
|
|
215
|
+
const parentDirs = new Set();
|
|
216
|
+
files.forEach((file) => {
|
|
217
|
+
const dir = path_1.default.dirname(file);
|
|
218
|
+
if (dir !== ".") {
|
|
219
|
+
parentDirs.add(dir);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
// Also add all parent directories up the tree
|
|
223
|
+
const allParentDirs = new Set();
|
|
224
|
+
parentDirs.forEach((dir) => {
|
|
225
|
+
allParentDirs.add(dir);
|
|
226
|
+
// Add all parent directories up the tree
|
|
227
|
+
let currentDir = dir;
|
|
228
|
+
while (currentDir !== "." && currentDir !== "") {
|
|
229
|
+
const parent = path_1.default.dirname(currentDir);
|
|
230
|
+
if (parent !== "." && parent !== currentDir) {
|
|
231
|
+
allParentDirs.add(parent);
|
|
232
|
+
currentDir = parent;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
// Filter out protected folders
|
|
240
|
+
const foldersToCheck = Array.from(allParentDirs).filter((dir) => !protectedFolders.has(dir));
|
|
241
|
+
// Sort by depth (deepest first) to remove nested folders first
|
|
242
|
+
const sortedDirs = foldersToCheck.sort((a, b) => b.split("/").length - a.split("/").length);
|
|
243
|
+
for (const dir of sortedDirs) {
|
|
244
|
+
const dirPath = path_1.default.join(process.cwd(), dir);
|
|
245
|
+
try {
|
|
246
|
+
// Check if directory exists and is empty
|
|
247
|
+
if (await fs_extra_1.default.pathExists(dirPath)) {
|
|
248
|
+
const contents = await fs_extra_1.default.readdir(dirPath);
|
|
249
|
+
if (contents.length === 0) {
|
|
250
|
+
await fs_extra_1.default.remove(dirPath);
|
|
251
|
+
console.log(`✓ Removed empty folder: ${dir}`);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
console.log(`ℹ️ Kept non-empty folder: ${dir}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.log(`⚠️ Could not check/remove folder: ${dir}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async function removePackageDeps(deps) {
|
|
264
|
+
const packageJsonPath = "package.json";
|
|
265
|
+
if (!(await fileExists(packageJsonPath))) {
|
|
266
|
+
console.log("⚠️ package.json not found");
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const packageJson = await readJsonFile(packageJsonPath);
|
|
270
|
+
// Remove dependencies
|
|
271
|
+
if (deps.dependencies) {
|
|
272
|
+
for (const dep of Object.keys(deps.dependencies)) {
|
|
273
|
+
if (packageJson.dependencies && packageJson.dependencies[dep]) {
|
|
274
|
+
delete packageJson.dependencies[dep];
|
|
275
|
+
console.log(`✓ Removed dependency: ${dep}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (deps.devDependencies) {
|
|
280
|
+
for (const dep of Object.keys(deps.devDependencies)) {
|
|
281
|
+
if (packageJson.devDependencies && packageJson.devDependencies[dep]) {
|
|
282
|
+
delete packageJson.devDependencies[dep];
|
|
283
|
+
console.log(`✓ Removed devDependency: ${dep}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
await writeJsonFile(packageJsonPath, packageJson);
|
|
288
|
+
console.log("✓ Updated package.json");
|
|
289
|
+
}
|
|
290
|
+
async function removePackageDepsSmart(depsToRemove, devDepsToRemove) {
|
|
291
|
+
const packageJsonPath = "package.json";
|
|
292
|
+
if (!(await fileExists(packageJsonPath))) {
|
|
293
|
+
console.log("⚠️ package.json not found");
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const packageJson = await readJsonFile(packageJsonPath);
|
|
297
|
+
// Remove only the specified dependencies
|
|
298
|
+
depsToRemove.forEach((dep) => {
|
|
299
|
+
if (packageJson.dependencies && packageJson.dependencies[dep]) {
|
|
300
|
+
delete packageJson.dependencies[dep];
|
|
301
|
+
console.log(`✓ Removed dependency: ${dep}`);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
devDepsToRemove.forEach((dep) => {
|
|
305
|
+
if (packageJson.devDependencies && packageJson.devDependencies[dep]) {
|
|
306
|
+
delete packageJson.devDependencies[dep];
|
|
307
|
+
console.log(`✓ Removed devDependency: ${dep}`);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
await writeJsonFile(packageJsonPath, packageJson);
|
|
311
|
+
console.log("✓ Updated package.json");
|
|
312
|
+
}
|
|
313
|
+
async function revertLayoutFile() {
|
|
314
|
+
const layoutPath = "app/layout.tsx";
|
|
315
|
+
if (!(await fileExists(layoutPath))) {
|
|
316
|
+
console.log("⚠️ app/layout.tsx not found");
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
let content = await fs_extra_1.default.readFile(layoutPath, "utf-8");
|
|
320
|
+
// Remove SessionProvider import
|
|
321
|
+
content = content.replace(/\nimport AppSessionProvider from "@\/components\/session-provider";/g, "");
|
|
322
|
+
// Remove SessionProvider wrapper
|
|
323
|
+
content = content.replace(/<AppSessionProvider>([\s\S]*?)<\/AppSessionProvider>/g, "$1");
|
|
324
|
+
await fs_extra_1.default.writeFile(layoutPath, content);
|
|
325
|
+
console.log("✓ Reverted app/layout.tsx (removed SessionProvider)");
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=file-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-operations.js","sourceRoot":"","sources":["../../src/utils/file-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface InstalledKit {
|
|
2
|
+
name: string;
|
|
3
|
+
dependencies: string[];
|
|
4
|
+
devDependencies: string[];
|
|
5
|
+
files: string[];
|
|
6
|
+
installedAt: string;
|
|
7
|
+
}
|
|
8
|
+
interface NextworksConfig {
|
|
9
|
+
installedKits: InstalledKit[];
|
|
10
|
+
version: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getLpkConfig(): Promise<NextworksConfig>;
|
|
13
|
+
export declare function saveLpkConfig(config: NextworksConfig): Promise<void>;
|
|
14
|
+
export declare function addInstalledKit(kitName: string, dependencies: string[], devDependencies: string[], files: string[]): Promise<void>;
|
|
15
|
+
export declare function removeInstalledKit(kitName: string): Promise<void>;
|
|
16
|
+
export declare function getInstalledKits(): Promise<string[]>;
|
|
17
|
+
export declare function getSharedDependencies(): Promise<{
|
|
18
|
+
dependencies: string[];
|
|
19
|
+
devDependencies: string[];
|
|
20
|
+
}>;
|
|
21
|
+
export declare function getSafeToRemoveDependencies(kitName: string): Promise<{
|
|
22
|
+
dependencies: string[];
|
|
23
|
+
devDependencies: string[];
|
|
24
|
+
}>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=installation-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/installation-tracker.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAW7D;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EAAE,EACtB,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC,CAsCD;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC,CAuBD"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getLpkConfig = getLpkConfig;
|
|
7
|
+
exports.saveLpkConfig = saveLpkConfig;
|
|
8
|
+
exports.addInstalledKit = addInstalledKit;
|
|
9
|
+
exports.removeInstalledKit = removeInstalledKit;
|
|
10
|
+
exports.getInstalledKits = getInstalledKits;
|
|
11
|
+
exports.getSharedDependencies = getSharedDependencies;
|
|
12
|
+
exports.getSafeToRemoveDependencies = getSafeToRemoveDependencies;
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const CONFIG_FILE = ".nextworks/config.json";
|
|
16
|
+
async function getLpkConfig() {
|
|
17
|
+
const configPath = path_1.default.join(process.cwd(), CONFIG_FILE);
|
|
18
|
+
if (await fs_extra_1.default.pathExists(configPath)) {
|
|
19
|
+
return await fs_extra_1.default.readJson(configPath);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
installedKits: [],
|
|
23
|
+
version: "0.1.0",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async function saveLpkConfig(config) {
|
|
27
|
+
const configPath = path_1.default.join(process.cwd(), CONFIG_FILE);
|
|
28
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(configPath));
|
|
29
|
+
await fs_extra_1.default.writeJson(configPath, config, { spaces: 2 });
|
|
30
|
+
}
|
|
31
|
+
async function addInstalledKit(kitName, dependencies, devDependencies, files) {
|
|
32
|
+
const config = await getLpkConfig();
|
|
33
|
+
// Remove existing kit if it exists (for reinstall)
|
|
34
|
+
config.installedKits = config.installedKits.filter((kit) => kit.name !== kitName);
|
|
35
|
+
// Add new kit
|
|
36
|
+
config.installedKits.push({
|
|
37
|
+
name: kitName,
|
|
38
|
+
dependencies,
|
|
39
|
+
devDependencies,
|
|
40
|
+
files,
|
|
41
|
+
installedAt: new Date().toISOString(),
|
|
42
|
+
});
|
|
43
|
+
await saveLpkConfig(config);
|
|
44
|
+
}
|
|
45
|
+
async function removeInstalledKit(kitName) {
|
|
46
|
+
const config = await getLpkConfig();
|
|
47
|
+
config.installedKits = config.installedKits.filter((kit) => kit.name !== kitName);
|
|
48
|
+
await saveLpkConfig(config);
|
|
49
|
+
}
|
|
50
|
+
async function getInstalledKits() {
|
|
51
|
+
const config = await getLpkConfig();
|
|
52
|
+
return config.installedKits.map((kit) => kit.name);
|
|
53
|
+
}
|
|
54
|
+
async function getSharedDependencies() {
|
|
55
|
+
const config = await getLpkConfig();
|
|
56
|
+
const allDeps = new Set();
|
|
57
|
+
const allDevDeps = new Set();
|
|
58
|
+
// Collect all dependencies from all kits
|
|
59
|
+
config.installedKits.forEach((kit) => {
|
|
60
|
+
kit.dependencies.forEach((dep) => allDeps.add(dep));
|
|
61
|
+
kit.devDependencies.forEach((dep) => allDevDeps.add(dep));
|
|
62
|
+
});
|
|
63
|
+
// Find dependencies that appear in multiple kits
|
|
64
|
+
const sharedDeps = new Set();
|
|
65
|
+
const sharedDevDeps = new Set();
|
|
66
|
+
allDeps.forEach((dep) => {
|
|
67
|
+
const kitCount = config.installedKits.filter((kit) => kit.dependencies.includes(dep)).length;
|
|
68
|
+
if (kitCount > 1) {
|
|
69
|
+
sharedDeps.add(dep);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
allDevDeps.forEach((dep) => {
|
|
73
|
+
const kitCount = config.installedKits.filter((kit) => kit.devDependencies.includes(dep)).length;
|
|
74
|
+
if (kitCount > 1) {
|
|
75
|
+
sharedDevDeps.add(dep);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
dependencies: Array.from(sharedDeps),
|
|
80
|
+
devDependencies: Array.from(sharedDevDeps),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async function getSafeToRemoveDependencies(kitName) {
|
|
84
|
+
const config = await getLpkConfig();
|
|
85
|
+
const kit = config.installedKits.find((k) => k.name === kitName);
|
|
86
|
+
if (!kit) {
|
|
87
|
+
return { dependencies: [], devDependencies: [] };
|
|
88
|
+
}
|
|
89
|
+
const shared = await getSharedDependencies();
|
|
90
|
+
// Only remove dependencies that are NOT shared with other kits
|
|
91
|
+
const safeToRemoveDeps = kit.dependencies.filter((dep) => !shared.dependencies.includes(dep));
|
|
92
|
+
const safeToRemoveDevDeps = kit.devDependencies.filter((dep) => !shared.devDependencies.includes(dep));
|
|
93
|
+
return {
|
|
94
|
+
dependencies: safeToRemoveDeps,
|
|
95
|
+
devDependencies: safeToRemoveDevDeps,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=installation-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-tracker.js","sourceRoot":"","sources":["../../src/utils/installation-tracker.ts"],"names":[],"mappings":"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"}
|