create-frootjs 1.0.7 → 1.0.9

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.
@@ -1,12 +1,13 @@
1
1
  /**
2
- * Fullstack JSX & Server-Side Rendering (SSR) Template
3
- * Native JSX components rendered on the server with zero client JavaScript overhead.
2
+ * Fullstack Next.js Alternative Template
3
+ * Powered by @froot/fullstack, Froot Core, and Preact.
4
+ * Features nested layouts, dynamic routes, Preact SSR, SSG, and Markdown content.
4
5
  */
5
- import { COMMON_GITIGNORE, COMMON_TSCONFIG } from './types.js';
6
+ import { COMMON_GITIGNORE } from './types.js';
6
7
  export const fullstackTemplate = {
7
8
  id: 'fullstack',
8
- name: 'Fullstack',
9
- description: 'Server-rendered JSX views',
9
+ name: 'Fullstack (Next.js Alternative)',
10
+ description: 'Next.js alternative with Preact SSR, nested layouts, SSG & Markdown',
10
11
  generate: (projectName) => {
11
12
  return {
12
13
  'package.json': JSON.stringify({
@@ -16,10 +17,14 @@ export const fullstackTemplate = {
16
17
  scripts: {
17
18
  dev: 'tsx watch src/server.tsx',
18
19
  build: 'tsc',
20
+ 'build:static': 'tsx src/build.ts',
19
21
  start: 'node dist/server.js',
20
22
  },
21
23
  dependencies: {
22
- frootjs: '^1.0.2',
24
+ 'froot-fullstack': '^1.0.0',
25
+ frootjs: '^1.0.5',
26
+ preact: '^11.1.0',
27
+ 'preact-render-to-string': '^6.8.2',
23
28
  },
24
29
  devDependencies: {
25
30
  '@types/node': '^22.10.0',
@@ -27,17 +32,44 @@ export const fullstackTemplate = {
27
32
  typescript: '^5.8.0',
28
33
  },
29
34
  }, null, 2) + '\n',
30
- 'tsconfig.json': COMMON_TSCONFIG,
35
+ 'tsconfig.json': `{
36
+ "compilerOptions": {
37
+ "target": "ES2024",
38
+ "module": "NodeNext",
39
+ "moduleResolution": "NodeNext",
40
+ "lib": ["ES2024", "DOM", "DOM.Iterable"],
41
+ "declaration": true,
42
+ "declarationMap": true,
43
+ "sourceMap": true,
44
+ "outDir": "./dist",
45
+ "rootDir": "./src",
46
+ "strict": true,
47
+ "noImplicitAny": true,
48
+ "strictNullChecks": true,
49
+ "skipLibCheck": true,
50
+ "forceConsistentCasingInFileNames": true,
51
+ "jsx": "react-jsx",
52
+ "jsxImportSource": "preact"
53
+ },
54
+ "include": ["src/**/*"],
55
+ "exclude": ["node_modules", "dist"]
56
+ }
57
+ `,
31
58
  '.gitignore': COMMON_GITIGNORE,
32
59
  'README.md': `# ${projectName}
33
60
 
34
- Froot application built with the **Fullstack JSX & Server-Side Rendering (SSR)** pattern.
61
+ High-performance **Next.js alternative** powered by **Froot Framework** and **Preact**.
35
62
 
36
63
  ## Features
37
64
 
38
- - **Native JSX / TSX**: Pure server-rendered JSX without React runtime baggage
39
- - **Layout Middleware**: Automatic HTML wrapper layout with \`jsxRenderer()\`
40
- - **Zero Client JS**: Ultra-fast initial page loads and 100% SEO-friendly markup
65
+ - ⚡ **Ultra-Fast Throughput**: 120,000+ req/sec powered by Froot's monomorphic V8 engine.
66
+ - ⚛️ **Native Preact SSR**: Lightweight 3kB component runtime without React baggage.
67
+ - 📂 **Next.js-style Architecture**:
68
+ - Nested layout system (\`router.layout('/docs', ...)\`)
69
+ - Dynamic route dispatch with typed parameters (\`/docs/:slug?\`)
70
+ - Distinct layouts (e.g. landing page with navbar vs documentation with left sidebar and no navbar)
71
+ - 🚀 **Static Site Generation (SSG)**: Prerender static pages and dynamic routes with \`generateStaticParams()\`.
72
+ - 📝 **Built-in Markdown Engine**: Next.js MDX/Contentlayer alternative with zero dependencies.
41
73
 
42
74
  ## Getting Started
43
75
 
@@ -48,175 +80,291 @@ pnpm install
48
80
  # 2. Run in development mode
49
81
  pnpm run dev
50
82
 
51
- # 3. View in browser
83
+ # 3. Prerender static site (SSG)
84
+ pnpm run build:static
85
+
86
+ # 4. View in browser
52
87
  http://localhost:3000
53
88
  \`\`\`
54
89
  `,
55
- 'src/components/Layout.tsx': `import type { FC, PropsWithChildren } from 'frootjs/jsx';
90
+ 'content/docs/overview.md': `---
91
+ title: Overview
92
+ category: Getting Started
93
+ summary: Introduction to the Froot Fullstack Next.js Alternative architecture.
94
+ ---
95
+
96
+ Welcome to **Froot Fullstack**, the high-performance Next.js alternative powered by Preact and Froot.
97
+
98
+ ## Design Principles
99
+
100
+ - **Monomorphic V8 Execution:** Minimal memory overhead and maximum throughput.
101
+ - **Preact Server-Side Rendering:** Clean JSX syntax with sub-millisecond render times.
102
+ - **Nested Layouts:** Dedicated layouts for different application sections (e.g. docs vs marketing).
103
+ `,
104
+ 'content/docs/quickstart.md': `---
105
+ title: Quickstart
106
+ category: Getting Started
107
+ summary: Build your first fullstack application in seconds.
108
+ ---
109
+
110
+ Create routes, compose Preact components, and serve HTML with extreme performance.
56
111
 
57
- export interface LayoutProps {
112
+ ## Adding Routes
113
+
114
+ Edit \`src/server.tsx\` to register your pages:
115
+
116
+ \`\`\`tsx
117
+ router.page('/about', () => <AboutPage />);
118
+ \`\`\`
119
+ `,
120
+ 'src/layouts/RootLayout.tsx': `import type { ComponentChildren } from 'preact';
121
+
122
+ export interface RootLayoutProps {
58
123
  title?: string;
124
+ description?: string;
125
+ children: ComponentChildren;
59
126
  }
60
127
 
61
- export const Layout: FC<PropsWithChildren<LayoutProps>> = ({ title = 'Froot JSX App', children }) => {
128
+ export function RootLayout({
129
+ title = 'Froot Fullstack App',
130
+ description = 'High-performance Next.js alternative powered by Froot and Preact',
131
+ children,
132
+ }: RootLayoutProps) {
62
133
  return (
63
- <html lang="en">
134
+ <html lang="en" class="dark scroll-smooth">
64
135
  <head>
65
136
  <meta charSet="UTF-8" />
66
137
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
67
138
  <title>{title}</title>
68
- <style>{\`
69
- * { box-sizing: border-box; margin: 0; padding: 0; }
70
- body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: #0f172a; color: #f8fafc; line-height: 1.6; }
71
- header { background: #1e293b; border-bottom: 1px solid #334155; padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; }
72
- .logo { font-size: 1.3rem; font-weight: bold; color: #10b981; text-decoration: none; }
73
- nav a { color: #94a3b8; text-decoration: none; margin-left: 1.5rem; font-weight: 500; }
74
- nav a:hover { color: #f8fafc; }
75
- main { max-width: 900px; margin: 2rem auto; padding: 0 1.5rem; }
76
- footer { text-align: center; padding: 2rem; color: #64748b; font-size: 0.9rem; border-top: 1px solid #1e293b; margin-top: 4rem; }
77
- \`}</style>
139
+ <meta name="description" content={description} />
140
+ <script src="https://cdn.tailwindcss.com"></script>
141
+ <script dangerouslySetInnerHTML={{
142
+ __html: \`
143
+ tailwind.config = {
144
+ darkMode: 'class',
145
+ theme: {
146
+ extend: {
147
+ colors: {
148
+ froot: { 400: '#34d399', 500: '#10b981', 600: '#059669' }
149
+ }
150
+ }
151
+ }
152
+ };
153
+ \`
154
+ }} />
78
155
  </head>
79
- <body>
80
- <header>
81
- <a href="/" className="logo">Froot JSX</a>
82
- <nav>
83
- <a href="/">Home</a>
84
- <a href="/about">About</a>
85
- <a href="/features">Features</a>
86
- </nav>
87
- </header>
88
- <main>{children}</main>
89
- <footer>
90
- <p>Powered by Froot Server-Side Rendering Engine</p>
91
- </footer>
156
+ <body class="bg-slate-950 text-slate-100 font-sans min-h-screen antialiased">
157
+ {children}
92
158
  </body>
93
159
  </html>
94
160
  );
95
- };
161
+ }
96
162
  `,
97
- 'src/components/Card.tsx': `import type { FC, PropsWithChildren } from 'frootjs/jsx';
163
+ 'src/layouts/DocsLayout.tsx': `import type { ComponentChildren } from 'preact';
98
164
 
99
- export interface CardProps {
100
- title: string;
101
- badge?: string;
165
+ export interface DocsLayoutProps {
166
+ currentPath: string;
167
+ children: ComponentChildren;
102
168
  }
103
169
 
104
- export const Card: FC<PropsWithChildren<CardProps>> = ({ title, badge, children }) => {
170
+ export function DocsLayout({ currentPath, children }: DocsLayoutProps) {
171
+ const links = [
172
+ { href: '/docs', title: 'Overview' },
173
+ { href: '/docs/quickstart', title: 'Quickstart' },
174
+ ];
175
+
105
176
  return (
106
- <div style={{
107
- background: '#1e293b',
108
- border: '1px solid #334155',
109
- borderRadius: '8px',
110
- padding: '1.5rem',
111
- marginBottom: '1.25rem',
112
- }}>
113
- <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '0.75rem' }}>
114
- <h3 style={{ color: '#38bdf8', fontSize: '1.2rem' }}>{title}</h3>
115
- {badge ? (
116
- <span style={{
117
- background: '#064e3b',
118
- color: '#34d399',
119
- fontSize: '0.75rem',
120
- padding: '0.2rem 0.6rem',
121
- borderRadius: '9999px',
122
- fontWeight: 600,
123
- }}>
124
- {badge}
125
- </span>
126
- ) : null}
127
- </div>
128
- <div>{children}</div>
177
+ <div class="flex min-h-screen">
178
+ {/* NO NAVBAR ON DOCS! Left sidebar handles all navigation */}
179
+ <aside class="w-72 bg-slate-900 border-r border-slate-800 p-6 flex flex-col">
180
+ <a href="/" class="text-base font-bold text-white mb-6 flex items-center gap-2">
181
+ <span>🍏</span>
182
+ <span>Froot<span class="text-emerald-400">.ts</span></span>
183
+ <span class="text-[10px] bg-emerald-500/10 text-emerald-400 px-1.5 py-0.5 rounded border border-emerald-500/20">DOCS</span>
184
+ </a>
185
+
186
+ <div class="text-xs font-semibold text-slate-400 uppercase tracking-wider mb-3">
187
+ Getting Started
188
+ </div>
189
+
190
+ <nav class="space-y-1">
191
+ {links.map((link) => {
192
+ const isActive = currentPath === link.href || (link.href === '/docs' && currentPath === '/docs/overview');
193
+ const cls = isActive
194
+ ? 'bg-emerald-500/10 text-emerald-400 font-semibold border-l-2 border-emerald-400 pl-2.5'
195
+ : 'text-slate-400 hover:text-white hover:bg-slate-800/60';
196
+
197
+ return (
198
+ <a
199
+ key={link.href}
200
+ href={link.href}
201
+ class={\`block px-3 py-2 text-xs rounded-lg transition-colors \${cls}\`}
202
+ >
203
+ {link.title}
204
+ </a>
205
+ );
206
+ })}
207
+ </nav>
208
+
209
+ <div class="mt-auto pt-6 border-t border-slate-800 text-xs text-slate-400">
210
+ <a href="/" class="hover:text-emerald-400 transition-colors">&larr; Back to Home</a>
211
+ </div>
212
+ </aside>
213
+
214
+ {/* Main Document Body */}
215
+ <main class="flex-1 max-w-4xl px-8 py-10">
216
+ {children}
217
+ </main>
129
218
  </div>
130
219
  );
131
- };
220
+ }
132
221
  `,
133
- 'src/pages/Home.tsx': `import type { FC } from 'frootjs/jsx';
134
- import { Card } from '../components/Card.js';
135
-
136
- export const HomePage: FC = () => {
222
+ 'src/pages/HomePage.tsx': `export function HomePage() {
137
223
  return (
138
224
  <div>
139
- <div style={{ marginBottom: '2rem' }}>
140
- <h1 style={{ fontSize: '2.25rem', color: '#10b981', marginBottom: '0.5rem' }}>
141
- Server-Side Rendered JSX
142
- </h1>
143
- <p style={{ color: '#94a3b8', fontSize: '1.1rem' }}>
144
- Blazing fast HTML generated on the server with TypeScript-native JSX components.
145
- </p>
146
- </div>
225
+ {/* Top Navbar on Landing Page */}
226
+ <header class="border-b border-slate-800 bg-slate-900/60 backdrop-blur-md sticky top-0 z-50">
227
+ <div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
228
+ <a href="/" class="flex items-center gap-2 font-bold text-white">
229
+ <span class="text-xl">🍏</span>
230
+ <span>Froot<span class="text-emerald-400">.ts</span></span>
231
+ </a>
232
+ <nav class="flex items-center gap-6 text-sm text-slate-300">
233
+ <a href="#features" class="hover:text-emerald-400 transition-colors">Features</a>
234
+ <a href="/docs" class="text-emerald-400 hover:text-emerald-300 font-semibold">Docs &rarr;</a>
235
+ </nav>
236
+ </div>
237
+ </header>
238
+
239
+ {/* Hero Section */}
240
+ <main class="max-w-5xl mx-auto px-6 py-20 text-center">
241
+ <div class="inline-block px-3 py-1 mb-6 text-xs font-semibold text-emerald-400 bg-emerald-500/10 border border-emerald-500/20 rounded-full">
242
+ Next.js Alternative • Preact SSR • Monomorphic V8
243
+ </div>
147
244
 
148
- <Card title="Zero Client Runtime" badge="Performance">
149
- <p>No heavy virtual DOM diffing in the browser. Pure, pre-rendered semantic HTML delivered instantly.</p>
150
- </Card>
245
+ <h1 class="text-5xl font-extrabold tracking-tight text-white mb-6">
246
+ High-Performance <span class="text-emerald-400">Fullstack Web Engine</span>
247
+ </h1>
151
248
 
152
- <Card title="Type-Safe Views" badge="DX">
153
- <p>Full TypeScript compiler checking for props, children, styles, and HTML attributes.</p>
154
- </Card>
249
+ <p class="text-lg text-slate-300 max-w-2xl mx-auto mb-10 leading-relaxed">
250
+ Engineered for extreme throughput, nested layout architecture, and zero-allocation dynamic routing.
251
+ </p>
155
252
 
156
- <Card title="Streaming & Islands Ready" badge="Architecture">
157
- <p>Seamlessly compose asynchronous server components and stream output as it becomes available.</p>
158
- </Card>
253
+ <div class="flex items-center justify-center gap-4">
254
+ <a
255
+ href="/docs"
256
+ class="px-6 py-3 rounded-xl font-semibold bg-emerald-500 text-slate-950 hover:bg-emerald-400 transition-colors shadow-lg shadow-emerald-500/20"
257
+ >
258
+ Explore Documentation
259
+ </a>
260
+ </div>
261
+ </main>
159
262
  </div>
160
263
  );
161
- };
264
+ }
162
265
  `,
163
- 'src/pages/About.tsx': `import type { FC } from 'frootjs/jsx';
266
+ 'src/pages/DocsPage.tsx': `export interface DocsPageProps {
267
+ title: string;
268
+ category: string;
269
+ contentHtml: string;
270
+ }
164
271
 
165
- export const AboutPage: FC = () => {
272
+ export function DocsPage({ title, category, contentHtml }: DocsPageProps) {
166
273
  return (
167
- <div style={{ background: '#1e293b', padding: '2rem', borderRadius: '8px', border: '1px solid #334155' }}>
168
- <h1 style={{ color: '#10b981', marginBottom: '1rem' }}>About This Application</h1>
169
- <p style={{ marginBottom: '1rem' }}>
170
- This project showcases Froot's built-in JSX rendering pipeline. Unlike traditional React or Next.js setups,
171
- Froot renders JSX straight to HTML strings without requiring React, ReactDOM, or a Node.js bundling step.
172
- </p>
173
- <p style={{ color: '#94a3b8' }}>
174
- It achieves sub-millisecond page render times while maintaining full component composition.
175
- </p>
274
+ <div>
275
+ <div class="text-xs font-mono text-emerald-400 mb-2 uppercase tracking-wider">
276
+ {category}
277
+ </div>
278
+ <h1 class="text-3xl font-extrabold text-white mb-6">{title}</h1>
279
+ <article
280
+ class="prose prose-invert max-w-none text-slate-300 leading-relaxed"
281
+ dangerouslySetInnerHTML={{ __html: contentHtml }}
282
+ />
176
283
  </div>
177
284
  );
178
- };
285
+ }
179
286
  `,
180
- 'src/server.tsx': `import { Froot } from 'frootjs';
181
- import { jsxRenderer } from 'frootjs/jsx';
182
- import { Layout } from './components/Layout.js';
183
- import { HomePage } from './pages/Home.js';
184
- import { AboutPage } from './pages/About.js';
287
+ 'src/server.tsx': `import * as path from 'node:path';
288
+ import { fileURLToPath } from 'node:url';
289
+ import { Froot } from 'frootjs';
290
+ import { createAppRouter, renderMarkdownFile } from 'froot-fullstack';
291
+ import { RootLayout } from './layouts/RootLayout.js';
292
+ import { DocsLayout } from './layouts/DocsLayout.js';
293
+ import { HomePage } from './pages/HomePage.js';
294
+ import { DocsPage } from './pages/DocsPage.js';
185
295
 
186
- export const app = new Froot();
187
-
188
- // Wrap all HTML responses in the global Layout shell
189
- app.use('*', jsxRenderer(({ children }) => {
190
- return <Layout>{children}</Layout>;
191
- }));
296
+ const __filename = fileURLToPath(import.meta.url);
297
+ const __dirname = path.dirname(__filename);
192
298
 
193
- // Route handlers
194
- app.get('/', (c) => {
195
- return c.render(<HomePage />);
196
- });
299
+ export const app = new Froot();
300
+ export const router = createAppRouter(app);
197
301
 
198
- app.get('/about', (c) => {
199
- return c.render(<AboutPage />);
302
+ // 1. Docs Layout (NO TOP NAVBAR, left sidebar only)
303
+ router.layout('/docs', ({ children, currentPath }) => {
304
+ return (
305
+ <RootLayout title="Documentation — Froot Fullstack">
306
+ <DocsLayout currentPath={currentPath}>
307
+ {children}
308
+ </DocsLayout>
309
+ </RootLayout>
310
+ );
200
311
  });
201
312
 
202
- app.get('/features', (c) => {
203
- return c.render(
204
- <div>
205
- <h1 style={{ color: '#10b981', marginBottom: '1rem' }}>Framework Features</h1>
206
- <ul style={{ paddingLeft: '1.5rem', color: '#cbd5e1' }}>
207
- <li>RADIX tree router with O(K) lookup</li>
208
- <li>Auto-generated OpenAPI 3.1 & Scalar docs</li>
209
- <li>Native JSX & async component support</li>
210
- <li>Full WebCrypto authentication ecosystem</li>
211
- <li>Universal WebSockets & pub/sub hub</li>
212
- </ul>
213
- </div>
313
+ // 2. Landing Page Route (with top navbar)
314
+ router.page('/', () => {
315
+ return (
316
+ <RootLayout title="Froot Fullstack — Next.js Alternative">
317
+ <HomePage />
318
+ </RootLayout>
214
319
  );
215
320
  });
216
321
 
217
- const PORT = Number(process.env.PORT) || 3000;
322
+ // 3. Dynamic Documentation Route (/docs and /docs/:slug)
323
+ router.page(
324
+ '/docs/:slug?',
325
+ async ({ params }) => {
326
+ const slug = params['slug'] || 'overview';
327
+ const docPath = path.resolve(__dirname, \`../content/docs/\${slug}.md\`);
328
+ const { frontmatter, html } = await renderMarkdownFile(docPath);
329
+
330
+ return (
331
+ <DocsPage
332
+ title={frontmatter['title'] || slug}
333
+ category={frontmatter['category'] || 'Documentation'}
334
+ contentHtml={html}
335
+ />
336
+ );
337
+ },
338
+ {
339
+ generateStaticParams: () => [{ slug: 'overview' }, { slug: 'quickstart' }],
340
+ }
341
+ );
342
+
343
+ const PORT = Number(process.env['PORT'] || 3000);
218
344
  app.listen(PORT, () => {
219
- console.log(\`Fullstack JSX server running on http://localhost:\${PORT}\`);
345
+ console.log(\`🍏 Froot Fullstack server running at http://localhost:\${PORT}\`);
346
+ });
347
+ `,
348
+ 'src/build.ts': `/**
349
+ * Static Site Generation (SSG) Builder
350
+ */
351
+ import * as path from 'node:path';
352
+ import { fileURLToPath } from 'node:url';
353
+ import { router } from './server.js';
354
+
355
+ const __filename = fileURLToPath(import.meta.url);
356
+ const __dirname = path.dirname(__filename);
357
+ const outDir = path.resolve(__dirname, '../dist/static');
358
+
359
+ async function build() {
360
+ console.log('🍏 Building static site with @froot/fullstack...');
361
+ const result = await router.exportStatic({ outDir });
362
+ console.log(\`✅ Export complete in \${result.durationMs}ms: \${result.renderedRoutes.length} routes pre-rendered.\`);
363
+ }
364
+
365
+ build().catch((err) => {
366
+ console.error('❌ Build failed:', err);
367
+ process.exit(1);
220
368
  });
221
369
  `,
222
370
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fullstack.js","sourceRoot":"","sources":["../../src/templates/fullstack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAuC,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,2BAA2B;IACxC,QAAQ,EAAE,CAAC,WAAmB,EAAmB,EAAE;QACjD,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP,GAAG,EAAE,0BAA0B;oBAC/B,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,qBAAqB;iBAC7B;gBACD,YAAY,EAAE;oBACZ,OAAO,EAAE,QAAQ;iBAClB;gBACD,eAAe,EAAE;oBACf,aAAa,EAAE,UAAU;oBACzB,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,QAAQ;iBACrB;aACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;YAER,eAAe,EAAE,eAAe;YAChC,YAAY,EAAE,gBAAgB;YAE9B,WAAW,EAAE,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;CAsBlC;YAEK,2BAA2B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyClC;YAEK,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmChC;YAEK,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B3B;YAEK,qBAAqB,EAAE;;;;;;;;;;;;;;;;CAgB5B;YAEK,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCvB;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"fullstack.js","sourceRoot":"","sources":["../../src/templates/fullstack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAuC,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnF,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,iCAAiC;IACvC,WAAW,EAAE,qEAAqE;IAClF,QAAQ,EAAE,CAAC,WAAmB,EAAmB,EAAE;QACjD,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP,GAAG,EAAE,0BAA0B;oBAC/B,KAAK,EAAE,KAAK;oBACZ,cAAc,EAAE,kBAAkB;oBAClC,KAAK,EAAE,qBAAqB;iBAC7B;gBACD,YAAY,EAAE;oBACZ,iBAAiB,EAAE,QAAQ;oBAC3B,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,SAAS;oBACjB,yBAAyB,EAAE,QAAQ;iBACpC;gBACD,eAAe,EAAE;oBACf,aAAa,EAAE,UAAU;oBACzB,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,QAAQ;iBACrB;aACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;YAER,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBtB;YACK,YAAY,EAAE,gBAAgB;YAE9B,WAAW,EAAE,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BlC;YAEK,0BAA0B,EAAE;;;;;;;;;;;;;CAajC;YAEK,4BAA4B,EAAE;;;;;;;;;;;;;;;CAenC;YAEK,4BAA4B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CnC;YAEK,4BAA4B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DnC;YAEK,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C/B;YAEK,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;CAoB/B;YAEK,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DvB;YAEK,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;CAqBrB;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "create-frootjs",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "Interactive CLI generator for scaffolding high-performance Froot applications",
5
5
  "type": "module",
6
6
  "bin": {
7
- "create-frootjs": "./dist/index.js",
8
- "create-froot": "./dist/index.js"
7
+ "create-frootjs": "dist/index.js",
8
+ "create-froot": "dist/index.js"
9
9
  },
10
10
  "main": "./dist/index.js",
11
11
  "types": "./dist/index.d.ts",