@intentsolutions/blueprint 2.6.0 → 2.8.0
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/dist/analytics/collector.d.ts +73 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +239 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/dashboard.d.ts +62 -0
- package/dist/analytics/dashboard.d.ts.map +1 -0
- package/dist/analytics/dashboard.js +346 -0
- package/dist/analytics/dashboard.js.map +1 -0
- package/dist/analytics/index.d.ts +75 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +115 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/types.d.ts +169 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +16 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/cli.js +359 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/analytics.d.ts +38 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +196 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/index.d.ts +26 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +101 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/marketplace.d.ts +52 -0
- package/dist/commands/marketplace.d.ts.map +1 -0
- package/dist/commands/marketplace.js +356 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/enterprise/api/index.d.ts +8 -0
- package/dist/enterprise/api/index.d.ts.map +1 -0
- package/dist/enterprise/api/index.js +8 -0
- package/dist/enterprise/api/index.js.map +1 -0
- package/dist/enterprise/api/server.d.ts +79 -0
- package/dist/enterprise/api/server.d.ts.map +1 -0
- package/dist/enterprise/api/server.js +468 -0
- package/dist/enterprise/api/server.js.map +1 -0
- package/dist/enterprise/api/types.d.ts +269 -0
- package/dist/enterprise/api/types.d.ts.map +1 -0
- package/dist/enterprise/api/types.js +6 -0
- package/dist/enterprise/api/types.js.map +1 -0
- package/dist/enterprise/api/webhooks.d.ts +214 -0
- package/dist/enterprise/api/webhooks.d.ts.map +1 -0
- package/dist/enterprise/api/webhooks.js +308 -0
- package/dist/enterprise/api/webhooks.js.map +1 -0
- package/dist/enterprise/index.d.ts +9 -0
- package/dist/enterprise/index.d.ts.map +1 -0
- package/dist/enterprise/index.js +13 -0
- package/dist/enterprise/index.js.map +1 -0
- package/dist/enterprise/models/claude.d.ts +23 -0
- package/dist/enterprise/models/claude.d.ts.map +1 -0
- package/dist/enterprise/models/claude.js +176 -0
- package/dist/enterprise/models/claude.js.map +1 -0
- package/dist/enterprise/models/gemini.d.ts +25 -0
- package/dist/enterprise/models/gemini.d.ts.map +1 -0
- package/dist/enterprise/models/gemini.js +199 -0
- package/dist/enterprise/models/gemini.js.map +1 -0
- package/dist/enterprise/models/index.d.ts +11 -0
- package/dist/enterprise/models/index.d.ts.map +1 -0
- package/dist/enterprise/models/index.js +11 -0
- package/dist/enterprise/models/index.js.map +1 -0
- package/dist/enterprise/models/ollama.d.ts +32 -0
- package/dist/enterprise/models/ollama.d.ts.map +1 -0
- package/dist/enterprise/models/ollama.js +285 -0
- package/dist/enterprise/models/ollama.js.map +1 -0
- package/dist/enterprise/models/openai.d.ts +27 -0
- package/dist/enterprise/models/openai.d.ts.map +1 -0
- package/dist/enterprise/models/openai.js +222 -0
- package/dist/enterprise/models/openai.js.map +1 -0
- package/dist/enterprise/models/registry.d.ts +101 -0
- package/dist/enterprise/models/registry.d.ts.map +1 -0
- package/dist/enterprise/models/registry.js +263 -0
- package/dist/enterprise/models/registry.js.map +1 -0
- package/dist/enterprise/models/types.d.ts +141 -0
- package/dist/enterprise/models/types.d.ts.map +1 -0
- package/dist/enterprise/models/types.js +40 -0
- package/dist/enterprise/models/types.js.map +1 -0
- package/dist/enterprise/team/audit.d.ts +153 -0
- package/dist/enterprise/team/audit.d.ts.map +1 -0
- package/dist/enterprise/team/audit.js +346 -0
- package/dist/enterprise/team/audit.js.map +1 -0
- package/dist/enterprise/team/config.d.ts +83 -0
- package/dist/enterprise/team/config.d.ts.map +1 -0
- package/dist/enterprise/team/config.js +245 -0
- package/dist/enterprise/team/config.js.map +1 -0
- package/dist/enterprise/team/index.d.ts +7 -0
- package/dist/enterprise/team/index.d.ts.map +1 -0
- package/dist/enterprise/team/index.js +7 -0
- package/dist/enterprise/team/index.js.map +1 -0
- package/dist/enterprise/templates/engine.d.ts +100 -0
- package/dist/enterprise/templates/engine.d.ts.map +1 -0
- package/dist/enterprise/templates/engine.js +429 -0
- package/dist/enterprise/templates/engine.js.map +1 -0
- package/dist/enterprise/templates/index.d.ts +8 -0
- package/dist/enterprise/templates/index.d.ts.map +1 -0
- package/dist/enterprise/templates/index.js +8 -0
- package/dist/enterprise/templates/index.js.map +1 -0
- package/dist/enterprise/templates/loader.d.ts +65 -0
- package/dist/enterprise/templates/loader.d.ts.map +1 -0
- package/dist/enterprise/templates/loader.js +269 -0
- package/dist/enterprise/templates/loader.js.map +1 -0
- package/dist/enterprise/templates/types.d.ts +212 -0
- package/dist/enterprise/templates/types.d.ts.map +1 -0
- package/dist/enterprise/templates/types.js +55 -0
- package/dist/enterprise/templates/types.js.map +1 -0
- package/dist/marketplace/index.d.ts +86 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +112 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/manager.d.ts +81 -0
- package/dist/marketplace/manager.d.ts.map +1 -0
- package/dist/marketplace/manager.js +292 -0
- package/dist/marketplace/manager.js.map +1 -0
- package/dist/marketplace/packs/fastapi.d.ts +8 -0
- package/dist/marketplace/packs/fastapi.d.ts.map +1 -0
- package/dist/marketplace/packs/fastapi.js +728 -0
- package/dist/marketplace/packs/fastapi.js.map +1 -0
- package/dist/marketplace/packs/fintech.d.ts +8 -0
- package/dist/marketplace/packs/fintech.d.ts.map +1 -0
- package/dist/marketplace/packs/fintech.js +366 -0
- package/dist/marketplace/packs/fintech.js.map +1 -0
- package/dist/marketplace/packs/gdpr.d.ts +8 -0
- package/dist/marketplace/packs/gdpr.d.ts.map +1 -0
- package/dist/marketplace/packs/gdpr.js +637 -0
- package/dist/marketplace/packs/gdpr.js.map +1 -0
- package/dist/marketplace/packs/healthtech.d.ts +8 -0
- package/dist/marketplace/packs/healthtech.d.ts.map +1 -0
- package/dist/marketplace/packs/healthtech.js +470 -0
- package/dist/marketplace/packs/healthtech.js.map +1 -0
- package/dist/marketplace/packs/hipaa.d.ts +8 -0
- package/dist/marketplace/packs/hipaa.d.ts.map +1 -0
- package/dist/marketplace/packs/hipaa.js +473 -0
- package/dist/marketplace/packs/hipaa.js.map +1 -0
- package/dist/marketplace/packs/index.d.ts +250 -0
- package/dist/marketplace/packs/index.d.ts.map +1 -0
- package/dist/marketplace/packs/index.js +205 -0
- package/dist/marketplace/packs/index.js.map +1 -0
- package/dist/marketplace/packs/nextjs.d.ts +8 -0
- package/dist/marketplace/packs/nextjs.d.ts.map +1 -0
- package/dist/marketplace/packs/nextjs.js +532 -0
- package/dist/marketplace/packs/nextjs.js.map +1 -0
- package/dist/marketplace/packs/rails.d.ts +8 -0
- package/dist/marketplace/packs/rails.d.ts.map +1 -0
- package/dist/marketplace/packs/rails.js +866 -0
- package/dist/marketplace/packs/rails.js.map +1 -0
- package/dist/marketplace/packs/saas.d.ts +8 -0
- package/dist/marketplace/packs/saas.d.ts.map +1 -0
- package/dist/marketplace/packs/saas.js +516 -0
- package/dist/marketplace/packs/saas.js.map +1 -0
- package/dist/marketplace/packs/soc2.d.ts +8 -0
- package/dist/marketplace/packs/soc2.d.ts.map +1 -0
- package/dist/marketplace/packs/soc2.js +455 -0
- package/dist/marketplace/packs/soc2.js.map +1 -0
- package/dist/marketplace/registry.d.ts +76 -0
- package/dist/marketplace/registry.d.ts.map +1 -0
- package/dist/marketplace/registry.js +454 -0
- package/dist/marketplace/registry.js.map +1 -0
- package/dist/marketplace/types.d.ts +202 -0
- package/dist/marketplace/types.d.ts.map +1 -0
- package/dist/marketplace/types.js +61 -0
- package/dist/marketplace/types.js.map +1 -0
- package/dist/mcp/index.js +1 -1
- package/dist/plugins/builtin/html-formatter.d.ts +11 -0
- package/dist/plugins/builtin/html-formatter.d.ts.map +1 -0
- package/dist/plugins/builtin/html-formatter.js +214 -0
- package/dist/plugins/builtin/html-formatter.js.map +1 -0
- package/dist/plugins/builtin/index.d.ts +21 -0
- package/dist/plugins/builtin/index.d.ts.map +1 -0
- package/dist/plugins/builtin/index.js +31 -0
- package/dist/plugins/builtin/index.js.map +1 -0
- package/dist/plugins/builtin/markdown-formatter.d.ts +11 -0
- package/dist/plugins/builtin/markdown-formatter.d.ts.map +1 -0
- package/dist/plugins/builtin/markdown-formatter.js +77 -0
- package/dist/plugins/builtin/markdown-formatter.js.map +1 -0
- package/dist/plugins/builtin/quality-validator.d.ts +11 -0
- package/dist/plugins/builtin/quality-validator.d.ts.map +1 -0
- package/dist/plugins/builtin/quality-validator.js +355 -0
- package/dist/plugins/builtin/quality-validator.js.map +1 -0
- package/dist/plugins/index.d.ts +98 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +187 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/manager.d.ts +122 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +349 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +348 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +13 -0
- package/dist/plugins/types.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Next.js Template Pack
|
|
3
|
+
* Templates optimized for Next.js applications
|
|
4
|
+
*/
|
|
5
|
+
export const NEXTJS_TEMPLATES = [
|
|
6
|
+
{
|
|
7
|
+
meta: {
|
|
8
|
+
id: 'nextjs-prd',
|
|
9
|
+
name: 'Next.js Product Requirements',
|
|
10
|
+
description: 'PRD template optimized for Next.js applications with App Router',
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
category: 'product',
|
|
13
|
+
scope: 'standard',
|
|
14
|
+
author: 'Intent Solutions',
|
|
15
|
+
tags: ['nextjs', 'react', 'frontend', 'prd'],
|
|
16
|
+
},
|
|
17
|
+
variables: [
|
|
18
|
+
{ name: 'projectName', label: 'Project Name', type: 'string', required: true },
|
|
19
|
+
{ name: 'projectDescription', label: 'Description', type: 'text', required: true },
|
|
20
|
+
{ name: 'routerType', label: 'Router Type', type: 'select', options: [
|
|
21
|
+
{ label: 'App Router (Next.js 13+)', value: 'app' },
|
|
22
|
+
{ label: 'Pages Router (Legacy)', value: 'pages' },
|
|
23
|
+
], default: 'app' },
|
|
24
|
+
{ name: 'rendering', label: 'Rendering Strategy', type: 'multiselect', options: [
|
|
25
|
+
{ label: 'Server Components (RSC)', value: 'rsc' },
|
|
26
|
+
{ label: 'Client Components', value: 'client' },
|
|
27
|
+
{ label: 'Static Site Generation (SSG)', value: 'ssg' },
|
|
28
|
+
{ label: 'Server-Side Rendering (SSR)', value: 'ssr' },
|
|
29
|
+
{ label: 'Incremental Static Regeneration (ISR)', value: 'isr' },
|
|
30
|
+
] },
|
|
31
|
+
{ name: 'features', label: 'Features', type: 'multiselect', options: [
|
|
32
|
+
{ label: 'Authentication', value: 'auth' },
|
|
33
|
+
{ label: 'Database', value: 'database' },
|
|
34
|
+
{ label: 'API Routes', value: 'api' },
|
|
35
|
+
{ label: 'Internationalization', value: 'i18n' },
|
|
36
|
+
{ label: 'Dark Mode', value: 'darkmode' },
|
|
37
|
+
{ label: 'PWA Support', value: 'pwa' },
|
|
38
|
+
{ label: 'Analytics', value: 'analytics' },
|
|
39
|
+
] },
|
|
40
|
+
{ name: 'deployment', label: 'Deployment Target', type: 'select', options: [
|
|
41
|
+
{ label: 'Vercel', value: 'vercel' },
|
|
42
|
+
{ label: 'AWS Amplify', value: 'amplify' },
|
|
43
|
+
{ label: 'Cloudflare Pages', value: 'cloudflare' },
|
|
44
|
+
{ label: 'Docker/Kubernetes', value: 'docker' },
|
|
45
|
+
{ label: 'Self-hosted', value: 'self' },
|
|
46
|
+
] },
|
|
47
|
+
],
|
|
48
|
+
sections: [
|
|
49
|
+
{
|
|
50
|
+
id: 'overview',
|
|
51
|
+
title: 'Product Overview',
|
|
52
|
+
order: 1,
|
|
53
|
+
content: `# {{projectName}}
|
|
54
|
+
|
|
55
|
+
## Overview
|
|
56
|
+
{{projectDescription}}
|
|
57
|
+
|
|
58
|
+
### Technology Stack
|
|
59
|
+
- **Framework:** Next.js 14+ ({{routerType}} Router)
|
|
60
|
+
- **Rendering:** {{join rendering ", "}}
|
|
61
|
+
- **Deployment:** {{deployment}}
|
|
62
|
+
|
|
63
|
+
### Key Features
|
|
64
|
+
{{#each features}}
|
|
65
|
+
- {{this}}
|
|
66
|
+
{{/each}}`,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'architecture',
|
|
70
|
+
title: 'Technical Architecture',
|
|
71
|
+
order: 2,
|
|
72
|
+
content: `## Technical Architecture
|
|
73
|
+
|
|
74
|
+
### Project Structure
|
|
75
|
+
\`\`\`
|
|
76
|
+
{{projectName}}/
|
|
77
|
+
├── app/ # App Router pages
|
|
78
|
+
│ ├── (auth)/ # Auth route group
|
|
79
|
+
│ ├── (dashboard)/ # Dashboard route group
|
|
80
|
+
│ ├── api/ # API routes
|
|
81
|
+
│ ├── layout.tsx # Root layout
|
|
82
|
+
│ └── page.tsx # Home page
|
|
83
|
+
├── components/
|
|
84
|
+
│ ├── ui/ # UI primitives
|
|
85
|
+
│ └── features/ # Feature components
|
|
86
|
+
├── lib/
|
|
87
|
+
│ ├── actions/ # Server actions
|
|
88
|
+
│ ├── db/ # Database client
|
|
89
|
+
│ └── utils/ # Utilities
|
|
90
|
+
├── public/ # Static assets
|
|
91
|
+
└── styles/ # Global styles
|
|
92
|
+
\`\`\`
|
|
93
|
+
|
|
94
|
+
### Rendering Strategy
|
|
95
|
+
{{#if rendering}}
|
|
96
|
+
{{#each rendering}}
|
|
97
|
+
{{#if (equals this "rsc")}}
|
|
98
|
+
- **Server Components:** Default for data fetching, reduce client bundle
|
|
99
|
+
{{/if}}
|
|
100
|
+
{{#if (equals this "client")}}
|
|
101
|
+
- **Client Components:** Interactive UI, hooks, browser APIs
|
|
102
|
+
{{/if}}
|
|
103
|
+
{{#if (equals this "ssg")}}
|
|
104
|
+
- **Static Generation:** Pre-render at build time for static pages
|
|
105
|
+
{{/if}}
|
|
106
|
+
{{#if (equals this "ssr")}}
|
|
107
|
+
- **Server Rendering:** Dynamic content per request
|
|
108
|
+
{{/if}}
|
|
109
|
+
{{#if (equals this "isr")}}
|
|
110
|
+
- **ISR:** Revalidate static pages on interval
|
|
111
|
+
{{/if}}
|
|
112
|
+
{{/each}}
|
|
113
|
+
{{/if}}`,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 'routes',
|
|
117
|
+
title: 'Routes & Pages',
|
|
118
|
+
order: 3,
|
|
119
|
+
content: `## Routes & Pages
|
|
120
|
+
|
|
121
|
+
### Public Routes
|
|
122
|
+
| Route | Page | Rendering |
|
|
123
|
+
|-------|------|-----------|
|
|
124
|
+
| / | Home | SSG |
|
|
125
|
+
| /about | About | SSG |
|
|
126
|
+
| /pricing | Pricing | SSG |
|
|
127
|
+
| /blog | Blog List | ISR |
|
|
128
|
+
| /blog/[slug] | Blog Post | SSG |
|
|
129
|
+
|
|
130
|
+
{{#if (contains features "auth")}}
|
|
131
|
+
### Auth Routes
|
|
132
|
+
| Route | Page | Rendering |
|
|
133
|
+
|-------|------|-----------|
|
|
134
|
+
| /login | Login | Client |
|
|
135
|
+
| /signup | Sign Up | Client |
|
|
136
|
+
| /forgot-password | Password Reset | Client |
|
|
137
|
+
| /verify-email | Email Verification | Client |
|
|
138
|
+
{{/if}}
|
|
139
|
+
|
|
140
|
+
### Protected Routes
|
|
141
|
+
| Route | Page | Rendering |
|
|
142
|
+
|-------|------|-----------|
|
|
143
|
+
| /dashboard | Dashboard | SSR |
|
|
144
|
+
| /settings | User Settings | SSR |
|
|
145
|
+
| /profile | User Profile | SSR |`,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
id: 'api',
|
|
149
|
+
title: 'API Routes',
|
|
150
|
+
order: 4,
|
|
151
|
+
condition: { variable: 'features', operator: 'contains', value: 'api' },
|
|
152
|
+
content: `## API Routes
|
|
153
|
+
|
|
154
|
+
### Route Handlers (App Router)
|
|
155
|
+
\`\`\`typescript
|
|
156
|
+
// app/api/users/route.ts
|
|
157
|
+
export async function GET(request: Request) {
|
|
158
|
+
// Handle GET request
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export async function POST(request: Request) {
|
|
162
|
+
// Handle POST request
|
|
163
|
+
}
|
|
164
|
+
\`\`\`
|
|
165
|
+
|
|
166
|
+
### API Endpoints
|
|
167
|
+
| Endpoint | Method | Description |
|
|
168
|
+
|----------|--------|-------------|
|
|
169
|
+
| /api/users | GET | List users |
|
|
170
|
+
| /api/users | POST | Create user |
|
|
171
|
+
| /api/users/[id] | GET | Get user |
|
|
172
|
+
| /api/users/[id] | PATCH | Update user |
|
|
173
|
+
| /api/users/[id] | DELETE | Delete user |
|
|
174
|
+
|
|
175
|
+
### Server Actions
|
|
176
|
+
For mutations, prefer Server Actions over API routes:
|
|
177
|
+
\`\`\`typescript
|
|
178
|
+
// lib/actions/users.ts
|
|
179
|
+
'use server'
|
|
180
|
+
|
|
181
|
+
export async function createUser(formData: FormData) {
|
|
182
|
+
// Direct database access, no API call
|
|
183
|
+
}
|
|
184
|
+
\`\`\``,
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
id: 'auth',
|
|
188
|
+
title: 'Authentication',
|
|
189
|
+
order: 5,
|
|
190
|
+
condition: { variable: 'features', operator: 'contains', value: 'auth' },
|
|
191
|
+
content: `## Authentication
|
|
192
|
+
|
|
193
|
+
### Auth Provider
|
|
194
|
+
Recommended: NextAuth.js v5 (Auth.js)
|
|
195
|
+
|
|
196
|
+
### Implementation
|
|
197
|
+
\`\`\`typescript
|
|
198
|
+
// auth.ts
|
|
199
|
+
import NextAuth from 'next-auth'
|
|
200
|
+
import GitHub from 'next-auth/providers/github'
|
|
201
|
+
import Credentials from 'next-auth/providers/credentials'
|
|
202
|
+
|
|
203
|
+
export const { handlers, auth, signIn, signOut } = NextAuth({
|
|
204
|
+
providers: [GitHub, Credentials],
|
|
205
|
+
})
|
|
206
|
+
\`\`\`
|
|
207
|
+
|
|
208
|
+
### Protected Routes
|
|
209
|
+
\`\`\`typescript
|
|
210
|
+
// app/(dashboard)/layout.tsx
|
|
211
|
+
import { auth } from '@/auth'
|
|
212
|
+
import { redirect } from 'next/navigation'
|
|
213
|
+
|
|
214
|
+
export default async function DashboardLayout({ children }) {
|
|
215
|
+
const session = await auth()
|
|
216
|
+
if (!session) redirect('/login')
|
|
217
|
+
return <>{children}</>
|
|
218
|
+
}
|
|
219
|
+
\`\`\`
|
|
220
|
+
|
|
221
|
+
### Middleware Protection
|
|
222
|
+
\`\`\`typescript
|
|
223
|
+
// middleware.ts
|
|
224
|
+
export { auth as middleware } from '@/auth'
|
|
225
|
+
|
|
226
|
+
export const config = {
|
|
227
|
+
matcher: ['/dashboard/:path*', '/settings/:path*']
|
|
228
|
+
}
|
|
229
|
+
\`\`\``,
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: 'database',
|
|
233
|
+
title: 'Database',
|
|
234
|
+
order: 6,
|
|
235
|
+
condition: { variable: 'features', operator: 'contains', value: 'database' },
|
|
236
|
+
content: `## Database
|
|
237
|
+
|
|
238
|
+
### Recommended Stack
|
|
239
|
+
- **ORM:** Prisma or Drizzle
|
|
240
|
+
- **Database:** PostgreSQL (Neon/Supabase) or PlanetScale (MySQL)
|
|
241
|
+
- **Caching:** Redis (Upstash)
|
|
242
|
+
|
|
243
|
+
### Prisma Setup
|
|
244
|
+
\`\`\`typescript
|
|
245
|
+
// lib/db/index.ts
|
|
246
|
+
import { PrismaClient } from '@prisma/client'
|
|
247
|
+
|
|
248
|
+
const globalForPrisma = globalThis as { prisma?: PrismaClient }
|
|
249
|
+
|
|
250
|
+
export const prisma = globalForPrisma.prisma ?? new PrismaClient()
|
|
251
|
+
|
|
252
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
253
|
+
globalForPrisma.prisma = prisma
|
|
254
|
+
}
|
|
255
|
+
\`\`\`
|
|
256
|
+
|
|
257
|
+
### Data Fetching
|
|
258
|
+
\`\`\`typescript
|
|
259
|
+
// app/users/page.tsx
|
|
260
|
+
import { prisma } from '@/lib/db'
|
|
261
|
+
|
|
262
|
+
export default async function UsersPage() {
|
|
263
|
+
const users = await prisma.user.findMany()
|
|
264
|
+
return <UserList users={users} />
|
|
265
|
+
}
|
|
266
|
+
\`\`\``,
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
id: 'deployment',
|
|
270
|
+
title: 'Deployment',
|
|
271
|
+
order: 7,
|
|
272
|
+
content: `## Deployment
|
|
273
|
+
|
|
274
|
+
### {{deployment}} Configuration
|
|
275
|
+
|
|
276
|
+
{{#if (equals deployment "vercel")}}
|
|
277
|
+
#### Vercel Setup
|
|
278
|
+
1. Connect GitHub repository
|
|
279
|
+
2. Configure environment variables
|
|
280
|
+
3. Deploy automatically on push
|
|
281
|
+
|
|
282
|
+
\`\`\`json
|
|
283
|
+
// vercel.json
|
|
284
|
+
{
|
|
285
|
+
"buildCommand": "next build",
|
|
286
|
+
"outputDirectory": ".next"
|
|
287
|
+
}
|
|
288
|
+
\`\`\`
|
|
289
|
+
{{/if}}
|
|
290
|
+
|
|
291
|
+
{{#if (equals deployment "docker")}}
|
|
292
|
+
#### Docker Setup
|
|
293
|
+
\`\`\`dockerfile
|
|
294
|
+
# Dockerfile
|
|
295
|
+
FROM node:20-alpine AS builder
|
|
296
|
+
WORKDIR /app
|
|
297
|
+
COPY package*.json ./
|
|
298
|
+
RUN npm ci
|
|
299
|
+
COPY . .
|
|
300
|
+
RUN npm run build
|
|
301
|
+
|
|
302
|
+
FROM node:20-alpine AS runner
|
|
303
|
+
WORKDIR /app
|
|
304
|
+
ENV NODE_ENV=production
|
|
305
|
+
COPY --from=builder /app/.next/standalone ./
|
|
306
|
+
COPY --from=builder /app/.next/static ./.next/static
|
|
307
|
+
COPY --from=builder /app/public ./public
|
|
308
|
+
EXPOSE 3000
|
|
309
|
+
CMD ["node", "server.js"]
|
|
310
|
+
\`\`\`
|
|
311
|
+
{{/if}}
|
|
312
|
+
|
|
313
|
+
### Environment Variables
|
|
314
|
+
\`\`\`env
|
|
315
|
+
# .env.local
|
|
316
|
+
DATABASE_URL=
|
|
317
|
+
NEXTAUTH_SECRET=
|
|
318
|
+
NEXTAUTH_URL=
|
|
319
|
+
\`\`\``,
|
|
320
|
+
},
|
|
321
|
+
],
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
meta: {
|
|
325
|
+
id: 'nextjs-architecture',
|
|
326
|
+
name: 'Next.js Architecture Document',
|
|
327
|
+
description: 'Technical architecture document for Next.js applications',
|
|
328
|
+
version: '1.0.0',
|
|
329
|
+
category: 'technical',
|
|
330
|
+
scope: 'comprehensive',
|
|
331
|
+
author: 'Intent Solutions',
|
|
332
|
+
tags: ['nextjs', 'architecture', 'technical'],
|
|
333
|
+
},
|
|
334
|
+
variables: [
|
|
335
|
+
{ name: 'projectName', label: 'Project Name', type: 'string', required: true },
|
|
336
|
+
{ name: 'scale', label: 'Expected Scale', type: 'select', options: [
|
|
337
|
+
{ label: 'Small (< 10k users)', value: 'small' },
|
|
338
|
+
{ label: 'Medium (10k-100k users)', value: 'medium' },
|
|
339
|
+
{ label: 'Large (100k+ users)', value: 'large' },
|
|
340
|
+
] },
|
|
341
|
+
],
|
|
342
|
+
sections: [
|
|
343
|
+
{
|
|
344
|
+
id: 'overview',
|
|
345
|
+
title: 'Architecture Overview',
|
|
346
|
+
order: 1,
|
|
347
|
+
content: `# {{projectName}} Architecture
|
|
348
|
+
|
|
349
|
+
## System Overview
|
|
350
|
+
This document describes the technical architecture for {{projectName}}, a Next.js application designed for {{scale}} scale.
|
|
351
|
+
|
|
352
|
+
## Architecture Principles
|
|
353
|
+
1. Server-first rendering
|
|
354
|
+
2. Progressive enhancement
|
|
355
|
+
3. Edge-ready deployment
|
|
356
|
+
4. Type safety throughout`,
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
id: 'components',
|
|
360
|
+
title: 'Component Architecture',
|
|
361
|
+
order: 2,
|
|
362
|
+
content: `## Component Architecture
|
|
363
|
+
|
|
364
|
+
### Component Categories
|
|
365
|
+
|
|
366
|
+
#### Server Components (Default)
|
|
367
|
+
- Data fetching
|
|
368
|
+
- Access backend resources
|
|
369
|
+
- Keep sensitive info on server
|
|
370
|
+
- Reduce client bundle
|
|
371
|
+
|
|
372
|
+
#### Client Components
|
|
373
|
+
- Interactivity (onClick, onChange)
|
|
374
|
+
- State management (useState, useEffect)
|
|
375
|
+
- Browser APIs
|
|
376
|
+
- Custom hooks
|
|
377
|
+
|
|
378
|
+
### Composition Pattern
|
|
379
|
+
\`\`\`tsx
|
|
380
|
+
// Server Component wrapping Client Component
|
|
381
|
+
// app/dashboard/page.tsx
|
|
382
|
+
import { getUser } from '@/lib/data'
|
|
383
|
+
import { Dashboard } from '@/components/dashboard'
|
|
384
|
+
|
|
385
|
+
export default async function DashboardPage() {
|
|
386
|
+
const user = await getUser() // Server-side fetch
|
|
387
|
+
return <Dashboard user={user} /> // Pass to client
|
|
388
|
+
}
|
|
389
|
+
\`\`\``,
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
id: 'caching',
|
|
393
|
+
title: 'Caching Strategy',
|
|
394
|
+
order: 3,
|
|
395
|
+
content: `## Caching Strategy
|
|
396
|
+
|
|
397
|
+
### Request Memoization
|
|
398
|
+
Automatic deduplication within a single render pass.
|
|
399
|
+
|
|
400
|
+
### Data Cache
|
|
401
|
+
\`\`\`typescript
|
|
402
|
+
// Cached by default
|
|
403
|
+
const data = await fetch('/api/data')
|
|
404
|
+
|
|
405
|
+
// Opt out of caching
|
|
406
|
+
const data = await fetch('/api/data', { cache: 'no-store' })
|
|
407
|
+
|
|
408
|
+
// Revalidate every hour
|
|
409
|
+
const data = await fetch('/api/data', { next: { revalidate: 3600 } })
|
|
410
|
+
\`\`\`
|
|
411
|
+
|
|
412
|
+
### Full Route Cache
|
|
413
|
+
- Static routes cached at build time
|
|
414
|
+
- Dynamic routes cached on first request
|
|
415
|
+
- Invalidate with revalidatePath() or revalidateTag()
|
|
416
|
+
|
|
417
|
+
### Router Cache
|
|
418
|
+
Client-side cache for prefetched routes (30s default).`,
|
|
419
|
+
},
|
|
420
|
+
],
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
meta: {
|
|
424
|
+
id: 'nextjs-testing',
|
|
425
|
+
name: 'Next.js Testing Strategy',
|
|
426
|
+
description: 'Testing strategy and implementation guide for Next.js',
|
|
427
|
+
version: '1.0.0',
|
|
428
|
+
category: 'testing',
|
|
429
|
+
scope: 'standard',
|
|
430
|
+
author: 'Intent Solutions',
|
|
431
|
+
tags: ['nextjs', 'testing', 'jest', 'playwright'],
|
|
432
|
+
},
|
|
433
|
+
variables: [
|
|
434
|
+
{ name: 'projectName', label: 'Project Name', type: 'string', required: true },
|
|
435
|
+
],
|
|
436
|
+
sections: [
|
|
437
|
+
{
|
|
438
|
+
id: 'strategy',
|
|
439
|
+
title: 'Testing Strategy',
|
|
440
|
+
order: 1,
|
|
441
|
+
content: `# {{projectName}} Testing Strategy
|
|
442
|
+
|
|
443
|
+
## Testing Pyramid
|
|
444
|
+
- **E2E Tests:** 10% - Critical user flows
|
|
445
|
+
- **Integration:** 30% - Component interactions
|
|
446
|
+
- **Unit Tests:** 60% - Business logic
|
|
447
|
+
|
|
448
|
+
## Tools
|
|
449
|
+
- **Unit/Integration:** Vitest + React Testing Library
|
|
450
|
+
- **E2E:** Playwright
|
|
451
|
+
- **Visual:** Chromatic (Storybook)`,
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
id: 'unit',
|
|
455
|
+
title: 'Unit Testing',
|
|
456
|
+
order: 2,
|
|
457
|
+
content: `## Unit Testing
|
|
458
|
+
|
|
459
|
+
### Setup
|
|
460
|
+
\`\`\`typescript
|
|
461
|
+
// vitest.config.ts
|
|
462
|
+
import { defineConfig } from 'vitest/config'
|
|
463
|
+
import react from '@vitejs/plugin-react'
|
|
464
|
+
|
|
465
|
+
export default defineConfig({
|
|
466
|
+
plugins: [react()],
|
|
467
|
+
test: {
|
|
468
|
+
environment: 'jsdom',
|
|
469
|
+
setupFiles: ['./vitest.setup.ts'],
|
|
470
|
+
},
|
|
471
|
+
})
|
|
472
|
+
\`\`\`
|
|
473
|
+
|
|
474
|
+
### Component Test Example
|
|
475
|
+
\`\`\`typescript
|
|
476
|
+
// components/button.test.tsx
|
|
477
|
+
import { render, screen } from '@testing-library/react'
|
|
478
|
+
import userEvent from '@testing-library/user-event'
|
|
479
|
+
import { Button } from './button'
|
|
480
|
+
|
|
481
|
+
describe('Button', () => {
|
|
482
|
+
it('calls onClick when clicked', async () => {
|
|
483
|
+
const onClick = vi.fn()
|
|
484
|
+
render(<Button onClick={onClick}>Click me</Button>)
|
|
485
|
+
|
|
486
|
+
await userEvent.click(screen.getByRole('button'))
|
|
487
|
+
|
|
488
|
+
expect(onClick).toHaveBeenCalledOnce()
|
|
489
|
+
})
|
|
490
|
+
})
|
|
491
|
+
\`\`\``,
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
id: 'e2e',
|
|
495
|
+
title: 'E2E Testing',
|
|
496
|
+
order: 3,
|
|
497
|
+
content: `## E2E Testing with Playwright
|
|
498
|
+
|
|
499
|
+
### Setup
|
|
500
|
+
\`\`\`typescript
|
|
501
|
+
// playwright.config.ts
|
|
502
|
+
import { defineConfig } from '@playwright/test'
|
|
503
|
+
|
|
504
|
+
export default defineConfig({
|
|
505
|
+
testDir: './e2e',
|
|
506
|
+
webServer: {
|
|
507
|
+
command: 'npm run dev',
|
|
508
|
+
url: 'http://localhost:3000',
|
|
509
|
+
},
|
|
510
|
+
})
|
|
511
|
+
\`\`\`
|
|
512
|
+
|
|
513
|
+
### E2E Test Example
|
|
514
|
+
\`\`\`typescript
|
|
515
|
+
// e2e/auth.spec.ts
|
|
516
|
+
import { test, expect } from '@playwright/test'
|
|
517
|
+
|
|
518
|
+
test('user can sign in', async ({ page }) => {
|
|
519
|
+
await page.goto('/login')
|
|
520
|
+
await page.fill('[name="email"]', 'user@example.com')
|
|
521
|
+
await page.fill('[name="password"]', 'password')
|
|
522
|
+
await page.click('button[type="submit"]')
|
|
523
|
+
|
|
524
|
+
await expect(page).toHaveURL('/dashboard')
|
|
525
|
+
})
|
|
526
|
+
\`\`\``,
|
|
527
|
+
},
|
|
528
|
+
],
|
|
529
|
+
},
|
|
530
|
+
];
|
|
531
|
+
export default NEXTJS_TEMPLATES;
|
|
532
|
+
//# sourceMappingURL=nextjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../../src/marketplace/packs/nextjs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD;QACE,IAAI,EAAE;YACJ,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,8BAA8B;YACpC,WAAW,EAAE,iEAAiE;YAC9E,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;SAC7C;QACD,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9E,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClF,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;oBACnE,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,KAAK,EAAE;oBACnD,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE;iBACnD,EAAE,OAAO,EAAE,KAAK,EAAE;YACnB,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;oBAC9E,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE;oBAClD,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE;oBAC/C,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE;oBACvD,EAAE,KAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,KAAK,EAAE;oBACtD,EAAE,KAAK,EAAE,uCAAuC,EAAE,KAAK,EAAE,KAAK,EAAE;iBACjE,EAAC;YACF,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;oBACnE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE;oBAC1C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;oBACxC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;oBACrC,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE;oBAChD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;oBACzC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;oBACtC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;iBAC3C,EAAC;YACF,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;oBACzE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACpC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE;oBAC1C,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;oBAClD,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE;oBAC/C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;iBACxC,EAAC;SACH;QACD,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,UAAU;gBACd,KAAK,EAAE,kBAAkB;gBACzB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;UAaP;aACH;YACD;gBACE,EAAE,EAAE,cAAc;gBAClB,KAAK,EAAE,wBAAwB;gBAC/B,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyCT;aACD;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;kCA0BiB;aAC3B;YACD;gBACE,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;gBACvE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCV;aACA;YACD;gBACE,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;gBACxE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCV;aACA;YACD;gBACE,EAAE,EAAE,UAAU;gBACd,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC5E,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BV;aACA;YACD;gBACE,EAAE,EAAE,YAAY;gBAChB,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+CV;aACA;SACF;KACF;IACD;QACE,IAAI,EAAE;YACJ,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,+BAA+B;YACrC,WAAW,EAAE,0DAA0D;YACvE,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC;SAC9C;QACD,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;oBACjE,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE;oBAChD,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACrD,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE;iBACjD,EAAC;SACH;QACD,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,UAAU;gBACd,KAAK,EAAE,uBAAuB;gBAC9B,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;0BASS;aACnB;YACD;gBACE,EAAE,EAAE,YAAY;gBAChB,KAAK,EAAE,wBAAwB;gBAC/B,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BV;aACA;YACD;gBACE,EAAE,EAAE,SAAS;gBACb,KAAK,EAAE,kBAAkB;gBACzB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;uDAuBsC;aAChD;SACF;KACF;IACD;QACE,IAAI,EAAE;YACJ,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,uDAAuD;YACpE,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC;SAClD;QACD,SAAS,EAAE;YACT,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC/E;QACD,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,UAAU;gBACd,KAAK,EAAE,kBAAkB;gBACzB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;oCAUmB;aAC7B;YACD;gBACE,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCV;aACA;YACD;gBACE,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BV;aACA;SACF;KACF;CACF,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ruby on Rails Template Pack
|
|
3
|
+
* Templates optimized for Rails applications
|
|
4
|
+
*/
|
|
5
|
+
import type { CustomTemplate } from '../../enterprise/templates/types.js';
|
|
6
|
+
export declare const RAILS_TEMPLATES: CustomTemplate[];
|
|
7
|
+
export default RAILS_TEMPLATES;
|
|
8
|
+
//# sourceMappingURL=rails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../../src/marketplace/packs/rails.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,eAAO,MAAM,eAAe,EAAE,cAAc,EA21B3C,CAAC;AAEF,eAAe,eAAe,CAAC"}
|