cistack 6.0.0 → 6.2.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/.github/dependabot.yml +42 -0
- package/.github/workflows/ci.yml +2 -1
- package/.github/workflows/pipeline.yml +250 -0
- package/README.md +4 -0
- package/package.json +7 -2
- package/product-site/.github/dependabot.yml +27 -0
- package/product-site/.github/workflows/pipeline.yml +215 -0
- package/product-site/.lighthouserc.json +22 -0
- package/product-site/README.md +1 -0
- package/product-site/app/[lang]/layout.tsx +95 -0
- package/product-site/app/[lang]/page.tsx +19 -0
- package/product-site/app/favicon.ico +0 -0
- package/product-site/app/globals.css +228 -0
- package/product-site/app/manifest.ts +20 -0
- package/product-site/app/robots.ts +12 -0
- package/product-site/app/sitemap.ts +12 -0
- package/product-site/components/CanvasText.tsx +219 -0
- package/product-site/components/CopyButton.tsx +101 -0
- package/product-site/components/HomeClient.tsx +664 -0
- package/product-site/components/InstallToggle.tsx +123 -0
- package/product-site/components/MotionRevealClient.tsx +53 -0
- package/product-site/components/TerminalCard.tsx +65 -0
- package/product-site/components/TerminalCardMotion.tsx +324 -0
- package/product-site/components/site-motion.tsx +229 -0
- package/product-site/components/ui/accordion.tsx +74 -0
- package/product-site/components/ui/badge.tsx +52 -0
- package/product-site/components/ui/button.tsx +60 -0
- package/product-site/components/ui/card.tsx +103 -0
- package/product-site/components/ui/checkbox.tsx +29 -0
- package/product-site/components/ui/separator.tsx +25 -0
- package/product-site/components/ui/table.tsx +116 -0
- package/product-site/components/ui/tabs.tsx +82 -0
- package/product-site/components.json +25 -0
- package/product-site/dictionaries/br.json +276 -0
- package/product-site/dictionaries/cn.json +276 -0
- package/product-site/dictionaries/de.json +276 -0
- package/product-site/dictionaries/en.json +274 -0
- package/product-site/dictionaries/es.json +276 -0
- package/product-site/dictionaries/fr.json +276 -0
- package/product-site/dictionaries/pt.json +276 -0
- package/product-site/eslint.config.mjs +18 -0
- package/product-site/lib/dictionaries.ts +18 -0
- package/product-site/lib/dictionary-types.ts +3 -0
- package/product-site/lib/utils.ts +6 -0
- package/product-site/middleware.ts +39 -0
- package/product-site/next.config.mjs +14 -0
- package/product-site/package-lock.json +14201 -0
- package/product-site/package.json +42 -0
- package/product-site/postcss.config.mjs +7 -0
- package/product-site/public/file.svg +1 -0
- package/product-site/public/globe.svg +1 -0
- package/product-site/public/next.svg +1 -0
- package/product-site/public/og-image.png +0 -0
- package/product-site/public/vercel.svg +1 -0
- package/product-site/public/window.svg +1 -0
- package/product-site/scripts/sync-i18n.mjs +58 -0
- package/product-site/scripts/validate-i18n.mjs +45 -0
- package/product-site/tsconfig.json +34 -0
- package/product-site/types/negotiator.d.ts +14 -0
- package/product-site/vercel.json +5 -0
- package/src/index.js +12 -13
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
{
|
|
2
|
+
"copy_button": {
|
|
3
|
+
"idle": "Copiar",
|
|
4
|
+
"success": "Copiado"
|
|
5
|
+
},
|
|
6
|
+
"navigation": {
|
|
7
|
+
"repository": "GitHub",
|
|
8
|
+
"registry": "npm",
|
|
9
|
+
"reference": "Referência",
|
|
10
|
+
"version": "Versão",
|
|
11
|
+
"status": "Estável"
|
|
12
|
+
},
|
|
13
|
+
"hero": {
|
|
14
|
+
"product_name": "cistack",
|
|
15
|
+
"tagline": "Gere pipelines CI/CD no GitHub Actions analisando o código que já tem.",
|
|
16
|
+
"intro": "O cistack analisa o seu projeto, deteta o stack e escreve workflows GitHub Actions prontos para produção: CI, implementação, Docker e releases. Pensado para repositórios reais, não demonstrações: lê ficheiros de lock, sinais de framework, configuração de release, workspaces monorepo, alojamento e metadados de ramos Git antes de gerar o YAML.",
|
|
17
|
+
"npx_command": "npx cistack",
|
|
18
|
+
"weekly_downloads": "Transferências semanais",
|
|
19
|
+
"per_week": "última semana no npm",
|
|
20
|
+
"live_registry": "Em direto a partir do registo"
|
|
21
|
+
},
|
|
22
|
+
"preview": {
|
|
23
|
+
"title": "Pré-visualização",
|
|
24
|
+
"caption": "Saída CLI animada após analisar um projeto típico."
|
|
25
|
+
},
|
|
26
|
+
"why": {
|
|
27
|
+
"title": "Porquê o cistack",
|
|
28
|
+
"items": [
|
|
29
|
+
"Deteta automaticamente linguagens, frameworks, ferramentas de teste, fornecedores de alojamento e ferramentas de release",
|
|
30
|
+
"Utiliza o ramo Git predefinido do repositório quando disponível, em vez de assumir main",
|
|
31
|
+
"Suporta monorepos, workflows por pacote e comandos conscientes do gestor de pacotes",
|
|
32
|
+
"Gera configuração Dependabot alinhada com o ecossistema, incluindo Bun quando existe bun.lock",
|
|
33
|
+
"Funde de forma inteligente os workflows gerados com os ficheiros existentes sem sobrescrever à cega",
|
|
34
|
+
"Gera pipelines de implementação para Vercel, Netlify, Firebase, GitHub Pages, AWS, Azure, Heroku, Render e Railway",
|
|
35
|
+
"Inclui comandos integrados de auditoria e atualização de workflows",
|
|
36
|
+
"Suporta cistack.config.js tipado via index.d.ts",
|
|
37
|
+
"Com suíte de regressão automatizada (ramos, release, fusão inteligente, scripts monorepo, testes smoke da CLI)"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"install": {
|
|
41
|
+
"title": "Instalação",
|
|
42
|
+
"quick_command": "Instalação rápida",
|
|
43
|
+
"node_note": "O cistack suporta Node.js 16+; o projeto é verificado continuamente em Node.js 18, 20 e 22 no GitHub Actions."
|
|
44
|
+
},
|
|
45
|
+
"cli": {
|
|
46
|
+
"section_title": "Utilização da CLI",
|
|
47
|
+
"items": [
|
|
48
|
+
{
|
|
49
|
+
"title": "Gerar workflows",
|
|
50
|
+
"paragraphs": [
|
|
51
|
+
"generate é o comando predefinido: funcionam npx cistack e npx cistack generate.",
|
|
52
|
+
"Opções comuns:"
|
|
53
|
+
],
|
|
54
|
+
"snippets": [
|
|
55
|
+
"npx cistack",
|
|
56
|
+
"npx cistack generate",
|
|
57
|
+
"npx cistack generate --path /path/to/project",
|
|
58
|
+
"npx cistack generate --dry-run",
|
|
59
|
+
"npx cistack generate --explain",
|
|
60
|
+
"npx cistack generate --output .github/workflows",
|
|
61
|
+
"npx cistack generate --no-prompt"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"title": "Auditar workflows existentes",
|
|
66
|
+
"paragraphs": [
|
|
67
|
+
"Verifica o diretório de workflows gerados (concorrência em falta, ações desatualizadas, versões antigas do Node, cache de dependências, etc.). Se definir outputDir em cistack.config.js, audit e upgrade também usam esse diretório."
|
|
68
|
+
],
|
|
69
|
+
"snippets": ["npx cistack audit"]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"title": "Atualizar ações do workflow",
|
|
73
|
+
"paragraphs": [
|
|
74
|
+
"Atualiza as GitHub Actions conhecidas para as últimas versões estáveis suportadas."
|
|
75
|
+
],
|
|
76
|
+
"snippets": ["npx cistack upgrade", "npx cistack upgrade --dry-run"]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"title": "Criar configuração inicial",
|
|
80
|
+
"paragraphs": [
|
|
81
|
+
"Escreve cistack.config.js com as chaves de substituição suportadas."
|
|
82
|
+
],
|
|
83
|
+
"snippets": ["npx cistack init"]
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
"generated": {
|
|
88
|
+
"section_title": "O que é gerado",
|
|
89
|
+
"items": [
|
|
90
|
+
{
|
|
91
|
+
"title": "pipeline.yml",
|
|
92
|
+
"paragraphs": [
|
|
93
|
+
"Por predefinição, o cistack gera um único workflow GitHub Actions que agrupa trabalhos de CI, implementação, Docker e release para acompanhar todo o pipeline num só ficheiro.",
|
|
94
|
+
"Inclui lint, test, build, E2E, implementação, Docker e release quando o stack permite, usa o ramo predefinido detetado ou configurado, mantém pré-visualizações e releases no mesmo ficheiro e documenta os segredos necessários no cabeçalho."
|
|
95
|
+
],
|
|
96
|
+
"snippets": []
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"title": "dependabot.yml",
|
|
100
|
+
"paragraphs": [
|
|
101
|
+
"O Dependabot permanece num ficheiro separado em .github/dependabot.yml, pois não é um workflow GitHub Actions.",
|
|
102
|
+
"Para pré-visualizações em PRs Dependabot, adicione também credenciais como segredos Dependabot, não só Actions. Na Vercel: VERCEL_TOKEN, VERCEL_ORG_ID e VERCEL_PROJECT_ID."
|
|
103
|
+
],
|
|
104
|
+
"snippets": []
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"title": "Modo dividido (split)",
|
|
108
|
+
"paragraphs": [
|
|
109
|
+
"Se preferir o esquema antigo multi-ficheiro, defina workflowLayout como split em cistack.config.js. Em modo split, o cistack volta a escrever ci.yml, deploy.yml, docker.yml e release.yml em separado."
|
|
110
|
+
],
|
|
111
|
+
"snippets": [
|
|
112
|
+
"module.exports = {\n workflowLayout: 'split',\n};"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"detection": {
|
|
118
|
+
"section_title": "Deteção suportada",
|
|
119
|
+
"hosting_title": "Alojamento",
|
|
120
|
+
"hosting_tags": [
|
|
121
|
+
"Firebase",
|
|
122
|
+
"Vercel",
|
|
123
|
+
"Netlify",
|
|
124
|
+
"GitHub Pages",
|
|
125
|
+
"AWS",
|
|
126
|
+
"GCP App Engine",
|
|
127
|
+
"Azure",
|
|
128
|
+
"Heroku",
|
|
129
|
+
"Render",
|
|
130
|
+
"Railway",
|
|
131
|
+
"Docker"
|
|
132
|
+
],
|
|
133
|
+
"frameworks_title": "Frameworks",
|
|
134
|
+
"frameworks_tags": [
|
|
135
|
+
"Next.js",
|
|
136
|
+
"Nuxt",
|
|
137
|
+
"SvelteKit",
|
|
138
|
+
"Remix",
|
|
139
|
+
"Astro",
|
|
140
|
+
"Vite",
|
|
141
|
+
"React",
|
|
142
|
+
"Vue",
|
|
143
|
+
"Angular",
|
|
144
|
+
"Svelte",
|
|
145
|
+
"Gatsby",
|
|
146
|
+
"Express",
|
|
147
|
+
"Fastify",
|
|
148
|
+
"NestJS",
|
|
149
|
+
"Hono",
|
|
150
|
+
"Koa",
|
|
151
|
+
"Django",
|
|
152
|
+
"Flask",
|
|
153
|
+
"FastAPI",
|
|
154
|
+
"Rails",
|
|
155
|
+
"Spring Boot",
|
|
156
|
+
"Laravel",
|
|
157
|
+
"Go",
|
|
158
|
+
"Rust"
|
|
159
|
+
],
|
|
160
|
+
"testing_title": "Ferramentas de teste",
|
|
161
|
+
"testing_tags": [
|
|
162
|
+
"Jest",
|
|
163
|
+
"Vitest",
|
|
164
|
+
"Mocha",
|
|
165
|
+
"Cypress",
|
|
166
|
+
"Playwright",
|
|
167
|
+
"Pytest",
|
|
168
|
+
"RSpec",
|
|
169
|
+
"Go test",
|
|
170
|
+
"Cargo test",
|
|
171
|
+
"PHPUnit",
|
|
172
|
+
"Maven / JUnit",
|
|
173
|
+
"Storybook"
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
"configuration": {
|
|
177
|
+
"section_title": "Configuração",
|
|
178
|
+
"intro": "Crie cistack.config.js quando quiser substituir a deteção.",
|
|
179
|
+
"example_caption": "Exemplo",
|
|
180
|
+
"keys_title": "Chaves de configuração de nível superior",
|
|
181
|
+
"keys": [
|
|
182
|
+
"nodeVersion",
|
|
183
|
+
"packageManager",
|
|
184
|
+
"hosting",
|
|
185
|
+
"frameworks",
|
|
186
|
+
"testing",
|
|
187
|
+
"branches",
|
|
188
|
+
"workflowLayout",
|
|
189
|
+
"cache",
|
|
190
|
+
"monorepo",
|
|
191
|
+
"release",
|
|
192
|
+
"secrets",
|
|
193
|
+
"outputDir"
|
|
194
|
+
],
|
|
195
|
+
"branches_title": "Comportamento dos ramos",
|
|
196
|
+
"branches": [
|
|
197
|
+
"Se branches estiver definido na config, o cistack usa-o exatamente",
|
|
198
|
+
"Caso contrário, lê o ramo predefinido do repositório a partir dos metadados Git quando possível",
|
|
199
|
+
"Sem metadados Git, recua para valores seguros como main, master e develop consoante o tipo de workflow"
|
|
200
|
+
],
|
|
201
|
+
"config_snippet": "/** @type {import('cistack').Config} */\nmodule.exports = {\n nodeVersion: '20',\n packageManager: 'pnpm',\n branches: ['main', 'staging'],\n workflowLayout: 'single',\n hosting: ['Vercel'],\n outputDir: '.github/workflows',\n cache: {\n npm: true,\n cargo: true,\n pip: true,\n },\n monorepo: {\n perPackage: true,\n },\n release: {\n tool: 'semantic-release',\n },\n};"
|
|
202
|
+
},
|
|
203
|
+
"secrets": {
|
|
204
|
+
"section_title": "Segredos",
|
|
205
|
+
"body": "Os workflows de implementação e release gerados documentam os segredos necessários no topo de cada ficheiro. Adicione-os no GitHub: Definições → Secrets and variables → Actions."
|
|
206
|
+
},
|
|
207
|
+
"quality": {
|
|
208
|
+
"section_title": "Desenvolvimento e qualidade",
|
|
209
|
+
"intro": "O projeto inclui uma suíte de regressão nas áreas historicamente mais frágeis:",
|
|
210
|
+
"items": [
|
|
211
|
+
"tratamento de substituições de configuração",
|
|
212
|
+
"deteção do ramo predefinido",
|
|
213
|
+
"seleção do ramo de implementação",
|
|
214
|
+
"ramo de produção Netlify",
|
|
215
|
+
"comportamento de fusão inteligente",
|
|
216
|
+
"procura de scripts de build por pacote em monorepo",
|
|
217
|
+
"deteção da configuração de release",
|
|
218
|
+
"geração do workflow de release",
|
|
219
|
+
"testes smoke da CLI em dry-run"
|
|
220
|
+
],
|
|
221
|
+
"commands_title": "Executar verificações localmente",
|
|
222
|
+
"commands": [
|
|
223
|
+
"npm test",
|
|
224
|
+
"npm run test:smoke",
|
|
225
|
+
"node bin/ciflow.js audit --path .",
|
|
226
|
+
"node bin/ciflow.js upgrade --path . --dry-run"
|
|
227
|
+
],
|
|
228
|
+
"repo_note": "Com o pacote publicado, o executável é cistack. No repositório cistack, o ponto de entrada local é bin/ciflow.js."
|
|
229
|
+
},
|
|
230
|
+
"footer": {
|
|
231
|
+
"license": "Licença MIT",
|
|
232
|
+
"tagline": "Geração de workflows CI/CD a partir do repositório que já tem.",
|
|
233
|
+
"architect_credit": "Criado por",
|
|
234
|
+
"architect_name": "Edwin Vakayil",
|
|
235
|
+
"copyright_suffix": "cistack. Todos os direitos reservados quando aplicável."
|
|
236
|
+
},
|
|
237
|
+
"install_toggle": {
|
|
238
|
+
"recommended": "recomendado",
|
|
239
|
+
"npm_global": "npm install -g",
|
|
240
|
+
"recommended_badge": "Recomendado",
|
|
241
|
+
"global_badge": "Global",
|
|
242
|
+
"npx_desc": "Obtém sempre a versão mais recente. Sem instalação global.",
|
|
243
|
+
"npm_desc": "Ideal se usar o cistack em muitos repositórios."
|
|
244
|
+
},
|
|
245
|
+
"terminal": {
|
|
246
|
+
"label": "TERMINAL",
|
|
247
|
+
"mission": "MISSÃO_NÚCLEO // L_02",
|
|
248
|
+
"project_scanned": "✔ Projeto analisado",
|
|
249
|
+
"stack_detected": "✔ Stack detetado",
|
|
250
|
+
"detected_stack": "Stack detetado",
|
|
251
|
+
"languages": "Linguagens:",
|
|
252
|
+
"frameworks": "Frameworks:",
|
|
253
|
+
"hosting": "Alojamento:",
|
|
254
|
+
"testing": "Testes:",
|
|
255
|
+
"release_tool": "Ferramenta de release:",
|
|
256
|
+
"look_correct": "Está correto? Gerar o pipeline com estes parâmetros? Sim",
|
|
257
|
+
"generated_workflows": "✔ Gerados 3 workflow(s) de CI",
|
|
258
|
+
"smart_merged": "↻ Fusão inteligente: ci.yml",
|
|
259
|
+
"updated_on": "atualizado \"on\" de nível superior",
|
|
260
|
+
"updated_concurrency": "atualizado \"concurrency\" de nível superior",
|
|
261
|
+
"added_lint": "adicionado job \"lint\"",
|
|
262
|
+
"updated_build": "job \"build\" → atualizado \"name\"",
|
|
263
|
+
"updated_needs": "job \"build\" → atualizado \"needs\"",
|
|
264
|
+
"added_checkout": "job \"build\" → adicionado passo \"Checkout code\"",
|
|
265
|
+
"added_node": "job \"build\" → adicionado passo \"Set up Node.js\"",
|
|
266
|
+
"updated_step_build": "job \"build\" → atualizado passo \"Build\"",
|
|
267
|
+
"added_upload": "job \"build\" → adicionado passo \"Upload build artifact\"",
|
|
268
|
+
"written_deploy": "Escrito: deploy.yml",
|
|
269
|
+
"written_security": "Escrito: security.yml",
|
|
270
|
+
"written_dependabot": "Escrito: .github/dependabot.yml",
|
|
271
|
+
"done_msg": "Pronto! O seu pipeline GitHub Actions está preparado.",
|
|
272
|
+
"workflows_path": "Workflows → cistack/.github/workflows",
|
|
273
|
+
"dependabot_path": "Dependabot → cistack/.github/dependabot.yml",
|
|
274
|
+
"processing": "A processar saída…"
|
|
275
|
+
}
|
|
276
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineConfig, globalIgnores } from "eslint/config";
|
|
2
|
+
import nextVitals from "eslint-config-next/core-web-vitals";
|
|
3
|
+
import nextTs from "eslint-config-next/typescript";
|
|
4
|
+
|
|
5
|
+
const eslintConfig = defineConfig([
|
|
6
|
+
...nextVitals,
|
|
7
|
+
...nextTs,
|
|
8
|
+
// Override default ignores of eslint-config-next.
|
|
9
|
+
globalIgnores([
|
|
10
|
+
// Default ignores of eslint-config-next:
|
|
11
|
+
".next/**",
|
|
12
|
+
"out/**",
|
|
13
|
+
"build/**",
|
|
14
|
+
"next-env.d.ts",
|
|
15
|
+
]),
|
|
16
|
+
]);
|
|
17
|
+
|
|
18
|
+
export default eslintConfig;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import 'server-only'
|
|
2
|
+
|
|
3
|
+
const dictionaries = {
|
|
4
|
+
en: () => import('../dictionaries/en.json').then((module) => module.default),
|
|
5
|
+
fr: () => import('../dictionaries/fr.json').then((module) => module.default),
|
|
6
|
+
es: () => import('../dictionaries/es.json').then((module) => module.default),
|
|
7
|
+
pt: () => import('../dictionaries/pt.json').then((module) => module.default),
|
|
8
|
+
br: () => import('../dictionaries/br.json').then((module) => module.default),
|
|
9
|
+
de: () => import('../dictionaries/de.json').then((module) => module.default),
|
|
10
|
+
cn: () => import('../dictionaries/cn.json').then((module) => module.default),
|
|
11
|
+
} as const;
|
|
12
|
+
|
|
13
|
+
export type Locale = keyof typeof dictionaries;
|
|
14
|
+
|
|
15
|
+
export const hasLocale = (locale: string): locale is Locale =>
|
|
16
|
+
locale in dictionaries
|
|
17
|
+
|
|
18
|
+
export const getDictionary = async (locale: Locale) => dictionaries[locale]()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import type { NextRequest } from "next/server";
|
|
3
|
+
import { match } from "@formatjs/intl-localematcher";
|
|
4
|
+
import Negotiator from "negotiator";
|
|
5
|
+
|
|
6
|
+
const locales = ["en", "fr", "es", "pt", "br", "de", "cn"];
|
|
7
|
+
const defaultLocale = "en";
|
|
8
|
+
|
|
9
|
+
function getLocale(request: NextRequest) {
|
|
10
|
+
const negotiatorHeaders: Record<string, string> = {};
|
|
11
|
+
request.headers.forEach((value, key) => {
|
|
12
|
+
negotiatorHeaders[key] = value;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const languages = new Negotiator({ headers: negotiatorHeaders }).languages();
|
|
16
|
+
|
|
17
|
+
return match(languages, locales, defaultLocale);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function middleware(request: NextRequest) {
|
|
21
|
+
const { pathname } = request.nextUrl;
|
|
22
|
+
const pathnameHasLocale = locales.some(
|
|
23
|
+
(locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
if (pathnameHasLocale) {
|
|
27
|
+
return NextResponse.next();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const locale = getLocale(request);
|
|
31
|
+
request.nextUrl.pathname = `/${locale}${pathname}`;
|
|
32
|
+
return NextResponse.redirect(request.nextUrl);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const config = {
|
|
36
|
+
matcher: [
|
|
37
|
+
"/((?!_next|api|.*\\..*).*)",
|
|
38
|
+
],
|
|
39
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
|
|
4
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
|
|
6
|
+
/** @type {import('next').NextConfig} */
|
|
7
|
+
const nextConfig = {
|
|
8
|
+
experimental: {
|
|
9
|
+
inlineCss: true,
|
|
10
|
+
optimizePackageImports: ["@base-ui/react", "lucide-react"],
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default nextConfig;
|