@promakeai/cli 0.9.8 → 0.9.10

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.
Files changed (137) hide show
  1. package/README.md +111 -111
  2. package/dist/index.js +142 -142
  3. package/dist/registry/about-page.json +3 -3
  4. package/dist/registry/about-section.json +4 -4
  5. package/dist/registry/animations.json +2 -2
  6. package/dist/registry/announcement-bar.json +4 -4
  7. package/dist/registry/api.json +1 -1
  8. package/dist/registry/auth-core.json +2 -2
  9. package/dist/registry/bento-grid-section.json +4 -4
  10. package/dist/registry/blog-core.json +5 -5
  11. package/dist/registry/blog-list-page.json +4 -4
  12. package/dist/registry/blog-section.json +4 -4
  13. package/dist/registry/cards-carousel-section.json +4 -4
  14. package/dist/registry/cart-drawer.json +4 -4
  15. package/dist/registry/cart-page.json +4 -4
  16. package/dist/registry/case-study-page.json +3 -3
  17. package/dist/registry/category-section.json +4 -4
  18. package/dist/registry/checkout-page.json +4 -4
  19. package/dist/registry/coming-soon-page-minimal.json +4 -4
  20. package/dist/registry/coming-soon-page.json +4 -4
  21. package/dist/registry/contact-info-grid.json +4 -4
  22. package/dist/registry/contact-page-centered.json +4 -4
  23. package/dist/registry/contact-page-map-overlay.json +3 -3
  24. package/dist/registry/contact-page-map-split.json +3 -3
  25. package/dist/registry/contact-page-split.json +4 -4
  26. package/dist/registry/contact-page.json +4 -4
  27. package/dist/registry/content-section.json +4 -4
  28. package/dist/registry/cookie-consent.json +4 -4
  29. package/dist/registry/cookies-page.json +3 -3
  30. package/dist/registry/cta-section.json +3 -3
  31. package/dist/registry/ecommerce-core.json +8 -8
  32. package/dist/registry/empty-page.json +3 -3
  33. package/dist/registry/faq-categorized.json +4 -4
  34. package/dist/registry/faq-simple.json +4 -4
  35. package/dist/registry/favorites-blog-block.json +1 -1
  36. package/dist/registry/favorites-blog-page.json +4 -4
  37. package/dist/registry/favorites-ecommerce-block.json +1 -1
  38. package/dist/registry/favorites-ecommerce-page.json +4 -4
  39. package/dist/registry/feature-section.json +3 -3
  40. package/dist/registry/featured-products.json +4 -4
  41. package/dist/registry/footer-detailed.json +4 -4
  42. package/dist/registry/footer-minimal.json +3 -3
  43. package/dist/registry/footer.json +3 -3
  44. package/dist/registry/forgot-password-page-split.json +4 -4
  45. package/dist/registry/forgot-password-page.json +4 -4
  46. package/dist/registry/google-adsense.json +4 -4
  47. package/dist/registry/google-map.json +2 -2
  48. package/dist/registry/header-centered-pill.json +4 -4
  49. package/dist/registry/header-ecommerce.json +4 -4
  50. package/dist/registry/header-mega.json +4 -4
  51. package/dist/registry/header-minimal.json +4 -4
  52. package/dist/registry/header-simple.json +3 -3
  53. package/dist/registry/hero-carousel.json +3 -3
  54. package/dist/registry/hero-cta.json +4 -4
  55. package/dist/registry/hero-gradient.json +4 -4
  56. package/dist/registry/hero-grid.json +4 -4
  57. package/dist/registry/hero-profile.json +3 -3
  58. package/dist/registry/hero.json +3 -3
  59. package/dist/registry/index.json +103 -103
  60. package/dist/registry/landing-page-app.json +3 -3
  61. package/dist/registry/landing-page-saas.json +3 -3
  62. package/dist/registry/login-page-split.json +4 -4
  63. package/dist/registry/login-page.json +4 -4
  64. package/dist/registry/logo-cloud.json +4 -4
  65. package/dist/registry/masonry-grid.json +3 -3
  66. package/dist/registry/my-orders-page.json +4 -4
  67. package/dist/registry/newsletter-section.json +4 -4
  68. package/dist/registry/order-card-compact.json +3 -3
  69. package/dist/registry/order-confirmation-page.json +4 -4
  70. package/dist/registry/order-detail-block.json +1 -1
  71. package/dist/registry/orders-list-block.json +1 -1
  72. package/dist/registry/payment-success-block.json +2 -2
  73. package/dist/registry/portfolio-page.json +4 -4
  74. package/dist/registry/post-card.json +4 -4
  75. package/dist/registry/post-detail-block.json +4 -4
  76. package/dist/registry/post-detail-page.json +4 -4
  77. package/dist/registry/pricing-card.json +3 -3
  78. package/dist/registry/pricing-page.json +4 -4
  79. package/dist/registry/pricing-section.json +4 -4
  80. package/dist/registry/privacy-page.json +3 -3
  81. package/dist/registry/product-card-detailed.json +4 -4
  82. package/dist/registry/product-card-hover.json +4 -4
  83. package/dist/registry/product-card.json +4 -4
  84. package/dist/registry/product-detail-block.json +2 -2
  85. package/dist/registry/product-detail-page.json +4 -4
  86. package/dist/registry/product-detail-section.json +4 -4
  87. package/dist/registry/product-quick-view.json +4 -4
  88. package/dist/registry/products-page.json +4 -4
  89. package/dist/registry/reading-progress.json +4 -4
  90. package/dist/registry/register-page-split.json +4 -4
  91. package/dist/registry/register-page.json +4 -4
  92. package/dist/registry/related-posts-block.json +1 -1
  93. package/dist/registry/related-products-block.json +2 -2
  94. package/dist/registry/reset-password-page-split.json +4 -4
  95. package/dist/registry/reset-password-page.json +4 -4
  96. package/dist/registry/service-card.json +1 -1
  97. package/dist/registry/share-buttons.json +4 -4
  98. package/dist/registry/skill-card.json +1 -1
  99. package/dist/registry/team-page.json +4 -4
  100. package/dist/registry/terms-page.json +3 -3
  101. package/dist/registry/testimonials-carousel.json +4 -4
  102. package/dist/registry/testimonials-grid.json +4 -4
  103. package/dist/registry/timeline-section.json +4 -4
  104. package/dist/registry/verify-email-page.json +4 -4
  105. package/dist/registry/video-hero.json +4 -4
  106. package/dist/registry/youtube-embed.json +4 -4
  107. package/package.json +1 -1
  108. package/template/.env +5 -5
  109. package/template/README.md +54 -54
  110. package/template/eslint.config.js +41 -41
  111. package/template/index.html +237 -237
  112. package/template/package.json +96 -96
  113. package/template/public/_redirects +1 -1
  114. package/template/public/robots.txt +14 -14
  115. package/template/scripts/init-db.ts +18 -18
  116. package/template/src/App.tsx +21 -21
  117. package/template/src/components/FormField.tsx +48 -48
  118. package/template/src/components/FormFileInput.tsx +75 -75
  119. package/template/src/components/GoogleAnalytics.tsx +34 -34
  120. package/template/src/components/LanguageSwitcher.tsx +53 -53
  121. package/template/src/components/MetriaAnalytics.tsx +68 -68
  122. package/template/src/components/PasswordInput.tsx +60 -60
  123. package/template/src/components/ScriptInjector.tsx +62 -62
  124. package/template/src/components/Stack.tsx +39 -39
  125. package/template/src/constants/constants.json +71 -71
  126. package/template/src/db/index.ts +21 -21
  127. package/template/src/db/provider.tsx +106 -106
  128. package/template/src/db/schema.json +278 -278
  129. package/template/src/db/types.ts +195 -195
  130. package/template/src/hooks/use-debounced-value.ts +12 -12
  131. package/template/src/hooks/use-page-title.ts +55 -55
  132. package/template/src/lang/index.ts +90 -90
  133. package/template/src/lib/api.ts +345 -345
  134. package/template/src/lib/env.ts +19 -19
  135. package/template/src/router.tsx +14 -14
  136. package/template/src/vite-env.d.ts +1 -1
  137. package/template/vite.config.ts +194 -194
@@ -1,20 +1,20 @@
1
- // Environment değişkenlerini window'a export et
2
- declare global {
3
- interface Window {
4
- ENV: {
5
- [key: string]: any;
6
- };
7
- }
8
- }
9
-
10
- window.ENV = {
11
- ...Object.keys(import.meta.env)
12
- .filter((key) => key.startsWith('VITE_'))
13
- .reduce(
14
- (acc, key) => ({
15
- ...acc,
16
- [key]: import.meta.env[key],
17
- }),
18
- {},
19
- ),
1
+ // Environment değişkenlerini window'a export et
2
+ declare global {
3
+ interface Window {
4
+ ENV: {
5
+ [key: string]: any;
6
+ };
7
+ }
8
+ }
9
+
10
+ window.ENV = {
11
+ ...Object.keys(import.meta.env)
12
+ .filter((key) => key.startsWith('VITE_'))
13
+ .reduce(
14
+ (acc, key) => ({
15
+ ...acc,
16
+ [key]: import.meta.env[key],
17
+ }),
18
+ {},
19
+ ),
20
20
  };
@@ -1,14 +1,14 @@
1
- import { BrowserRouter, Routes, Route } from "react-router";
2
- import Index from "./pages/Index";
3
- import NotFound from "./pages/NotFound";
4
-
5
- export const Router = () => {
6
- return (
7
- <BrowserRouter>
8
- <Routes>
9
- <Route path="/" element={<Index />} />
10
- <Route path="*" element={<NotFound />} />
11
- </Routes>
12
- </BrowserRouter>
13
- );
14
- };
1
+ import { BrowserRouter, Routes, Route } from "react-router";
2
+ import Index from "./pages/Index";
3
+ import NotFound from "./pages/NotFound";
4
+
5
+ export const Router = () => {
6
+ return (
7
+ <BrowserRouter>
8
+ <Routes>
9
+ <Route path="/" element={<Index />} />
10
+ <Route path="*" element={<NotFound />} />
11
+ </Routes>
12
+ </BrowserRouter>
13
+ );
14
+ };
@@ -1 +1 @@
1
- /// <reference types="vite/client" />
1
+ /// <reference types="vite/client" />
@@ -1,194 +1,194 @@
1
- import fs from 'fs';
2
- import { createRequire } from 'module';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
- import tailwindcss from '@tailwindcss/vite';
6
- import react from '@vitejs/plugin-react';
7
- import { defineConfig, loadEnv, type Plugin } from 'vite';
8
- import { inspectorDebugger } from '@promakeai/inspector/plugin';
9
- import type { IncomingMessage } from 'http';
10
-
11
- // Plugin: Restart dev server when lang files are added or changed
12
- function langWatchPlugin(): Plugin {
13
- return {
14
- name: 'lang-watch',
15
- configureServer(server) {
16
- const handleLangFile = (file: string, event: string) => {
17
- const normalizedPath = file.replace(/\\/g, '/');
18
- const isModuleLang = normalizedPath.includes('/modules/') && normalizedPath.includes('/lang/');
19
- const isGlobalLang = normalizedPath.includes('/src/lang/');
20
-
21
- if ((isModuleLang || isGlobalLang) && file.endsWith('.json')) {
22
- const label = event === 'add' ? 'New translation file detected' : 'Translation file changed';
23
- console.log(`\n🌐 ${label}!`);
24
- console.log('🔄 Restarting server to load translations...\n');
25
- server.restart();
26
- }
27
- };
28
-
29
- server.watcher.on('add', (file) => handleLangFile(file, 'add'));
30
- server.watcher.on('change', (file) => handleLangFile(file, 'change'));
31
- },
32
- };
33
- }
34
-
35
- // Helper: Read request body
36
- function readBody(req: IncomingMessage): Promise<string> {
37
- return new Promise((resolve) => {
38
- let data = '';
39
- req.on('data', (chunk: string) => (data += chunk));
40
- req.on('end', () => resolve(data));
41
- });
42
- }
43
-
44
- // Plugin: Expose API for running promake commands from the panel
45
- function promakeApiPlugin(secret?: string): Plugin {
46
- const ALLOWED_COMMANDS = ['seo', 'theme'];
47
- const ALLOWED_ORIGINS = ['https://promake.ai', 'https://www.promake.ai'];
48
- const BASE_PATH = secret ? `/__promake/${secret}` : '/__promake';
49
-
50
- return {
51
- name: 'promake-api',
52
- configureServer(server) {
53
- server.middlewares.use(`${BASE_PATH}/run`, async (req, res) => {
54
- const origin = req.headers.origin || '';
55
- const allowedOrigin = ALLOWED_ORIGINS.includes(origin) ? origin : ALLOWED_ORIGINS[0];
56
- res.setHeader('Access-Control-Allow-Origin', allowedOrigin);
57
- res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
58
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
59
-
60
- if (req.method === 'OPTIONS') {
61
- res.statusCode = 204;
62
- res.end();
63
- return;
64
- }
65
-
66
- if (req.method !== 'POST') {
67
- res.statusCode = 405;
68
- res.end();
69
- return;
70
- }
71
-
72
- try {
73
- const body = await readBody(req);
74
- const { command, args = [] } = JSON.parse(body);
75
-
76
- if (!ALLOWED_COMMANDS.includes(command)) {
77
- res.statusCode = 400;
78
- res.setHeader('Content-Type', 'application/json');
79
- res.end(JSON.stringify({ error: `Command not allowed: ${command}` }));
80
- return;
81
- }
82
-
83
- const safeArgs = args.map((a: string) => `'${a.replace(/'/g, "'\\''")}'`).join(' ');
84
- const output = execSync(`promake ${command} ${safeArgs}`, {
85
- cwd: process.cwd(),
86
- encoding: 'utf-8',
87
- timeout: 15000,
88
- });
89
-
90
- res.setHeader('Content-Type', 'application/json');
91
- res.end(JSON.stringify({ ok: true, output }));
92
- } catch (e: any) {
93
- res.statusCode = 500;
94
- res.setHeader('Content-Type', 'application/json');
95
- res.end(JSON.stringify({ ok: false, error: e.message }));
96
- }
97
- });
98
- },
99
- };
100
- }
101
-
102
- // Plugin: Write installed package versions to src/constants/versions.json on dev server start
103
- function packageVersionsPlugin(): Plugin {
104
- return {
105
- name: 'package-versions',
106
- configureServer() {
107
- const root = process.cwd();
108
- const pkgJsonPath = path.join(root, 'package.json');
109
-
110
- if (!fs.existsSync(pkgJsonPath)) return;
111
-
112
- const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
113
-
114
- const require = createRequire(pkgJsonPath);
115
-
116
- const resolveVersions = (deps: Record<string, string> | undefined): Record<string, string> => {
117
- if (!deps) return {};
118
- const resolved: Record<string, string> = {};
119
- for (const name of Object.keys(deps)) {
120
- if (!name.startsWith('@promakeai/')) continue;
121
- try {
122
- const depPkgPath = require.resolve(`${name}/package.json`);
123
- const depPkg = JSON.parse(fs.readFileSync(depPkgPath, 'utf-8'));
124
- resolved[name] = depPkg.version;
125
- } catch {
126
- resolved[name] = deps[name];
127
- }
128
- }
129
- return resolved;
130
- };
131
-
132
- const versions = {
133
- generatedAt: new Date().toISOString(),
134
- packages: {
135
- ...resolveVersions(pkgJson.dependencies),
136
- ...resolveVersions(pkgJson.devDependencies),
137
- },
138
- };
139
-
140
- const outPath = path.join(root, 'versions.json');
141
- fs.writeFileSync(outPath, JSON.stringify(versions, null, 2) + '\n');
142
- console.log(`📦 Package versions written to versions.json`);
143
- },
144
- };
145
- }
146
-
147
- // https://vite.dev/config/
148
- export default defineConfig(({ mode }) => {
149
- const env = loadEnv(mode, process.cwd(), 'PROMAKE_');
150
-
151
- return {
152
- cacheDir: '/tmp/.vite-cache',
153
- optimizeDeps: {
154
- force: true,
155
- },
156
- plugins: [
157
- inspectorDebugger({ enabled: mode === 'development' }),
158
- react(),
159
- tailwindcss(),
160
- mode === 'development' && langWatchPlugin(),
161
- mode === 'development' && promakeApiPlugin(env.PROMAKE_SECRET),
162
- mode === 'development' && packageVersionsPlugin(),
163
- ].filter(Boolean),
164
- resolve: {
165
- alias: {
166
- '@': path.resolve(__dirname, './src'),
167
- },
168
- preserveSymlinks: true,
169
- },
170
- server: {
171
- host: '0.0.0.0',
172
- allowedHosts: true,
173
- hmr: false,
174
- port: 5174,
175
- watch: {
176
- usePolling: true,
177
- interval: 500,
178
- },
179
- headers: {
180
- 'Cache-Control': 'no-cache, no-store, must-revalidate',
181
- },
182
- },
183
- preview: {
184
- port: 4173,
185
- },
186
- build: {
187
- rollupOptions: {
188
- output: {
189
- manualChunks: undefined,
190
- },
191
- },
192
- },
193
- };
194
- });
1
+ import fs from 'fs';
2
+ import { createRequire } from 'module';
3
+ import path from 'path';
4
+ import { execSync } from 'child_process';
5
+ import tailwindcss from '@tailwindcss/vite';
6
+ import react from '@vitejs/plugin-react';
7
+ import { defineConfig, loadEnv, type Plugin } from 'vite';
8
+ import { inspectorDebugger } from '@promakeai/inspector/plugin';
9
+ import type { IncomingMessage } from 'http';
10
+
11
+ // Plugin: Restart dev server when lang files are added or changed
12
+ function langWatchPlugin(): Plugin {
13
+ return {
14
+ name: 'lang-watch',
15
+ configureServer(server) {
16
+ const handleLangFile = (file: string, event: string) => {
17
+ const normalizedPath = file.replace(/\\/g, '/');
18
+ const isModuleLang = normalizedPath.includes('/modules/') && normalizedPath.includes('/lang/');
19
+ const isGlobalLang = normalizedPath.includes('/src/lang/');
20
+
21
+ if ((isModuleLang || isGlobalLang) && file.endsWith('.json')) {
22
+ const label = event === 'add' ? 'New translation file detected' : 'Translation file changed';
23
+ console.log(`\n🌐 ${label}!`);
24
+ console.log('🔄 Restarting server to load translations...\n');
25
+ server.restart();
26
+ }
27
+ };
28
+
29
+ server.watcher.on('add', (file) => handleLangFile(file, 'add'));
30
+ server.watcher.on('change', (file) => handleLangFile(file, 'change'));
31
+ },
32
+ };
33
+ }
34
+
35
+ // Helper: Read request body
36
+ function readBody(req: IncomingMessage): Promise<string> {
37
+ return new Promise((resolve) => {
38
+ let data = '';
39
+ req.on('data', (chunk: string) => (data += chunk));
40
+ req.on('end', () => resolve(data));
41
+ });
42
+ }
43
+
44
+ // Plugin: Expose API for running promake commands from the panel
45
+ function promakeApiPlugin(secret?: string): Plugin {
46
+ const ALLOWED_COMMANDS = ['seo', 'theme'];
47
+ const BASE_PATH = secret ? `/__promake/${secret}` : '/__promake';
48
+
49
+ return {
50
+ name: 'promake-api',
51
+ configureServer(server) {
52
+ server.middlewares.use(`${BASE_PATH}/run`, async (req, res) => {
53
+ const origin = req.headers.origin || '*';
54
+ res.setHeader('Access-Control-Allow-Origin', origin);
55
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
56
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, Accept, Origin');
57
+ res.setHeader('Access-Control-Allow-Credentials', 'true');
58
+ res.setHeader('Access-Control-Max-Age', '86400');
59
+
60
+ if (req.method === 'OPTIONS') {
61
+ res.statusCode = 204;
62
+ res.end();
63
+ return;
64
+ }
65
+
66
+ if (req.method !== 'POST') {
67
+ res.statusCode = 405;
68
+ res.end();
69
+ return;
70
+ }
71
+
72
+ try {
73
+ const body = await readBody(req);
74
+ const { command, args = [] } = JSON.parse(body);
75
+
76
+ if (!ALLOWED_COMMANDS.includes(command)) {
77
+ res.statusCode = 400;
78
+ res.setHeader('Content-Type', 'application/json');
79
+ res.end(JSON.stringify({ error: `Command not allowed: ${command}` }));
80
+ return;
81
+ }
82
+
83
+ const safeArgs = args.map((a: string) => `'${a.replace(/'/g, "'\\''")}'`).join(' ');
84
+ const output = execSync(`promake ${command} ${safeArgs}`, {
85
+ cwd: process.cwd(),
86
+ encoding: 'utf-8',
87
+ timeout: 15000,
88
+ });
89
+
90
+ res.setHeader('Content-Type', 'application/json');
91
+ res.end(JSON.stringify({ ok: true, output }));
92
+ } catch (e: any) {
93
+ res.statusCode = 500;
94
+ res.setHeader('Content-Type', 'application/json');
95
+ res.end(JSON.stringify({ ok: false, error: e.message }));
96
+ }
97
+ });
98
+ },
99
+ };
100
+ }
101
+
102
+ // Plugin: Write installed package versions to src/constants/versions.json on dev server start
103
+ function packageVersionsPlugin(): Plugin {
104
+ return {
105
+ name: 'package-versions',
106
+ configureServer() {
107
+ const root = process.cwd();
108
+ const pkgJsonPath = path.join(root, 'package.json');
109
+
110
+ if (!fs.existsSync(pkgJsonPath)) return;
111
+
112
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
113
+
114
+ const require = createRequire(pkgJsonPath);
115
+
116
+ const resolveVersions = (deps: Record<string, string> | undefined): Record<string, string> => {
117
+ if (!deps) return {};
118
+ const resolved: Record<string, string> = {};
119
+ for (const name of Object.keys(deps)) {
120
+ if (!name.startsWith('@promakeai/')) continue;
121
+ try {
122
+ const depPkgPath = require.resolve(`${name}/package.json`);
123
+ const depPkg = JSON.parse(fs.readFileSync(depPkgPath, 'utf-8'));
124
+ resolved[name] = depPkg.version;
125
+ } catch {
126
+ resolved[name] = deps[name];
127
+ }
128
+ }
129
+ return resolved;
130
+ };
131
+
132
+ const versions = {
133
+ generatedAt: new Date().toISOString(),
134
+ packages: {
135
+ ...resolveVersions(pkgJson.dependencies),
136
+ ...resolveVersions(pkgJson.devDependencies),
137
+ },
138
+ };
139
+
140
+ const outPath = path.join(root, 'versions.json');
141
+ fs.writeFileSync(outPath, JSON.stringify(versions, null, 2) + '\n');
142
+ console.log(`📦 Package versions written to versions.json`);
143
+ },
144
+ };
145
+ }
146
+
147
+ // https://vite.dev/config/
148
+ export default defineConfig(({ mode }) => {
149
+ const env = loadEnv(mode, process.cwd(), 'PROMAKE_');
150
+
151
+ return {
152
+ cacheDir: '/tmp/.vite-cache',
153
+ optimizeDeps: {
154
+ force: true,
155
+ },
156
+ plugins: [
157
+ inspectorDebugger({ enabled: mode === 'development' }),
158
+ react(),
159
+ tailwindcss(),
160
+ mode === 'development' && langWatchPlugin(),
161
+ mode === 'development' && promakeApiPlugin(env.PROMAKE_SECRET),
162
+ mode === 'development' && packageVersionsPlugin(),
163
+ ].filter(Boolean),
164
+ resolve: {
165
+ alias: {
166
+ '@': path.resolve(__dirname, './src'),
167
+ },
168
+ preserveSymlinks: true,
169
+ },
170
+ server: {
171
+ host: '0.0.0.0',
172
+ allowedHosts: true,
173
+ hmr: false,
174
+ port: 5174,
175
+ watch: {
176
+ usePolling: true,
177
+ interval: 500,
178
+ },
179
+ headers: {
180
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
181
+ },
182
+ },
183
+ preview: {
184
+ port: 4173,
185
+ },
186
+ build: {
187
+ rollupOptions: {
188
+ output: {
189
+ manualChunks: undefined,
190
+ },
191
+ },
192
+ },
193
+ };
194
+ });